是否可以只安装我们使用的 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
,检查它是否编译,添加丢失的文件,检查它是否编译等等。它可能很多更快。
在我的 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
,检查它是否编译,添加丢失的文件,检查它是否编译等等。它可能很多更快。