Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

Разработка для iOS

Бандлинг игры для iOS доступен только в версии редактора Defold для Mac.

iOS требует, чтобы любое приложение, которое вы собираете и хотите запускать на телефоне или планшете, обязательно было подписано сертификатом и provisioning profile, выданными Apple. В этом руководстве описаны шаги, необходимые для создания iOS-бандла вашей игры. Во время разработки часто предпочтительнее запускать игру через development app, поскольку это позволяет использовать hot reload контента и кода прямо на устройстве.

Процесс подписи кода у Apple

Безопасность, связанная с iOS-приложениями, состоит из нескольких компонентов. Доступ к необходимым инструментам можно получить, зарегистрировавшись в Apple iOS Developer Program. После регистрации перейдите в Apple Developer Member Center.

Apple Member Center

Раздел Certificates, Identifiers & Profiles содержит все инструменты, которые вам нужны. Здесь можно создавать, удалять и редактировать:

Certificates
Выданные Apple криптографические сертификаты, идентифицирующие вас как разработчика. Можно создавать сертификаты для разработки или для продакшна. Сертификаты разработчика позволяют тестировать некоторые функции, например механизм встроенных покупок, в sandbox-среде. Продакшн-сертификаты используются для подписи финального приложения перед загрузкой в App Store. Сертификат нужен для подписи приложений до того, как их можно будет установить на устройство для тестирования.
Identifiers
Идентификаторы для различных целей. Можно регистрировать wildcard-идентификаторы (например, some.prefix.*), которые могут использоваться несколькими приложениями. App ID могут содержать информацию о сервисах приложения, например о включенной интеграции с Passbook, Game Center и т.д. Такие App ID не могут быть wildcard-идентификаторами. Чтобы сервисы приложения работали, bundle identifier вашего приложения должен совпадать с идентификатором App ID.
Devices
Каждое устройство для разработки должно быть зарегистрировано по своему UDID (Unique Device IDentifier, см. ниже).
Provisioning Profiles
Provisioning profile связывают сертификаты с App ID и списком устройств. Они определяют, какое приложение, какого разработчика и на каких устройствах может быть установлено.

При подписи игр и приложений в Defold вам нужны действительный сертификат и действительный provisioning profile.

Часть действий, которые доступны на странице Member Center, можно выполнять и из среды разработки Xcode, если она у вас установлена.

Device identifier (UDID)
UDID устройства iOS можно узнать, подключив устройство к компьютеру по Wi-Fi или кабелю. Откройте Xcode и выберите Window ▸ Devices and Simulators. Серийный номер и идентификатор будут показаны после выбора устройства.

xcode devices

Если Xcode не установлен, идентификатор можно найти в iTunes. Нажмите на значок устройств и выберите свое устройство.

itunes devices

  1. На странице Summary найдите Serial Number.
  2. Нажмите на Serial Number один раз, чтобы поле изменилось на UDID. Если нажимать дальше, будут отображаться разные сведения об устройстве. Просто продолжайте нажимать, пока не появится UDID.
  3. Щелкните правой кнопкой мыши по длинной строке UDID и выберите Copy, чтобы скопировать идентификатор в буфер обмена и затем легко вставить его в поле UDID при регистрации устройства в Apple Developer Member Center.

Разработка с использованием бесплатного аккаунта Apple developer

Начиная с Xcode 7 любой может установить Xcode и бесплатно разрабатывать под реальные устройства. Регистрироваться в iOS Developer Program не обязательно. Вместо этого Xcode автоматически выдаст вам сертификат разработчика (действует 1 год) и provisioning profile для вашего приложения (действует 1 неделю) на конкретном устройстве.

  1. Подключите устройство.
  2. Установите Xcode.
  3. Добавьте в Xcode новую учетную запись и войдите с помощью Apple ID.
  4. Создайте новый проект. Самый простой вариант “Single View App” подойдет.
  5. Выберите свою “Team” (она будет создана автоматически) и задайте bundle identifier приложения.

