Private
Public Access
1
0

mac_app を追加

2025-12-22 19:04:51 +00:00
parent d8e5755d83
commit 15f237ff42

247
mac_app.md Normal file

@@ -0,0 +1,247 @@
# Mac App Store / TestFlight ビルドガイド
UE5プロジェクトをMac App Store / TestFlightにアップロードするための手順。
## 必要なもの
### Apple Developer 証明書
| 証明書 | 用途 |
|--------|------|
| Apple Distribution | アプリ署名 |
| 3rd Party Mac Developer Installer | PKG署名 |
確認方法:
```bash
security find-identity -v -p codesigning
```
### Provisioning Profile
1. [Apple Developer](https://developer.apple.com/account/resources/profiles/list) からダウンロード
2. プロジェクトルートに `embedded.provisionprofile` として配置
```bash
# UUIDを確認
security cms -D -i embedded.provisionprofile | grep -A1 UUID
```
### 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"
# 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/MacTargetPlatform.XcodeProjectSettings]
CodeSigningTeam=TEAMID
bUseModernXcode=true
bUseAutomaticCodeSigning=true
BundleIdentifier=com.example.app
CodeSigningPrefix=com.example
bUseAppStoreConnect=True
AppStoreConnectIssuerID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
AppStoreConnectKeyID=XXXXXXXXXX
AppStoreConnectKeyPath=(FilePath="path/to/key.p8")
```
## ビルドワークフロー
```bash
# 1. Macビルド
./bin/build.zsh mac
# 2. PKG作成アイコン差し替え + 署名)
./bin/build.zsh pkg
# 3. アイコン検証(オプション)
./bin/verify-icon.zsh
# 4. TestFlightにアップロード
./bin/build.zsh upload-mac
```
## コマンド詳細
### mac - UE5ビルド
```bash
./bin/build.zsh mac
```
実行内容:
- BuildCookRun でMac向けビルド
- `-distribution` フラグでApp Store配布用
- `-iterate` で増分クック(高速化)
- 出力: `Mac/*.xcarchive`
### pkg - PKG作成
```bash
./bin/build.zsh pkg
```
実行内容:
1. 最新の xcarchive を検出
2. カスタムアイコンに差し替えAppIcon.icns + Assets.car再ビルド
3. EpicWebHelper に sandbox entitlements で署名
4. メインアプリを再署名
5. `xcodebuild -exportArchive` でPKG生成
6. 出力: `build/Airse.pkg`
### upload-mac - アップロード
```bash
./bin/build.zsh upload-mac
```
実行内容:
- `xcrun altool` でApp Store Connectにアップロード
- API Key認証推奨またはユーザー名/パスワード認証
## 必須ファイル
```
Project/
├── .env # 環境変数
├── embedded.provisionprofile # Mac用プロビジョニングプロファイル
├── XXXXXXXXXX.p8 # App Store Connect API Key
├── Build/
│ └── Mac/
│ └── Resources/
│ ├── AppIcon.icns # カスタムアイコン
│ └── Sandbox.Server.entitlements # サンドボックス設定
└── Config/
└── DefaultEngine.ini # プロジェクト設定
```
## Sandbox Entitlements
Mac App Storeでは、すべての実行ファイルにサンドボックス権限が必要。
### Sandbox.Server.entitlements
```xml
<?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>com.apple.security.app-sandbox</key>
<true/>
<key>com.apple.security.inherit</key>
<true/>
</dict>
</plist>
```
### EpicWebHelper 署名
UE5のEpicWebHelperCEFベースのWebブラウザヘルパーは別途署名が必要:
```bash
codesign -f -s "Apple Distribution: ..." \
--entitlements Sandbox.Server.entitlements \
"Airse.app/Contents/UE/Engine/Binaries/Mac/EpicWebHelper"
```
これは `create_pkg()` で自動実行される。
## トラブルシューティング
### No profiles for 'bundle.id'
**原因**: Provisioning profileがインストールされていない
**解決**:
```bash
# UUIDを取得
PROFILE_UUID=$(security cms -D -i embedded.provisionprofile | grep -A1 UUID | tail -1 | sed 's/.*<string>\(.*\)<\/string>.*/\1/')
# 正しい場所にコピー
cp embedded.provisionprofile ~/Library/MobileDevice/Provisioning\ Profiles/${PROFILE_UUID}.provisionprofile
```
### Certificate mismatch
**原因**: "3rd Party Mac Developer Installer" 証明書がない
**解決**: Keychain Accessで証明書を確認、なければApple Developerから作成
### App sandbox not enabled on EpicWebHelper
**原因**: EpicWebHelperにサンドボックス権限がない
**解決**: `create_pkg()` で自動署名される。手動で署名する場合:
```bash
codesign -f -s "$CERT" --entitlements Sandbox.Server.entitlements EpicWebHelper
codesign -f -s "$CERT" --entitlements Sandbox.Server.entitlements Airse.app
```
### Missing asset catalog
**原因**: Assets.car が削除された
**解決**: Assets.carを削除せず、`actool` で再ビルドする(現在のスクリプトで対応済み)
### アイコンが変わらない
**原因**: Assets.car にデフォルトアイコンが含まれている
**解決**:
1. キャッシュクリア: `rm -rf Saved/StagedBuilds Binaries/Mac`
2. `./bin/build.zsh pkg` を再実行
3. `./bin/verify-icon.zsh` で確認
## ビルドログ
ログファイルの場所:
- UE5ビルドログ: `build_mac.log`
- Xcodeログ: `~/Library/Logs/Unreal Engine/LocalBuildLogs/`
## バージョン管理
TestFlightにアップロードするたびにビルド番号を上げる必要がある。
`Config/DefaultGame.ini`:
```ini
[/Script/EngineSettings.GeneralProjectSettings]
ProjectVersion=1.0.0
```
または UE Editor の Project Settings > Project > Description で設定。
## 参考コマンド
```bash
# 証明書一覧
security find-identity -v -p codesigning
# Provisioning profile の内容確認
security cms -D -i embedded.provisionprofile
# PKG の内容確認
pkgutil --expand Airse.pkg /tmp/pkg_contents
# アプリの署名確認
codesign -dv --verbose=4 Airse.app
# Entitlements 確認
codesign -d --entitlements - Airse.app
```