热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

iOSJenkins自动化打包集成

  前言:自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给机器去做。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作

 

前言:自动化打包根本目的是为了节约时间,把重复且无技术含量的事情交给机器去做。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作。搭建Jenkins前,请确认mac系统上已经搭建好了Java环境

一、Jenkins安装

打开Jenkins官网下载最新的pkg安装包(选择Mac OS)。安装完成之后,Safari可能会自动打开,如果没有自动打开,打开浏览器,输入http://localhost:8080

 

 

这时候可能出现这个页面,这个问题的原因就是Java环境有问题,需要重装Java环境。下载Java的JDK

一般会有2个版本可选,选一个下载即可,下载完安装后打开终端,cd进入到jenkins.war包所在目录,执行以下命令:

$ java -jar jenkins.war --httpPort=8080

httpPort指的就是Jenkins所使用的http端口,这里指定8080(默认的就是这个),可根据具体情况来修改。待Jenkins启动后,在浏览器页面输入以下地址:http://localhost:8080这样就可以打开Jenkins管理页面了。

如果已经安装完java环境,则显示:

输入终端命令:

hujintaodeMacBook-Pro:~ MengYu$ sudo su

使用vim编辑,并复制密码 0b4e9c1d8524401182338a4d63612ae3 

Password:
sh-3.2# vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword
[
1]+ Stopped(SIGTSTP) vim /Users/Shared/Jenkins/Home/secrets/initialAdminPassword

创建你的账号信息

安装成功~

二、拷贝文件

2.1

/Users/用户名/Library的MobileDevice 文件夹拷贝到 /Users/Shared/Jenkins/Library

注意:是将MobileDevice这个文件夹拷贝过去,而不是MobileDevice里的文件,/Users/Shared/Jenkins/Library 目录下是没有MobileDevice这个文件夹,所以先创建一个MobileDevice文件夹

在终端输入:

sudo mkdir /Users/Shared/Jenkins/Library/MobileDevice
sudo cp
-r /Users/MengYu/Library/MobileDevice/ /Users/Shared/Jenkins/Library/MobileDevice/

注意:曾遇到/Users/xxx/Library/下没有MobileDevice文件夹,原来是新机上没有安装Xcode。

 

2.2

/Users/用户名/Library/Keychains/下的login.keychainlogin.keychain-db这两个文件拷贝到/Users/Shared/Jenkins/Library/Keychains文件夹下面

注意:Mac OS 10.12以下的没有login.keychain-db这个文件,只需要拷贝login.keychain文件

在终端输入:

cd /Users/Shared/Jenkins/Library/
sudo mkdir Keychains
sudo cp
/Users/MengYu/Library/Keychains/login.keychain ./Keychains/
sudo cp
/Users/xxx/Library/Keychains/login.keychain-db ./Keychains/

再将这个login.keychain拷贝到桌面上

在终端输入

sudo cp /Users/MengYu/Library/Keychains/login.keychain ~/Desktop/

注意:如果/Users/xxx/Library/Keychains/目录下没有login.keychain这个文件,就复制login.keychain-db文件到指定目录,然后将复制在桌面上的该文件改后缀为.keychain。

 

三、修改钥匙串权限、~/Library权限以及电脑用户管理权限

3.1

打开钥匙串,找到相应的证书

右键密钥显示简介,在访问控制那一项里勾选允许所有应用程序访问此项目,并存储更改。

3.2

找到Library资源库文件夹,显示简介,设置共享与访问权限,everyone读与写都可以

3.3

进入mac系统偏好设置 — 用户与群组 — 其他用户 — jenkins ,勾选允许用户管理这台电脑,并右键选择高级选项,将名字改为jenkins

 

四、Jenkins插件及系统设置(Keychains和证书配置)

4.1进入管理插件,在可选插件里所有关键字,下载安装插件Keychains and Provisioning ProfilesManagement和 Xcode integration

点击系统管理,并 添加插件 Keychains(钥匙串插件)

4.2 login.keychain和证书配置

 

如何导出Xcode自动生成的Provisioning Profiles文件

1.打开终端输入下列命令,回车,进入到Xcode管理的.mobileprovision文件目录

#whoami 命令读取系统用户名
cd /Users/`whoami`/Library/MobileDevice/Provisioning\ Profiles/

2.通过BundleId 递归查找.mobileprovision文件,两个:一个development ,一个distribution版本

-r递归查找,因为.mobileprovision是一个二进制文件,不加会报错
-l只显示文件名

