前言
看本地cocoaPod库 cd ~/.cocoapods/repos
在repos文件夹下面,可以看到你当前存在的一些库,当你创建了自己的私有仓库时,也会在这里显示。
按照正常逻辑来看,私有库是一个地址,版本号管理库是一个地址,最好不要把两者放在一起,会显得很乱。
所以创建私有库,我们需要创建两个库:一个是私有仓库repo,用来做私有库的版本管理;另一个是私有代码库,用来做代码编写。
创建私有仓库 repo
这里的私有空间是指私有库存放的位置,repo是repository(存储库)的缩写,如果私有库的podSpec和代码存放在一起就会显得很乱,所有通常的做法就是再私有空间只存放私有库的podSpec文件(可以理解为版本号)。
创建远程私有repo
这里使用码云,可以免费创建多个私有工程。例如创建了一个私有存储库:https://gitee.com/devAlan/PrivateRepo。(已不存在)
添加到本地仓库中
pod repo add [本地仓库repo名称] [远程repo地址]
pod repo add PrivateRepo https://gitee.com/devAlan/PrivateRepo
使用上面步骤就可以将远程的私有版本存储仓库添加到本地。在Finder中查看repos中就可以发现增加了一个文件夹PrivateRepo。
创建私有代码库
创建代码私有库有两种方式,第一种是我们正常的使用Xcode创建项目的过程,另一种是使用pod模板来创建的过程,推荐使用模板来创建。
创建一个私人代码库
创建一个私人代码库,在创建时添加MIT License和README。
使用模板创建时,创建空仓库。
将仓库clone到本地,添加项目工程文件。
添加.podspec文件
“.podspec”文件是这个代码库的pod描述文件,使用pod命令创建空白模板。pod spec create 项目名称
这里使用上面的私有代码库创建pod spec create privateAdd
。
需要注意一下:生成的默认的podspec文件中,所有没有注释掉的都必须填写正确。
使用pod模板创建
1 | pod lib creare [项目名称](最好与远端一致) |
上述命令操作完成之后,会生成相应的模板文件。
代码文件都存放在/[项目名称]/class/
下。
图片都存放在/[项目名称]/Assets/
下。
将本地 Lib 工程与远程私有 lib Git 仓库关联
1 | git remote add origin 远程仓库地址 |
编辑“.podspec”文件
1 | # |
这里有一个需要注意的地方,在创建私有库的时候,找不到MIT LICENSE证书,这里讲license修改一下
1 | s.license = { :type => "MIT", :file => "LICENSE" } |
二级库subspec
1 | s.subspec 'UIView+Category' do |ss| |
使用subspec关键字,并添加指定文件就行。
验证私有库
修改完相应的代码块之后,开始验证私有库配置是否正确。
本地验证
1 | pod lib lint |
如果出现错误,基本上都是podspec文件中的配置出现了问题,例如:
1 | $ pod lib lint |
这就需要将上面的错误修改掉。
一般情况下出现警告在后面添加pod lib lint --allow-warnings
,就可以通过验证了。验证通过会提示passed validation。
如果依赖一些静态库(.framework,.a),则在命令后面添加--use-libraries
,表示依赖了静态库。
如果报错不是很明显,这命令后添加--verbose
,会输出验证的过程,并给出报错信息。
远端验证
pod spec lint
,一般情况下私有库都是存在远程git上的,所以基本上只在第一次验证使用本地验证之后,就可以直接使用远端验证了。
但是一般情况下,创建的私有代码库如果是私有的(并不是官方的),这时候,我们在做远端验证时,需要添加代码地址。,不然pod会默认从官方repo查询。
1 | pod spec lint --sources=[私有仓库repo地址],[私有库git地址],https://github.com/CocoaPods/Specs.git |
如果出现一些警告,可以直接在命令最后添加--allow-warnings
来屏蔽警告。例如:
1 | pod spec lint --sources=https://gitee.com/devAlan/PrivateRepo,https://gitee.com/devAlan/PrivateAdd_v3.git,https://github.com/CocoaPods/Specs.git --allow-warnings |
发布私有库
将podspec文件推送到私有空间repo,在发布时一定要记住,已经做了tag处理。
1 | pod repo push [私有仓库repo] [私有库podspec文件地址] --allow-warnings |
由于基本上的所有命令操作都是在该私有库文件夹下,所以不用管podspec的文件位置。
1 | pod repo push PrivateRepo PrivateAdd.podspec --allow-warnings |
执行该命令时,相当于直接将podspec文件push到repo的Git地址上。
引用私有库
本地路径引用
做好验证之后,如果需要测试,可以直接在podfile中引用私有库的本地路径
1 | // ../是回到上一级文件目录,是以当前podfile所在文件位置决定 |
这个时候如果改动Private_v2中的代码就是直接改动。
repo引用
在podfile中先添加source,然后直接pod引入,当然在引用私有库的时候,不仅需要需要私有仓库repo的权限,还需要有私有库的权限。
1 | source 'https://gitee.com/devAlan/PrivateRepo' |
pod 常用命令
安装podfile中依赖的命令
pod install
pod update
--no-repo-update
不需要更新repo--repo-update
更新reporepo相关
pod repo list
pod repo remove xxx
移除一个本地repopod repo add [本地仓库repo名称] [远程repo地址]
远程版本空间添加到本地私有库创建相关
pod lib lint
本地验证pod spec lint
远程验证pod repo push [本地仓库repo] [*.podspec]
发布版本到repo--source=[私有repo地址][私有代码库地址][pod地址]
--allow-warnings
忽略warning--use-libraries
使用了第三方的framework或者.a文件--verbose
打印流程,可以快速定位失败原因podspec中使用到的*
/**
子目录下所有文件夹/*
目录下所有文件
遇到的问题
私有库依赖主项目中的某些文件,如果是强制性的依赖,导致本地验证和远程验证都无法通过,所以更别说发布了。
这种是没有完全的组件化。我们需要在podspec中添加HEADER_SEARCH_PATHS,添加指定位置文件路径。这里的路径也是相对路径。1
2s.xcconfig = { "GCC_PREPROCESSOR_DEFINITIONS" => 'HMTIMEINPREGNACYAPP=1',
"HEADER_SEARCH_PATHS" => "$(SRCROOT)/usr/include/libxml2", $(SRCROOT)/../Commen/** }但是这样做仍然无法通过验证,这就需要我们将私有空间repo pull到本地,手动创建版本号文件夹添加podspec文件,然后push。
在上面的代码中还有一个
GCC_PREPROCESSOR_DEFINITIONS
,这是定义一个宏,可以在Project-Build Settings - Preprocessor Macros下看到。可以配合一些没有必要引入私有代码库中的文件来使用。