<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://multi-os-engine.org/feed.xml" rel="self" type="application/atom+xml" /><link href="https://multi-os-engine.org/" rel="alternate" type="text/html" /><updated>2025-05-31T11:12:10+00:00</updated><id>https://multi-os-engine.org/feed.xml</id><title type="html">Multi-OS Engine</title><subtitle>Create iOS Apps in Java</subtitle><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><entry><title type="html">MOE Update #1: Reviving the Multi-OS Engine Project</title><link href="https://multi-os-engine.org/blog/2022-09-29-move-website-to-github/" rel="alternate" type="text/html" title="MOE Update #1: Reviving the Multi-OS Engine Project" /><published>2022-09-29T00:00:00+00:00</published><updated>2022-09-29T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/move-website-to-github</id><content type="html" xml:base="https://multi-os-engine.org/blog/2022-09-29-move-website-to-github/"><![CDATA[<p>Dear MOE Community,</p>

<p>after almost 1.5 years since the last release (MOE 1.4.4) we are reviving the Multi-OS Engine project. We started working on MOE in 2013 (back then it was called Migeran for iOS), and it will always have a special place in my professional life. Therefore it is my great personal sorrow, that we have left the project without maintenance for so long. I don’t want to delve into the past why and how this could happen. Instead let’s look into the future, and see how we can make sure that this does not happen again.</p>

<p>But first, I want to express my deepest gratitude towards you, the MOE Community who kept using MOE and demanded updates. You are a big part of MOE and a huge inspiration to continue this journey. I would like to thank especially NoisyFox, who even created community builds to make sure MOE works with newer versions of the Apple and Android tools.</p>

<p>Now let’s see what are the next steps for MOE.</p>

<h2 id="september-2019-release-moe-150-with-xcode-11-and-ios-13-support">September 2019: Release MOE 1.5.0 with XCode 11 and iOS 13 Support</h2>

<p>We already started working on the next release, that will make MOE functional again on current XCode and iOS versions. This release will include:</p>

<ul>
  <li>Updated tools to work on MacOS Mojave and Catalina</li>
  <li>Updated plugin with Android Studio 3.5 support</li>
  <li>Support for building with XCode 11</li>
</ul>

<p>It will most probably not include any new APIs (except for those that the generator can pick up without any changes).</p>

<h2 id="october-2019-moe-16-with-ipados-support">October 2019: MOE 1.6 with iPadOS Support</h2>

<p>In October we plan to release the next update that will include:</p>

<ul>
  <li>New iOS and iPadOS APIs</li>
  <li>Improvements to the Nat/J Generator to handle currently unsupported features (e.g. vector types in the AR API)</li>
</ul>

<h2 id="turning-moe-into-a-true-community-project">Turning MOE into a True Community Project</h2>

<p>We are committed to turning MOE into a true Community Project. This means multiple things:</p>

<ul>
  <li>We are going to invite external MOE contributors as committers into the project.</li>
  <li>We are also going to improve our response time with reviewing pull requests.</li>
  <li>We will also move the current website code into a public repository, so anyone can send us pull requests for the website contents as well.</li>
  <li>And last but not least: We are planning much more frequent communication with the members of the community (e.g. weekly updates).</li>
</ul>

<h2 id="in-the-next-project-update-longer-term-plans-of-moe">In the Next Project Update: Longer Term Plans of MOE</h2>

<p>We have way more plans and ideas for the future, that we are going to share in future updates. In the next update I will take a look at different components of MOE (the runtime, Nat/J and the generator … etc.), and what you can expect in the foreseeable future.</p>

<p>As always, feedback is very welcome here in the comments or <a href="https://discuss.multi-os-engine.org">on the forum</a>.</p>

<p>Looking forward to hearing from you.</p>

