Публикация приложений Xamarin.iOS в App Store

Чтобы опубликовать приложение в App Store, разработчик должен сначала отправить его на проверку компании Apple вместе со снимками экранов, описанием, значками и другими сведениями. После утверждения приложения Apple поместит его в App Store, где пользователи смогут приобрести его и установить непосредственно со своих устройств iOS.

В этом руководстве приведены действия по подготовке приложения к публикации в App Store и отправке его на проверку в компанию Apple. В частности, здесь описано следующее:

  • Выполнение правил проверки приложений в App Store
  • Настройка идентификатора и назначений приложения
  • Настройка значка App Store и значков приложений
  • Настройка профиля подготовки App Store
  • Обновление конфигурации сборки "Выпуск"
  • Настройка приложения в iTunes Connect
  • Сборка приложения и отправка его в Apple

Внимание

Корпорация Apple объявила, что начиная с марта 2019 г. все публикуемые в App Store приложения и обновления должны быть собраны с использованием пакета SDK для iOS 12.1 или более поздних версий, входящего в Xcode версии 10.1 и выше. Кроме того, приложения должны поддерживать размеры экранов iPhone XS и iPad Pro с диагональю 12,9 дюйма.

Правила App Store

Перед отправкой приложения на публикацию в App Store убедитесь, что оно соответствует стандартам, указанным в Правилах проверки приложений App Store компании Apple. Apple проверяет публикуемые в App Store приложения на соответствие этим требованиям. При несоответствии Apple отклоняет приложение. В этом случае вам следует устранить указанные несоответствия и отправить его заново. Таким образом, рекомендуется ознакомиться с правилами на ранних этапах процесса разработки.

Прежде чем отправлять приложение, проверьте следующие моменты:

  1. Убедитесь, что описание приложения соответствует его функциональным возможностям.
  2. Протестируйте приложение на отсутствие сбоев при обычном использовании. Приложение нужно проверить на всех устройствах с iOS, которые оно поддерживает.

Кроме того, ознакомьтесь с ресурсами по App Store, предлагаемыми компанией Apple.

Настройка идентификатора и назначений приложения

Каждое iOS-приложение имеет уникальный идентификатор со связанным набором служб приложений, называемых назначениями. Назначения позволяют приложению выполнять различные действия, например получать push-уведомления, обращаться к функциям iOS, таким как HealthKit, и многое другое.

Чтобы создать идентификатор приложения и выбрать необходимые назначения, зайдите на портал для разработчиков Apple и выполните следующие действия:

  1. Войдите на портал для разработчиков Apple. Если у вас еще нет идентификатора Apple ID, создайте его.
  2. Выберите "Сертификаты", "Идентификаторы и профили", а затем перейдите в раздел Идентификаторы.
  3. Нажмите кнопку + рядом с заголовком "Идентификаторы" в верхней части страницы.
  4. Выберите Идентификаторы приложений и щелкните Продолжить.
  5. Выберите Приложения, а затем нажмите кнопку Продолжить.
  6. Для нового приложения введите значения в поля Описание и Идентификатор пакета и выберите значения в поле Возможности, которые потребуются для приложения Xamarin.iOS. Более подробно службы приложений описаны в руководстве Работа с возможностями в Xamarin.iOS. Завершив настройку параметров, нажмите кнопку Продолжить.
  7. Нажмите кнопку Зарегистрировать, чтобы закончить процесс создания идентификатора приложения.

Помимо выбора и настройки требуемых служб приложений при задании ИД приложения необходимо также настроить ИД и назначения приложения в проекте Xamarin.iOS, отредактировав файлы Info.plist и Entitlements.plist. Дополнительные сведения см. в руководстве Работа с разрешениями в Xamarin.iOS, где описано, как создать файл Entitlements.plist и какие параметры назначений он содержит.

Добавление значка App Store

При отправке приложения в Apple убедитесь, что оно включает каталог ресурсов, содержащий значок App Store. Соответствующие инструкции см. в руководстве по значкам App Store в Xamarin.iOS.