Запишите bundle identifier, так как в проекте Defold нужно использовать точно такой же bundle identifier.

  1. Убедитесь, что Xcode создал для приложения Provisioning Profile и Signing Certificate.

  2. Соберите приложение на устройстве. При первом запуске Xcode попросит включить Developer mode и подготовит устройство для отладки. Это может занять некоторое время.
  3. Когда вы убедитесь, что приложение работает, найдите его на диске. Путь к сборке можно увидеть в Build report в “Report Navigator”.

  4. Найдите приложение, щелкните по нему правой кнопкой мыши и выберите Show Package Contents.

  5. Скопируйте файл “embedded.mobileprovision” в удобное место на диске.

Этот provisioning-файл можно использовать вместе с вашей code signing identity для подписи приложений в Defold в течение одной недели.

Когда срок действия provisioning profile истечет, нужно снова собрать приложение в Xcode и получить новый временный provisioning-файл, как описано выше.

Создание iOS application bundle

Когда у вас есть code signing identity и provisioning profile, можно создавать самостоятельный application bundle для игры из редактора. Просто выберите в меню Project ▸ Bundle... ▸ iOS Application....

Signing iOS bundle

Выберите свою code signing identity и укажите mobile provisioning file. Также выберите архитектуры (32-bit, 64-bit и iOS simulator), для которых нужно создать бандл, а также вариант сборки (Debug или Release). При необходимости можно снять флажок Sign application, чтобы пропустить процесс подписи и выполнить его вручную позже.

При тестировании игры на iOS simulator флажок Sign application обязательно нужно снять. Приложение установится, но не запустится, если оставить подпись включенной.

Нажмите Create Bundle, после чего будет предложено выбрать место на компьютере, куда будет сохранен бандл.

ipa iOS application bundle

Иконку приложения, launch screen storyboard и другие параметры вы задаете в файле настроек проекта game.project в разделе iOS.

Варианты сборки

Когда вы собираете игру, нужно выбрать тип движка, который будет использоваться. Есть три основных варианта:

  • Debug
  • Release
  • Headless

Эти разные версии также называются Build variants

Если вы выбираете Project ▸ Build, вы всегда получите debug-версию.

Debug

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

  • Profiler - Используется для сбора счётчиков производительности и использования. Как пользоваться профилировщиком, описано в руководстве по профилированию.
  • Logging - Движок будет выводить системную информацию, предупреждения и ошибки, если логирование включено. Движок также будет выводить логи из Lua-функции print() и из логирования нативных расширений через dmLogInfo(), dmLogError() и так далее. Как читать эти логи, описано в руководстве по логам игры и системы.
  • Hot reload - Hot-reload — мощная возможность, позволяющая разработчику перезагружать ресурсы во время работы игры. О том, как этим пользоваться, написано в руководстве по Hot-Reload.
  • Engine services - К debug-версии игры можно подключаться и взаимодействовать с ней через несколько открытых TCP-портов и сервисов. Эти сервисы включают hot-reload, удалённый доступ к логам и упомянутый выше profiler, а также другие способы удалённого взаимодействия с движком. Подробнее об engine services читайте в документации для разработчиков.

Release

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

  • Функции отладки немного увеличивают размер бинарника, а считается хорошей практикой стараться держать размер релизного бинарника как можно меньше.
  • Функции отладки также потребляют немного процессорного времени. Это может повлиять на производительность игры на слабом оборудовании. На мобильных телефонах повышенная нагрузка на CPU также приводит к нагреву и расходу батареи.
  • Функции отладки могут раскрывать информацию об игре, которую не предполагается показывать игрокам, в том числе с точки зрения безопасности, читерства или мошенничества.

Headless

Этот исполняемый файл запускается без графики и звука. Это означает, что вы можете выполнять unit/smoke tests игры на CI-сервере или даже использовать его как игровой сервер в облаке.

