我创建了一个自定义iOS框架LoginKit。它反过来将Alamofire框架嵌入其中。在模拟器中,一切正常,但在尝试在设备上运行时,我收到错误:
Dyld错误消息:
Library not loaded: @rpath/Alamofire.framework/Alamofire
Referenced from: /Users/USER/Library/Developer/CoreSimulator/Devices/506B47DE-804F-477F-AA90-69DF039E07FA/data/Containers/Bundle/Application/26D0CA8F-7284-42B5-8091-E5915736DCDB/Bingo.app/Bingo
Reason: image not found
在父应用程序中,在嵌入式二进制文件部分中,我只有LoginKit.framework。现在,如果我还嵌入了Alamofire.framework(取自LoginKit下面),那么错误就会消失。这种行为有望吗?它不会破坏封装的整个目的吗?
您要创建的内容称为“伞框架”。通过一些hacks和自定义bash脚本的使用,您可以使用嵌套框架创建这样的框架,如here所述。
但是,Apple highly discourages创建伞形框架,因为这种方法可以创建奇怪的运行时和/或链接错误的所有国王。此外,很明显,如果您的应用程序包含多个框架,这些框架在不同版本中嵌入相同的框架甚至相同的框架,那么它将变得更大,更难维护。 here可以找到对这些问题的一个很好的解释。
目前,包含框架的框架仍然是应用程序开发中的一个大问题,因为Apple不提供良好的框架处理。在这个问题最终解决之前,我强烈建议将所有框架和子框架直接嵌入到应用程序中。