17 dec
2015
Запуск LibGDX игры на iOS
Added by SomeFire,
published
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.
Жмём ПКМ по 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 указать папку с аудио отдельно.
Кому-то достаточно в robovm.xml указать папку с аудио отдельно.
<resource>
<directory>../android/assets/sounds</directory>
<includes>
<include>**</include>
</includes>
<skipPngCrush>true</skipPngCrush>
</resource>
А кому-то приходится менять формат аудио. Документация говорит, что LibGDX поддерживает wav, mp3 и ogg. В моём случае сработал caf формат.
Contents
Блог
Проекты :
Unity - скрытая папка
Блог
Проекты :
Geometry-X
alexprey:
Блог
Проекты :
Unity - скрытая папка
Блог
Проекты :
и образ сделать заодно :)
Блог
Проекты :
Unity - скрытая папка
Блог
Проекты :
PunchStyle
Anufis RPG
The Binding of Avatar
You TD 2
Edited by Praytic