Лучшая практика для обмена кодами между OSX и IOS-приложением

Я создаю версию существующего приложения OSX для iOS и задаюсь вопросом, что лучше всего использовать для обмена кодами между ними. Этот код зависит только от основы и динамической библиотеки Sqlite, поэтому он должен компилироваться и работать на обеих платформах.

Мне кажется, есть три возможных варианта:

  • Создайте единый проект с OSX и объектами IOS, добавьте исходные файлы к каждой цели, если это необходимо.
  • Создайте два отдельных проекта для приложений OSX и IOS, поместите общий код в общее место в рабочей области и добавьте его в качестве ссылки на оба проекта.
  • Создайте три проекта: приложение OSX, приложение IOS и общую статическую библиотеку с OSX и объектами IOS; добавьте каждую целевую библиотеку в соответствующее приложение.

Есть ли какая-нибудь причина, по которой один из вышеуказанных подходов может быть лучше, чем два других? Если нет, вариант 2 кажется самым простым на сегодняшний день.

Ответы

Ответ 1

Я сделал это и взял третий подход; отдельная статическая библиотека. Причина, по которой я выбрал этот подход, состояла в том, что он может храниться в пределах своего собственного репозитория git и позже использоваться другими проектами.

Однако одна вещь, которую нужно преодолеть, - это определение платформы, для которой вы компилируете. Я решил это, используя следующий фрагмент кода, который определяет SYSINFO_IOS или SYSINFO_OSX, которые затем используются в файлах источника/заголовка библиотеки:

#import <TargetConditionals.h>

#if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR
#define SYSINFO_OSX 1
#else
#define SYSINFO_IOS 1
#endif

Этот фрагмент должен быть в собственном файле заголовка.