プラグインなしで上手くいったのでメモ
個人で使う場合はこれで十分
業務で使う場合はバージョン毎に出力やサーバーへアップロード等必要だな〜
(各種設定ファイル調整も)
使用環境
・Unity2017.0.0f3
前提条件
・手動でipaビルドまでできる環境が揃っていること
・HomeBrewをインストールしていること
・JDKインストール済み
Jenkins構築
Jenkinsインストール
brew install jenkins
起動コマンド
launchctl start homebrew.mxcl.jenkins
終了コマンド
launchctl stop homebrew.mxcl.jenkins
<参考>
・https://qiita.com/makoto_kw/items/cbe93d4ebbc35f3b43fd
シェルコマンド作成、実行
プロジェクトフォルダ階層想定
[ROOT]
LAutoBuildProject(Unityプロジェクトルート、Assetsフォルダあり)
Lbuild_archive(ipaビルド保存先)
LSettingFiles(各種設定ファイル保存先)
LTmp(一時フォルダ)
ファイル用意
・手動時のビルド同様、BuildSettingsに追加されているシーンを含めてビルド
using UnityEditor;
using UnityEngine;
using System.Collections.Generic;
public class BuildClass
{
/// <summary>
/// iOSのビルドを行います
/// </summary>
public static void BuildiOS()
{
string errorMessage = BuildPipeline.BuildPlayer(
GetSceneList().ToArray(),
"[Rootフォルダパス]/XCode",
BuildTarget.iOS,
BuildOptions.None
);
if(!string.IsNullOrEmpty(errorMessage)){
Debug.LogError("[Error!]" + "error");
} else {
Debug.Log("[Success!]");
}
}
private static List<string> GetSceneList() {
List<string> levels = new List<string>();
foreach (EditorBuildSettingsScene scene in EditorBuildSettings.scenes) {
if (scene.enabled) {
levels.Add(scene.path);
}
}
return levels;
}
}
・[Root]/SettingFilesに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>method</key>
<string>app-store</string>
<key>uploadBitcode</key>
<false/>
<key>uploadSymbols</key>
<true/>
</dict>
</plist>
各種ディレクトリパス作成
・必要なPathを設定
# プロジェクトルート buildPathRoot
PROJECT_ROOT_PATH="[ROOT]パス";
# UNITYプロジェクトパス
UNITY_PROJECT_PATH="${PROJECT_ROOT_PATH}/AutoBuildProject"
# IPA出力フォルダ
ARCHIVE_FILE_PATH="${PROJECT_ROOT_PATH}/build_archive";
# IPA出力設定フォルダ
IOS_SETTING_PATH="${PROJECT_ROOT_PATH}/SettingFiles";
# WORKフォルダ
WORK_FOLDER="${PROJECT_ROOT_PATH}/Tmp";
Gitリポジトリ更新
・ローカルを最新に更新(Git連携なしならスキップ)
# ===== Git Pull =====
cd "${UNITY_PROJECT_PATH}"
git pull
Unity-iOSビルド
# ===== Unity IOS Build =====
/Applications/Unity/Unity.app/Contents/MacOS/Unity \
-batchmode \
-quit \
-logFile "${WORK_FOLDER}/build.log" \
-projectPath "${UNITY_PROJECT_PATH}" \
-executeMethod BuildClass.BuildiOS
XCodeビルド
・チームコードはGeneral>Signingに書かれている10桁の文字列
・プロビジョニングファイルを「IOS_SETTING_PATH」のパスへ保存
(ファイル名はAutoDebugSettingで変更したい場合は以下のコードを編集)
# ===== XCode Build =====
# IOS_TEAM_CODE(10桁)
TEAM_CODE="[チームコード]"
# XCode Export Folder Name
XCODE_BUILD_FOLDER="XCode"
cd "${PROJECT_ROOT_PATH}/${XCODE_BUILD_FOLDER}"
builds=()
for file in *; do
builds=("${file}" "${builds[@]}")
done
# Scheme
TARGET="Unity-iPhone"
# プロビジョニングプロファイル
PROFILE_PATH="${settingFiles}/AutoDebugSetting.mobileprovision"
if [ ! -d ${ARCHIVE_FILE_PATH} ]; then
mkdir "${ARCHIVE_FILE_PATH}"
fi
xcodebuild -project "${PROJECT_ROOT_PATH}/${XCODE_BUILD_FOLDER}/${TARGET}.xcodeproj" \
-scheme "${TARGET}" \
archive \
-archivePath "${ARCHIVE_FILE_PATH}/archive" \
DEVELOPMENT_TEAM=${TEAM_CODE}
# xcodeプロジェクトのビルドに失敗した場合
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
cat "can not build app file"
exit $EXIT_CODE
fi
IPA Export
xcodebuild \
-exportArchive -archivePath "${ARCHIVE_FILE_PATH}/archive.xcarchive" \
-exportPath "${ARCHIVE_FILE_PATH}" \
-exportOptionsPlist "${IOS_SETTING_PATH}/exportOptions.plist"
# ipaへの変換に失敗した場合
EXIT_CODE=$?
if [ $EXIT_CODE -ne 0 ]; then
cat "can not build ipa file"
exit $EXIT_CODE
fi
<参考URL>
・OS XにJenkinsをHomebrewでセットアップする
・コマンドラインからUnityのビルドを走らせる。 -基礎編-
・Jenkins Pluginに頼らずシェルだけでJobを構築する(ios開発アプリ転送編)
・UnityのiOSアプリをアーカイブまでJenkinsで自動化した話
・xcodebuildでipa作成 -exportOptionsPlist対応版