From e64a6bb064afc4b42c637107766dd269d0f0bbe4 Mon Sep 17 00:00:00 2001 From: syui Date: Mon, 22 Dec 2025 19:11:57 +0000 Subject: [PATCH] =?UTF-8?q?ios=5Fapp=20=E3=82=92=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios_app.md | 285 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 285 insertions(+) create mode 100644 ios_app.md diff --git a/ios_app.md b/ios_app.md new file mode 100644 index 0000000..62936c8 --- /dev/null +++ b/ios_app.md @@ -0,0 +1,285 @@ +# iOS App Store ビルドガイド + +UE5プロジェクトをiOS App Storeにアップロードするための手順。 + +## 必要なもの + +### Apple Developer 証明書 + +| 証明書 | 用途 | +|--------|------| +| Apple Distribution | アプリ署名 | + +確認方法: +```bash +security find-identity -v -p codesigning +``` + +### Provisioning Profile + +1. [Apple Developer](https://developer.apple.com/account/resources/profiles/list) からダウンロード +2. プロジェクトルートに `embedded.mobileprovision` として配置 + +```bash +# 内容確認 +security cms -D -i embedded.mobileprovision +``` + +### App Store Connect API Key + +1. [App Store Connect](https://appstoreconnect.apple.com/access/integrations/api) で作成 +2. `.p8` ファイルをダウンロード +3. Issuer ID と Key ID をメモ + +## 設定ファイル + +### .env + +```bash +# 署名証明書 +IOS_CERTIFICATE_NAME="Apple Distribution: Your Name (TEAMID)" +DEVELOPMENT_TEAM="TEAMID" + +# iOS Provisioning Profile +MOBILEPROVISION="/path/to/embedded.mobileprovision" + +# App Store Connect API +ASC_ISSUER_ID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +ASC_KEY_ID="XXXXXXXXXX" +ASC_KEY_PATH="/path/to/XXXXXXXXXX.p8" +``` + +### Config/DefaultEngine.ini + +```ini +[/Script/IOSRuntimeSettings.IOSRuntimeSettings] +BundleDisplayName=AppName +BundleIdentifier=com.example.app +IOSTeamID=TEAMID +BundleName=com.example.app +MetalLanguageVersion=7 +MinimumiOSVersion=IOS_17 +bAutomaticSigning=True +bSupportsPortraitOrientation=True +bSupportsLandscapeLeftOrientation=False +bSupportsLandscapeRightOrientation=False +``` + +## ビルドワークフロー + +```bash +# 1. iOSビルド +./bin/build.zsh ios + +# 2. IPA作成(署名) +./bin/build.zsh ipa + +# 3. App Storeにアップロード +./bin/build.zsh upload-ios +``` + +## コマンド詳細 + +### ios - UE5ビルド + +```bash +./bin/build.zsh ios +``` + +実行内容: +- BuildCookRun でiOS向けビルド +- `-iterate` で増分クック(高速化) +- 出力: `IOS/*.xcarchive` + +### ipa - IPA作成 + +```bash +./bin/build.zsh ipa +``` + +実行内容: +1. 最新の xcarchive を検出 +2. Payload フォルダに .app をコピー +3. embedded.mobileprovision を埋め込み +4. Entitlements を抽出 +5. Frameworks を署名 +6. メインアプリを署名 +7. ZIP圧縮して .ipa を生成 +8. 出力: `build/Airse.ipa` + +### upload-ios - アップロード + +```bash +./bin/build.zsh upload-ios +``` + +実行内容: +- `xcrun altool` でApp Store Connectにアップロード +- API Key認証(推奨)またはユーザー名/パスワード認証 + +## 必須ファイル + +``` +Project/ +├── .env # 環境変数 +├── embedded.mobileprovision # iOS用プロビジョニングプロファイル +├── XXXXXXXXXX.p8 # App Store Connect API Key +├── Build/ +│ └── IOS/ +│ └── Resources/ +│ └── Assets.xcassets/ +│ └── AppIcon.appiconset/ # アプリアイコン +└── Config/ + └── DefaultEngine.ini # プロジェクト設定 +``` + +## アイコン設定 + +### アイコン生成 + +```bash +./bin/build.zsh icon [source_image.png] +``` + +デフォルトソース: `bin/icon/airse.png` + +生成先: `Build/IOS/Resources/Assets.xcassets/AppIcon.appiconset/` + +### 必要なアイコンサイズ + +| ファイル名 | サイズ | 用途 | +|-----------|--------|------| +| IPhoneIcon60@2x.png | 120x120 | iPhone | +| IPadIcon76@2x.png | 152x152 | iPad | +| IPadIcon83.5@2x.png | 167x167 | iPad Pro | +| Icon1024.png | 1024x1024 | App Store | + +## トラブルシューティング + +### No valid iOS code signing certificates found + +**原因**: Apple Distribution証明書がない + +**解決**: +1. Keychain Access で証明書を確認 +2. なければ Apple Developer から作成・ダウンロード + +### mobileprovision not found + +**原因**: Provisioning Profileが配置されていない + +**解決**: +```bash +# Apple Developer からダウンロードして配置 +cp ~/Downloads/profile.mobileprovision embedded.mobileprovision +``` + +### The bundle identifier does not match + +**原因**: Bundle IDがProvisioning Profileと一致しない + +**解決**: +1. `DefaultEngine.ini` の `BundleIdentifier` を確認 +2. Provisioning Profileが正しいBundle IDで作成されているか確認 + +### クック失敗 (ExitCode=25) + +**原因**: アセットのクックエラー + +**解決**: +1. `-iterate` を外してフルクック +2. エラーログを確認: `build_ios.log` + +### アップロード失敗 + +**原因**: API Keyの設定ミス + +**解決**: +1. `.env` の ASC_* 変数を確認 +2. `.p8` ファイルのパスを確認 +3. altool は `AuthKey_.p8` という名前を期待する + +## 署名の仕組み + +### 手動署名フロー + +``` +1. Provisioning Profile から Entitlements を抽出 + security cms -D -i embedded.mobileprovision > profile.plist + PlistBuddy -x -c "Print :Entitlements" profile.plist > entitlements.plist + +2. Frameworks を署名(あれば) + codesign -f -s "$CERT" Framework.framework + +3. メインアプリを署名 + codesign -f -s "$CERT" --entitlements entitlements.plist App.app + +4. IPA作成 + zip -r App.ipa Payload/ +``` + +### 自動署名 vs 手動署名 + +| 項目 | 自動署名 | 手動署名 | +|------|---------|---------| +| 設定 | `bAutomaticSigning=True` | `bAutomaticSigning=False` | +| Profile | Xcode管理 | 手動配置 | +| 柔軟性 | 低 | 高 | +| CI/CD | 困難 | 容易 | + +## デバイス要件 + +### 最小iOSバージョン + +`DefaultEngine.ini`: +```ini +MinimumiOSVersion=IOS_17 +``` + +選択肢: +- `IOS_15` - iOS 15以上 +- `IOS_16` - iOS 16以上 +- `IOS_17` - iOS 17以上(推奨) + +### 対応向き + +```ini +bSupportsPortraitOrientation=True +bSupportsLandscapeLeftOrientation=False +bSupportsLandscapeRightOrientation=False +``` + +## ビルドログ + +ログファイルの場所: +- UE5ビルドログ: `build_ios.log` +- Xcodeログ: `~/Library/Logs/Unreal Engine/LocalBuildLogs/` + +## Mac vs iOS の違い + +| 項目 | Mac | iOS | +|------|-----|-----| +| 出力形式 | .pkg | .ipa | +| Profile | .provisionprofile | .mobileprovision | +| Sandbox | 必須(EpicWebHelper署名) | 不要 | +| Assets.car | 再ビルド必要 | UE5が生成 | +| アップロード | `-t macos` | `-t ios` | + +## 参考コマンド + +```bash +# 証明書一覧 +security find-identity -v -p codesigning + +# Provisioning profile の内容確認 +security cms -D -i embedded.mobileprovision + +# IPA の内容確認 +unzip -l Airse.ipa + +# アプリの署名確認 +codesign -dv --verbose=4 Payload/Airse.app + +# Entitlements 確認 +codesign -d --entitlements - Payload/Airse.app +``` \ No newline at end of file