Настройка значков приложений и экранов запуска

Чтобы Apple опубликовала приложение в App Store, оно должно содержать требуемые значки и экраны запуска для всех поддерживаемых им iOS-устройств. Дополнительные сведения о настройке значков приложений и экранов запуска см. в следующих руководствах:

Создание и установка профиля подготовки App Store

Для управления развертыванием определенных сборок приложений в iOS используются профили подготовки. Эти файлы содержат информацию о сертификате, используемом для подписывания приложения, идентификатор приложения, а также о том, где можно устанавливать приложение. Для разработки и установки на определенные устройства профиль подготовки также включает список разрешенных устройств, где можно развертывать приложение. Однако для публичного распространения через App Store в приложение включаются только сертификат и идентификатор, поскольку другие механизмы установки не используются.

Чтобы создать и установить профиль подготовки App Store, выполните следующие действия:

  1. Войдите на портал для разработчиков Apple.
  2. Выберите "Сертификаты", "Идентификаторы и профили", а затем перейдите в раздел Профили.
  3. Нажмите кнопку +, выберите Разработка приложений iOS и App Store и щелкните Продолжить.
  4. Выберите свой ИД приложения в списке, а затем щелкните Продолжить.
  5. Выберите сертификат для подписи и вновь щелкните Продолжить.
  6. Выберите устройства для включения в этот профиль и щелкните Продолжить.
  7. Введите значение в поле Имя профиля подготовки и щелкните Создать, чтобы создать профиль.
  8. Воспользуйтесь инструментами Xamarin по управлению учетными записями Apple и скачайте только что созданный профиль подготовки на свой Mac. Если вы работаете на Mac, вы также можете скачать профиль подготовки непосредственно с портала для разработчиков Apple и запустить его установку двойным щелчком.

Подробные инструкции см. в разделах Создание профиля распространения и Выбор профиля распространения в проекте Xamarin.iOS.

Обновление конфигурации сборки "Выпуск"

В новых проектах Xamarin.iOS автоматически создаются конфигурации сборкиОтладка и Выпуск. Для корректной настройки сборки Выпуск выполните следующие действия:

  1. На Панели решения откройте файл Info.plist, расположенный в проекте iOS.

  2. Вы должны находиться в представлении Приложение. Его можно задать, щелкнув параметр на нижней панели навигации.

  3. В качестве варианта подписывания выберите Подготовка вручную. Сохранить и закрыть файл.

  4. Щелкните правой кнопкой мыши имя проекта на Панели решения, выберите Параметры и перейдите на вкладку Сборка iOS.

  5. Для элемента Конфигурация задайте значение Выпуск, а для элемента Платформа — iPhone.

  6. Чтобы выполнить сборку с конкретным пакетом SDK для iOS, выберите его в списке Версия SDK. В противном случае оставьте значение по умолчанию.

  7. Компоновка уменьшает общий размер приложения за счет исключения неиспользуемого кода.

    • В большинстве случаев для Поведения компоновщика рекомендуется оставить значение по умолчанию: Компоновать только пакеты SDK платформы.
    • Использование параметра Не компоновать может привести к тому, что Apple отклонит приложение из-за наличия необщедоступных API iOS в Xamarin.iOS, которые будут связаны с параметром Компоновать только пакеты SDK платформы.
    • Параметр Компоновать все следует использовать с осторожностью, так как он удалит код из всех сборок проекта, включая сторонние библиотеки. Он может удалить код, который библиотека стороннего производителя может использовать только через отражение, недоступное для обнаружения компоновщику, так как он выполняет статический анализ кода для определения используемого кода библиотеки. Используйте параметр Компоновать все с осторожностью, так как может потребоваться вручную сохранить некоторые классы или методы, чтобы избежать сбоев во время выполнения из-за отсутствия кода.
    • Дополнительные сведения см. в руководстве Компоновка приложений Xamarin.iOS.
  8. Для устройств с iOS 11 необходимо выбрать одну из архитектур, поддерживающих ARM64. Дополнительные сведения о сборке для 64-разрядных устройств с iOS см. в разделе по активации 64-разрядных сборок приложений Xamarin.iOS в документации Особенности 32- и 64-разрядных платформ.

  9. При необходимости вы можете использовать компилятор LLVM для создания более быстрого и компактного кода. Однако в этом случае увеличивается время компиляции.

  10. Чтобы еще сильнее уменьшить размер приложения, установите флажок Оптимизировать изображения PNG.

  11. Включать отладку не следует, так как это приведет к неоправданному увеличению размера сборки.

  12. Исходя из потребностей вашего приложения, вы также можете настроить тип сборки мусора и конфигурацию интернационализации.

    После настройки параметров, как описано выше, параметры сборки должны выглядеть примерно следующим образом.

    iOS Build settings

    Дополнительные сведения о параметрах сборки см. в руководстве Механизм сборки iOS.

  13. Перейдите на вкладку подписывания пакета iOS. Если параметры здесь не редактируются, убедитесь, что в файле Info.plist выбрана подготовка вручную.

  14. Для элемента Конфигурация выберите значение Выпуск, а для элемента Платформа — iPhone.

  15. В качестве значения Удостоверение подписывания выберите Распределение (автоматически).

  16. В качестве Профиля подготовки выберите профиль подготовки App Store, созданный выше.

    Параметры подписывания для пакета проекта теперь должны выглядеть примерно так:

    iOS Bundle Signing

  17. Нажмите кнопку ОK, чтобы сохранить измененные свойства проекта.

