Determine if your iPad app is running on an M1 Mac
For a while now, we’ve been able to run iPad apps on an M1 Mac. From my experience, if your app is in any way complex, this probably isn’t the best way to get onto a Mac. However, for many apps, this is a good way to get something up and running relatively easily.
If your app makes sense, you might still want to exclude some functionality or change it on the Mac. With a “Designed for iPad” app, the typical OS checks do not work.
Example
#if os(macOS)
doMacStuff()
#endif
If you can keep your support to iOS 14 and higher, you’ll want something like this:
import Foundation
func isIOSAppOnMac() -> Bool {
var m1Check = false
if #available(iOS 14.0, *) {
m1Check = ProcessInfo.processInfo.isiOSAppOnMac
}
return m1Check
}
You can use the ProcessInfo.processInfo.isiOSAppOnMac
directly, but I’ve opted for the function that wraps check so it at least falls back if I’ve made a mistake.
One scenario where this comes in handy is CommandMenu
with keyboard shortcuts.
.commands {
CommandMenu(LocalizedStringKey("Do Things")) {
Button(action:{ doThing() })
{
Label(LocalizedStringKey("do thing"), systemImage: "bookmark")
}
.keyboardShortcut("B", modifiers: .command)
}
At the time of publishing this, that code will crash on an M1 Mac. So, while not ideal, you might want to put a switch statement in your CommandMenu
and have one set with keyboard shortcuts for iPad and a duplicated set for M1 Macs that will simply create the menu item minus any keyboard shortcuts.
Hopefully, this is something that will get fixed in the future, or you will get the time to create a full Mac app.