Swift Embedded Framework, которая зависит от пакета Swift - PullRequest
1 голос
/ 27 февраля 2020
Приложение

My iOS следует шаблону «Расширение фотографий»: - Автономное приложение «контейнер» - Расширение редактирования фотографий, которое развертывается путем встраивания его в указанное выше приложение.

В соответствии с предложением Apple, код, который является общим как приложением, так и расширением, собран в «базовую» инфраструктуру какао , которая встроена в приложение и в которую входят и приложение, и расширение связаны.

Итак, мой проект Xcode содержит три цели :

  • Цель Framework , цель
  • 1018 * Расширение редактирования фотографий * цель 1019 *, которая связывается с платформой, но не встраивает ее, и
  • цель App , которая встраивает двоичный файл расширения и двоичный файл платформы, а также ссылки к обоим.

Пока все хорошо.


Кроме того, фреймворк, приложение и расширение зависят от двух библиотек MyLibraryA и MyLibraryB У меня есть на Github (и, в свою очередь, MyLibraryA зависит от MyLibraryB ).

Первоначально я установил зависимость на MyLibraryA и MyLibraryB с использованием Carthage, и все работало нормально .


Затем , я решил перенести мои библиотеки A и B. в Swift Packages.

Я удалил все связанные с Carthage настройки в проекте и целях, путях поиска фреймворка и т. Д. c. чтобы убедиться, что ссылки на версии моих библиотек Swift Package указаны, а не на кэшированные сборки Carthage. Я также удалил каталоги Carthage (checkouts и build).

Проблема

Когда я создаю общую / внедренную Framework цель, есть никаких проблем.

Но когда я пытаюсь создать цели App или Extension Application , я получаю сообщение об ошибке, указывающее на общий каркас Swift header (MyFramewor-Swift) .h):

// ...
@import CoreGraphics;
@import CoreImage;
@import Foundation;
@import PhotosUI;
@import UIKit;
@import MyLibraryA;  <-- Module 'MyLibraryA' Not Found
// ...

И полученный:

Не удалось построить Objective- C модуль 'MyFramework'

Я знаю фреймворки , распространяемые как двоичные файлы не могут зависеть от пакетов Swift, но эта встроенная среда локально скомпилирована из исходного кода и затем встроена .

Возможно, есть какие-то изменения, которые я могу внести в мои настройки на XCode, чтобы заставить его работать?

Я попытался изменить Enable Modules (C and Objective-C) на No в Настройки сборки для цели Framework, безрезультатно.

1 Ответ

1 голос
/ 31 марта 2020

В настоящее время вы можете установить Install Objective-C Compatibility Header на No в настройках сборки для модулей, для которых требуется зависимость от пакета Swift.

Вероятно, это связано с тем, что "Swift Packages" является "Swift", но все равно выглядит для меня как ошибка.

...