grep -r -l com.tencent.xin .

3.如何区分dev和dis

继续输入下面的代码,会打开Finder并选中文件。选中这个文件后,按空格键,会生成mobileprovision文件的预览窗口,里面会显示对应的信息,仔细找一下就能区分了

open -R ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

4.显示详细的预览信息

security cms -D -i ./5b857e06-f2ed-4256-88a3-0d7847e34371.mobileprovision

打印结果如下,是一个XML文件,如果有ProvisionedDevices字段(设备列表),说明是dev版本的,dis版本的没有这个字段。

xml version="1.0" encoding="UTF-8"?>
DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version&#61;"1.0">
<dict><key>AppIDNamekey><string>aaastring><key>ApplicationIdentifierPrefixkey><array><string>X9ASDF2345string>array><key>CreationDatekey><date>2018-02-03T14:19:45Zdate><key>Platformkey><array><string>iOSstring>array><key>DeveloperCertificateskey><array><data>MIIFmjCCBIKgAwIBA..省略
array><key>Entitlementskey><dict><key>keychain-access-groupskey><array><string>X9ASDF2345.*string> array><key>get-task-allowkey><true/><key>application-identifierkey><string>X9ASDF2345.com.xxxx.aaastring><key>com.apple.developer.team-identifierkey><string>X9ASDF2345string>dict><key>ExpirationDatekey><date>2019-02-03T14:19:45Zdate><key>Namekey><string>iOS Team Provisioning Profile: com.xxxx.aaastring><key>ProvisionedDeviceskey><array><string>6126203adse3dbab4012374e5c01e2a497b9aa66string>array><key>TeamIdentifierkey><array><string>X9SABCD345string>array><key>TeamNamekey><string>xiaomingstring><key>TimeToLivekey><integer>365integer><key>UUIDkey><string>5b857e06-f2ed-4256-88a3-0d7847e34371string><key>Versionkey><integer>1integer>
dict>

 

选取拷 在桌上login.keychain以及项 相对应的Provisioning Profile 并upload, 可以导入多个, 且应该是/Users/Shared/Jenkins/Library/MobileDevice/Provisioning Profiles目录下的provisioningProfile.

注意&#xff1a;开发证书和provision profile 一定要对应正确&#xff0c;不然命令行打包会认证不了而失败

 

password 一定要填写正确的钥匙串的密码

Code Signing Identity 是从钥匙 找到相应的证书&#xff0c;然后显示简介复制 来&#xff0c;这 Identities 少要填 两项&#xff0c;是因为这 放 个的话后 的设置 Code Signing Identity 能 动对应上。

 

Provisioning Profiles Directory Path 这 项 填写/Users/用户名/Library/ MobileDevice/Provisioning Profiles

注意:路径里Provisioning Profiles是Provisioning\ Profiles

此外&#xff0c;Xcode工程必须手动配置证书&#xff0c;并取消自动配置证书

 

五、开始构建打包任务

5.1点击新建任务&#xff0c;填写名字&#xff0c;选择自由风格&#xff0c;点击确定进行创建

5.2添加源码管理工具和SVN仓库地址&#xff0c;这里使用Subversion 进行管理&#xff0c;仓库地址去掉&#64;和昵称-xxx&#64;

添加构建者并且Add设置为Jenkins

添加账号&#xff1a;

 

5.3.构建触发器配置

配置为每五分钟自动打包一次

 

5.4构建环境勾选Keychains和Mobile Provisioning Profiles.

5.5增加构建步骤&#xff0c;执行Shell

Shell脚本如下:

a.自动配置证书的Shell脚本

#——————————————自动证书 ————————————————
#
工程名
APP_NAME&#61;"TEST"
# 证书
CODE_SIGN_DISTRIBUTION&#61;"iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
# info.plist路径
project_infoplist_path&#61;"./${APP_NAME}/Info.plist"#取版本号
bundleShortVersion&#61;$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")#取build值
bundleVersion&#61;$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")DATE&#61;"$(date &#43;%Y%m%d)"
IPANAME
&#61;"${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"#要上传的ipa文件路径
IPA_PATH&#61;"$HOME/Desktop/iPAs/${IPANAME}"
echo
${IPA_PATH}
echo
"${IPA_PATH}">> text.txt# 下面2行是没有Cocopods的用法
echo "&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;clean&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;"
xcodebuild
-target "${APP_NAME}" -configuration &#39;Release&#39; cleanecho "&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;build&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;"
xcodebuild
-target "${APP_NAME}" -sdk iphoneos -configuration &#39;Release&#39; SYMROOT&#61;&#39;$(PWD)&#39;xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"# 设置上传到 Fir
FIRTOKEN&#61;"6815935ea0c92e69d30793d7f81a26f2"fir l ${FIRTOKEN}
fir p
${IPA_PATH}

 

