iOS开发iOS项目实践中的学习iOS 开发工具

iOS工程配置与Jenkins打包

2019-03-22  本文已影响130人  Winter_b480

本文主要讲解在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的技术研发工作。

上一篇 下一篇

猜你喜欢

热点阅读