You are browsing the archive for marc.

Avatar of marc

by marc

Announcing Elements: Oxygene 7 and RemObjects C#

March 2, 2014 in Uncategorized

Dear readers,

we’ve shipped some pretty significant releases this past weekend that i wanted to take a moment to talk to and update you about.

First, and probably most interesting to our existing users, we shipped version 7 of Oxygene. This is a pretty significant new release of our Oxygene language and toolchain, with many cool new features that we are very excited about. As always, you can find an overview of What’s New and a Full Change Log on our website, but i also want to go into some of the improvements in more detail.

Most exciting to me, personally, is the introduction of LINQ for the Cocoa and Java platforms. LINQ has always been one of the modern language features on .NET that i found really helpful, because it brings a clean structured way to working with filtering, sorting and otherwise manipulating lists of objects — in a type-save manner. With Oxygene 7, this feature, and most standard LINQ query operations, are now available across all three platforms. This means that you can now use LINQ syntax to sort or filter NSArrays on Cocoa for example.

One example i saw mentioned just yesterday that i would never have thought of is to use LINQ to find a particular view in your Cocoa app:

var wideView := (from v in view.subViews where v.frame.width > 300).FirstOrDefault

As you can see, LINQ is useful in many areas, not just when working with what we traditionally think of as “data”.

But LINQ is not the only item where we have updated the language to bring the platforms closer together. Multi-part method names, originally introduced because “we kinda needed them” for Cocoa are now available on all platforms. Many of you (and many of us) really liked this feature as a regular language syntax, and we saw no reason to hold it back to be Cocoa-only — so you can now write expressive and readable APIs for your classes, regardless of platform. We’ve also unified support for Iterators, the notify keyword and anonymous classes across all platforms, and added a bunch of standard attributes commonly used on .NET across platforms, via Aspects.

If you read between the lines, you gather that cross-platform is a big theme for this release, so we’ve also added a new Cross-Platform Compatibility Mode to the compiler. By default, Oxygene is strict about platform differences — when you write code for .NET, it tries to be a good .NET citizen; if you write for for Android, it is a good Java citizen instead. Turning on the Cross-Platform Compatibility Mode option (which can be done per-project or per-file), this dynamic changes. The compiler will be more lenient, and let it slide if you use a syntax feature needed on one platform, but not on the other. For example, you might want to mark a file as weak for Cocoa, and the compiler will simply ignore that keyword on .NET. The compiler will also be more helpful in letting you know when you write code that won’t be cross-platform. This way, when you’re set to build for .NET and write shared code, you’ll get early warnings if a language feature you are using might be problematic on Cocoa or Java, for example.

Finally, there’s the big one: Sugar. Sugar has been in the works for a while, and finally is being included as “version 1.0” officially in this release. What is Sugar? Sugar is a library of cross-platform classes that you can use on your code, so that you can share it across all three platforms. All three platform — .NET, Cocoa and Java — provide their own versions of basic types, from strings over dictionaries to XML processing, HTTP requests or file system access. Code that uses those APIs will often be platform-specific, without needing to be. Sugar provides a way to write base “business logic” code for your applications that can be easily shared between different platforms — for example if you are writing the same app for iOS, Android and Windows Phone. And it does this in a smart way (using mapped classes under the hood) that comes with no runtime overhead, even when crossing from platform-specific code into shared code and back.

These are the four whoppers, but there’s a lot more good stuff in Oxygene 7 that we think you’ll love. And as always, Oxygene 7 is of course a free update to all users with an active subscription.

But that’s not all!

Introducing RemObjects C#

In addition, we’ve also shipped a brand new product based on the same tool chain as Oxygene — a sister project to Oxygene, so to speak, and that product is called RemObjects C#.

You may have heard us talk or hint about RemObjects C# before under the code name “Hydrogene”, and that code name really illustrates well what RemObjects C# is in relation to Oxygene: It’s an implementation of the C# language for Cocoa, Java (and of course .NET), based on all the principles that make Oxygene great. In essence it is “Oxygene for people who’d rather use C#”.

