ぴちてぶろぐ

ゲーム開発会社勤務のUnityエンジニアの情報発信場!!

【Jenkins】ipaを自動生成する③(mac/Jenkins/Unity/GitHub/DeployGate)

概要

Jenkinsビルド→ipa作成までを自動で行えるようにする
今回は、Xcodeプロジェクト→ipa作成まで
Jenkinsのセットアップ~Unityビルドは前回までの記事を参照
peachtea-tom.hatenablog.com
peachtea-tom.hatenablog.com

環境

Unity2019.3.13f1
Xcode 11.4.1

ExportOptions.plist作成

<?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="1.0">
<dict>
	<key>compileBitcode</key>
	<false/>
	<key>destination</key>
	<string>export</string>
	<key>method</key>
	<string>ad-hoc</string>
	<key>provisioningProfiles</key>
	<dict>
		<key>アプリのBundleID</key>
		<string>プロビジョニングファイルの名前</string>
	</dict>
	<key>signingCertificate</key>
	<string>証明書名</string>
	<key>signingStyle</key>
	<string>manual</string>
	<key>stripSwiftSymbols</key>
	<true/>
	<key>teamID</key>
	<string>チームID</string>
	<key>thinning</key>
	<string>&lt;none&gt;</string>
</dict>
</plist>

※バンドルIDやプロビジョニングの名前は適宜変更を。
BuildSettings/iOS/DevelopmentExportOptions.plist
に保存しておく。

Xcodeビルド(ipa生成)

前回作成したbuild.shに下記を追加します。

UNITY_APP_PATH="/Applications/Unity/Hub/Editor/2019.3.13f1/Unity.app/Contents/MacOS/Unity"
PROJECT_PATH=$WORKSPACE
UNITY_EDITOR_LOG_PATH=$WORKSPACE/build.log

$UNITY_APP_PATH -batchmode -username ここにユーザ名 -password ここにパスワード -quit -logFile $UNITY_EDITOR_LOG_PATH -projectPath $PROJECT_PATH -executeMethod BuildROM.BatchBuild 

cat $UNITY_EDITOR_LOG_PATH

#------ここからが追加分------------------
# Xcode Projectのパス
XCODE_PROJECT=$WORKSPACE/Product/Unity-iPhone.xcodeproj
# アーカイブ先
ARCHIVE_PATH=$WORKSPACE/Product/rom.xcarchive
# ipa配置場所
IPA_PATH=$WORKSPACE/Product/
# plistのパス
XCODE_EXPORT_OPTION_PLIST_PATH=${WORKSPACE}/BuildSettings/iOS/DevelopmentExportOptions.plist

# キーチェーンをアンロックしておく
security -v unlock-keychain -p MACのパスワード

#clean
xcodebuild clean -project $XCODE_PROJECT -target Unity-iPhone -configuration Release

#archive
xcodebuild -project $XCODE_PROJECT -scheme Unity-iPhone archive -archivePath $ARCHIVE_PATH -configuration Release

#export
xcodebuild -exportArchive -archivePath $ARCHIVE_PATH -exportPath $IPA_PATH -exportOptionsPlist $XCODE_EXPORT_OPTION_PLIST_PATH

以上で、Xcodeプロジェクトからipa生成までが可能になります。

補足

cocoapodsを使用する場合は、xcodeprojではなくxcworkspaceを使うことになります。
Facebook SDKを導入する場合等はこちらのケースになります。
xcworkspaceを使用する場合、build.shを次のように変更する必要があります

# Unity-iPhone.xcodeproj => Unity-iPhone.xcworkspace
XCODE_PROJECT=$WORKSPACE/Product/Unity-iPhone.xcworkspace
# -project  => -workspace
xcodebuild clean -workspace $XCODE_PROJECT -target Unity-iPhone -configuration Release
# -project  => -workspace
xcodebuild -workspace $XCODE_PROJECT -scheme Unity-iPhone archive -archivePath $ARCHIVE_PATH -configuration Release

おまけ(DeployGate)

①~③までお付き合いありがとうございました。
これまでのことを一通り行うことで、Jenkinsビルド→ipa生成までが出来るようになります。
最後におまけで、DeployGateにアップするコマンドを記載しておきます。

curl \
  -H "Authorization: token アプリトークン" \
  -F "file=@${WORKSPACE}/Product/Unity-iPhone.ipa" \
  -F "message=jenkins upload" \
  "https://deploygate.com/api/users/ユーザ名/apps"

アプリトークンはDeployGateのアカウントページから確認してください。
f:id:peachtea_tom:20200615005638p:plain
こちらのシェルスクリプトをbuild.shの最後に追加 or Jenkinsのシェル実行に追加することで
ビルドされたipaをDeployGateにアップするまでを自動で行うことが出来ます。
f:id:peachtea_tom:20200615005909p:plain

ここまで設定しておけば、Jenkinsのビルドを押すだけでDeployGateにアップロードまでが自動化されるので端末確認までが非常に楽になると思います。