CocoaPods打包私有库实践 | 最新版

栏目: IOS · 发布时间: 5年前

内容简介:公司项目采用分支的方式进行“效率开发”,鉴于部分项目的基础功能一致,数据服务也保持了一致,所以在一开始这样的方式倒也没什么问题。But!!!随着项目的持续进行,各个客户定制类的要求差异化严重,采用分支的弊端逐渐显现:基于以上种种情况,便思考着如何改进,第一反应就是重构代码,重新组织架构项目。但是,当看了计划是将一些基础公共功能抽离出来,方便以后所有类型的项目都可以使用,我司目前除了上文提到的Base项目并没有维护使用的库:joy:。当前者完成,主要也是打通打包私有库这个流程之后,便着手抽取项目的业务功能模块

公司项目采用分支的方式进行“效率开发”,鉴于部分项目的基础功能一致,数据服务也保持了一致,所以在一开始这样的方式倒也没什么问题。But!!!随着项目的持续进行,各个客户定制类的要求差异化严重,采用分支的弊端逐渐显现:

  1. Base项目存在Bug,导致分支项目全部需要逐一修改,工作重复。(随着项目的增加,后期维护难度指数上升)
  2. 功能管理不可控,Base项目中经常有部分内容在分支项目中不需要。
  3. Base项目通过判断语句,将iPad和iPhone项目合二为一,存在一些项目早期不需要iPad端。 (貌似后期App上架想加或想去除另一端会比较麻烦)
  4. 当有部分基础功能需要升级,就如同改代码一样需要处处分支进行更改。
  5. 虽然公司开发人员不多,流程也没有很完善,但是当自己尝试Jenkins做CI时,发现分支的方式对于一些配置非常不友好。
  6. ……

基于以上种种情况,便思考着如何改进,第一反应就是重构代码,重新组织架构项目。但是,当看了 bangcasalimboy 等等大佬们组件化的思路之后有点懵懵的。最终,只能着手于从项目中抽出公共库或者业务库的思路着手,因此动手目标指向Cocoapods打包私有库。

计划是将一些基础公共功能抽离出来,方便以后所有类型的项目都可以使用,我司目前除了上文提到的Base项目并没有维护使用的库:joy:。当前者完成,主要也是打通打包私有库这个流程之后,便着手抽取项目的业务功能模块作为库来使用。存在的问题是,还不太清楚是直接把逻辑抽离出来,还是连着UI一起(应该不太好)。最终就能做到通过这些私有库快速搭建项目,针对目前的项目也许还是需要一个Base项目进行一些基础配置(因为会用到一个第三方库)。

CocoaPods 打包进行时

默认打包前已经在电脑上配置好 cocoaPodsGit 环境,否则后续步骤在一开始就没法进行。关于Git环境配置网上一搜很多,至于cocoaPods环境配置正好自己之前写过一篇算是目前比较新的文档记录。

第一步,创建本地pod仓库

通过Pod命令可以创建一个本地仓库,会自带一些基础配置,只需要把自己的代码放在正确的位置即可完成私有库封装代码部分的内容。

pod lib create YourPodName
复制代码

命令行执行完以上命令,会出现几个选项,根据自己的情况去做选择即可。提供自己的配置如下:

What platform do you want to use?? [ iOS / macOS ]
 > iOS

What language do you want to use?? [ Swift / ObjC ]
 > Swift

Would you like to include a demo application with your library? [ Yes / No ]
 > Yes

Which testing frameworks will you use? [ Quick / None ]
 > None

Would you like to do view based testing? [ Yes / No ]
 > No

Running pod install on your new library.
复制代码

目前网上能查到的资料,好多都还有一项选择是统一配置类名前缀,不过目前我这个版本已经没有该选项。当上面执行完成之后会自动打开Example工程示例,接下来就可以进行具体的代码编写或者直接替换到对应位置。

第二步,修改Pod内容

打开创建的Pod库所在文件夹,在根目录位置有着 YourNamePod.podspecREADME.md 两个文件,分别打开进行对应的修改。

YourNamePod.podspec 文件修改

鉴于是在创建私有库,本机的Git命令绑定的是GitHub,所以切记要修改文件里的git对应的地址到本地Gitd库地址!!!

Pod::Spec.new do |s|
  s.name             = 'YourNamePod'
  s.version          = '0.0.2'   // 一定记得修改version!!!一定要和Git的Tag是相同!!!
  s.summary          = '改成自己的summary
 
  s.description      = <<-DESC
  修改为自己库的描述内容
                       DESC

  s.homepage         = '修改为自己本地Git库的地址' // 注意,这里的地址是本地库在浏览器上面的URL
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  // 默认MIT许可
  s.author           = { '用户名' => '用户账号' }
  s.source           = { :git => '修改为自己本地Git库的地址', :tag => s.version.to_s } // 此处的地址,是从Git库copy过来的,以 .git 结尾。 

  s.ios.deployment_target = '9.0'

  s.source_files = 'Pod/Classes/**/*'  // 原生的地址是 'YourNamePod/Classes/**/*', 但是这个地址在后面 的 pod repo push 中会出现问题,根据一个开源的库,修改了地址。注意,Pod 文件夹仍然是在根目录。
  s.swift_version = '5.0'  // 亲测,需要加上swift版本
 
