主要是方便管理引进的第三方SDK,一般都需要依赖一些系统的库,全部放在Build Phases里面就比较难管理,到后面会越来越多,而且还不敢随意删除,怕引起别的问题,所以每一个SDK都有自己的引用库独立的放在各自Pods里面就很方便。
1.创建pod本地库
//首先cd到自己的工程目录下面
cd /Users/wangjian/Desktop/demo
//pod init 初始化可以自动创建一个podfile,如果本身即是pod的管理那就不需要了
pod init
2.直接在工程目录下面创建podspec文件
pod spec create xxxSDK //SDK的名字


3.创建成功之后,打开编辑podspec文件,可以用文本编辑器打开,后期生成workspace就可以直接在xcode打开编辑,一些注释信息可以不要,剩下如下信息:
Pod::Spec.new do |spec|
spec.name = "xxxSDK"
spec.version = "2.15.0"
spec.summary = "A short description of xxxSDK."
spec.description = <<-DESC
ios sdk 哈哈哈啊哈
DESC
spec.homepage = "https://xxxSDK"
spec.license = { :type => 'LGPL', :text => "Beijing NetworkBench Inc.©2007-2020 All rights reserved." }
spec.author = { "王健" => "2576175431@qq.com" }
spec.platform = :iOS
spec.platform = :ios, "7.0"
spec.source = { :git => "xxxSDK的gitlab地址", :tag => "#{spec.version}" }
spec.libraries = 'z', 'c++', 'resolv'//依赖的系统.tbd
spec.frameworks = 'WebKit', 'Security', 'CoreTelephony', 'SystemConfiguration', 'JavaScriptCore', 'CoreGraphics', 'QuartzCore', 'CFNetwork'//依赖的系统.frameworks
spec.vendored_frameworks = 'xxxSDK.framework'//
end
4.Podfile里面填写本地pod路径
pod 'XXXSDK', :path => './LocalPods/XXXSDK'

5.进行pod验证
pod lib lint
6.最后拉取本地库
pod install --verbose --no-repo-update

- 根据Podfile或者Podfile.lock用于安装第三方库,第一次安装会安装指定的版本或者最新版本,在Podfile.lock中锁定列出的那些库,之后的执行也仅仅只是去下载Podfile.lock中指定的版本,并不会去检查最新的版本。
pod install
- 当你想要更新pod库的版本时才使用pod update;它不管Podfile.lock指定的版本号, 都会读取最新的的版本信息去下载安装,然后更新Podfile.lock的版本号
pod update
inhibit_all_warnings! # 消除第三方库警告
pod 'AMapLocation' 安装最新版本
pod 'AMapLocation' , '~> 1.0' 安装>=1.0<2.0的版本
pod 'AMapLocation' , '1.0' 指定版本
1. 一般情况下, 每个人从共享库把项目下载下来之后, 都会执行pod install命令安装,而不是选择 pod update,这样是为了保证大家使用的第三方框架版本一致。如果以后大家需要统一升级第三方框架, 那么每个人在执行 pod update
2.pod install --repo-update检查框架有没有新版本发布
3.pod install --no-repo-update跳过检查框架有没有新版本发布
提交到cocoapods记录
一,首先在github上面新建仓库拿到git地址,设置tag重要

二,基于cocoapods 自动创建工程
pod lib create 项目名
- 回答问题
# 你想使用哪个平台?
1、What platform do you want to use?? [ iOS / macOS ]
iOS
# 库语言选择?
2、What language do you want to use?? [ Swift / ObjC ]
ObjC
# 是否需要一个demo工程,用于调试Pod?
3、Would you like include a demo application with your library? [ Yes / No ]
Yes
# 你要使用哪个测试框架?
4、Which testing frameworks will you use? [ Specta / Kiwi / None ]
None
# 是否要UI测试?
5、Would you like to do view based testing? [ Yes / No ]
NO
# 类名前缀?
6、What is your class prefix?
XK
-
生成工程
image.png
-
设置.podspec文件,要注意s.source_files文件的路径,将工具类代码拷贝到Classes目录下
Pod::Spec.new do |s|
s.name = 'CrashHook'
s.version = '1.0.0'
s.summary = 'A short description of CrashHook.'
s.homepage = 'https://github.com/wangjian201314/CrashHook'
s.license = { :type => 'MIT', :file => 'LICENSE' }
s.author = { 'wangjian' => '2576175431@qq.com' }
s.source = { :git => 'https://github.com/wangjian201314/CrashHook.git', :tag => s.version.to_s, :commit => "2dfc6924c160d7222571330fb15eb20fa3974a1b" }
s.ios.deployment_target = '9.0'
s.source_files = "CrashHook/Classes/*.{h,m}"
end

- 配置完 podspec的信息 且引入类库之后,需要更新提交到Github上,不然会验证上一次提交的信息
三,验证podspec
pod lib lint --allow-warnings
pod spec lint --allow-warnings
- 最容易出现的问题
- ERROR | [iOS] file patterns: The `source_files` pattern did not match any file
- 解决办法
open /Users/用户名/Library/Caches/CocoaPods/Pods/External/项目名
将工具类拷贝到目录下面,和s.source_files路径一致

再重复上面的步骤,如果还不行就设置如下,比默认设置的多了一个
:commit => "2dfc6924c160d7222571330fb15eb20fa3974a1b" ,保持最新提交
s.source = { :git => 'https://github.com/wangjian201314/CrashHook.git', :tag => s.version.to_s, :commit => "2dfc6924c160d7222571330fb15eb20fa3974a1b" }
四,推送podspec到远程仓库
- 没有注册账户的先注册
pod trunk register 邮箱地址 '用户名' --verbose
pod trunk me
- 推送
pod trunk push xxx.podspec --allow-warnings

五,检查项目podspec是否上传成功
pod search xxxx
搜不到的解决方法如下:(后面发现项目中pod install 可以安装,但是就是搜索不到,别担心,只是cocoapods库还没更新上去,等第二天再搜索就有了)
需要更新本地的repo
执行命令 pod setup 或者 删除本地的搜索索引 rm ~/Library/Caches/CocoaPods/search_index.json
,再次执行 pod search XKCocoapods
六,更新库版本
-
修改版本号
image.png
- 修改tag
git tag 1.0.1
git push orgin 1.0.1
-
或者github修改tag
image.png
-
添加或者更改文件,记得再执行pod install,podsepc文件source路径中的:commit => "2dfc6924c160d7222571330fb15eb20fa3974a1b" 也要保持最新提交,否则cocoapods更新上去会找不到代码,后面发现这个commit去掉也可以提交成功了,默认是最新提交了,不知道为啥😄
-
接着上面第三步操作就👌🏻了
网友评论