使用命令行發佈 iOS 應用程式
若要從 Mac 上的命令列發佈您的應用程式,請開啟終端機並流覽至 .NET 多平臺應用程式 UI (.NET MAUI) 應用程式專案的資料夾。 dotnet publish
執行 命令,並提供下列參數:
參數 | 值 |
---|---|
-f 或 --framework |
目標架構,也就是 net8.0-ios 。 |
-c 或 --configuration |
組建組態,也就是 Release 。 |
警告
嘗試發佈 .NET MAUI 解決方案會導致 dotnet publish
命令嘗試個別發佈方案中的每個專案,這可能會導致將其他項目類型新增至方案時發生問題。 因此, dotnet publish
命令的範圍應設定為 .NET MAUI 應用程式專案。
如果在項目檔中未提供其他建置參數,則可以在命令行上 <PropertyGroup>
指定其他建置參數。 下表列出一些常見的參數:
參數 | 值 |
---|---|
-p:ApplicationTitle |
應用程式的用戶可見名稱。 |
-p:ApplicationId |
應用程式的唯一識別碼,例如 com.companyname.mymauiapp 。 |
-p:ApplicationVersion |
識別應用程式反覆項目的組建版本。 |
-p:ApplicationDisplayVersion |
應用程式的版本號碼。 |
-p:RuntimeIdentifier |
專案的執行時間識別碼 (RID) 。 使用 ios-arm64 。 |
-p:ArchiveOnBuild |
布爾值,指出是否要產生應用程式封存。 使用 true 來產生 .ipa。 |
-p:CodesignKey |
程式代碼簽署金鑰的名稱。 |
-p:CodesignProvision |
簽署應用程式套件組合時要使用的布建配置檔。 |
-p:CodesignEntitlements |
權利檔案的路徑,指定應用程式所需的權利。 |
如需組建屬性的完整清單,請參閱 專案檔屬性。
重要
這些參數的值不需要在命令行上提供。 您也可以在項目檔中提供它們。 當在命令行和項目檔中提供參數時,命令行參數會優先使用。 如需在項目檔中提供建置屬性的詳細資訊,請參閱 在專案檔中定義組建屬性。
例如,使用下列命令在 Mac 上建置和簽署 .ipa :
dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp"
注意
在 .NET 8 中 dotnet publish
,命令預設為組 Release
態。 因此,您可以從命令行省略組建組態。 此外, dotnet publish
命令也會預設為 ios-arm64
RuntimeIdentifier
。 因此, RuntimeIdentifier
也可以從命令列省略 。
發佈組建並簽署應用程式,然後將 .ipa 複製到 bin/Release/net8.0-ios/ios-arm64/publish/ 資料夾。 應用程式的散發通道是在布建配置檔中包含的散發憑證中指定。 如需為不同散發通道建立佈建配置檔的詳細資訊,請參閱 發佈適用於App Store散發的iOS應用程式、 發佈適用於臨機操作散發的iOS 應用程式,以及 發佈適用於內部散發的iOS 應用程式。
如需命令的詳細資訊 dotnet publish
,請參閱 dotnet publish。
在項目檔中定義組建屬性
在命令行上指定建置參數的替代方法是在 中的項目檔中 <PropertyGroup>
指定它們。 下表列出一些常見的組建屬性:
屬性 | 值 |
---|---|
<ApplicationTitle> |
應用程式的用戶可見名稱。 |
<ApplicationId> |
應用程式的唯一識別碼,例如 com.companyname.mymauiapp 。 |
<ApplicationVersion> |
識別應用程式反覆項目的組建版本。 |
<ApplicationDisplayVersion> |
應用程式的版本號碼。 |
<RuntimeIdentifier> |
專案的執行時間識別碼 (RID) 。 使用 ios-arm64 。 |
<ArchiveOnBuild> |
布爾值,指出是否要產生應用程式封存。 使用 true 來產生 .ipa。 |
<CodesignKey> |
程式代碼簽署金鑰的名稱。 |
<CodesignProvision> |
簽署應用程式套件組合時要使用的布建配置檔。 |
<CodesignEntitlements> |
權利檔案的路徑,指定應用程式所需的權利。 |
如需組建屬性的完整清單,請參閱 專案檔屬性。
重要
這些項目檔中不需要提供這些組建屬性的值。 當您發佈應用程式時,您也可以在命令行上提供它們。 這可讓您省略項目檔中的特定值。
下列範例示範建置和簽署 iOS 應用程式的一般屬性群組及其布建設定檔:
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp</CodesignProvision>
<ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>
本範例 <PropertyGroup>
會新增條件檢查,除非條件檢查通過,否則無法處理設定。 條件檢查會尋找兩個專案:
- 目標架構會設定為包含文字
-ios
的內容。 - 組建組態會設定為
Release
。
如果上述任一條件失敗,則不會處理設定。 更重要的是, <CodesignKey>
不會設定 和 <CodesignProvision>
設定,以防止應用程式簽署。
從 Windows 發佈 iOS 應用程式
使用 .NET MAUI 建置原生 iOS 應用程式需要存取 Apple 的建置工具,而 Apple 只會在 Mac 上執行。 因此,Visual Studio 2022 必須連線到可網路存取的 Mac,才能建置 .NET MAUI iOS 應用程式。 如需詳細資訊,請參閱 與Mac配對以進行iOS開發。
注意
第一次從 Visual Studio 2022 配對 Mac 登入 Mac 組建主機時,會設定 SSH 金鑰。 如果使用這些金鑰,則未來的登入不需要使用者名稱或密碼。
若要從 Windows 上的命令行發佈您的應用程式,請開啟終端機並流覽至 .NET MAUI 應用程式項目的資料夾。 dotnet publish
執行命令,提供您從 Mac 發佈時所提供的相同命令行參數,或建置專案檔中的屬性。 此外,您必須提供下列命令行參數:
參數 | 值 |
---|---|
-p:ServerAddress |
Mac 組建主機的IP位址。 |
-p:ServerUser |
登入 Mac 組建主機時要使用的用戶名稱。 請使用您的系統使用者名稱,而非完整名稱。 |
-p:ServerPassword |
用來登入 Mac 組建主機的使用者名稱密碼。 |
-p:TcpPort |
用來與 Mac 組建主機通訊的 TCP 連接埠,也就是 58181。 |
-p:_DotNetRootRemoteDirectory |
Mac 組建主機上包含 .NET SDK 的資料夾。 使用 /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/ 。 |
重要
這些參數的值也可以在項目檔中提供,做為建置屬性。 不過,基於安全性考慮,通常會在命令行上提供、 <ServerUser>
<ServerPassword>
和 <_DotNetRootRemoteDirectory>
的值<ServerAddress>
。
例如,使用下列命令從 Windows 建置並簽署 .ipa :
dotnet publish -f net8.0-ios -c Release -p:ArchiveOnBuild=true -p:RuntimeIdentifier=ios-arm64 -p:CodesignKey="Apple Distribution: John Smith (AY2GDE9QM7)" -p:CodesignProvision="MyMauiApp" -p:ServerAddress={macOS build host IP address} -p:ServerUser={macOS username} -p:ServerPassword={macOS password} -p:TcpPort=58181 -p:_DotNetRootRemoteDirectory=/Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/
注意
在 .NET 8 中 dotnet publish
,命令預設為組 Release
態。 因此,您可以從命令行省略組建組態。 此外, dotnet publish
命令也會預設為 ios-arm64
RuntimeIdentifier
。 因此, RuntimeIdentifier
也可以從命令列省略 。
注意
ServerPassword
如果參數從命令行組建調用中省略,[配對至 Mac] 會嘗試使用其儲存的 SSH 金鑰登入 Mac 組建主機。
發佈組建並簽署應用程式,然後將 .ipa 複製到 Windows 電腦上的 bin\Release\net8.0-ios\ios-arm64\publish 資料夾。 應用程式的散發通道是在布建配置檔中包含的散發憑證中指定。 如需為不同散發通道建立散發佈建配置檔的詳細資訊,請參閱 發佈適用於App Store散發的iOS應用程式、 發佈適用於臨機操作散發的iOS 應用程式,以及 發佈適用於內部散發的iOS 應用程式
在發佈程式期間,可能需要允許 codesign
在您的配對 Mac 上執行:
針對遠端組建進行疑難解答
RuntimeIdentifier
如果在從 Windows 上的命令行遠端建置時未指定 ,則會使用 Windows 電腦的架構。 RuntimeIdentifier
這是因為 必須在建置程式初期設定 ,組建才能連線到Mac以衍生其架構。
RuntimeIdentifier
如果在 Windows 上使用 Visual Studio 從遠端建置時未指定 ,IDE 會偵測遠端 Mac 的架構並據以設定。 藉由設定 $(ForceSimulatorX64ArchitectureInIDE)
build 屬性,即可覆寫預設值:
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>
散發應用程式
.ipa 檔案可以使用下列其中一種方法來散發:
- 臨機操作應用程式可以使用Apple Configurator散發。 如需詳細資訊,請參閱 support.apple.com 上的Apple Configurator使用者指南 。 |
- App Store 應用程式可以透過 Transporter 等應用程式上傳至 App Store。 這會要求您在 App Store Connect 中建立應用程式的記錄,並建立應用程式特定的密碼。 如需詳細資訊,請參閱 在 developer.apple.com 上建立應用程式記錄 ,並使用 support.apple.com 上的應用程式特定密碼 ,使用 Apple ID 登入應用程式。
- 內部應用程式可以透過安全網站或透過行動裝置 裝置管理 (MDM) 散發。 這兩種方法都需要應用程式準備好進行散發,其中包括指令清單的準備。 如需詳細資訊,請參閱 將專屬的內部應用程式散發至 support.apple.com 上的 Apple 裝置 。