Unity3d:使用Jenkins自动编译打包IOS(打包Ad-hoc,上传itunes)

系列传送门

IOS:
IOS:使用shell命令打包并上传Itunes
Unity3d:
Unity3d:Canvas适配屏幕分辨率与锚点(Anchors与Pivot)
Unity3d:在屏幕边缘显示其他玩家方位
Unity3d:命令行打包Android
Unity3d:命令行编译IOS
Unity3d:使用Jenkins自动编译打包IOS(只能打包Development)
Unity3d:使用Jenkins自动编译打包IOS(打包Ad-hoc,上传itunes)
结合我的这一篇IOS:使用shell命令打包并上传Itunes的IOS打包命令,新增了Unity编译命令。
如果有些指令或参数不懂,可以去IOS:使用shell命令打包并上传Itunes里翻看。

打包并上传itunes用的脚本:

#!/bin/sh
###########配置开始###########
#设置当前系统登陆的用户和登陆密码,用于解锁Keychain
LOGIN_USER_NAME=当前系统登陆的用户名
UNLOCK_KEYCHAINS_PW=当前系统登陆用的密码
#设置Apple开发者证书名称
#(“钥匙串->上部‘登陆’选项->下部‘证书’选项->双击用到的证书->证书信息里的‘常用名称’字段”)
CODE_SIGN_IDENTITY="iPhone Distribution: XXXXXXX (XXXXXX)"
#设置开发者Team ID
#(“钥匙串->上部‘登陆’选项->下部‘证书’选项->双击用到的证书->证书信息里的‘组织单位’字段”)
DEVELOPMENT_TEAM="XXXXXXXX"
#设置当前App开发测试用或发布用的描述文件UUID
#(开发者后台->Provisioning Profiles->选中一个描述文件(.mobileprovision)并Download)
#使用“security cms -D -i XXX.mobileprovision”命令查看该描述文件的UUID
#双击(.mobileprovision)文件,即可把该证书导入~/Library/MobileDevice/Provisioning Profiles目录中
PROVISIONING_PROFILE="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
#设置要打包的项目路径
IOS_PROJECT_PATH="/Users/${LOGIN_USER_NAME}/Documents/JenkinsProjects/XXXXXXX/IOSProjectOutput"
#设置ipa文件的输出路径
EXPORT_PATH="/Users/${LOGIN_USER_NAME}/Documents/JenkinsProjects/XXXXXXX/IOSOutput"
#设置打包ipa文件的时用的配置文件(文件内指定了打包用的证书和发布方式:ad-hoc或app-store)
EXPORT_OPTIONS_PLIST_PATH="/Users/${LOGIN_USER_NAME}/Documents/JenkinsBuild/export-options.plist"
#打包完成后默认的ipa包名
OLD_IPA_NAME="${EXPORT_PATH}/Unity-iPhone.ipa"
#新的ipa包名 mv ${OLD_IPA_NAME} ${IPA_PATH},
#里面用${BUILD_TIMESTAMP}和${BUILD_ID}参数,是因为用的Jenkins执行改shell文件的
#${BUILD_ID}参数是Jenkins自带的
#${BUILD_TIMESTAMP}参数需要Jenkins安装一个Zentimestamp plugin
IPA_PATH="${EXPORT_PATH}/XXXXXXX_${BUILD_TIMESTAMP}_${BUILD_ID}.ipa"
#开发者Apple账号
APP_ID="XXXX@XXXX.com"
#开发者Apple账号的密码
#如果开启了双重认证,需要在开发者Apple账号页面生成一个专用密码
APP_PW="XXXX"

#设置Unity3d项目目录
UNITY3D_PROJECT_PATH="/Users/${LOGIN_USER_NAME}/Documents/JenkinsProjects/XXXXXXX/Unity3d_Project_IOS"
#设置Unity3d执行的编译方法
UNITY3D_BUILD_METHOD="ProjectBuildEditor.JenkinsBuildIOSClient"
#设置Unity3d exe文件路径
UNITY3D_EXE_PATH="/Applications/Unity/Unity.app/Contents/MacOS/Unity"
#Unity3d项目打包后生成的IOS项目路径
UNITY3D_OUTPUT_PATH=${IOS_PROJECT_PATH}
###########配置结束###########

###########Unity3d开始编译###########
rm -rf ${UNITY3D_OUTPUT_PATH}
#执行Unity3d编译指令
#-executeMethod 指定执行的编译方法
#-projectPath 指定Unity3d项目目录
${UNITY3D_EXE_PATH} -quit -batchmode -executeMethod ${UNITY3D_BUILD_METHOD} -projectPath ${UNITY3D_PROJECT_PATH}
###########Unity3d编译结束###########

