cocoapods本地私有库的使用
就是创建一个仓库, 存储在本地, 在本地的其他工程中直接使用
- 创建仓库描述文件
- pod spec create xxx
- 修改描述文件字段
- podfile需要指明安装本地库的路径
- pod spec create xxx
-
修改描述文件字段
配置私钥公钥
//查看ssh是否存在
cd ~/.ssh
cat id_rsa //查看私钥内容
ssh-keygen //生成私钥公钥命令 或下面一句
ssh- keygen -t rsa -b 4096 -C " git2019@163. com"
cocoapods远程私有库的使用
//允许拉去没有关联的文件
git pull origin main --allow-unrelated-histories
git remote -v //远程地址信息
//添加本地仓库,专门存放podspec文件
pod repo add ZRBase https://github.com/TangGeV587/ZRBaseSpec.git
cd /Users/tangge/Desktop/privateLib
//自动生成Pod模板
pod lib create ZRBase
git add .
git commit -m '初始化代码' //podspec文件记得一起修改
git branch -M main
git remote add origin https://github.com/TangGeV587/ZRBase.git
git push origin main
git tag '0.1.0'
git push --tags
//验证私有库
pod spec lint --private --sources='https://github.com/CocoaPods/Specs.git'
//将podspec 推送到本地仓库 ,自动关联到远程的私有库中
pod repo push ZRBase ZRBaseSpec.podspec
//清除缓存
pod cache clean --all
子组件
# 将所有文件全部安装
#s.source_files = 'ZRBase/Classes/**/*'
#s.dependency 'AFNetworking'
#分模块安装
s.subspec 'Base' do |b|
b.source_files = 'ZRBase/Classes/Base/**/*'
end
组件二进制化
方式一
方式二
cocoapods-packager 快速完成类库的打包
sudo gem install cocoapods-packager
pod package ZRSegmentBar.podspec //⚠️⚠️⚠️必须是已经上传代码到远程仓库
遇到下面错误❌❌❌
have the same architectures (arm64) and can't be in the same fat output file
解决方式👉👉👉
/Library/Ruby/Gems/2.6.0/gems/cocoapods-packager-1.5.0/lib/cocoapods-packager/pod_utils.rb
打开pod_utils.rb文件,32行添加下面这句
config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64'
二进制&源码之间切换
//podsepc 部分源码
if ENV['IS_SOURCE'] || ENV['ZRDownLoad']
s.source_files = 'ZRDownLoad/Classes/**/*'
else
s.vendored_frameworks = 'ZRDownLoad/Products/ZRDownLoad.framework'
s.source_files = 'ZRDownLoad/Classes/**/*.h'
end
组件自动化
什么是自动化?
通过命令, 去自动执行一组固定操作
自动化使用场景?
测试、打包上传审核、分发等等
Fastlane
- Fastlane是一个ruby脚本集合
- Action是Fastlane自动化流程中的最小执行单元,体现在Fastfile脚本中的一个个命令
fastlane actions
fastlane actions 文档
fastlane actions 源码
// fastlane安装
sudo gem install -n /usr/local/bin fastlane
// 进入项目根目录,执行下面命令初始化Fastfile
fastlane init
//展示fastfile中的所有lane
fastlane lanes
//执行fastlane
fastlane ManagerLib tag:0.1.0 target:ZRSegmentBar
fastlane 遇到的问题
can't find executable pod for gem cocoapods,cocoapods is not currently included in the bundle, perhaps you meant to add it to your Gemfile?
解决方式→➡️➡️➡️ 在Gemfile 中添加 gem "cocoapods"
操作流程
//1.生成pod模板
pod lib create ZRSegmentBar
//2.编写源码
//3.关联远程仓库
git remote add origin https://github.com/TangGeV587/ZRSegmentBar.git
//4. 修改spec文件
#制作fastfile文件,实现以下命令
//5. Pod install
// 6.提交代码至远程仓库(git add . & git commit & git push)
//7. 打标签提交至远程仓库
//8. 验证spec文件 (pod spec lint)
//9. 把库索引文件提交至远程私有仓库(pod repo push ZRSpec ZRSegmentBar.podspec)
// 执行脚本文件
fastlane ManagerLib tag:0.1.0 target:ZRSegmentBar
fastlane自定义action
编辑remove_tag.rb文件
module Fastlane
module Actions
module SharedValues
REMOVE_TAG_CUSTOM_VALUE = :REMOVE_TAG_CUSTOM_VALUE
end
class RemoveTagAction < Action
def self.run(params)
tagName = params[:tag]
isDeleteLocalTag = params[:dL]
isDeleteRemoteTag = params[:dR]
cmds = []
# 删除本地标签 git tag -d 标签名称
if isDeleteLocalTag
cmds << "git tag -d #{tagName} "
end
#删除远程标签 git push origin main:标签名称
if isDeleteRemoteTag
cmds << "git push origin main:#{tagName} "
end
#执行数组里所有命令
result = Actions.sh(cmds.join('$'))
return result
end
def self.description
"自定义删除标签"
end
def self.details
"删除远程或者本地的标签"
end
def self.available_options
# 参数
# Below a few examples
[
FastlaneCore::ConfigItem.new(key: :tag,
description: "标签名称",
optional:false,
is_string: true, # 是否是字符串
default_value: false), # 默认值
FastlaneCore::ConfigItem.new(key: :dL,
description: "是否删除本地标签",
optional:true,
is_string: false, # 是否是字符串
default_value: true), # 默认值
FastlaneCore::ConfigItem.new(key: :dR,
description: "是否远程标签",
optional:true,
is_string: false, # 是否是字符串
default_value: true) # 默认值
]
end
def self.output
# 输出内容
end
def self.return_value
#返回值
end
def self.authors
# 作者
["三刀流索隆"]
end
def self.is_supported?(platform)
# 支持平台的描述
#
# true
#
# platform == :iOS
#
# [:ios, :mac].include?(platform)
#
platform == :iOS
end
end
end
end
//创建action
fastlane new_action
//校验action
fastlane action remove_tag
//打印如下表示成功
+------------------------+
| remove_tag |
+------------------------+
| 自定义删除标签 |
| |
| 删除远程或者本地的标签 |
| |
| Created by 三刀流索隆 |
+------------------------+
+-----+------------------+------------+---------+
| remove_tag Options |
+-----+------------------+------------+---------+
| Key | Description | Env Var(s) | Default |
+-----+------------------+------------+---------+
| tag | 标签名称 | | false |
| dL | 是否删除本地标签 | | true |
| dR | 是否远程标签 | | true |
+-----+------------------+------------+---------+
//执行action
remove_tag(tagName: target_version, dR:true, dL:true)
fastfile文件
default_platform(:iOS)
platform :iOS do
desc "ManagerLib 可以快速创建私有库,进行升级维护"
lane :ManagerLib do |options|
#定义参数
tagName = options[:tag]
targetName = options[:target]
# 航道行为
#pod install
cocoapods(
clean_install: true,
podfile: "./Example/Podfile"
)
# git add .
git_add(path: ".")
#git commit -m 'xxxx'
git_commit(path: ".", message: "版本升级维护")
# git push -u origin main
push_to_git_remote(
remote: "origin",
local_branch: "main",
remote_branch: "main" //⚠️⚠️⚠️⚠️后面千万不要加逗号
)
# 验证tag是否存在,如果存在, 应该删除本地标签和远程标签
#if 判断标签是否存在
# 执行删除本地/远程标签
#end
if git_tag_exists(tag: tagName ,remote:true)
UI.message("发现tag:#{tagName} 已经存在, 即将执行, 删除动作 🚀")
remove_tag(tag:tagName)
end
# git tag
add_git_tag(
tag: tagName
)
# git push --tags
push_git_tags
#pod lib lint
pod_lib_lint(allow_warnings: true,private:true)
#pod repo push xxxx xxxx.podspec
pod_push(path: "#{targetName}.podspec", repo: "ZRBaseSpec")
end
end