是否可以仅安装我们使用的材料组件?

时间:2018-12-05 15:12:04

标签: ios components cocoapods material podfile

在我的iOS项目的Podfile中,我有类似以下内容:

pod 'Material', '~> 2.16'

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

有没有一种仅安装其所有功能的方法?

1 个答案:

答案 0 :(得分:0)

根据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

我刚刚用***修改了行。
我不确定您是否需要UIKit的s.framework,也不知道是否可以绕过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直到结束,依此类推,并且可能需要修复其他类型的错误。

由于可能存在大量的“相互依赖”,您可能最终会拥有整个pod。

在Objective-C中,查找@class#import "File.h"可能比在Swift中导入是“隐式”的要容易。

此外,您可能会继续使用该版本,并可能在下一次更新他们的pod时再次重做所有操作。

最后,如果您有了耐心和奇迹,便可以使用以下方法将其添加到podfile中:

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

我不确定那一个(还是:path而不是:podspec),但是如果我没记错的话,应该这样做。

请注意,您可能会中断许可证的使用。

您还可能要求作者(打开票证)将他们的豆荚分成多个MaterialComponents.podspec这样的豆荚(我刚刚在几分钟前看到回答另一个问题)。

编辑:
另一种方法是避免过多pod spec lint来克隆存储库,创建项目,添加TextField.swift,检查其是否编译,添加丢失的文件,检查其是否编译等。这可能很多更快。