gitlable iphone_使用gitlab ci构建IOS包并发送通知消息到企业微信

在之前的文章中,我们介绍了使用gitlab ci构建Android包的方法。今天我们介绍使用gitlab ci如何构建IOS包,并且在打包成功或者失败时,如何将消息通知到企业微信。

如果对gitlab ci还不熟悉的,可以参考之前的文章使用gitlab ci构建Android包,这篇文章我们主要涉及三个知识点:

IOS开发者证书。

IOS打包命令。

如何往企业微信发消息。

IOS开发者证书

IOS打包离不开开发者证书,因此首先我们需要先搞清楚IOS的证书是怎么回事,它是怎么工作的。

为什么需要证书

我们知道,如果手机不越狱的情况下,iphone手机安装app只能通过官方的App Store。这种限制是怎么做到的呢?其实很简单,主要用到了非对称加密。

首先苹果官方生成一堆公私钥,在所有的iphone手机里内置了一个公钥,在苹果公司的后台保存着私钥。当app开发者上传app到App Store时,会用保存在后台的私钥对App进行签名,在iphone手机上下载这个app后,用手机上的公钥来验证这个签名,如果签名验证通过,则表示这个app是由苹果后台认证的,并且没有被篡改过。

基于这种签名机制,保证了在iphone手机上安装的每一个app都是经过苹果认证允许的。

但是,一个新的问题来了,如果我们的app还处于开发中,还没有上传到appStore,该怎么安装到iphone手机上呢?这就需要用到开发者证书在中间做一个过渡作用。

证书类型

常用的开发者证书分为两种,一种是个人开发者证书,一种是企业开发者证书。其中,我们常见的有两种模式:

In-House:企业内部分发,可以直接的安装ipa包(一般是将包上传到服务端,生成链接,点击链接可以下载)。不过最新的ios系统,需要在【通用—关于本机—证书信任设置】中对企业证书进行信任。

Ad-Hoc:相当于是企业分发的限制版,限制100个设备安装,需要提前在苹果后台配置iphone设备的设备号(可通过第三方工具或者访问蒲公英查询)。

需要注意的是由企业证书签名的包,是不能上传到App Store的,因此需要根据自己公司的情况申请不同的开发者证书。

原理介绍

上面其实已经提到,证书的工作原理是通过非对称加密,从网上找了一幅图,很好的介绍了这个过程:

上图对应的步骤如下:

在mac电脑上申请一对公私钥,图中是公钥M和私钥M。

对于苹果的证书来说,跟App Store工作原理一样,在苹果后台服务器放置了私钥A,在苹果设备上存放了对应的公钥A。

将公钥M上传到苹果后台,用私钥A进行签名,得到包含公钥M及其签名。同时还有一个Provision profile(大家常说的pp文件)文件(其中包含了AppID、设备列表、App可使用的权限),将证书文件下载到本地mac。

在开发app时,使用本地的私钥M对app进行签名,连同上面的pp文件一起被打包到app中。

在安装app时,ios系统获取证书,通过内置的公钥A,去验证app内的证书是正确的。如果能验证通过,则可以将App内的证书数据取出来,使用公钥M验证App的签名是否正确,验证安装app的设备ID是否存在设备列表中等。

上面的步骤,大致描述了苹果开发者证书的工作原理,如果你没太理解也没关系。可以结合着上图多看几遍。

另外,这里还有个知识点,在mac电脑申请的公钥和私钥M只能在申请的电脑使用,怎么让其他伙伴也能正常使用呢?可以将私钥M导出成.p12文件,其他Mac电脑导入私钥M,就可以正常使用了。

IOS打包

首先打包之前,需要清理工程(workspace和scheme参数的值需要拿到ios代码才能查看):

$ xcodebuild clean -workspace xxxx.xcworkspace -scheme xxxx

其次,如果你想要ios包的构建号是自动递增的,可以使用agvtool这个工具:

$ agvtool next-version -all

接着,就可以开始archive包(对Target进行编译、归档,生成.xcarchive)。

$ xcodebuild -workspace xxxx.xcworkspace -scheme xxxx -configuration Debug archive -archivePath xxxxPath/xxxxx.xcarchive

最后,就是将归档文件导出,生成不同渠道的ipa包:

$ xcodebuild -exportArchive -archivePath build/$SCHEME_NAME.xcarchive -exportPath build -exportOptionsPlist $EXPORT_OPTIONS_PLIST

这里需要指定一个exportOptionsPlist,是对导出ipa的配置,我这里写的比较简单,格式如下:

compileBitcode

