iOS 二进制化之路(CocoaPods && Carthage)

前言

  iOS 组件化之路的过程当中,咱们有一件事须要作---那就是二进制化,二进制化一般是针对咱们项目中经常使用的但又不多更改的的第三方库,将第三方库打包成二进制文件减小协同开发中的文件冲突又能够大大的加快编译速度提升工做效率。ios

正文

  用过 Carthage 的人都知道,它能将 iOS 的第三方依赖编译成二进制文件,而后咱们手动引入项目中,这能够说正是与 CocoaPods的优点所在,CocoaPods 则是 iOS工程组件化中不可或缺的角色,CocoaPods的第三方库之多、用户之广是其余工具所可望不可即的。然而怎样将它两的优点结合起来呢? 咱们知道 CocoaPods 能够支持配置Podspec来控制咱们的第三方库依赖形势, git

image.png
  咱们平时都知道 CocoaPods是一个 Ruby工程,所以 Podspec也是一个 Ruby文件,由上图咱们能够知道,咱们的第三方库有源码和二进制文件等多种引用形式,咱们每次制做三方库的时候咱们均可以选择相应的文件形势,那么咱们可能会思考,咱们想在源码和二进制文件之间切换能够实现吗?既然 PodspecRuby 文件,那么必定支持 Ruby语法,咱们能够加入逻辑判断来控制咱们是使用源码仍是二进制文件:

Pod::Spec.new do |s|
s.name = 'Foundation+'
  s.version = '4.5.1'
  s.license = 'MIT'
  s.summary = 'Elegant HTTP Networking in Swift'
  s.homepage = 'https://github.com/Alamofire/Alamofire'
  s.social_media_url = 'http://twitter.com/AlamofireSF'
  s.authors = { 'Alamofire Software Foundation' => 'info@alamofire.org' }
  s.source = { :git => 'https://github.com/Alamofire/Alamofire.git', :tag => s.version }

  s.ios.deployment_target = '8.0'
  s.osx.deployment_target = '10.10'
  s.tvos.deployment_target = '9.0'
  s.watchos.deployment_target = '2.0'

    if ENV['source'] == true || ENV['Foundation+'] == true
         s.source_files = 'Foundation+/Source/*.swift'
    else
         s.vendored_frameworks = "Carthage/Build/iOS/Foundation+.framework"
    end
end
复制代码

  很惋惜这种方法在 github 远程公有仓库中无效,若是大家又更好的方法请告诉我😊。   固然,咱们本身的三方库咱们能够本身控制,然而咱们项目中还有绝大多数的三方库是咱们不可以控制的,那么,就没有办法了吗?固然,咱们不会放弃寻找解决办法,我开始介绍了Carthage, 它能够将咱们的第三方库打包成二进制文件,固然,咱们在这里不会使用它的全部功能,在 Pods文件夹中咱们已经下载了咱们三方依赖的全部源码,咱们只须要把它们编译成二进制文件便可。github

carthage build --platform iOS --no-skip-current
复制代码

  可是,这句命令只适用于勾选了 Shared的工程 swift

image.png
  咱们 pod install 后会生成 Pods.xcodeproj工程,这个工程里有咱们须要的第三方依赖库,但并无勾选 Shared, 所以:

carthage build --platform iOS --no-skip-current
复制代码

Pods.xcodeproj工程是无效的. 然而事情并未就此结束,经过一番研究发现: xcode

image.png
勾选 Shared的这个操做其实就是将对应第三方库的 .xcscheme文件从 xcuserdata/steve.xcuserdatad/xcschemes/移动到 xcshareddata/xcschemes/,知道这个原理后咱们就能够用命令行进行相应的操做了。而后咱们切换到 Pods文件夹里执行 carthage build --platform iOS --no-skip-current咱们能够看到:
image.png
咱们所依赖之库尽数便已编译完成。也就是说咱们所依赖的源文件和二进制文件都有了,咱们只须要生成相应的 .podspec便可。而后经过 Podfile文件里作相应的配置,来引用本地文件资源,即可以作到源码和二进制文件便捷切换。
image.png
相关文章
相关标签/搜索