将CocoaPods与预先构建的框架一起使用而不是源文件

介绍cocoapods-binary

cocoapods-binary是CocoaPods的插件,旨在将预构建的框架链接到项目。 一旦执行pod install命令,它将自动为每个依赖项预先构建一个框架,并将结果链接到您的项目。

这样就可以减少项目的构建时间 ,因为您将仅构建源代码,而不是每次都构建依赖关系。 这确实是朝正确方向迈出的一步。

安装cocoapods-binary

为了安装cocoapods-binary ,我们需要运行brew install cocoapods-binarygem 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”
吊舱“ NVActivityIndi​​catorView”
豆荚“ 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”
吊舱“ NVActivityIndi​​catorView”
豆荚“ Alamofire”
pod'HandyJSON'
pod'RealmSwift'
pod'KeychainSwift'
吊舱“ TrustKit”
pod'ReachabilitySwift'
pod'OAuthSwift'
结束

之后,运行pod install命令将为每个依赖关系预先构建一个框架并将其链接到项目。 清理和重建我们的应用程序不会再次重建每个依赖项。

相关注意事项

查阅cocoapods-binary的官方文档以获取更多信息。

Interesting Posts