destination

export

method

development

signingStyle

automatic

stripSwiftSymbols

teamID

xxxxxxxx

thinning

<none>

如果你觉得使用命令行的方式相对麻烦的话,可以考虑使用打包工具fastlane(后面我再专门写文章介绍)。

发送消息通知

企业微信中可以创建一个群机器人,然后通过webhook来进行消息通知。企业微信提供了详细的配置方式,可以参考:企业机器人配置。其本质上就是发送了一个请求:

curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693axxx6-7aoc-4bc4-97a0-0ec2sifa5aaa' \

-H 'Content-Type: application/json' \

-d '

{

"msgtype": "text",

"text": {

"content": "hello world"

}

}'

我们只需要将key替换成我们创建机器人的key即可。

整合之后的.gitlab-ci.yml配置文件

最后贴一个我在项目中使用的配置文件,如下所示:

variables:

CONFIGURATION: "Debug"

WORKSPACE: "xxxx.xcworkspace"

SCHEME_NAME: "xxxx"

EXPORT_MAIN_DIRECTORY: "build"

EXPORT_OPTIONS_PLIST: "ExportOptions-dev.plist"

CODE_SIGN_IDENTITY: "xxxxxx"

PROVISIONING_PROFILE: "xxxxx"

LANG: "en_US.UTF-8"

stages:

- makedir

- archive

- ipa

- upload

- notify

# 创建对应目录

dir_job:

stage: makedir

script:

- mkdir $EXPORT_MAIN_DIRECTORY

- EXPORT_MAIN_DIRECTORY=$EXPORT_MAIN_DIRECTORY/$(date "+%Y%m%d%H%M%S")

- echo $EXPORT_MAIN_DIRECTORY

- mkdir $EXPORT_MAIN_DIRECTORY

tags:

- ios

# 构建archive

archive_job:

stage: archive

script:

- agvtool next-version -all # 更新构建号,版本号之后再更新

- xcodebuild clean -workspace $WORKSPACE -scheme $SCHEME_NAME

- xcodebuild -workspace $WORKSPACE -scheme $SCHEME_NAME -configuration Debug archive -archivePath $EXPORT_MAIN_DIRECTORY/$SCHEME_NAME.xcarchive

artifacts:

expire_in: '2 day'

name: "下载xcarchive,保留2天"

paths:

- $EXPORT_MAIN_DIRECTORY/$SCHEME_NAME.xcarchive

tags:

- ios

# 导出ipa

ipa_job:

stage: ipa

script:

- echo 'export ipa'

- xcodebuild -exportArchive -archivePath $EXPORT_MAIN_DIRECTORY/$SCHEME_NAME.xcarchive -exportPath $EXPORT_MAIN_DIRECTORY -exportOptionsPlist $EXPORT_OPTIONS_PLIST

artifacts:

expire_in: '5 day'

name: "下载ipa,保留5天"

paths:

- $EXPORT_MAIN_DIRECTORY/$SCHEME_NAME.ipa

only:

- qa

tags:

- ios

# 上传ipa

upload_job:

stage: upload

script:

- curl -H "Authorization:Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjp7Il9pZCI6IjVlOTE4Yzc5MmMzZGQ0MDAxZTRiOGY1YiIsInVzZXJuYW1lIjoic3VodWNoZW4ddiLCJlbWFdddpbCI6InN1aHVjaGVuQHFxLmNvbSJ9LCJleHAiOjQ3NDAxOTcyODgsImlhdCI6MTU4NjU5NzI4OH0.5UUkM4lJddYrnvXvHaNNJIY_j5OsBQmLw0mBUrXG3d9E4" -F "file=@$EXPORT_MAIN_DIRECTORY/$SCHEME_NAME.ipa" http://上传包地址/api/apps/5e916b9eac2363001dd7554a/upload

only:

- qa

tags:

- ios

# 构建失败时的通知消息

notifyFailWeChat:

stage: notify

script:

- curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=26b07c1b-03ea-49da-afc7-f68a359f2a52' -H 'Content-Type:application/json' -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"ios项目构建结果:失败\n>本次构建由:$GITLAB_USER_NAME 触发\n>项目名称:$CI_PROJECT_NAME\n>提交号:$CI_COMMIT_SHA\n>提交日志:$CI_COMMIT_MESSAGE\n>构建分支:$CI_COMMIT_BRANCH\n>流水线地址:[$CI_PIPELINE_URL]($CI_PIPELINE_URL)\"}}"

tags:

- ios

only:

- qa

when: on_failure

