There’s been a bunch of discussion about Mark Gurman’s article on Apple working on a single user experience for iOS and Mac apps. We’re not entirely sure what Apple intends here, which is leading to a lot of concerned speculation. One take (summarized well in John Gruber’s article on the subject) is that this will cause developers to port their iOS apps directly to the Mac, resulting in a mass influx of poorly designed Mac apps. “Write once, run everywhere” has never gone well.
I’d like to propose a possible middle ground suggested by React Native:
It’s worth noting that we’re not chasing “write once, run anywhere.” Different platforms have different looks, feels, and capabilities, and as such, we should still be developing discrete apps for each platform, but the same set of engineers should be able to build applications for whatever platform they choose, without needing to learn a fundamentally different set of technologies for each. We call this approach “learn once, write anywhere.”
React Native allows developers to write cross-platform iOS and Android apps, but it suggests that developers ship a different UI for each platform. It aims for parity of framework feel over parity of user interface. With a set of tools and frameworks that feel similar regardless of platform, developers can be productive and apps can easily share underlying code that is not exposed to the user interface (business logic, network code, etc.).
Maybe this is what Apple intends. Underlying framework parity (UIColor is UIColor) and a set of UI frameworks for the Mac that feel like developing with UIKit but don’t easily allow for a direct port. It might let them keep what’s great about the Mac but open up the field to more developers.