最近集成私有库组件话,结果真是一步一个坑。
主要遇到的坑:
一、首先没有使用pod lib create 来创建私有库管理
单独创建工程,接着pod sepc create 创建x x x.podspec 。这样创建的后还需要关联,结果一堆错误,而且还很麻烦。
最后使用pod lib create x x x来创建私有库管理
pod lib create x x x
# 你想使用哪个平台?
1、What platform do you want to use?? [ iOS / macOS ]
iOS
# 库语言选择?
2、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 你要使用哪个测试框架?
3、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI测试?
4、Would you like to do view based testing? [ Yes / No ]
NO
# 类名前缀?
5、What is your class prefix?
WB
二、创建两个私有库地址
1、一个是私有工程库的地址,一个是存放x x x.podspec索引的索引库地址。
三、添加本地pod索引
pod repo add WheatearSpecs + 索引的索引库地址
创建完成后在 ~/.cocoapods/repos中查看,会有一个WheatearSpecs文件夹存在表示 添加本地索引成功。
四、修改x x x.podspec
这个文件的修改,没什么可说的,自行学习。主要说一下文件修改完成后在验证阶段遇到的坑。
podspec书写规范文档
name:私有库包名,s.name = 'LCJPUtils'
version:当前版本号,s.version = '1.0.1'
platform:最低支持系统,s.platform = :ios, '8.0'
source:git地址、版本号,s.source = { :git => 'git地址', :tag => '1.0.1'}
source_files:具体类库路劲,s.source_files = 'LCJPUtils/LCJPUtils/*'
libraries:系统libs,s.libraries = 'sqlite3','stdc++'
vendored_libraries:内置libs路径,s.vendored_libraries = 'LCJPUtils/utils.a'
frameworks:系统frameworks,s.frameworks = = 'UIKit','Foundation'
vendored_frameworks:内置frameworks路径,s.vendored_frameworks = 'LCJPUtils/utils.framework'
requires_arc:是否为arc,s.requires_arc = true
dependency:关联第三方库、私有库,s.dependency 'AFNetworking' s.dependency 'LCNetwork', '~> 1.0.1'
resource: 资源文件地址,s.resource = 'LCJPUtils/LCJPUtils/resource.bundle'
public_header_files:私有库公共头文件,s.public_header_files = 'LCJPUtils/LCJPUtils/UtilsHeader.h'
valid_archs:支持的处理器,valid_archs = ['armv7s','arm64','x86_64','armv7','arm64e']
pod_target_xcconfig:当前库的Build Settings,s.pod_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }
user_target_xcconfig:project中的Build Settings,s.user_target_xcconfig = { 'OTHER_LDFLAGS' => '-lObjC' }
4.1本地验证。
cd 对应的文件x x x.podspec目录下
执行命令,本地验证。
pod lib lint x x x.podspec
出现 x x x.podspec passed validation. 表示本地验证成功。
这里失败的主要原因是路径问题。
[iOS] file patterns: The `source_files` pattern did not match any file.
总结一下有几种:
x x x/Classes/**/*
***/Classes/**/*
参考解决方法https://stackoverflow.com/questions/43073261/error-ios-file-patterns-the-source-files-pattern-did-not-match-any-file
4.1远端验证
本地通过后,还要进行远端的验证才能关联上传。
pod spec lint :pod远程库验证
遇到一个坑是,远端还没有对应的版本和代码。所以结下来需要处理本地的代码。
git 提交对应的私有仓库代码到远端,并打上对应的tag,注意tag需要和x x x.podspec的版本号一致。
把tag推送到远端仓库。
再次远端验证。
pod repo push WheatearSpecs x x x.podspec --allow-warnings
遇到错误
[!] /usr/bin/git -C /Users/jiangweidong/.cocoapods/repos/WheatearSpecs pull
Your configuration specifies to merge with the ref 'refs/heads/master'
from the remote, but no such ref was fetched.
对于这个错误,可是折腾了我好一会。
先上参考文献https://stackoverflow.com/questions/43073261/error-ios-file-patterns-the-source-files-pattern-did-not-match-any-file
https://blog.csdn.net/andanlan/article/details/50515434?utm_source=blogxgwz8
https://stackoverflow.com/questions/65448393/your-configuration-specifies-to-merge-with-the-ref-refs-heads-master-from-the
最后检查是远端specs为空所致,添加不为空就可以了。
4.2发布
执行下面
pod repo push 索引库名 podspec文件名:命令执行会先将pod索引添加到本地的索引库,然后会自动推送到远程的索引库
按理来说到这里应该就没问题了,但是意外出现了。
一直报错
[!] /usr/bin/git -C /Users/jiangweidong/.cocoapods/repos/WheatearSpecs pull
GitLab: The project you were looking for could not be found.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
有没有发现和上面一样的,对就是那个解决方法。
经过一番折腾,终于出现了
Updating the `WheatearSpecs' repo
Adding the spec to the `WheatearSpecs' repo
- [Update] XXX (0.1.5)
Pushing the `WheatearSpecs' repo
jiangweidong@localhost HYBasicToolKit %
惊喜不断意外不断。
检查发现,本地WheatearSpecs 已经更新了 spesc文件,但是队友的远端索引仓库没有提交上去。
百思不得其解。折腾了号一会,最后命令行里面加了几个参数解决问题。
pod repo push WheatearSpecs XXX.podspec --allow-warnings --sources=索引仓库地址 --use-json
问题虽然解决了,但是我还是没有找到上面问题的根本原因,有哪位小伙伴理解的,或者遇到过的,欢迎交流,评论留言。
五、搜索对应的库
pod search XXX
六、pod使用
source '索引库地址'
target 'm m m' do
pod 'XXX'
end
七、相关命令
在本地和远端验证中可以根据提示后面加对应的参数
--allow-warnings Allows pushing even if there are warnings
--use-libraries Linter uses static libraries to install the
spec
--use-modular-headers Lint uses modular headers during
installation
--sources=https://cdn.cocoapods.org/ The sources from which to pull dependent
pods (defaults to all available repos).
Multiple sources must be comma-delimited
--local-only Does not perform the step of pushing REPO
to its remote
--no-private Lint includes checks that apply only to
public repos
--skip-import-validation Lint skips validating that the pod can be
imported
--skip-tests Lint skips building and running tests
during validation
--commit-message="Fix bug in pod" Add custom commit message. Opens default
editor if no commit message is specified
--use-json Convert the podspec to JSON before pushing
it to the repo
--swift-version=VERSION The `SWIFT_VERSION` that should be used
when linting the spec. This takes
precedence over the Swift versions
specified by the spec or a `.swift-version`
file
--no-overwrite Disallow pushing that would overwrite an
existing spec
--allow-root Allows CocoaPods to run as root
--silent Show nothing
--verbose Show more debugging information
--no-ansi Show output without ANSI codes
--help Show help banner of specified command
常用命令
pod spec create XTProtocolManager//生成pod库配置文件
pod init//生成Podfile
pod lib lint//验证lib
pod repo push [repo] [podspec]
pod repo push [repo] [podspec] --verbose --allow-warnings
pod repo add NAME URL[branch]:添加自己的pod仓库
pod lib create [仓库名]:在本地创建一个基于pod模板的git仓库
pod lib lint:pod本地库验证
pod spec lint:pod远程库验证
pod repo push 索引库名 podspec文件名:命令执行会先将pod索引添加到本地的索引库,然后会自动推送到远程的索引库
git init//初始化
git status//查看状态
git add .//添加文件到缓冲区
git commit -m "描述"//从缓冲区提交代码到仓库
git tag -a '0.0.1' -m '描述'//添加tag
git tag //查看tag
git tag -d '0.0.1'//删除tag
git remote add origin https://github.com/xxx.git//关联本地仓库和远程仓库。
git push -f origin master//将本地库的代码推到远程库
git push --tags//将本地创建的tag推到远程库
git push origin :0.0.1//删除tag
首次上传git时需要的命令
git add .
git commit -m "first commit"
git remote add origin 远程代码库地址
git push -u origin master
git pull origin master
git pull origin master --allow-unrelated-histories