end
复制代码

README.md文件修改

README文件其实不用修改也无所谓,只是想着方便以后其他人了解这个库的使用,自己写了一些说明罢了。反正,如果有需要就看着加内容,或者看看自动生成的内容里是否有什么信息时需要删除的。

具体代码放哪里

具体代码当然得自己实现,但是放什么地方却是有讲究的,在上文有提过 s.source_files 对应的默认路径需要更改。自己库的代码就是要放在这个文件路径之下。如果按照我的步骤建立,则应该是在 Pod -> Classes 文件夹之中。

当打开示例项目进行测试验证时,首先需要 pod install ,然后正常打开项目。此时在 Xcode 中左侧面板 Pods 下找到自己的 Pod 文件,再次确认下代码是不是都在,不在就 add 进来。接下来就是在示例工程中去进行各种尝试,每次对Pod文件里的代码进行了修改我都会重新 pod install 一次,然后 clean -> build。

第三步,Git部分

一开始说了需要本地有Git环境,现在就要用到了,在次之前先在本地的Git库中新建一个仓库(我司是用Gogs进行搭建)。注意!!! 仓库名字与创建的 Pod 库名一致 ,不一致会不会有问题,我不知道,反正我没试过。记得!!!仓库 不要设置成私有库 ,设置成为私有库在后面会出现问题,我找到的解决方案就是设置为public。

接下来,就是打开命令行 cd 到 Pod 库文件夹的根目录,进行以下命令的执行:

git add . // 跟踪所有改动过的文件
git commit -m"提交内容"
git remote add origin <git库url> // 具体的url时没有 <> 
git push -u origin master 

git tag 0.0.1 // 需要与 .podspec 文件中的 s.version 对应
git push --tags 
复制代码

在这里需要注意的是,git 命令的执行,自己习惯了客户端,当使用命令行好像有些步骤问题。自己踩到的坑如下:

git ! [rejected] master -> master (fetch first)
git pull origin master
git push origin master // 如果执行之后还是没有即可成功,那么执行下面的内容
git commit -m"xxx"
git push
复制代码

正常来说,应该就进行下一步的操作,如果在Git过程中遇到了坑,建议仔细看错误提示进行修改。

第四步,Pod 部分

Pod 部分的坑遇到不少,但是如果前面的步骤如果都有注意到细节,该修改的都修改了,那么下面的命令行执行起来应该是很顺畅。命令行 cd 至 Pod 库文件夹根目录,然后往下看:arrow_down::

pod repo // 检查 pod 库
pod repo add YourNamePod <Git-Url> // 添加到本地cocoapods中
pod lib lint // 检测自己的 Pod 库配置 
pod repo push YourNamePod YourNamePod.podspec // push 库配置
// 成功之后
pod search YourNamePod // 能够搜到就可以用起来了,这里可能有个小坑,那就是尽量在取名时取个唯一值,可以在Github上先搜一搜。私有库可能没啥影响,但是如果是公共的同名应该会有坑。
复制代码

如果上述 lib lint 出现了红色warning提示,可以尝试在命令后面加上 --allow warnings。 至于其他的一些相关错误,根据信息提示搜一下基本都有解决方案,另外会在文末附上几个参考链接。

在其他项目使用的时候,podfile 文件里需要加上 source 路径,否则没法使用到私有库。

source "git-url.git"  // 此处换成自己本地库的 url
use_frameworks!

target 'TestPod' do
 
 pod 'YourNamePod', '~> 0.0.2'

end 
复制代码

第五步,最后就是维护!!!

到第四步成功结束,只是阶段性的胜利,之所以打包私有库除了方便使用还有就是后期维护更新!!!

后期功能更新或日常维护步骤如下:

  1. 修改 .podspec 文件里的 version
  2. git 对应的操作:更新 push ,以及 tag 对应 version
  3. pod lib lint / pod lib lint allow--warnings
  4. pod repo push YourNamePod YourNamePod.podspec

至此,我所了解的一个闭环流程就结束了,希望以上内容有所帮助。


以上所述就是小编给大家介绍的《CocoaPods打包私有库实践 | 最新版》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Measure What Matters

Measure What Matters

John Doerr / Portfolio / 2018-4-24 / GBP 19.67

In the fall of 1999, John Doerr met with the founders of a start-up he’d just given $11.8 million, the biggest investment of his career. Larry Page and Sergey Brin had amazing technology, entrepreneur......一起来看看 《Measure What Matters》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具