使用Cocoapods来管理一个自己的私有库,在做项目的时候,可以方便我们自己管理和使用。想象一下,如果你的代码库在多个项目中使用,其中一个文件更新,你需要在多少个项目中修改文件?而使用Cocoapods只需pod update一下。。。
下面介绍一下创建私有库的详细过程。
1、注册Trunk
trunk需要CocoaPods 0.33版本以上,用
pod --version
命令查看版本
如果版本低,需要升级:
sudo gen install cocoapods
pod setup
查看自己是否注册过Trunk
pod trunk me
没有注册过会提示:You need to register a session first.
注册
// 加上--verbose可以输出详细debug信息,方便出错时查看。
pod trunk register [email protected] "name" --verbose
"name" 里面代表你的用户名,最好起一个好的名字
[email protected] 代表你的邮箱
注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下
确认结果:
注册成功后可以再查看一下个人信息
pod trunk me
2、创建一个项目,添加到sourcetree创建本地仓库
3、创建.podspec
cd 到你的项目下
// 注 SYCommonTool 这个是你框架的名称
1、pod spec create SYCommonTool
编辑.podspec文件
Pod::Spec.new do |spec|
spec.name = "SYCommonTool"
spec.version = "0.0.1"
spec.summary = "A just test demo"
spec.description = <<-DESC
创建项目中常用组件的集合,不断更新
DESC
注意: description不能太短
spec.homepage = "[https://github.com/lisiyuan1993/SYCommonTool](https://github.com/lisiyuan1993/SYCommonTool)"
spec.license = "MIT"
# spec.license = { :type => "MIT", :file => "FILE_LICENSE" }
spec.author = { "lisiyuan" => "[email protected]" }
spec.platform = :ios, "8.0"
spec.source = { :git => "[https://github.com/lisiyuan1993/SYCommonTool](https://github.com/lisiyuan1993/SYCommonTool).git", :tag => "#{spec.version}" }
spec.source_files = "SYCommonTool/**/*.{h,m}"
source_files: 写法
'SYCommonTool/*' '*'表示匹配所有文件
'SYCommonTool/SYCommonTool/*.{h,m}' '*.{h,m}' 表示匹配所有以.h和.m结尾的文件
'SYCommonTool/**/*.h' '**' 表示匹配所有子目录
注意--常常遇到这个报错:file patterns: The `source_files` pattern did not match any file.
这个错误也是使用指令pod lib lint SYCommonTool.podspec检查文件是否合法时发生的;
这个是在指定共享的类库时, 文件路径不对, 也就是设置s.source_files字段时, 发生了错误, 这里的路径是相对于SYCommonTool.podspec文件的, 如果是与SYCommonTool.podspec同级的文件夹, 直接写文件夹名称即可, 如:
s.source_files = "SYCommonTool"
如果有多级目录, 一定要逐级-逐级-逐级添加. 这里也可以这么写:
s.source_files = "SYCommonTool/**/*.{h,m}"
spec.exclude_files = "Classes/Exclude"
end
4、如果前面没有选择创建这个LICENSE文件, 创建LICENSE(许可证/授权)文件,此文件必须要有
创建一个文件名字命名为LICENSE,内容为:只需要把前面的版权改一下就行了,后面的都一样
Copyright (c) 2019 nuckyLee
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
5、上传到Git
将包含配置好的 .podspec, LICENSE 的项目提交 Git
6、打tag
查看所有的tag
$ git tag
git tag 0.0.1 添加一个tag
将0.0.1标签提交到git服务器
$ git push origin 0.0.1
添加新的release版本
$ git add . && git commit -m 'Release 0.0.1'
将本地所有标签一次性提交到git服务器
$ git push origin –tags
$ git push --tags
如果我们的tag打错了,没有用的话,我们应该怎么删除呢?
1、查看tags
git tag 就会罗列出我们所有的tags
2、删除本地tags
git tag -d tagName
3、删除远程分支
git push origin :refs/tags/分支名称(如:0.0.1) 就删除了远程分支
我之前没有执行如下两条set命令也push成功,但这一次一直不成功(提示"The source_filespattern did not match any file."错误),于是在网上有人说到要执行如下两条命令,果然成功了,因为当时我的文件路径(本地和网络git上),确定是没有错的。
set the new version to 1.0.0
set the new tag to 1.0.0 (1.0.0要与podspec的version对应)
这两条命令是为pod添加版本号并打上tag。然后执行pod验证命令:
$ pod lib lint
这里要注意一点,有时你写的podspec文件在后面push的时候会提示[iOS] file patterns: Thesource_filespattern did not match any fi错误,网上很多人都说是路径不对!其实在确认你的路径没问题的情况下还报这个错,那就git 对应的tag下根本没有对应的podspec文件;
你进入到git 主页,按下图的方式点击对应的tag
进入对应的tag后,你后发现根本没有任何文件,所以肯定不会成功;
7、上传代码到Cocoapods
以上全部完成后, 最后一步就是上传代码到Cocoapods了;
首先, 使用下面的指令来检查文件是否可用:
pod spec lint
出现错误: - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
- ERROR | xcodebuild: ....
- error: include of non-modular header inside framework module '' [-Werror,-Wnon-modular-include-in-framework-module]
...
原因就是我的库的某个头文件中直接import了第三方库(我对它有依赖)的头文件,我修改了spec.frameworks = "Foundation", "UIKit"解决。
如果没有错误, 会输出:
最后就是上传代码了, 使用下面的指令进行上传:
pod trunk push SYCommonTool.podspec
上传的时间可能会有点长, 耐心等待, 成功后会输出:
8.测试自己的cocoapods
这个时候使用pod search搜索的话会提示搜索不到,可以执行以下命令更新本地search_index.json文件
rm ~/Library/Caches/CocoaPods/search_index.json
然后
pod search SYCommonTool
该命令会重新创建search_index.json文件,5-10分钟,耐性等待
!!!
不管你的spec版本是否已经发布过一版还是第一次发布,在你改了项目里面的代码后你都必须像更新git代码一样先更新tag,只不过命令不同,具体如下:
1、进入到工程有podspec文件的目录
2、git tag 0.0.1 添加一个tag
3、git add . && git commit -m 'Release 0.0.1' 添加新的release版本
4、git push --tags 在github上添加tag并更新内容
5、git push origin master 更新git、podspec中的version和tag
6、提交到cocopods:
pod trunk push pod search SYCommonTool.podspec
参考:
[Cocoapods]使用Cocoapods + Github托管代码[https://www.jianshu.com/p/a72a529dc659]
( https://www.jianshu.com/p/a72a529dc659)
手把手教你发布自己的cocoapods开源库https://www.jianshu.com/p/3a365f273439
[Cocoapods]项目添加Cocoapods支持遇到的坑https://www.jianshu.com/p/283584683b0b