有的时候CocoaPods的spec版本过旧,pull request没有及时merge,致使咱们没法利用CocoaPods使用较新的代码版本;ios
有的时候咱们的一些代码不是开源的,或者暂时不想放到Github上。咱们更想使用CocoaPods引用本地的代码;git
这里咱们以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
这种状况稍微复杂一步,除了指定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
,大功告成。
上面的两种状况,简单来讲:
须要使用最新的开源代码/库,但没最新的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可以保证库的依赖关系,而不会出现几个项目依赖版本不一致的状况。