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>