因为需要做组件化,想把自己的部分代码封装framework库,提交到git,给客户直接cocapod集成,所以尝试把git的代码支持cocoapod,发现一路都是坑,所以记录一下.这里主要是我的cocoapod更新出了问题,所以导致各种坑,这里做个记录方便下次再进坑.
这里以一个UIColor+RGB
的分类为例子,创建一个ZSYTool的第三方库,可以通过pod 'ZSYTool'
直接导入工程使用.
步骤
1. 创建一个public的repo
我创建的地址是 : https://github.com/elloren123/ZSYTool.git
2. 创建工程
- 创建一个空文件夹: ZSYTool
- 终端cd到这个文件夹,执行命令
pod lib create ZSYTool
说明:这里的 ZSYTool 是在创建仓库时的 ZSYTool.git; - pod会克隆一个实例到文件夹中;然后会提示进行文件配置,一下是一个配置的说明:
Pod::Spec.new do |spec|
spec.name = "A_section"
#发版版本号,每更新一次代码就改变一次版本号
spec.version = "0.0.1"
#一个简单的总结,随便写
spec.summary = "AViewController抽离"
#描述,随便写 但是要比 s.summary 长度长
spec.description = <<-DESC
模块化开发,抽离的AViewController界面,彻底解耦,用于快速集成;
DESC
#你的 git 仓库首页的网页 url,注意并不是 https/ssh这种代码仓库地址
spec.homepage = "https://gitee.com/elloren123/a_section"
#直接写 MIT
spec.license = "MIT"
#你是谁
spec.author = { "ZSY" => "[email protected]" }
#一定要写上,不写的话,执行 pod lib lint 验证项目的时候会报找不到 UIKIT 等框架错误
spec.platform = :ios, "9.0"
#这里就是你 git 仓库的 https/ssh 地址了
spec.source = { :git => "https://gitee.com/elloren123/a_section.git", :tag => "#{spec.version}" }
#这里的文件夹下的内容就是这个 pods 被pod install 的时候会被下载下来的文件,不在这个文件夹,将不会被引用
# Classes 目录和.podspec 目录是平级的。
#你可以随便指定文件夹名称,只要这个文件夹是真实存在的
#Classes/**/*.{h,m},表示 Classes 文件夹及其文件夹下的所有.h,.m 文件。
spec.source_files = "A_section/Classes/**/*.{h,m}"
#spec.exclude_files = "Classes/Exclude"
#资源文件地址,下面的所有.png资源都被打包成 s.name.bundle
#spec.resource = ['Images/*.png','Sounds/*']
end
下面是我的配置:
这个时候你需要做的就是把你要上传的代码放到ZSYTool/Classes里面
这里我就测试,就放了UIColor+RGB.h
和UIColor+RGB.m
到上图的Classes中;编辑podspec文件
打开.podspec文件,修改下版本等信息,配置一下,具体含义前面说了,我的如下:
这个截图中,我把版本改成
0.0.1
了,同时我的配置有错误,homepage地址不对,应该是https://github.com/elloren123/ZSYTool,也就是之前创建的仓库地址
-
处理podspec同级中的gitignore文件
打开隐藏文件gitignore:
Snip20201028_7.png
然后在末尾添加ZSYTool/Pods
- Example中导入库
终端cd到Example
文件夹下执行pod update
:
Snip20201028_9.png
完成后,查看Example项目中,出现了我添加的一个UIColor的分类;
如果要修改或者后续需要更新,只需要在Example里面修改上图区域里的代码,然后pod update就把代码改好了;
- 添加Demo
Example主要还是让我们添加一个例子:
#import "ZSYViewController.h"
#import
@interface ZSYViewController ()
@end
@implementation ZSYViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.view.backgroundColor = [UIColor randomColor];
}
可以运行检查效果;
- 链接库
回到终端,cd到项目目录,这里目录不要搞错:
Snip20201028_12.png
然后输入pod lib lint --allow-warnings
看到上图,说明成功了;
把工程上传到git,这里使用的是sourcetree
大致就是添加本地已有仓库--->然后编辑,绑定远端仓库地址:https://github.com/elloren123/ZSYTool.git--->然后push上去;
具体流程这里不解释了;-
给代码打上tag,这个tag要和我们之前创建的
podspec
文件中的版本一样,我的改成了0.0.1
;
Snip20201028_17.png 配置cocoapods
cd到工程目录,然后pod spec lint --allow-warnings
;(前提是已经有了cocoapod账号,如果没有,则终端输入: pod trunk register [email protected] ‘yourCocoapodName’ --description='描述信息' ,然后去邮箱激活,激活后回来验证下: pod trunk me)
我这里执行出现错误:
就是我上面提到的我的git地址在podspec
文件中配置错误导致的,修改后再次push提交git仓库;然后再次: pod spec lint --allow-warnings
;
需要输入仓库的账号密码:
成功!!!!!!✨✨✨✨✨✨✨✨✨✨✨✨
- 把配置文件上传到cocoapods
执行pod trunk push ZSYTool.podspec --allow-warnings
报错了:Snip20201028_20.png
这个报错是因为我一开始创建的库为私有库,把所有库改成公开即可;
操作方法是:找到对应的库—>Setting—>下拉到:Danger Zone-->change visibility
修改成公开的再次提交:这里看到成功的信息,给出了库的地址:https://cocoapods.org/pods/ZSYTool,通过网页打开,发现了我们提交的库;
刚刚提交的库,通过https://cocoapods.org/ 地址去查看,可能找不到,估计是更新没有这么快;
- 验证
终端执行 pod search ZSYTool
上面步骤没错的话,如果没有搜索到,第二天再试试0.0
- 创建demo集成ZSYTool
本来到此,更新下pod,应该就完了,只是我的pod更新失败,所以才有下面的一系列操作
pod更新
创建完,执行pod install
报错:
lepu@Mac-mini pod_test % pod install
Analyzing dependencies
[!] Unable to find a specification for `ZSYTool (~> 0.0.2)`
You have either:
* out-of-date source repos which you can update with `pod repo update` or with `pod install --repo-update`.
* mistyped the name or version.
* not added the source repo that hosts the Podspec to your Podfile.
执行pod repo update
:
报错:Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down
于是终端输入/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
发现也报错:/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused
于是访问网站:https://www.ipaddress.com/ 查询raw.githubusercontent.com
的真实IP,我查的是199.232.28.133
,
然后终端: sudo vim /etc/hosts
按i
进入编辑:
在末尾加入: 199.232.28.133 raw.githubusercontent.com
按ESC
结束编辑 :wq
保存退出
然后再次终端输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
漫长的等待….,然后会提示 Press RETURN to continue or any other key to abort
是否按 RETURN 继续,直接回车,让输入密码,输入后会进入下载;
这里我等了一个多小时才完成,所以不能着急0.0
然后终端输入: brew update
这个也是很长时间,30分钟左右
然后终端输入: brew install openssl
成功后,查看成功的打印提示,找到
If you need to have [email protected] first in your PATH run:
这句需要执行的指令,我的是下面的,大家的可能不相同,所以要去复制上面放入打印;
终端输入(这个是我的):echo 'export PATH="/usr/local/opt/[email protected]/bin:$PATH"' >> ~/.zshrc
然后输入: source ~/.zshrc
,这里的~/.zshrc
是我的,大家要根据自己的替换;
然后输入:brew install rbenv ruby-build
成功后,在终端分别执行以下命令:
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi' >> ~/.zshrc
source ~/.zshrc
rbenv install --list
得到版本信息:
这里安装2.7.2版本,执行: rbenv install 2.7.2
此时,再进行 pod repo update
,在更新了,不再是之前的访问无效报错了
更新成功后,在工程中进行 pod install
,发现 ZSYTool 导入成功!!!! 到此,完美解决