iOS之cocoaPods发布产品详解

******每种语言发展到一个阶段,就会出现相应的依赖管理工具, 或者是中央代码仓库。比如
Java: maven,Ivy
Ruby: gems
Python: pip, easy_install
Nodejs: npm

iOS:cocoaPods

cocoaPods 地址:https://cocoapods.org

cocoaPods的继承、下载、版本控制原理:https://www.jianshu.com/p/df5ba3761cbf

*********cocoaPods的原理

  • 1.cocoaPods是将所有的依赖库都放到另一个名为 Pods 项目中

  • 2.Pods 项目最终会编译成一个名为 libPods.a 的文件,主项目只需要依赖这个 .a 文件即可。这样,依赖库源码管理工作都从主项目移到了 Pods 项目中。

  • 3.对于资源文件,CocoaPods 提供了一个名为 Pods-resources.sh 的 bash 脚本,该脚本在每次项目编译的时候都会执行,将第三方库的各种资源文件复制到目标目录中。

  • 4.CocoaPods 通过一个名为 Pods.xcconfig 的文件来在编译时设置所有的依赖和参数。

libPods.a
Pods-resources.sh
Pods.xcconfig
 

版本控制:当执行完pod install之后,cocoapods会生成一个podfile.lock的文件。podfile.lock文件最大的用处在于多人开发。如果你没有在podfile中指定pods版本pod ‘React’,那么默认为获取当前React依赖库的最新版本。当团队中的某个人执行完pod install命令后,生产的podfile.lock文件就记录下了当时最新pods依赖库的版本,这时团队中的其他人check下来这份包含podfile.lock文件的工程以后,再去执行pod install命令时,获取下来的pods依赖库的版本和最开始用户获取到的版本一致。如果没有podfile.lock文件,后续所有用户执行pod install命令都会获取最新版本的React,这就可能造成一个团队使用的依赖库版本不一致,这对团队协作来说绝对是个灾难。在这种情况下,如果团队想使用当前最新版本的React依赖库,有两种方案:1、更改podfile,使其指向最新版本的React依赖库 2、执行pod update命令;鉴于podfile.lock文件对团队协作如此重要,所以应该加入到版本控制里面。

扫描二维码关注公众号,回复: 5796297 查看本文章

cocoaPods原理:https://www.jianshu.com/p/45feb228bb61

远程索引库里面全是描述文件,也包含框架的描述文件.spec文件
.spec文件里面有框架的名称、版本、真实的源码地址...
通过pod step下载远程索引库到本地成本地索引库,其中本地索引库会生成检索的检索文件
我们使用的pod search就是在本地索引库检索的。

cocoaPods原理:https://www.jianshu.com/p/20c20fc6db7a

cocoaPods的详解:https://www.jianshu.com/p/129d3c315ea6(比较详细)、http://yulingtianxia.com/blog/2014/05/26/publish-your-pods-on-cocoapods-with-trunk/https://www.jianshu.com/p/e6bd7eccabb3https://www.jianshu.com/p/f332b2c53280https://www.jianshu.com/p/1020105b81f7https://www.jianshu.com/p/c5487c225a36

https://nshipster.cn/cocoapods/#使用cocoapods

https://github.com/Damonvvong/DWCategory

http://blog.wtlucky.com/blog/2015/02/26/create-private-podspec/

https://blog.csdn.net/becomedragonlong/article/details/45933345#0-tsina-1-22915-397232

https://blog.csdn.net/zxtech_lxy/article/details/80283293

1.完成github上传,创建一个release版本;

2.cd 到本地项目主目录;pod spec create 项目名;创建一个.podspec的文件;配置.podspec文件;https://www.jianshu.com/p/e6bd7eccabb3

配置中的注意:

“*” 表示匹配所有文件 
“*.{h,m}” 表示匹配所有以.h和.m结尾的文件 
“**” 表示匹配所有子目录

  • 1、同级的文件夹B里面只有.h和.m文件
    source_files = "B/*.{h,m}"
    2、多级文件夹B/C/D(只有最后一级文件夹里面有.h和.m文件
    source_files = "B/C/D/*.{h,m}"
    3、多级文件夹B/C/D,每个文件夹里面都有.h和.m文件
    source_files = "B/*.{h.m}","B/C/*.{h.m}","B/C/D/*.{h.m}"
    其中C D可以用**代替

3.制作支持Cocoapods开源库需要注册Trunk账号;在注册trunk之前,我们需要确认当前的CocoaPods版本是否足够新,trunk需要pod在0.33及以上版本;
查看pod版本的指令:pod --version

通过终端指令来操作: pod trunk register 你的邮箱地址 ‘用户名’ -verbose;

pod trunk register [email protected] '名字随便起' --description='描述' --verbose

该指令会发送一封验证邮件到你的邮箱,在邮箱里直接点击链接完成注册即可;如果不能点击,吧链接拷贝出来在浏览器打开即可;

如果多人维护pod 可以添加其他维护者:pod trunk add-owner name [email protected]

**修改注册的信息:https://www.jianshu.com/p/d7c28c2dce14

4.上传之前执行pod spec lint 验证这个文件:

未引用第三方库时:pod spec lint --allow-warnings

引用地方库时(在后面加上--use-libraries,后面的pod trunk push也是一样):pod spec lint --allow-warnings --use-libraries

(1)--verbose:表示显示全部的日志信息,建议加上这个,方便判断错误信息。

(2)--sources:如果我们在podspec里面依赖到一些私有的库之后,直接进行校验是会报错的提示找不到,这里加上我们的Spec仓库的地址告诉CocoaPods找不到的时候去哪里找。

(3)--allow-warnings:表示允许警告.

(4)--use-libraries:表示使用静态库或者是framework,这里主要是解决当我们依赖一些framework库后校验提示找不到库的时候用到。

5.通过终端指令来操作查看注册结果:pod trunk me;

6.发布自己的项目到pod上:

pod trunk push xx.podspec --allow-warnings 

pod trunk push  --allow-warnings

pod trunk push --allow-warnings --use-libraries

7.搜索自己的项目:

pod search

*****常见问题:https://www.jianshu.com/p/283584683b0b

https://www.jianshu.com/p/9a5ec24ff437

https://blog.csdn.net/blog_t/article/details/59570385

*****Mac更新系统之后,命令行工具CommandLineTools丢失,使用的时候回报:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun 。
解决:xcode-select --install

**xcrun: error: unable to find utility "simctl", not a developer tool or in PATH ) during validation.

解决:

Xcode > Preferences > Locations

Command Line Tools: 这一栏,一开始发现是空的,需要选择一个,重新执行一次命令,OK!

*****报错xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.

设置这个:spec.ios.deployment_target = "8.0"

**file patterns: The `source_files` pattern did not match any file.

这个是在指定共享的类库时, 文件路径不对, 也就是设置s.source_files 字段时, 发生了错误, 这里的路径是相对于xx.podspec文件的, 如果是与xx.podspec同级的文件夹, 直接写文件夹名称即可, 如:s.source_files = “xx”

源文件所在目录名称要与xx.podspec文件保持同名,且在同一个层级。

如果有多级目录, 一定要逐级添加. 这里也可以这么写:s.source_files = “xx/*.{h,m}”
 

****如果你写的是swift的项目,你的项目里面一定要有一个.swift-version的配置文件。可以找一个github上面的框架对照者看。

***** [!] {“name”=>[“is already taken”]}, 表示已经有一个重名的公有库存在,重新创建一个公有库,CocoaPods不允许有重名的公有库存在。 

猜你喜欢

转载自blog.csdn.net/u011146511/article/details/88689716