目录
1.github创建远程仓库
2.创建本地组件代码库
3.组件提交到github仓库
4.组件发布到CocoaPods
5.项目导入组件
6.常见错误
1.github创建远程仓库
-
1.进入github页面,找到新建按钮
-
2.创建一个仓库
-
3.创建完成,获取到仓库的url地址
-
4.将这个url使用git命令或者Sourcetree克隆到本地就可以使用github管理相关代码啦
2.创建本地组件代码库
1.安装cocoapods
如果没有安装cocoapods,需要先安装,教程很多这里找了一一篇文章Cocoapods安装
2.创建pod账号:
把组件发布到cocoapods上需要有一个pod的账号,可以使用命令pod trunk me
来查看自己的账号信息,如果没有账号的话需要先注册一下:
注册命令:
pod trunk register 邮箱 姓名
示例:
注册完成后,可以再 pod trunk me 检查一下是否成功了
3.创建本地组件代码库
- 创建命令:
pod lib create <组件名>
- 示例(终端最好开启代理,否则容易报错):
pod lib create LLComponentDemon
- 执行结果会问一些问题:
What is your email? 你的邮箱
What platform do you want to use?? [ iOS / macOS ] 选择的平台
What language do you want to use?? [ Swift / ObjC ] 选择开发语言
Would you like to include a demo application with your library? [ Yes / No ] 是否自动生成一个用来做demo测试的模板库
Which testing frameworks will you use? [ Quick / None ] 是否集成测试框架
Would you like to do view based testing? [ Yes / No ] 是否做基于View的测试
- 示例(根据自己实际需求选择即可):
What is your email?
- lanlin0806@icloud.com What platform do you want to use?? [ iOS / macOS ]
- iOS What language do you want to use?? [ Swift / ObjC ]
- Swift Would you like to include a demo application with your library? [ Yes / No ]
- Yes Which testing frameworks will you use? [ Quick / None ]
- None Would you like to do view based testing? [ Yes / No ]
- No
上面的步骤完成后会得到一个项目文件,大致情况如下:
项目目录:
Example项目文件目录:
4.项目组件添加组件代码
- 添加的组件代码放在LLComponentDemon -> Classes 文件夹中
- 添加文件,添加一个LLTest组件文件,ReplaceMe.swift文件可以删除
- 将添加的组件文件Pod到Example文件夹中
1.进入Example文件夹(有Podfile的文件夹)
2.执行 pod install 命令
- 执行完成后工程目录就可以看到组件文件在Pods里面了
备注:需要把组件类及相关对外方法用public
声明,否则外部调用不到报错
如LLtest类没有用public修饰,外部则无法调用到:
至此我们本地的组件代码库就已经完成了,我们可以将组件代码放在本地用pod install导入使用。
3.组件提交到github仓库
1.修改.podspecs索引文件
打开工程中的LLComponentDemon.podspec文件
Pod::Spec.new do |s|
s.name = 'LLComponentDemon' #1.组件名称
s.version = '0.0.1' #2.版本号,与tag值一致
s.summary = 'This is a Demon' #3.组件描述
#4.描述
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/lanlinxl/LLComponentDemon' #5.组件主页
s.license = { :type => 'MIT', :file => 'LICENSE' } #7.组件使用协议
s.author = { 'lanolin' => 'lanlin0806@icloud.com' } #8.作者
#9.github的远程仓库索引
s.source = { :git => 'https://github.com/lanlinxl/LLComponentDemon.git', :tag => s.version.to_s }
s.ios.deployment_target = '9.0' #10.最低支持版本
s.source_files = 'LLComponentDemon/Classes/**/*' #11.组件文件路径
s.swift_version = '5.0' #12.swift支持的版本
# s.dependency 'AFNetworking', '~> 2.3' #13.组件依赖库
end
上面文件必须要更改的是:
-
第3处不更改,后台发布会报警告
-
第5处生成的可能是默认地址,不是你的github仓库地址
-
第9处生成的也可能是默认索引,不是你的github远程仓库索引
-
第13处为依赖组件,如果组件有依赖于其它组件,则需要放开此处注释,将组件引用进来,并且同时还需要在Podfile中添加依赖的组件,以保证项目能编译通过。
-
如果想要了解更多podspec的设置可以参考 podspec 常用语法和子目录
2.提交github仓库
首先cd到LLComponentDemon根目录
命令如下:
git add .
git commit -m "提交说明"
git remote add origin 远程代码仓库地址
git push origin master
git tag 版本号 (注:这里的版本号必须和.podspec里写的版本号一致,否则验证cocoaPods索引文件会报错)
git push --tags
- 示例:
git add .
git commit -m "1.0.0版本发布"
git remote add origin github.com/lanlinxl/LL…
git push origin master
git tag 1.0.0
git push --tags
- 重复使用 git remote add origin .. 到相同的仓库会报如下错误
error: remote origin already exists. 需要调用
git remote rm origin
解决
4.组件发布到CocoaPods
1.验证cocoaPods索引文件
cd到LLComponentDemon根目录执行下面命令
pod spec lint --verbose --allow-warnings
- 验证成功打印:
- 验证失败: 检查一下.podspec文件里面的版本号是否和上面的 git tag 版本号一致
2.发布组件
在有.podspec文件的组件工程根目录执行,这里还是LLComponentDemon根目录
命令如下:
pod trunk push xxxx.podspec
示例:
pod trunk push LLComponentDemon.podspec
如果配置报警告的话,则需要在后面加--allow-warnings
允许警告
pod trunk push TShareView.podspec --allow-warnings
至此组件已经全部完成啦,我们可以使用pod trunk me 查看是否已经成功发布了, 也可以去cocopods官网直接搜索组件(有缓存需要等几分钟)
5.项目导入组件
1.cd到项目有Podfile文件的目录
2.podfile文件添加组件名
3.终端执行命令 pod install
4.项目中使用组件:
大功告成~
常见错误
- git push origin master 报错
git push error: failed to push some refs to ... 我们需要先将远程代码库中的任何文件先pull到本地代码库中,才能push新的代码到github代码库中。 解决:
git pull --rebase origin master
2.当我们的组件包含OC的framework的头文件时,可能存在头文件找不到的情况:
解决:找到路径 Build Settings -> User Header Search Paths
添加 $(PODS_ROOT)
并设置为 recursive
- 执行pod trunk push 时报了下面这个错误:
[!]
Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.
解决:
- 执行命令:pod trunk register '你的邮箱' 'XXXXXX' --description='XXXX' 重新注册一下账号。
- 在自己邮箱里面找到并打开验证链接。
- 返回终端重新执行命令:pod trunk push XXXXX.podspec --allow-warnings
- 关于组件化暂时就写到这里啦,有纰漏之处,欢迎指正 Demon地址