iOS 详细制作cocoapod库、相关问题的处理、多人管理等

背景

由于近期换新公司,新公司计划将SDK集成到cocoapod上,便于提供给厂商一键集成。之前的公司也搞过,但都搞一半就没有详细内容和多人管理。

cocoapod库制作流程:

一、在GitHub上或者Gitlab上创建项目:

每个人不同的管理代码工具,但GitHub和Gitlab是相似的,需要先在上面创建对应的项目,然后把framework给上传上去(有些人选择源码制作cocoapod,一样的操作步骤,只是后续的spec文件编写内容有偏差),我这里采用的是制作成framework库然后上传到项目管理网站上,并在本地拉取,方便后续编写。

下面就是我制作pod库的本地文件截图:

每一个模块都制作成了一个pod库,下面围绕着facebook的管理器sdk来进行说明 :

二、开始制作spec文件并进行编辑: 

截图中的FacebookSdkManager.podspec文件是通过终端生成的

cd到对应的文件夹,然后执行如下命令就可以生成(不需要带podspec尾缀)

pod spec create FacebookSdkManager

然后找到文件,右键可以通过文本编辑打开

#


Pod::Spec.new do |spec|

  spec.name         = "FacebookSdkManager" #库名字
  spec.version      = "1.0.0" #库版本号,这个要和GitHub、Gitlab上打的tag一致,后面再说
  spec.summary      = "FacebookSdkManager." #类似简介

  spec.description  = <<-DESC #类似描述
 		高图海外手游SDK-FacebookSdkManager
                   DESC

  spec.homepage     = "https://cocoapods.goatgames.com/plugin/facebook" #库的网址,在pod集成时可以显示给用户,在GitHub上克隆复制https过来就行,去掉.git

  #spec.license      = "MIT (example)"
  # spec.license      = { :type => "MIT", :file => "FILE_LICENSE" } #监听,这个是在创建项目的时候配置的(GitHub和Gitlab上新建),如果没有配置可以注释掉

  spec.author             = { "goat" => "15839918562@163.com" } #作者,大括号类似一组,也可以把大括号去掉,但是就不能在后面添加邮箱之类的,例如 = ”goat“

  spec.source       = { :git => "https://cocoapods.goatgames.com/plugin/facebook.git", :tag => spec.version.to_s } #可以理解为git地址,后面tag就是GitHub上打的tag,这里默认上面的version,因为我们把它们保持一致

  spec.ios.deployment_target = '9.0' #iOS支持版本,可以设置通用支持版本,Mac 、watch等支持版本,在创建spec文件里面有
  spec.static_framework = true #这里是静态库还是动态库
  spec.requires_arc = true #是否支持arc
  spec.pod_target_xcconfig =   {'OTHER_LDFLAGS' => ['-lObjC']} #设置other link flags -ObjC
  spec.pod_target_xcconfig =   {'ENABLE_BITCODE' => 'NO'} #设置bitcode = no ,这些配置可以写在一个大括号呢,也可以单独写出来,其他的可以自行百度
  #spec.pod_target_xcconfig = { 'VALID_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
  spec.pod_target_xcconfig = { 'VALID_ARCHS' => 'x86_64 armv7 armv7s arm64' }  # 支持的框架类型,真机、模拟器
  spec.vendored_frameworks = 'FacebookSdkManager/FacebookSdkManager.framework' # 这个就是库文件,这样写,因为是在GitHub上管理,从项目目录开始读取的
  spec.resource = 'FacebookSdkManager/Facebook_Version.json' #支持额外文件 ,bundle图片啥的都可以添加 

#下面就是FacebookSdkManager库的依赖pod库

  spec.dependency 'FBSDKShareKit','~>9.0.0'
  spec.dependency 'FBSDKLoginKit','~>9.0.0'    
  spec.dependency 'FBSDKCoreKit','~>9.0.0'

#下面就是依赖的系统库 ,使用的时候把#号去掉就可生效
  #spec.frameworks = 'SystemConfiguration', 'CoreGraphics','Foundation','UIKit'
  #spec.libraries = 'c++', 'z', 'sqlite3', 'xml2', 'resolv'

#我们还可以添加subspec,可以理解为子库,在集成的时候可以这样引用出来 pod 'FacebookSdkManager/xxx.framework',就类似于把它们写在同一个spec文件,可以相互依赖,也可以相互独立,可以理解为就类似我截图的文件多个pod库给放到一起。也可以按照我那样去分开,方便独立管理,如下,如果说上面的FacebookSdkManager 依赖于AnyThinkSDK,就可以在上面把AnyThinkSDK当成一个pod库

  #spec.subspec 'AnyThinkSDK' do |ss|
    #ss.ios.deployment_target = '9.0'
    #ss.vendored_frameworks = 'AnyThinkiOS/AnyThink{Banner,Splash,SDK,RewardedVideo,Interstitial,Native}.framework'
    #ss.resource = 'AnyThinkiOS/AnyThinkSDK.bundle'
  #end

