将框架嵌入iOS框架中

9

我有一个项目,其中包含另一个目标(框架),该目标是主项目的依赖项。该框架需要它自己的框架,因此我使用Carthage添加了它们。该项目在模拟器上编译和运行正常,但是在物理设备上运行时,我遇到了以下错误:

dyld: Library not loaded: @rpath/Subframework.framework/Subframework
  Referenced from: /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/MyAppSDK
  Reason: no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/Frameworks/Subframework.framework/Subframework: mmap() error 1 at address=0x00798000, size=0x00060000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/LONG-ID/MyApp.app/Frameworks/MyAppSDK.framework/Frameworks/Subframework.framework/Subframework

我曾尝试过这个方法,但唯一的解决方案是将子框架添加到“嵌入式框架”中的顶层项目中,但这不可行。我尝试修改构建设置->链接->动态库安装名称,但没有帮助。
如何在iPhone上实现它的工作?

我会考虑设置框架的运行路径。我假设我们谈论的是iOS 8+? - trojanfoe
@trojanfoe 是的,最低版本是iOS 8,我应该在哪里和如何设置它? - user_4685247
它在构建设置中。假设两个框架在同一个目录中,你可能只需要添加@loader_path - trojanfoe
@trojanfoe,Myappsdk的loadersdk已经指向loaderpath,以及rpath。 - user_4685247
我已经仔细检查过,“MySDK”框架文件内包含所需的子框架。 - user_4685247
显示剩余3条评论
1个回答

0
我曾经也遇到过这个问题,我的三级层次结构中最外层的“Umbrella Framework”不应该与其他框架一起分发。我是通过在每个“Umbrella Framework”的“Build Settings”中的“Linking”下设置“Run Search Paths”指向“Build Phases”中设置的“Copy Files”目标来解决的(您必须添加一个“Copy Files”构建阶段,并将其目标设置为“Frameworks”,然后添加要嵌入的每个“Sub-framework”)。

将子框架复制到“Frameworks”

将“Runpath Search Paths”设置为“Frameworks”


在我的应用程序中进行了这个安排之后,应用程序加载器拒绝上传ipa并显示错误消息:'ERROR ITMS-90205:“无效的捆绑包。'appname.ipa/Frameworks/umbrellaFramework.framework'中包含不允许的嵌套捆绑包”'和'ERROR ITMS-90205:“无效的捆绑包。'appname.ipa/Frameworks/umbrellaFramework.framework'中包含不允许的文件'Frameworks'”'。最终我让伞形框架与子框架一起编译,并在编译后将子框架移出并嵌入到项目中。同时删除“Frameworks”目录。 - dev_exo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接