Unity3d:使用Jenkins自动编译打包IOS(打包Ad-
2018-01-26 本文已影响681人
Alisallon
系列传送门
Android:
Unity3d:命令行打包Android
IOS:
Unity3d:命令行编译IOS
IOS:使用shell命令打包并上传Itunes
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编译结束###########