Лучший способ приблизиться к этому - использовать рабочую область верхнего уровня XCode (Файл -> Создать -> Рабочая область).Поэтому создайте рабочее пространство с именем Example.
В качестве второго шага создайте каталог с именем lib и поместите его в каталог Example.Размещение его внутри каталога не является строго обязательным, но я делаю это, чтобы сохранить файлы в одном каталоге проекта.Затем запустите в каталоге lib
:
swift package init --type library
и добавьте некоторый код для создания вашей платформы.
Далее создайте новый проект, используя Xcode.Поэтому File -> New -> Project и сохраните этот проект также в каталоге Example (Опять же, не обязательно помещать его в Example).Сейчас давайте предположим, что вы создаете приложение какао с именем TestUI.
Теперь откройте пример рабочего пространства и добавьте два проекта в рабочее пространство, используя File -> Add Files to «Example».Вы должны добавить сгенерированный lib.xcodeproj
для каталога lib
и TestUI.xcodeproj
для TestUI.
С этого момента Xcode автоматически позаботится обо всем.Он будет хранить все файлы из обоих проектов в одном каталоге сборки, и вы можете создать / запустить / собрать / отладить ваше приложение, как вы ожидаете.
Структура должна выглядеть следующим образом:
Example
|-- Example.xcworkspace
|-- TestUI
| |-- TestUI
| | |-- AppDelegate.swift
| | |-- Assets.xcassets
| | | |-- AppIcon.appiconset
| | | | `-- Contents.json
| | | `-- Contents.json
| | |-- Base.lproj
| | | `-- Main.storyboard
| | |-- Info.plist
| | |-- MailboxViewController.swift
| | |-- TestUI.entitlements
| | `-- ViewController.swift
| `-- TestUI.xcodeproj
`-- lib
|-- lib.xcodeproj
|-- Package.resolved
|-- Package.swift
|-- README.md
|-- Sources
| |-- ExampleLib
| | |-- Account.swift
| | |-- Credentials.swift
У этого подхода есть одно существенное ограничение.Если в вашей библиотеке нет компонентов Swift, например, оболочки вокруг C-библиотеки, она не будет работать из коробки.Вы получите сообщения типа «Не удается найти необходимый Framework xxx», если вы попытаетесь его использовать.Это также может произойти, если вы добавите в свою библиотеку несколько обязательных пакетов на основе 'C'.
Я нашел следующую работу вокруг.Сначала перейдите в каталог lib
и выполните следующую команду:
find lib.xcodeproj -name module.modulemap
В случае, если вы использовали / создали библиотеку xxx
, вы получите следующий вывод:
lib.xcodeproj/GeneratedModuleMap/xxx/module.modulemap
Теперь перейдите в рабочую область «Пример» и выберите TestUI -> «Настройки сборки» -> «Все» и введите в поле поиска «Другие флаги Swift».
Откройте его и добавьте следующие два поля:
-Xcc
-fmodule-map-file=$(SRCROOT)/../lib/lib.xcodeproj/GeneratedModuleMap/xxx/module.modulemap
И это все.Теперь все должно работать.Для компиляции и запуска даже нет необходимости вставлять двоичные файлы в приложение TestUI, хотя я предполагаю, что это будет необходимо для распространения.