本文章用來記錄第一次將撰寫的 macOS App 打包成 dmg 檔的過程
在完成 macOS App 後有兩種選項可以提供自己的 app 給其他人,第一種是透過提交至 App Store 完成上傳 App,第二種方式就是自行將 app 打包成 dmg 檔分享給別人進行下載,在本篇當中我們將分享透過打包成 dmg 檔分享給其他人下載的方式。
經常透過 dmg 下載來自各地開發者提供的 app 的各位應該對於安裝時出現 「無法打開因為它來自未知開發者」,然後必須要去到設定裡面允許開啟的事情相當熟悉吧,這是因為該 app 沒有通過 apple 的認證導致的,在本篇當中也會提到如何避免此情況讓使用者安裝 app 後不會跳出此提示,可以直接進行使用。
首先為了要讓 apple 驗證你的 app 你需要一個付費版的 apple developer account,申請這個 account 需要每年支付 apple 99 美金的費用,如此一來你就可以讓 apple 認證你的 app,同時也擁有上架 app 到 app store 的權利。
Step1: 將 App 編譯
我們先透過 Xcode 中的 Product > Archive 將完成的 code 打包,之後會進入到 Archives 的頁面,點擊 Distribute App > Custom > Copy App,完成後你將會在指定的資料夾下找到一個 .app 的檔案,如果你有看到 .app 檔案恭喜完成第一步了。
Step2: 簽名 App (可選,為了避免出現未知開發者)
先透過 security find-identity -v -p codesigning
指令確定使否有 "Developer ID Application: Account Name (Group Id)"
這個項目,要確定是以 Developer ID Application:
開頭的,如果沒有的話請往下面的申請 Developer ID Application 章節完成申請。
透過 codesign --deep --force --verbose --sign "Developer ID Application: Your Name (TEAMID)" YourApp.app
對你的 .app 進行簽名。
透過 codesign --verify --deep --strict --verbose=2 YourApp.app
驗證你的簽名是否正常。
Step3: 製作 dmg 檔案
如果沒有 create-dmg
這個工具可以透過 brew install create-dmg
完成下載此工具。
透過 create-dmg
工具將 .app 打包成 .dmg 檔案
create-dmg \
--volname "YourAppName" \
--window-size 500 300 \
--icon-size 100 \
--icon "YourAppName.app" 100 100 \
--app-drop-link 400 100 \
./YourAppName.dmg \
/完整路徑/YourAppName.app
如果你沒有付費的開發者帳號到這裡你就可以將 .dmg 檔案分享給其他人使用了,不過就會出現「未知開發者」的問題。
Step4: 公正 .dmg 檔案
第一次使用要先儲存憑證資料:
你需要一組 Apple ID、Team Id、App 專用密碼來建立一個叫做 keychain profile
的設定。
xcrun notarytool store-credentials "AC_PASSWORD(可以隨你填)" \
--apple-id "你的 Apple ID" \
--team-id "你的 Team ID" \
--password "App 專用密碼"
🔐 App 專用密碼可從 https://appleid.apple.com > 安全性 > 產生 App 專用密碼。
上傳 .dmg
給 Apple 進行 Notarization:
xcrun notarytool submit /完整路徑/YourAppName.dmg \
--keychain-profile "AC_PASSWORD" \
--wait
等待出現 The notarization request was successful.
的訊息表示成功了。
Step5: Staple .dmg
(把結果封存到檔案中)
xcrun stapler staple /完整路徑/Pomodoro.dmg
這樣就完成了,你可以將此 dmg 檔案分享給其他人使用了。
Appendix: 申請 Developer ID Application
可以在 https://developer.apple.com/account/resources/certificates/list 中申請憑證,但是需要先在電腦中產生 .csr 檔案,可以透過以下的指令生成。openssl req -new -newkey rsa:2048 -nodes -keyout ~/Desktop/key.key -out ~/Desktop/csr.certSigningRequest
接下來你可以在 apple 網站上下載 .cer 檔案裡面就是你的公鑰,接下來我們要將私鑰與公鑰放到 keychaing 當中,而此時我們需要將 .key 檔案與 .cer 檔案透過 openssl 合併,但是 openssl 不支援 .cer 檔案類型,所以我們透過以下指令將 .cer 轉換成 .pemopenssl x509 -in ~/Desktop/developerID_application.cer -inform der -out ~/Desktop/developerID_application.pem -outform pem
之後透過以下指令將公鑰與私鑰合併到一個 .p12 檔案
openssl pkcs12 -export
-inkey ~/Desktop/key.key
-in ~/Desktop/developerID_application.pem
-out ~/Desktop/developerID.p12
此時就可以將此 .p12 檔案匯入到 keychain 當中,這樣再次使用security find-identity -p codesigning -v
時就可以看到出現 Developer ID Application 的欄位了。