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

本文介绍如何在iOS开发中使用CocoaPods和Carthage结合实现第三方库的二进制化,以提高编译速度和协同开发效率。通过Podspec文件配置灵活切换源码与二进制文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

  iOS 组件化之路的过程中,我们有一件事需要做---那就是二进制化,二进制化通常是针对我们项目中常用的但又很少更改的的第三方库,将第三方库打包成二进制文件减少协同开发中的文件冲突又可以大大的加快编译速度提高工作效率。

正文

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

  我们平时都知道 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文件夹中我们已经下载了我们三方依赖的所有源码,我们只需要把它们编译成二进制文件即可。

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

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

  我们pod install 后会生成Pods.xcodeproj工程,这个工程里有我们需要的第三方依赖库,但并没有勾选 Shared, 因此:

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值