Подтвердить что ты не робот

Как создать единую общую инфраструктуру между iOS и OS X

Я пытаюсь создать фреймворк для хранения общих классов сущностей для приложения, работающего на iOS и OS X. В настоящее время я просто включаю файлы в каждую цель, но для этого требуется изменить модель данных, чтобы получить класс от текущей цели (поскольку в Swift вам нужно указать модуль, который имеет класс в файле модели). Это, конечно, означает, что я время от времени забываю, и все не работает.

Очевидным решением является создание общей структуры, которая содержит классы сущностей, чтобы модель данных всегда указывала на одно и то же место.

Проблема заключается в том, что не существует способа создать фреймворк, который основывается на обеих платформах.

Кто-нибудь нашел способ создать единую структуру или библиотеку, которая работает на обеих платформах?

4b9b3361

Ответ 1

Если вы хотите создать единый двоичный файл динамической структуры, вот шаги, которые вы можете выполнить (как указано в http://colemancda.github.io/2015/02/11/universal-ios-osx-framework):

1. Измените допустимые архитектуры проекта и поддерживаемые платформы.

Это должно также изменить допустимые архитектуры вашей платформы и тестовой единицы и поддерживаемые платформы. Если нет, то вручную измените их для наследования из настроек сборки проекта.

Step One

  • Base SDK: Я рекомендую OS X, но он будет работать и с iOS. Обратите внимание, что с iOS в качестве базового SDK цель "Мой Mac" разделяется на 3 разные цели.

  • Поддерживаемые платформы: macosx iphoneos iphonesimulator

  • Действительные архитектуры: arm64 armv7 armv7s i386 x86_64

2. Измените пути поиска для пакета Unit Test

Step Two

  • Пути поиска пути: $(inherited) @executable_path/Frameworks @loader_path/Frameworks @executable_path/../Frameworks @loader_path/../Frameworks

  • Пути поиска: $(SDKROOT) $(inherited)

Это лучшее решение, чем наличие двух отдельных целей.

Ответ 2

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

Все, что нужно сделать, это создать целевую среду для каждой платформы, но затем установить имена продуктов одинаковыми. Поскольку это также имя модуля в Swift, вы можете установить поле класса в модели Core Data на одно значение и работать на обеих платформах.

Настройка, которую я использую, заключается в том, чтобы включать файлы модели в обе структуры, но включать модель непосредственно в каждую целевую программу.

Вы также должны иметь возможность устанавливать для обоих приложений одинаковое имя продукта и все работать, но я не тестировал его, и рамки позволяют вам иметь MyApp и MyAppMobile, если вы хотите.