使用pod管理代码的好处
通常在开发的过程中,大多时候,我们会处理一类相同的操作,比如对于公共父类的封装,对于系统的类写的类别,我们为了避免写一些重复的代码。为了以后方便在其他App中使用,我们可以使用Cocoapods把这些小点子,小功能,可以封装成一个pod,当下次使用的时候,只需简单配置就可以了。这一点特别是在公司开发多个项目的时候,可以很方便快速的共享公共的代码,节约开发时间,这就是为什么好多公司喜欢组件化管理代码。至于库是创建私有的还是公共的,看自己和公司要求而定。本篇主要以创建公共库示例,进行阐述。
1. 创建一个工程
打开终端,切换到你要创建的位置的目录,我这里是桌面/desktop/pod
cd desktop/pod
pod lib create LPodTest
2.填写Pod的Metadata和验证
pod lib create
自动创建使用的是 MIT license;pod lib lint
这个命令,Cocoapods已经帮我们创建了一个模板我们只需要在里面根据需要你进行配置即可.没有用到的注释(#开头的)可以删除掉,看起来舒服一些.
接下来,我们做一个远程验证
pod lib lint LPodTest.podspec
-> LPodTest (0.1.0)
- WARN | url: The URL (https://github.com/LDreame/LPodTest) is not reachable.
[!] LPodTest did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it) and all results apply only to public specs, but you can use ```--private` to ignore them if linting the specification for a private pod.
[!] 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.
这个意思是告诉我们,LPodTest.podspec文件里面有一个不符合要求,需要进行修改:
需要指定一个可用的pod的首页URL,因为我们还没有在GitHub上面创建任何项目有关的信息,所以不能通过
因为我的LPodTest.podspec文件s.summary 和s.description已经简单的做了介绍,如果没有做任何修改的话,还会出现以下两个警告:
- WARN | The summary is not meaningful.
- WARN | The description is not meaningful.
如果按照上面的步骤一步一步下来,我们还没有在GitHub上面创建相关的仓库,因此可以先进入GitHub账户创建仓库
在git上创建好仓库后 , 方式1:可以clone下来然后把pod的demo工程拖进去,方式2:也可以把pod的工程和远程仓库进行关联 .
我当时采用的是clone下来git仓库,然后把pod的demo拖进去, 但是拖进去之后,发现sourse tree没有识别出新加入的文件 , 经过一番百度+排查,发现是pod的demo工程含有.git隐藏文件夹, github上clone下来的工程也有.git隐藏文件夹, 删除了pod工程下.git就可以了. ( command + shift + .(小数点) 可以查看finder当前目录下的隐藏文件.)
做完以上操作没有问题的话, 就可以做验证了:
pod lib lint LPodTest.podspec
-> LPodTest (0.1.0)
LPodTest passed validation.
只要见到passed validation就是成功通过了验证. 如果出现错误 , 基本上是 .podspec 下的配置有问题,根据提示的错误原因排查就行
3. 添加自己的代码
通过以上步骤,我们只是创建了一个合格的空的工程,并没有实现任何功能,接下来我们就需要把自己要实现的功能代码方进去.
找到工程中ReplaceMe文件删除,在这个目录下添加自己的代码即可.
如果你在创建工程时候创建了一个包含demo的工程,那么你可以先切换到工程的Example文件目录下面使用命令:
pod install
Analyzing dependencies
Fetching podspec for `LPodTest` from `../`
Downloading dependencies
Installing LPodTest 0.1.0 (was 0.1.0)
Generating Pods project
Integrating client project
Sending stats
Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.
成功以后你就可以在demo文件中使用你的功能文件了.如果不能导入,那么可以commond + B编译一下再导入使用
4. 提交自己的pod
Step 1: Tagging
Specs仓库是用来存放GitHub上面所有公共Pod的索引的文件,我们要做到就是让本地的pod在Specs建立联系.在做这个之前,需要将我们完善后的工程代码,打一个tag,同步到服务端:
git tag 0.1.0
qddios2deiMac:example qddios$ git push origin 0.1.0
Total 0 (delta 0), reused 0 (delta 0)
To github.com:LDreame/LPodTest.git
* [new tag] 0.1.0 -> 0.1.0
Step 2 :验证
终端切换到LPodTest.podspec文件所在的目录下面,运行命令,这个是本地验证,检查.podspec是否有问题
pod spec lint LPodTest.podspec
-> LPodTest (0.1.0)
Analyzed 1 podspec.
LPodTest.podspec passed validation.
Step 3 : 提交pod 到Specs仓库
pod trunk push LPodTest.podspec
Updating spec repo `master`
Validating podspec
-> LPodTest (0.1.0)
Updating spec repo `master`
--------------------------------------------------------------------------------
? Congrats
? LPodTest (0.1.0) successfully published
? March 3rd, 03:07
? https://cocoapods.org/pods/LPodTest
? Tell your friends!
--------------------------------------------------------------------------------
这一步也比较坑,因为是用的demo工程的配置,加上复制别人的,所以本地校验通过,但是push的时候有权限问题,还是找到.podspec文件,尽量都改成自己设置.
还有一个,pod push的时候,一定需要要保证git也push过了,git上的tag与.podspec上的版本号一致.
5. pod search 检验是否可用
大多情况下会出现这个问题:
[!] Unable to find a pod with name, author, summary, or descriptionmatching `LPodTest
这主要是因为在本地索引里面没有, 解决办法
~/Library/Caches/CocoaPods
删除search_index.json文件 , 或者使用终端命令删除:rm ~/Library/Caches/CocoaPods/search_index.json
然后重新搜索.
主要文章 https://www.jianshu.com/p/41611b14942b
爬坑参考文章 https://www.jianshu.com/p/283584683b0b