RemObjects C# has all the things that make Oxygene great — a unified language and tool set that allows you to compile for the .NET CLR, for the Java JVM and for Cocoa’s Objective-C Runtime. It has the same great editor features — from our inline errors to Fix-Its. It has our Visual-Studio integrated debugging support for Java and Cocoa. It uses our CrossBox toolchain for deploying, running and debugging your applications on your Mac, your iOS or Android devices or the emulators/simulators right from Visual Studio. The only thing that’s different is the language itself.

RemObjects C# is a 100% true and ECMA—spec conform implementation of the C# language that millions of developers already use to build .NET apps. Except — like its sister product Oxygene — that language is now available to target the other development platforms as well.

Leaving the language aside, Oxygene and RemObjects C# will, from now on, evolve in parity, because they use all the same technologies under the hood (including even the most parts of compiler, except for the language front-end). So RemObjects C#, despite being a brand new product, immediately builds upon over a decade of experience and work that went into the underlying toolchain. And moving forward, 90% of the work we invest in the product will benefit both languages.

Which Language to Choose?

We approach the development of the two languages slightly different and that might influence that decision.

Oxygene has always been “our” language. Ever since we started off in 2003 with a language that already then provided vast improvements over the “standard” Object Pascal implementation in Delphi, we’ve been driving and improving Oxygene aggressively. As a result, Oxygene is one of the most powerful, versatile and expressive mainstream development languages out there today. And we will continue in that fashion — Oxygene will evolve, and get better and better

C# is a language designed by Microsoft, and well-defined in an ECMA specification. For our implementation, we tried to stay as close to that specification as we could (and only extend it in clean, tasteful and spec-conform ways, where really necessary). We will continue developing RemObjects C# in that fashion — we will evolve it as the official C# language evolves, but we will not be adding our own language features to it, just because we think they’d be neat language features. We feel that C# is not ours to evolve.

So if you’re already die-hard Oxygene (or Pascal) fan, and you want a language that’s advancing quickly and embracing new language features that enhance your development experience often, you will most likely want to stick (or start with) Oxygene. If you’re already a C# developer (or generally prefer other C-based languages) and/or not a big fan of Pascal, then RemObjects C# is the language for you.

Of course you don’t necessarily have to choose at all. You can use Oxygene and RemObject C# together. In fact, because both languages are built on the same back-end compiler, you can even use them together in the same project.

Ways to get Oxygene or RemObjects C#

As already mentioned, Oxygene is of course a free update, if your subscription is active as of March 1 — and if it’s not, now is as good a time to renew as ever.

Similarly, RemObjects C# is of course available at no extra charge to all customers with an active Suite subscription for the appropriate platforms (i.e. .NET, Cocoa or Java). If you’re a Suite subscriber, you should see new “Elements” SKUs for download on your licensed downloads page — these will install both Oxygene and RemObjects C#.

We also have the following purchasing options available.

For new users:

  • Oxygene is available at $699 per user, including all platforms — same as it has always been.
  • RemObjects C# is also available at $699 per user, including all platforms — in other words: same as Oxygene, just a different language.
  • The bundle of Oxygene and RemObjects C# is available at $999 per user, including all three platforms and both languages.

For current Oxygene users:

  • If your Oxygene subscription expired, or expires soon, you can renew at $499 for another year of upgrades to Oxygene.
  • If you want to add RemObjects C# to the mix, you can renew both for $699. Only $200 extra, and you get a whole new language — we think that’s a pretty sweet deal. Also, both Oxygene and RemObjects C# will get the same new renewal date — so if your current Oxygene subscription is still good for a while, that’s an extra benefit for renewing early.
  • Finally, if you just want to add RemObjects C# to your existing Oxygene license (and with the same renewal date), you can do that for just $399 (but really, the previous item at $699 is the better value, no matter your current subscription status).

The first two of thee options are also available to all customers of Prism XE3 or later, who currently enjoy a complimentary license extension to Oxygene for .NET from us as part of their SA coverage.

We’ve also recently made two adjustments to our online store (which also has been completely revamped and improved) that might benefit you:

