Game Dev: Запуск LibGDX игры на iOS

Содержание:
LibGDX позволяет создавать на Java ещё более кросплатформенные приложения, но просто сделать только ПК версию. Для прочих устройств требуется то сдк скачать, то с сервером помудрить, то мак купить… Вот о последнем и поговорим.
Я использовал eclipse, работа с другими IDE несколько отличается.

Подготовка

Для создания билда на iOS нам потребуются:
» Мак или его заменитель
Нужна ОС, на которую поставится последняя версия xcode.
Xcode качаем из appstore.
» Аккаунт на itunesconnect.apple.com и developer.apple.com
На itunesconnect надо создать страницу игры. Добавить описание, контакты и тому подобное.
Всё самое полезное на developer (документация, сертификаты и т.д.) находится в сааамом низу сайта. Посколько мы имеем дело с эпл, то нужно купить годовую лицензию. Разумеется, только если хочется выкладывать игры в апстор.
» Сертификат и идентификатор с developer.apple.com
После создания аккаунта на developer мотаем в самый низ и открываем страницу с сертификатами.
Есть 2 вида сертификатов: development и distribution. Ради второго и нужно проплачивать лицензию. Однако, если хочется просто попробовать запустить игру на iOS устройстве под рукой, то хватит и бесплатной версии.
Создаём нужный сертификат и подпись к нему. Скачиваем их.
Открываем keychain и вставляем туда сертификаты, чтобы RoboVM могла их использовать.
» Аккаунт и установка RoboVM
Регистрируемся и получаем 30-дневную пробную версию. Вам выдадут ключ, который понадобится для работы RoboVM. В профиле, в лицензиях – можно проапгрейдить ключ по условиям обычной лицензии (т.е. купить), а можно подать запрос на инди версию (бесплатно, на маленькую группу разработчиков с потолком прибыли за прошлый год), который будет рассматриваться пару дней, не дольше.
Устанавливаем RoboVM. В случае с Eclipse – ставим плагин (открываем вкладку Help – Install New Software – в качестве сайта пишем http ://download.robovm.org/eclipse/).
Прописываем ключ в RoboVM. В случае с Eclipse – открываем вкладку RoboVM – License Manager – и вводим ключ.

iOS проект

Теперь взглянем на содержимое iOS проекта. Есть некоторые файлы, которые необходимо редактировать:
Папка data содержит загрузочные экраны и иконки.
» Info.plist.xml – содержит настройки устройств, аналогичен манифесту для андроида

ориентация экрана

<key>UISupportedInterfaceOrientations</key>
    <array>
        <string>UIInterfaceOrientationPortrait</string>
        <string>UIInterfaceOrientationPortraitUpsideDown</string>
        <string>UIInterfaceOrientationLandscapeLeft</string>
        <string>UIInterfaceOrientationLandscapeRight</string>
    </array>

иконки

<key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>AppIcon57</string>
                <string>AppIcon57@2x</string>
                <string>AppIcon72</string>
                <string>AppIcon72@2x</string>
                <string>AppIcon76</string>
                <string>AppIcon76@2x</string>
                <string>AppIcon120</string>
                <string>AppIcon192</string>
            </array>
        </dict>
    </dict>

полноэкранный режим

<key>UIRequiresFullScreen</key>
<true/>
» robovm.xml – содержит списки используемых ресурсов

папки с интернал файлами

<resources>
    <resource>
      <directory>../android/assets</directory>
      <includes>
        <include>**</include>
      </includes>
      <skipPngCrush>true</skipPngCrush>
    </resource>
    <resource>
      <directory>data</directory>
    </resource>
  </resources>

подключаемые фреймворки

<frameworks>
    <framework>UIKit</framework>
    <framework>OpenGLES</framework>
  </frameworks>
» robovm.properties – настройки для компиляции
app.version=0.1 – версия игры
app.id=com.zoomgames.geometryx – айди игры, должен совпадать с айди на itunesconnect
app.mainclass=com.zoomgames.geometryx.IOSLauncher
app.executable=IOSLauncher
app.build=1 – номер билда. Изменяйте каждый раз, когда заливаете игру на itunesconnect
app.name=Geometry-X
Для проверки работоспособности вашей игры можно использовать симулятор айпада/айфона или подключить устройство через кабель. Для этого надо нажать правой кнопкой мыши на iOS проекте и выбрать "Run as...".

Компиляция проекта

Софт готов? Аккаунты подключены? RoboVM активирована? В любом случае - переходим к компиляции iOS версии игры.
Для отправки игры на itunesconnect сперва требуется создать ipa файл.
Жмём ПКМ по iOS проекту и выбираем RoboVM Tools - Package for App-Store/Adhoc Distribution.
Выбираем папку, куда сохранится ipa файл, и подпись.
Первый раз компиляция может занять минут 5. Вероятно, что IDE даже не хватит памяти и она закроется, но уже скомпилированные классы останутся в кеше и можно спокойно продолжить процесс после перезапуска IDE.
Затем запустить xcode и открыть Application Loader.
Выбрать Deliver Your App.
Выбрать созданный ipa файл.
Проверить название и версию игры. Продолжить. Подождать, пока всё загрузится на сервер. Если возникнут ошибки или какие-то мелкие неполадки - апплоадер сообщит. К сожалению, он не скажет, как всё исправить.
Если в вашей команде есть iOS устройства, то для тестирования их стоит подключить на itunesconnect на странице игры в разделе TestFlight во вкладке внутреннего тестирования. Там же можно выбрать последний билд загруженной версии для тестирования.
Если в вашей команде разработчиков нет яблочных устройств, то можно поспрашивать родных/друзей/знакомых и сделать их внешними тестерами. Но тут есть одна проблемка – эпл некоторое время проверяет приложение, прежде чем позволить тестерам его загрузить.
Вот, собственно, и всё, что требуется для портирования LibGDX игры на iOS.
Если кого-то интересует GameCenter (эпловские лидерборды, рейтинги, достижения и т.п.) - рекомендую.
» Плюс шаринг от меня туда же
public void share(int score, String gameMode){
    	NSString s = new NSString("My new highscore in Geometry-X - "+gameMode+" is "+score+"! Try to beat me!");
    	NSArray a;
    	if (Gdx.files.isExternalStorageAvailable()){
	    	FileHandle fh = Gdx.files.external(".temp/Geometry-X/scrn.png");
	    	Main.saveScreenshot(fh);
	    	UIImage i = new UIImage(fh.file());
	    	a = new NSArray(s, i);
    	} else a = new NSArray(s); 
		UIActivityViewController controller = new UIActivityViewController(a, null);
		keyWindow.getRootViewController().presentViewController(controller, true, null);
}
UIActivityViewController - та самая вьюшка, через которую делается шаринг. В конструктор подаётся массив объектов класса NSObject. В частности, NSString и UIImage - текст и картинка, потомки класса NSObject.
По непонятным мне причинам добавление объекта в массив у меня не работает.
NSArray a = new NSArray(s);
a.add(i);

Возможные ошибки

Requested but did not find extension point with identifier Xcode.DVTFoundation.DevicePlatformMapping
Эта ошибка возникла у меня после эпловского обновления xcode. Решил проблему довольно просто - закрыл Eclipse, открыл xcode и принял новое соглашение пользования.

Could not open url
error code 0xffffffd5: Unknown ext audio error
Error opening music file
У некоторых возникают проблемы с аудио файлами. Решение варьируется от случая к случаю.
Кому-то достаточно в robovm.xml указать папку с аудио отдельно.
    <resource>
      <directory>../android/assets/sounds</directory>
      <includes>
        <include>**</include>
      </includes>
      <skipPngCrush>true</skipPngCrush>
    </resource>
А кому-то приходится менять формат аудио. Документация говорит, что LibGDX поддерживает wav, mp3 и ogg. В моём случае сработал caf формат.


Views: 4 237

alexprey #1 - 6 years ago 0
Голосов: +0 / -0
Круто, вот только нет у меня мака для сборки приложения для iOS. Можно как-нибудь без этого?
Решение варьируется от случая к случаю.
Кому-то достаточно в robovm.xml указать папку с аудио отдельно.
...
А кому-то приходится менять формат аудио. Документация говорит, что LibGDX поддерживает wav, mp3 и ogg. В моём случае сработал caf формат.
Достаточно понять, что в ошибке говорится
error code 0xffffffd5: Unknown ext audio error
На самом деле формат воспроизведения зависит не от библиотеки, а от устройства. Были случае когда на компьютере у меня воспроизводились не все звуки, а на планшете под андроидом все работало отлично. Но перекодирование помогло.
SomeFire #2 - 6 years ago 0
Голосов: +0 / -0
нет у меня мака
Можно на эмуляторе, но с эмуляцией тоже придется попариться. Процессор должен быть интеловский и соответствовать современной яблочной ОС. Виртуальную машину надо поставить, установленный образ найти. Или просто установщик системы и ставить самостоятельно.
alexprey:
Достаточно понять, что в ошибке говорится
В ошибке говорится, что не может распознать формат, а по факту - иногда не видит файл.
alexprey #3 - 6 years ago 0
Голосов: +0 / -0
Можно на эмуляторе, но с эмуляцией тоже придется попариться. Процессор должен быть интеловский и соответствовать современной яблочной ОС. Виртуальную машину надо поставить, установленный образ найти. Или просто установщик системы и ставить самостоятельно.
да извращался я с виртуалкой. Думал, что можно совсем как-нибудь без этого
Jusper #4 - 6 years ago 0
Голосов: +0 / -0
alexprey, можно попросить меня например :)
и образ сделать заодно :)
alexprey #5 - 6 years ago 0
Голосов: +0 / -0
LibGDX позволяет создавать на Java ещё более кросплатформенные приложения, но просто сделать только ПК версию.
Хорошее предложение!)
Praytic #6 - 6 years ago (изм. ) 0
Голосов: +0 / -0
тут отличный туториал, как сделать игру с libgdx на разных устройствах