cocoaPods管理本地库


为何要进行本地的包管理

  • 有的时候CocoaPods的spec版本过旧,pull request没有及时merge,致使咱们没法利用CocoaPods使用较新的代码版本;ios

  • 有的时候咱们的一些代码不是开源的,或者暂时不想放到Github上。咱们更想使用CocoaPods引用本地的代码;git

使用CocoaPods里没有的第三方库新版本

这里咱们以PlayHavenSDK为例介绍一下。咱们在CocoaPods / Spec这个repository里面能够看到,PlayHavenSDK的版本是1.11.0。而playhaven / sdk-ios里面的tag,已经有了1.12.1这个版本。CocoaPods的Spec repository已经落后了两个版本。这时咱们想使用最新版,须要的就是一个更新的spec。github

咱们回到Xcode project目录中,打开Podfile,添加pod 'PlayHavenSDK', :podspec => '~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec',接着运行pod update便可。这里咱们注意到s.source这一行配置,指向了playhaven/sdk-ios.git仓库的1.12.1这个tag,表示这个spec将使用这个tag的代码。咱们将它保存到本地的一个目录中,如~/Desktop/PlayHavenSDK/PlayHavenSDK.podspec
网站

PS: 固然这个podspec也能够不放在本地,好比放在gist上。spa

使用CocoaPods管理本地代码

这种状况稍微复杂一步,除了指定podspec,还须要准备一个本地要使用的git repository。咱们以Chartboost为例来进行说明。code

首先咱们新建一个名为~/Desktop/ChartboostSDK/的目录,而后执行git init初始化这个git repository。ip

接着咱们去Chartboost官方网站下载最先新的SDK。将它放进这个目录中,而后执行git add . && git commit -m"Add new SDK"get

这样咱们这个目录已经成为一个git repository,里面是最新的Chartboost SDK。it

这时咱们仍然须要一个podspec文件,来讲明咱们从哪一个仓库来获取代码:io

除了两个.h,一个.a,还有一个podspec文件。咱们运行ls -lh | awk '{print $9}',ChartboostSDK目录的结构显示以下:

接着咱们回到Xcode proj所在的文件夹中,编辑Podfile,添加pod 'ChartboostSDK', :local => '~/Desktop/ChartboostSDK'。这里的local代表从本地的git仓库里获取代码。

最后咱们运行pod update,大功告成。

CocoaPods小结

上面的两种状况,简单来讲:

  • 须要使用最新的开源代码/库,但没最新的spec

  • 须要使用私有代码/库,须要对应的私有的spec

对于第一种状况,建议你们能够给CocoaPods / Specs提交一个pull request。

使用CocoaPods只须要知道两件事情:

  • podspec:一个pod的配置是什么,pod的代码放在哪里

  • Podfile:项目依赖哪一个pod,以何种方式依赖,它的podspec放在哪里

这里podspec和git repository都很是灵活,能够放在本地,也能够放到github/gist上。代码仓库甚至能够不使用git而直接使用一个zip压缩包。

使用CocoaPods能够把多们从繁重的配置和代码管理中解脱出来,并且能够少犯错误。好比Deployment Target设置为5.0,但App中须要使用AdSupport.framework,若是忘记设置为optional则全部5.x的设备运行时都会crash。对于这种状况CocoaPods在spec提供了weak_frameworks的配置选项。同时CocoaPods可以保证库的依赖关系,而不会出现几个项目依赖版本不一致的状况。

相关文章
相关标签/搜索