Spec-Zone.ru › Qt 5.9

Заметки по платформе - iOS

Развертывание

Разработка, сборка, запуск и отладка приложения Qt для iOS могут выполняться с помощью Qt Creator на macOS. Инструментарий предоставляется Xcode от Apple, а запуск qmake для проекта, нацеленного на iOS, также сгенерирует файл проекта Xcode (.xcodeproj) с начальными настройками приложения. Поскольку Qt Creator не предоставляет интерфейс для управления всеми настройками, специфичными для платформы iOS, иногда необходимо настраивать их непосредственно в Xcode. Проверка правильности конфигурации приложения особенно важна перед отправкой приложения на публикацию в App Store Apple.

Файлы свойства списка информации

Файл свойства списка информации (Info.plist) в iOS и macOS используется для настройки пакета приложения. Эти параметры конфигурации включают:

  • Имя и идентификатор отображения приложения
  • Необходимые возможности устройства
  • Поддерживаемые ориентации пользовательского интерфейса
  • Значки и изображения запуска

Подробнее см. документацию по файлу свойства списка информации в iOS Developer Library.

При запуске qmake генерируется файл Info.plist с соответствующими значениями по умолчанию.

Рекомендуется заменить сгенерированный Info.plist своим собственным копией, чтобы предотвратить его перезапись при следующем запуске qmake. Вы можете определить пользовательский файл свойства списка информации с помощью переменной QMAKE_INFO_PLIST в файле .pro.

ios {
    QMAKE_INFO_PLIST = ios/Info.plist
}

Активность приложения

Для файлов, которые нельзя включить в ресурсы Qt, переменная qmake QMAKE_BUNDLE_DATA предоставляет способ указать набор файлов для копирования в пакет приложения. Например:

