MOE 1.3.0 beta 1 released
We are pleased to announce the release of the first beta of MOE 1.3. We already shared our plans for MOE 1.3 in a previous blog post. Now the core of these plans is becoming reality.
Please, keep in mind that this is a beta release, so be prepared for some bugs and rough edges. Feedback is very welcome here in the comments or on the forum.
What’s New in MOE 1.3.0 beta 1
Redesigned Xcode Project layout
The new Xcode project layout is more versatile and even less intrusive than our previous version in MOE 1.2. We also include a tool, that will update your MOE 1.2 Xcode project to MOE 1.3 from your favorite IDE.
CocoaPods (and other dependency management) support
The new Xcode project layout also supports using CocoaPods and other iOS specific options, e.g. the use of Xcode Workspaces.
Redesigned Native Binding generation
Now the binding generator has a new configuration file + a GUI editor (in Eclipse and IntelliJ / Android Studio as well). To create a new binding use the Multi-OS Engine Actions > Create New Binding
action from the context menu.
Basic Xcode project settings editing
Now it is not necessary to open Xcode to make some basic adjustments to your Xcode configuration. Both Eclipse and IntelliJ / Android Studio includes a simple Xcode editor. You can edit the same settings that were allowed previously in the build.gradle file when build time Xcode project generation was enabled.
This feature will mostly help those, who are working on Windows, and they don’t have direct access to a Mac.
You may open the Xcode editor using the Multi-OS Engine Actions > Open Xcode Editor
menu item.
Generate ViewController stubs from Java
As outlined in our plans for MOE 1.3 there are 2 ways to integrate with the Storyboard UI Designer in Xcode
One option is to create ViewController stubs in Objective-C and use the binding generator (with the new binding generator configuration) to generate the Java bindings for these stubs, and extend them in Java.
The other option is to create the ViewControllers in Java and generate Objective-C stubs, that can be used from Xcode to bind the IBOutlets and IBActions to a UI Design.
See below in the New Use Cases section for more details.
Installing / Upgrading to MOE 1.3 beta 1
This beta release is released in parallel with the stable MOE 1.2 series. Therefore you need to use custom repositories for the IDE plugins.
IntelliJ IDEA / Android Studio
- To install or upgrade to the MOE 1.3 beta 1 plugin in IntelliJ (and Android Studio), you need to add a custom plugin repository with the following URL:
https://plugins.jetbrains.com/plugins/Beta/8559
- After refreshing the repository contents, the 1.3.0-beta-1 plugin version will be available for installation or upgrade.
Eclipse
- To install or upgrade to the MOE 1.3 beta 1 plugin, you need to add the following custom plugin repository:
http://dl.bintray.com/multi-os-engine/eclipse-dev/
MOE SDK / Gradle Plugin
The SDK and Gradle plugin is released in the standard repository, just update your Gradle plugin dependency to 1.3.0-beta-1
in your build.gradle file.
Upgrading from MOE 1.2
Disable build-time Xcode project generation
If your project is still using build-time Xcode project generation, you will need to convert to the permanent Xcode project setup, as follows:
- Build your project (e.g. by running it)
- Move the
build/xcode
folder to thexcode
folder. - Update the Xcode project to use the correct paths
Update the build.gradle file with the following Settings
moe { xcode { generateProject false project 'xcode/<projectname>.xcodeproj' } }
- Clean and rebuild your project with MOE 1.2 (and make sure everything still works)
Upgrading the build.gradle file
First, you need to update the MOE Plugin in your IDE. Then, change the MOE Gradle plugin to 1.3.0-beta-1
in your build.gradle file, and reimport / synchronize your project with your updated IDE.
Upgrading the Xcode project
Finally, right click on the project and choose the Multi-OS Engine Actions > Inject/Refresh Xcode Project Settings
menu item.
New Use Cases
Add CocoaPods support to your MOE Project
- Create a Podfile in your Xcode project’s directory and configure CocoaPods to your needs (Note: use_frameworks! is required)
- Open Terminal, cd into your Pofile’s directory and run
pod install
- Open your new Xcode workspace with Xcode (this is required to generate Xcode Schemes)
In your MOE module’s build.gradle file set up the following properties:
moe.xcode.workspace 'path/to/xcworkspace' moe.xcode.mainScheme '<Scheme Name>' moe.xcode.testScheme '<Scheme Name>'
- Run your project from your favorite IDE
Create a new Binding
- Create a new binding configuration file using the
Multi-OS Engine Actions > Create New Binding
menu item. - Next to the list on the left side, click add and select the type of binding you want to create
Configure the binding, e.g. set the desired base package and specify an import code For example:
#import "AFNetworking.h"
- Click on the gear icon next to the list and select
Generate
(in Eclipse the UI is slightly different)
Create ViewController stubs from Java
- Create a new ViewController class in Java
- Base class:
UIViewController
- Add the usual
alloc()
andinit()
methods - Add the following Nat/J annotations on the class
@Runtime(ObjCRuntime.class) @ObjCClassName("MyViewController") @RegisterOnStartup public class MyViewController extends UIViewController {
- Base class:
Add the desired action methods like this:
@IBAction @Selector("myButtonAction:") public void myButtonAction(UIButton view) { }
Add the desired outlets like this:
private UIView outlet; @IBOutlet @Property @Selector("outlet") public UIView getOutlet() { return outlet; } @IBOutlet @Property @Selector("setOutlet:") public void setOutlet(UIView v) { outlet = v; }
- Generate the stubs with the
Multi-OS Engine Actions > Generate Actions and Outlets for Interface Builder
menu item - Open the project in Xcode, and the generated stubs will be in the
Multi-OS Engine
group.
Known Limitations
This is a first beta release, so we have a few known limitations.
Not all sample apps were updated
Only the Calculator and the CurrencyConverter samples were updated so far.
Adding MOE to an existing Xcode project
The command line tool is not present yet in this first beta, but if you create a new MOE project, then replace the Xcode project with your existing one, then you can already run the Xcode updater command from your IDE.
Only Eclipse Neon is supported
Eclipse Mars is not supported in the beta version. We have an ongoing RFC on our forum to discuss if Mars support is still needed.
Documentation not yet updated
The MOE documentation in general was not yet updated for the new version. This blog post contains the most relevant information about the new version. If you get stuck, or run into a bug, you can contact us on our forum
Windows support untested
Please do not try this on Windows yet, it is completely untested. Full Windows support will return in the final MOE 1.3 release.
Request for Comments
We designed MOE 1.3 based on the requests and reports from the MOE Community. We hope, that you will like these new features, and they will make your life easier as a developer.
As always, leave your comments below, so we will know your opinion on all the changes and plans. The development of MOE is based on the requirements of the community, so we are open to discuss any changes in direction or features for future releases.
If you need a specific feature in MOE, you may consider contracting Migeran, the core developers and project lead of the MOE project to develop it.
Also, if you are working on a commercial project with MOE, Migeran offers commercial support, including live online support with Migeran’s top engineers. Contact Migeran for more details.
Leave a Comment