iOS模块化实践 -- 利用CocoaPods拆分项目

Cal35Y 8年前
   <h2>准备工作</h2>    <ul>     <li>安装好XCode</li>     <li>配置好CocoaPods,并且可以pod update 以及 pod install 成功</li>     <li>已经获得CocoaPods的Repo的地址,以及对应pod的Git地址(这里以gitLab为例)</li>     <li>涉及到的所有操作,请尽量在Terminal中进行,包括CocoaPods的相关操作(CocoaPods官方客户端无效)</li>    </ul>    <h2>私有Spec Repo</h2>    <p>所谓Spec Repo,就是Pods的索引。一旦在podfile中设置source为某个私有repo的git地址,在进行pod update的时候就会去这个repo中进行检索,如果检索到对应的pod,会读取该Pod的podspec从而进行安装。</p>    <p>一个Spec Repo的目录结构如下:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/f1b813437995fd2f635bb1a10c6236f5.png"></p>    <p>Spec Repo 目录</p>    <p>之后我们去GitLab上新建一个相应的Repo地址,之后添加repo到本地。</p>    <pre>  # pod repo add [Private Repo Name] [GitHub HTTPS clone URL]  pod repo add realTimeBusCocoaRepo https://gitlab.com/iosCocoaPods4CMS/iOS_Cocoapods_Repo.git</pre>    <p>成功后可以进入 ~/.cocoapods/repos 目录下查看 realTimeBusCocoaRepo 这个目录了。</p>    <h2>创建Pod项目工程文件</h2>    <p>这里建议通过CocoPods的官方命令来进行Pod项目的创建,以测试项目helloCMSPod为例,命令如下:</p>    <pre>  pod lib create helloCMSPod</pre>    <p>不出意外地话,会提问你四个问题:</p>    <pre>  1.What language do you want to use?? [ Swift / ObjC ]    2.Would you like to include a demo application with your library? [ Yes / No ]    3.Which testing frameworks will you use? [ Specta / Kiwi / None ]    4.Would you like to do view based testing? [ Yes / No ]    5.What is your class prefix?</pre>    <p>这里我分别选择了ObjC、Yes、None、Yes、CTDemo,之后会自动打开项目。</p>    <p>因为选择了View based testing,XCode8以上版本会检测到swift版本落后,邀请你升级,这时候可升可不升。</p>    <p>此时的目录树结构如下:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/92e30ffaf0bed15328b9bbeffa758c05.png"></p>    <p>然后就是去新建好的项目里尽情的挥霍了:)</p>    <p>此时记得将所有更改放到Classes文件夹之下,然后在Example文件下执行 pod update,则可发现新的文件已经出现在项目工程的pods文件夹之下了。</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/9424ea11a10e38521433e3a6fceb65e7.png"></p>    <p>之后要做的就是把库同步到Git上去了。这时候需要去GitLab上建立一个对应的仓库,例如:</p>    <pre>  https://gitlab.com/xxx.git (替换为自己的实际git地址)</pre>    <p>然后将代码同步到此Git上。</p>    <pre>  git add .    git commit -m "Init"    git remote add origin https://gitlab.com/xxx.git(替换为自己的实际git地址)    git push --set-upstream origin master</pre>    <p>podSpec文件需要版本控制信息,所以我们要打一个Tag.</p>    <pre>  git tag -m "first demo" 0.1.0    git push --tags</pre>    <p>之后就可以去编辑podspec文件了。按以下方式来修改,不明白的字段请参考 <a href="/misc/goto?guid=4959739232474860664" rel="nofollow,noindex">官方文档</a> :</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/477a3072ee07c861b551af4efb632be0.png"></p>    <p>之后记得去在终端输入验证命令,确保该Podspec有效:</p>    <pre>  pod lib lint helloCMSPod.podspec</pre>    <p>记得将更改好的podspec文件上传到git:</p>    <pre>  git add -A    git commit -m "change for podSpec"    git push    git tag -m "podSpec Demo" 0.1.1    git push --tags</pre>    <h2>向Spec Repo提交podspec</h2>    <p>提交命令:</p>    <pre>  pod repo push xxxRepo helloXXXPod.podspec</pre>    <p>在经过三轮的用户校验之后,提交成功!这时候我们去 ~/.cocoapods/repos/xxxRepo 中查看,我们的的podspec已经在里面了!</p>    <p>此时通过 pod search helloXXXPod 已经可以查到了!</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/22fe12a1ace855dedcde90a0f162e78b.png"></p>    <h2>如何使用</h2>    <p>我们可以在想要使用的项目中的Podfile里加入如下代码:</p>    <pre>  pod ‘helloXXXPod’  ``  即可。  当然,由于我们的是私有CocoaPods库,因此最好告诉系统这个库的source在哪里,因此在Podfile文件上部也请加上Spec Repo的git地址</pre>    <p>source ' <a href="/misc/goto?guid=4959739232557687518" rel="nofollow,noindex">https://gitlab.com/xxx.git</a> '</p>    <pre>  整个的Podfile文件看起来是这样的:  ![](http://upload-images.jianshu.io/upload_images/2340489-c9b30f5ee69ecdd1.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)  之后运行```pod update``` 即可安装对应的Pods    如果出现:</pre>    <p>[!] An unexpected version directory Assets was encountered for the /Users/xxx/helloxxxPod Pod in the helloCMSPod repository.</p>    <p>```</p>    <p>这个错误,请查看:</p>    <ul>     <li>podspec 是否未上传到服务器</li>     <li>Podfile的source地址是否是Spec Repo的地址,而不是具体某一个Pod的地址。</li>    </ul>    <h2>验证</h2>    <p>新建一个SigleView的Project,配置好podfile后进行安装Pod,编译好运行,显示如下图:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/75ed64864e4f26fe4d12dcfdfa67be7b.png"></p>    <p>至此,一次Pod拆分完成。</p>    <h2>Reference</h2>    <ul>     <li> <p><a href="/misc/goto?guid=4959739232637444112" rel="nofollow,noindex">使用Cocoapods创建私有podspec</a></p> </li>     <li> <p>无数的StackOverflow</p> </li>    </ul>    <p> </p>    <p>来自:http://www.jianshu.com/p/a73b6bfdb41a</p>    <p> </p>