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:

  1. Build your project (e.g. by running it)
  2. Move the build/xcode folder to the xcode folder.
  3. Update the Xcode project to use the correct paths
  4. Update the build.gradle file with the following Settings

     moe {
       xcode {
         generateProject false
         project 'xcode/<projectname>.xcodeproj'
       }
     }
    
  5. 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

  1. Create a Podfile in your Xcode project’s directory and configure CocoaPods to your needs (Note: use_frameworks! is required)
  2. Open Terminal, cd into your Pofile’s directory and run pod install
  3. Open your new Xcode workspace with Xcode (this is required to generate Xcode Schemes)
  4. 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>'
    
  5. Run your project from your favorite IDE

Create a new Binding

  1. Create a new binding configuration file using the Multi-OS Engine Actions > Create New Binding menu item.
  2. Next to the list on the left side, click add and select the type of binding you want to create
  3. Configure the binding, e.g. set the desired base package and specify an import code For example:

    #import "AFNetworking.h"
    
  4. Click on the gear icon next to the list and select Generate (in Eclipse the UI is slightly different)

Create ViewController stubs from Java

  1. Create a new ViewController class in Java
    • Base class: UIViewController
    • Add the usual alloc() and init() methods
    • Add the following Nat/J annotations on the class
    @Runtime(ObjCRuntime.class)
    @ObjCClassName("MyViewController")
    @RegisterOnStartup
    public class MyViewController extends UIViewController {
    
  2. Add the desired action methods like this:

      @IBAction
      @Selector("myButtonAction:")
      public void myButtonAction(UIButton view) {
      }
    
  3. 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;
     }
    
  4. Generate the stubs with the Multi-OS Engine Actions > Generate Actions and Outlets for Interface Builder menu item
  5. 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.

Updated:

Leave a Comment