我正在处理的Swift项目具有以下结构
STATIC lib --- STATIC lib
| |
FRAMEWORKA FRAMEWORKB
\ /
App
框架A和B在其中集成了带有某些标头的第三者静态库的地方,我已经在框架A和B中编写了自定义模块映射
另一方面,应用程序嵌入了FRAMEWORK A和B,自然会得到模块重新定义错误
我有几种方法可以解决此问题
1:通过弱链接(定义.a)可选,而不是FramworkB项目中的必需链接(尽管该功能并不适用于我所听到的这种hack)
2:在Framework A和B中以不同的方式命名Objective-C模块,这种方式会诱使链接程序成功运行应用程序,但在运行时会在控制台日志中收到此消息
在FRAMEWORKA
module ACore {
header "ACoreConstants.h"
}
在FRAMEWORKB中
module Acorn {
header "ACoreConstants.h"
}
ACore类在两个/ Users /用户/库/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA(0x108ad2908)和/ Users /用户/库/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB(0x10881d908)。将使用两者之一。哪一个未定义。
是否有更好的通常更清洁的方式来执行此类操作?
因此,经过一番挣扎,我将体系结构演化为一个简单的体系
STATIC lib
|
Wrapper Framework
/ \
FRAMEWORKA FRAMEWORKB
\ /
App
通过这种方式,FRAMEWORKA&B通过外观与包装器框架进行对话,包装器框架不必泄漏有关包含的静态库的信息