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
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!!
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)
In the next step “Stage: Configuration – Platform selection”, select “iOS fat” as the platform.
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.
After updating Marmalade from 7.2 to 7.5, I just found this error when deploying to iOS:
ERROR: Signing error: Can’t find your distribution signing private key at iPhone Distribution
The reason is quite simple: My Apple Developer’s code-signing certificates (.cer, .key, .p12, .mobileprovision…) were not copied from the old to the new installation.
Just had to copy them from
After that, deployment succeeded, and .ipa file was succesfully generated 🙂
[Update] Particularly, the file that is lacking now is the distribution_identity.key. That’s exactly the private key that Deploy Tool is searching for.
In a storyboard-based app containing an UITabBarController with various ViewControllers as tabs, the need of changing the tab’s order is very frequent due to changes in the App’s requirements.
There are various ways of doing that. In my opinion, the most elegant one is doing the steps above:
1.- Open Xcode, open the current project. In the project structure (left menu), right click on the desired .storyboard file. Select “Open as > Source code”
2.- Inside the enormous XML file, find a tag with a tag inside it. The Find command (CMD+F) might be helpful.
3.- You might have several tags with attributes “destination”,”kind”,”relationship” and “id”; One on each line. Change the lines to the order of your preference (for example, the fourth becomes the first, the second is swapped with the third, etc). Useful keyboard shortcuts: ALT+arrow_up, ALT+arrow_down.
4.- Save (CMD+S) the file, again right click on the .storyboard and select “Open as > Interface Builder”. You might see your tabs in the desired order 🙂
Another useful thing: Inside the tag (could be also , or another derived class), you can set the “title” attribute. This value will be the text displayed as the tab name. More info in this SO question
Have a nice coding day!