Slide 1

Slide 1 text

Unity CI/CD 完全に理解した 勉強会 Apple Vision Pro 向け UnityアプリのCI/CD環境最新情報 2024/08/02

Slide 2

Slide 2 text

登壇者情報 Graf fi ty(ג) ॴଐUnityΤϯδχΞ
 ઐ໳ྖҬɿα΢ϯυϓϩάϥϛϯά UnityΛத৺ͱͨ͠৘ใൃ৴ͳͲΛߦ͍ͬͯ·͢ɻ 2 Unity CI/CD 完全に理解した 勉強会 著書&査読協 力 @8bitdots https://qiita.com/Cova8bitdot @cova8bit.bsky.social

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

Apple Vision Pro はEyeTracking とTapジェスチャーを 用 いて選択操作を 行 うデバイスです 4 はじめに ※プライバシー保護の観点から視線ベクトルは取得不可 ※視線が当たったら初めてObject情報を取得できます

Slide 5

Slide 5 text

Apple Vision Pro 専 用 タイピングゲーム『Ninja Gaze Typing 』 5 プロダクト紹介

Slide 6

Slide 6 text

Apple Vision Pro 専 用 タイピングゲーム『Ninja Gaze Typing 』 6 プロダクト紹介

Slide 7

Slide 7 text

Unity のAssetStore でPolySpatial向けのハンドジェスチャーライブラリをリリースしました プロダクト紹介 https://assetstore.unity.com/packages/tools/input-management/hand-gesture-tool-for-apple-vision-pro-287273

Slide 8

Slide 8 text

AR+HandGesture をフルに活かしたAVP向けタワーディフェンスゲーム: Shuriken Survivor プロダクト紹介 https://apps.apple.com/app/shuriken-survivor/id6503944427

Slide 9

Slide 9 text

AR+HandGesture をフルに活かしたAVP向けタワーディフェンスゲーム: Shuriken Survivor プロダクト紹介 https://apps.apple.com/app/shuriken-survivor/id6503944427

Slide 10

Slide 10 text

10 #MadeWithUnity

Slide 11

Slide 11 text

11 そう、Unity(PolySpatial) + Apple Vision Proならね

Slide 12

Slide 12 text

Vision Pro のアプリインストール 方 法 12 はじめに • PCと無線でペアリング • Xcode でBuild するとそのままアプリが転送 • デバイス左側に開発者向けのUSB-Cポートの備えた モジュールもAppleDeveloper限定で販売 • ¥52,800 • ちなみにUSB-2.0と同等の転送速度 • 普通の開発フローではDeployフローが毎回 手 動

Slide 13

Slide 13 text

Vision Pro のアプリインストール 方 法 13 はじめに • PCと無線でペアリング • Xcode でBuild するとそのままアプリが転送 • デバイス左側に開発者向けのUSB-Cポートの備えた モジュールもAppleDeveloper限定で販売 • ¥52,800 • ちなみにUSB-2.0と同等の転送速度 • 普通の開発フローではDeployフローが毎回 手 動 App Vision Pro 開発のCI/CDって効率化できないの?

Slide 14

Slide 14 text

Unity CI/CD 完全に理解した 勉強会 Apple Vision Pro 向け UnityアプリのCI/CD環境最新情報 2024/08/02

Slide 15

Slide 15 text

15 はじめに 結論:Xcodebuild 側のバグのせいで完全 自 動化は現時点で不可能

Slide 16

Slide 16 text

16 はじめに 結論:Xcodebuild 側のバグのせいで完全 自 動化は現時点で不可能

Slide 17

Slide 17 text

17 はじめに 結論:Xcodebuild 側のバグのせいで完全 自 動化は現時点で不可能 すげぇいろいろ頑張ったら出来ました!

Slide 18

Slide 18 text

ワークフロー 1. Unity からVisionOS 向けXcodeProjectを出 力 2. Xcodebuild で ipa を作成 3. アプリを配布

Slide 19

Slide 19 text

ワークフロー 1. Unity からVisionOS 向けXcodeProjectを出 力 2. Xcodebuild で ipa を作成 3. アプリを配布

Slide 20

Slide 20 text

UnityからXcodeProject を出 力 するのは従来のbatchmodeでのビルドでOK • Batchmode のBuildScript の作成経験がない場合は ChatGPTを始め 生 成AIに聞いちゃいましょう 20 UnityからVisionPro 向けXCodeProjectを出 力

Slide 21

Slide 21 text

UnityからXcodeProject を出 力 するのは従来のbatchmodeでのビルドでOK • Batchmode のBuildScript の作成経験がない場合は ChatGPT始め 生 成AIに聞いちゃいましょう 21 UnityからVisionPro 向けXCodeProjectを出 力

Slide 22

Slide 22 text

先ほどのChatGPT製コードをVisionPro 向けにカスタマイズ 22 UnityからVisionPro 向けXCodeProjectを出 力

Slide 23

Slide 23 text

先ほどのChatGPT製コードをVisionPro 向けにカスタマイズ 23 UnityからVisionPro 向けXCodeProjectを出 力 ここを未設定だとXcodeのSimulator 用 の Project が 生 成される可能性あり

Slide 24

Slide 24 text

ワークフロー 1. Unity からVisionOS 向けXCodeProjectを出 力 2. Xcodebuild で ipa を作成 3. アプリを配布

Slide 25

Slide 25 text

