使用pod管理代码的好处
通常在开发的过程中,大多时候,我们会处理一类相同的操作,比如对于字符串String的邮箱验证,是否为空,手机号验证,或者一些UIView的动画操作,我们为了避免写一些重复的代码,可能经过类目或者延展的形式对原有的类进行了一个扩充。还有一些是工程中一些基本的公共组件,比如城市列表,刷新控件,网络请求库或者商品的目录这种基本公共组件,在工程中好多地方需要调用,我们都可以进行封装成一个组件功能模块。为了以后方便在其他App中使用,我们可以使用Cocoapods把这些小点子,小功能,可以封装成一个pod,当下次使用的时候,只需简单配置就可以了。这一点特别是在公司开发多个项目的时候,可以很方便快速的共享公共的代码,节约开发时间,这就是为什么好多公司喜欢组件化管理代码。至于库是创建私有的还是公共的,看自己和公司要求而定,大多情况下公司的是私有库pod。本篇主要以创建公共库示例,进行阐述。
1. 创建一个工程
1.打开终端,切换到你要创建的位置的目录,我这里是桌面/desktop/pod
cd desktop/pod
pod lib create LPodTest
- 当被问及创建Swift还是OC项目,按自己要求回答,我选择ObjC;
- 当被问及是否创建一个demo应用包含在工程里,根据需要,如果需要写一个demo示例,就选择Yes,否则选择NO,我这里选择Yes;
- 当被问及是否需要使用测试Framwork,选择NO;
- 当被问及是否需要做接界面调试,我这里选择NO;
- 还有一个就是工程文件的前缀,我这里是自己的名字的缩写,这个随意写;
2.填写Pod的Metadata和验证
- .podspec这个文件主要是用来描述pod的版本号,首页(homepage),作者信心等,具体的可以参看官方offical reference page
- README如果你使用过GitHub,你肯定知道README文件的重要性,这个文件可以使用Markdown语法,主要展示在GitHub工程上的首页。README文件对于使用这个pod库的人来说,有和没有这个文件,区别是很明显的,此外这还有助于创建一个高质量的 CocoaPods Quality Index ;
-
LICENSE要想是Spec仓库接收,就必须包含一个license。命令
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账户创建仓库
接下来就需要把自己的工程推送到Github:
git add .
git commit -m “Initial Commit"
git remote add origin https://github.com/<GITHUB_USERNAME>/YourPodName.git // replace <GITHUB_USERNAME> with your github.com username
git push -u origin master
做完以上操作没有问题的话, 就可以做验证了:
pod lib lint LPodTest.podspec
-> LPodTest (0.1.0)
LPodTest passed validation.
只要见到passed validation就是成功通过了验证.
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文件所在的目录下面,运行命令
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!
--------------------------------------------------------------------------------
5. pod search 检验是否可用
大多情况下会出现这个问题:
[!] Unable to find a pod with name, author, summary, or descriptionmatching `LPodTest
这主要是因为在本地索引里面没有, 解决办法
- pod setup (不行,实用方法二)
- pod repo update(不行,试用方法三)
- 前往这个路径下
~/Library/Caches/CocoaPods
删除search_index.json文件 , 或者使用终端命令删除:
rm ~/Library/Caches/CocoaPods/search_index.json
然后重新搜索.