一、安裝 Fastlane
如果尚未安裝Fastlane,打開終端,在根目錄下執(zhí)行,進(jìn)行安裝
sudo gem install fastlane
二、初始化 Fastlane
- 先切換到項(xiàng)目目錄中
cd .... - 執(zhí)行如下命令,初始化Fastlane
fastlane init - 選擇想要Fastlane執(zhí)行的操作。
選擇manual setup,應(yīng)該是4
三、其他準(zhǔn)備工作
-
去AppStore配置秘鑰,以便連接AppStore時免登錄
- 在開發(fā)者中心的App Store Connect下選擇“用戶和訪問” - “集成” - 秘鑰。
在這里獲取所需要的Issuer ID、秘鑰ID,將秘鑰文件xxx.p8下載下來保存好。 - 將
xxx.p8文件放入與fastlane文件夾同級的文件夾中
-
配置env文件
- 將終端切到
fastlane文件夾 - 執(zhí)行
touch .env.default, 生成.env.default文件 - 執(zhí)行
open -a TextEdit .env.default打開.env.default文件 - 編輯.env.default文件,將以下內(nèi)容粘貼至文件中,并用項(xiàng)目的真實(shí)參數(shù)替換“=”后的內(nèi)容
SCHEME=工程名
BUNDLE_ID=BundleId
WECOM_WEBHOOK_KEY=機(jī)器人key
DEVELOPMENT_PROFILE_NAME=測試描述文件名
PGYER_APP_KEY=蒲公英Appkey
STAGING_PROFILE_NAME=發(fā)布描述文件名
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. 在項(xiàng)目目錄中執(zhí)行如下語句,將蒲公英插件添加到項(xiàng)目中,并自動更新 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"]
# 機(jī)器人配置
wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
# 項(xiàng)目版本號
version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")
# 蒲公英更新日志
changeLog = <<~CHANGELOG
- 修復(fù)已知問題
CHANGELOG
desc "打包、上傳蒲公英并通知企業(yè)微信群"
lane :debugToPgy do
# 描述文件
profile_name = ENV["DEVELOPMENT_PROFILE_NAME"]
# 蒲公英配置
pgyer_api_key = ENV["PGYER_APP_KEY"]
# 蒲公英下載鏈接
download_url = "將下載鏈接粘貼進(jìn)來" #正常是可以從回調(diào)內(nèi)容中獲取的,但是配置沒成功,始終不好使,暫時寫死
# 清理構(gòu)建
clean_build_artifacts
# 構(gòu)建 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,
)
# 發(fā)送到企業(yè)微信信息
weChatmessage = <<~WeChat
# 新版本測試包:
\n
**版本號:** #{version} ( #{build} )
\n
**更新內(nèi)容:**
--------------------------------
#{changeLog}
--------------------------------
[點(diǎn)擊下載](#{download_url})
WeChat
# 企業(yè)微信通知
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
- 參數(shù)解析:
- scheme:工程名字
- profile_name: 描述文件名字
- pgyer_api_key:蒲公英的api key(在蒲公英平臺 - 用戶 - API信息中查看)
- pgyer_user_key:蒲公英user key(在蒲公英平臺 - 用戶 - API信息中查看),新版不需要userkey了
- wecom_webhook_key:企業(yè)微信 群機(jī)器人的key(首先要管理員添加一個群機(jī)器人)
- export_method:描述文件類型(如果是測試描述文件則是
"ad-hoc";如果是開發(fā)的描述文件則是development)
3. 使用
在項(xiàng)目目錄中執(zhí)行如下語句,打包、上傳蒲公英并通知企業(yè)微信群
fastlane debugToPgy
五、打包至TestFlight
1. 配置 Fastfile
default_platform(:ios)
platform :ios do
# 工程名字
scheme = ENV["SCHEME"]
# BundleId
bundle_id = ENV["BUNDLE_ID"]
# 機(jī)器人配置
wecom_webhook_key = ENV["WECOM_WEBHOOK_KEY"]
# 項(xiàng)目版本號
version = get_version_number(xcodeproj: "#{scheme}.xcodeproj")
build = get_build_number(xcodeproj: "#{scheme}.xcodeproj")
# TestFlight更新信息
testFlightLog = <<~TESTFLIGHTLOG
- 修復(fù)已知問題
TESTFLIGHTLOG
desc "打包、上傳TestFlight并通知企業(yè)微信群"
lane :release do
# 描述文件
profile_name = ENV["STAGING_PROFILE_NAME"]
# TestFlight外測鏈接
testFlight_url = "發(fā)布外測版本的鏈接"
# 清理構(gòu)建緩存
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"]
)
# 構(gòu)建 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
)
# 發(fā)送到企業(yè)微信信息
weChatmessage = <<~WeChat
# 新版本 TestFlight 更新通知:
\n
**版本號:** #{version} ( #{build} )
\n
**更新內(nèi)容:**
--------------------------------
#{testFlightLog}
--------------------------------
\n
內(nèi)部測試人員,請注意查收TestFlight更新推送!
\n
[外部測試下載鏈接](#{testFlight_url})
WeChat
# 企業(yè)微信通知
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
- 參數(shù)解析:
- scheme:工程名字
- profile_name: 描述文件名字
- wecom_webhook_key:企業(yè)微信 群機(jī)器人的key(首先要管理員添加一個群機(jī)器人)
- export_method:描述文件類型
2. 使用
在項(xiàng)目目錄中執(zhí)行如下語句,打包、上傳TestFlight并通知企業(yè)微信群
fastlane release