# 构建成功时的通知消息

notifySuccessWeChat:

stage: notify

script:

- curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=26b07c1b-03ea-49da-afc7-f68a359f2a52' -H 'Content-Type:application/json' -d "{\"msgtype\":\"markdown\",\"markdown\":{\"content\":\"ios项目构建结果:成功\n>请前往发布平台下载体验:[下载地址](http://app下载地址)\n>本次构建由:$GITLAB_USER_NAME 触发\n>项目名称:$CI_PROJECT_NAME\n>提交号:$CI_COMMIT_SHA\n>提交日志:$CI_COMMIT_MESSAGE\n>构建分支:$CI_COMMIT_BRANCH\n>流水线地址:[$CI_PIPELINE_URL]($CI_PIPELINE_URL)\"}}"

tags:

- ios

only:

- qa

when: on_success

总结

如果你们公司目前还没搞起来Jenkins,我推荐尝试用gitlab实现ci/cd流水线,因为可以减少很多配置和插件的安装。相对来说实现成本更低一些,从目前我用gitlab ci的情况来看,基本上Jenkins能实现的gitlab ci都能满足。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/440635.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2020计算机网络基础与应用,2020年国防科技大学硕士研究生考试F1107计算机网络基础考试大纲...

全国各省市院校2020年硕士研究生考试大纲汇总(持续更新中)》》》2020年全国硕士研究生入学考试命题标准大纲已于7月8日正式公布&#xff0c;接下来全国各研招院校将陆续发布2020考研专业课大纲。以下是中公考研小编整理的“2020年国防科技大学硕士研究生考试F1107计算机网络基础…

【ZOJ - 3212 】K-Nice (构造)

题干&#xff1a; This is a super simple problem. The description is simple, the solution is simple. If you believe so, just read it on. Or if you dont, just pretend that you cant see this one. We say an element is inside a matrix if it has four neighbori…

chrome jsp 显示不正常_JSP程序在chrome下不兼容的问题!

比如&#xff0c;我这里有个&#xff1a;">比如&#xff0c;我这里有个&#xff1a;οnclick"javascript:onChooseLongCode()" value"...">在下面的JS动作中&#xff1a;function onChooseLongCode(){var qryFldVal qryFld.value;//要用 var q…

人脑意识转入量子计算机,人脑产生意识:可能是因为量子纠缠

图片来源&#xff1a;quanta magazine一提到“量子意识”这个词语&#xff0c;大多数物理学家都会选择避而不谈&#xff0c;因为这个词语听起来好像有点“民科”&#xff0c;甚至让人联想宗教或者玄学。不过出人意料的是&#xff0c;量子效应可能真的在人类的认知过程中起到了一…

【ZOJ - 1163】The Staircases(dp)

题干&#xff1a; One curious child has a set of N little bricks. From these bricks he builds different staircases. Staircase consists of steps of different sizes in a strictly descending order. It is not allowed for staircase to have steps equal sizes. Ev…

函授本科统考计算机考试时间,函授2006级计算机、机电本科第一学期考试时间安排.doc...

函授2006级计算机、机电本科第一学期考试时间安排.doc函授2006级计算机、机电本科第一学期考试时间安排答疑时间9月16日下午2&#xff1a;30&#xff0d;3&#xff1a;309月16日下午3&#xff1a;30&#xff0d;4&#xff1a;309月16日下午4&#xff1a;30&#xff0d;5&#x…

的级联选择_级联接收机的计算及Y因子噪声因子测量法

对于RF系统工程师来说&#xff0c;计算噪声系数预算对预测产品性能至关重要。一、级联接收机的计算这部分讨论噪声系数的一般概念&#xff0c;以及产品定义和电路设计者如何利用噪声系数表示噪声性能要求。噪声系数也用于预测接收机系统的总体灵敏度。也介绍级联接收机的噪声系…

*【PAT天梯】分而治之(并查集,暴力)

题干&#xff1a; L2-1 分而治之 &#xff08;25 分&#xff09; 分而治之&#xff0c;各个击破是兵家常用的策略之一。在战争中&#xff0c;我们希望首先攻下敌方的部分城市&#xff0c;使其剩余的城市变成孤立无援&#xff0c;然后再分头各个击破。为此参谋部提供了若干打击…

免费测试英语发音的软件,2020英语音标免费版

2020英语音标免费版是一款安卓手机英语音标内容学习软件&#xff0c;在这里汇集了英语音标相关内容学习&#xff0c;包含了音标、发音等内容学习&#xff0c;能够进行对比练习&#xff0c;不断对比&#xff0c;让发音更标准&#xff0c;拥有详细的发音知识可以学习&#xff0c;…

