为 cocoapods 开源库增加 swift3 支持

Xcode 8 beta 和 swift3 出来一阵子了,一直没时间看。今天想为自己开源的播放器 BMPlayer 增加个 swift3 的分支,顺便体验一下 swift3 和 Xcode beta4。

Xcode 8 beta 1 + CocoaPods

首先在 Xcode 8 下安装一下 swift3 的 pod 库看看有哪些坑。我选择了安装 AlamofireSnapKit。为了使用 swift3 分支,其 podfile 如下

1
2
3
4
5
6
target 'cocoapods' do
use_frameworks!

pod 'SnapKit', :git => 'https://github.com/SnapKit/SnapKit.git', :branch => 'feature/0.40.0'
pod 'Alamofire',:git => 'https://github.com/Alamofire/Alamofire.git', :branch => 'swift3'
end

结果 pod install 后试着跑起来就发现悲剧了。Google 一下得知是每次 pod updatepod install 时 Xcode 初始化框架设置。导致框架没有明确的 Swift 版本。

解决这个问题,需要在 podfile 最后增加如下代码,一遍每次安装依赖时指定依赖的 swift 版本。再次 pod install 后能正常跑起来了。

1
2
3
4
5
6
7
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |configuration|
configuration.build_settings['SWIFT_VERSION'] = "3.0"
end
end
end

迁移 BMPlayer

更新依赖

由于我的 BMPlayer 里面包含了 SnapKitNVActivityIndicatorView 两个依赖,我第一步就得替换这个为 swift3 版本。 NVActivityIndicatorView 虽然提供了 swift3 版本,但是编译没通过。暂时弃用。

podfile 中增加以下函数

1
2
3
4
5
6
7
8
9
def swift3_overrides
pod 'SnapKit', :git => 'https://github.com/SnapKit/SnapKit.git', :branch => 'feature/0.40.0'
end

# 在为 target 安装 pod 的时候调用该方法来重写 pod 包含的依赖库,实现调用 swift3 版本。
target 'BMPlayer_Example' do
swift3_overrides
pod 'BMPlayer', :path => '../'
end

迁移项目

先用 Edit -> Covert -> To Current Swift Sytax 来使用 Xcode 的自动转换功能。此时记得不要勾选自己的库以外的库。