http://www.cocoachina.com/ios/20150916/13433.html
* how to enhance script and function.
简介
持续集成是个“一次配置长期受益”的工作。但很多小公司都没有。以前在做Windows开发配置感觉简单一些,这次配置iOS的,感觉步骤还挺多。整理出来,分享给大家,不正确的地方请及时指正。
本文主要使用fastlane配置iOS的持续集成,自动编译、打包出多个版本。
最近转行iOS开发,首要任务是使用Jenkins(算是hudson的兄弟)配置iOS工程的持续集成。 查找各种资料后,整理出以下几个关键词。
jenkins搭建。
使用fastlane中提供的工具修改工程配置。
gym 或 ipa 工具编译工程。
目标
-
配置一台电脑自动获取代码,并定时打包出以下版本的ipa文件。
-
内部测试版本:使用标准开发者的Developer证书签名的ipa文件。
-
公开测试版本:使用企业账户的Distribute InHouse证书签名的ipa文件。
-
AppStore版本:使用标准开发者的AppStore证书签名的ipa文件。
-
渠道版本:内部测试版本,但Info.plist中增加每个渠道的标示符(因为渠道例如fir.im会使用自己的证书重新签名ipa,因此侧部测试版本就可以)PS: 2015年11月24日补充,fir.im 不会重新签名ipa。
-
保留每个版本的dSYM调试符号文件。
源代码
https://github.com/everettjf/ios_ci_fastlane_demo
安装
fastlane和shenzhen都需要gem安装,把gem更换为淘宝源。
安装fastlane
1
|
sudo gem install fastlane |
-
fastlane是ruby编写,使用gem安装。
安装shenzhen
1
|
sudo gem install shenzhen
|
-
如果只使用了gym命令,而不使用ipa命令,可以不安装。
示例步骤
在xcodeproj文件同级目录下,执行
1
|
fastlane init |
fastlane 很强大,甚至能自动截图,自动提交AppStore审核,不过我只用最简单的打包功能。 这里会有一系列提问。
1
2
3
4
5
6
7
8
|
* Do you want to get started...? y * Do you have everything commited... ? y * App Identifier (com.krausefx.app): com.everettjf.fastlanedemo * Your Apple ID (fastlane@krausefx.com): xxxxxxxx@xxxx.com * ... updates to the App Store or Apple TestFlight? (y/n) n * Do you want to setup 'snapshot' ... n
* Do you want to use 'sigh' ... n (是否自动下载provisioning文件)
* The scheme name of your app: fastlanetest (如果就一个工程,也可不输入) |
上面有一步要输入AppleID,是因为fastlane(的一个工具sigh,这个字母是H)会自动下载对应的provisioning文件。自动下载provisioning文件,对于经常增加测试设备的Developer证书挺方便。不过,示例就不自动下载了。
执行完成后,会在工程目录下生成fastlane文件夹。
1
2
3
4
|
drwxr-xr-x 5 everettjf staff 170B Sep 8 22:32 fastlane drwxr-xr-x 10 everettjf staff 340B Sep 8 22:00 fastlanedemo drwxr-xr-x 5 everettjf staff 170B Sep 8 22:38 fastlanedemo.xcodeproj drwxr-xr-x 4 everettjf staff 136B Sep 8 22:00 fastlanedemoTests |
我们需要修改fastlane文件夹的两个配置文件:Appfile和Fastfile。(实际是ruby代码)
1. 修改Appfile
1
2
3
4
5
6
7
|
app_identifier "com.everettjf.fastlanedemo"
apple_id "aaa@aaa.com"
for_lane :inhouse do
app_identifier "com.everettjf.fastlanedemoqiye"
apple_id "bbb@bbb.com"
end |
企业InHouse版本与AppStore的app_identifier、apple_id不同。 这里for_lane 就是为后面Fastfile中定义的:inhouse版本设置单独的信息。
2. 修改Fastfile
这个文件中要编写每个版本的编译和打包代码(Developer版本、AppStore版本、InHouse版本、多个渠道版本), 每个版本要经过以下几个步骤: - 修改版本号和build号(修改为外部传入的版本,例如:1.0.0和100)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
def prepare_version(options) #say 'version number:'
#say options[:version]
increment_version_number(
version_number: options[:version],
xcodeproj: PROJECT_FILE_PATH,
)
#say 'build number:'
#say options[:build]
increment_build_number(
build_number: options[:build],
xcodeproj: PROJECT_FILE_PATH,
)
end |
-
修改app identifier(就是bundle id,例如:com.everettjf.fastlanedemo)
1
2
3
4
5
6
7
8
9
10
11
12
|
def update_app_identifier(app_id) update_info_plist(
xcodeproj:PROJECT_FILE_PATH ,
app_identifier:app_id,
plist_path: "#{PLIST_FILE_PATH}"
)
update_info_plist(
xcodeproj:PROJECT_FILE_PATH ,
app_identifier:app_id,
plist_path: "#{UNITTEST_PLIST_FILE_PATH}"
)
end |
-
修改签名的配置,配置对应的provision file
1
2
3
4
5
6
|
def update_provision(typePrefix) update_project_provisioning(
xcodeproj:PROJECT_FILE_PATH ,
profile: "./fastlane/provision/#{typePrefix}.mobileprovision" ,
)
end |
-
渠道版本修改Info.plist文件中对应的字符串
1
2
3
4
5
6
7
8
9
10
|
def set_info_plist_value(path,key,value) sh "/usr/libexec/PlistBuddy -c \"set :#{key} #{value}\" #{path}"
end def set_channel_id(channelId) set_info_plist_value(
"./../fastlanedemo/#{PLIST_FILE_PATH}" ,
'ChannelID' ,
"#{channelId}"
)
end |
-
编译打包为ipa
这步使用了工具shenzhen,也可以使用fastlane推荐的gym。
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def generate_ipa(typePrefix,options) #say 'generate ipa'
fullVersion = options[:version] + '.' + options[:build]
channelId = options[:channel_id]
ipa(
configuration: "Release" ,
scheme: "#{SCHEME_NAME}" ,
destination: "./build" ,
ipa: "#{APP_NAME}_#{fullVersion}_#{typePrefix}.ipa" ,
archive: false
)
sh "mv ./../build/#{APP_NAME}.app.dSYM.zip ./../build/#{APP_NAME}_#{fullVersion}_#{typePrefix}.app.dSYM.zip"
end |
3.?编写shell脚本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#!/bin/sh # # usage: # > sh build.sh 1.0.0 200 # versionNumber=$1 # 1.0.0
buildNumber=$2 # 2000
rm -rf build basicLanes= "AdHoc AppStore Develop InHouse"
for laneName in $basicLanes
do fastlane $laneName version:$versionNumber build:$buildNumber
done channelIds= "fir 91"
for channelId in $channelIds
do fastlane Channel version:$versionNumber build:$buildNumber channel_id:$channelId
done |
1
|
sh build.sh 1.0.0 100 |
我们传入主版本号和一个自增的id(一般是jenkins的build number)。
配置Jenkins
有了能一键编译的脚本,让Jenkins在获取代码后,调用build.sh就可以了。
安装
1
|
brew install jenkins |
配置获取代码,获取代码后调用shell:
1
|
sh build.sh 1.0.0 ${BUILD_NUMBER} |
苹果开发者证书配置
假设我们有两个开发者账号,一个是标准开发者账户(99刀,个人或公司),一个是企业账户(299刀)。 - 标准开发者账户:aaa@aaa.com
1
2
|
Identifier中增加com.everettjf.fastlanedemo Provisioning Profiles中增加一个 iOS Distribution(AdHoc 和 AppStore) 和 iOS Development |
企业账户:bbb@bbb.com
1
2
|
Identifier中增加com.everettjf.fastlanedemoqiye Provisioning Profiles中增加一个 iOS Distribution(AdInHouse) |
相关文档
-
fastlane:https://github.com/KrauseFx/fastlane/tree/master/docs
-
shenzhen : https://github.com/nomad/shenzhen
其他途径
-
Jenkins的xcode插件:Jenkins有个xcode插件,网上有些文章,不过自己没有使用。不知道能否 动态的更换证书。
-
一次编译多次签名:在没有使用fastlane之前,看到fastlane提供了一套工具集,就使用gym先编译 一个Developer证书签名的ipa,之后使用其他证书分别签名。
重要补充
-
安装jenkins的机器上的Xcode要导入开发者账户(存在私钥的账户信息,通过首次创建证书的电脑上的Xcode导出)
文章首次发布于:everettjf.github.io
相关推荐
`fastlane`是一款强大的自动化工具,专为iOS和Android应用开发者设计,用于简化移动应用的构建、测试和发布流程。这个压缩包“fastlane, 部署 Objective C 和Swift框架的fastlane安装程序.zip”显然是为了帮助...
快速车道(Fastlane)是iOS和Android开发中的一个自动化工具,它可以帮助开发者简化构建、测试和发布应用的流程。在本文中,我们将深入探讨如何利用Fastlane实现iOS单工程的自动化打包,以及在这个过程中可能遇到的...
Swift开发中的Fastlane是一款强大的自动化工具,用于iOS和Android应用的构建、测试和发布。它极大地简化了开发者的工作流程,让繁琐的手动打包过程变得自动化。在这个“swift-Fastlane--自动打包文件配置和流程”中...
《PyPI官网下载 | fastlane-0.1.0.tar.gz》 在Python的世界里,PyPI(Python Package Index)是官方的软件仓库,它为全球的Python开发者提供了丰富的第三方库资源。本资源"fastlane-0.1.0.tar.gz"就是这样一个从...
用于徽章的fastlane插件入门该项目是插件。 要开始使用fastlane-plugin-badge ,请运行以下命令将其添加到您的项目中: fastlane add_plugin badge关于徽章有关更多信息和详细信息,请转到例子查看以了解如何使用此...
fastlane 让你在不同环境下定义和运行发布管道,可帮你简化应用的发布过程,并自动化整个过程。可连接 CocoaPods 和 xctool 等工具。 标签:fastlane
Android-fastlane.zip,自动构建和发布iOS和Android应用程序的最简单方法,安卓系统是谷歌在2008年设计和制造的。操作系统主要写在爪哇,C和C 的核心组件。它是在linux内核之上构建的,具有安全性优势。
《iOS开发:Fastlane自动化打包详解》 在iOS应用开发过程中,打包是一个不可或缺的环节,而手动打包不仅耗时,还容易出错。为了解决这个问题,开发者们引入了Fastlane,一个强大的自动化工具,旨在简化iOS和Android...
要开始使用fastlane-plugin-alioss ,请通过运行以下fastlane-plugin-alioss将其添加到您的项目中: fastlane add_plugin alioss 关于艾里奥斯 将ipa / apk上传到aliyun oos服务器,然后扫描QRcode在手机上安装...
fastlane-js fastlane.js的Monorepo:使用Java编写的App Automation正确完成了! 此仓库包含四个项目,这些项目是fastlane-js构建过程的关键。 在大多数情况下,请直接进入。 这是一种自动生成几乎所有fastlane动作...
`fastlane-plugin-clean_testflight_testers` 插件是针对 `fastlane` 平台的一个扩展,专门用于解决TestFlight中的测试用户管理问题,特别是自动化删除用户这一任务,以配合“超级签”(Super Signature)的使用。...
《PyPI官网下载:探索fastlane-0.2.1-py2.py3-none-any.whl》 在Python的世界里,PyPI(Python Package Index)是最重要的资源库,它为全球开发者提供了海量的Python库,使得开发工作变得更加便捷。本文将深入探讨...
常用的fastlane文件
fastlane-env-lanes 环境特定的车道(实现有点hacky)功能加载.env和.env.default与dotenv 为通过fastlane test:传入的.env.加载.env.<environment> fastlane test:<environment> 例如: fastlane test:production ...
要开始使用fastlane-plugin-ding_talk_msg_push ,请通过运行以下fastlane-plugin-ding_talk_msg_push将其添加到您的项目中: fastlane add_plugin ding_talk_msg_push 关于ding_talk_msg_push dingTalk机器人...
google_drive fastlane插件 入门 该项目是插件。 要开始使用fastlane-plugin-google_drive ,请运行以下命令将其添加到您的项目中: fastlane add_plugin google_drive 关于google_drive 请参考以创建Google云端...
要开始使用fastlane-plugin-upload_dsym_to_bugly ,请通过运行将其添加到您的项目中: $ fastlane add_plugin upload_dsym_to_bugly 将以下内容添加到您的fastfile lane :upload_dysm do upload_dsym_to_...
App Center fastlane插件 入门 该项目是插件。 要开始使用fastlane-plugin-appcenter ,请通过运行以下fastlane-plugin-appcenter将其添加到您的项目中: fastlane add_plugin appcenter 要使所有插件操作正常运行...
入门为Fastlane机器人生成Slack token 在您的Slack组织页面中,转到Manage -> Custom Integrations 打开Bots 添加配置为您的机器人选择一个名称,例如"fastlane" 保存API Token 将插件添加到fastlanefastlane add_...