end

编辑过后我们来验证一下,通过以下命令行(如果当前目录不是库文件目录的话,需把文件拖进终端):

#这个是验证本地静态

pod lib lint FacebookSdkManager.podspec


#这个可以理解为联网验证,我个人理解,我基本只用上面的,验证通过了,就进行下一步了

pod spec lint FacebookSdkManager.podspec

验证的时候,如下图会有警告,note ,错误等,如果没错误就算验证通过,可以进行下一步:

如果有错误,看ERROR后面内容,如果不懂,可以再次进行验证,验证命令后面加一个详细日志

 

pod lib lint --verbose 
#这里在项目目录下的时候 lint后面可以省略podspec文件名

然后等待加载验证结果,验证就类似演示一遍一样,如果有某个库,或者配置错误,会在日志里面显示,建议从最下面慢慢往上找。反正就是spec里面有某个东西错误

四、开始提交

1、提交前,我们要把项目给提交到GitHub/Gitlab上,并给这次提交打一个tag标签

这个标签对应的就是你要提交到pod上的版本,这里就不做说明了,如果不制作tag,在下面的提交spec到cocoapod会报错,提示说没有对应的版本tag

2、提交spec文件到 cocoapod上

 如果是第一次提交,那么需要注册你的邮箱到cocoapod上,意思就是你这个邮箱账户管理这些pod库。以后的提交可以忽略注册邮箱步骤(前提是在你自己的电脑上操作,且当前邮箱不变)

pod trunk register 邮箱 '昵称' --description=' 这里写描述'

然后会在邮箱里收到有点,点击里面的网址同意,然后就可以使用提交spec了

pod trunk push FacebookSdkManager.podspec

如果提交的时候提示warn导致的提交不成功,可以在命令行后面添加允许warn的字段:

pod trunk push FacebookSdkManager.podspec --allow-warnings

#注释:在你pod lib lint 的时候也可以加上 --allow-warnings去除警告,后面再push的时候就不用加了

提交后等待结果,如果有重复的库、重复版本、操作者没权限、或者其他错误,会在终端显示,根据意思自行解决。

如果没错误,就会显示下面成功的提示,就是祝贺你的库,版本,提交日期,地址等等:

 在此,你的pod库就制作好了,如果要更新版本,就要编辑spec文件进行上面步骤,打tag,验证,提交,通过后就有多个版本可以集成了。

五、查询库并集成到demo中测试

此时你去查询 pod search xxx ,会找不到,这个说是因为你设备上的pod没更新,先进行update。这个问题不确定是否是这样解释,我现在就是这样干,还没验证在其他设备上会不会search不到,如果其他人也查不到,感觉可能是少了哪个步骤,再说了

pod repo update

#然后可以查一下你的库
pod search xxx

#如果还是查不到,那么需要删除本地生成的旧search.json文件

rm ~/Library/Caches/CocoaPods/search_index.json

#然后再去查,还查不到的话,再update,多次试验就可以了

查询到之后,就可以创建一个demo集成一下试试了。

六、关于pod命令和多人管理

有一些疑问,如何管理自己的pod库,多人在不同的设备上提交呢?

就需要一些pod命令来完成了:

先对邮箱进行管理:

#下面是一些pod命令


#查看自己的账号信息,以及账号拥有的仓库。
pod trunk me

#查询xxx库的版本,以及归属,所有权等
pod trunk info xxx

#让某个库过期,使用者会被警告,一般不建议使用
pod trunk deprecate xxx

#删除某个库,或某个库的某个版本
pod trunk delete xxx


-------------------------------

#注册/登陆pod账户,在某个设备上第一次使用时,或者切换账号时
pod trunk register 邮箱 名字

#对某个库添加管理者
pod trunk add-owner 库名 邮箱

#对某个库删除管理者
pod trunk remove-owner 库名 邮箱


-------------------------------
#我们一般多人管理的时候就可以先注册一个邮箱管理者,然后制作完pod库,可以对这个库添加其他管理邮箱,在同事上传pod库的时候就可以去使用他们被添加的邮箱了(我还没这样做,还在制作pod库中)





总结:到这里就差不多了,对自己的库进行pod集成吧,如果遇到问题或error,可以去查询一下,或者仔细看终端报错内容。再有其他细节后续慢慢补充了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值