First, if your subscription has expired more than 6 months ago, the store will now automatically apply what we call “amnesty renewal” when you purchase a renewal. Amnesty renewal makes sure that you always get at least the current release and six months of free updates from the purchase date. This holds true even if your previous subscription expired years ago.

Second, we’ve improved our volume discount program, so that you now start saving on multi-user license purchases for as little as 2 users. Volume discounts start at 5% (for two to five users) but can go all the way up to 30%. Our shop will handle all of that for you automatically.

That’s it for now

I think that’s it, for now (probably more than enough, wouldn’t you say? ;).

As you can probably tell, we are very excited by this new release — both with the new features added to Oxygene 7 (which, i should have mentioned, are all available to RemObject C# as well) as well as the brand new RemObjects C#.

We hope you enjoy them, too — and that if you’re not already a customer, you’ll grab the free 30-day trial and take the products for a spin. (It goes without saying that the RemObjects C# trial works well alongside your licensed copy of Oxygene as well.)

Oh, and last but not least: Scotty has created an awesome set of Getting Started videos for RemObjects C# (and similar videos for Oxygene are coming soon). Make sure to check them out!

Yours,
marc hoffman
Chief Architect

Avatar of marc

by marc

Announcing the Oxygene “January 2014″ Update

February 5, 2014 in Elements

Ahh, it feels like forever since i have written one of these, with the holidays and a long-overdue vacation in January. But it’s really just been a little over six weeks, and the time has come again:

Last friday, we shipped the latest update for Oxygene. The January 2014 release is a minor bugfix release for our 6.x compiler line, versioned as 6.1.61.1441. While it contains no major new features over what we shipped in November, it does have a wide range of fixes across all areas of the product, and is a recommended update for all users (of course ;)).

January 2014 also marks the last update for our 6.0 compiler line, and with that, the last release with Oxygene standing alone. We’re hard at work to finalize “Elements 7.0”, our next major release coming around the end of February – and with that release, not only does Oxygene get a major version bump again, it will also gain a sibling: our new Hydrogene language (which we’ll start talking a lot more about over the next few weeks).

But first things first: The January 2014 release is of course, as always, a free update for all users with an active subscription. You can find it for download in your Licensed Downloads area, as well as on the public Trials page. It (optionally) includes the still-new Visual Studio 2013 IDE.

If your subscription has lapsed, there has never been a better time to renew than now to get both the new release and everything we have planned for the next year (and beyond). As always, you can renew your Oxygene license for a mere $499 per user. And we also have a special “up-renewal” that lets you renew Oxygene and add Hydrogene, for only $699.

If you’re a Prism user, abandoned by Embarcadero, chances are you might be entitled to extended Oxygene for .NET releases from us. Check our Prism FAQ for details, or contact us if you have questions.

January 2014 is a great release – and we’re even more excited about what we have in store for you for the rest of the year. Let us know what you think!

Enjoy!

Avatar of marc

by marc

Reminder: Get Oxygene for .NET as part of your RAD Studio SA

November 20, 2013 in Elements, Oxygene

Hi.

i just wanted to shoot out a reminder that if you purchased “Support & Maintenance”, a.k.a Software Assurance (SA) for RAD Studio XE3 from Embarcadero, you are entitled to updated releases of Oxygene for .NET for the duration of your SA period.

Embarcadero might be telling you (if they say anything at all, that is) that Prism is discontinued or dead, but nothing could be further from the truth.

Prism has always been just a rebranded version of our Oxygene for .NET product. And while Embarcadero might no longer be delivering it to you (in spite of happily taking your SA money), Oxygene is alive and well, of course, and we here at RemObjects have decided to honor the full SA periods and provide you with the latest updates to Oxygene for .NET for the duration of your SA period – on our own dime.

What do you need to do?

Two simple things:

  1. Register an existing XE3.2 (or XE3.1 or XE3, if you never received the others) serial number with us at remobjects.com/oxygene/registerserial.
  2. Contact us at sales@remobjects.com with details about your SA contract, most importantly its coverage period, and (if not obvious from your name or email address) the username you created in Step 1.

We’ll update your account with access to the latest release of Oxygene for .NET covered by your SA period (which may include future releases, too), and get back to you, ASAP.

Caveats

As i mentioned above, we’re doing this on our own dime, so we need to set some cut-off date, or else we’d be shipping free Oxygene to everyone, forever, and not be able to pay our salaries.

Our official cut-off date for the above offer is April 23, 2013. On that date, Embarcadero announced RAD Studio XE4, which officially no longer included Prism.

If you purchased RAD Studio XE3 with DA, or renewed SA for RAD Studio before that date, you qualify for the above deal. If you renewed after this date, your previous SA period has already been fully covered, and your new SA period is for XE4 and does not, i’m sorry to say, include Prism anymore.

That said, if you purchased or renewed RAD Studio SA after the above-mentions date and feel in any way that you were misled or that the lack of Prism in your new purchase was mis-represented (and i’m only bringing this scenario up because we had countless people contact us with that exact concern), please email us anyway, and we will try and find a fair solution.

Our #1 goal is that every Prism customer gets a fair deal and does not feel cheated out of the product they paid for.

Full Oxygene

If you don’t have SA, or your SA has expired, of course there’s always the option (and we’ll love you for it) of just going and renewing to the full Oxygene product from us.

Not only does this give you a fresh year of updates to Oxygene for .NET, but it also gives you access to the other two platform editions, letting you build fully native no-compromise apps for iOS, Mac, Android and Java.

And if your SA is still active (and/or extended via the above offer), renewing will add an extra year on top of your current SA period – essentially giving you more than a year of updates for all three platforms.

  • If you have an extended license with us: Renew for $499 to add a year of Oxygene for .NET, Cocoa and Java, on top.
  • If you don’t have a current/non-expired subscription: Cross-grade for $599 for a fresh year of updates.(You can also cross-grade if you own any version of Delphi or any past version of Prism.)

In Summary

We’re very excited about Oxygene, what we have done with it over the past year, and what we have planned moving forward. We’re also very thankful for your patronage, and we hope that you love working in Oxygene as much as we do (and as much as we love creating it), and we look forward to what 2014 will bring, with you on board.


Party Time!

Avatar of marc

by marc

Announcing the Oxygene “October 2013″ Update

November 4, 2013 in Elements, iOS, Nougat

Dear readers,

we may be a day late and into November with this announcement, but we’d like you to know that the “October 2013″ update for Oxygene has been made available earlier this week.

What’s New

The October update is mostly a bug-fix release, but it also includes a couple of rather significant new features on the Cocoa front.

Most importantly, this release officially introduced 64-bit ARM support for the Apple A7 chip in the new iPhone 5S and the new iPads that came out today. Last month we laid a lot of the groundwork with 64-bit compiler support, but now [you can build](http://wiki.oxygenelanguage.com/en/Architectures_(Cocoa) your apps for your devices in 64-bit mode, as well. Very exciting.

We have also started officially shipping .fx files for the new Mac OS X 10.9 “Mavericks”, and we’ve extended the Cocoa compiler to support the new “instancetype” feature introduced/mainstreamed for Objective-C by the iOS 7 and OS X Mavericks SDK.

And of course there are a good 100 additional fixes and improvements in this update, across all three platforms.

How to get Oxygene 6.1.57

As always, this release is a free update to all active subscribers, and can be downloaded now.

If your subscription has elapsed, now is a great time to renew to get access to the latest release and all the good stuff we have cooking for the near future.

Oxygene for Prism Customers

Remember that Oxygene 6.1 is also the first release that is no longer available from Embarcadero under the Prism brand, and it will not accept Prism XE3.2 serial numbers. But as a reminder: we are committed to honoring SA contracts Embarcadero might have sold you with the promise of Prism coverage (i.e. before April 23, 2013). Please email sales@remobjects.com with your SA details, and we’ll sort you out with ongoing access to Oxygene for .NET for the remainder of your SA period. (You can read more about this here).

Of course, if you do not have SA, or if you want to take advantage of Oxygene on the Cocoa and Java/Android platforms as well, you can always renew or cross-grade to the full Oxygene package at any time.

More to Come

2013 is drawing to a close, but we’re not done yet. We’ve got one whopper of a release planned for the end of this month (and lots of cool stuff are coming in 2014 as well). So make sure stay up to date with your subscription.

Happy coding!

Avatar of marc

by marc

“Steps” for iPhone 5S — written in Oxygene

October 30, 2013 in Elements, iOS, non-tech, Nougat


Steps

I’m more than thrilled to let you know about “Steps“, my next/new iOS app.

Steps is a small but helpful app, which works exclusively for the new iPhone 5S, because it uses the new M7 chip that Apple has introduced with the 5S to gather motion data and let you know how many steps you are taking each day.

Whether you’re interested in that to keep track of your daily workout, or just want a fun way to explore this cool new feature of your iPhone — Steps is a great way to do it.

On first launch, Steps gathers up to 7 days of previous walking history. That’s right — Steps (or rather, the M7 chip ;) has been hard at work for you even before you bought it! So you have some data to look at immediately.

In addition to showing your daily step count, Steps (new in version 1.1) also aggregates your average daily steps for the past week and month, and it will keep track of what your personal best has been, so far — including encouragement to beat it, when you get close.

Over time, and without you ever having to think about it again, Steps will update to load in more data as you roam about, all the while keeping track of your past history. Eventually, you’ll have months and months of walking data to look at. You don’t need to launch Steps manually for this to happen (although you will want to launch it to have a look once in a while).

And because it uses the new M7 chip, Steps can do all of this without affecting your iPhone’s battery life at all.

 

It goes without saying that Steps is written 100% in Oxygene for Cocoa. And as with all my previous Oxygene iOS projects, full source code is available on GitHub at github.com/dwarfland/Steps.

So, if you have your iPhone 5S yet, make sure to grab your copy of Steps on the App Store, for only 99c. And if you’re a developer, make sure to check out the code, as well!




Originally published on subspacecables.com.

Avatar of marc

by marc

Visual Studio 2013 is here (for some values of “here”)

October 22, 2013 in Data Abstract, Elements, Visual Studio

The time has come, and Visual Studio 2013 is officially RTMed and available on MSDN, even though the official launch event is not scheduled until November 13th.

What does Visual Studio 2013 mean for our users?

Oxygene has been ready for Visual Studio 2013 for a while now (and i personally have been using 2013 exclusively ever since i redid my development VMs earlier this year and when VS2013 was still a private CTP we weren’t allowed to talk about). Visual Studio 2013 support for Oxygene made it into our public releases back in August, and our latest September 2013 update is fully ready for the RTM version of Visual Studio 2013. SO if you have an MSDN subscription, you can download your copy now, run the latest Oxygene installer, and you’ll get the full Oxygene experience in the fresh new IDE.

We’ll be rolling out the Visual Studio 2013 Shell with Oxygene in our upcoming (major!) November 2013 release. (We got one more release coming up before, the incremental October 2013 update, but that had been locked down before the RTM was available, and also we’ve been asked to hold of shipping the 2013 Shell until after the official launch event. ;).

Data Abstract and RemObjects SDK also have been made ready for Visual Studio 2013 with the last update we shipped in September. This applies to the .NET editions, Data Abstract for JavaScript and also – if you are using Oxygene – the editions for Java and Cocoa. We’ll be doing more testing with the RTM release, and the next update might include additional tweaks and improvements to round this off.

 

Avatar of marc

by marc

Come See Brian Long Talk about Android Development with Oxygene at BE-Delphi

October 7, 2013 in Events, non-tech

I’m told that our friend Brian Long will be giving a presentation at BE-Delphi’s annual developer event in Antwerp, Belgium, on November 21.

Brian is a great presenter; we had the pleasure of having him as a guest speaker at DSConf and he has presented on Oxygene for Android and iOS in the past — so if you’re anywhere near Antwerp in November, make sure to check out his talk, and the conference in general.

From Brian’s session summary:

Oxygene is an Object-Pascal based language previously well know in its .NET incarnation as Delphi Prism. Oxygene for Java produces Android apps that run where Android does – in Android’s Dalvik VM. It is for those who have a background in Delphi or a history of Pascal programming from previous times, or anyone who fancies something a bit different from Java, and who wants to use the standard Android APIs in the Android SDK to build lightweight, standard Android applications (or, for that matter, Java applets, servlets, etc.) that can run on any Android device of your choosing.

We’ll look at Oxygene for Java’s capabilities and features in the context of building and deploying an Android application using OS-native controls. We’ll see how the product works, bump into some enhancements to the evolving Object Pascal language and show that Oxygene for Java is a first class citizen in the world of Android development.

You can find out more about BE-Delphi at be-delphi.com.

Avatar of marc

by marc

Announcing the Oxygene ‘September 2013′ Update

October 2, 2013 in Cocoa, Elements, Java

We’re very happy to let you know about the immediate availability of the September 2013 release, the first of two smaller monthly updates we have planned for the Oxygene 6.1 release cycle.

This release, Oxygene 6.1.55.1371, is mostly a bugfix release, but it also contains a handful of significant improvements and new features.

iOS 7.0

On the iOS side, a lot has changed over the past few weeks. Apple has released the final version of iOS 7.0; they have also started shipping two new iPhones, one of them with an all new 64-bit ARM CPU, the A7, and there is also a brand new version of Apple’s IDE — Xcode 5.

While Oxygene has been working well with iOS since it hit beta in June (just a few days after we officially shipped Oxygene for Cocoa), this new release adds official support for iOS 7.0 and Xcode 5. This affects several areas.

First and most importantly, with iOS out from under the NDA, we’re able to ship .fx files for iOS 7.0 in the installer, making it easier (and the default) to build your apps for the 7.0 SDK, without you having to run FXGen yourself to get access to the new SDK.

iOS 7 is not just a new look (although that is a big part of it), but also brings with it a huge amount of new APIs that you can start using in your apps immediately. From TextKit to SpriteKit, from enhancements in UIKit to more options for background operations (such as updating content in your app while it is not running).

There’s a lot for developers to love in iOS 7, and you have full access to it from Oxygene.

What’s more, in last month’s update we shipped significant enhancements to Deployment Target support in Oxygene, which makes it really easy to take advantage of iOS 7, while still supporting older versions of iOS at the same time.

Apple’s new Xcode 5 has changes that affected our process for working with XIB and Storyboards, forcing us to rethink how this is handled – with the end result that we now have a much better and more flexible solution in place. A new menu item in Visual Studio will let you create/update a full Xcode project that will contain all your .XIB and .storyboard files, along with knowledge about other items in your project, including your classes, but also resources such as images.

Once created/updated, you can simply open the project in Xcode and edit your UI files to your heart’s content. Save, and when you go back to Visual Studio and build your app, your changes will get picked up automatically.

We have also made improvements to the iOS Simulator integration. Just as in Xcode 5, Oxygene now lets you choose exactly which type of simulator you want your application to run on — not just iPhone vs. iPad, but also screen size, and whether to use the Retina screen or not. Right from the CrossBox menu:

64-bit

The September 2013 release also includes support for the all new 64-bit iOS Simulator. When building for iOS 7 (or later), you can now select x86_64 as second iOS Simulator architecture to build for, and get your iOS apps ready for the A7 chip.

Support for arm64 for building applications to run as 64-bit on the device is working in our labs and will be available for the next (October 2013) update and in our current beta builds. Unfortunately, it did not make it into the September release due to timing issues – we figured you would probably want us to test extensively on real hardware, before shipping a compiler to you. Real hardware which has only been available for little over a week now, of course.

Java

Three significant improvements have been made on the Java and Android platform, as well.

First, we have implemented support for Java Native Interface (JNI) in the compiler, making it really easy to access non-Java libraries and APIs from your application.

Secondly, we have expanded our syntax for Inline Interfaces to allow them to be descendants of existing abstract or concrete classes. This has been a much-requested feature from Android developers, and will make many Android APIs much easier to consume.

Finally, we have updated the compiler to be compatible with binary format changes coming in Java 8. While Java 8 (currently still in beta and very much in flux) is not an officially supported platform yet, this will allow you to get started experimenting. This is exciting news for those of you living on the cutting edge.

There’s More

These features are rounded off by over 70 additional fixes, enhancements and improvements, all throughout the product, and across all three platforms, .NET, Cocoa and Java.

We’re very excited about this update – and about what we have still planned for the rest of the year – and we hope you will like it, too!

Yours,
marc hoffman
Chief Architect

Avatar of marc

by marc

Data Abstract and RemObjects SDK for Cocoa on iOS 7 and the 64-bit A7

September 30, 2013 in Data Abstract, iOS, Xcode

Hi. I wanted to give you a quick update on the status of Data Abstract and RemObjects SDK with regards to both the new iOS 7.0 and – more interestingly – the new 64-bit iOS on the iPhone 5S.

Over the past couple of weeks, we have been debating whether we should make a small interim update to RO/DA for Cocoa available to “officially” support the two new platforms/technologies, and we have decided against such an update, for the following reasons:

We’ve (of course) been testing the RemObjects SDK and Data Abstract code base with iOS 7.0 since the first beta, and with 64-bit since the iOS 7 GM and the iPhone 5S is out. The current code base as shipped in the Fall release about a month ago is working perfectly with iOS 7, and no changes are needed.

It is also working fine on 64-bit (ignoring some minor warnings), as expected – after all, the same code base has been running on 64-bit Mac OS X since forever. Still, it would be nice to ship an update release that contains a universal binary pre-compiled for arm64 out of the box, but there’s one downside to that:

Right now, if we switched RO/DA to build for arm64 by default, that would mean we’d also need to set the minimum deployment target to iOS 7 – which in turn means the binary we’d ship would not allow you to build applications that still target iOS 6 (or lower), something we know many of you still do.

On the flip side, for those of you who would like to build your RO/DA based apps for 64-bit, it is a simple job to rebuild RO/DA yourself: Simply open the project in Xcode, change the architecture to ARCHS_STANDARD_INCLUDING_64_BIT (and clear the deployment target, of course), and hit rebuild. (We’re also making a pre-release build available today that does have 64-bit enabled (at the cost of losing deployment target options, as indicated.)

Apple is promising to sort out the deployment target situation “next month” to allow arm64 to co-exist with older deployment targets, and we figured it would be best to hold out for that — especially given how easy it is for you to manually rebuild for 64-bit now, if you need it.

I will keep you posted as this develops – and once again, us holding back on shipping the update does not mean that the current code base you have now is not perfectly fine for arm64 use already.

Let us know what you think.

Avatar of marc

by marc

An update on Oxygene support for iOS 7 and arm64

September 13, 2013 in Elements, iOS, Nougat

Over the past couple of days, unsurprisingly, a lot of people have asked me about our plans for supporting iOS 7 and – more specifically – the arm64 architecture used in the new iPhone 5S.

Of course the news is good.

General support for iOS 7 on armv7 and armv7s (the current CPU platforms in iPhone 5 and older) has been in Oxygene since forever. We don’t ship .fx files for iOS 7 yet (that would have been a violation of Apple’s NDA, as long as iOS 7 was in beta), but Oxygene comes with a tool that lets you generate those files yourself with a single drag and drop for any beta SDK (including iOS 7 and OS X 10.9, a future iOS 7.1, etc). The July release also included additional fixes to make the import for iOS 7 more seamless.

So in general, Oxygene has been ready for iOS 7.0 for a while now, and i know that a lot of you have of course been using the two together, as have i myself for some of our internal apps (and in fact our Beta.app is already in the App Store, ready for iOS 7.0).

Of course, this support only extends to 32-bit iOS – which, to be clear, is fine and good enough to build and submit iOS 7 apps, including those that will run on the new iPhone 5S, today. (You’d want to extensively test your apps on the device before submitting 64-bit versions, anyways.)

So what about 64-bit?

Obviously, we only learned about the new A7 chip being 64bit alongside with the rest of the world outside of One Infinite Loop only yesterday. So work is needed for Oxygene to support the arm64 architecture that drives the CPU in the iPhone 5S.

We’re on that, and we don’t expect it to be a big deal, because Oxygene (a) builds on the open source LLVM backend, which does the bulk of the work for supporting different hardware architectures (and operating systems) and (b) is designed from the ground up for multiple architectures, and for creating universal binaries (that is, executables that contain code for more than one CPU). In fact, you’ve already been building those, if you build for armv7 and armv7s – 64bit just adds a third, albeit more different, architecture.

So mostly, we’re talking minor tool chain adjustments and improvements, as well as extensive testing.

  • The .fx import (mentioned above) has been updated to support arm64 yesterday and is done, pending testing. The .fx files now have three architectures for iOS: armv7/armv7s/arm64 and a dual-architecture for the Simulator: i386/x64. That’s right — there’s a 64-bit Simulator, as well.

  • With these new .fx files, arm64 will automatically show up as platform to build for in the IDE, and the compiler and the rest of the IDE toolchain will automatically pick up 64-bit support for your iOS projects. (There are new Conditional Defines you can use to test for bitness, such as __arm64__ on device and _x86_64__ on Simulator.)

  • The IDE and build chain does some magic with regard to building for the Simulator. In particulate, you never explicitly choose a Simulator SDK or i386 as architecture; instead, you configure your project for the iOS SDK and the ARM architectures you want, and if you build for Simulator, the build chain (and IDE smarts such as Code Completion) automatically switches over to the Simulator SDK, and to i386. The logic here needs to be refined to include _x86_64 if your app is built for arm64, so that you can build 64-bit Simulator apps. The devil is in the details (and it’s kind of funny that the compiler is ready to build 64-bit Simulator apps already, if only the toolchain would ask it to ;)

  • No use building 64-bit Simulator apps if you can’t run them – so we need to expose an option in the IDE to let you choose different Simulator versions (not just iPad vs. iPhone, but also bitness, and while we’re at it, Retina vs. Non-Retina iPad, and iPhone screen size).

  • The actual arm64 compiler backend needs to be tested. It’s been in the LLVM code base for a while, but we have not used it ourselves yet. So we need to test it against our Oxygene front-end and make sure all works well. Of course Oxygene already does x64 support on the Mac side, so we’re fairly confident. (64-bit support in the Simulator is pretty much identical to the existing Mac support; it uses the same x86_64 back-end, but it is, officially, a different platform/operating system combo).

    Rumor also has it Apple has extensions to LLVM that aren’t published on the open source LLVM yet. It remains to be seen, possibly not until we have actual hardware, whether those extensions are crucial to have for compiling working iOS arm64 apps, or whether they are just icing on the cake that is the existing LLVM arm64 support that’s already public.

None of these are hard problems, just stuff that takes a day or two to do well (for example, i thoroughly refactored and abstracted the Train script that drives the .fx import in FXGen, as part of adding arm64 support to make the architecture handling much nicer and more flexible for the future).

When?

We don’t want to make any promises (especially since final/real testing will depend on me getting hold of an iPhone 5S in a timely fashion to have test hardware, and with Apple not doing pre-orders this year, i guess that means i’ll be queuing up at the Apple Store here in Berlin again, next Friday ;), but we’d like to ship official arm64 support in the September update at the end of this month.

We’ll also try to get as much support as possible (untested on real hardware of course) into the next beta drop. At the very least, this will include the full .fx files for 64-bit, and it’s pretty likely to include 64-bit Simulator support, as well.

That said, remember that arm64 is not crucial for building iOS 7 apps. You can (re-)build your apps against iOS 7 now (i have been since mid-June), and submit those as armv7/arm7s. They will run fine on iPhones 5S, too. Once we do have arm64 support fully finalized, you can rebuild them with the extra architecture enabled.

As mentioned before, even if we had arm64 support ready this very second, it’d be pretty foolish to submit your 64-bits to the store before you can test them on real 64-bit hardware. More so, given that your apps will get little benefit from being 64-bit until you had the chance to properly extend and design them to take advantage of the platform. So we think our timeline should work well for you.

Beta Access

Remember: All Oxygene users with active subscriptions have full access to our beta releases, which give you early access to cutting edge stuff such as this. Visit the Beta Access page on our wiki for details, and make sure to install our Beta.app (linked from the same page) to stay in the loop with new builds.

Now, i’m sure you have iOS 7 apps to build and submit to the App Store, so i’ll leave you to it…