Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Альтернативой распространению приложений Mac Catalyst через Mac App Store является распространение приложений за пределами Mac App Store. С помощью этого подхода приложение Mac Catalyst можно разместить в расположении вашего выбора для скачивания. Участники программы разработчика Apple и Apple Developer Enterprise Program могут использовать этот подход к распространению.
Для распространения приложения Mac Catalyst требуется, чтобы приложение было подготовлено с помощью профиля подготовки. Профили подготовки — это файлы, содержащие сведения о подписи кода, а также удостоверение приложения и его предполагаемый механизм распространения.
Для распространения мультиплатформенного пользовательского интерфейса приложений .NET (.NET MAUI) Mac Catalyst за пределами Mac App Store необходимо создать профиль подготовки дистрибутива, характерный для него. Этот профиль позволяет приложению иметь цифровую подпись для выпуска, чтобы его можно было установить на Компьютерах Mac. Профиль подготовки дистрибутива содержит идентификатор приложения и сертификат приложения идентификатора разработчика. Вам потребуется создать сертификат приложения идентификатора разработчика для идентификации себя или организации, если у вас еще нет. Кроме того, необходимо создать сертификат установщика идентификатора разработчика, чтобы подписать пакет установщика приложения.
Процесс подготовки приложения .NET MAUI Mac Catalyst для распространения за пределами Mac App Store выглядит следующим образом:
- Создайте два запроса подписи сертификата. Дополнительные сведения см. в разделе "Создание запроса на подпись сертификата".
- Создайте сертификат приложения идентификатора разработчика. Дополнительные сведения см. в разделе "Создание сертификата приложения идентификатора разработчика".
- Создайте сертификат установщика идентификатора разработчика. Дополнительные сведения см. в разделе "Создание сертификата установщика идентификатора разработчика".
- Создайте идентификатор приложения. Дополнительные сведения см. в разделе "Создание идентификатора приложения".
- Создайте профиль подготовки. Дополнительные сведения см. в разделе "Создание профиля подготовки".
- Скачайте профиль подготовки. Дополнительные сведения см. в разделе "Скачать профиль подготовки" в Xcode.
Внимание
В этой статье показано, как подготовить распространение за пределами Mac App Store с помощью учетной записи разработчика Apple, которая входит в программу разработчика Apple. Ее также можно использовать для учетной записи разработчика Apple, которая входит в программу Apple Developer Enterprise, так как необходимые шаги в значительной степени идентичны.
После завершения подготовки необходимо подготовить приложение к публикации, опубликовать его и нотировать его с помощью следующего процесса:
- При необходимости добавьте в приложение права. Дополнительные сведения см. в разделе "Добавление прав".
- Обновите файл Info.plist приложения. Дополнительные сведения см. в разделе Update Info.plist.
- Отключите проверку подписи кода для приложения. Дополнительные сведения см. в разделе "Отключение проверки подписи кода".
- Опубликуйте приложение с помощью командной строки. Дополнительные сведения см. в статье "Публикация с помощью командной строки".
- Нотируйте приложение. Дополнительные сведения см. в разделе Notarize вашего приложения.
Создание запроса на подписывание сертификата
Прежде чем создать сертификат распространения, сначала необходимо создать запрос на подпись сертификата (CSR) в цепочке ключей в Mac:
На компьютере Mac запустите программу Keychain Access.
В разделе "Доступ к цепочке ключей" выберите помощник по > сертификату доступа > к цепочке ключей запрос сертификата из центра сертификации... пункт меню.
В диалоговом окне помощника по сертификату введите адрес электронной почты в поле "Адрес электронной почты пользователя".
В диалоговом окне помощника по сертификату введите имя ключа в поле "Общее имя".
В диалоговом окне помощника по сертификату оставьте поле адреса электронной почты ЦС пустым.
В диалоговом окне "Помощник по сертификату" нажмите кнопку "Сохранить на диск" и нажмите кнопку "Продолжить".
Сохраните запрос на подпись сертификата в известном расположении.
В диалоговом окне помощника по сертификату нажмите кнопку "Готово".
Закройте доступ к цепочке ключей.
Повторите этот процесс, чтобы создать второй запрос на подпись сертификата. Первый CSR будет использоваться для создания сертификата приложения идентификатора разработчика. Второй будет использоваться для создания сертификата установщика идентификатора разработчика.
Внимание
Вы не можете использовать тот же запрос на подпись сертификата для создания сертификата приложения идентификатора разработчика и сертификата установщика идентификатора разработчика.
Создание сертификата приложения идентификатора разработчика
CSR позволяет создать сертификат идентификатора разработчика, который подтверждает удостоверение. Сертификат идентификатора разработчика должен быть создан с помощью Идентификатора Apple ID для учетной записи разработчика Apple:
В веб-браузере войдите в учетную запись разработчика Apple.
В учетной записи разработчика Apple выберите вкладку "Сертификаты" и "Профили".
На странице "Сертификаты", "Идентификаторы и профили" нажмите + кнопку, чтобы создать новый сертификат.
На странице "Создание сертификата" нажмите переключатель приложения идентификатора разработчика перед нажатием кнопки "Продолжить":
На странице "Создать сертификат" нажмите переключатель G2 Sub-CA и нажмите кнопку "Выбрать файл":
В диалоговом окне выбора файлов для отправки выберите первый созданный ранее файл запроса сертификата (файл с расширением
.certSigningRequest
файла) и нажмите кнопку "Отправить".На странице "Создание сертификата" нажмите кнопку "Продолжить":
На странице "Скачать сертификат" нажмите кнопку "Скачать":
Файл сертификата (файл с расширением
.cer
) будет скачан в выбранное расположение.На компьютере Mac дважды щелкните скачанный файл сертификата, чтобы установить сертификат в цепочку ключей. Сертификат отображается в категории "Мои сертификаты" в keychain Access и начинается с приложения идентификатора разработчика:
Примечание.
Запишите полное имя сертификата в keychain Access. Это потребуется при подписи приложения.
Создание сертификата установщика идентификатора разработчика
CSR позволяет создать сертификат установщика идентификатора разработчика, который требуется для подписывания пакета установщика приложения. Сертификат установщика должен быть создан с помощью идентификатора Apple ID для учетной записи разработчика Apple:
В учетной записи разработчика Apple выберите вкладку "Сертификаты" и "Профили".
На странице "Сертификаты", "Идентификаторы и профили" нажмите + кнопку, чтобы создать новый сертификат.
На странице "Создание сертификата" нажмите переключатель установщика идентификатора разработчика перед нажатием кнопки "Продолжить":
На странице "Создать сертификат" нажмите переключатель G2 Sub-CA и нажмите кнопку "Выбрать файл":
В диалоговом окне выбора файлов для отправки выберите второй созданный ранее файл запроса сертификата (файл с расширением
.certSigningRequest
файла) и нажмите кнопку "Отправить".На странице "Создание сертификата" нажмите кнопку "Продолжить":
На странице "Скачать сертификат" нажмите кнопку "Скачать":
Файл сертификата (файл с расширением
.cer
) будет скачан в выбранное расположение.На компьютере Mac дважды щелкните скачанный файл сертификата, чтобы установить сертификат в цепочку ключей. Сертификат отображается в категории "Мои сертификаты" в keychain Access и начинается с установщика идентификатора разработчика:
Примечание.
Запишите полное имя сертификата в keychain Access. Это потребуется при подписи приложения.
Создание профиля распространения
Профиль подготовки дистрибутива позволяет приложению .NET MAUI Mac Catalyst быть цифрово подписанным для выпуска, чтобы его можно было установить на другом Компьютере Mac. Профиль подготовки для распространения за пределами Mac App Store содержит идентификатор приложения и сертификат приложения идентификатора разработчика.
Создание идентификатора приложения
Идентификатор приложения необходим для идентификации распространяемого приложения. Идентификатор приложения похож на строку обратного DNS, которая однозначно идентифицирует приложение и должна быть идентична идентификатору пакета для приложения. Вы можете использовать тот же идентификатор приложения, который использовался при развертывании приложения на устройстве для тестирования.
Существует два типа идентификатора приложения:
- Подстановочные знаки. Идентификатор приложения с подстановочным знаком позволяет использовать один идентификатор приложения для сопоставления нескольких приложений и обычно принимает форму
com.domainname.*
. Идентификатор приложения с подстановочным знаком можно использовать для распространения нескольких приложений и использовать для приложений, которые не поддерживают возможности для конкретных приложений. - Явная транзакция. Явный идентификатор приложения является уникальным для одного приложения и обычно принимает форму
com.domainname.myid
. Явный идентификатор приложения позволяет распространять одно приложение с соответствующим идентификатором пакета. Явные идентификаторы приложений обычно используются для приложений, которые обеспечивают специальные возможности приложения, такие как Apple Pay или Game Center. Дополнительные сведения о возможностях см. в разделе "Возможности".
Чтобы создать новый идентификатор приложения, выполните приведенные действия.
В учетной записи разработчика Apple перейдите к сертификатам, идентификаторам и профилям.
На странице "Сертификаты", "Идентификаторы и профили" выберите вкладку "Идентификаторы".
На странице "Идентификаторы" нажмите + кнопку, чтобы создать новый идентификатор приложения.
На странице "Регистрация нового идентификатора" нажмите переключатель "Идентификаторы приложений" перед нажатием кнопки "Продолжить":
На странице "Регистрация нового идентификатора" выберите "Приложение" перед нажатием кнопки "Продолжить":
На странице "Регистрация идентификатора приложения" введите описание и нажмите кнопку "Явный" или "Идентификатор пакета подстановочных знаков". Затем введите идентификатор пакета для приложения в обратном формате DS:
Внимание
Идентификатор пакета, который вы вводите, должен соответствовать идентификатору пакета в файле Info.plist в проекте приложения.
Идентификатор пакета для приложения .NET MAUI хранится в файле проекта в качестве свойства идентификатора приложения. В Visual Studio в Обозреватель решений щелкните правой кнопкой мыши проект приложения .NET MAUI и выберите "Свойства". Затем перейдите на вкладку "Общие > общие " MAUI. Поле идентификатора приложения содержит идентификатор пакета.
При обновлении значения поля идентификатора приложения значение идентификатора пакета в info.plist будет автоматически обновлено.
На странице "Регистрация идентификатора приложения" выберите все возможности, которые использует приложение. Все возможности должны быть настроены как на этой странице, так и в файле Entitlements.plist в проекте приложения. Дополнительные сведения см. в разделе "Возможности и права".
На странице "Регистрация идентификатора приложения" нажмите кнопку "Продолжить".
На странице "Подтверждение идентификатора приложения" нажмите кнопку "Зарегистрировать".
Создание профиля обеспечения
После создания идентификатора приложения необходимо создать профиль подготовки дистрибутива. Этот профиль позволяет приложению иметь цифровую подпись для выпуска, чтобы его можно было установить на Компьютерах Mac.
Чтобы создать профиль подготовки для распространения за пределами Mac App Store, выполните следующие действия.
На странице "Сертификаты", "Идентификаторы и профили" учетной записи разработчика Apple выберите вкладку "Профили ".
На вкладке "Профили" нажмите + кнопку, чтобы создать новый профиль.
На странице "Регистрация нового профиля подготовки" нажмите переключатель идентификатора разработчика перед нажатием кнопки "Продолжить":
На странице "Создание профиля подготовки" нажмите переключатель Mac Catalyst. Затем в раскрывающемся списке идентификатора приложения выберите идентификатор приложения, созданный ранее, прежде чем нажать кнопку "Продолжить ":
На странице "Создание профиля подготовки" выберите переключатель, соответствующий сертификату распространения, прежде чем нажать кнопку "Продолжить":
На странице "Создание профиля подготовки" введите имя профиля подготовки перед нажатием кнопки "Создать":
Примечание.
Запишите имя профиля подготовки, так как оно потребуется при подписи приложения.
На странице "Создание профиля подготовки" при необходимости нажмите кнопку "Скачать", чтобы скачать профиль подготовки.
Примечание.
Сейчас не нужно скачать профиль подготовки. Вместо этого вы сделаете это в Xcode.
Скачивание профиля подготовки в Xcode
После создания профиля подготовки в учетной записи разработчика Apple Xcode может скачать его, чтобы он был доступен для подписывания приложения:
На компьютере Mac запустите Xcode.
В Xcode выберите пункт меню Xcode > Preferences...
В диалоговом окне "Параметры" выберите вкладку "Учетные записи".
На вкладке "Учетные записи" нажмите + кнопку, чтобы добавить учетную запись разработчика Apple в Xcode:
Во всплывающем окне типа учетной записи выберите Apple ID и нажмите кнопку "Продолжить ":
Во всплывающем окне входа введите идентификатор Apple ID и нажмите кнопку "Далее ".
Во всплывающем окне входа введите пароль Apple ID и нажмите кнопку "Далее ":
На вкладке "Учетные записи" нажмите кнопку "Управление сертификатами", чтобы убедиться, что сертификат распространителя скачан.
На вкладке "Учетные записи" нажмите кнопку "Скачать профили вручную" , чтобы скачать профили подготовки:
Дождитесь завершения скачивания и закройте Xcode.
Добавление прав
Песочница приложений Apple ограничивает доступ к системным ресурсам и данным пользователей в приложениях Mac, чтобы содержать ущерб, если приложение скомпрометировано. При необходимости его можно включить для приложений Mac Catalyst, распределенных за пределами Mac App Store.
Это можно сделать, добавив файл Entitlements.plist в папку Platform/MacCatalyst проекта приложения .NET MAUI:
<?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. Сведения о назначении песочницы приложения см. в разделе "Песочница приложений".
Если приложение открывает исходящие сетевые подключения, вам также потребуется добавить com.apple.security.network.client
ключ типа boolean
в файл 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>
Сведения о правах исходящих сетевых подключений см. в developer.apple.com com.apple.security.network.client .
Обновление 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.
Настройка языка и региона по умолчанию для приложения
CFBundleDevelopmentRegion
Задайте для ключа в info.plist приложения значение, string
представляющее область разработки в собственном коде локализации:
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
Значение ключа должно быть конструктором языка с необязательным конструктором регионов. Дополнительные сведения см. в разделе CFBundleDevelopmentRegion на developer.apple.com.
Настройка ключа авторских прав
NSHumanReadableCopyright
Задайте ключ в info.plist string
приложения, который представляет уведомление об авторских правах, доступное для чтения для вашего приложения:
<key>NSHumanReadableCopyright</key>
<string>MyMauiApp © 2023</string>
Дополнительные сведения см. в статье NSHumanReadableCopyright на developer.apple.com.
Объявление использования шифрования приложения
Если ваше приложение использует шифрование и планируете распространять его за пределами США или Канады, это зависит от требований к экспорту США. Вы можете указать сведения об использовании шифрования приложения в файле Info.plist .
Это достигается путем добавления ITSAppUsesNonExemptEncryption
ключа в info.plist приложения со boolean
значением, которое указывает, используется ли ваше приложение шифрование:
<key>ITSAppUsesNonExemptEncryption</key>
<false/>
Дополнительные сведения см. в разделе "Соответствие правилам экспорта шифрования" по developer.apple.com.
Отключение проверки подписи кода
В настоящее время при попытке опубликовать приложение .NET MAUI Mac Catalyst для распространения за пределами Mac App Store, если вы выполнили требования к подготовке, вы получите ошибку о codesign
выходе из кода 3:
/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 Catalyst из командной строки на Компьютере Mac, откройте терминал и перейдите в папку для проекта приложения .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-arm64 в maccatalyst-x64 качестве идентификаторов среды выполнения для поддержки универсальных приложений. Чтобы поддерживать только одну архитектуру, укажите 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-arm64 в maccatalyst-x64 качестве идентификаторов среды выполнения для поддержки универсальных приложений. Чтобы поддерживать только одну архитектуру, укажите maccatalyst-x64 или maccatalyst-arm64 . |
Полный список свойств сборки см. в разделе "Свойства файла Project".
Внимание
Значения для всех этих параметров не должны быть предоставлены в командной строке. Они также могут быть предоставлены в файле проекта. Если параметр указан в командной строке и в файле проекта, параметр командной строки имеет приоритет. Дополнительные сведения о предоставлении свойств сборки в файле проекта см. в разделе "Определение свойств сборки" в файле проекта.
Например, используйте следующую команду, чтобы создать и подписать .pkg на Компьютере Mac для распространения за пределами 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/ folder. Если вы публикуете приложение с использованием только одной архитектуры, оно будет опубликовано в bin/Release/net8.0-maccatalyst/{architecture}/publish/ folder.
Во время процесса подписывания может потребоваться ввести пароль для входа и разрешить 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-arm64 в maccatalyst-x64 качестве идентификаторов среды выполнения для поддержки универсальных приложений. Чтобы поддерживать только одну архитектуру, укажите maccatalyst-x64 или maccatalyst-arm64 . |
<UseHardenedRuntime> |
Установите для true включения защищенной среды выполнения, которая требуется для приложений Mac Catalyst, распределенных за пределами Mac App Store. |
Полный список свойств сборки см. в разделе "Свойства файла Project".
Внимание
Значения этих свойств сборки не должны быть предоставлены в файле проекта. Они также могут быть предоставлены в командной строке при публикации приложения. Это позволяет опущению определенных значений из файла проекта.
В следующем примере показана типичная группа свойств для создания и подписывания приложения 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/ folder.
Нотализация приложения
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 [email protected] --password fqtk-cprr-gqdt-bvyo --team-id AY2GDE9QM7
Флаг wait
сообщает notarytool
выйти только после завершения обработки отправки нотарионной службы, поэтому удаление необходимости опроса службы за его состоянием. password
Аргументы apple-id
и team-id
аргументы используются для предоставления учетных данных App Store Connect. Так как Для App Store Connect требуется двухфакторная проверка подлинности, необходимо создать пароль notarytool
для конкретного приложения. Сведения о создании пароля для конкретного приложения см. в статье "Вход в приложения с помощью Идентификатора Apple ID" с помощью паролей для конкретного приложения в developer.apple.com.
После отправки приложения в Apple процесс нотации обычно занимает менее часа.
Примечание.
Нотаризация завершается для большинства приложений в течение 5 минут. Сведения о том, как избежать длительного времени отклика из нотарии службы, см. в разделе "Избегайте длительного времени ответа на запросы и ограничения размера" на developer.apple.com.
При условии успешной нотарии служба создает билет для подписанного пакета установщика и пакета приложения внутри него.
Дополнительные сведения о нотации см. в разделе Нотаризация программного обеспечения macOS перед распространением. Другие подходы к отправке приложения в нотарийную службу Apple см. в статье "Отправка приложения в службу нотации" на developer.apple.com. Сведения об устранении распространенных проблем нотации см. в разделе "Устранение распространенных проблем нотации".
Создание запроса в приложение
Нотаризация создает билет на подписанный пакет установщика и пакет приложения внутри него, чтобы сообщить 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".
См. также
- Подготовка приложения к распространению на developer.apple.com
- Защищенное время выполнения в developer.apple.com
- Настройка рабочего процесса нотации на developer.apple.com