本文主要使用 fastlane 配置 iOS 的持续集成,一行命令实现, 自动编译、打包、上传蒲公英、钉钉机器人通知的功能。
如果对 fastlane 还不了解,可以阅读Fastlane自动化构建工具(完整解决测试和发布流程)这篇文章,简单了解一下,想要深入了解,可以前往Fastlane官网
一、安装 fastlane
1、进入工程根目录
cd [工程根目录]
2、初始化 fastlane
fastlane init
3、What would you like to use fastlane for?
选择 3
(其实任何选项都可以,后面可以完善)
4、Parsing your local Xcode project to find the available schemes and the app identifier?
选择 工程的 scheme
5、Please enter your Apple ID developer credentials?
输入 Apple ID
6、Would you like fastlane to manage your app's metadata?
选择 y
7、打开工程,设置Current Project Version 和 Versioning System
8、新开一个窗口,进入工程根目录,更新 bundle
cd [工程根目录]
bundle update
二、蒲公英 App 上传
1、进入工程根目录
cd [工程根目录]
2、安装蒲公英的 fastlane 插件
fastlane add_plugin pgyer
三、钉钉机器人通知
1、钉钉 -> 群机器人 -> 添加机器人
2、复制 webhook
四、fastfile 配置
Fastlane 会自动在工程根目录中生成 fastlane 目录,其中就会有 fastlane 的配置文件 fastlane/Fastfile
参考文档:
Fastlane 操作文档
使用 Fastlane 上传 App 到蒲公英
钉钉开放平台 自定义机器人
2、配置 Fastfile,可以根据如下代码片段进行完善
配置项(替换[******]
)
app 相关
名称 | 说明 |
---|---|
ipa_name |
ipa 名字 |
gym 相关
名称 | 说明 |
---|---|
scheme |
工程 scheme |
pgyer 相关
名称 | 说明 |
---|---|
api_key |
蒲公英 app api_key |
user_key |
蒲公英 app user_key |
dingding 相关
名称 | 说明 |
---|---|
app_url |
app 下载链接 |
app_icon |
app 图标链接 |
dingTalk_url |
钉钉机器人 webhook |
达人店目前的 Fastfile
default_platform(:ios)
# 网络请求依赖
require 'net/http'
require 'uri'
require 'json'
platform :ios do
# release发布包
desc "Push a new release build to the App Store"
lane :release do
increment_build_number(xcodeproj: "DaRenShop.xcodeproj")
build_app(workspace: "DaRenShop.xcworkspace", scheme: "DaRenShop")
upload_to_app_store
end
# debug测试包
desc "Push a new debug build to the pgyer.com"
ipa_dir = "fastlane_build/"
ipa_name = "[******]" + Time.new.strftime('%Y-%m-%d_%H:%M')
lane :pgyer_debug do |options|
gym(
# 打包前clean项目
clean: true,
# 构建时,隐藏不必要的信息
silent: true,
# bitcode
include_bitcode: false,
# 导出方式 app-store、ad-hoc、enterprise、development
export_method: "ad-hoc",
# scheme
scheme: "[******]",
# 环境 Debug、Release
configuration: "Debug",
# ipa的存放目录
output_directory: ipa_dir,
# 输出ipa的文件名为当前的build号
output_name: ipa_name
)
# 蒲公英
pgyer(
api_key: "[******]",
user_key: "[******]",
update_description:
options[:desc]
)
# 钉钉机器人
app_patch = ipa_dir + "/#{ipa_name}.ipa"
app_version = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleShortVersionString")
app_build_version = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleVersion")
app_name = get_ipa_info_plist_value(ipa: app_patch, key: "CFBundleDisplayName")
app_url = "[******]"
app_icon = "[******]"
dingTalk_url = "[******]"
markdown =
{
msgtype: "link",
link: {
text: "已经更新啦,快来试试吧!",
title: "iOS #{app_name} #{app_version} (#{app_build_version}) 内测版",
picUrl: "#{app_icon}",
messageUrl: "#{app_url}"
}
}
uri = URI.parse(dingTalk_url)
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
request = Net::HTTP::Post.new(uri.request_uri)
request.add_field('Content-Type', 'application/json')
request.body = markdown.to_json
response = https.request(request)
puts "------------------------------"
puts "Response #{response.code} #{response.message}: #{response.body}"
end
end
五、开始构建
1、进入工程根目录
cd [工程根目录]
2、执行fastlane pgyer_debug命令
fastlane pgyer_debug
3、 构建完成
4、钉钉通知
六、自动更新设备列表
1.前往 Apple Developer,在 Devices
中添加 相应的新设备
。
2.本地删除 ~/Library/MobileDevice/Provisioning
路径下所有内容。
(注:同时管理多个 AppleID 要防止误删)
3.Xcode中按住 command + ,
打开偏好设置,Accounts
中选择 相应的AppleID
点击 Download Manual Profiles
把远端管理的 provisioning profile 更新到本地。
七、问题汇总
1.报错 xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
原因:安装了多个 Xcode,xcodebuild 找不到原来的 Xcode 了。
解决:重新选择正确的 Xcode。
sudo xcode-select --switch /Applications/Xcode9.app/Contents/Developer/