🎬 唯有工作和创作,才会使生命充满了趣味。—— 米凯朗尼
一、需求背景
模块化、通用能力的构建,都要使用到pod库
二、步骤
- 本地创建pod库
- Pod lib create customName
- 根据提示选择你需要的,创建成功后自动打开项目
- 功能开发
Pod 工程简介
- 替换ReplaceMe 文件,或者新建文件。 注意新建文件目录应该放到Classes文件夹下面
-
功能开发完了,可以在上面的Example for QLPodTest 工程里测试. Import QLPodTest 后,就可以使用Pod库里的东西了。 外部要访问的类文件,要标记为open或者public 才可以
-
Pod 资源文件的引入:
- 在和Classes文件夹同级目录下,直接创建一个
***.bunlde文件。显示包内容,将需要的图片等资源文件拖进去即可。 - 获取资源方式
public class QLPodTestTools {
/// 获取bundle
static var securityBundle: Bundle = {
var securityBudle = Bundle()
let bundle = Bundle(for: QLPodTestTools.self)
let path = bundle.url(forResource: "QLPodTest", withExtension: "bundle")
if let __path = path ,let __bundle = Bundle.init(url: __path) {
securityBudle = __bundle
}
return securityBudle
}()
/// 获取image
public static func getBundleImg(with name: String) -> UIImage {
var image = UIImage(named: name, in: securityBundle, compatibleWith: nil)
if image == nil {
image = UIImage(named: name)
}
return image ?? UIImage()
}
}
- 编辑podspec文件
按要求把该写的都写上。 几个注意点:
1、添加 s.resources = 'QLPodTest/QLPodTest.bundle'
2、注意修改:s.source = 远端仓库地址
3、swift版本支持、bitcode关闭
# swift 支持的版本
s.swift_version = '5.0'
s.xcconfig = {"ENABLE_BITCODE" => "NO"}
4、s.dependency 引入的三方库
5、有些可能需要这些限制
// 添加arm64支持
s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'}
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64'}
- 校验本地podspec写法是否正确
pod lib lint QLPodTest.podspec --allow-warnings
执行完显示 QLPodTest passed validation. 这个证明没问题。
如果有问题,根据它给出的提示,结合NOTE信息,进行修改。(这里问题不少,多上网查查解决办法吧😭😭😭)
- 至此本地开发完成。下面将代码推向远端
三、发布到远端
首先得有两个仓库地址, 一个存储Pod项目,一个存放spec版本文件
-
新建一个git仓库
git仓库地址: ssh://git@gitlab.xxx.work:56358/xxxx.git
specs地址:ssh://git@gitlab.xxx.work:56358/xxx.git
-
关联远端podspecs 索引
本地添加索引
pod repo add ssh://git@gitlab.xxx.work:56358/xxx.git
如果已经有了先删除,在添加
pod repo remove xxx
添加好后可以去.cocoapods 文件夹repos目录下查看有了xxx文件夹
远程索引
注:已经有了,并且有权限,直接推就行了。不用新创建、删除等操作
-
这里可以用依赖远程仓库地址方法,然后push上去
// 一定要cd到工程目录下 然后把本地的代码提交到远程仓库
cd .. QLPodTest
git remote add origin ssh://git@gitlab.xxx.work:56358/xxxx.git
git push -u origin master
git add .
git commit -m "add files"
git push -u origin master
- 也可以将远程pod仓库clone下来,将创建好的pod库添加进去。 (这里要注意:本地创建的pod库有.git隐藏文件,clone下来的也有,要将本地文件的.git删除在添加过去,不然会导致添加不上去)
cd 到远程文件夹下
git add .
git commit -m "add files"
git push
-
添加 打tag。 这个tag要和podspec 的s.version = '0.1.0' 值一样!!!
git tag 0.1.0
git push --tags
-
验证远端podspec文件
注:使用pod spec lint进行验证的时候, 会报找不到repo的错误, 需要添加sources选项
pod spec lint --sources='https://gitlab.xxx.work/xxx,https://cdn.cocoapods.org/'
-
推送podspec文件到远端
注:依然要加source地址选项
pod repo push xxx QLPodTest.podspec --allow-warnings --sources='ssh://git@gitlab.xxx.work:56358/xxx.git,https://cdn.cocoapods.org/' --allow-warnings
然后就可以在~/.cocoapods/repos/... 中查看,我们的的podspec已经在里面了!
此时通过pod search QLPodTest 已经可以查到了
四、使用
Podfile文件配置
# 添加source
source 'https://cdn.cocoapods.org/'
source 'ssh://git@gitlab.xxx.work:56358/xxx.git'
platform :ios, '11.0'
use_frameworks!
inhibit_all_warnings!
target 'QLUser' do
pod 'QLPodTest'
end
五、更新Pod库
- 在pod库里新增、修改完后,push到远端
- 修改podspec 的version 版本号
- 打对应的tag, git push --tags
- Cd到pod库目录下,更新版本管理文件,执行(pod repo push xxx QLPodTest.podspec)
- 项目里引入的地方,修改对应到的版本号。 然后pod install (不是最新代码,先删除pod lock文件,在pod install)
- 为了避免频繁修改提交tag等,我们可以先依赖分支进行调试验证
// 依赖分支写法
pod 'QLPodTest', :git => 'ssh://git@gitlab.xxx.work:56358/xxxx.git', :branch => 'develop'
每次pod 库修改提交了,这边就可以直接pod update repo
或者删除pod lock文件,在pod install。 就是最新代码了