Pod spec私有库集成遇到的错误(一)

最近集成私有库组件话,结果真是一步一个坑。

主要遇到的坑:

一、首先没有使用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


你可能感兴趣的:(Pod spec私有库集成遇到的错误(一))