b.手动配置证书的Shell脚本

# 工程名---- 手动证书
APP_NAME&#61;"TEST"
# 证书
CODE_SIGN_DISTRIBUTION&#61;"iPhone Distribution: ZheXinIT (MZJ4H7VF63)"
# info.plist路径
project_infoplist_path&#61;"./${APP_NAME}/Info.plist"#取版本号
bundleShortVersion&#61;$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")#取build值
bundleVersion&#61;$(/usr/libexec/PlistBuddy -c "print CFBundleVersion" "${project_infoplist_path}")DATE&#61;"$(date &#43;%Y%m%d)"
IPANAME
&#61;"${APP_NAME}_V${bundleShortVersion}_${DATE}.ipa"#要上传的ipa文件路径
IPA_PATH&#61;"$HOME/Desktop/iPAs/${IPANAME}"
echo
${IPA_PATH}
echo
"${IPA_PATH}">> text.txt# 下面2行是没有Cocopods的用法
echo "&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;clean&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;&#61;"
xcodebuild
-target "${APP_NAME}" -configuration &#39;Release&#39; cleanecho "&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;build&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;&#43;"
xcodebuild
-target "${APP_NAME}" -sdk iphoneos -configuration &#39;Release&#39; CODE_SIGN_IDENTITY&#61;"${CODE_SIGN_DISTRIBUTION}" SYMROOT&#61;&#39;$(PWD)&#39;xcrun -sdk iphoneos PackageApplication "./Release-iphoneos/${APP_NAME}.app" -o ~/Desktop/iPAs/"${IPANAME}"# 设置上传到 Fir
FIRTOKEN&#61;"6815935ea0c92e69d30793d7f81a26f2"fir l ${FIRTOKEN}
fir p
${IPA_PATH}

 

5.6构建后步骤

可以发送邮件、上传蒲公英等操作

然后保存&#xff0c;应用。

 

转:https://www.cnblogs.com/StevenHuSir/p/iOS_Jenkins_Package.html




推荐阅读
  • 网络安全是一个非常重要的课题,基本上你运行的服务后台越多,你就可能打开更多的安全漏洞.如果配置的恰当的话,Linux本身是非常安全可靠的,假使在Linux系统中有某个安全缺陷,由于Linu ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • iOS Swift中如何实现自动登录?
    本文介绍了在iOS Swift中如何实现自动登录的方法,包括使用故事板、SWRevealViewController等技术,以及解决用户注销后重新登录自动跳转到主页的问题。 ... [详细]
  • Annotation的大材小用
    为什么80%的码农都做不了架构师?最近在开发一些通用的excel数据导入的功能,由于涉及到导入的模块很多,所以开发了一个比较通用的e ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • Xcode离线安装帮助文档1.在线查看帮助文件:Xcode下查看帮助文件,菜单Help-DeveloperDocumentation在右上角搜索框中即可检索,但速度很慢 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了在Windows 8上安装gvim中插件时出现的错误加载问题。作者将EasyMotion插件放在了正确的位置,但加载时却出现了错误。作者提供了下载链接和之前放置插件的位置,并列出了出现的错误信息。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • 本文详细介绍了在Linux虚拟化部署中进行VLAN配置的方法。首先要确认Linux系统内核是否已经支持VLAN功能,然后配置物理网卡、子网卡和虚拟VLAN网卡的关系。接着介绍了在Linux配置VLAN Trunk的步骤,包括将物理网卡添加到VLAN、检查添加的VLAN虚拟网卡信息以及重启网络服务等。最后,通过验证连通性来确认配置是否成功。 ... [详细]
  • 在真实开发中,因为需求是不断变化的,说不定什么时候就需要往模型里添加新的字段,添加新的模型,甚至是大规模的重构; ... [详细]
  • PHP连接MySQL的2种方法小结以及防止乱码【PHP】
    后端开发|php教程PHP,MySQL,乱码后端开发-php教程PHP的MySQL配置报错信息:ClassmysqlinotfoundinAnswer:1.在confphp.ini ... [详细]
  • k8s进阶之搭建私有镜像仓库
    企业级私有镜像仓 ... [详细]
author-avatar
小熊宝宝公寓
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有