Запуск LibGDX игры на iOS
LibGDX позволяет создавать на Java ещё более кросплатформенные приложения, но просто сделать только ПК версию. Для прочих устройств требуется то сдк скачать, то с сервером помудрить, то мак купить… Вот о последнем и поговорим.
Я использовал eclipse, работа с другими IDE несколько отличается.
Подготовка
Для создания билда на iOS нам потребуются:
Нужна ОС, на которую поставится последняя версия xcode.
Xcode качаем из appstore.
На itunesconnect надо создать страницу игры. Добавить описание, контакты и тому подобное.
Всё самое полезное на developer (документация, сертификаты и т.д.) находится в сааамом низу сайта. Посколько мы имеем дело с эпл, то нужно купить годовую лицензию. Разумеется, только если хочется выкладывать игры в апстор.
После создания аккаунта на developer мотаем в самый низ и открываем страницу с сертификатами.
Есть 2 вида сертификатов: development и distribution. Ради второго и нужно проплачивать лицензию. Однако, если хочется просто попробовать запустить игру на iOS устройстве под рукой, то хватит и бесплатной версии.
Создаём нужный сертификат и подпись к нему. Скачиваем их.
Открываем keychain и вставляем туда сертификаты, чтобы RoboVM могла их использовать.
Регистрируемся и получаем 30-дневную пробную версию. Вам выдадут ключ, который понадобится для работы RoboVM. В профиле, в лицензиях – можно проапгрейдить ключ по условиям обычной лицензии (т.е. купить), а можно подать запрос на инди версию (бесплатно, на маленькую группу разработчиков с потолком прибыли за прошлый год), который будет рассматриваться пару дней, не дольше.
Устанавливаем RoboVM. В случае с Eclipse – ставим плагин (открываем вкладку Help – Install New Software – в качестве сайта пишем http : //download.robovm.org/eclipse/).
Прописываем ключ в RoboVM. В случае с Eclipse – открываем вкладку RoboVM – License Manager – и вводим ключ.
iOS проект
Теперь взглянем на содержимое iOS проекта. Есть некоторые файлы, которые необходимо редактировать:
Папка data содержит загрузочные экраны и иконки.
<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/>
<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>
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 формат.
Смотрите также:
Комментарии
Круто, вот только нет у меня мака для сборки приложения для iOS. Можно как-нибудь без этого?
Решение варьируется от случая к случаю.
Кому-то достаточно в robovm.xml указать папку с аудио отдельно.
...
А кому-то приходится менять формат аудио. Документация говорит, что LibGDX поддерживает wav, mp3 и ogg. В моём случае сработал caf формат.
Достаточно понять, что в ошибке говорится
error code 0xffffffd5: Unknown ext audio error
На самом деле формат воспроизведения зависит не от библиотеки, а от устройства. Были случае когда на компьютере у меня воспроизводились не все звуки, а на планшете под андроидом все работало отлично. Но перекодирование помогло.
нет у меня мака
Можно на эмуляторе, но с эмуляцией тоже придется попариться. Процессор должен быть интеловский и соответствовать современной яблочной ОС. Виртуальную машину надо поставить, установленный образ найти. Или просто установщик системы и ставить самостоятельно.
alexprey:
Достаточно понять, что в ошибке говорится
В ошибке говорится, что не может распознать формат, а по факту - иногда не видит файл.
Можно на эмуляторе, но с эмуляцией тоже придется попариться. Процессор должен быть интеловский и соответствовать современной яблочной ОС. Виртуальную машину надо поставить, установленный образ найти. Или просто установщик системы и ставить самостоятельно.
да извращался я с виртуалкой. Думал, что можно совсем как-нибудь без этого
LibGDX позволяет создавать на Java ещё более кросплатформенные приложения, но просто сделать только ПК версию.
Хорошее предложение!)
http://www.gamefromscratch.com/page/LibGDX-Tutorial-series.aspx
тут отличный туториал, как сделать игру с libgdx на разных устройствах
CollectableItemData.cs
[CreateMenuItem(fileName = "newItem", menuName = "Data/Items/Collectable", order = 51]