Настройка приложения в iTunes Connect

iTunes Connect — это набор веб-инструментов для управления iOS-приложениями в App Store. Необходимо должным образом настроить приложение Xamarin.iOS в iTunes Connect, прежде чем отправлять его на проверку в Apple и публиковать в App Store.

Чтобы узнать, как это сделать, см. руководство Настройка приложения в iTunes Connect.

Сборка и отправка приложения

Когда вы настроите должным образом параметры сборки и iTunes Connect будет ожидать отправки, вы можете выполнить сборку приложения и отправить его в Apple.

  1. В Visual Studio для Mac выберите конфигурацию сборки Выпуск и устройство (не симулятор), для которого выполняется сборка.

    Build configuration and platform selection

  2. В меню Сборка выберите пункт Архивировать для публикации.

  3. После создания архива появится представление Архивы. Нажмите кнопку Подписать и распространить, чтобы открыть мастер публикации.

    Screenshot of the Sign and Distribute button location in the Archives view.

    Примечание.

    По умолчанию в представлении Архивы показаны только архивы для открытого решения. Чтобы просмотреть все решения с архивами, установите флажок Показать все архивы. Рекомендуем сохранять старые архивы, чтобы при необходимости использовать содержащуюся в них отладочную информацию для формирования отчетов о сбоях с символьным выражением.

  4. Выберите App Store в качестве канала распространения. Нажмите кнопку Далее.

  5. Выберите Отправить в качестве места назначения. Нажмите кнопку Далее.

  6. В окне Профиль подготовки выберите удостоверение для подписывания, приложение и профиль подготовки. Нажмите кнопку Далее.

    Screenshot of the Provisioning profile wizard page showing a valid signing identity, app, and provisioning profile selection.

  7. В окне Сведения об App Store Connect в меню выберите имя пользователя Apple ID и введите пароль для приложения. Нажмите кнопку Далее.

    Screenshot of the App Store Connect information wizard page showing an Apple ID user name selected.

  8. Проверьте сведения о пакете, а затем нажмите кнопку Опубликовать. После выбора расположения для сохранения IPA-файла мастер отправит приложение в App Store Connect.

    Примечание.

    Компания Apple может отклонить приложения с файлом iTunesMetadata.plist, включенным в IPA-файл, что приводит к ошибке следующего вида:

    ERROR: ERROR ITMS-90047: "Disallowed paths ( "iTunesMetadata.plist" ) found at: Payload/iPhoneApp1.app"

    Сведения об устранении этой ошибки см. в этой записи на форумах Xamarin.

Состояние iTunes Connect