###########Xcode开始编译###########
#判断EXPORT_PATH路径是否存在
if [ -d "${EXPORT_PATH}" ];then
    rm -rf ${EXPORT_PATH}
fi
mkdir ${EXPORT_PATH}
#
/usr/bin/xcodebuild -version
/usr/bin/agvtool mvers -terse1
/usr/bin/agvtool vers -terse
#获取钥匙串和密码
/usr/bin/security list-keychains -s /Users/${LOGIN_USER_NAME}/Library/Keychains/login.keychain
/usr/bin/security default-keychain -d user -s /Users/${LOGIN_USER_NAME}/Library/Keychains/login.keychain
/usr/bin/security unlock-keychain -p ${UNLOCK_KEYCHAINS_PW} /Users/${LOGIN_USER_NAME}/Library/Keychains/login.keychain
/usr/bin/security show-keychain-info /Users/${LOGIN_USER_NAME}/Library/Keychains/login.keychain
/usr/bin/security find-identity -p codesigning -v
/usr/bin/security find-certificate -a -c ${DEVELOPMENT_TEAM} -Z | grep ^SHA-1
#检测当前项目信息,下面两个命令只能在项目目录下使用
/usr/bin/xcodebuild -showsdks
/usr/bin/xcodebuild -list
#修改project.pbxproj文件,禁止打包时自动签名,这个在Unity3d里可以设置的,如果设置过了,则无需执行该命令
sed -i "" s/'ProvisioningStyle = Automatic;'/'ProvisioningStyle = Manual;'/g Unity-iPhone.xcodeproj/project.pbxproj
#动态修改版本号
#/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString 3.0.0" ${IOS_PROJECT_PATH}/Info.plist
#动态修改版本Code(BUILD_ID),自动上传itunes一定要配置这个
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${BUILD_ID}" ${IOS_PROJECT_PATH}/Info.plist
#生成archive文件,参数说明:
#-workspace:项目名称.xcworkspace(或-project:项目名称.xcodeproj)
#-scheme:通常默认为项目名称
#-configuration:配置(Release,或Debug;未设置时默认为Release)
#-archivePath:archive包保存目录
#CODE_SIGN_IDENTITY:证书(证书名称)
#PROVISIONING_PROFILE:描述文件UUID
#注意:生成archive包时,使用证书,以及描述文件UUID
/usr/bin/xcodebuild clean -scheme Unity-iPhone -sdk "iphoneos11.2" -configuration Release -allowProvisioningUpdates archive -archivePath ${IOS_PROJECT_PATH}/build/Release-iphoneos/Unity-iPhone.xcarchive DEVELOPMENT_TEAM="${DEVELOPMENT_TEAM}" CODE_SIGN_IDENTITY="${CODE_SIGN_IDENTITY}" PROVISIONING_PROFILE="${PROVISIONING_PROFILE}"
#生成ipa包,参数说明:
#-exportFormat:导出包格式为"IPA";
#-archivePath: archive包保存目录;
#-exportPath:ipa包保存目录;
#-exportProvisioningProfile:描述文件(描述文件名称)
#注意:生成ipa包时,使用描述文件(描述文件名称)
/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleVersion" ${IOS_PROJECT_PATH}/build/Release-iphoneos/Unity-iPhone.xcarchive/Info.plist
/usr/libexec/PlistBuddy -c "Print :ApplicationProperties:CFBundleShortVersionString" ${IOS_PROJECT_PATH}/build/Release-iphoneos/Unity-iPhone.xcarchive/Info.plist
/usr/bin/xcodebuild -exportArchive -archivePath ${IOS_PROJECT_PATH}/build/Release-iphoneos/Unity-iPhone.xcarchive -exportPath ${EXPORT_PATH} -exportOptionsPlist "${EXPORT_OPTIONS_PLIST_PATH}"
#重命名ipa包名
mv ${OLD_IPA_NAME} ${IPA_PATH}
#验证ipa包信息
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --validate-app -f ${IPA_PATH} -u ${APP_ID} -p ${APP_PW} --output-format xml
#上传iTunes
/Applications/Xcode.app/Contents/Applications/Application\ Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool --upload-app -f ${IPA_PATH} -u ${APP_ID} -p ${APP_PW} --output-format xml
###########Xcode编译结束###########
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容