Установка и запуск бандла на подключенном iPhone

Можно установить и запустить собранный бандл, используя флажки редактора “Install on connected device” и “Launch installed app” в диалоге Bundle:

Install and launch iOS bundle

Для работы этой функции должен быть установлен консольный инструмент ios-deploy. Проще всего установить его через Homebrew:

$ brew install ios-deploy

Если редактор не может определить путь до ios-deploy, его нужно указать вручную в Preferences.

Создание storyboard

Файл storyboard создается в Xcode. Запустите Xcode и создайте новый проект. Выберите iOS и Single View App:

Create project

Нажмите Next и перейдите к настройке проекта. Укажите Product Name:

Project settings

Нажмите Create для завершения. Проект создан, и можно переходить к созданию storyboard:

The project view

Перетащите изображение, чтобы импортировать его в проект. Затем выберите Assets.xcassets и поместите изображение в Assets.xcassets:

Add image

Откройте LaunchScreen.storyboard и нажмите кнопку плюс (+). Введите “imageview”, чтобы найти компонент ImageView.

Add image view

Перетащите компонент Image View на storyboard:

Add to storyboard

Выберите изображение, которое вы ранее добавили в Assets.xcassets, в выпадающем списке Image:

Разместите изображение и внесите любые другие нужные изменения, например добавьте Label или другой UI-элемент. Когда все будет готово, установите активную схему “Build -> Any iOS Device (arm64, armv7)” (или “Generic iOS Device”) и выберите Product -> Build. Дождитесь окончания сборки.

Если у вас доступен только вариант “Any iOS Device (arm64)”, измените iOS Deployment target на 10.3 в настройках “Project -> Basic -> Deployment”. Это сделает ваш storyboard совместимым с устройствами armv7 (например, iPhone5c).

Если вы используете изображения в storyboard, они не будут автоматически включены в LaunchScreen.storyboardc. Используйте поле Bundle Resources в game.project, чтобы включить эти ресурсы. Например, создайте в проекте Defold папку LaunchScreen и внутри нее папку ios (ios нужна, чтобы включать эти файлы только в iOS-бандлы), затем положите файлы в LaunchScreen/ios/. Добавьте этот путь в Bundle Resources.

Последний шаг — скопировать скомпилированный файл LaunchScreen.storyboardc в ваш проект Defold. Откройте Finder по следующему пути и скопируйте LaunchScreen.storyboardc в проект Defold:

/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Intermediates.noindex/YOUR-PRODUCT-NAME.build/Debug-iphonesimulator/YOUR-PRODUCT-NAME.build/Base.lproj/LaunchScreen.storyboardc

Пользователь форума Sergey Lerg подготовил видеоруководство, показывающее этот процесс.

Когда у вас будет файл storyboard, вы сможете указать его в game.project.

Создание icon asset catalog

Это обязательно начиная с Defold 1.2.175.

Использование asset catalog — предпочтительный для Apple способ управления иконками приложения. Фактически только так можно предоставить иконку, используемую в листинге App Store. Asset catalog создается так же, как storyboard, через Xcode. Запустите Xcode и создайте новый проект. Выберите iOS и Single View App:

Create project

Нажмите Next и перейдите к настройке проекта. Укажите Product Name:

Project settings

Нажмите Create для завершения. Проект создан, и можно переходить к созданию asset catalog:

The project view

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

Add icons

Не добавляйте иконки для Notifications, Settings или Spotlight.

Когда все будет готово, установите активную схему “Build -> Any iOS Device (arm64)” (или “Generic iOS Device”) и выберите Product -> Build. Дождитесь окончания сборки.

Убедитесь, что сборка выполняется для “Any iOS Device (arm64)” или “Generic iOS Device”, иначе при загрузке билда вы получите ошибку ERROR ITMS-90704.

Build project

Последний шаг — скопировать скомпилированный файл Assets.car в проект Defold. Откройте Finder по следующему пути и скопируйте Assets.car в проект Defold:

