Apple Silicon is the new hotness in the world of Mac computing. Apple has gone through a few processor transitions in their time, the most recent being the switch from PowerPC to Intel starting in 2005. This transition only lasted around a year: Apple was able to switch all of their computers to running on Intel so quickly because Mac OS X was made from the start to be processor independent, unlike the Classic MacOS. This made the transition very smooth, coupled with a new technology called Rosetta that let PowerPC apps run in an emulation mode on Intel Macs.
During this Intel to Apple Silicon transition, Apple has brought back a lot of the technologies that were developed during the PPC to Intel transition, notably: Rosetta. This emulation technology will play a key role in ensuring that Intel apps can run as smoothly as possible on the Apple Silicon Macs.
With any processor transition, developers must ask themselves how they can move their apps over to the new platform. Apple has fortunately made this an extremely easy process with many paths forward for both iOS and macOS developers that have apps on either platform.
In this publication, we’ll delve into the many ways that you can port existing apps over to macOS Big Sur running on Apple Silicon and bring your apps into the future of Mac computing. This high-level overview is focused primarily for software engineering managers and those who have iOS and macOS apps they’d like to port over to Apple Silicon.
What is Apple Silicon?
Apple Silicon is the ARM-based chip architecture that Apple is developing in-house for newer macOS-based devices. Apple has been developing their own processors and system architectures in house since 2012 with the introduction of the iPhone 4 and it’s A4 system on a chip.
In the same way, Apple is bringing system on a chip architecture to macOS devices. This means the full CPU, GPU, RAM, and other components are enclosed on a single chip. This provides a lot of advantages that Apple can pass on to customers: From faster devices, to devices that work better with their hardware and software in sync.
These first Apple Silicon Macs introduced in November 2020 are the Mac mini, MacBook Air, and MacBook Pro 13”. These first devices are consumer-facing devices primarily, but initial impressions show that they beat all of Apple’s current Intel lineup in processor-intensive computing tasks like video editing, development, and even gaming.
Because these new Macs are running the same silicon design as iOS devices, Apple is also able to allow users to download and run iOS applications right alongside of macOS apps. This is a huge step forward in bridging the two operating systems and allowing a unity between iOS and macOS like never before.
Transitioning macOS Apps to Apple Silicon
macOS apps that have been built for Intel will still be able to run in an emulated mode through Rosetta; however, your users may notice degraded performance if not using system frameworks for graphics rendering or other tasks that relied on Intel-specific architecture. Most macOS apps that relied on system frameworks like Metal may actually run faster under this emulated mode, getting a performance boost from Apple Silicon-native Metal and other system framework performance.
Eventually, however, your Intel-native apps will stop running when Apple stops supporting Rosetta in the future and requires all apps to be Universal or Apple Silicon native, so let’s discuss the transition process and what it looks like.
If you already have a macOS app, then supporting Apple Silicon is fairly straight forward. Let’s take a look at the two main app architectures and what needs to be done to accomplish an Apple Silicon transition.
Native macOS apps in Swift and Objective-C
If your app is a native macOS app, then you’ll want to have a dual-binary app that supports both Intel and Apple Silicon architectures for the foreseeable future. This allows your single binary app to run on all of Apple’s currently supported Mac platforms.
Doing this is as simple as opening the macOS project in Xcode 12 and ensuring that the Apple Standard Architectures build setting is enabled. Building with this option means that your exported binary will support both platforms. Of course, after enabling this option and running the app on Apple Silicon, you may encounter build warnings or other issues that may need to be corrected.
In our experience as long as the app has been transitioned through to the most recent version of macOS, very little to no work is needed to get the app built and running on Apple Silicon as a Universal Binary.
Mac Catalyst app built before Big Sur
If you’ve got an existing Mac Catalyst app that’s not been built for Big Sur, then first you’ll want to get the app running on macOS Big Sur, which may require some tweaks to the design to ensure that the app fits with the new UI concepts in Big Sur.
After this has taken place, then you can proceed with the steps above to ensure that the Mac Catalyst app is being built as a Universal Binary. Mac Catalyst apps actually receive a lot more first-class treatment in macOS Big Sur that allows these apps to further look and behave like native macOS apps.
Under the hood though, a Mac Catalyst apps is still an iPadOS app with special treatment to make it work on macOS. This is fine for a large majority of apps (in fact, Apple uses them for Messages, News, Stocks, and other system apps), but if you have a more complex apps that needs to take advantage of macOS-specific features, then consider building natively.
Transitioning iOS and iPadOS Apps to Apple Silicon
iOS and iPadOS apps
This is where things get interesting for macOS on Apple Silicon. If you already have an existing iOS or iPadOS app in the App Store and want your app to run on an Apple Silicon Mac, then nothing is required.
Yes, you heard that right. By default, Apple automatically opts-in all iOS and iPadOS to be run on Apple Silicon by simply downloading and running them from the macOS App Store.
You can opt out of this inside of the Availability section of the app inside of AppStore Connect, but many users will likely be happy to see your previously iOS-only app available for running on their Apple Silicon Macs.
If you have an iOS SwiftUI app, this app can be transitioned (and new views be built where Mac-specific variants are warranted) to a universal app and built for Apple Silicon. This is a relatively simple process thanks to the new declarative SwiftUI 2.0 features, context menus, and more. This will require extra testing and development time, but nowhere near the time required to build a traditional macOS app.
Building a Mac Catalyst app
If you have an iPadOS version of your iOS app, then you can create a Mac Catalyst version of the iPadOS version of the app that will run like a native macOS app. You can add right-click menus, keyboard shortcuts, and even Menu Bar items and macOS style Preferences to make the the app feel at home on the Mac. This will require testing and additional work, but is a great stopgap between iOS and macOS apps if you don’t already have a SwiftUI app and don’t want to go through the process to build a native variant of your iOS apps.
Building for the Future
If this past WWDC ’20 was any indication, Apple is going full steam ahead with SwiftUI, their declarative way to built user interfaces natively with Swift and have the app supported on all platforms, including macOS. If you’re considering building an app that you’d like to have available on macOS, iPadOS, iOS, tvOS, and watchOS, then it would be a disadvantage not to take a look at SwiftUI and see what it offers before starting up a new project (or adding on new major pieces to an existing app).
SwiftUI will likely be the future of developing for Apple’s platforms. Plus, it’s native and it’s fast to write new UI code for. While the technology still has a lot of maturity before it can be widely adopted, for simple apps and apps that don’t rely heavily on custom components, SwiftUI may be more than enough to get the job done.
- Apple Silicon Development Guide from Apple Developer
- Learn More About Mac Catalyst from Apple Developer
- Mac Catalyst Development Guide from Apple Developer
- Human Interface Guidelines for Mac Catalyst from Apple Developer
- Learn more about SwiftUI from Apple Developer
- SwiftUI Development Guide from Apple Developer