mac_app を追加
247
mac_app.md
Normal file
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のEpicWebHelper(CEFベースの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
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user