Чтобы просмотреть состояние отправки приложения, войдите в iTunes Connect и выберите приложение. Должно отображаться начальное состояние Waiting For Review (Ожидание проверки), хотя при обработке может временно выводиться Upload Received (Получена отправка).

Waiting For Review

Советы и рекомендации

Настройка расположения IPA-файла

Свойство IpaPackageDir в MSBuild позволяет настраивать выходную папку IPA-файла. Если в параметре IpaPackageDir задано настраиваемое расположение, IPA-файл будет помещен в указанную папку, а не в установленный по умолчанию подкаталог с меткой времени. Это может быть полезно при создании автоматизированных сборок, для работы которых требуется конкретный путь к каталогу (например, это могут быть сборки непрерывной интеграции).

Использовать новое свойство можно несколькими способами. Например, чтобы выводить IPA-файл в старый каталог по умолчанию (как в Xamarin.iOS 9.6 и более ранних версиях), задайте для свойства IpaPackageDir значение $(OutputPath) одним из следующих способов. Оба подхода совместимы со всеми сборками Unified API Xamarin.iOS, включая сборки интегрированной среды разработки и командной строки, которые используют msbuild или mdtool:

  • Первый способ подразумевает установку свойства IpaPackageDir в элементе <PropertyGroup> в файле MSBuild. Например, можно добавить следующий элемент <PropertyGroup> в конец CSPROJ-файла проекта приложения iOS (непосредственно перед закрывающим тегом </Project>):

    <PropertyGroup>
      <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    
  • Более эффективный подход заключается в добавлении элемента <IpaPackageDir> в конец существующего элемента <PropertyGroup>, который соответствует конфигурации, используемой при сборке IPA-файла. Это способ является рекомендуемым, поскольку он позволяет обеспечить дальнейшую совместимость с запланированными настройками на странице параметров IPA-файла для iOS в свойствах проекта. Если вы в данный момент используете конфигурацию Release|iPhone для сборки IPA-файла, полностью обновленная группа свойств может иметь следующий вид:

    <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone'">
       <Optimize>true</Optimize>
       <OutputPath>bin\iPhone\Release</OutputPath>
       <ErrorReport>prompt</ErrorReport>
       <WarningLevel>4</WarningLevel>
       <ConsolePause>false</ConsolePause>
       <CodesignKey>iPhone Developer</CodesignKey>
       <MtouchUseSGen>true</MtouchUseSGen>
       <MtouchUseRefCounting>true</MtouchUseRefCounting>
       <MtouchFloat32>true</MtouchFloat32>
       <CodesignEntitlements>Entitlements.plist</CodesignEntitlements>
       <MtouchLink>SdkOnly</MtouchLink>
       <MtouchArch>ARMv7, ARM64</MtouchArch>
       <MtouchHttpClientHandler>HttpClientHandler</MtouchHttpClientHandler>
       <MtouchTlsProvider>Default</MtouchTlsProvider>
       <BuildIpa>true</BuildIpa>
       <IpaPackageDir>$(OutputPath)</IpaPackageDir>
    </PropertyGroup>
    

Альтернативный способ для сборок командной строки msbuild заключается в добавлении аргумента командной строки /p: для установки свойства IpaPackageDir. В этом случае обратите внимание, что msbuild не развертывает выражения $(), передаваемые в командную строку, поэтому использовать синтаксис $(OutputPath) невозможно. Вместо этого необходимо предоставить полный путь.

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:ServerAddress="192.168.1.3" /p:ServerUser="macuser" /p:IpaPackageDir="%USERPROFILE%\Builds" /t:Build SingleViewIphone1.sln

В Mac он будет иметь следующий вид:

msbuild /p:Configuration="Release" /p:Platform="iPhone" /p:IpaPackageDir="$HOME/Builds" /t:Build SingleViewIphone1.sln

После того как была создана и архивирована сборка для распространения, все готово для отправки приложения в iTunes Connect.

Итоги

В этой статье описывались процедуры настройки, создания и отправки приложения iOS для публикации в App Store.