在我们的Xcode项目中,我们已经开始实现ios模块,将我们庞大的代码库划分为独立的部分。
我们有以下方面的模块:
Common
Product1
Product2
Product
App
App使用Product1,Product2和Common,而Product1使用Common,但Common对更高级别的项目一无所知。
在XCode / Swift中,这些是作为单独的目标实现的,并生成导入到更高级别目标的框架。它适用于应用程序。最终产品应用程序编译时无需担心它是通过依赖框架来自多个目标。
我们还有一个为第三方部署的实际框架。以前我们选择了框架中存在的所有文件,并使它们成为框架目标和应用程序目标的双重成员。
现在我们有了这种依赖关系,其中较低级别的模块被包含在xcode中作为“目标依赖关系”。
ProductFramework3rdParty
Product1
Common
ProductFramework在模拟器中编译得很好,它可以嵌入到准系统样本应用程序中并作为嵌入式二进制文件运行。这是目标。
在设备上,它给出的错误是它在运行时找不到Common框架。
dyld: Library not loaded: @rpath/Common.framework/Common
Referenced from:
/private/var/mobile/Containers/Bundle/**/**/ProductFramework3rdParty/ProductFramework3rdParty
Reason: image not found
仅当我在第三方应用程序中嵌入Common,并最终嵌入Product1模块时,它才有效。这不是真正的预期目标,必须交付我们的官方框架,以及内部模块到客户端包括。我们最终可能在代码中有5-10个模块,并且希望将它们全部打包到单个分布式框架中。
我们怎么做?
我尝试将Mach-O for common从动态更改为静态,但未成功,它创建了一个很长的链接错误列表,我无法通过。除了将Common增加到100mb之外,还要比以前大得多。