Best practices/Must-have
Make it scale
Your app now runs from a tiny 4” iPhone 5S, all the way to a full screen on a 27-inch iMac, and that’s with a 77% skill factor. In fact, the 27-inch display is more like a 35-inch iPad.
Therefore: support dynamic type and use Auto Layout, and lastly, remember that on the Mac app resize fast: resizes should run at 60 frames per second.
Implement Great Keyboard support
use UIKeyCommand
Menu Bar
Support menu bars (you can even use storyboards for this).
Alternatively, override the buildCommands(with:) app delegate method.
Use UIHoverGestureRecognizer
..where it makes sense.
Support the Touchbar
Author a Help Book
Sidebars
Make sidebars look like a macOS sidebars (with the translucency as background): this should be done when in split mode and the master view acts as a toolbar.
#if targetEnvironment(UIKitForMac)
primaryBackgroundStyle = .sidebar
#else Toolbars
Add NSToolbar, used in macOS for most common actions:
Reconsider tabbars and make them a segmented controller on the top instead (on macOS).
Lifecycle Considerations
UIKitForMac apps will basically permanently stay in a foreground + active state, rarely they’ll move to a background state etc.
The app will move to other states only when macOS determines that the app is not active/in use, however there’s no clear way to predict this. Do not rely on those statuses for critical logic.
Distribution
Unified certificate for both iOS and macOS distribution.
In iOS, we archive the app with “Generic iOS Device” as target in order to export our app for the store and upload it as an IPA.
In MacOS, we archive the app with “My Mac” as target in order to export our app for the store and upload it as an Mac package.
Capabilities
Most are automatically enabled by looking at the info.plist file, however some needs to be manually activated: in particular keychain and push notification capabilities.
