Как упаковать несколько внутренних swift-модулей (фреймворков) в один сторонний фреймворк? - PullRequest
0 голосов
/ 30 мая 2018

В нашем проекте XCode мы начали реализовывать модули ios как способ разделить нашу массивную кодовую базу на изолированные секции.

У нас есть модули для таких вещей, как:

Common
Product1
Product2
Product
App

Где приложение использует Product1, Product2 и Common, а Product1 использует Common, но Common ничего не знает о элементах более высокого уровня.

В XCode / Swift они реализованы как отдельные цели и генерируют интегрированные среды, которые импортируются вцели более высокого уровня.Это прекрасно работает для приложения.И приложение конечного продукта компилируется, не заботясь о том, что оно исходит от нескольких целей через каркасы зависимостей.

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

Теперь, однако, у нас есть такая зависимость, где модули нижнего уровня включены в качестве «целевых зависимостей» в xcode.

ProductFramework3rdParty
Product1
Common

ProductFramework прекрасно компилируется в симуляторе, который может быть встроен впример приложения barebones и работает как встроенный двоичный файл.Это и есть цель.

На устройстве, однако, выдается ошибка, из-за которой он не может найти общую платформу во время выполнения.

dyld: Library not loaded: @rpath/Common.framework/Common
Referenced from: 
/private/var/mobile/Containers/Bundle/**/**/ProductFramework3rdParty/ProductFramework3rdParty
Reason: image not found

Он работает, только если я встраиваю общее, и в конечном итогемодули Product1 в стороннем приложении также.На самом деле это не является намеченной целью - предоставить клиенту нашу официальную структуру, а также внутренние модули для включения.В конечном счете, в нашем коде может быть 5-10 модулей, и мы хотели бы упаковать все это в единую распределенную среду.

Как мы можем это сделать?

Я безуспешно пытался изменить Mach-O для Common с динамического на статический, и он создал длинный список ошибок компоновки, которые я не смог преодолеть.А также раздувает Общее до 100 МБ, намного больше, чем предыдущий.

...