是否可以只安装我们使用的 Material 组件?

Is it possible to install only components of Material that we use?

在我的 iOS 项目中,在 Podfile 中,我有这样的东西:

pod 'Material', '~> 2.16'

但是现在,我只使用 TextField 组件。

有没有办法只安装它,并具有它的所有功能?

根据Material.podspec,只有一个big pod,不是subspec。

您可以创建自己的迭代。

创建一个 MaterialTextField.podspec 文件(它是 Material.podspec 的内容,稍作修改并用 *** 注释)。您可以 git 删除子规范,只使用 "spec" 因为没有其他子规范,但我不想对文件进行太多更改。

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

我刚刚修改了带有 *** 的行。
我不确定你是否需要 UIKit 的 s.framework,也不知道你是否可以绕过 Motion.
的依赖 您可能还想删除 fonts/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 直到最后,依此类推,并且可能需要修复其他类型的错误。

你最后可能会得到整个 pod,因为有很多 "inter dependency"。

在 Objective-C 中查找 @class#import "File.h" 可能比在 Swift 中更容易,其中导入是 "implicit".

此外,您可能会继续使用该版本,并且可能需要在他们的 pod 的下一次更新中再次重做。

最后,如果通过耐心和奇迹你得到了你想要的,你可以使用以下方法将它添加到你的 podfile 中:

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

我不确定那个(或者 :path 而不是 :podspec),但如果我没记错的话应该可以。

小心,您可能会破坏许可证的使用。

您也可以要求作者(开票?)将他们的广告连播分成多个 pods 像这样 MaterialComponents.podspec(我几分钟前刚看到回答另一个问题)。

编辑:
另一种方法是避免使用太多 pod spec lint 来克隆 repo,创建一个项目,添加 TextField.swift,检查它是否编译,添加丢失的文件,检查它是否编译等等。它可能很多更快。