ajax后台重定向会返回什么_跳转,AJAX返回和重定向

## 页面跳转操作完成后,成功或失败页面跳转可以使用 控制器基类的success,error方法:#### success方法php/*** 操作成功跳转的快捷方法* access protected* param mixed $msg 提示信息* param string $url 跳转的URL地址* param mixed $data 返回的数据* param integer $wait 跳…

【PAT天梯】【L2-2 小字辈(左子右兄加强版)】(树,水题)

题干&#xff1a; L2-2 小字辈&#xff08;左子右兄加强版&#xff09; &#xff08;25 分&#xff09; 本题给定一个庞大家族的家谱&#xff0c;要请你给出最小一辈的名单。 需要注意的是&#xff0c;家族成员的输入方式&#xff0c;是按照“Left-child Right-sibling”&…

W10的服务器正在运行,win10开机提示服务器正在运行中的解决教程

今天小编给大家分享的是win10开机提示服务器正在运行中的解决教程。最近有win10的用户反映&#xff0c;在开机的时候莫名的就出现了个“服务器正在运行中”的气泡提示&#xff0c;出现此问题困扰的用户&#xff0c;请来看看下面的解决教程吧。使用win10系统过程中&#xff0c;在…

host ntrip 千寻rtk_最新测量干货:南方银河1和银河1Plus RTK设备连接千寻cors账号的设置方法...

无论刚接触网络RTK的测量员是想要进行华测RTK连接千寻cors账号的操作&#xff0c;还是中海达RTK连接千寻cors账号&#xff0c;亦或者司南RTK连接千寻cors账号的操作&#xff0c;我们在进行cors账号的连接操作之前都应该对操作的RTK设备有一个了解&#xff0c;所以今天我们在给大…

【CodeForces - 1084D】The Fair Nut and the Best Path (树形dp)

题干&#xff1a; The Fair Nut is going to travel to the Tree Country, in which there are nn cities. Most of the land of this country is covered by forest. Furthermore, the local road system forms a tree (connected graph without cycles). Nut wants to rent …

消息测试服务器,测试统一消息服务器功能

测试统一消息服务器功能08/07/2014本文内容适用于&#xff1a; Exchange Server 2007 SP1, Exchange Server 2007上一次修改主题&#xff1a; 2007-08-09在运行 Microsoft Exchange Server 2007 的计算机上安装统一消息服务器角色并启用和配置统一消息 (UM) 之后&#xff0c;可…

python不同曲线设置标签_【图像分类】基于Pascal VOC2012增强数据的多标签图像分类实战...

接着上一次的多标签分类综述&#xff0c;本文主要以Pascal VOC2012增强数据集进行多标签图像分类训练&#xff0c;详细介绍增强数据集制作、训练以及指标计算过程&#xff0c;并通过代码进行详细阐述&#xff0c;希望能为大家提供一定的帮助&#xff01;作者&编辑 | 郭冰洋…

【HDU - 5934】Bomb (强连通分量Tarjan + 缩点)

题干&#xff1a; There are NN bombs needing exploding. Each bomb has three attributes: exploding radius riri, position (xi,yi)(xi,yi) and lighting-cost cici which means you need to pay cici cost making it explode. If a un-lighting bomb is in or on the b…

css光线,css 射线实现方法

四种浏览器对 clientHeight、offsetHeight、scrollHeight、clientWidth、offsetWidth 和 scrollWidth 的解释差异网页可见区域宽:document.body.clientWidth 网页可见区域高:document.body.clientHeight 网页可见区域宽:document.body.offsetWid ...黄聪&#xff1a;说说JSON和…

表字段注释放在哪_橱柜台面6种材质优缺点大解剖,我来测评,告诉你哪一种适合你!...

很多人装修厨房&#xff0c;只知道橱柜要好用&#xff0c;厨房才好用。但在做橱柜的时候&#xff0c;除了橱柜的选择&#xff0c;很多装修新手还会遇到一些其他疑问&#xff1a;① 橱柜的台面用什么材质的比较好&#xff1f;② 台面的挡水条到底要不要做&#xff1f;③ 橱柜台面…

【Kattis - triangle 】Sierpiński Circumference(数学,求位数,取对数或Java)

题干&#xff1a; Polish mathematician Wacław Sierpiński (1882-1969) described the 2D geometric figure known as the Sierpiński triangle as part of his work on set theory in 1915. The triangle, which is really an infinite collection of points, can be con…