A “Thank You” from RoboVM to the libGDX community

Update: post any questions on this forum thread. I already tried to cover most of the concerns, don’t hesitate to bring up more concerns.

Since early 2014, RoboVM has been our weapon of choice to deploy libGDX games on all kinds of iOS devices.

The libGDX community has been a vital part in the development of and improvements made to RoboVM over the past 2 years. You guys have provided invaluable feedback and helped build a community around RoboVM itself, right next to our libGDX community.

Now it’s time to give back a little. The RoboVM team would like to thank you guys with a free license for use with libGDX. This license includes debugging support and can be used for building and publishing both commercial and non-commercial libGDX games, provided your team size does not exceed 3 developers (send a mail to hello@robovm.com if it does).

Going forward, you will need to enter a RoboVM license key to compile your libGDX/PlayN game. Here’s what you need to do:

  1. Sign up for a RoboVM account
  2. Activate your license (see below)
  3. Apply for a free indie license!

Once you got your license key, make sure you use the latest RoboVM version (1.9.0) and simply execute the following on the command line:

./gradlew :activateLicense -Probovm.licenseKey=your-key-here

You can also activate your license key from within your IDE of choice. With the RoboVM IDE plugin installed, go to RoboVM -> License Manager and simply enter your code.

Your trial key will be updated to an indie license within the next 30 days without you having to take additional steps.

The license will be automatically renewed every year. You can use it for as many games as you want, no strings attached.

Happy coding!

libGDX 1.6.1 released – Build System Change!

libGDX 1.6.1

This release contains a major change to the build system. I had to change the way the iOS project handles native libraries. Up until today, the ios/build.gradle file had a two tasks, copyNatives, and updateRoboVMXML. When you import your project into an IDE or build it via the CLI, these tasks will walk through all dependencies, extract the static libraries and rewrite your robovm.xml file. That’s not really nice.

This release fixes this long standing issue. iOS native libraries, e.g. for gdx code, freetype, bullet or box2d, are now packaged using RoboVMs Jar layout for native libs. The static libraries are stored inside a jar, in the directory META-INF/robovm/ios/libs. Additionally, a small robovm.xml file is stored in META-INF/robovm/ios/robovm.xml. This file specifies the native libraries in the libs directory that RoboVM should link.

If you update an existing project to libGDX 1.6.1, you need to make a few changes to the build.gradle and ios/build.gradle files of your project!

In the root build.gradle file, you will see something like this for the iOS project:

project(":ios") {
    apply plugin: 'java'
    apply plugin: 'robovm'

    configurations { natives }

    dependencies {
        compile "org.robovm:robovm-rt:${roboVMVersion}"
        compile "org.robovm:robovm-cocoatouch:${roboVMVersion}"
        compile project(":core")
        compile "com.badlogicgames.gdx:gdx-backend-robovm:$gdxVersion"
        natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-ios"

You need to change the natives config name to compile, just like what we use for the normal Java dependencies.

In the ios/build.gradle file, can remove the copyNatives and updateRoboVMXML tasks and any other line that references those tasks. You should end up with something like this (modulo your main class name!):

sourceSets.main.java.srcDirs = [ "src/" ]

sourceCompatibility = '1.7'
[compileJava, compileTestJava]*.options*.encoding = 'UTF-8'

ext {
	mainClassName = "com.mygdx.game.IOSLauncher"

launchIPhoneSimulator.dependsOn build
launchIPadSimulator.dependsOn build
launchIOSDevice.dependsOn build
createIPA.dependsOn build

eclipse.project {
    name = appName + "-ios"
    natures 'org.robovm.eclipse.RoboVMNature'

After this changes, simply set the gdxVersion in your root build.gradle to “1.6.1” and you are done.

Here are the full CHANGES for this release:

- Added optional hostname argument to Net.newServerSocket method to allow specific ip bindings for server applications made with gdx.
- Changed the way iOS native libs are handled. Removed updateRoboVMXML and copyNatives task from ios/build.gradle. Instead natives are now packaged in jars, within the META-INF/robovm/ios folder. Additionally, a robovm.xml file is stored there that gets merged with the project's robovm.xml file by RoboVM.


In other news, if you are interested in libGDX plus iOS you should cast your vote for RoboPods. RoboPods are bindings to 3rd party libraries like Admob, Google Play Game Services and so on that we at RoboVM will officially support going forward. See this blog post, including the poll.

Happy Coding!

libGDX 1.5.2 released (updated)

edit: well, i’m a bit of a terrible programmer person and botched the update of LWJGL on Mac OS X. Just released libGDX 1.5.2 for that reason. The below still applies :)


time for a new release. Here’s what changed:

- Fixed issue #2433 with color markup and alpha animation. 
- Fixed natives loading for LWJGL on Mac OS X
- Gradle updated to 2.2
- Android Gradle tooling updated to 1.0.0
- API Change: Switched from Timer to AnimationScheduler for driving main loop on GWT. Removed fps field from GwtApplicationConfiguration to instead let the browser choose the most optimal rate.
- API Change: Added pause and resume handling on GWT backend. When the browser supports the page visibility api, pause and resume will be called when the tab or window loses and gains visibility.
- API Change: Added concept of target actor, separate from the actor the action is added to. This allows an action to be added to one actor but affect another. This is useful to create a sequence of actions that affect many different actors. Previously this would require adding actions to each actor and using delays to get them to play in the correct order.
- Added 64-bit support for iOS sim and device
- Deprecated Node#children and Node#parent, added inheritTransform flag and methods to add/get/remove children
- API Change: By default keyframes are no longer copied from Model to ModelInstance but shared instead, can be changed using the `ModelInstance.defaultShareKeyframes` flag or `shareKeyframes` constructor argument.
- JSON minimal format now makes commas optional: newline can be used in place of any comma.
- JSON minimal format is now more lenient with unquoted strings: spaces and more are allowed.
- API Change: Added support for KTX/ZKTX file format, https://github.com/libgdx/libgdx/pull/2431
- Update stb_image from v1.33 to v1.48, see https://github.com/libgdx/libgdx/pull/2668
- Bullet Wrapper: added Gimpact, see https://github.com/libgdx/libgdx/issues/2619
- API Addition: Added MeshPartBuilder#addMesh(...), can be used to more easily combine meshes/models
- Update to LWJGL 2.9.2, fixes fullscreen mode on "retina" displays
- Fixes to RoboVM backend which would crash if accelerometer is used.

Starting with this release we’ll also relax our versioning a little bit. We will not increase the minor version in case of minimal API changes as above.

Let us know if you run into any issues. See this wiki article on how to update your libGDX project to the latest version. The current libGDX version is “1.5.2”, the current nightly version is “1.5.3-SNAPSHOT”, OR you can just check our versions page which details all the versions of dependencies as well.