pod私有库
私有库制作步骤
1、在gitlab上创建一个空项目,并用source tree导到本地,便于后面代码更新上传
2、cd 到项目下 执行pod lib create 【组件名】如:pod lib create TDAlertView
输入命令后会显示下载模板,会有几秒钟等待
Cloning `GitHub - CocoaPods/pod-template: An opinionated template for creating a Pod.` into `TDAlertView`….
模板下载好以后,需要你回答几个问题:
1.你要使用哪个平台?iOS
2.你要使用哪种语言?
3.库中是否包含一个实例程序?(一般选择示例程序 Yes)
4.你要使用哪个测试框架?(没有就写None)
5.是否要UI测试?(Yes or No 都可以)
6.类名前缀是什么?(这个创建Swift库的时候没有这一项)
3、删除pod中replaceMe.m 文件
将组件目录文件放到Classes目录下
将组件所需的资源文件打成bundle放到Assets目录下
将组件所需的资源文件直接以png的形式放到Assets目录下的文件夹中
4、修改spec文件
A. s.name 以’TTP’为前缀,避免与其他类库名冲突
B. 版本号需要与后面打的tag一致
C. s.homepage (#库介绍主页地址)为gitlab 项目的http链接
D. #源码文件配置 s.source_files ‘**’代表所有目录 ‘*’ 代表所有文件 如:s.source_files = 'iOS-TTP-Widgets/Classes/TDAlertView/*.{h,m}'
E. 资源文件,官方建议采用s.resource_bundles。 采用打成bundle放到Assets中会导致在项目中找不到bundle中的图片路径,无法读取图片,故更改为 s.resource_bundles形式
给 Pod 添加资源文件: http://blog.xianqu.org/2015/08/pod-resources/
F. 可依赖于当前仓储中的组件
G. 当前是将所有组件库放到项目中,通过添加不同的spec文件来区分不同组件
5、修改podfile文件
(测试组件使用,发布可略过)
添加source
如果有私有库依赖于当前私有仓储中的组件,当前pod没有引入该组件时,需要引入私有仓储的链接
如果已引入了私有仓储的链接,又有组件引入了官方中的公有库,需要引入官方master仓储的链接
cd 到Example目录下 执行pod install,重新打开项目文件,所添加的内容就会显示到项目中去
6、提交源代码到git
1、可以通过source tree上传代码
2、通过命令行上传代码
7、打tag
当前是将所有组件库放到项目中,通过添加不同的spec文件来区分不同组件
但是tag是打在整个项目上的,需要通过不同的tag去区分不同的组件
同时tag要与组件的版本相对应
当前已发布到私有仓储中的组件
Adding the spec to the `iOS-TTP-Spec' repo
- [Add] TTP-WCategory (1.0.0)
- [Add] TTP-TDAlertView (2.0.0)
- [Add] TTP-WIndexList (3.0.0)
8、创建私有仓储
在gitlab中创建一个git库,用于管理我们的Specs
添加私有仓储
pod repo add 【私有仓储名】【私有仓储地址】
9、验证私有库
pod lib lint TTP-TDAlertView.podspec --allow-warnings
依赖私有库:pod 依赖私有库的pod lib lint - 简书
如果依赖私有仓储中的组件 需要添加--sources=私有仓储名
如果依赖官方公有库,需要添加--sources=master
依赖多个私有仓储,可以为--sources=REPO_NAME1,REPO_NAME2,REPO_NAME3,master
如:pod lib lint TTP-WAlertView.podspec --sources=REPO_NAME1,REPO_NAME2,REPO_NAME3,master
a. 只依赖iOS-TTP-Spec 中的一些私有库(如WCategory)
pod lib lint TTP-WAlertView.podspec --sources=iOS-TTP-Spec
b. 依赖iOS-TTP-Spec和master中的一些私有库(如WCategory、AFNetworking),
pod lib lint TTP-WAlertView.podspec --sources=iOS-TTP-Spec,master
pod lib lint //验证本地库是否正确
lib 换成 spec 就是验证远程服务器的 库 是否正确
--verbose:打印错误
--allow-warnings:允许警告
--use-libraries:如果自己私有库包含library,则需要
--no-clean:检查问题
--sources:如果依赖别的第三方库则需要
10、私有库发布
pod repo push 【私有仓储名】 【需要发布的spec文件名】 --allow-warnings
如:
pod repo push iOS-TTP-Spec TTP-TDAlertView.podspec --allow-warnings
如果依赖私有库,按照第8条,增加--sources引导
11、查看我们本地的Specs库:
直接Findle ->右键 -> 前往文件夹 -> 输入:~/.cocoapods/repos ->点击前往
12、遇到的问题
1、若是出现错误信息
[!] The repo MyRepo at ../.cocoapods/repos/MyRepo is not clean
更新下我们的版本库,
$ pod repo update [你的repo]
13、删除私有库或私有库版本
A. 删除iOS-TTP-Spec私有仓储中的对应的私有库或私有库版本
B. 删除iOS-TTP-Widgets中对应的tag
13、上传WAlertView私有库示例
第一步:添加本地私有仓储
若第一次操作,本地没有iOS-TTP-Spec仓储的名字,.cocoapods/repos/ 可以到这个目录下查看,如果有2-mobile-ios-ttp-spec仓库的名称请删除
鉴于每个人的本地私有仓储不同,增加这一步,统一本地私有仓储名,便于后续操作
pod repo add iOS-TTP-Spec http://xxx.xxx
第二步:增加WAlertView对应的文件(参考3)
将组件目录文件放到Classes目录下
将组件所需的资源文件直接以png的形式放到Assets目录下的文件夹中
第三步:增加spec文件(参考4、修改spec文件)
第四步:
第五步:如果考虑在exzample中增加示例(参考5、修改podfile文件) (测试组件使用,发布可略过)
第六步:提交源代码到git
第七步:打tag(与spec对应的版本号一致)
第八步:验证私有库(参考9)
因依赖官方库YYText和本地私有库WCategory,需要添加-–sources
pod lib lint TTP-WAlertView.podspec --sources=iOS-TTP-Spec,master --allow-warnings
第九步:私有库发布
pod repo push 【私有仓储名】 【需要发布的spec文件名】 --allow-warnings
pod repo push iOS-TTP-Spec TTP-WAlertView.podspec --sources=iOS-TTP-Spec,master --allow-warnings
=======================================================================
以下是已有的git仓库,制作私有仓库:
1、创建私有仓储,如果有的话,此步骤忽略
pod repo add iOS-TTP-Spec http://xxx.xxx
2、新建podspec文件
3、打tag
4、验证podspec
pod lib lint xxxx.podspec --allow-warnings
5、上传podspec到iOS-TTP-Spec
pod repo push iOS-TTP-Spec xxx.podspec --allow-warnings
问题记录:
1、遇到控件版本不支持的问题:
- ERROR | [iOS] xcodebuild: EFCountingLabel/EFCountingLabel/EFCount.swift:164:40: error: 'default' has been renamed to 'RunLoopMode.defaultRunLoopMode'
- NOTE | [iOS] xcodebuild: Foundation.RunLoop.Mode:4:23: note: 'default' was introduced in Swift 4.2
解决方案:
1、在pod lib lint 或者 pod repo push 追加 --swift-version=5.0版本信息
pod repo push iOS-TTP-Spec CheckReportModule.podspec --sources=master,iOS-TTP-Spec --allow-warnings --swift-version=5.0
参考文献:cocoapods建swift版本的私有库时注意的地方 - 简书
2、pod库指定版本:第一种方法:在 .podspec文件中直接s.swift_version='5.0';第二就是 echo "5.0" > .swift-version
问题二:解决pod lib lint/repo push 报错 ...... normal arm64
发布TTPWUMService 时报错 ...... normal arm64
验证发现是因为使用的Xcode12带的命令行工具发布版本,应当是模拟器版本会生成arm64,符号架构混乱导致的报错
解决办法 一:
pod repo push
命令添加 --skip-import-validation
参数,push 将跳过验证 pod 是否可以导入。
解决办法 二:
podspec 添加以下配置
# 模拟器排除arm64架构
s.pod_target_xcconfig = {
'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
}
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'
}
参考:https://www.jianshu.com/p/6f3f634d084b