iOS工程配置与Jenkins打包
本文主要讲解在iOS的实际开发中,如何配置工程,最后利用这些配置,让Jenkins打包更容易。
本文的主线是:宏定义控制代码块 -> Configuration中定义宏 -> Scheme中配置Configuration -> Jenkins打包。
一、宏定义的简单使用
经常我们会在工程里配置了很多宏定义:
#define SERVER_URL_PRO @"https://mapi.bestpay.cn/" //生产环境地址
#define SERVER_URL_TEST @"https://test.bestpay.cn/" //测试环境地址
NSURL* url = [NSURL URLWithString: SERVER_URL_PRO] ;
有时候,你会用一个宏来控制代码块:
#define ENV_PRODUCTION 1 //生产环境
- (NSURL *)serverURL {
#if ENV_PRODUCTION
NSURL* url = [NSURL URLWithString:SERVER_URL_PRO] ;
#else
NSURL* url = [NSURL URLWithString:SERVER_URL_TEST] ;
#endif
return url ;
}
或者你还可以用一个宏来控制另外一个宏的值:
#define ENV_PRODUCTION 1 //生产环境
#if ENV_PRODUCTION
#define SERVER_URL @"https://mapi.bestpay.cn/" //生产环境地址
#else
#define SERVER_URL @"https://test.bestpay.cn/" //测试环境地址
#endif
这样使用的时候,上面那个serverURL的获取就简单多了
- (NSURL *)serverURL {
NSURL* url = [NSURL URLWithString:SERVER_URL] ;
return url ;
}
二、Configurations(配置)的使用
上面我们使用宏来控制代码,下面我们用configuration来控制宏,其实也是在不同的配置项里预置了不同的宏。
image.png
如图,Xcode为每个工程预置了一个Debug和Release的配置,我们可以点击下面的+按钮来duplicate(复制)更多的配置,然后给不同的配置不同的参数。
image.png
这是我们工程里配置的,很傻很天真的我,分出这些可爱的名字,不过一看就知道意思了吧😄
然后点击“Build Settings”标签,你应该注意到这边的配置项,每一项都可以单独给刚刚我们复制的那个configuration来配置,比如
image.png
我们找到自定义宏的配置,来预置了一些宏:
image.png
这样我们,在代码里,就可以这么写了,下面就是一个栗子🌰哈,请忽略文字内容
#if DEBUG299
#define kTEXT @"企业账号开发调试"
#elif DEBUG99
#define kTEXT @"个人账号开发调试"
#elif RELEASE_299_INHOUSE
#define kTEXT @"企业账号打包"
#elif RELEASE_99_ADHOC
#define kTEXT @"个人账号AdHoc打包"
#elif RELEASE_99_APPSTORE
#define kTEXT @"发布APPSTORE"
#endif
NSLog(@"TEXT:%@", kTEXT) ;
我们还可以添加我们自定义的build setting 选项,比如,我们实现不同的配置,不同的APP名称,你可以这样,点击那个+号,选择“Add User-Defined Setting”
image.png
image.png
使用的时候,选择Target,在Info里使用即可:
image.png
我们针对不同的Configuration配置了不同的APP名称,和打印不同的字符串,那如何使用呢?
三、在Scheme中使用Configuration
点击“Edit Scheme”进入下图这个页面,左边选项是Run,或者Archive,右边都会有一个Build Configuration的选项,选择不同的Configuration,就会有不同的效果了。
image.png
也许你会觉得,这样切来切去比较麻烦,你可以在Manage Scheme界面,Duplicate多个Scheme来对应不同的Configuration,这样只要切换Scheme就好了
image.png然后分别给不同的Scheme选择对应的Configuration即可。
四、Jenkins打包
我们配置好了工程,开发的时候方便了许多,下一步我们配置Jenkins来实现打包,这样测试同学就不用盯着小开发们要包了,下面实在mac系统上的操作,其他系统没有做尝试。
首先去官网下载软件安装,https://jenkins.io/download/,安装你就按照一步一步安装吧,好像没有遇见什么问题。按照提示操作好了,有问题的下面评论吧。下面讲述登录进去后的一些常用配置。
1、插件
我们没有安装很多插件,除了系统默认的,基本是用一个安装一个,下面列出一些插件,仅供参考
Git Parameter Plug-In 这个插件可以在打包前选择你的GIT分支,挺好用的。
description setter plugin 这个可以把打包的结果,展示出来,比如显示一个二维码。
Role-based Authorization Strategy 这个是权限管理的,可以给用户分配一些权限,自己看着用。
2、凭据
需要拉代码,首先需要设置凭据,可以在:Jenkins -> 凭据 -> 域名 -> 添加凭据。(如果没有域,可以新增一个域)
image.png
我们的GIT使用SSH来授权的,所以这里直接填写Private Key即可。这样就可以拉代码了。
3、添加任务
添加一个任务,
image.png
4、配置参数
image.png这是GIT参数,可以过滤和选择不同的分支,还可以快速的搜索分支。
image.png上图是打包选项,为了方便,我们分别对应我们创建的那5个Scheme。
5、GIT配置
直接看图吧
image.png
6、构造脚本
我们直接选择了用shell脚本来构造了,主要脚本如下:
#进入工程文件夹
cd OrangeLoans
#设置一些
Workspace="OrangeLoans"
Target="OrangeLoans"
#获取当前时间,然后一个文件夹名称
Nowtime=$(date +%Y%m%d_%H%M%S)
FileFolder=${Target}_${Nowtime}
#这是我的上传说明
UploadDesc="OrangeLoans"
#打包选项,针对不同的选项,设置了不同的Configuration和Scheme
if [ ${Archive_Type} == "Enterprise_Test" ]
then
Configuration="Release299InHouse"
Scheme="InHouse299"
UploadDesc="企业测试"
elif [ ${Archive_Type} == "Enterprise_Dev" ]
then
Configuration="Debug299"
Scheme="Dev299"
UploadDesc="企业开发"
elif [ ${Archive_Type} == "Person_Dev" ]
then
Configuration="Debug99"
Scheme="Dev99"
UploadDesc="个人开发"
elif [ ${Archive_Type} == "Person_AdHoc" ]
then
Configuration="Release99AdHoc"
Scheme="AdHoc99"
UploadDesc="个人AdHoc包"
elif [ ${Archive_Type} == "Person_AppStore" ]
then
Configuration="Release99AppStore"
Scheme="AppStore99"
UploadDesc="上传AppStore包"
else
echo "没有符合的条件"
fi
#这是导出包的时候,需要一个exportOptionsPlist文件,这是文件地址
exportOptionPath="/Users/Shared/Jenkins/Home/workspace/exportOptions/OrangeLoans/export_${Archive_Type}.plist"
#echo ${Target}
#echo ${Workspace}
#echo ${Configuration}
#echo ${Scheme}
#echo ${exportOptionPath}
#echo ${Nowtime}
#echo ${FileFolder}
#build之前clean一下
xcodebuild -workspace ./${Workspace}.xcworkspace -scheme ${Scheme} clean
#打包编译
xcodebuild -workspace ./${Workspace}.xcworkspace -scheme ${Scheme} -configuration ${Configuration} -archivePath ./build/${Target}.xcarchive archive
#导出包
xcodebuild -exportArchive -archivePath ./build/${Target}.xcarchive -exportPath ./build/${FileFolder} -exportOptionsPlist ${exportOptionPath}
downloadDesc=${UploadDesc}-${Select_Branch}
if [ -n "$app_download_desc" ]; then
downloadDesc=${app_download_desc}
fi
#这是上传我们自己服务器的,以实现在线下载
result=$(curl -k -F package=@./build/${FileFolder}/OrangeLoans.ipa -F changelog=${downloadDesc} https://www.bestpay.com.cn)
#上传返回的结果是一个json,里面有一个地址。获取那个地址
uuid=$(echo ${result} | /usr/local/bin/jq .guid)
uuuu=${uuid:1:36}
downloadURL='itms-services://?action=download-manifest&url=https://www.bestpay.com.cn/plist/'${uuuu}
#这是网上找的一个生产二维码图片的应用,在https://github.com/sylnsfar/qrcode
/usr/local/bin/myqr ${downloadURL} -n 'download_ipa_qr.png' -d ./build/
这样就打包完成啦,上传也完成啦,下载二维码图片也完成啦,啦啦啦
7、其他
关于exportOptionsPlist文件,你导出包的时候,会有一这么文件, image.png就是ExportOptions.plist文件,这里会记录你导出包的时候比如provisioningProfiles、teamID、Bitcode选项、签名证书等选项。直接拖过去用就好。
关于provisioningProfiles文件,你可以从你的Xcode的目录复制过去,在路径:
# xcode目录
~/资源库/MobileDevice/Provisioning Profiles/
#Jenkins里的目录
/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles/
作者简介
目前就职于甜橙金融(翼支付)信息技术部,负责iOS的技术研发工作。