将CocoaPods与预先构建的框架一起使用而不是源文件
介绍cocoapods-binary
cocoapods-binary是CocoaPods的插件,旨在将预构建的框架链接到项目。 一旦执行pod install
命令,它将自动为每个依赖项预先构建一个框架,并将结果链接到您的项目。
这样就可以减少项目的构建时间 ,因为您将仅构建源代码,而不是每次都构建依赖关系。 这确实是朝正确方向迈出的一步。
安装cocoapods-binary
为了安装cocoapods-binary ,我们需要运行brew install cocoapods-binary
或gem install cocoapods-binary
命令。
在我们的Podfile中使用cocoapods-binary
我们需要在Podfile的开头添加以下行:
plugin 'cocoapods-binary'
如果我们要对所有依赖项使用预构建的框架,则还可以添加all_binary!
在任何目标或定义之前。
如果我们再次运行pod install
,它将为每个依赖项预先构建一个框架,并将其与我们的项目链接。 如果我们清理并构建它,它将不再浪费大量时间来构建依赖项。
将比特码嵌入到预先构建的框架中
如果我们想将Bitcode嵌入到我们的iOS应用程序中,我们还需要将其嵌入到我们的依赖项中 。 为了使其与预先构建的框架一起使用,我们需要在Podfile中通过添加enable_bitcode_for_prebuilt_frameworks!
进行指定enable_bitcode_for_prebuilt_frameworks!
和keep_source_code_for_prebuilt_frameworks!
毕竟all_binary!
。
请注意,您将需要重新运行pod install
才能看到更改。
添加例外
如果我们尝试使用预先构建的框架(例如Google Maps iOS SDK)添加某些依赖项,则这些依赖项将不起作用 。 由于它要求将GoogleMaps.bundle文件添加到主项目并在构建时进行复制,因此不建议使用预构建的框架。
为了使它们正常工作,我们需要通过将:binary => false
设置为我们要排除的每个依赖项来添加一个例外 。
pod 'GoogleMaps', :binary => false
让我们看一个例子
考虑到我们有以下Podfile:
插件'cocoapods-binary'
平台:ios,“ 12.0”
use_frameworks!
目标'ProjectName'做
吊舱“图表”
吊舱“ RxSwift”
豆荚“ RxCocoa”
吊舱“翠鸟”
吊舱“ SwipeCellKit”
豆荚“ FSCalendar”
吊舱“ NVActivityIndicatorView”
豆荚“ Alamofire”
pod'HandyJSON'
pod'RealmSwift'
pod'KeychainSwift'
吊舱“ TrustKit”
pod'ReachabilitySwift'
pod'OAuthSwift'
结束
我们需要将其转换为:
插件'cocoapods-binary'
平台:ios,“ 12.0”
use_frameworks!
enable_bitcode_for_prebuilt_frameworks!
keep_source_code_for_prebuilt_frameworks!
all_binary!
目标'ProjectName'做
吊舱“图表”
吊舱“ RxSwift”
豆荚“ RxCocoa”
吊舱“翠鸟”
吊舱“ SwipeCellKit”
豆荚“ FSCalendar”
吊舱“ NVActivityIndicatorView”
豆荚“ Alamofire”
pod'HandyJSON'
pod'RealmSwift'
pod'KeychainSwift'
吊舱“ TrustKit”
pod'ReachabilitySwift'
pod'OAuthSwift'
结束
之后,运行pod install
命令将为每个依赖关系预先构建一个框架并将其链接到项目。 清理和重建我们的应用程序不会再次重建每个依赖项。
相关注意事项
查阅cocoapods-binary的官方文档以获取更多信息。