Xcodebuild の引数がvisionOS向けに正しく設定しないとArchiveが作れません このようなBuildScriptを叩いてArchiveを作ろうとしますが 25 Xcodebuild で ipa を作成 BUILD_PATH=先ほどのUnityの出 力 先Pathを設定 xcodebuild archive clean \ -project ${BUILD_PATH}Unity-VisionOS.xcodeproj \ -scheme Unity-VisionOS \ -archivePath ${BUILD_PATH}app \ -con fi guration Release ENABLE_BITCODE=NO DEVELOPMENT_TEAM=YOUR_TEAM_ID \ -allowProvisioningUpdates \ -destination 'generic/platform=visionOS' GCC_PREPROCESSOR_DEFINITIONS='$GCC_PREPROCESSOR_DEFINITIONS IL2CPP_LARGE_EXECUTABLE_ARM_WORKAROUND=1'

Slide 26

Slide 26 text

Xcodebuild の引数がvisionOS向けに正しく設定しないとArchiveが作れません 以下のようなエラーでArchive作成に失敗します ※IDE 上では問題なくArchiveを作成できます 26 Xcodebuild で ipa を作成 ** Please also include the output of `xcrun simctl diagnose` and `xcode-select -p`. Underlying Errors: Description: Failed to fi nd a suitable device for the type IBSimDeviceTypeiPad2x (com.apple.dt.Xcode.IBSimDeviceType.iPad-2x) with runtime visionOS 2.0 (2.0 - 22N5277f) - com.apple.CoreSimulator.SimRuntime.xrOS-2-0 Failure Reason: Failed to create new simulator device in set SimDeviceSet : /Users/developer/Library/ Developer/Xcode/UserData/IB Support/Simulator Devices that matches IBSimDeviceTypeiPad2x (com.apple.dt.Xcode.IBSimDeviceType.iPad-2x) for runtime visionOS 2.0 (2.0 - 22N5277f) - com.apple.CoreSimulator.SimRuntime.xrOS-2-0 (Incompatible device). Available devices: ( ) Underlying Errors: Description: Incompatible device ** ARCHIVE FAILED **

Slide 27

Slide 27 text

Xcodebuild の引数がvisionOS向けに正しく設定しないとArchiveが作れません 27 Xcodebuild で ipa を作成 BUILD_PATH=先ほどのUnityの出 力 先Pathを設定 xcodebuild archive clean \ -project ${BUILD_PATH}Unity-VisionOS.xcodeproj \ -scheme Unity-VisionOS \ -archivePath ${BUILD_PATH}app \ -con fi guration Release ENABLE_BITCODE=NO DEVELOPMENT_TEAM=YOUR_TEAM_ID \ -allowProvisioningUpdates \ -destination ‘generic/platform=xros’ -sdk 'xros1.1' ①platform はvisionOS じゃなくて xros ②sdk でxros(=visionOS) のバージョンを設定 以下のように修正します

Slide 28

Slide 28 text

おそらくXcode側のバグかと思われますがXcode16beta3 現在ではビルドに失敗します 28 Xcodebuild で ipa を作成 • Apple にはFeedbackAssistantでバグレポート済み • マシン環境によってXcode15.3 を 入 れてても成功したり失敗したりする • 自 分のマシンはNG。会社のビルドマシンでは成功した • 自 分のマシンはXcode16b3を 入 れていたので 干 渉した可能性あり • ここについては要追加検証

Slide 29

Slide 29 text

ワークフロー 1. Unity からVisionOS 向けXcodeProjectを出 力 2. Xcodebuild で ipa を作成 3. アプリを配布

Slide 30

Slide 30 text

現状:開発 用 →Firebase AppDistribution 現状よくあるアプリ配布だと以下のサービスがあります 1. TestFlight • 内部テスター配布ならこちらがオススメ • DeviceIDの登録上限数の問題あり 2. Deploygate • iOS/Android だとよく使う • VisionOS 用 ipaは 非 対応 3. Firebase AppDistribution • VisionOS 用 ipa も対応!! • TestFlight だとBranch毎にビルドを分けて管理みたいな運 用 をしづらい &アプリページ作る 手 間がかかる 30 アプリを配布

Slide 31

Slide 31 text

Firebase AppDistribution でのアプリ配布 方 法は公式Docが超丁寧なので公式に従おう • Firebase CLIリファレンス でCLI環境を導 入 https:// fi rebase.google.com/docs/cli?hl=ja#install_the_ fi rebase_cli • Firebase AppDistribution のiOSアプリ配布のフローに従って配布準備 https:// fi rebase.google.com/docs/app-distribution/ios/distribute-cli?hl=ja 31 アプリを配布

Slide 32

Slide 32 text

Firebase AppDistribution でのアプリ配布 方 法は公式Docが超丁寧なので公式に従おう • 以下のような upload.sh を 用 意します • 下記のような形で実 行 することでipaをアップロードさせます $ git log -1 --format=%H | xargs sh upload.sh appname.ipa branch_name 32 アプリを配布 FIREBASE_TOKEN=“CLIでFirebaseにログインした時に発 行 されるものを利 用 " APP_ID="アプリページの設定画 面 からとってくる" BRANCH_NAME=$2 COMMIT_HASH=$3 fi rebase appdistribution:distribute $1 \ --token “${FIREBASE_TOKEN}” \ --app "${APP_ID}" \ --release-notes "${BRANCH_NAME} : ${COMMIT_HASH}" \ --groups "アプリページで作ったデバッググループ名" \ --debug

Slide 33

Slide 33 text

まとめ:VisionPro 向けアプリビルドの完全 自 動化はなんとか可能! • UnityのBatch Build は問題なし • Xcode側の ipa 作成部分は環境によっては完全 自 動化も可能 • Xcode15.3 で引数を正しく設定すれば可能 • 環境によっては同 一 コマンドでも実 行 されない場合有り • Apple側にもFeedbackAssistantで報告済み • アプリ配布はFirebase AppDistribution ならVisionPro 向けにも配布可能 33 最後に