iOS组件化(一)发布组件到CocoaPods
iOS组件化第一篇,如何将组件发布到CocoaPods。
最近做项目xxxxx....
以上省略1000字,项目必需要搞组件化!!!
1.安装CocoaPods
组件使用必然需要用到CocoaPods,并且使用CocoaPoPds来管理你的组件,既然要发布到CocoaPods,先安装CocoaPods是第一步,这个网上的教程很多,就不详细说了。
2.创建远程仓库
在github上面Create a new repository
-
Repository name 即为组件名字
-
Description 可以随便写一些
-
Public和Private根据自己的需要选择
-
README文件不用勾选,使用默认的模板即可
-
创建完成得到
远程仓库索引
https://github.com/MethodName/TShareView.git
3.创建本地组件代码库
- 命令
pod lib create <组件名>
- 示例
pod lib create TShareView
- 执行结果
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? [ Specta / Kiwi / None ] 是否集成测试框架
Would you like to do view based testing? [ Yes / No ] 是否做基于View的测试
What is your class prefix? --类文件前缀
- 示例(根据自己的实际需要选择即可)
What platform do you want to use?? [ iOS / macOS ]
> iOS
What language do you want to use?? [ Swift / ObjC ]
> Objc
Would you like to include a demo application with your library? [ Yes / No ]
> YES
Which testing frameworks will you use? [ Specta / Kiwi / None ]
> None
Would you like to do view based testing? [ Yes / No ]
> No
What is your class prefix?
> TMM
- 完成之后将得到一个工程,目录结构如下
4.为组件工程添加组件
例如我将已经写好的组件文件放在工程Classes文件中,Classes文件位置如下图
添加组件文件
这两个文件就是组件的文件,ReplaceMe.m
文件可以删除
5.将添加的组件文件Pod到Example文件夹中
-
进入TShareView>Example文件夹(有Podfile的文件夹)
-
执行 pod install 命令
-
执行完成后的工程目录
组件文件出现在Pods的工程中
6.修改.podspecs索引文件
打开工程中的TShareView.podspec文件
#
# Be sure to run `pod lib lint TShareView.podspec' to ensure this is a
# valid spec before submitting.
#
# Any lines starting with a # are optional, but their use is encouraged
# To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'TShareView' 1、组件名称
s.version = '0.1.0' 2、版本
s.summary = 'A short description of TShareView.' 3、组件描述
# This description is used to generate tags and improve search results.
# * Think: What does it do? Why did you write it? What is the focus?
# * Try to keep it short, snappy and to the point.
# * Write the description between the DESC delimiters below.
# * Finally, don't worry about the indent, CocoaPods strips it!
s.description = <<-DESC
TODO: Add long description of the pod here.
DESC
s.homepage = 'https://github.com/Methodname/TShareView' 4、更换为github的仓库地址
# s.screenshots = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
s.license = { :type => 'MIT', :file => 'LICENSE' } 5、监听
s.author = { 'methodname@qq.com' => 'methodname@qq.com' } 6、作者
s.source = { :git => 'https://github.com/Methodname/TShareView.git', :tag => s.version.to_s } 7、更换为github的远程仓库索引
# s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
s.ios.deployment_target = '8.0' 8、iOS支持版本
s.source_files = 'TShareView/Classes/**/*' 9、组件文件路径
# s.resource_bundles = {
# 'TShareView' => ['TShareView/Assets/*.png']
# }
# s.public_header_files = 'Pod/Classes/**/*.h'
# s.frameworks = 'UIKit', 'MapKit'
# s.dependency 'AFNetworking', '~> 2.3' 10、依赖
end
必须要更改的有:3、5、7、10处,其它项可以视情况更改。
- 第3处不更改,后台发布会报警告
- 第5处生成的可能是默认地址,不是你的github仓库地址
- 第7处生成的也可能是默认索引,不是你的github远程仓库索引
- 第10处为依赖组件,如果组件有依赖于其它组件,则需要放开此处注释,将组件引用进来,并且同时还需要在Podfile中添加依赖的组件,以保证项目能编译通过。
7.提交到远程仓库
在TShareView工程根目录执行
- 命令
git add .
git commit -m "提交说明"
git remote add origin 远程代码仓库地址
git push origin master
git tag 版本号 (注:这里的版本号必须和podspec里写的版本号一致)
git push --tags
- 示例
git add .
git commit -m "一个共享的组件"
git remote add origin https://github.com/MethodName/TShareView.git
git push origin master
git tag 0.1.0 (注:这里的版本号必须和podspec里写的版本号一致)
git push --tags
8.验证cocoaPods索引文件
在TShareView工程根目录执行
- 命令
pod spec lint --verbose --allow-warnings
- 验证成功打印
TShareView.podspec passed validation.
- 验证失败
可能会出现一些错误,会打印出一条红色错误消息告诉你有什么错误,这个时候不要慌,往上面翻,会有详细的错误说明;详细见文章最后的一些解决办法。
9.注册Trunk
我们可以使用trunk来发布组件,trunk需要CocoaPods 0.33版本以上
查看是否注册trunk
pod trunk me
- 注册命令
pod trunk register 邮箱 "注册名字" --verbose
- 示例
pod trunk register methodname@qq.com "methodname" --verbose
注册完成之后会给你的邮箱发个邮件,进入邮箱邮件里面有个链接,需要点击确认一下.
10.发布
在有.podspec文件的组件工程根目录执行
- 命令
pod trunk push xxxx.podspec
- 示例
pod trunk push TShareView.podspec
如果配置报警告的话,则需要在后面加--allow-warnings
允许警告
pod trunk push TShareView.podspec --allow-warnings
11.发布完成
Updating spec repo `master`
Validating podspec
-> TShareView (0.1.0)
Updating spec repo `master`
--------------------------------------------------------------------------------
🎉 Congrats
🚀 TShareView (0.1.0) successfully published
📅 May 30th, 04:36
🌎 https://cocoapods.org/pods/TShareView
👍 Tell your friends!
--------------------------------------------------------------------------------
12.使用
现在,在Podfile中加入它,就能使用你的远程组件了,赶紧去找你的小伙伴分享吧~
pod 'TShareView'
13.发布完成之后搜索不到的问题解决办法。
将组件在CocoaPods上面发布之后,使用pod search 组件名称
却搜不到相关的信息,这个时候需要将cocoaPods的搜索缓存文件清理一下,然后重新使用pod search
,就能得到最新的结果。
进入搜索CocoaPods缓存目录
cd ~/Library/Caches/CocoaPods
查看缓存文件search_index.json
ls
删除搜索缓存文件
rm -f search_index.json
错误解决办法
- 找不到命令行路径
xcrun:error:unable to find utility 'simctl',not a deveoper tool or in PATH
在XCode->Preferences>Locations
将Command Line Tools 设置一下再重新执行上面的命令就行行了,原因是Command Line Tools默认是没有设置的,所以才会报以上错误。
- 迭代时引用了组件库
错误信息
xcodebuild: Returned an unsuccessful exit code.
组件有依赖,迭代组件版本的时候,需要加上--use-libraries
,例如下:
pod spec lint --use-libraries
- 允许警告
--allow-warnings
例如下:
pod spec lint --allow-warnings
- 显示详情信息
--verbose
例如下:
pod spec lint --verbose