[Marmalade SDK] Compiling your extension for supporting iOS 64-bit

When deploying a Marmalade App to AARCH64 (iOS 64-bit support), it is also necessary to re-compile its native extensions.
Else, “ld” will ignore the whole extension and warn us about the fact.
In order to recompile the iOS extension, you are forced to use a Mac. This can be an impediment if you use Marmalade under Windows. The steps you basically need are

1.- Download and install Marmalade SDK for Mac
2.- If you are Windows user, release your license on Windows Marmalade Hub
3.- Activate your license in Mac Marmalade Hub
4.- Copy the whole extension’s folder from Windows to your mac
5.- Right-click on the extension’s .mkb for iphone (extensionName_iphone.mkb), select “Open with”. There will be two options: Mkb (default), and Mkb (7.4.3), choose the second one. Note that the numbers may change in future Marmalade versions
6.- A shell command-prompt will appear, and will attempt to compile the extension. Once completed, make sure that file
extensionName/lib/arm64/libExtName.a
is present. There should be also two folders with names finishing in _iphone_scons_aarch64 and _iphone_iphone_xcode. If that’s not the case, go to step 6b 🙂
6b.- [Optional] Open the extension Xcode project (it is located inside build_extName_iphone_iphone_xcode folder), go to Build settings, and select “Latest iOS SDK” (mine is 8.2 in this moment), and include “arm64” inside Valid architectures. This is explained in more depth in this document.
7.- Once process is complete, you can copy your extension folder back to your usual Marmalade installation (either under Windows or Mac), and recompile the whole App (including extension) to AARCH64 in iOS-fat mode. More info in the previous post 🙂

Sorry for the little mess going on here!! Hope it helps someone!!

Advertisements

[Marmalade SDK] Deploying to iOS 64-bit (AARCH64)

Since feb’2015, It is mandatory to have 64-bit support in your Marmalade App.
In order to deploy a 64-bit compatible .ipa, you need Marmalade SDK 7.5 or higher.

First, build your application using GCC AARCH64 Release, instead of old GCC ARM Release.

Then, when Marmalade Deploy Tool opens, select “ARM+AARCH64 GCC Release” (see screenshot below)

marmalade64bitm1

In the next step “Stage: Configuration – Platform selection”, select “iOS fat” as the platform.

marmalade64bitm2

Rest of the steps are the same. Click on “Deploy All” to run the deployment process. Note that iOS-native extensions must be also recompiled in a Mac running iOS 8 SDK or higher. Else, ld will ignore the .a files and extensions won’t be linked to your .ipa. If you also need to link your 64-bit iOS extension see this post.

Uploading Apps to Google Play. Basic Guide (Marmalade SDK)

I’m proudly uploading my first App. (Soon i’ll post more info about it:) )
So it’s time to sign the APK and send it up. So i’ll do a quick remind of the basic steps for that.

This time i’ve chosen Marmalade to develop the App, so what we need is a signed .apk file valid for Google Play. We have to deploy it using the Marmalade Deploy Tool. So, to make the .apk suitable, we need to attach it with a key store file.

Generating a new .keystore file

So, the first thing we need is that key store file. We are going to to generate it using keytool.
keytool comes with the Java Development Kit (jdk) and can be called from command line, writing:

$ keytool

In order to generate the .keystore file that we need, keytool has to be supplied with some arguments. These arguments are detailed more deeply here, but the basic usage should fit for us:

$ keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

we just need to change the default .keystore file name and the alias_name by our own names.
Increasing the validity could also be a good idea, to make the keystore file valid for a longer period.

keytool will now request some additional data we have to fill, like our name, organisation unit, organisation name, city, state, and locale code.

once done, we have our .keystore file ready to go.

Linking .keystore file to our marmalade project

Now we have to link this keystore file into our Marmalade project. If you are not using Marmalade, and you develop with <Android SDK> or similar instead, you can follow the remaining steps in the signing tutorial

So, in the project’s .mkb file, we have to add the following into the “deployments” section:

deployments
{
# … previous “deployments” content

# Lines related to keystore file:

android-aliasname=’alias_name’
android-keypass=’alias_password’
android-storepass=’store_password’
android-keystore=’key-file.keystore’

# Additional lines that are necessary
android-manifest=’AndroidManifest.xml’
android-pkgname=’es.example.myappname’
}

The android-aliasname and android-keystore parameters need to match with the ones passed to keytool. The android-keypass is the one we filled when keytool asked us for it.
In this case, the .keystore file is located in the project’s root directory, same as the .mkb file.

Now we can run the deploy tool again. In the third stage: Configuration, into the ‘Android’ specific options, we’ll see that the “Application keystore”, “Key alias name”, and “Private key password” fields are filled with the values we put in the .mkb file.
If these are not, review your .mkb file again; Probably there is something missing.

So, after deploying the App, we have our signed .apk file ready to be uploaded to Google Play!

The complete tutorial for Android developers can be found here
Some additional tips:

It can be useful to do a quick script using ant that modifies the AndroidManifest.xml file to set the correct versionName and versionCode values.
Elsewhere you’ll have to manage the version codes and version names by yourself. Don’t forget that every update of the App that is uploaded to Google Play has to have the same package name, and a greater versionCode and versionName

We can also add fancy icons to our app (marmalade splash logo makes our app look so poor, doesn’t it?) adding the following lines to the deployments section:
We need three .PNG images with the corresponding sizes: 72×72, 48×48 and 36×36 pixels.

android-icon=’data/icons/icon.png’
android-icon-hdpi=’data/icons/icon72.png’
android-icon-ldpi=’data/icons/icon36.png’
android-icon-mdpi=’data/icons/icon48.png’