<p>Gergely Kis<br />
MOE Project Lead</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[It is time to upgrade.]]></summary></entry><entry><title type="html">Moved MOE Website to GitHub Pages</title><link href="https://multi-os-engine.org/blog/2022-09-29-moved-to-github-pages/" rel="alternate" type="text/html" title="Moved MOE Website to GitHub Pages" /><published>2022-09-29T00:00:00+00:00</published><updated>2022-09-29T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moved-to-github-pages</id><content type="html" xml:base="https://multi-os-engine.org/blog/2022-09-29-moved-to-github-pages/"><![CDATA[<p>Dear MOE Community,</p>

<p>today we moved the <a href="https://multi-os-engine.org">https://multi-os-engine.org</a> website to <a href="https://github.com/multi-os-engine/multi-os-engine.github.io">GitHub Pages</a>, so anyone can send in PRs to update the website.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author></entry><entry><title type="html">MOE Update #1: Reviving the Multi-OS Engine Project</title><link href="https://multi-os-engine.org/blog/2019-09-11-reviving-moe/" rel="alternate" type="text/html" title="MOE Update #1: Reviving the Multi-OS Engine Project" /><published>2019-09-11T00:00:00+00:00</published><updated>2019-09-11T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/reviving-moe</id><content type="html" xml:base="https://multi-os-engine.org/blog/2019-09-11-reviving-moe/"><![CDATA[<p>Dear MOE Community,</p>

<p>after almost 1.5 years since the last release (MOE 1.4.4) we are reviving the Multi-OS Engine project. We started working on MOE in 2013 (back then it was called Migeran for iOS), and it will always have a special place in my professional life. Therefore it is my great personal sorrow, that we have left the project without maintenance for so long. I don’t want to delve into the past why and how this could happen. Instead let’s look into the future, and see how we can make sure that this does not happen again.</p>

<p>But first, I want to express my deepest gratitude towards you, the MOE Community who kept using MOE and demanded updates. You are a big part of MOE and a huge inspiration to continue this journey. I would like to thank especially NoisyFox, who even created community builds to make sure MOE works with newer versions of the Apple and Android tools.</p>

<p>Now let’s see what are the next steps for MOE.</p>

<h2 id="september-2019-release-moe-150-with-xcode-11-and-ios-13-support">September 2019: Release MOE 1.5.0 with XCode 11 and iOS 13 Support</h2>

<p>We already started working on the next release, that will make MOE functional again on current XCode and iOS versions. This release will include:</p>

<ul>
  <li>Updated tools to work on MacOS Mojave and Catalina</li>
  <li>Updated plugin with Android Studio 3.5 support</li>
  <li>Support for building with XCode 11</li>
</ul>

<p>It will most probably not include any new APIs (except for those that the generator can pick up without any changes).</p>

<h2 id="october-2019-moe-16-with-ipados-support">October 2019: MOE 1.6 with iPadOS Support</h2>

<p>In October we plan to release the next update that will include:</p>

<ul>
  <li>New iOS and iPadOS APIs</li>
  <li>Improvements to the Nat/J Generator to handle currently unsupported features (e.g. vector types in the AR API)</li>
</ul>

<h2 id="turning-moe-into-a-true-community-project">Turning MOE into a True Community Project</h2>

<p>We are committed to turning MOE into a true Community Project. This means multiple things:</p>

<ul>
  <li>We are going to invite external MOE contributors as committers into the project.</li>
  <li>We are also going to improve our response time with reviewing pull requests.</li>
  <li>We will also move the current website code into a public repository, so anyone can send us pull requests for the website contents as well.</li>
  <li>And last but not least: We are planning much more frequent communication with the members of the community (e.g. weekly updates).</li>
</ul>

<h2 id="in-the-next-project-update-longer-term-plans-of-moe">In the Next Project Update: Longer Term Plans of MOE</h2>

<p>We have way more plans and ideas for the future, that we are going to share in future updates. In the next update I will take a look at different components of MOE (the runtime, Nat/J and the generator … etc.), and what you can expect in the foreseeable future.</p>

<p>As always, feedback is very welcome here in the comments or <a href="https://discuss.multi-os-engine.org">on the forum</a>.</p>

<p>Looking forward to hearing from you.</p>

<p>Gergely Kis<br />
MOE Project Lead</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[It is time to upgrade.]]></summary></entry><entry><title type="html">MOE 1.3.0 released</title><link href="https://multi-os-engine.org/blog/2017-03-16-moe-1.3.0-released/" rel="alternate" type="text/html" title="MOE 1.3.0 released" /><published>2017-03-16T00:00:00+00:00</published><updated>2017-03-16T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moe-1.3.0-released</id><content type="html" xml:base="https://multi-os-engine.org/blog/2017-03-16-moe-1.3.0-released/"><![CDATA[<p>We are pleased to announce the release of MOE 1.3.0. Most of MOE users already moved to the previous betas, if you are still on MOE 1.2.x, it is time to update now.</p>

<p>MOE 1.3 is a big improvement over 1.2 with lots of new features. Most of these features were already included in the <a href="/blog/2016-12-16-moe-1.3.0-beta-1-released/">previous</a> <a href="/blog/2017-01-25-moe-1.3.0-beta-2-released/">beta</a> releases. Read on to find out what new stuff we included in the final release of 1.3.</p>

<p>Feedback is very welcome here in the comments or <a href="https://discuss.multi-os-engine.org">on the forum</a>.</p>

<h2 id="whats-new-in-moe-130-compared-to-beta-2">What’s New in MOE 1.3.0 (compared to beta 2)</h2>

<h3 id="updated-ios-bindings">Updated iOS Bindings</h3>

<p>The iOS bindings were updated with more accurate type information in function pointers and blocks. We also updated internal bindings for clang and libimobiledevice.</p>

<h3 id="moe-bindings-for-3rd-party-libraries">MOE Bindings for 3rd Party Libraries</h3>

<p>We started a new <a href="https://github.com/multi-os-engine/moe-bindings">MOE Bindings</a> repository with pre-generated MOE bindings for a number of frequently used libraries:</p>

<ul>
  <li>Crashlytics</li>
  <li>Facebook</li>
  <li>Firebase (partial)</li>
  <li>Google GPG</li>
  <li>Google Plus</li>
  <li>Google SignIn</li>
  <li>MoPub</li>
</ul>

<p>The generated bindings can be published to your local maven repository using the following command:</p>

<div class="language-shell highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./gradlew :&lt;module-name&gt;:publishMavenJavaPublicationToMavenLocal
</code></pre></div></div>

<p>Then you just need to add it as a regular Maven dependency in your MOE app. Don’t forget to link to the native part of the library as well, e.g. using CocoaPods.</p>

<p>Each binding project also doubles as a test project for the bindings, so you can import them into your IDE and try them out.</p>

<p>We intend to publish these bindings to JCenter, once they received a bit more testing.</p>

<h3 id="updated-samples">Updated Samples</h3>

<p>The samples were updated to MOE 1.3. Some obsolete samples were removed. A new SimpleCharts based sample was added showing the use of a Swift library in a MOE App.</p>

<h3 id="updated-natjgen">Updated NatJGen</h3>

<ul>
  <li>Improved logic for resolving types in function pointers and blocks</li>
  <li>Unwrap typedefs when looking for opaque pointers</li>
  <li>Support for NBC file format</li>
  <li>Options for keeping logs and generated .natjgen files</li>
</ul>

<h3 id="ide-plugin-improvements">IDE Plugin improvements</h3>

<ul>
  <li>Fix action and outlet generation in Maven projects</li>
  <li>Add Kotlin project templates</li>
  <li>Add new settings to the Binding Editor</li>
  <li>Fixed escaping for argument passing in the launcher</li>
</ul>

<h3 id="gradle-plugin-updates">Gradle Plugin Updates</h3>

<ul>
  <li>Added additional parameters in the IPA build task</li>
  <li>Use archive and export archive to generate IPA build</li>
  <li>Generate Xcode schemes if they don’t exist (required for Xcode workspace based projects)</li>
  <li>Added moeNatjgen task to generate bindings from the command line (IDE plugins now use this task internally)</li>
  <li>Specifying a custom SDK version for the plugin</li>
</ul>

<h3 id="various-other-updates">Various other updates</h3>

<ul>
  <li>NatJ: Fixed use-after-free bug</li>
  <li>Maven plugin: Add support for generating actions and outlets</li>
  <li>Internal documentation updates</li>
  <li>Cleanups all over the codebase</li>
  <li>Device launcher: added support for waiting for the user to unlock the connected device</li>
  <li>Various other fixes and cleanups</li>
</ul>

<h2 id="upgrading-to-moe-13">Upgrading to MOE 1.3</h2>

<p>If you are a 1.3 beta user, then you can upgrade the following:</p>

<ul>
  <li>To upgrade the Gradle plugin make sure you are using a plugin version which enables upgrading to <code class="language-plaintext highlighter-rouge">1.3.0-beta-2</code>, for example <code class="language-plaintext highlighter-rouge">1.3.+</code>. To force the upgrade, you can run <code class="language-plaintext highlighter-rouge">./gradlew --refresh-dependencies</code>.</li>
  <li>To upgrade to the new <a href="https://bintray.com/multi-os-engine/maven-dev/moe-maven/1.3.0">Maven plugin</a>, use the following dependency.</li>
</ul>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
  <span class="nt">&lt;groupId&gt;</span>org.multi-os-engine<span class="nt">&lt;/groupId&gt;</span>
  <span class="nt">&lt;artifactId&gt;</span>moe-maven<span class="nt">&lt;/artifactId&gt;</span>
  <span class="nt">&lt;version&gt;</span>1.3.0<span class="nt">&lt;/version&gt;</span>
  <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
</code></pre></div></div>

<ul>
  <li>To upgrade your project, please install the latest Eclipse and/or IntelliJ plugin, open your project, right click on the MOE module and select <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Inject/Refresh Xcode Project Settings</code></li>
  <li>You may install or upgrade to the MOE 1.3.0 plugin in IntelliJ (and Android Studio) using the standard plugin repositories, no need to configure the beta cheannel manually.</li>
  <li>
    <p>To install or upgrade to the MOE 1.3.0 plugin in Eclipse, you need to add the following plugin repository:</p>

    <p><a href="http://dl.bintray.com/multi-os-engine/eclipse/">http://dl.bintray.com/multi-os-engine/eclipse/</a></p>
  </li>
</ul>

<p>We created a <a href="https://github.com/multi-os-engine/moe-plugin-gradle/blob/master/doc/Upgrading-to-Multi-OS-Engine-1.3.md">more detailed guide</a> for upgrading from MOE 1.2.</p>

<h2 id="known-limitations">Known Limitations</h2>

<h3 id="adding-moe-to-an-existing-xcode-project">Adding MOE to an existing Xcode project</h3>

<p>The command line tool is not present yet, 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.</p>

<h3 id="documentation-update-is-in-progress">Documentation update is in progress</h3>

<p>We wanted to get the new version out to you as soon as possible. We will continue working on updated documentation and release updates as the become available. 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 <a href="https://discuss.multi-os-engine.org">on our forum</a>.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[It is time to upgrade.]]></summary></entry><entry><title type="html">MOE 1.3.0 beta 2 released</title><link href="https://multi-os-engine.org/blog/2017-01-25-moe-1.3.0-beta-2-released/" rel="alternate" type="text/html" title="MOE 1.3.0 beta 2 released" /><published>2017-01-25T00:00:00+00:00</published><updated>2017-01-25T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moe-1.3.0-beta-2-released</id><content type="html" xml:base="https://multi-os-engine.org/blog/2017-01-25-moe-1.3.0-beta-2-released/"><![CDATA[<p>We are pleased to announce the release of the second beta of MOE 1.3. We already shared our plans for MOE 1.3 in a <a href="/blog/2016-12-05-plans-for-moe-1.3/">previous blog post</a> and since the <a href="/blog/2016-12-16-moe-1.3.0-beta-1-released/">last beta</a> a lot of improvements have been made.</p>

<p>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 <a href="https://discuss.multi-os-engine.org">on the forum</a>.</p>

<h2 id="whats-new-in-moe-130-beta-2">What’s New in MOE 1.3.0 beta 2</h2>

<h3 id="updated-bindings">Updated Bindings</h3>

<p>iOS bindings in the new beta contains support for iOS 10.2. Also added bindings for the community requested <code class="language-plaintext highlighter-rouge">SystemConfiguration/CaptiveNetwork.h</code>.</p>

<p>There were also some fixes in existing bindings:</p>

<ul>
  <li>@ReferenceInfo annotation generation was improved.</li>
  <li><code class="language-plaintext highlighter-rouge">+initialize</code> and <code class="language-plaintext highlighter-rouge">+load</code> method bindings were removed. Both of these methods shouldn’t be invoked directly and only caused issues with third party library bindings.</li>
</ul>

<h3 id="custom-objective-c-class-and-protocol-runtime-names">Custom Objective-C Class and Protocol Runtime Names</h3>

<p>The binding generator with the new nbc file support is already a big change, however there is always room for improvement. In this release we added support for handling custom runtime names for Objective-C classes and protocols. This allows our users to create bindings for 3rd party libraries which are written in Swift but are Objective-C compatible. Our new sample - <a href="https://github.com/multi-os-engine/moe-samples-java/tree/master/SimpleChart">SimpleChart</a> - already makes use of this feature.</p>

<h3 id="moe-sdk-distribution">MOE SDK Distribution</h3>

<p>The SDK installation process was removed in this beta. When Gradle downloads the MOE SDK, there are no additional processing steps other than extracting it. In return the SDK is prepared faster and the process is much less error prone.</p>

<h3 id="nbc-binding-generation">NBC Binding Generation</h3>

<p>We added support for choosing between generating hybrid or binding classes. By default we supported binding classes. This gave you access to Objective-C APIs in Java. Hybrid classes extend on this by enabling you to extend existing Objective-C classes with Java code without inheritance.</p>

<p>This feature is mostly used to implement / extend UIViewController classes, that were created in Xcode and used in Storyboard designs. (Note, that MOE supports also generating Objective-C UIViewController stubs in Java UIViewController classes, if you prefer to start the implementation of your UI code from Java.)</p>

<h3 id="resource-handling-in-gradle">Resource Handling in Gradle</h3>

<p>In this beta we improved resource handling in the Gradle plugin. All resources should be correctly collected. Jar dependencies, custom resource directories, source set dependencies, etc. should work just fine.</p>

<h3 id="ui-actions-and-outlets-generation">UI Actions and Outlets Generation</h3>

<p>Generating UI actions and outlets can now be configured. We added support for adding custom code snippets, disabling library imports and specifying which classes should be used during generation. You can read more about this <a href="https://github.com/multi-os-engine/moe-plugin-gradle#ui-actions-and-outlets">here</a>.</p>

<h3 id="other-changes">Other Changes</h3>

<p>Other than the above changes, we also made a lot of under-the-hood improvements in NatJ, NatJGen, Gradle plugin, Maven plugin, IDEA plugin, Eclipse plugin and other components.</p>

<h2 id="upgrading-to-moe-13-beta-2">Upgrading to MOE 1.3 beta 2</h2>

<p>If you are a 1.3 beta 1 user, then you can upgrade the following:</p>

<ul>
  <li>To upgrade the Gradle plugin make sure you are using a plugin version which enables upgrading to <code class="language-plaintext highlighter-rouge">1.3.0-beta-2</code>, for example <code class="language-plaintext highlighter-rouge">1.3.+</code>. To force the upgrade, you can run <code class="language-plaintext highlighter-rouge">./gradlew --refresh-dependencies</code>.</li>
  <li>To upgrade to the new <a href="https://bintray.com/multi-os-engine/maven-dev/moe-maven/1.3.0-beta-2">Maven plugin</a>, use the following dependency.</li>
</ul>

<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">&lt;dependency&gt;</span>
  <span class="nt">&lt;groupId&gt;</span>org.multi-os-engine<span class="nt">&lt;/groupId&gt;</span>
  <span class="nt">&lt;artifactId&gt;</span>moe-maven<span class="nt">&lt;/artifactId&gt;</span>
  <span class="nt">&lt;version&gt;</span>1.3.0-beta-2<span class="nt">&lt;/version&gt;</span>
  <span class="nt">&lt;type&gt;</span>pom<span class="nt">&lt;/type&gt;</span>
<span class="nt">&lt;/dependency&gt;</span>
</code></pre></div></div>

<ul>
  <li>To upgrade your project, please install the latest Eclipse and/or IntelliJ plugin, open your project, right click on the MOE module and select <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Inject/Refresh Xcode Project Settings</code></li>
  <li>
    <p>To install or upgrade to the MOE 1.3 beta 2 plugin in IntelliJ (and Android Studio), you need to add a custom plugin repository with the following URL:</p>

    <p><a href="https://plugins.jetbrains.com/plugins/Beta/8559">https://plugins.jetbrains.com/plugins/Beta/8559</a></p>

    <p>After refreshing the repository contents, the 1.3.0-beta-2 plugin version will be available for installation or upgrade.</p>
  </li>
  <li>
    <p>To install or upgrade to the MOE 1.3 beta 2 plugin, you need to add the following custom plugin repository:</p>

    <p><a href="http://dl.bintray.com/multi-os-engine/eclipse-dev/">http://dl.bintray.com/multi-os-engine/eclipse-dev/</a></p>
  </li>
</ul>

<p>We created a <a href="https://github.com/multi-os-engine/moe-plugin-gradle/blob/master/doc/Upgrading-to-Multi-OS-Engine-1.3.md">more detailed guide</a> for upgrading from MOE 1.2.</p>

<h2 id="known-limitations">Known Limitations</h2>

<p>This is a second beta release, so we have a few known limitations.</p>

<h3 id="not-all-sample-apps-were-updated">Not all sample apps were updated</h3>

<p>Most of our Java samples are updated to 1.3. Don’t worry, Kotlin samples are on our TODO list!</p>

<h3 id="adding-moe-to-an-existing-xcode-project">Adding MOE to an existing Xcode project</h3>

<p>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.</p>

<h3 id="documentation-not-yet-updated">Documentation not yet updated</h3>

<p>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 <a href="https://discuss.multi-os-engine.org">on our forum</a>.</p>

<h3 id="windows-support">Windows support</h3>

<p>This beta should have a working Windows support, but is was not heavily tested.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[The huge leap, improved!]]></summary></entry><entry><title type="html">Using LibGDX with MOE 1.3.0 beta 1</title><link href="https://multi-os-engine.org/blog/2016-12-18-using-libgdx-with-moe-1.3.0-beta-1/" rel="alternate" type="text/html" title="Using LibGDX with MOE 1.3.0 beta 1" /><published>2016-12-18T00:00:00+00:00</published><updated>2016-12-18T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/using-libgdx-with-moe-1.3.0-beta-1</id><content type="html" xml:base="https://multi-os-engine.org/blog/2016-12-18-using-libgdx-with-moe-1.3.0-beta-1/"><![CDATA[<p>We just released the first beta of MOE 1.3 with <a href="/blog/2016-12-16-moe-1.3.0-beta-1-released/">tons of new features</a>.</p>

<p>As mentioned in the release announcement, MOE 1.3 includes a tool to upgrade the Xcode part of a MOE 1.2 project without manual intervention.</p>

<p>In this blog post we will look at how a project created by the <a href="https://libgdx.badlogicgames.com">LibGDX</a> 1.9.5 setup tool can be upgraded to use MOE 1.3. If you already have a MOE 1.2 based LibGDX project, you may follow the following guide to upgrade it as well.</p>

<p>This guide assumes, that you already installed the MOE 1.3 versions of your IDE plugins.</p>

<h2 id="create-your-moe-based-libgdx-project">Create your MOE based LibGDX project</h2>

<ol>
  <li>Download the latest setup tool from the <a href="https://libgdx.badlogicgames.com">LibGDX project website</a>.</li>
  <li>
    <p>Create your new LibGDX project by running the tool from the command line.</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code> java -jar gdx-setup.jar
</code></pre></div>    </div>
  </li>
  <li>Follow the instructions of the setup tool. Make sure you select the <code class="language-plaintext highlighter-rouge">ios-moe</code> platform to create the MOE based iOS module.</li>
</ol>

<h2 id="edit-the-gradle-project-files">Edit the Gradle project files</h2>

<ol>
  <li>In the top level build.gradle file change the <code class="language-plaintext highlighter-rouge">moe-gradle</code> plugin version to <code class="language-plaintext highlighter-rouge">1.3.0-beta-1</code></li>
  <li>In the <code class="language-plaintext highlighter-rouge">ios-moe</code> module change the moe section in the build.gradle file as follows:</li>
</ol>

<div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">moe</span> <span class="o">{</span>
    <span class="n">xcode</span> <span class="o">{</span>
      <span class="n">project</span> <span class="s1">'xcode/ios-moe.xcodeproj'</span>
      <span class="n">mainTarget</span> <span class="s1">'ios-moe'</span>
      <span class="n">testTarget</span> <span class="s1">'ios-moe-Test'</span>
    <span class="o">}</span>
<span class="o">}</span>
</code></pre></div></div>

<h2 id="update-the-xcode-project">Update the Xcode project</h2>

<ol>
  <li>Import the updated project into your favorite IDE</li>
  <li>Right click on the <code class="language-plaintext highlighter-rouge">ios-moe</code> module and use the <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Inject/Refresh Xcode Project Settings</code></li>
</ol>

<h2 id="ready-to-run">Ready to Run</h2>

<p>Now your project should be ready for MOE 1.3. Launch from your IDE and Enjoy!</p>

<p><strong>Note:</strong> If you have not used MOE before, then you will need to set up code signing. Follow the instructions on the <a href="/start/">MOE Website</a> on how to set the default team for developer signing.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[Enjoy the best of MOE also for game development]]></summary></entry><entry><title type="html">MOE 1.3.0 beta 1 released</title><link href="https://multi-os-engine.org/blog/2016-12-16-moe-1.3.0-beta-1-released/" rel="alternate" type="text/html" title="MOE 1.3.0 beta 1 released" /><published>2016-12-16T00:00:00+00:00</published><updated>2016-12-16T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moe-1.3.0-beta-1-released</id><content type="html" xml:base="https://multi-os-engine.org/blog/2016-12-16-moe-1.3.0-beta-1-released/"><![CDATA[<p>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 <a href="/blog/2016-12-05-plans-for-moe-1.3/">previous blog post</a>. Now the core of these plans is becoming reality.</p>

<p>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 <a href="https://discuss.multi-os-engine.org">on the forum</a>.</p>

<h2 id="whats-new-in-moe-130-beta-1">What’s New in MOE 1.3.0 beta 1</h2>

<h3 id="redesigned-xcode-project-layout">Redesigned Xcode Project layout</h3>

<p>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.</p>

<h3 id="cocoapods-and-other-dependency-management-support">CocoaPods (and other dependency management) support</h3>

<p>The new Xcode project layout also supports using CocoaPods and other iOS specific options, e.g. the use of Xcode Workspaces.</p>

<h3 id="redesigned-native-binding-generation">Redesigned Native Binding generation</h3>

<p>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 <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Create New Binding</code> action from the context menu.</p>

<h3 id="basic-xcode-project-settings-editing">Basic Xcode project settings editing</h3>

<p>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.</p>

<p>This feature will mostly help those, who are working on Windows, and they don’t have direct access to a Mac.</p>

<p>You may open the Xcode editor using the <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Open Xcode Editor</code> menu item.</p>

<h3 id="generate-viewcontroller-stubs-from-java">Generate ViewController stubs from Java</h3>

<p>As outlined in our <a href="/blog/2016-12-05-plans-for-moe-1.3/">plans for MOE 1.3</a> there are 2 ways to integrate with the Storyboard UI Designer in Xcode</p>

<ul>
  <li>
    <p>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.</p>
  </li>
  <li>
    <p>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.</p>
  </li>
</ul>

<p>See below in the <em>New Use Cases</em> section for more details.</p>

<h2 id="installing--upgrading-to-moe-13-beta-1">Installing / Upgrading to MOE 1.3 beta 1</h2>

<p>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.</p>

<h3 id="intellij-idea--android-studio">IntelliJ IDEA / Android Studio</h3>

<ul>
  <li>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:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">https://plugins.jetbrains.com/plugins/Beta/8559</code></li>
    </ul>
  </li>
  <li>After refreshing the repository contents, the 1.3.0-beta-1 plugin version will be available for installation or upgrade.</li>
</ul>

<h3 id="eclipse">Eclipse</h3>

<ul>
  <li>To install or upgrade to the MOE 1.3 beta 1 plugin, you need to add the following custom plugin repository:
    <ul>
      <li><code class="language-plaintext highlighter-rouge">http://dl.bintray.com/multi-os-engine/eclipse-dev/</code></li>
    </ul>
  </li>
</ul>

<h3 id="moe-sdk--gradle-plugin">MOE SDK / Gradle Plugin</h3>

<p>The SDK and Gradle plugin is released in the standard repository, just update your Gradle plugin dependency to <code class="language-plaintext highlighter-rouge">1.3.0-beta-1</code> in your build.gradle file.</p>

<h2 id="upgrading-from-moe-12">Upgrading from MOE 1.2</h2>

<h3 id="disable-build-time-xcode-project-generation">Disable build-time Xcode project generation</h3>

<p>If your project is still using build-time Xcode project generation, you will need to convert to the permanent Xcode project setup, as follows:</p>

<ol>
  <li>Build your project (e.g. by running it)</li>
  <li>Move the <code class="language-plaintext highlighter-rouge">build/xcode</code> folder to the <code class="language-plaintext highlighter-rouge">xcode</code> folder.</li>
  <li>Update the Xcode project to use the correct paths</li>
  <li>
    <p>Update the build.gradle file with the following Settings</p>

    <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">moe</span> <span class="o">{</span>
   <span class="n">xcode</span> <span class="o">{</span>
     <span class="n">generateProject</span> <span class="kc">false</span>
     <span class="n">project</span> <span class="s1">'xcode/&lt;projectname&gt;.xcodeproj'</span>
   <span class="o">}</span>
 <span class="o">}</span>
</code></pre></div>    </div>
  </li>
  <li>Clean and rebuild your project with MOE 1.2 (and make sure everything still works)</li>
</ol>

<h3 id="upgrading-the-buildgradle-file">Upgrading the build.gradle file</h3>

<p>First, you need to update the MOE Plugin in your IDE. Then, change the MOE Gradle plugin to <code class="language-plaintext highlighter-rouge">1.3.0-beta-1</code> in your build.gradle file, and reimport / synchronize your project with your updated IDE.</p>

<h3 id="upgrading-the-xcode-project">Upgrading the Xcode project</h3>

<p>Finally, right click on the project and choose the <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Inject/Refresh Xcode Project Settings</code> menu item.</p>

<h2 id="new-use-cases">New Use Cases</h2>

<h3 id="add-cocoapods-support-to-your-moe-project">Add CocoaPods support to your MOE Project</h3>

<ol>
  <li>Create a Podfile in your Xcode project’s directory and configure CocoaPods to your needs (Note: use_frameworks! is required)</li>
  <li>Open Terminal, cd into your Pofile’s directory and run <code class="language-plaintext highlighter-rouge">pod install</code></li>
  <li>Open your new Xcode workspace with Xcode (this is required to generate Xcode Schemes)</li>
  <li>
    <p>In your MOE module’s build.gradle file set up the following properties:</p>

    <div class="language-groovy highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">moe</span><span class="o">.</span><span class="na">xcode</span><span class="o">.</span><span class="na">workspace</span> <span class="s1">'path/to/xcworkspace'</span>
<span class="n">moe</span><span class="o">.</span><span class="na">xcode</span><span class="o">.</span><span class="na">mainScheme</span> <span class="s1">'&lt;Scheme Name&gt;'</span>
<span class="n">moe</span><span class="o">.</span><span class="na">xcode</span><span class="o">.</span><span class="na">testScheme</span> <span class="s1">'&lt;Scheme Name&gt;'</span>
</code></pre></div>    </div>
  </li>
  <li>Run your project from your favorite IDE</li>
</ol>

<h3 id="create-a-new-binding">Create a new Binding</h3>

<ol>
  <li>Create a new binding configuration file using the <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Create New Binding</code> menu item.</li>
  <li>Next to the list on the left side, click add and select the type of binding you want to create</li>
  <li>
    <p>Configure the binding, e.g. set the desired base package and specify an import code For example:</p>

    <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>#import "AFNetworking.h"
</code></pre></div>    </div>
  </li>
  <li>Click on the gear icon next to the list and select <code class="language-plaintext highlighter-rouge">Generate</code> (in Eclipse the UI is slightly different)</li>
</ol>

<h3 id="create-viewcontroller-stubs-from-java">Create ViewController stubs from Java</h3>

<ol>
  <li>Create a new ViewController class in Java
    <ul>
      <li>Base class: <code class="language-plaintext highlighter-rouge">UIViewController</code></li>
      <li>Add the usual <code class="language-plaintext highlighter-rouge">alloc()</code> and <code class="language-plaintext highlighter-rouge">init()</code> methods</li>
      <li>Add the following Nat/J annotations on the class</li>
    </ul>

    <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nd">@Runtime</span><span class="o">(</span><span class="nc">ObjCRuntime</span><span class="o">.</span><span class="na">class</span><span class="o">)</span>
<span class="nd">@ObjCClassName</span><span class="o">(</span><span class="s">"MyViewController"</span><span class="o">)</span>
<span class="nd">@RegisterOnStartup</span>
<span class="kd">public</span> <span class="kd">class</span> <span class="nc">MyViewController</span> <span class="kd">extends</span> <span class="nc">UIViewController</span> <span class="o">{</span>
</code></pre></div>    </div>
  </li>
  <li>
    <p>Add the desired action methods like this:</p>

    <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>  <span class="nd">@IBAction</span>
  <span class="nd">@Selector</span><span class="o">(</span><span class="s">"myButtonAction:"</span><span class="o">)</span>
  <span class="kd">public</span> <span class="kt">void</span> <span class="nf">myButtonAction</span><span class="o">(</span><span class="nc">UIButton</span> <span class="n">view</span><span class="o">)</span> <span class="o">{</span>
  <span class="o">}</span>
</code></pre></div>    </div>
  </li>
  <li>
    <p>Add the desired outlets like this:</p>

    <div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code>
 <span class="kd">private</span> <span class="nc">UIView</span> <span class="n">outlet</span><span class="o">;</span>

 <span class="nd">@IBOutlet</span>
 <span class="nd">@Property</span>
 <span class="nd">@Selector</span><span class="o">(</span><span class="s">"outlet"</span><span class="o">)</span>
 <span class="kd">public</span> <span class="nc">UIView</span> <span class="nf">getOutlet</span><span class="o">()</span> <span class="o">{</span>
   <span class="k">return</span> <span class="n">outlet</span><span class="o">;</span>
 <span class="o">}</span>

 <span class="nd">@IBOutlet</span>
 <span class="nd">@Property</span>
 <span class="nd">@Selector</span><span class="o">(</span><span class="s">"setOutlet:"</span><span class="o">)</span>
 <span class="kd">public</span> <span class="kt">void</span> <span class="nf">setOutlet</span><span class="o">(</span><span class="nc">UIView</span> <span class="n">v</span><span class="o">)</span> <span class="o">{</span>
   <span class="n">outlet</span> <span class="o">=</span> <span class="n">v</span><span class="o">;</span>
 <span class="o">}</span>
</code></pre></div>    </div>
  </li>
  <li>Generate the stubs with the <code class="language-plaintext highlighter-rouge">Multi-OS Engine Actions &gt; Generate Actions and Outlets for Interface Builder</code> menu item</li>
  <li>Open the project in Xcode, and the generated stubs will be in the <code class="language-plaintext highlighter-rouge">Multi-OS Engine</code> group.</li>
</ol>

<h2 id="known-limitations">Known Limitations</h2>

<p>This is a first beta release, so we have a few known limitations.</p>

<h3 id="not-all-sample-apps-were-updated">Not all sample apps were updated</h3>

<p>Only the Calculator and the CurrencyConverter samples were updated so far.</p>

<h3 id="adding-moe-to-an-existing-xcode-project">Adding MOE to an existing Xcode project</h3>

<p>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.</p>

<h3 id="only-eclipse-neon-is-supported">Only Eclipse Neon is supported</h3>

<p>Eclipse Mars is not supported in the beta version. We have an ongoing <a href="https://discuss.multi-os-engine.org/t/rfc-do-you-still-need-eclipse-mars-support/449">RFC on our forum</a> to discuss if Mars support is still needed.</p>

<h3 id="documentation-not-yet-updated">Documentation not yet updated</h3>

<p>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 <a href="https://discuss.multi-os-engine.org">on our forum</a></p>

<h3 id="windows-support-untested">Windows support untested</h3>

<p>Please do not try this on Windows yet, it is completely untested. Full Windows support will return in the final MOE 1.3 release.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[Small step...who are we kidding? This is a huge leap!]]></summary></entry><entry><title type="html">MOE 1.2.x: Patch Releases</title><link href="https://multi-os-engine.org/blog/2016-12-05-moe-1.2.5/" rel="alternate" type="text/html" title="MOE 1.2.x: Patch Releases" /><published>2016-12-05T00:00:00+00:00</published><updated>2016-12-05T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moe-1.2.5</id><content type="html" xml:base="https://multi-os-engine.org/blog/2016-12-05-moe-1.2.5/"><![CDATA[<p>We released a few patch releases for the MOE 1.2 series, but these did not get a separate announcement. From now on, we will announce every patch release here on our blog as well.</p>

<p>Please read on for more information on the changes that were introduced by each patch release.</p>

<p>To update from an earlier MOE 1.2 SDK / Gradle plugin version, you should run Gradle with the <code class="language-plaintext highlighter-rouge">--refresh-dependencies</code> option.</p>

<p>The IDE plugins can be updated using the standard plugin update mechanism from inside the IDE. (IDE plugin versions may differ from SDK versions.)</p>

<h2 id="moe-sdk--gradle-plugin">MOE SDK / Gradle Plugin</h2>

<h3 id="125">1.2.5</h3>

<ul>
  <li>Fixed compare flag clobbering in the arm64 Quick compiler backend</li>
</ul>

<h3 id="124">1.2.4</h3>

<ul>
  <li>Nat/J: Be more flexible when matching Objective-C class hierarchies to Java
    <ul>
      <li>This was required to handle class hierarchy differences between iOS 9 and iOS 10 gracefully.</li>
    </ul>
  </li>
</ul>

<h3 id="123">1.2.3</h3>

<ul>
  <li>Source code of the MOE Java libraries (Core and iOS bindings) are now included in the SDK to enable a better debugging experience.</li>
</ul>

<h3 id="121">1.2.1</h3>

<ul>
  <li>Fixed MOE runtime initialization (mmap logic for art and oat segments)</li>
  <li>Fixed Xcode 7 compatibility</li>
</ul>

<h2 id="moe-intellij--android-studio-plugin">MOE IntelliJ / Android Studio Plugin</h2>

<h3 id="121-1">1.2.1</h3>

<ul>
  <li>Changed Gradle global settings, added separate log and stacktrace settings</li>
  <li>Fixed some issues: disposed module, NullPointerExceptions, Synchronize to Xcode, device list population</li>
  <li>Added Device Chooser Dialog to launch configuration</li>
</ul>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[Updates to the stable branch]]></summary></entry><entry><title type="html">MOE Roadmap 2016 - 2017 Winter</title><link href="https://multi-os-engine.org/blog/2016-12-05-moe-roadmap/" rel="alternate" type="text/html" title="MOE Roadmap 2016 - 2017 Winter" /><published>2016-12-05T00:00:00+00:00</published><updated>2016-12-05T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/moe-roadmap</id><content type="html" xml:base="https://multi-os-engine.org/blog/2016-12-05-moe-roadmap/"><![CDATA[<p>While the MOE project blog was not updated in the last couple of weeks, the team was working hard to get the next releases of MOE out the door.</p>

<p>In this blog post we will outline our plans for the next couple of months.</p>

<h2 id="the-road-so-far">The Road So Far</h2>

<p>Since the start of the Multi-OS Engine Open Source Project we made a number of releases:</p>

<ul>
  <li><strong><a href="/blog/2016-08-18-multi-os-engine-is-open-source/">08/2016 MOE 1.0</a></strong>
    <ul>
      <li>Initial Open Source Release</li>
      <li>Released by Intel</li>
      <li>Open-sourced both the stable branch and also the development branch (Android 7 based)</li>
    </ul>
  </li>
  <li><strong><a href="/blog/2016-08-26-moe-release-1.1.0/">08/2016 MOE 1.1</a></strong>
    <ul>
      <li>Moved to Maven based distribution</li>
      <li>New Gradle Plugin</li>
      <li>First Release by Migeran</li>
    </ul>
  </li>
  <li><strong><a href="/blog/2016-09-30-moe-release-1.2.0/">09/2016 MOE 1.2</a></strong>
    <ul>
      <li>Eclipse &amp; Maven Support</li>
      <li>Retired Multi-OS Engine UI Designer</li>
      <li>Xcode 8 and iOS 10 support</li>
      <li>Deprecated build-time Xcode project generation</li>
    </ul>
  </li>
  <li><strong><a href="/blog/2016-12-05-moe-1.2.5/">10/2016, 11/2016 MOE 1.2.x patch releases</a></strong>
    <ul>
      <li>Various bug fixes and convenience features</li>
      <li>MOE 1.2.5 was released on 2016-11-28</li>
    </ul>
  </li>
</ul>

<h2 id="exciting-times-ahead">Exciting Times Ahead</h2>

<p>We are planning a number of releases in the next months:</p>

<ul>
  <li>12/2016 MOE 1.3 beta 1</li>
  <li><strong>01/2017 MOE 1.3 final</strong></li>
  <li>01/2017 MOE 2.0 alpha 1</li>
  <li>02/2017 MOE 1.4</li>
  <li>Q1/2017 MOE 2.0 beta</li>
  <li><strong>H1/2017 MOE 2.0 final</strong></li>
</ul>

<h2 id="what-is-planned-for-moe-13">What is planned for MOE 1.3</h2>

<p>MOE 1.3 is a huge update, it includes:</p>

<ul>
  <li>Redesigned Xcode Project Layout</li>
  <li>Support for native dependency management frameworks (e.g. <a href="https://cocoapods.org/">CocoaPods</a> or <a href="https://github.com/Carthage/Carthage">Carthage</a>)</li>
  <li>Redesigned native library binding handling</li>
  <li>Standard MOE Bindings</li>
  <li>Redesigned Storyboard integration</li>
  <li>and more!</li>
</ul>

<p>In fact, we prepared another blog post to provide details about the new features of MOE 1.3 and beyond. <a href="/blog/2016-12-05-plans-for-moe-1.3/">Read on here for all the cool, new stuff!</a>.</p>

<h2 id="what-is-planned-for-moe-20">What is planned for MOE 2.0</h2>

<p>MOE 2.0 will have 2 main features:</p>

<ul>
  <li>Update to Android 7</li>
  <li>Jack will be used as the main toolchain, including ProGuard support</li>
  <li>The introduction of the LLVM based compiler backend for Bitcode support</li>
</ul>

<p>Despite the big internal changes, MOE 2.x will be mostly a drop-in replacement from the app developer’s point of view.</p>

<p>We will provide more details of the new features in future blog posts.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>We designed the MOE Roadmap 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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[Exciting new features and releases ahead]]></summary></entry><entry><title type="html">Plans for MOE 1.3</title><link href="https://multi-os-engine.org/blog/2016-12-05-plans-for-moe-1.3/" rel="alternate" type="text/html" title="Plans for MOE 1.3" /><published>2016-12-05T00:00:00+00:00</published><updated>2016-12-05T00:00:00+00:00</updated><id>https://multi-os-engine.org/blog/plans-for-moe-1.3</id><content type="html" xml:base="https://multi-os-engine.org/blog/2016-12-05-plans-for-moe-1.3/"><![CDATA[<p>In this blog post we are going into the details of what you can expect from the upcoming MOE 1.3 release.</p>

<p>For a general overview of our roadmap, check out our <a href="/blog/2016-12-05-moe-roadmap/">MOE Roadmap</a> post.</p>

<h2 id="redesigned-xcode-project-layout">Redesigned Xcode Project Layout</h2>

<p>One of the main design goals of the Multi-OS Engine is to be a versatile, flexible tool for professional developers. This means, that when we design our tools and solutions, we try to accommodate the requirements of even the most complex projects and provide solutions for them.</p>

<p>Up to MOE 1.2, our build system required some specific settings in an Xcode project, including a <code class="language-plaintext highlighter-rouge">build.xcconfig</code> file. These requirements made it difficult to add MOE to an existing Xcode project. Working with a CocoaPods enabled Xcode project was not possible.</p>

<p>Starting with MOE 1.3, we will only require a few custom build phases and build settings in your main Xcode project. The build system will also work with Xcode workspaces.</p>

<p>MOE 1.3 will include a tool that can upgrade an MOE 1.2 Xcode project to MOE 1.3. This tool can also apply the required MOE settings to an existing Xcode project, similar to <code class="language-plaintext highlighter-rouge">pod install</code> in CocoaPods. This way it will be straightforward to add Java code to any iOS project.</p>

<h2 id="support-for-native-dependency-management-frameworks">Support for native dependency management frameworks</h2>

<p>The main goal of the Xcode project layout redesign was, that MOE should work together with any dependency management framework like <a href="https://cocoapods.org/">CocoaPods</a> or <a href="https://github.com/Carthage/Carthage">Carthage</a>.</p>

<p>Our solution is basically to get out of the way of these frameworks, and only require minimal changes to the Xcode project.</p>

<p>Starting with MOE 1.3 you can add your native libraries to your MOE project the same way you would do in an Objective-C / Swift only iOS project, e.g. call <code class="language-plaintext highlighter-rouge">pod install</code> and <code class="language-plaintext highlighter-rouge">pod update</code> the same way you would do it with any other CocoaPods enabled project.</p>

<h2 id="redesigned-native-library-binding-handling">Redesigned native library binding handling</h2>

<p>Up to MOE 1.2 we included a few custom actions in the IDE plugins, like <code class="language-plaintext highlighter-rouge">Link third party framework / library</code> or <code class="language-plaintext highlighter-rouge">Link CocoaPods</code>. With these features MOE <em>promised</em> that you could take any native library, and generate bindings for it with the click of a button.</p>

<p>There was only one slight problem with this: it only worked for simple cases. In more complex situations things failed with cryptic error messages.</p>

<p>The new method goes into a different direction, and introduces <strong>MOE Binding Projects</strong>. These projects are mostly regular MOE projects, where the native library was already imported into the Xcode project using the most convenient native dependency management method.</p>

<p>For Example the Google Play Services library for iOS is also distributed using CocoaPods, that can be used in the Binding Project as well.</p>

<p>The Binding Project also includes the Nat/J Generator configuration, that can be used to regenerate the Java bindings whenever a new version is released, and any handwritten convenience methods and classes to provide a smooth developer experience.</p>

<p>Finally, the Binding Project has a Gradle task to regenerate the binding and publish it as a Maven artifact in the Maven repository of your choosing.</p>

<p>These bindings can be reused in your MOE projects by simply adding them as a build dependency (and of course by adding the native counterparts to the associated Xcode project using the preferred method).</p>

<h2 id="standard-moe-bindings">Standard MOE Bindings</h2>

<p>We are also creating a central repository of MOE bindings for the most frequently used iOS libraries. The binding projects will be hosted on GitHub with the rest of MOE, and the generated bindings will be added to JCenter and Maven Central for your convenience.</p>

<p>We already have a few bindings created (e.g. the already mentioned Google Play Services for iOS library).</p>

<p>Contributions of additional bindings are very welcome!</p>

<h2 id="redesigned-storyboard-integration">Redesigned Storyboard integration</h2>

<p>For productive app development Storyboard integration is crucial.</p>

<p>There are 2 options for working with Storyboards and MOE. These 2 options are not mutually exclusive, you may mix them in a single project, as you need.</p>

<h3 id="viewcontrollers-created-in-java">ViewControllers created in Java</h3>

<p>In this case the ViewController classes are created manually in your favorite Java IDE. You have to make sure to add the correct <code class="language-plaintext highlighter-rouge">@Selector</code> annotations on your action methods and the <code class="language-plaintext highlighter-rouge">@Property</code> annotations on the properties that you want to make accessible from Objective-C. Then, the <code class="language-plaintext highlighter-rouge">Synchronize to Xcode</code> menu action will create the Objective-C stubs that correspond to your ViewController classes.</p>

<p>Up to MOE 1.2 the implementation of this function had several issues:</p>

<ul>
  <li>the stub generation worked only with Java source code, so alternative languages, like Kotlin, could not be supported.</li>
  <li>the generated stubs were added to the Xcode project in a way that could cause issues with building from Xcode and with accessing them from Storyboards.</li>
  <li>the function only worked with the build-time generated Xcode project mode, which was deprecated in MOE 1.2 and will be removed from MOE 1.3.</li>
</ul>

<p>In MOE 1.3 the complete implementation was replaced with a new one:</p>

<ul>
  <li>the menu item will be called <code class="language-plaintext highlighter-rouge">Generate Actions and Outlets for Interface Builder</code></li>
  <li>the Objective-C stubs are generated from Java bytecode, so alternative languages can be supported. Kotlin support will be included in MOE 1.3.</li>
  <li>the contents of the generated stub classes are only visible to the Storyboards but not to the build process (with the use of the appropriate <code class="language-plaintext highlighter-rouge">#if</code> preprocessor guards)</li>
  <li>designed to work with the persistent Xcode project setup</li>
</ul>

<h3 id="viewcontroller-stubs-created-in-objective-c">ViewController stubs created in Objective-C</h3>

<p>In this case ViewController stubs are created in Objective-C, and used with Storyboards directly to connect the properties and actions. The <code class="language-plaintext highlighter-rouge">Synchronize to Java</code> action (we will rename it to be more descriptive) can be used to generate the Java bindings for these ViewController stubs. These Java classes can be extended with the action implementations, as usual.</p>

<p>Up to MOE 1.2 this action could only be executed on a single header file.</p>

<p>MOE 1.3 will allow the creation of a custom binding generation configuration (similar to binding projects), so you can easily generate Java bindings for your ViewController and other classes in complex situations as well.</p>

<h2 id="release-schedule">Release Schedule</h2>

<p>MOE 1.3 will be a huge update, but these changes took time to develop. They are also closely connected to each other, so an incremental release strategy (adding new features one by one while keeping the old features functional) would have been even more difficult.</p>

<p>We will release a beta version of MOE 1.3 before the end of 2016. It will have a lot of the functionality already in place, so you can try out some of the new features. We are already using it for our own projects, so it should be relatively stable, if you are not afraid of hard edges, and some bugs here and there.</p>

<p>The final, polished release of MOE 1.3 will arrive in January 2017.</p>

<h2 id="subsequent-moe-releases">Subsequent MOE Releases</h2>

<p>While MOE 1.3 will lay the stable foundations that we can build on, there will be features that simply won’t fit into this release. A few examples:</p>

<ul>
  <li>Full featured, platform-independent editor for Xcode projects: with the removal of the build-time Xcode project generation</li>
  <li>Linux based development host: this is a low hanging fruit, but with all the planned changes, we have to postpone it to MOE 1.4</li>
</ul>

<p>Also, MOE 2.x is in the works with the Android 7 based runtime and LLVM based compiler backend updates. While a lot is changing under the hood, it will be mostly a drop-in replacement / incremental upgrade from the app developer’s point of view, so every new MOE 1.x feature will still be available in MOE 2.x.</p>

<h2 id="request-for-comments">Request for Comments</h2>

<p>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.</p>

<p>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.</p>

<p>If you need a specific feature in MOE, you may consider contracting  <a href="https://migeran.com">Migeran</a>, the core developers and project lead of the MOE project to develop it.</p>

<p>Also, if you are working on a commercial project with MOE, <a href="https://migeran.com">Migeran</a> offers commercial support, including live online support with Migeran’s top engineers. <a href="https://migeran.com/contact/">Contact Migeran</a> for more details.</p>]]></content><author><name>Multi-OS Engine</name><uri>http://multi-os-engine.org</uri></author><summary type="html"><![CDATA[More flexible than ever]]></summary></entry></feed>