iOS:向CocoaPods提交开源代码

说明 时间
首次发布 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

配置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

补充:

    1. 如果出现验证不过,需要进行下面的操作:
      在 podspec 文件中添加 s.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 arm64' },如果项目已经设置 pod_target_xcconfig,添加到已有值的后面。
    1. 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 中

你可能感兴趣的:(iOS:向CocoaPods提交开源代码)