一、安装 Fastlane
如果尚未安装Fastlane,打开终端,在根目录下执行,进行安装
sudo gem install fastlane
二、初始化 Fastlane
- 先切换到项目目录中
cd .... - 执行如下命令,初始化Fastlane
fastlane init - 选择想要Fastlane执行的操作。
选择manual setup,应该是4
三、其他准备工作
-
去AppStore配置秘钥,以便连接AppStore时免登录
- 在开发者中心的App Store Connect下选择“用户和访问” - “集成” - 秘钥。
在这里获取所需要的Issuer ID、秘钥ID,将秘钥文件xxx.p8下载下来保存好。 - 将
xxx.p8文件放入与fastlane文件夹同级的文件夹中
-
配置env文件
- 将终端切到
fastlane文件夹 - 执行
touch .env.default, 生成.env.default文件 - 执行
open -a TextEdit .env.default打开.env.default文件 - 编辑.env.default文件,将以下内容粘贴至文件中,并用项目的真实参数替换“=”后的内容
SCHEME=工程名
BUNDLE_ID=BundleId
WECOM_WEBHOOK_KEY=机器人key
DEVELOPMENT_PROFILE_NAME=测试描述文件名
PGYER_APP_KEY=蒲公英Appkey
STAGING_PROFILE_NAME=发布描述文件名
APP_STORE_CONNECT_API_KEY_KEY_ID=在AppStore中配置的秘钥的秘钥Id
APP_STORE_CONNECT_API_ISSUER_ID=在AppStore中获取的IssuerId
APP_STORE_CONNECT_API_KEY_FILEPATH=./在AppStore中下载的文件名.p8
-
配置忽略文件
在.gitgnore中忽略掉敏感信息及打包文件
添加如下代码
*.ipa
*.dSYM.zip
*.dSYM
*.lock
fastlane/*.xml
fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/output
*.p8
.env.default
四、打包至蒲公英
1. 在项目目录中执行如下语句,将蒲公英插件添加到项目中,并自动更新 Pluginfile 和 Gemfile。
fastlane add_plugin pgyer
2. 配置 Fastfile
将如下代码copy到Fastfile中
default_platform(:ios)
platform :ios do
# 工程名字
scheme = ENV["SCHEME"]
# BundleId
bundle_id = ENV["BUNDLE_ID"]
# 机器人配置
wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
# 项目版本号
version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")
# 蒲公英更新日志
changeLog = <<~CHANGELOG
- 修复已知问题
CHANGELOG
desc "打包、上传蒲公英并通知企业微信群"
lane :debugToPgy do
# 描述文件
profile_name = ENV["DEVELOPMENT_PROFILE_NAME"]
# 蒲公英配置
pgyer_api_key = ENV["PGYER_APP_KEY"]
# 蒲公英下载链接
download_url = "将下载链接粘贴进来" #正常是可以从回调内容中获取的,但是配置没成功,始终不好使,暂时写死
# 清理构建
clean_build_artifacts
# 构建 IPA 包
gym(
scheme: scheme,
export_method: "development",
export_options: {
provisioningProfiles: {
bundle_id => profile_name
}
},
output_directory: "./fastlane/output/ipa", # 指定 .ipa 的输出文件夹
output_name: "#{scheme}.ipa" # 指定生成的 .ipa 文件名
)
# 上传到蒲公英
pgyer_info = pgyer(
api_key: pgyer_api_key,
ipa: "./fastlane/output/ipa/#{scheme}.ipa",
update_description: changeLog,
)
# 发送到企业微信信息
weChatmessage = <<~WeChat
# 新版本测试包:
\n
**版本号:** #{version} ( #{build} )
\n
**更新内容:**
--------------------------------
#{changeLog}
--------------------------------
[点击下载](#{download_url})
WeChat
# 企业微信通知
sh %(
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=#{wecom_webhook_key}' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "#{weChatmessage}"
}
}'
)
end
end
- 参数解析:
- scheme:工程名字
- profile_name: 描述文件名字
- pgyer_api_key:蒲公英的api key(在蒲公英平台 - 用户 - API信息中查看)
- pgyer_user_key:蒲公英user key(在蒲公英平台 - 用户 - API信息中查看),新版不需要userkey了
- wecom_webhook_key:企业微信 群机器人的key(首先要管理员添加一个群机器人)
- export_method:描述文件类型(如果是测试描述文件则是
"ad-hoc";如果是开发的描述文件则是development)
3. 使用
在项目目录中执行如下语句,打包、上传蒲公英并通知企业微信群
fastlane debugToPgy
五、打包至TestFlight
1. 配置 Fastfile
default_platform(:ios)
platform :ios do
# 工程名字
scheme = ENV["SCHEME"]
# BundleId
bundle_id = ENV["BUNDLE_ID"]
# 机器人配置
wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
# 项目版本号
version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")
# TestFlight更新信息
testFlightLog = <<~TESTFLIGHTLOG
- 修复已知问题
TESTFLIGHTLOG
desc "打包、上传TestFlight并通知企业微信群"
lane :release do
# 描述文件
profile_name = ENV["STAGING_PROFILE_NAME"]
# TestFlight外测链接
testFlight_url = "发布外测版本的链接"
# 清理构建缓存
clean_build_artifacts
# 连接AppStore秘钥
app_store_connect_api_key(
key_id: ENV["APP_STORE_CONNECT_API_KEY_KEY_ID"],
issuer_id: ENV["APP_STORE_CONNECT_API_ISSUER_ID"],
key_filepath: ENV["APP_STORE_CONNECT_API_KEY_FILEPATH"]
)
# 构建 IPA 包
gym(
scheme: scheme,
export_method: "app-store",
export_options: {
provisioningProfiles: {
bundle_id => profile_name
},
output_directory: "./fastlane/testFlightOutput/ipa", # 指定 .ipa 的输出文件夹
output_name: "#{scheme}.ipa" # 指定生成的 .ipa 文件名
}
)
# 上传到 App Store Connect(仅 TestFlight)
upload_to_testflight(
skip_waiting_for_build_processing: true
)
# 发送到企业微信信息
weChatmessage = <<~WeChat
# 新版本 TestFlight 更新通知:
\n
**版本号:** #{version} ( #{build} )
\n
**更新内容:**
--------------------------------
#{testFlightLog}
--------------------------------
\n
内部测试人员,请注意查收TestFlight更新推送!
\n
[外部测试下载链接](#{testFlight_url})
WeChat
# 企业微信通知
sh %(
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=#{wecom_webhook_key}' \
-H 'Content-Type: application/json' \
-d '{
"msgtype": "markdown",
"markdown": {
"content": "#{weChatmessage}"
}
}'
)
end
end
- 参数解析:
- scheme:工程名字
- profile_name: 描述文件名字
- wecom_webhook_key:企业微信 群机器人的key(首先要管理员添加一个群机器人)
- export_method:描述文件类型
2. 使用
在项目目录中执行如下语句,打包、上传TestFlight并通知企业微信群
fastlane release