dyld:库未加载:@rpath/FMDB.framework/FMDB

3

我正在使用Xcode 7.2和Swift 2,部署目标是iOS 9.0。

虽然我的问题与之前的许多问题类似,但我的问题并不常见,也没有找到任何参考资料。

我创建了一个混合代码(包括Swift和ObjC)的iOS Cocoa Touch框架,并从Cocoapods中引入了一些库(FMDB、ObjectMapper、HockeySDK)。

在同一个项目中,我有另一个目标,其中包含一个示例应用程序,我在其中包含了我的框架。现在,当我尝试在我的设备上运行它时,它会在安装后立即抛出这个运行时错误

dyld: Library not loaded: @rpath/FMDB.framework/FMDB Referenced from: /private/var/mobile/Containers/Bundle/Application/0A768355-B7F9-4B1C-AE0D-D2ED57A7E1D6/SwiftExample.app/Frameworks/MyFramework.framework/MyFramework Reason: image not found.

我已经尝试了以下所有操作:

  • 重新启动Xcode、iPhone和电脑
  • 清理和构建项目
  • Runpath Search Paths为 '$(inherited) @executable_path/Frameworks'
  • Embedded Content Contains Swift Code为'Yes'

我的PodFile具有以下描述:

source 'https://github.com/CocoaPods/Specs.git'
use_frameworks!

platform :ios, '9.0'

xcodeproj 'MyFramework'

target :'MyFramework' do
    pod 'HockeySDK', '~> 3.8.4'
    pod 'FMDB'
    pod 'OpenSSL-iOS', '~> 1.0'
    pod 'GoogleAnalytics'
    pod 'ObjectMapper', '~> 1.0'
end

我错过了什么或做错了什么吗?

这个框架是否在应用程序包的“Frameworks”文件夹中? - trojanfoe
@trojanfoe 是的。该框架存在于Frameworks文件夹中。但是.framework的Frameworks文件夹没有通过pods安装的库。 - Shane D
有时候只需要重新构建整个工作区就足够了。点击“产品”->“清理”,然后重新构建您的项目。 - Alexander Perechnev
@AlexanderPerechnev 当Xcode出现问题时,这是我首先回退到的东西。但它并不起作用。 - Shane D
有人解决了这个问题吗? - JAManfredi
@JAManfredi 没能找到解决办法。只能回到使用静态库的方式。我找到的解决方法是,如果你在你的框架中使用了其他框架,并且将你的框架用于一个应用程序中,要求是,你还需要将那些第三方/其他框架链接到你的应用程序中。 请参考这个链接的解决方案:dyld-library-not-loaded-for-a-framework-within-a-framework 目前看来,对于这个问题似乎没有一个确切的解决方案。 - Shane D
1个回答

1
我今天早上遇到了同样的问题。我通过以下方法解决了它:(1)以静态链接而非动态链接的方式编译FMDB框架;(2)在应用程序的框架部分添加“libsqlite3.dylib”库的链接。
要完成(1),在XCode中打开FMDB框架项目,在项目编辑器中,在框架的构建设置选项卡下,在链接子选项中,将Mach-O类型更改为静态库,并重新构建框架。
要完成(2),再次在XCode中打开您的应用程序项目,在项目编辑器中,在应用程序的常规选项卡下,在“已链接的框架和库”子选项中添加“libsqlite3.dylib”。

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