發佈 Mac Catalyst 應用程式以在 Mac App Store 外部發布
透過 Mac App Store 散發 Mac Catalyst 應用程式的替代方案是將它們散發到 Mac App Store 外部。 使用這種方法,您的 Mac Catalyst 應用程式可以裝載在您選擇的下載位置。 Apple Developer Program 和 Apple Developer Enterprise 計畫的成員可以使用此散發方法。
散發 Mac Catalyst 應用程式需要使用 佈建配置檔佈建應用程式。 佈建配置檔是包含程式代碼簽署資訊的檔案,以及應用程式的身分識別及其預定散發機制。
若要在 Mac App Store 外部發布 .NET 多平臺應用程式 UI (.NET MAUI) Mac Catalyst 應用程式,您必須建 置專屬的散發佈建配置檔 。 此設定檔可讓應用程式以數位方式簽署發行,以便安裝在 Mac 上。 散發佈建配置檔包含應用程式識別碼和開發人員標識碼應用程式憑證。 如果您還沒有開發人員標識碼應用程式憑證,您必須建立開發人員標識符應用程式憑證來識別自己或您的組織。 此外,您必須建立開發人員標識碼安裝程序憑證,以簽署應用程式的安裝程式套件。
佈建 .NET MAUI Mac Catalyst 應用程式以在 Mac App Store 外部散發的程式如下:
- 建立兩個憑證簽署要求。 如需詳細資訊,請參閱 建立憑證簽署要求。
- 建立開發人員標識碼應用程式憑證。 如需詳細資訊,請參閱 建立開發人員標識符應用程式憑證。
- 建立開發人員標識碼安裝程序憑證。 如需詳細資訊,請參閱 建立開發人員標識碼安裝程序憑證。
- 建立應用程式識別碼。 如需詳細資訊,請參閱 建立應用程式識別符。
- 建立布建配置檔。 如需詳細資訊,請參閱 建立布建配置檔。
- 下載您的布建配置檔。 如需詳細資訊,請參閱 在 Xcode 中下載布建配置檔。
重要
本文說明使用屬於 Apple Developer Program 一部分的 Apple 開發人員帳戶,在 Mac App Store 外部佈建散發。 它也可用於屬於Apple Developer Enterprise計劃的Apple開發人員帳戶,因為所需的步驟基本上完全相同。
然後,布建完成之後,您應該準備應用程式以發佈、發佈應用程式,並使用下列程式進行公證:
- 選擇性地將權利新增至您的應用程式。 如需詳細資訊,請參閱 新增權利。
- 更新應用程式的 Info.plist 檔案。 如需詳細資訊,請參閱 更新 Info.plist。
- 停用應用程式的程式代碼簽章驗證。 如需詳細資訊,請參閱 停用代碼簽章驗證。
- 使用命令行發佈您的應用程式。 如需詳細資訊,請參閱 使用命令行發佈。
- 將您的應用程式公證。 如需詳細資訊,請參閱 Notarize 您的應用程式。
建立憑證簽署要求
建立散發憑證之前,您必須先在 Mac 上的 Keychain Access 中建立憑證簽署要求 (CSR):
在您的 Mac 上,啟動 Keychain Access。
在 [金鑰鏈存取] 中,選取 [金鑰鏈存取 > 憑證助理 > ] 從 [證書頒發機構單位... ] 功能表項要求憑證。
在 [ 憑證助理 ] 對話框中,於 [用戶電子郵件位址 ] 字段中輸入電子郵件位址。
在 [ 憑證小幫手 ] 對話框中,於 [一般名稱] 字段中輸入密鑰 的名稱 。
在 [憑證助理] 對話框中,將 [CA 電子郵件位址] 字段保留空白。
在 [ 憑證小幫手 ] 對話框中,選擇 [ 儲存至磁碟 ] 單選按鈕,然後選取 [ 繼續]:
將憑證簽署要求儲存至已知位置。
在 [ 憑證小幫手] 對話框中,選取 [ 完成] 按鈕。
關閉 Keychain 存取。
重複此程式以建立第二個憑證簽署要求。 第一個 CSR 將用來建立開發人員標識碼應用程式憑證。 第二個將用來建立開發人員標識碼安裝程序憑證。
重要
您無法使用相同的憑證簽署要求來建立開發人員識別碼應用程式憑證和開發人員標識碼安裝程序憑證。
建立開發人員標識碼應用程式憑證
CSR 可讓您產生開發人員標識碼憑證,以確認您的身分識別。 您必須使用 Apple 開發人員帳戶的 Apple 識別符來建立開發人員識別碼憑證:
在網頁瀏覽器中,登入您的 Apple開發人員帳戶。
在您的 Apple 開發人員帳戶中,選取 [ 憑證]、[標識符和配置檔] 索引標籤 。
在 [ 憑證]、[標識符與配置檔] 頁面上,選取 + 按鈕以建立新的憑證。
在 [ 建立新憑證 ] 頁面上,選取 [ 開發人員標識符應用程式] 單選按鈕,再選取 [ 繼續] 按鈕:
在 [ 建立新憑證 ] 頁面上,選取 [G2 子 CA ] 單選按鈕,然後選取 [ 選擇檔案]:
在 [ 選擇要上傳 的檔案] 對話框中,選取您先前建立的第一個憑證要求檔案(擴展名為
.certSigningRequest
的檔案),然後選取 [ 上傳]。在 [ 建立新憑證 ] 頁面上,選取 [ 繼續] 按鈕:
在 [ 下載您的憑證] 頁面上,選取 [ 下載 ] 按鈕:
憑證檔案(擴展名為
.cer
的檔案)將會下載到您選擇的位置。在 Mac 上,按兩下下載的憑證檔案,將憑證安裝到您的密鑰鏈。 憑證會出現在 Keychain Access 的 [我的憑證] 類別中,然後以開發人員標識符應用程式開頭:
注意
記下 Keychain Access 中的完整憑證名稱。 簽署您的應用程式時需要用到它。
建立開發人員標識碼安裝程序憑證
CSR 可讓您產生開發人員標識碼安裝程序憑證,這是簽署應用程式安裝程式套件所需的憑證。 您必須使用 Apple 開發人員帳戶的 Apple ID 來建立安裝程式憑證:
在您的 Apple 開發人員帳戶中,選取 [ 憑證]、[標識符和配置檔] 索引標籤 。
在 [ 憑證]、[標識符與配置檔] 頁面上,選取 + 按鈕以建立新的憑證。
在 [ 建立新憑證 ] 頁面上,選取 [ 開發人員標識符安裝程式 ] 單選按鈕,再選取 [ 繼續] 按鈕:
在 [ 建立新憑證 ] 頁面上,選取 [G2 子 CA ] 單選按鈕,然後選取 [ 選擇檔案]:
在 [ 選擇要上傳 的檔案] 對話框中,選取您先前建立的第二個憑證要求檔案(擴展名為
.certSigningRequest
的檔案),然後選取 [ 上傳]。在 [ 建立新憑證 ] 頁面上,選取 [ 繼續] 按鈕:
在 [ 下載您的憑證] 頁面上,選取 [ 下載 ] 按鈕:
憑證檔案(擴展名為
.cer
的檔案)將會下載到您選擇的位置。在 Mac 上,按兩下下載的憑證檔案,將憑證安裝到您的密鑰鏈。 憑證會出現在 Keychain Access 的 [我的憑證] 類別中,然後以開發人員標識碼安裝程序開頭:
注意
記下 Keychain Access 中的完整憑證名稱。 簽署您的應用程式時需要用到它。
建立散發配置檔
散發佈建配置檔可讓您的 .NET MAUI Mac Catalyst 應用程式以數位方式簽署發行,使其可以安裝在另一個 Mac 上。 Mac App Store 外部散發的佈建配置檔包含應用程式識別碼和開發人員標識碼應用程式憑證。
建立應用程式識別碼
需要應用程式識別碼,才能識別您要散發的應用程式。 應用程式標識碼類似於反向 DNS 字串,可唯一識別應用程式,且應該與應用程式的套件組合識別符相同。 您可以使用將應用程式部署至裝置以進行測試時所使用的相同應用程式識別碼。
應用程式識別碼有兩種類型:
- 萬用字元。 通配符應用程式識別碼可讓您使用單一應用程式識別碼來比對多個應用程式,而且通常會採用 格式
com.domainname.*
。 通配符應用程式識別碼可用來散發多個應用程式,而且應該用於未啟用應用程式特定功能的應用程式。 - 明確。 明確的應用程式識別碼對單一應用程式而言是唯一的,而且通常會採用 格式
com.domainname.myid
。 明確的應用程式識別碼允許散發一個應用程式,並具有相符的套件組合標識符。 明確應用程式識別碼通常用於啟用App特定功能的應用程式,例如Apple Pay或Game Center。 如需功能的詳細資訊,請參閱 功能。
若要建立新的應用程式識別碼:
在您的 Apple 開發人員帳戶中,流覽至 [憑證]、[標識符和配置檔]。
在 [ 憑證]、[標識符和配置檔] 頁面上,選取 [ 標識符] 索引卷標 。
在 [ 標識符] 頁面上,選取 + 按鈕以建立新的應用程式識別碼。
在 [註冊新的標識符] 頁面上,選取 [應用程式標識符] 單選按鈕,再選取 [繼續] 按鈕:
在 [ 註冊新的標識符 ] 頁面上,選取 [應用程式 ],再選取 [ 繼續] 按鈕:
在 [註冊應用程式標識符] 頁面上,輸入描述,然後選取 [明確] 或 [通配符套件組合標識符] 單選按鈕。 然後,以反向 DS 格式輸入應用程式的套件組合識別碼:
重要
您輸入的套件組合識別碼必須對應至應用程式專案中 Info.plist 檔案中的套件組合識別碼。
.NET MAUI 應用程式的套件組合識別符會儲存在專案檔中作為 應用程式識別符 屬性。 在 Visual Studio 中,於 方案總管 以滑鼠右鍵按鍵按下 .NET MAUI 應用程式專案,然後選取 [屬性]。 然後,流覽至 [MAUI 共用一般] 索引標籤>。[應用程式識別碼] 欄位會列出套件組合識別碼。
更新 [應用程式識別符] 字段的值時,Info.plist 中 [套件組合標識符] 的值將會自動更新。
在 [ 註冊應用程式識別符 ] 頁面上,選取應用程式使用的任何功能。 您必須在此頁面和 App 專案中的 Entitlements.plist 檔案中設定任何功能。 如需詳細資訊,請參閱功能和權利。
在 [ 註冊應用程式識別符 ] 頁面上,選取 [ 繼續] 按鈕。
在 [ 確認您的應用程式識別符 ] 頁面上,選取 [ 註冊] 按鈕。
建立布建配置檔
建立應用程式識別碼之後,您應該建立散發佈建配置檔。 此設定檔可讓應用程式以數位方式簽署發行,以便安裝在 Mac 上。
若要建立佈建配置檔以在 Mac App Store 外部散發:
在 Apple Developer Account 的 [憑證、標識碼和設定檔] 頁面中,選取 [ 配置檔] 索引標籤。
在 [ 配置檔] 索引標籤中 + ,按下按鈕以建立新的設定檔。
在 [ 註冊新的布建配置檔 ] 頁面中,選取 [ 開發人員標識符 ] 單選按鈕,再按兩下 [ 繼續 ] 按鈕:
在 [ 產生布建配置檔 ] 頁面中,選取 [ Mac Catalyst ] 單選按鈕。 然後,在 [ 應用程式標識符 ] 下拉式清單中,選取您先前建立的應用程式識別碼,再按兩下 [ 繼續] 按鈕:
在 [ 產生佈建配置檔 ] 頁面中,選取對應至散發憑證的單選按鈕,再按兩下 [ 繼續] 按鈕:
在 [ 產生布建配置檔 ] 頁面中,輸入布建配置檔的名稱,再按兩下 [ 產生 ] 按鈕:
注意
請記下布建配置檔名稱,因為簽署應用程式時需要此名稱。
在 [ 產生布建配置檔 ] 頁面中,選擇性地按兩下 [下載 ] 按鈕以下載布建配置檔。
注意
您現在不需要下載布建設定檔。 相反地,您會在 Xcode 中執行此動作。
在 Xcode 中下載布建配置檔
在 Apple 開發人員帳戶中建立布建設定檔之後,Xcode 可以下載它,以便簽署您的應用程式:
在您的 Mac 上,啟動 Xcode。
在 Xcode 中 ,選取 [Xcode > 喜好設定... ] 功能表項。
在 [ 喜好設定 ] 對話框中,選取 [ 帳戶] 索引卷 標。
在 [ 帳戶] 索引標籤中 + ,按兩下按鈕,將您的 Apple 開發人員帳戶新增至 Xcode:
在帳戶類型彈出視窗中,選取 [Apple ID ],然後按兩下 [ 繼續] 按鈕:
在登入彈出視窗中,輸入您的 Apple ID,然後按下 一步] 按鈕。
在登入彈出視窗中,輸入您的 Apple ID 密碼,然後按下 一步] 按鈕:
在 [ 帳戶] 索引標籤中,按兩下 [ 管理憑證... ] 按鈕,以確保已下載您的散發憑證。
在 [ 帳戶] 索引標籤中,按兩下 [ 下載手動設定檔 ] 按鈕以下載布建設定檔:
等候下載完成,然後關閉 Xcode。
新增權利
Apple 的應用程式沙箱會限制存取 Mac 應用程式中的系統資源和用戶數據,以在應用程式遭到入侵時包含損毀。 您可以選擇性地針對在 Mac App Store 外部散發的 Mac Catalyst 應用程式啟用它。
這可以藉由將 Entitlements.plist 檔案新增至 .NET MAUI 應用程式專案的 Platform/MacCatalyst 資料夾來完成:
<?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>
應用程式沙盒權利是使用 com.apple.security.app-sandbox
類型的 boolean
索引鍵來定義。 如需應用程式沙盒的相關信息,請參閱 在 developer.apple.com 上使用應用程式沙箱 保護用戶數據。 如需應用程式沙盒權利的相關信息,請參閱 應用程式沙盒權利。
如果您的應用程式開啟連出網路連線,您也必須將 類型boolean
為 的密鑰新增com.apple.security.network.client
至您的 Entitlements.plist 檔案:
<?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.network.client</key>
<true/>
</dict>
</plist>
如需連出網路連線權利的相關信息,請參閱 com.apple.security.network.client on developer.apple.com。
更新 Info.plist
發布應用程式之前,您應該使用其他資訊來更新其 Info.plist 檔案。
指定使用者介面語式
Mac Catalyst 應用程式可以在 iPad 或 Mac 使用者介面成語中執行:
- iPad 使用者介面成語會告訴 macOS 調整應用程式的使用者介面,以符合 Mac 顯示環境,同時保留類似 iPad 的外觀。
- Mac 使用者介面成語不會調整應用程式的使用者介面,以符合 Mac 顯示環境。 某些控制項會變更其大小和外觀,並與控件互動的感覺與控件的互動
AppKit
方式相同。
根據預設,.NET MAUI Mac Catalyst 應用程式會使用 iPad 使用者介面語式。 如果這是您所需的行為,請確定應用程式的 Info.plist 檔案只會指定 2 作為索引鍵的值 UIDeviceFamily
:
<key>UIDeviceFamily</key>
<array>
<integer>2</integer>
</array>
若要採用 Mac 使用者介面語式,請更新應用程式的 Info.plist 檔案,將 6 指定為機碼的值 UIDeviceFamily
:
<key>UIDeviceFamily</key>
<array>
<integer>6</integer>
</array>
如需 Mac Catalyst 使用者介面慣用語的詳細資訊,請參閱 指定 Mac Catalyst 應用程式的 UI 慣用語。
設定應用程式的預設語言和區域
CFBundleDevelopmentRegion
將應用程式 Info.plist 中的索引鍵設定為 string
,代表當地語系化原生開發區域:
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
索引鍵的值應該是具有選擇性區域指示項的語言指示項。 如需詳細資訊,請參閱 cfBundleDevelopmentRegion on developer.apple.com。
設定著作權金鑰
NSHumanReadableCopyright
將應用程式 Info.plist 中的金鑰設定為 string
,代表您應用程式的人類可讀著作權聲明:
<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>
如需詳細資訊,請參閱 developer.apple.com 上的 NSHumanReadableCopyright 。
宣告您的應用程式使用加密
如果您的應用程式使用加密,而且您打算將它散發到 美國 或加拿大以外,則會受限於美國出口合規性需求。 您可以在應用程式 Info.plist 檔案中使用加密的相關信息。
這可藉由將 ITSAppUsesNonExemptEncryption
金鑰新增至您應用程式的 Info.plist ,並具有 boolean
指出您的應用程式是否使用加密的值來完成:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
如需詳細資訊,請參閱 遵守 developer.apple.com 加密導出法規 。
停用代碼簽章驗證
目前,當您嘗試發佈 .NET MAUI Mac Catalyst 應用程式以在 Mac App Store 外部散發時,如果您已符合佈建需求,您會收到有關結束代碼 3 的錯誤 codesign
:
/usr/local/share/dotnet/packs/Microsoft.MacCatalyst.Sdk/16.2.1040/tools/msbuild/iOS/Xamarin.Shared.targets(1930,3): error MSB6006: "codesign" exited with code 3. [/Users/davidbritch/Projects/MyMauiApp/MyMauiApp/MyMauiApp.csproj::TargetFramework=net8.0-maccatalyst]
成功 codesign
簽署您的應用程式時, _CodesignVerify
目標無法驗證程式代碼簽章:
test-requirement: code failed to satisfy specified code requirement(s)
由於此失敗, 因此不會產生.pkg 檔案。
因此,目前必須將下列建置目標新增至專案檔結尾,以停用驗證程式代碼簽章:
<Project Sdk="Microsoft.NET.Sdk">
...
<Target Name="_SkipCodesignVerify" BeforeTargets="_CodesignVerify" AfterTargets="_CodesignAppBundle">
<PropertyGroup>
<_RequireCodeSigning>false</_RequireCodeSigning>
</PropertyGroup>
</Target>
</Project>
使用命令行發佈
若要從 Mac 上的命令行發佈 Mac Catalyst 應用程式,請開啟終端機並流覽至 .NET MAUI 應用程式項目的資料夾。 dotnet publish
執行 命令,並提供下列參數:
參數 | 值 |
---|---|
-f 或 --framework |
目標架構,也就是 net8.0-maccatalyst 。 |
-c 或 --configuration |
組建組態,也就是 Release 。 |
-p:MtouchLink |
項目的連結模式,可以是 None 、 SdkOnly 或 Full 。 |
-p:CreatePackage |
設定為 true ,以便在建置結束時為應用程式建立套件 (.pkg)。 |
-p:EnableCodeSigning |
設定為 true ,以便啟用程式代碼簽署。 |
-p:EnablePackageSigning |
設定為 true ,讓所建立的套件經過簽署。 |
-p:CodesignKey |
程式代碼簽署金鑰的名稱。 設定為散發憑證的名稱,如 Keychain Access 中所顯示。 |
-p:CodesignProvision |
簽署應用程式套件組合時要使用的布建配置檔。 |
-p:CodesignEntitlements |
權利檔案的路徑,指定應用程式所需的權利。 設定為 Platforms\MacCatalyst\Entitlements.plist 。 |
-p:PackageSigningKey |
簽署套件時要使用的套件簽署金鑰。 設定為安裝程序憑證的名稱,如 Keychain Access 中所顯示。 |
-p:RuntimeIdentifier |
專案的執行時間識別碼 (RID) 。 發行 .NET MAUI Mac Catalyst 應用程式的組建預設為使用 maccatalyst-x64 和 maccatalyst-arm64 作為運行時間標識碼,以支援通用應用程式。 若要只支援單一架構,請指定 maccatalyst-x64 或 maccatalyst-arm64 。 |
-p:UseHardenedRuntime |
設定為 true 以啟用強化運行時間,這是 Mac Catalyst 應用程式在 Mac App Store 外部散發的必要專案。 |
警告
嘗試發佈 .NET MAUI 解決方案會導致 dotnet publish
命令嘗試個別發佈方案中的每個專案,這可能會導致將其他項目類型新增至方案時發生問題。 因此, dotnet publish
命令的範圍應設定為 .NET MAUI 應用程式專案。
如果在項目檔中未提供其他建置參數,則可以在命令行上 <PropertyGroup>
指定其他建置參數。 下表列出一些常見的參數:
參數 | 值 |
---|---|
-p:ApplicationTitle |
應用程式的用戶可見名稱。 |
-p:ApplicationId |
應用程式的唯一識別碼,例如 com.companyname.mymauiapp 。 |
-p:ApplicationVersion |
識別應用程式反覆項目的組建版本。 |
-p:ApplicationDisplayVersion |
應用程式的版本號碼。 |
-p:RuntimeIdentifier |
專案的執行時間識別碼 (RID) 。 發行 .NET MAUI Mac Catalyst 應用程式的組建預設為使用 maccatalyst-x64 和 maccatalyst-arm64 作為運行時間標識碼,以支援通用應用程式。 若要只支援單一架構,請指定 maccatalyst-x64 或 maccatalyst-arm64 。 |
如需組建屬性的完整清單,請參閱 專案檔屬性。
重要
所有這些參數的值都不需要在命令行上提供。 您也可以在項目檔中提供它們。 當在命令行和項目檔中提供參數時,命令行參數會優先使用。 如需在項目檔中提供建置屬性的詳細資訊,請參閱 在專案檔中定義組建屬性。
例如,使用下列命令在 Mac 上建置和簽署 .pkg ,以在 Mac App Store 外部散發:
dotnet publish -f net8.0-maccatalyst -c Release -p:MtouchLink=SdkOnly -p:CreatePackage=true -p:EnableCodeSigning=true -p:EnablePackageSigning=true -p:CodesignKey="Developer ID Application: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp (Non-App Store)" -p:CodesignEntitlements="Platforms\MacCatalyst\Entitlements.plist" -p:PackageSigningKey="Developer ID Installer: John Smith (AY2GDE9QM7)" -p:UseHardenedRuntime=true
注意
在 .NET 8 中 dotnet publish
,命令預設為組 Release
態。 因此,您可以從命令行省略組建組態。
發佈組建、簽署和封裝應用程式,然後將.pkg複製到 bin/Release/net8.0-maccatalyst/publish/ 資料夾。 如果您只使用單一架構發佈應用程式,則會發佈至 bin/Release/net8.0-maccatalyst/{architecture}/publish/ 資料夾。
在簽署過程中,可能需要輸入您的登入密碼,並允許 codesign
並 productbuild
執行:
如需命令的詳細資訊 dotnet publish
,請參閱 dotnet publish。
在項目檔中定義組建屬性
在命令行上指定建置參數的替代方法是在 中的項目檔中 <PropertyGroup>
指定它們。 下表列出一些常見的組建屬性:
屬性 | 值 |
---|---|
<ApplicationTitle> |
應用程式的用戶可見名稱。 |
<ApplicationId> |
應用程式的唯一識別碼,例如 com.companyname.mymauiapp 。 |
<ApplicationVersion> |
識別應用程式反覆項目的組建版本。 |
<ApplicationDisplayVersion> |
應用程式的版本號碼。 |
<CodesignKey> |
程式代碼簽署金鑰的名稱。 設定為散發憑證的名稱,如 Keychain Access 中所顯示。 |
<CodesignEntitlements> |
權利檔案的路徑,指定應用程式所需的權利。 設定為 Platforms\MacCatalyst\Entitlements.plist 。 |
<CodesignProvision> |
簽署應用程式套件組合時要使用的布建配置檔。 |
<CreatePackage> |
設定為 true ,以便在建置結束時為應用程式建立套件 (.pkg)。 |
<EnableCodeSigning> |
設定為 true ,以便啟用程式代碼簽署。 |
<EnablePackageSigning> |
設定為 true ,讓所建立的套件經過簽署。 |
<MtouchLink> |
項目的連結模式,可以是 None 、 SdkOnly 或 Full 。 |
<PackageSigningKey> |
簽署套件時要使用的套件簽署金鑰。 設定為安裝程序憑證的名稱,如 Keychain Access 中所顯示。 |
<RuntimeIdentifier> |
專案的執行時間識別碼 (RID) 。 發行 .NET MAUI Mac Catalyst 應用程式的組建預設為使用 maccatalyst-x64 和 maccatalyst-arm64 作為運行時間標識碼,以支援通用應用程式。 若要只支援單一架構,請指定 maccatalyst-x64 或 maccatalyst-arm64 。 |
<UseHardenedRuntime> |
設定為 true 以啟用強化運行時間,這是 Mac Catalyst 應用程式在 Mac App Store 外部散發的必要專案。 |
如需組建屬性的完整清單,請參閱 專案檔屬性。
重要
這些項目檔中不需要提供這些組建屬性的值。 當您發佈應用程式時,您也可以在命令行上提供它們。 這可讓您省略項目檔中的特定值。
下列範例示範建置和簽署 Mac Catalyst 應用程式以在 Mac App Store 外部散發的典型屬性群組:
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-maccatalyst|AnyCPU'">
<MtouchLink>SdkOnly</MtouchLink>
<EnableCodeSigning>True</EnableCodeSigning>
<EnablePackageSigning>true</EnablePackageSigning>
<CreatePackage>true</CreatePackage>
<CodesignKey>Developer ID Application: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp (Non-App Store)</CodesignProvision>
<CodesignEntitlements>Platforms\MacCatalyst\Entitlements.plist</CodesignEntitlements>
<PackageSigningKey>Developer ID Installer: John Smith (AY2GDE9QM7)</PackageSigningKey>
<UseHardenedRuntime>true</UseHardenedRuntime>
</PropertyGroup>
本範例 <PropertyGroup>
會新增條件檢查,除非條件檢查通過,否則無法處理設定。 條件檢查會尋找兩個專案:
- 組建組態會設定為
Release
。 - 目標架構會設定為包含文字
net8.0-maccatalyst
的內容。 - 平台會設定為
AnyCPU
。
如果上述任一條件失敗,則不會處理設定。 更重要的是, <CodesignKey>
不會設定、 <CodesignProvision>
和 <PackageSigningKey>
設定,以防止應用程式簽署。
新增上述屬性群組之後,應用程式可以從 Mac 上的命令行發佈,方法是開啟終端機並流覽至 .NET MAUI 應用程式項目的資料夾。 然後,執行下列命令:
dotnet build -f net8.0-maccatalyst -c Release
注意
在 .NET 8 中 dotnet publish
,命令預設為組 Release
態。 因此,您可以從命令行省略組建組態。
發佈組建、簽署和封裝應用程式,然後將.pkg複製到 bin/Release/net8.0-maccatalyst/publish/ 資料夾。
將您的應用程式公證
macOS 包含稱為 Gatekeeper 的技術,可協助確保只有受信任的軟體在 Mac 上執行。 當使用者下載並開啟安裝程式套件或應用程式時,Gatekeeper 會驗證軟體是否來自已識別的開發人員。 其作法是檢查開發人員標識符憑證,並檢查Apple是否已標註軟體,使其沒有已知的惡意內容,且尚未改變。 因此,在布建和發佈您的應用程式之後,您應該將其提交至 Apple 進行公證。 Apple 的公證服務會自動掃描您的開發人員標識碼簽署應用程式,並執行安全性檢查。 當公證成功時,您的軟體會獲派票證,讓 Gatekeeper 知道其已進行公證。
應用程式可以使用命令行工具提交至 Apple 的公證服務 notarytool
:
xcrun notarytool submit {my_package_filename} --wait --apple-id {my_apple_id} --password {my_app_specific_password} --team-id {my_team_id}
使用 notarytool
工具簽署 .NET MAUI Mac Catalyst .pkg 檔案的范例如下所示:
xcrun notarytool submit MyMauiApp-1.0.pkg --wait --apple-id johm.smith@provider.com --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7
旗 wait
標只會在公證服務完成處理提交之後才會結束 notarytool
,因此不需要輪詢服務的狀態。 apple-id
、 password
和 team-id
自變數可用來提供 App Store Connect 認證。 因為 App Store Connect 需要雙因素驗證,您必須為 notarytool
建立應用程式特定的密碼。 如需建立應用程式特定密碼的詳細資訊,請參閱 在 developer.apple.com 上使用應用程式特定密碼 ,使用Apple ID 登入應用程式。
將應用程式提交至 Apple 之後,公證程式通常需要不到一小時的時間。
注意
公證在5分鐘內完成大部分的應用程式。 如需避免來自公證服務之長時間回應時間的資訊,請參閱 避免長時間的公證回應時間和 developer.apple.com 的大小限制 。
如果公證成功,則表示法服務會產生已簽署安裝程式套件的票證及其內的應用程式套件組合。
如需公證的詳細資訊,請參閱 在發佈之前將macOS軟體公證。 如需將應用程式提交至 Apple 公證服務的其他方法,請參閱 將您的應用程式上傳至 developer.apple.com 上的公證服務 。 如需解決常見公證問題的相關信息,請參閱 解決常見的公證問題。
將票證裝訂到您的應用程式
Notarization 會產生已簽署安裝程式套件的票證及其內的應用程式套件組合,告知 Gatekeeper 您的應用程式已標示。 一旦公證完成,當用戶嘗試在macOS 10.14或更新版本上執行您的應用程式時,Gatekeeper 會在在線找到票證。
在公證成功之後,您應該使用 stapler
工具將票證附加至您的應用程式。 這可確保當網路連線無法使用時,Gatekeeper 仍可找到票證。 執行下列命令,將票證附加至您的 .pkg:
xcrun stapler staple {filename}.pkg
此工具 stapler
會擷取票證,並將其附加至安裝程式套件。 您會收到一則訊息,告知您,只要裝訂成功,主訂和驗證動作就會正常運作。
驗證公證
如果您要驗證公證,您可以使用下列命令來執行此動作:
xcrun stapler validate mypackage.pkg
散發應用程式
已簽署且已公證 的.pkg 可以在您選擇的位置安全地散發到 Mac App Store 之外,例如網頁伺服器。
如需在 Mac 上安全地開啟應用程式的資訊,請參閱 在 mac 上安全地開啟應用程式 support.apple.com。