上传自己库到Cocoapods和遇见的各种问题解决
第一步,上传自己写好的代码让别人去下载。先安装Cocoapods
端口输入:sudo gem install cocoapods 安装完成后。开始注册trunk
第二步,注册trunk最好账户和邮箱和github账户和绑定邮箱一致,代码如下
端口输入:pod trunk register xxxxxx@qq.com '账户名' --verbose 回车
第三步,去你上一步填写的邮箱去验证,会收到邮箱,将邮件里面的地址复出出来,在浏览器上面打开就可以了。完事后请输入一下代码在端口:
端口输入:pod trunk me 看到如下信息:
这里我们看到你所需要的信息,Pods 这是现实None 没有上传过任何代码,等后期你上次成功后可以再来打开看看就懂了。
第四步,期初完成,我们接下来可以去github去先创建你要上次代码的文件文本如下:
这里期初没有这些代码数据,可以在这里创建也可以github官方上次工具直接上次就可以,工具如下:
登录自己的github账户和密码,可以将你要上传的代码直接拖进去,或者自己手动添加进去,这时候点击Push 上传就可以如下:
完成这样我们就看见我第一张上传的图片那样了,你们第一次上传没有podspec文件还有LICENSE文件。接下来我们去创建剩下所需要的文件。
第五步,创建podspec文件和配置podspec文件。
在端口数据:pod spec create xxxxxx.podspec 记得你输入这个的时候必须在你项目的目录之内才行。如:
在项目中看见xxxx.podspec 文件说明创建成功,接下来我去配置文件如下:
这里给大家介绍一下上面配置的各个对应的信息。
s.name = "" 这里填写你上传的项目文字
s.version = "0.0.1" 你的第一个版本号。
s.summary = "" 这里写你项目的详细介绍和使用方法,
s.description = "版本控制数据" 这里填写具体信息
s.homepage = "https://github.com/13662049573/TFY_Model" 这里填写你github下载地址
s.license = "MIT" 这里是官方规定写这个就可以。
s.author = { "tianfengyou" => "420144542@qq.com" } 这里写你自己刚才注册trunk的时候账户和邮箱就可以
s.platform = :ios,'10.0' 这里是写你项目支持的最低版本。
s.source = { :git => "https://github.com/13662049573/TFY_Model.git", :tag => 'v0.0.1'} 这里写你github上面的下载地址和版本号控制。
s.source_files = "TFY_Model/TFY_ModelKit/*.{h,m}" 这里配置最重要的,文件路径后面对这里遇见问题和配置的更多详细信息。
s.requires_arc = true 这里是否支持ARC
s.frameworks = "UIKit" 涉及的库多库可以用,隔开。
s.ios.deployment_target = "9.0"
这个podspec配置完成后,我去配置一个LICENSE 文件这里将下面创建一个文字为LICENSE的文件,然后将下面的代码赋值进去改一下你的个人信息保存就可以了,代码如下:
The MIT License (MIT)
Copyright (c) 2019 田风有 The MIT License (MIT)
Copyright (c) 2019 田风有
Copyright (c) 2019-2026 YJSettingTableView Software Foundation (https://github.com/13662049573/TFY_Model)
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.
第六步,完成这两个文件的配置然后我去github去创建一个上传路径和必须要的操作:如下:
你们进入看到的release这里显示的是0,然后点击进去这里。
点击这里然后就看到如下:
上面都配置完和按照要求填写完成后,我们回到端口这里,进行验证和调试。如下:
端口输入: pod lib lint xxx.podspec --allow-warnings --use-libraries
回车:进行验证你的配置和路径是否正常
等看到passed validation说明验证成功,
第七步,接下来我们开始上传代码了如下:
端口代码:pod trunk push xxxxxx.podspec --allow-warnings --use-libraries
这里和前面我们检查的时候都要加上,--allow-warnings --use-libraries 为嘛一会我给你说这里遇见的很多问题并加以解释。
这里会上传我们需要等待,这个基础上会出现很多问题,接下来我给你大家详细分析和解决遇见的问题、
第八步。CocoaPods 操作过程中出现的错误
错误1
,最常见的错误
ERROR | [iOS] file patterns: The source_files
pattern did not match any file.
出现这个错误,是source_files
下面的文件不对,之前网上找的podspec文件出错,目前这个没发现。如果出现这个错误,就去修改source_files
的文件路径就可以了。不要按照xcode里面看到的路径写,要写物理路径,打开文件夹去查看。一般规则就是:source_files
:这里要注意的是这里的路径是以xxx.podspec
文件为根据,同级的话,就写文件名就好(一般要传pod的最外层文件夹和xxx.podspec文件是同级的)。往后多级的,逐级加。如果多个的话,就分组加,逗号隔开。下面针对各种情况给出范例:
1、同级的文件夹B里面只有.h和.m文件source_files = "B/*.{h,m}"
2、多级文件夹B/C/D(只有最后一级文件夹里面有.h和.m文件source_files = "B/C/D/*.{h,m}"
3、多级文件夹B/C/D,每个文件夹里面都有.h和.m文件source_files = "B/*.{h.m}","B/C/*.{h.m}","B/C/D/*.{h.m}"
其中C D可以用**代替
错误2
Unable to accept duplicate entry for: TestProject_hu (1.0.0)
这个错误的出现是说明git上的版本和你的xxx.podspec文件里的version不一致,这个时候最好双方都修改下。成功的几率会高点。一个git的tag修改下,xxx.podspec里的version也修改下。git打的版本一定要和xxx.podspec文件中的version一致。
错误3
ERROR | xcodebuild: /Users/xinhuikeji/Library/Developer/Xcode/DerivedData/App-cpgccqdjhyrbqwcpjanyefntolkf/Build/Products/Release-iphonesimulator/wLib/wLib.framework/Headers/BaseModel.h:13:9: error: include of non-modular header inside framework module 'wLib.BaseModel' [-Werror,-Wnon-modular-include-in-framework-module]
出现场景:pod验证podspec文件的时候,如果.h文件里面有引用第三方pod,会出现这个错误
解决方式:在命令后面添加--use-libraries
就可以了pod lib lint xxx.podspec --allow-warnings --use-libraries
错误4
上传到pod的时候,想要出现图中这样的文件层级,这个时候就需要在xxx.podspec文件里面用到一个subspec
的属性
#s.source_files = 'TQKit/Classes/**/*'
s.subspec 'Tool' do |ss|
ss.source_files = 'TQKit/Classes/Tool/TQMacro.h'
end
s.subspec 'TQApi' do |ss|
ss.source_files = 'TQKit/Classes/TQApi/*.{h,m}'
ss.dependency 'TQKit/Tool'
ss.dependency 'YTKNetwork'
end
s.subspec 'TQCategory' do |ss|
ss.source_files = 'TQKit/Classes/TQCategory/*.{h,m}'
end
s.subspec 'TQTableView' do |ss|
ss.source_files = 'TQKit/Classes/TQTableView/*.{h,m}'
end
这里我的s.source_files
是注释掉的,是因为我的TQKit
下面所有的文件都在我下面定义的文件夹里面,所以就不需要写这个路径了。如果TQKit
下面有一个公共的头文件,这样的话可以写成s.source_files = 'TQKit/Classes/xxx.h'
;
注意到这段代码:
s.subspec 'TQApi' do |ss|
ss.source_files = 'TQKit/Classes/TQApi/*.{h,m}'
ss.dependency 'TQKit/Tool'
ss.dependency 'YTKNetwork'
end
里面有两个引用的效果,这是因为TQApi
里面会用到这两个库,所以要在自己的下面进行引用。
- 一个是引用当前TQKit里面有的文件
TQMacro.h
文件,但是这个文件不在TQApi
下面,所以要进行引用。再者上面已经把TQMacro.h
文件放到Tool
里面,所以这里引用Tool
文件夹就可以,或者也可以写成'TQKit/Tool/TQMacro.h'
s.subspec 'Tool' do |ss|
ss.source_files = 'TQKit/Classes/Tool/TQMacro.h'
end
- 一个是引用一个pod第三方库
YTKNetwork
,pod第三方库引用就简单了,不需要写路径,直接写库名就可以。
错误5
- 调用终端命令
pod lib lint --allow-warnings --use-libraries
如果是swift语言的话,则有可能出现下面的错误:
-> BaseComponent (0.1.0)
- WARN | [iOS] swift_version: The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
`echo "2.3" > .swift-version`
[!] BaseComponent did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
You can use the `--no-clean` option to inspect any issue.
- 解决方法:终端使用
echo "2.3" > .swift-version
命令即可
错误6
- 在执行指令
git push -u origin master
的时候,会出现下述错误:错误6
这个错误时说本地库的文件和远程库的文件不对应,可以按照下述方式解决:
- 1、执行指令
git pull --rebase origin master
,然后再push - 2、上述操作还是不行的话,就执行强制覆盖,执行
git push -f origin master
错误7
执行指令pod trunk push xxx.podspec
的时候,报下面错误
There was an error pushing a new version to trunk: getaddrinfo: nodename nor servname provided, or not known
解决方案:出现这个错误,是网络DNS错误,去设置->网络->雷劈以太网->高级设置->DNS设置成114.114.114.114
错误8
在对podspec文件进行验证pod spec lint
的时候,有时候会出现下面的错误
错误8-1
这种错误大多数出现在创建私有库的过程中,当前的私有库依赖了其他的私有库,在验证的时候没有知道私有库的源地址。
解决方法:
上面已经提到这种情况出现在我们验证私有库的时候,该私有库依赖其他私有库,但是没有指定依赖私有库的源地址,所以我们在验证的时候加上一个参数--sources
,这个--sources
指定的源地址一个是我们的私有库地址
,一个是pods的公有库地址https://github.com/CocoaPods/Specs.git
!
图8-2
错误9
在执行git push origin master
的时候,如果指定origin
的源地址是https
的,可能会出现下面的错误
`HTTP 413 curl 22 The requested URL returned error: 413 Request Entity Too Large`
出现这个错误需要做的就是更换origin
源地址
git remote set-url origin ssh地址
错误10.
ERROR | spec: The specification defined in `LZTool.podspec` could not be loaded.
MacBook:PodTest Artron_LQQ$ pod lib lint LZTool.podspec
-> LZTool.podspec
- ERROR | spec: The specification defined in `LZTool.podspec` could not be loaded.
[!] Invalid `LZTool.podspec` file: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...<-DESC 这是一个测试文档, 这里主要是描述类库...
... ^
LZTool.podspec:28: syntax error, unexpected '\n', expecting '='.
# from LZTool.podspec:27
# -------------------------------------------
# # * Finally, don't worry about the indent, CocoaPods strips it!
> s.description = <<-DESC 这是一个测试文档, 这里主要是描述类库的功能设计初衷介绍
# DESC
# -------------------------------------------
[!] LZTool.podspec did not pass validation, due to 1 error.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
`echo "2.3" > .swift-version`.
You can use the `--no-clean` option to inspect any issue.
MacBook:PodTest Artron_LQQ$
这个错误是使用指令pod lib lint LZTool.podspec检查文件是否合法时发生的;
可以看出是在设置s.description字段时发生的错误, 当时的写法是:
s.description = <<-DESC LZTool 是一个用于保存一些常用工具类的工具 DESC
以为可以吧他们并到一行, 导致一直报这个错, 后来写成两行, 还是报错, 最后才试出这样写才对:
s.description = <<-DESC
LZTool 是一个用于保存一些常用工具类的工具
DESC
错误11.
[iOS] file patterns: The `source_files` pattern did not match any file.
MacBook:PodTest Artron_LQQ$ pod lib lint LZTool.podspec
-> LZTool (0.0.1)
- WARN | github_sources: Github repositories should end in `.git`.
- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.
[!] LZTool did not pass validation, due to 1 error and 1 warning.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
`echo "2.3" > .swift-version`.
You can use the `--no-clean` option to inspect any issue.
MacBook:PodTest Artron_LQQ$
这个错误也是使用指令pod lib lint LZTool.podspec检查文件是否合法时发生的;
这个是在指定共享的类库时, 文件路径不对, 也就是设置s.source_files字段时, 发生了错误, 这里的路径是相对于LZTool.podspec文件的, 如果是与LZTool.podspec同级的文件夹, 直接写文件夹名称即可, 如:
s.source_files = "LZTool"
如果有多级目录, 一定要逐级添加. 这里也可以这么写:
s.source_files = "LZTool/*.{h,m}"
如果,在某个版本的tag下报此错误,更改为正确路径后,还是报此错误,可尝试新建一个新的tag;
错误12
. fatal: Remote branch 0.0.1 not found in upstream origin
MacBook:PodTest Artron_LQQ$ pod spec lint
-> LZTool (0.0.1)
- ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://github.com/LQQZYY/PodTest.git /var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n --template= --single-branch --depth 1 --branch 0.0.1
Cloning into '/var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n'...
warning: Could not find remote branch 0.0.1 to clone.
fatal: Remote branch 0.0.1 not found in upstream origin
) during validation.
Analyzed 1 podspec.
[!] The spec did not pass validation, due to 1 error.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
`echo "2.3" > .swift-version`.
MacBook:PodTest Artron_LQQ$
这个是使用指令pod spec lint来检查文件是否可用时发生的错误;
这是因为在你托管代码的库里(这里是指github)找不到这个分支, 也就是在编辑 LZTool.podspec时, 里面的字段 s.verson, s.source中的 tag与github创建的release版本号不一致导致, 修改为一样即可!
这里还有另外一个解决方法方法二
错误13
. 加载xib问题
PS: 这个不是我个人遇到的问题, 是在文章中看到, 这里记录一下;
如果通过cocoapods下载的类库中含有Xib文件, 使用原来的方式初始化就不起作用了:
[[[NSBundle mainBundle] loadNibNamed:@"xibName" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"xibName" bundle:nil] forCellWithReuseIdentifier:@"ZLCollectionCell"];
应该使用下面这种方式初始化:
#define kZLPhotoBrowserBundle [NSBundle bundleForClass:[self class]]
[[kZLPhotoBrowserBundle loadNibNamed:@"ZLPhotoActionSheet" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"ZLCollectionCell" bundle:kZLPhotoBrowserBundle] forCellWithReuseIdentifier:@"ZLCollectionCell"];
这样就能正常使用了;
错误14
.加载图片资源问题
PS: 这个问题我尝试了一个demo, 直接设置了s.resources = "LZScaner/images/*.png", 图片也能正常显示( 可参考我设置的podspec文件LZScaner.podspec)没有遇到这个问题, 但是还是把这个方式记录一下吧...
如果通过代码"[UIImage imageNamed:@"picName"]"去设置图片的话,则图片资源有可能无法正常显示, 可通过以下方式解决:
- 创建bundle资源目录
command+N -> Resource -> Settings Bundle
删除bundle携带的无用文件,把图片资源添加到bundle资源内
- 改变代码图片路径
// 图片路径
#define kZLPhotoBrowserSrcName(file) [@"ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
#define kZLPhotoBrowserFrameworkSrcName(file) [@"Frameworks/ZLPhotoBrowser.framework/ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
kZLPhotoBrowserSrcName(file) 为通过copy文件夹方式获取图片路径的宏
kZLPhotoBrowserFrameworkSrcName(file) 为通过cocoapods下载安装获取图片路径的宏
- 然后修改代码中设置图片的方式如下
UIImage *img = [UIImage imageNamed:kZLPhotoBrowserSrcName(@"img.png")]?:[UIImage imageNamed:kZLPhotoBrowserFrameworkSrcName(@"img.png")];
其podspec地址: ZLPhotoBrowser.podspec可以参考学习!
错误15
. trunk: getaddrinfo: nodename nor servname provided, or not known
MacBook:LZScaner Artron_LQQ$ pod trunk register 302934443@qq.com --description= 'LZScaner'
[!] There was an error registering with trunk: getaddrinfo: nodename nor servname provided, or not known
MacBook:LZScaner Artron_LQQ$
出现这个原因是, 我开了APN, 把APN关了, 重新启动一下网络就好了...
错误16
. xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information
MacBook:LZSortTool Artron_LQQ$ pod spec lint
-> LZSortTool (0.0.1)
- WARN | [iOS] license: Unable to find a license file
- ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
- NOTE | [iOS] xcodebuild: LZSortTool/LZSortToolDemo/LZSortToolDemo/LZSortClass/LZSortTool.m:14:9: fatal error: 'ChineseToPinyin.h' file not found
Analyzed 1 podspec.
[!] The spec did not pass validation, due to 1 error and 1 warning.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run:
`echo "2.3" > .swift-version`.
MacBook:LZSortTool Artron_LQQ$
这个是执行 pod spec lint指令的时候产生的错误:
这个错误从- NOTE可以看出, 是项目中的这个文件ChineseToPinyin.h找不到, 回到项目, 编译一下也会报这个错. 是因为我修改了本地文件中的这个文件的路径, 项目中引用的还是原先的路径, 打开左侧文件列表, 可以发现这个文件是红色的, 删除引用, 重新添加, 然后到你的github上面, 重新添加一个release版本, 再重新执行指令即可验证通过.
错误17.
验证成功后搜索不到新加的支持库
如果在制作支持库的过程中没有错误, 或者最好添加库验证通过, 即出现下面这个界面:
上传成功
在使用
pod search LZTool
的时候, 搜索不到这个库, 或者在使用时找不到这个库, 可以使用下面的指令来清理一下缓存:
rm ~/Library/Caches/CocoaPods/search_index.json
然后再去使用, 基本就可以了.
错误18
. ERROR | name: The name of the spec should match the name of the file.
LQQ-MacBook-Pro:LQWebViewSwift LQiqiang$ pod lib lint LQWebViewSwift.podspec
-> LQWebView-Swift (1.0)
- ERROR | name: The name of the spec should match the name of the file.
- ERROR | [iOS] unknown: Encountered an unknown error (No podspec found for `LQWebView-Swift` in `/Users/LiuQiqiang/Desktop/SourcesTree/Cocoapods/LQWebViewSwift`) during validation.
[!] LQWebView-Swift did not pass validation, due to 2 errors.
You can use the `--no-clean` option to inspect any issue.
LQQ-MacBook-Pro:
出现这个错误是因为,我的podspec文件名称和里面设置的 ** s.source_files** 和 s.name不一致导致的,修改为一致的即可!
本地检测代码仓库是否有问题
pod lib lint --allow-warnings --use-libraries
远程检测代码仓库是否有问题
pod spec lint --allow-warnings --use-libraries
向远程代码索引库提交spec
pod trunk push --allow-warnings --use-libraries
# 1 注册
pod trunk register 123456@qq.com '用户名' --description='描述' --verbose
# 下边是拓展,不再步骤中
# 2 查看注册信息
pod trunk me
# 3 添加其他维护者
pod trunk add-owner XXXSDK 123456@qq.com
# 4 删除已发的版本
pod trunk delete XXXSDK 版本号
# 5 删除某个pod
pod trunk deprecate XXXSDK
# 6 删除其他维护者
pod trunk remove-owner XXXSDK 56789@qq.com
更多推荐
所有评论(0)