Переопределение модуля при связывании статических библиотек в двух зависимых средах - PullRequest
0 голосов
/ 04 октября 2019

Проект Swift, над которым я работаю, имеет следующую структуру

   STATIC lib --- STATIC lib

        |            |

    FRAMEWORKA  FRAMEWORKB  

             \   /

              App

Там, где фреймворки A и B интегрируют стороннюю статическую библиотеку с некоторыми заголовками, я написал собственную карту модулей в Framework A & B

Приложение, с другой стороны, встраивает FRAMEWORK A & B и, естественно, получает ошибку переопределения модуля

Есть несколько способов, которыми я смог решить эту проблему

1: с помощьюслабое связывание (определяющее .a) необязательно, в отличие от требуемого в проекте FramworkB (хотя эта функция не предназначена для такого рода хаков, как я слышал) screenshot

2: НаименованиеМодуль target-c по-разному в Framework A и B, таким образом, он заставляет компоновщик успешно запустить приложение, но я получаю это сообщение во время выполнения в журналах консоли

в FRAMEWORKA

module ACore {
    header "ACoreConstants.h"
}

вFRAMEWORKB

module Acorn {
    header "ACoreConstants.h"
}

Класс ACore реализован в / Users / пользователь / Library / Developer / Xcode / DerivedData / TesterApp-anudhiavmakfclfdxilmgmfzordl / Build / Products / Debug-iphonesimulator / FrameworkA.framework / FrameworkA (0x108ad2908) и /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/rameworkBR0F0FF0) (0). Один из двух будет использован. Какой из них не определен.

Есть ли лучший в целом более чистый способ делать подобные вещи?

1 Ответ

0 голосов
/ 07 октября 2019

Поэтому, немного потрудившись, я превратил архитектуру в более простую.

     STATIC lib
           |
   Wrapper Framework
    /            \
FRAMEWORKA  FRAMEWORKB  
         \   /
          App

. Таким образом, FRAMEWORKA & B взаимодействует с инфраструктурой оболочки через фасад и оболочку, никогда не пропуская информацию осодержащая статическая библиотека

...