經過三個月的週末開發,我們的Unity 3D遊戲已經準備好發布並部署到App Store。然而,這個過程並不直觀。我花了一整夜來解決它。經過許多嘗試和錯誤,我決定在這裡記錄一些關鍵的步驟:

![./2016-05-29.png]

1. Unity生成設置

在Unity中,齁到”檔案” > “建立設置” > “平台: PC, Mac與Linux獨立” > “目標平台: Mac OS”。

點擊”玩家設置…“,並配置以下選項:

默認為全屏=真
默認是原生分辨率=真
抓取單一螢幕=假
顯示分辨率對話框=假
Mac應用商店驗證=真

2. Info.plist

在Finder中,右擊遊戲應用並選擇’顯示包內容’。在內容文件夾中,編輯Info.plist文件。確保:

  1. CFBundleGetInfoString是一個有效的字符串。
  2. CFBundleIdentifier和CFBundleSignature的值與bundle id(稍後解釋)匹配。
  3. CFBundleShortVersionString和CFBundleVersion的格式為x.x.x,例如1.0.0。
  4. 新增一個<key>LSApplicationCategoryType</key>,值為<string>public.app-category.games</string>

以下面的例子為例:

    <?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>
     <!-- ... your keys and values here ... -->
    </dict>
    </plist>

3. 授權資訊

在你的Build文件夾中,創建一個名為GAMENAME.entitlements的文件,添加一個sandbox鍵,如下所示:

    <?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/>
    </dict>
    </plist>

4. Apple開發者帳戶

假設你已經有一個付費的Apple開發者帳戶,訪問 Apple Developer Account。然後,轉到證書並選擇”OS X”的下拉列表。點擊”+”按鈕創建新的證書。你需要完成兩次這個過程以獲取”Mac應用分發”和”Mac安裝程序分發”證書。將它們保存到你的鑰匙鏈以供日後使用。

然後,轉到”識別碼”並選擇”應用ID”標籤。創建一個萬用應用ID,但要確保它與前一步驟中的bundle ID值匹配。例如,我的是unity.victorleungtw.*

5. iTunes Connect

登錄到 iTunes Connect,轉到 我的應用 > “+” > “新的Mac應用”,並填寫所需的欄位。確定 Bundle ID 與前一階段的配置相符。前綴欄位應為遊戲名稱,例如在我的情況下,它是ufo

你也需要拍攝屏幕截圖,並將它們修剪到正確的大小。只允許以下的尺寸:

  • 1280 x 800 像素
  • 1440 x 900 像素
  • 2560 x 1600 像素
  • 2880 x 1800 像素

6. 應用加載器

下載並安裝最新的應用加載器,用來提交應用。完成以下步驟:

在終端機中填寫內容權限:

    chmod -R a+xr "/path/to/GAMENAME.app"

用第三步中創建的授權信息文件簽署應用:

    codesign -f -s '3rd Party Mac Developer Application: DEVELOPER NAME' --entitlements "GAMENAME.entitlements" "/AppPath/GAMENAME.app"

你可能會遇到以下的錯誤:

    code object is not signed at all

這是因為子元件沒有簽署。你可以逐個簽署它們,包括libmono.0.dyliblibMonoPosixHelper.dylib,但個更簡單的方法是使用深度簽名命令,如下所示:

    codesign -f -s '3rd Party Mac Developer Application: DEVELOPER NAME' --entitlements "GAMENAME.entitlements

" "/AppPath/GAMENAME.app" --deep

然後,構建.pkg文件:

    productbuild --component GAMENAME.app /Applications --sign "3rd Party Mac Developer Installer: DEVELOPER NAME" GAMENAME.pkg

從你的機器中刪除所有已存在的遊戲應用。然後你可以用下面的命令驗證原則:

    sudo installer -store -pkg GAMENAME.pkg -target /

最後,打開應用加載器,選擇’提交你的應用’,並選擇GAMENAME.pkg。如果一切正常,上傳應該會成功。否則,根據相應的錯誤來解決問題。這個過程需要一些時間。

7. 選擇構建

如果你收到了包含如下問題的郵件:

> **無效簽名** — 主應用包game在路徑GAMENAME.app有以下簽名錯誤:在架構i386中的Info.plist無效(plist或簽名已被修改)。

這可能是你的某個子元件沒有正確簽署。你可能需要參考蘋果的文件尋找進一步的指導。

否則,返回到iTunes Connect,選擇已上傳的構建,並將狀態從”準備審查”變更為”等待審查” > “審查” > “銷售準備就緒”。

我希望這個博客文章對你有所幫助,也希望可以為你節省一些時間!:)