ios {
    fontFiles.files = $$files(fonts/*.ttf)
    fontFiles.path = fonts
    QMAKE_BUNDLE_DATA += fontFiles
}

Для изображений ресурсов альтернативным способом является использование каталогов ресурсов asset catalogs в Xcode, которые можно добавить аналогичным образом:

ios {
    QMAKE_ASSET_CATALOGS += ios/Assets.xcassets
}

Значки

Значки должны быть установлены в Info.plist и скопированы в пакет приложения. Xcode имеет специальную поддержку значков, но при использовании Qt обычно лучше настроить их в файле .pro.

Для поддержки всех разрешений и устройств необходимо создать несколько изображений. Подробный список того, что требуется, доступен по адресу файлам значков. Имя файла не имеет значения, но фактический размер пикселей важен. Требуется всего несколько значков. Однако для поддержки как iPhone, так и iPad требуются следующие изображения:

  • AppIcon29x29.png: 29 x 29
  • AppIcon29x29@2x.png: 58 x 58
  • AppIcon29x29@2x~ipad.png: 58 x 58
  • AppIcon29x29~ipad.png: 29 x 29
  • AppIcon40x40@2x.png: 80 x 80
  • AppIcon40x40@2x~ipad.png: 80 x 80
  • AppIcon40x40~ipad.png: 40 x 40
  • AppIcon50x50@2x~ipad.png: 100 x 100
  • AppIcon50x50~ipad.png: 50 x 50
  • AppIcon57x57.png: 57 x 57
  • AppIcon57x57@2x.png: 114 x 114
  • AppIcon60x60@2x.png: 120 x 120
  • AppIcon72x72@2x~ipad.png: 144 x 144
  • AppIcon72x72~ipad.png: 72 x 72
  • AppIcon76x76@2x~ipad.png: 152 x 152
  • AppIcon76x76~ipad.png: 76 x 76

Эти файлы должны быть скопированы в пакет приложения, добавив в файл .pro фрагмент кода, подобный следующему:

ios {
    ios_icon.files = $$files($$PWD/ios/AppIcon*.png)
    QMAKE_BUNDLE_DATA += ios_icon
}

Для использования значков имена файлов также должны быть перечислены в Info.plist. Лучший способ – перечислить все файлы значков, используя ключ CFBundleIconFiles. Версию, специфичную для iPad, можно указать с помощью ключа CFBundleIcons~ipad, добавив в Info.plist фрагмент кода, подобный следующему:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>AppIcon29x29.png</string>
            <string>AppIcon29x29@2x.png</string>
            <string>AppIcon40x40@2x.png</string>
            <string>AppIcon57x57.png</string>
            <string>AppIcon57x57@2x.png</string>
            <string>AppIcon60x60@2x.png</string>
        </array>
    </dict>
</dict>
<key>CFBundleIcons~ipad</key>
<dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string>AppIcon29x29.png</string>
            <string>AppIcon29x29@2x.png</string>
            <string>AppIcon40x40@2x.png</string>
            <string>AppIcon57x57.png</string>
            <string>AppIcon57x57@2x.png</string>
            <string>AppIcon60x60@2x.png</string>
            <string>AppIcon29x29~ipad.png</string>
            <string>AppIcon29x29@2x~ipad.png</string>
            <string>AppIcon40x40~ipad.png</string>
            <string>AppIcon40x40@2x~ipad.png</string>
            <string>AppIcon50x50~ipad.png</string>
            <string>AppIcon50x50@2x~ipad.png</string>
            <string>AppIcon72x72~ipad.png</string>
            <string>AppIcon72x72@2x~ipad.png</string>
            <string>AppIcon76x76~ipad.png</string>
            <string>AppIcon76x76@2x~ipad.png</string>
        </array>
    </dict>
</dict>

Это гарантирует, что соответствующие файлы копируются в нужное место и используются правильные значки, как требуется App Store Apple. Распределения ad-hoc также должны включать следующие имена файлов в пакет приложения для визуализации приложения в iTunes:

  • iTunesArtwork 512x512
  • iTunesArtwork@2x 1024x1024

Изображения запуска

Как и значки, изображения запуска состоят из изображений, которые нужно скопировать в пакет приложения, и ключей, которые нужно установить в Info.plist.

Для поддержки iPhone 6 необходимо предоставить файл запуска (файл интерфейса .xib или файл storyboard). Дополнительную информацию см. на странице Изображения запуска. Предполагая, что вы назвали файл запуска Launch.xib, его можно добавить в Info.plist следующим образом:

<key>UILaunchStoryboardName</key>
<string>Launch</string>

Можно использовать изображения запуска (файлы PNG), как описано ниже, для поддержки iPhone 6, но это не рекомендуется. Qmake генерирует по умолчанию LaunchScreen.xib, поэтому лучше использовать другое имя для пользовательского экрана запуска, чтобы избежать конфликтов.

Начиная с iOS 7, изображения запуска определяются с помощью ключа UILaunchImages. Для поддержки этих устройств необходимо подготовить следующие изображения:

  • LaunchImage-iOS7-568h@2x.png: 640 x 1136
  • LaunchImage-iOS7-Landscape.png: 1024 x 768
  • LaunchImage-iOS7-Landscape@2x.png: 2048 x 1536
  • LaunchImage-iOS7-Portrait.png: 768 x 1024
  • LaunchImage-iOS7-Portrait@2x.png: 1536 x 2048
  • LaunchImage-iOS7@2x.png: 640 x 960

Изображения можно добавить в Info.plist следующим образом:

<key>UILaunchImages</key>
<array>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{320, 568}</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{320, 480}</string>
    </dict>
</array>
<key>UILaunchImages~ipad</key>
<array>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7-Landscape</string>
        <key>UILaunchImageOrientation</key>
        <string>Landscape</string>
        <key>UILaunchImageSize</key>
        <string>{768, 1024}</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7-Portrait</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{768, 1024}</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{320, 568}</string>
    </dict>
    <dict>
        <key>UILaunchImageMinimumOSVersion</key>
        <string>7.0</string>
        <key>UILaunchImageName</key>
        <string>LaunchImage-iOS7</string>
        <key>UILaunchImageOrientation</key>
        <string>Portrait</string>
        <key>UILaunchImageSize</key>
        <string>{320, 480}</string>
    </dict>
</array>

Для поддержки более ранних версий iOS можно использовать строку UILaunchImageFile в Info.plist:

<key>UILaunchImageFile</key>
<string>LaunchImage</string>

Имя по умолчанию – Default, но qmake генерирует некоторые изображения, поэтому проще использовать другое имя (например, LaunchImage, как мы сделали) для избежания конфликтов.

  • LaunchImage.png: 320 x 480
  • LaunchImage@2x.png: 640 x 960
  • LaunchImage-568h@2x.png: 640 x 1136
  • LaunchImage-Landscape.png: 1024 x 748
  • LaunchImage-Landscape@2x.png: 2048 x 1496
  • LaunchImage-Portrait.png: 768 x 1004
  • LaunchImage-Portrait@2x.png: 1536 x 2008

Вы можете изменить имена файлов, пока Info.plist и имена файлов остаются синхронизированными.

Наконец, все эти файлы необходимо скопировать в пакет приложения, добавив в файл .pro фрагмент кода, подобный следующему:

ios {
    app_launch_images.files = $$PWD/ios/Launch.xib $$files($$PWD/ios/LaunchImage*.png)
    QMAKE_BUNDLE_DATA += app_launch_images
}

Это позволяет создавать универсальные приложения с корректными LaunchImages, как требуется App Store Apple.

Важно: "launch_images" используется внутри Qt, поэтому он будет перезаписан, если используется в вашем файле .pro.

Выражение поддерживаемых версий iOS

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

Основные понятия, связанные с выражением поддержки определенного диапазона версий ОС:

  • Целевой уровень развертывания указывает минимальную версию macOS, iOS, tvOS или watchOS, которую поддерживает ваше приложение.
  • Версия SDK указывает максимальную версию macOS, iOS, tvOS или watchOS, которую поддерживает ваше приложение.

При разработке приложения для платформы Apple всегда следует использовать последнюю версию Xcode и последнюю доступную SDK на момент разработки. На некоторых платформах, таких как iOS, вы фактически будете отклонены из App Store, если этого не сделаете. Поэтому версия SDK всегда больше или равна целевому уровню развертывания.

При разработке приложения для платформы Apple необходимо установить целевой уровень развертывания. Различные инструменты сборки в цепочке инструментов Xcode имеют флаг, который можно использовать для установки этого значения, включая, но не ограничиваясь, компилятор и компоновщик. Установив значение целевого уровня развертывания, вы явно заявляете, что ваше приложение должно работать, по крайней мере, на этой версии, и не будет работать с более ранними версиями ОС. Затем вам необходимо убедиться, что ваше использование системных API соответствует сделанному вами заявлению. Поскольку компилятор знает, что вы заявили, он может помочь в этом.

Версия SDK рассматривается как максимальная версия ОС, с которой приложение совместимо, в том смысле, что если приложение построено с помощью SDK, оно будет продолжать использовать поведение этого SDK даже на более новых версиях ОС, потому что ОС проверяет команды загрузки двоичного файла и эмулирует обратную совместимость со старой ОС. Например, если приложение построено с помощью SDK macOS 10.12, оно будет продолжать использовать поведение 10.12 даже на 10.13 и выше.

Однако двоичные файлы Mach-O по своей природе совместимы в будущем. Например, приложение, построенное с помощью SDK iOS 9, будет работать без проблем на iOS 10, но может не использовать какие-либо изменения поведения в определенной функциональности на новой версии, пока это приложение не будет перекомпилировано с помощью этого более нового SDK.

Минимальную версию ОС можно передать системе с помощью флагов компилятора и компоновщика, которые включают её в двоичный файл Mach-O. Кроме того, ключ LSMinimumSystemVersion должен быть установлен в пакете приложения. Это значение должно быть равно значению, переданному компилятору и компоновщику, поскольку на macOS это позволит ОС отобразить дружелюбное диалоговое окно с сообщением о том, что приложение требует более новой версии ОС, в отличие от диалогового окна об ошибке. LSMinimumSystemVersion также является ключом, который App Store использует для отображения требуемой версии ОС; флаги компилятора и компоновщика здесь не влияют.

В основном, приложения Qt будут работать без проблем. Например, в qmake Qt mkspecs устанавливают QMAKE_IOS_DEPLOYMENT_TARGET, QMAKE_MACOSX_DEPLOYMENT_TARGET, QMAKE_TVOS_DEPLOYMENT_TARGET или QMAKE_WATCHOS_DEPLOYMENT_TARGET до минимальной версии, которую поддерживает сам Qt. Аналогично, в Qbs модули Qt устанавливают cpp.minimumIosVersion, cpp.minimumMacosVersion, cpp.minimumTvosVersion, или cpp.minimumWatchosVersion до минимальной версии, которую поддерживает сам Qt.

Однако необходимо соблюдать осторожность, устанавливая собственное значение целевой версии. Если вы установите его на значение, большее, чем требуется Qt, и предоставите свой собственный файл Info.plist, вы должны добавить запись LSMinimumSystemVersion в Info.plist, которая соответствует значению целевого уровня развертывания, поскольку ОС будет использовать значение LSMinimumSystemVersion как авторитетное.

Если вы укажете значение целевого уровня развертывания, меньшее, чем требуется Qt, приложение почти наверняка аварийно завершит работу где-то в библиотеках Qt при запуске на более старой версии, чем поддерживает Qt. Поэтому убедитесь, что фактический код системы сборки отражает минимальную версию ОС, которая фактически требуется.

Публикация в App Store Apple

Проверка готовности вашего приложения Qt для iOS к публикации в App Store может быть выполнена, как описано в подаче заявки. Для подачи заявки можно использовать Xcode или Application Loader (установленный с Xcode). Qt Creator не предоставляет интерфейс для управления всеми настройками в конфигурации проекта Xcode.

Приложение должно быть протестировано на версиях iOS и устройствах, которые оно должно поддерживать. Минимальный целевой уровень развертывания для приложений Qt варьируется в зависимости от версии Qt. Дополнительную информацию можно найти в поддерживаемых платформах и конфигурациях.

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

См. Руководство по распространению приложений в iOS Developer Library для получения дополнительной информации.

© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/qt-5.9/platform-notes-ios.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API