Swift Package Manager是否支持iOS?iOS开发包管理器选型咨询
iOS项目包管理器选择建议(Xcode 9 + Swift 4环境)
嗨,我刚好在Xcode 9+Swift 4的环境下折腾过包管理器的选择,给你分享下我的实际经验:
先说说你倾向的Carthage
- Carthage最大的优势就是低侵入性,它不会修改你的项目结构,也不用生成额外的工作区文件,只需要维护一个
Cartfile和自动生成的Cartfile.resolved,对项目的干扰极小 - 它是按需编译框架,只会把你需要的依赖编译成
.framework文件导入项目,相比CocoaPods把所有依赖代码塞进项目的方式,项目会更整洁,编译速度也更可控 - 在Xcode 9和Swift 4的环境下,Carthage的支持已经很稳定了,主流的iOS第三方库基本都适配了Carthage,踩坑的概率很低
再聊聊你关注的SPM
你看到的文档描述完全没错:
请注意,目前该包管理器不支持iOS、watchOS或tvOS平台。
在Xcode 9这个版本里,SPM确实只能用于macOS和Linux平台,完全没法在iOS项目中做依赖管理。虽然后来苹果在Xcode 11之后把SPM的支持扩展到了移动端,但你现在用的是Xcode 9,所以现阶段SPM对你的iOS项目来说完全不可用,不用考虑用它替代其他工具。
最后说说CocoaPods
- CocoaPods的生态是最成熟的,几乎找不到不支持它的第三方库,但它的问题也很明显:侵入性极强,会生成
*.xcworkspace文件,还会修改你的项目配置,有时候更新依赖或者升级CocoaPods版本会出现各种莫名其妙的编译问题 - 既然你已经倾向Carthage了,那完全可以优先用它,只要你需要的第三方库都支持Carthage,就没必要再碰CocoaPods;如果遇到少数不支持Carthage的库,再考虑用CocoaPods补充集成,或者手动把库的代码导入项目
总结
现阶段你的最佳选择就是Carthage,SPM在Xcode 9环境下没法用于iOS项目,不用纠结;CocoaPods可以作为备选方案应对特殊情况。
内容的提问来源于stack exchange,提问作者Faustino Gagneten




