说明 | 时间 |
---|---|
首次发布 | 2017年10月12日 |
最近更新 | 2019年03月15日 |
背景:这两天项目的尾巴收的差不多了,趁有些时间,就写一下关于
提交开源代码到CocoaPods
和打包.framework静态库
的文章吧。打包.framework静态库
请移步到下一篇。CocoaPods是非常好用的iOS依赖管理工具,使用它可以方便的管理和更新项目中所使用到的第三方库,以及将自己的项目中的公共组件交由它去管理。废话不多说,开始正题。
步骤一:我们需要建一个远程仓库,无论是在github上还是在码云上都可以,下面的截图是我在码云上创建的远程仓库。
步骤二:执行pod lib create MZLibrary
,会为我们生成上传CocoaPods所需文件。
步骤三:将我们的代码copy到生成工程的Pods -> Development Pods -> 库名 -> 库名 -> Classes目录下,cd
到生成的文件夹内,与远程仓库进行链接。
步骤四:配置MZLibrary.podspec
步骤五:验证库名.podspec
是否合法
pod lib lint 库名.podspec
步骤六:验证合法之后,将代码上传到远程仓库并打tag,特别需要注意的是tag应该与podspec里的版本号保存一致。
步骤七:使用pod trunk me
查看在电脑上是否配置过信息,如果没有的话,执行pod trunk register 邮箱 '用户名' --description='描述'
,之后执行pod trunk push 库名.podspec
将开源库推送到CocoaPods
最后:我们需要更新pod本地索引
rm ~/Library/Caches/CocoaPods/search_index.json
pod repo update
或
pod setup
知识点补充
当执行pod lib create ProjectName
时,其实是从GitHub上下载了一个pod模板,然后在内部通过更改.podspec
文件的配置定制化自己的pod,
pod lib create ProjectName
其实使用了默认参数,补全的话pod lib create ProjectName --template-url=https://github.com/CocoaPods/pod-template.git
。
podspec属性:
Spec Metadata(Spec资料) | |
---|---|
s.name | 名称 |
s.version | 版本 |
s.summary | 简介 |
s.description | 详细介绍 |
s.homepage | 主页地址 |
s.screenshots | 屏幕截图 |
Spec License(Spec执照) | |
---|---|
s.license | 开源协议 |
Author Metadata(作者资料) | |
---|---|
s.author | 作者、邮件地址 |
s.authors | 多个作者 |
s.social_media_url | 社交地址 |
Platform Specifics(平台特性) | |
---|---|
s.platform | 平台 |
s.ios.deployment_target | ios部署目标 |
s.osx.deployment_target | osx部署目标 |
s.watchos.deployment_target | watchos部署目标 |
s.tvos.deployment_target | tvos部署目标 |
Source Location(源定位) | |
---|---|
s.source | 开源地址、版本号,如{ :git => 'https://xx/xx.git', :tag => s.version.to_s } |
Source Code(源代码) | |
---|---|
s.source_files | 开源文件路径 |
s.exclude_files | 排除文件路径 |
s.public_header_files | 头文件路径,如'Pod/Classes/*/.h' |
s.vendored_libraries | .a静态库路径,如'xx/xx/*.a' |
s.vendored_frameworks | .framework静态库,如'xx.framework' |
Resources(资源) | |
---|---|
s.resource | 资源文件 |
s.resources | 多个资源文件 |
s.preserve_paths | 保留路径 |
Project Linking(项目关联) | |
---|---|
s.framework | 框架 |
s.frameworks | 多个框架, 如'UIKit', 'Foundation' |
s.library | 系统静态库 |
s.libraries | 多个系统静态库库 |
Project Settings(项目设置) | |
---|---|
s.requires_arc | 需要ARC模式 |
s.xcconfig | Xcode配置,如s.xcconfig = { "HEADER_SEARCH_PATHS" => "${PODS_ROOT}/../../Library/gmssl"}
|
s.dependency | 依赖Podspecs |
补充:
- 如果出现验证不过,需要进行下面的操作:
在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果项目已经设置 pod_target_xcconfig,添加到已有值的后面。
- 如果出现验证不过,需要进行下面的操作:
-
- podfile一些配置说明
配置 说明 :git => 'http://xxxx.git' 指定加载库的git :path => 'LocalPods/MZWechat' 指定本地pod路径 :tag => '1.0.2' 指定加载的版本 :commit => '32d8934' 指定加载的某次提交 :configurations => ['Debug', 'Release'] 指定仅在debug下编译 :podspec => 'http://xxxx/TencentOpenAPI.podspec' 从外部仓库源获取 :subspecs => ['Core', 'Utils'] 指定下载pod的子pod :branch => 'dev' 加载指定分支
更多关于CocoaPods的讲解,还可以参考我另一篇文章:Pod:知识点汇总。
-
1、创建远程索引仓库(注意:要初始化远程索引库)和本地索引库
pod repo add (本地索引库名) (远程地址)
- 2、查看本地索引库列表
pod repo list
3、修改
A.podspec
文件,将源码A上传到A的远程仓库-
4、推送到索引库
pod repo push (本地索引库名) (A.podspec) --allow-warnings
关于静态库
lipo A.a -thin x86_64 -output A_64.a #如果是多 CPU 架构,先提取出某一种架构下的 .a 文件
lipo B.a -thin x86_64 output B_64.a ar -x A_64.a #解压 A 中的目标文件
ar -x B_64.a #解压 B 中的目标文件
libtool -static -o Together.a *.o #把所有 .o 文件一起打包到 Together.a 中
lipo -create xxx_arm64 xxx_armv7 xxx_armv7s -output xxx_global.a #然后再组合成一个新的.a文件
关于Cocoapods
Podfile.lock的作用:
- 1、判断 Podfile.lock 是否存在,如果不存在,按照 Podfile 中指定的版本安装
- 2、如果 Podfile.lock 存在,检查 Podfile 中每一个 Pod 在 Podfile.lock 中是否存在
- 3、如果存在, 则忽略 Podfile 中的配置,使用 Podfile.lock 中的配置
- 4、如果不存在,则使用 Podfile 中的配置,并写入 Podfile.lock 中