之前我曾寫過一篇文章macOS app 實現自動化 notarize 腳本,但並沒有提到使用代碼自動編譯並生成 App 的腳本,畢竟這一步有好多工具可以完成,比如說 fastlane。
我由於在 notarize 之前也沒想過做自動化,而在寫那篇文章的時候 fastlane 還沒有支持 notarized 上傳,於是我就自己寫了,具體的編譯命令是這樣的:
1 |
xcodebuild -project xxx.xcodeproj -scheme xxx DSTROOT="./" DWARF_DSYM_FOLDER_PATH="./Applications" archive |
這樣就可以直接把 dsym 和 app 文件生成出來了,方便的很。
……可是好景不長,最近蘋果似乎改動了 notarized 服務器行為,之前就一直讓人頭疼的 sparkle 集成簽名問題再度出現,簡而言之就是每次使用腳本生成的 app,對 sparkle 的簽名總是出現各種問題,而本地檢測又是正常的。
作為對比,使用 Xcode 自己的 archive 生成並上傳,是一切正常的(我單獨給 Sparkle 做了額外的簽名代碼,是可行的,但用命令編譯就不行)。
我猜測可能是直接生成 App 丟失了什麼緩存,經過查詢,現在分為兩步走,先生成正常的 archive ,然後再從 archive 中導出 app。
1 |
xcodebuild archive -project xxx.xcodeproj -scheme xxx -configuration release -archivePath ./Applications/xxx.xcarchive |
生成 存檔 ,這一步沒什麼好說的,直接就能成功了,接下來的步驟則有點複雜:
1 |
xcodebuild -exportArchive -archivePath ./Applications/xxx.xcarchive -exportPath ./Applications/ -exportOptionsPlist ./exportOptionsAdHoc.plist -allowProvisioningUpdates |
選擇你剛剛生成的 xcarchive,然後從裡邊導出 app(並簽名),這一步要求了一個奇怪的 -exportOptionsPlist ,且目前在網上也找不到什麼完整的模板,總的來說這個配置文件是不用寫滿全部參數的,把主要參數寫了就行,其他參數按默認即可,以前的 Xcode 版本還可以從 archive 功能裡導出一份配置文件(這個文件在導出時也存在一份拷貝),現在似乎不能了,總之,我給出一個模板,你可以參考來寫,反正如果寫錯了,它會報錯,然後告訴你缺少什麼參數,又或者哪個寫錯了,應該是哪些之一,很好排錯:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?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>provisioningProfiles</key> <dict> <key>com.logcg.inputmethod.LogInputMac.Settings</key> <string>SettingsLGCloud</string> <key>com.logcg.inputmethod.LogInputMac2</key> <string>LogInputMac2</string> </dict> <key>method</key> <string>developer-id</string> <key>iCloudContainerEnvironment</key> <string>Production</string> <key>signingCertificate</key> <string>Developer ID Application</string> <key>signingStyle</key> <string>manual</string> <key>teamID</key> <string>---</string> </dict> </plist> |
比如上文中 teamID 和 signingStyle 字段,其實都可以省略,因為 xcodebuild聯編 會自動從你的項目配置中讀取。
這下導出的 app 就可以正常 notarized 了。
本文由 落格博客 原創撰寫:落格博客 » 使用 xcodebuild 來 archive 並導出 app
轉載請保留出處和原文鏈接:https://www.logcg.com/archives/3385.html
你好, 首先 – 非常感謝您的博客, 它讓我開始. 但是,xcodebuild -exportArchive的部分不適用於我, 尤其是那些我無法正確理解的-exportOptionsPlist條目. xcodebuild不斷發出廢話錯誤,並拒絕導出我的檔案 – 並且儘管plist條目在xcodebuild -help中有所記錄 | 抓住了exportOptionsPlist — 我還是沒辦法. 如果您設法使它起作用, 我想聯繫您幾個問題.
嗨莫蒂, 只需在此處粘貼xcodebuild錯誤即可回复我, 讓我們看看我們得到了什麼. 🙂
動手能力令人佩服
也是沒辦法的事,畢竟每次發布app要是都手動操作,也很繁瑣
還很容易在各個過程當中出現意外錯誤 XD