Публикация приложения iOS с помощью командной строки
Чтобы опубликовать приложение из командной строки на Mac, откройте терминал и перейдите в папку для проекта приложения .NET Multi-platform App 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 |
Путь к файлу прав, который указывает необходимые для приложения права. |
Полный список свойств сборки см. в разделе "Свойства файла Project".
Важно!
Значения этих параметров не должны быть предоставлены в командной строке. Они также могут быть предоставлены в файле проекта. Если параметр указан в командной строке и в файле проекта, параметр командной строки имеет приоритет. Дополнительные сведения о предоставлении свойств сборки в файле проекта см. в разделе "Определение свойств сборки" в файле проекта.
Например, используйте следующую команду, чтобы создать и подписать IPA на Mac:
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/folder. Канал распространения для приложения указан в сертификате распространения, содержаемом в профиле подготовки. Сведения о создании профилей подготовки для разных каналов распространения см. в статье "Публикация приложения iOS для распространения App Store", публикация приложения iOS для нерегламентированного распространения и публикация приложения iOS для распространения в собственной среде.
Дополнительные сведения о команде dotnet publish
см. в статье dotnet publish.
Идентификаторы среды выполнения
RuntimeIdentifier
Если параметр не указан в командной строке или в файле проекта, процесс сборки по умолчанию будет использоваться идентификатором среды выполнения симулятора. Кроме того, передача идентификатора среды выполнения в командной строке может привести к сбою сборки при наличии нескольких целевых платформ в файле проекта. Дополнительные сведения см. в разделе "Указание как -f, так и -r для dotnet build не удается восстановить, если в файле проекта присутствует несколько платформ.
Одним из решений этих проблем является добавление следующего <PropertyGroup>
в файл проекта:
<PropertyGroup Condition="'$(IsPublishing)' == 'true' And '$(TargetFramework)' == 'net7.0-ios'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>
Затем используйте следующую команду для публикации приложения:
dotnet publish -f net7.0-ios -p:IsPublishing=true ...
Альтернативным решением этих проблем является добавление в файл проекта следующего <PropertyGroup>
вида:
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net7.0-ios'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier>
</PropertyGroup>
Затем используйте следующую команду для публикации приложения:
dotnet publish -f net7.0-ios -c Release ...
Определение свойств сборки в файле проекта
Альтернативой указанию параметров сборки в командной строке является указание параметров в файле проекта.<PropertyGroup>
В следующей таблице перечислены некоторые распространенные свойства сборки:
Свойство | Значение |
---|---|
<ApplicationTitle> |
Отображаемая пользователем имя приложения. |
<ApplicationId> |
Уникальный идентификатор приложения, например com.companyname.mymauiapp . |
<ApplicationVersion> |
Версия сборки, идентифицирующая итерацию приложения. |
<ApplicationDisplayVersion> |
Номер версии приложения. |
<RuntimeIdentifier> |
Идентификатор среды выполнения (RID) для проекта. Используйте ios-arm64 . |
<ArchiveOnBuild> |
Логическое значение, указывающее, следует ли создавать архив приложения. Используется true для создания IPA. |
<CodesignKey> |
Имя ключа подписывания кода. |
<CodesignProvision> |
Профиль подготовки, используемый при подписи пакета приложений. |
<CodesignEntitlements> |
Путь к файлу прав, который указывает необходимые для приложения права. |
Полный список свойств сборки см. в разделе "Свойства файла Project".
Важно!
Значения этих свойств сборки не должны быть предоставлены в файле проекта. Они также могут быть предоставлены в командной строке при публикации приложения. Это позволяет опущению определенных значений из файла проекта.
В следующем примере показана типичная группа свойств для создания и подписывания приложения iOS с его профилем подготовки:
<PropertyGroup Condition="$(TargetFramework.Contains('-ios')) and '$(Configuration)' == 'Release'">
<RuntimeIdentifier>ios-arm64</RuntimeIdentifier> <!-- Required in .NET 7 but not in .NET 8 -->
<CodesignKey>Apple Distribution: John Smith (AY2GDE9QM7)</CodesignKey>
<CodesignProvision>MyMauiApp</CodesignProvision>
<ArchiveOnBuild>true</ArchiveOnBuild>
</PropertyGroup>
В этом примере <PropertyGroup>
добавляется условие проверка, что предотвращает обработку параметров, если условие проверка не передается. Условие проверка ищет два элемента:
- Целевая платформа имеет значение, содержащее текст
-ios
. - Для конфигурации сборки задано значение
Release
.
Если одно из этих условий завершается ошибкой, параметры не обрабатываются. Более важно, что <CodesignKey>
<CodesignProvision>
параметры не заданы, предотвращая подпись приложения.
Публикация приложения iOS из Windows
Для создания собственных приложений iOS с помощью .NET MAUI требуется доступ к средствам сборки Apple, которые работают только на Mac. Из-за этого Visual Studio 2022 должен подключаться к сетевому компьютеру Mac для создания приложений iOS .NET MAUI. Дополнительные сведения см. в разделе "Пара с Mac для разработки iOS".
Примечание.
При первом входе пары в Mac в узел сборки Mac из Visual Studio 2022 он настраивает ключи SSH. Благодаря этим ключам в дальнейшем при входе не потребуется указывать имя пользователя или пароль.
Чтобы опубликовать приложение из командной строки в Windows, откройте терминал и перейдите в папку для проекта приложения .NET MAUI. dotnet publish
Выполните команду, указав те же параметры командной строки или свойства сборки в файле проекта, которые вы предоставили при публикации из Mac. Кроме того, необходимо указать следующие параметры командной строки:
Параметр | Значение |
---|---|
-p:ServerAddress |
IP-адрес узла сборки Mac. |
-p:ServerUser |
Имя пользователя, используемое при входе в узел сборки Mac. Используйте системное имя пользователя, а не полное имя. |
-p:ServerPassword |
Пароль для имени пользователя, используемого для входа в узел сборки Mac. |
-p:TcpPort |
TCP-порт, используемый для взаимодействия с узлом сборки Mac, который равен 58181. |
-p:_DotNetRootRemoteDirectory |
Папка на узле сборки Mac, содержащая пакет SDK для .NET. Используйте /Users/{macOS username}/Library/Caches/Xamarin/XMA/SDKs/dotnet/ . |
Важно!
Значения этих параметров также можно указать в файле проекта в качестве свойств сборки. Однако значения для <ServerAddress>
, <ServerUser>
и <ServerPassword>
<_DotNetRootRemoteDirectory>
обычно предоставляются в командной строке по соображениям безопасности.
Например, используйте следующую команду, чтобы создать и подписать IPA из Windows:
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 пытается войти в узел сборки Mac с помощью сохраненных ключей SSH.
Публикация создает и подписывает приложение, а затем копирует IPA в bin\Release\net8.0-ios\ios-arm64\publish на компьютере Windows. Канал распространения для приложения указан в сертификате распространения, содержаемом в профиле подготовки. Сведения о создании профилей подготовки рассылки для разных каналов распространения см. в статье "Публикация приложения iOS для распространения App Store", публикация приложения iOS для нерегламентированного распространения и публикация приложения iOS для распространения в собственной среде
В процессе публикации может потребоваться разрешить codesign
запуск на парном Компьютере Mac:
Устранение неполадок удаленной сборки
RuntimeIdentifier
Если параметр не указан при удаленном создании из командной строки в Windows, будет использоваться архитектура компьютера Windows. Это происходит из-за того, что RuntimeIdentifier
необходимо установить в начале процесса сборки, прежде чем сборка сможет подключиться к Mac, чтобы получить ее архитектуру.
RuntimeIdentifier
Если при удаленном создании visual Studio в Windows не задано, интегрированная среда разработки обнаружит архитектуру удаленного Mac и присвоит ей соответствующее значение. Переопределение по умолчанию можно достичь, задав свойство сборки $(ForceSimulatorX64ArchitectureInIDE)
:
<PropertyGroup Condition="'$(Configuration)' == 'Release' And '$(TargetFramework)' == 'net8.0-ios'">
<ForceSimulatorX64ArchitectureInIDE>true</ForceSimulatorX64ArchitectureInIDE>
</PropertyGroup>
Распространение приложения
IPA-файл можно распространить одним из следующих подходов:
- Нерегламентированные приложения можно распространять с помощью Apple Configurator. Дополнительные сведения см . в руководстве пользователя Apple Configurator по support.apple.com. |
- Приложения App Store можно отправлять в App Store через приложение, например Transporter. Для этого потребуется создать запись для приложения в App Store Подключение и создать пароль для конкретного приложения. Дополнительные сведения см. в статье "Создание записи приложения на developer.apple.com" и вход в приложения с помощью идентификатора Apple ID с помощью паролей для конкретного приложения на support.apple.com.
- Внутренние приложения можно распространять через безопасный веб-сайт или через мобильные Управление устройствами (MDM). Оба этих подхода требуют, чтобы приложение было подготовлено к распространению, которое включает подготовку манифеста. Дополнительные сведения см. в разделе "Распространение собственных приложений на устройствах Apple" на support.apple.com.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по