/Library/Developer/Xcode/DerivedData/YOUR-PRODUCT-NAME-cbqnwzfisotwygbybxohrhambkjy/Build/Products/Debug-iphoneos/Icons.app/Assets.car

Когда у вас будет файл asset catalog, его и иконки можно будет указать в game.project:

Add icon and asset catalog to game.project

Иконку App Store не нужно указывать в game.project. Она автоматически извлекается из файла Assets.car при загрузке в iTunes Connect.

Установка iOS application bundle

Редактор создает файл .ipa, который является iOS application bundle. Чтобы установить его на устройство, можно использовать один из следующих инструментов:

  • Xcode через окно “Devices and Simulators”
  • консольный инструмент ios-deploy
  • Apple Configurator 2 из macOS App Store
  • iTunes

Также можно использовать консольный инструмент xcrun simctl для работы с iOS simulator, доступными через Xcode:

# show a list of available devices
xcrun simctl list

# boot an iPhone X simulator
xcrun simctl boot "iPhone X"

# install your.app to a booted simulator
xcrun simctl install booted your.app

# launch the simulator
open /Applications/Xcode.app/Contents/Developer/Applications/Simulator.app

Apple Privacy Manifest

Privacy manifest — это список свойств, в котором фиксируются типы данных, собираемых вашим приложением или сторонним SDK, а также причины использования required reasons API вашим приложением или сторонним SDK. Для каждого типа данных, который собирает приложение или сторонний SDK, и для каждой категории required reasons API, которую оно использует, причины должны быть указаны в bundled privacy manifest file.

Defold предоставляет privacy manifest по умолчанию через поле Privacy Manifest в файле game.project. При создании application bundle privacy manifest будет объединён с любыми privacy manifests из зависимостей проекта и включён в application bundle.

Подробнее о privacy manifests читайте в официальной документации Apple.

Информация Export Compliance

Когда вы отправляете игру в App Store, вам будет предложено указать информацию Export Compliance относительно использования шифрования в приложении. Apple объясняет, почему это требуется:

“When you submit your app to TestFlight or the App Store, you upload your app to a server in the United States. If you distribute your app outside the U.S. or Canada, your app is subject to U.S. export laws, regardless of where your legal entity is based. If your app uses, accesses, contains, implements, or incorporates encryption, this is considered an export of encryption software, which means your app is subject to U.S. export compliance requirements, as well as the import compliance requirements of the countries where you distribute your app.”

Игровой движок Defold использует шифрование для следующих целей:

  • Выполнение запросов по защищенным каналам (например, HTTPS и SSL)
  • Защита Lua-кода авторским правом (чтобы предотвратить копирование)

Эти варианты использования шифрования в движке Defold освобождены от требований по предоставлению документов Export Compliance в соответствии с законодательством США и Европейского союза. Большинство проектов на Defold останутся освобожденными от этих требований, но добавление других криптографических методов может изменить этот статус. Вы обязаны самостоятельно убедиться, что проект соответствует требованиям этих законов и правилам App Store. Дополнительную информацию см. в документе Apple Export Compliance Overview.

Если вы считаете, что ваш проект освобожден от этих требований, установите ключ ITSAppUsesNonExemptEncryption в False в Info.plist проекта. Подробнее см. в Application Manifests.

FAQ

Q: Я не могу установить свою игру Defold, используя бесплатную учётную запись Apple Developer.

A: Убедитесь, что в вашем проекте Defold используется тот же bundle identifier, что и в проекте Xcode, когда вы генерировали mobile provisioning profile.

Q: Как проверить entitlements у собранного приложения?

A: Из Inspect the entitlements of a built app:

codesign -d --ent :- /path/to/the.app

Q: Как проверить entitlements у provisioning profile

A: Из Inspecting a profile’s entitlements:

security cms -D -i /path/to/iOSTeamProfile.mobileprovision