Возможно, я неправильно понимаю ваши настройки и вопросы, но, похоже, у вас недостаточно абстрагированная модель данных.
Строго говоря, «NSPoints / CGPoints, NSRect / CGRects, NSColor / UIColor и NSImage / UIImage структуры / объекты» - это все элементы реализации / пользовательского интерфейса, которые не имеют ничего общего с моделью данных. Конечно, API позволяет легко их архивировать, но это заманивает вас к проблеме, которая у вас есть сейчас. Вы сохраняете объекты / структуры, которые прикреплены к конкретному оборудованию и конкретным реализациям, и теперь вы можете легко их переносить / повторно использовать.
Лучший способ - создать абстрактную модель данных, которая ничего не знает об оборудовании или об остальном API. Он должен хранить все NSPoints / CGPoints, NSRect / CGRects в виде строк или чисел. Он должен хранить цвета в виде чисел, строк или необработанных данных. Изображения должны храниться в виде необработанных данных.
Таким образом, ядро вашего приложения, то есть данные, которыми оно фактически манипулирует, является общим. Для отображения информации вам просто нужен контроллер, который запрашивает необработанные данные и позволяет контроллеру преобразовывать их в структуру / объект, специфичную для аппаратного / API-интерфейса.
Основные данные являются хорошим примером абстрактной модели данных. Он хранит только строки, числа, даты, логические значения и т. Д., Но может хранить любую информацию произвольной сложности для любой платформы, которая поддерживает основные данные.
Даже если вы не используете Базовые данные, это тип модели данных, за который вам следует стрелять.