One codebase, several platforms.
WHAT SHARING IS POSSIBLE
Business logic, almost entirely Data models and persistence Networking Much of the interface, with the declarative framework
WHAT DIFFERS AND SHOULD
Navigation patterns Input methods Window and screen handling Menus, on the Mac Interaction conventions
WHAT TO STRUCTURE
Shared code in a package, with platform-specific interface layers.
WHY A PACKAGE
It enforces the boundary and can be tested independently.
WHAT TO AVOID
Conditional compilation scattered throughout An interface that is clearly one platform's, running on another
WHAT THAT LOOKS LIKE
A phone interface enlarged on a Mac, or a Mac interface cramped on a phone.
WHAT TO PROVIDE PER PLATFORM
Appropriate navigation Keyboard support, on the Mac Menu commands, on the Mac Appropriate window behaviour
WHAT CATALYST PROVIDES
Running an iPad application on the Mac with adaptations.
WHAT IT SUITS
Bringing an existing application across quickly.
WHAT IT DOES NOT PRODUCE
An application that feels designed for the Mac.
WHAT TO TEST
Each platform separately, by someone who uses it.