Можно ли устанавливать только те компоненты материала, которые мы используем? - PullRequest
0 голосов
/ 05 декабря 2018

В моем проекте iOS в Podfile у меня есть что-то вроде этого:

pod 'Material', '~> 2.16'

Но сейчас я использую только компонент TextField.

Есть ли способ установить еготолько со всеми его функциями?

1 Ответ

0 голосов
/ 05 декабря 2018

Согласно Material.podspec , есть только один большой модуль, а не подспец.

Вы можете создать свою собственную итерацию.

Создать MaterialTextField.podspecфайл с (это содержимое Material.podspec с небольшой модификацией, помеченной ***).Вы можете избавиться от подспецификации и использовать только «спецификацию», поскольку другой подспец отсутствует, но я не хотел слишком сильно изменять файл.

Pod::Spec.new do |s|
    s.name = 'MaterialTextField' ***
    s.version = '2.16.4'
    s.swift_version = '4.0'
    s.license = 'BSD-3-Clause'
    s.summary = 'A UI/UX framework for creating beautiful applications.'
    s.homepage = 'http://cosmicmind.com'
    s.social_media_url = 'https://www.facebook.com/cosmicmindcom'
    s.authors = { 'CosmicMind, Inc.' => 'support@cosmicmind.com' }
    s.source = { :git => 'https://github.com/CosmicMind/Material.git', :tag => s.version }

    s.default_subspec = 'Core'
    s.platform = :ios, '8.0'

    s.subspec 'Core' do |s|
        s.ios.deployment_target = '8.0'
        s.ios.source_files = 'Sources/**/iOS/TextField.swift' ***
        s.requires_arc = true
        s.resource_bundles = {
            'com.cosmicmind.material.icons' => ['Sources/**/*.xcassets'],
            'com.cosmicmind.material.fonts' => ['Sources/**/*.ttf']
        }
    s.framework = 'UIKit' ***
        # s.dependency 'Motion', '~> 1.4.3' ***
    end
end

Я просто изменил строки с помощью***.
Я не уверен, что вам нужен s.framework для UIKit, и не знаю, можете ли вы обойти зависимость Motion.
Возможно, вы также захотите удалить шрифты/xcassets.

Затем вы можете сделать

$> pod spec lint --verbose

Вы должны получить такие ошибки:

> ERROR | [MaterialTextField/Core] xcodebuild:  MaterialTextField/Sources/iOS/TextField.swift:295:46: error: use of undeclared type 'IconButton'

Таким образом, существует объект IconButton, которыйНе знаю (это зависит от него), поэтому вам нужно изменить podpsec:

s.ios.source_files = 'Sources/**/iOS/TextField.swift', 'Sources/**/iOS/IconButton.swift'

Чтобы добавить его.

Но для этого может потребоваться и другой импорт, так что вам нужно будетвыполнить много pod spec lint до конца и т. д., и, возможно, потребуется исправить другие виды ошибок.

Возможно, в конце у вас будет целый модуль, потому что существует множество «взаимозависимостей».

В Objective-C поиск @class и #import "File.h" мог бы быть проще, чем в Swift, где импорт "неявный".

Кроме того, вы можете сохранить эту версию и, возможно, придется повторить все это снова в следующем обновлении своего модуля.

Наконец, если терпением и чудом вы получаете то, что хотите, вы можете добавить его в свой подфайл, используя:

pod 'MaterialTextField', :podspec => 'Relative/Path/To/MaterialTextField.podspec'

Я не уверен насчет этого (или :pathвместо :podspec), но если я правильно помню, это следует сделать.

Будьте осторожны, вы можете прекратить использование лицензии.

Вы также можете спроситьавтор (открыть тикет?), чтобы разбить их модуль на несколько пакетов, например MaterialComponents.podspec (который я только что видел несколько минут назад, отвечая на другой вопрос).

РЕДАКТИРОВАТЬ:
Другой способ - избегать слишком много pod spec lint, чтобы клонировать репозиторий, создать проект, добавить TextField.swift, проверить, компилируется ли он, добавить недостающие файлы, проверить, компилируется ли он и т. Д.быть намного быстрее.

...