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 формат.
alexprey:
и образ сделать заодно :)
Ред. Praytic