在两个依赖框架中链接静态库时的模块重新定义

Module redefinition while linking static libs in two dependent frameworks

Swift 我正在处理的项目具有以下结构

   STATIC lib --- STATIC lib

        |            |

    FRAMEWORKA  FRAMEWORKB  

             \   /

              App

框架 A 和 B 将第 3 方静态库与某些 headers 集成,我在框架 A 和 B 中编写了自定义模块映射

另一方面,App 嵌入了 FRAMEWORK A 和 B,自然会出现模块重定义错误

有几种方法可以解决这个问题

1:通过弱链接(定义 .a)是可选的,而不是 FramworkB 项目中的必需项(尽管我听说该功能并不适用于此类 hack)

2:在框架 A 和 B 中以不同的方式命名 objective-c 模块,这样它就成功地诱使链接器进入 运行 应用程序,但我在运行时在控制台日志中收到此消息

在 框架

module ACore {
    header "ACoreConstants.h"
}

在 FRAMEWORKB 中

module Acorn {
    header "ACoreConstants.h"
}

Class ACore is implemented in both /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkA.framework/FrameworkA (0x108ad2908) and /Users/user/Library/Developer/Xcode/DerivedData/TesterApp-anudhiavmakfclfdxilmgmfzordl/Build/Products/Debug-iphonesimulator/FrameworkB.framework/FrameworkB (0x10881d908). One of the two will be used. Which one is undefined.

有没有更好更简洁的方法来做这类事情?

所以经过一番努力,我将架构演变成一个更简单的架构

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

这样,FRAMEWORKA 和 B 通过外观与包装器框架对话,并且包装器框架永远不必泄漏有关包含静态库的信息