拥抱 CocoaPods 1.0

CocoaPods 做为 iOS 社区应用最普遍的依赖管理工具,终于快要发布 1.0 版本了。虽然我没有找到具体的 roadmap,不过如今已经发布到 1.0.0 Beta8 了,距离正式版应该也就是几个 Beta 或者 rc 的问题了。尽管 CocoaPods 早就已经成了事实上 iOS 界依赖管理的标准,开发者们仍是很谦虚的表示 1.0 版本才是真正实现了一个依赖管理工具的全部需求。html

1.0.0 will be the milestone where we feel confident that all the basic requirements of a Cocoa dependency manager are fulfilled.git

这句话在 CocoaPods 的 FAQ 里存在了许多年,如今这个目标终于近在眼前了。github

下面进入正题,CocoaPods 的 1.0 版本出现了不少改变,有一些是 breaking changes,官网上的 Migration Guide 里面有很全面的介绍。我把其中感受比较重要的几点在这里说明一些,辅以我本身的一些使用经验,但愿对读者有所帮助。xcode

Podfile 语法改变

这部分改变差很少是最直接的了,有几个改变会直接让如今已有的 Podfile 不能工做:ruby

  • 必须指明 target服务器

我本身就常常图省事把 target 省略掉,看来从此这个地方要改变习惯了。网络

  • :exclusive => truelink_with 被去掉了ide

由于有了 abstract_target 这个特性,可让咱们重用一个 target 里的 Pods,加上上面必须指明 target 的要求,这两个选项存在的意义就不大了。在我 以前的文章 里提到过能够用函数来实现 pod 的重用,如今又有了一种新的方法。下面是官网的例子:函数

# Note: There are no targets called "Shows" in any       Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'
  pod 'Fabric'

  # Has its own copy of ShowsKit + ShowWebAuth
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end 
end
  • xcodeproj 被重命名成 project工具

  • :local 被去掉了,如今想使用本地的 pod 只能使用 :path

CocoaPods 行为改变

  • 对于 Pod 仓库,再也不使用 shallow clone,而是使用完整 clone。

这个 issue 里提到以前使用 shallow clone(depth=1) 的方法会给 git 服务器带来额外的压力,所以改成使用完整的 clone。这个改变实话说对于国内用户来讲是很是不利的,由于会致使 repo 初次 clone 的时间进一步增长。因为国内的网络环境,如今 clone 须要的时间就已经很长了,这个改动更是雪上加霜。所以我更加推荐使用 CocoaPods 国内的非官方镜像(例如 https://git.oschina.net/6david9/Specs.git ),以加快访问速度。

  • pod install 默认再也不进行 pod repo update

这是个值得喜大普奔的消息。以前 CocoaPods 新手上来遇到的最大的问题就是 pod install 会“卡死”在 git pull 上,后来咱们知道能够用 pod install --no-repo-update。如今不更新仓库成了默认行为,以前更新仓库的行为须要增长参数 --repo-update。这个改变让 CocoaPods 对于新手来讲更加友好了。

  • Development pods 默认再也不解锁

对应 issue。 这个改动本意是好的,不过具体效果怎么样,还有待观察。

  • link 库的命名发生改变

这一点是我在升级旧版本的时候发现的,也是有点坑人的部分,但愿官方后面会进一步完善吧。具体说,因此依赖库最后造成的那个大库,若是以前没有使用 target 的话,命名是 libPods.a,如今强制使用 target,对应的命名会变成 libPods-{target}.a。可能须要手动去改一下 Build Phase,避免 link 错误的库,致使程序行为发生错误。

相关文章
相关标签/搜索