未加载OS X框架库:“未find图像”

我正在尝试创build一个基本的OS X框架,现在我只是创build了一个testing框架: TestMacFramework.framework并且我试图将其导入到一个全新的OS X应用程序项目中。

我已经build立了.framework文件,并将其导入到新的项目中。框架似乎链接好了,我可以引用我添加到框架构build阶段部分的公共头文件。

但是,当我尝试运行容器应用程序时出现以下错误:

 dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer Reason: image not found 

经过一番search后,我意识到我需要添加一个Copy Files部分到我的容器应用程序构build阶段,所以我已经完成了这个设置,像这样…

在这里输入图像描述

但是,我仍然遇到运行时错误。 我显然在这里做错了什么,但苹果开发人员的资源,这引用Xcode 2,所以不是很有帮助!

我错过了什么?

更新:

我可以在构build日志中看到我的TestMacFramework.framework被复制到.app内容/框架目录中,但是它没有被安装到HD上的Library / Frameworks目录

在这里输入图像描述

更新2:

如果我手动将TestMacFramework.framework复制到Library/Frameworks目录, TestMacFramework.framework链接正确

[来自XCode 6 – > 7.3]

(是的,仍然在XCode 9上工作)

唯一要做的就是将框架添加到应用程序目标的“常规”选项卡中的“embedded式二进制文件”部分

在这里输入图像描述

所以我设法让它工作,这是非常简单的,当你有正确的指示。 我正在寻找的是一个“私人的”框架,居住在应用程序包而不是写入系统库文件夹。

构build框架

  1. 添加一个目标来创build一个Cocoa框架
  2. 在“构build设置”目标中,将“安装目录”configuration为“@executable_path /../ Frameworks”
  3. 构build库,并从存档或产品目录访问.framework

包括框架

  1. 将创build的.framework文件拖到Xcode项目中,确保勾选“将文件复制到目录”
  2. 在包含的应用程序目标中,添加一个新的“复制文件构build阶段”
  3. 将“目标”设置为“框架”
  4. 在创build的框架中拖动

这对我来说非常简单,我只是将我的框架添加到应用程序目标下的embedded式二进制文件中

上面的选项不可能包括在内。 我通过指定运行pathsearchpath来解决它

这是在“ 构build设置 ”选项卡上。 在“ 链接 ”部分。 将“ 运行pathsearchpath ”更改为$(inherited) @executable_path/Frameworks

这些问题都不能解决这个问题。 最后的问题很简单。 它看起来像它是一个非常主要的Xcode错误,我已经logging了这个问题,并修复了苹果的错误:29820370.如果你正在努力(因为它似乎有几页类似的问题),那么,如果你可以在bug报告者: https ://bugreport.apple.com/上提出一个错误,并引用我为了获得知名度而提出的错误。 我想让Xcode恢复到以前的乐趣 – 这是我确信Xcode应该已经修复了。

这是修复:1.打开钥匙串 – 去苹果全球开发人员证书。 2.双击它3.将权限级别从“始终信任”更改为使用系统默认值4.保存并closures它5.重新启动Xcode,清理并构build您的项目,它应该消失。

下面的正确设置屏幕截图: 钥匙串访问固定 希望这可以帮助!

删除派生的数据为我保存

如果您不小心重置了钥匙串,则可能由于钥匙串中缺lessApple证书而发生这种情况。 我遵循这个来解决我的问题。

我有同样的问题,并能够通过重新下载WWDR(苹果全球开发者关系authentication机构)来修复。 从这里下载: http : //developer.apple.com/certificationauthority/AppleWWDRCA.cer

我遇到了同样的问题,但接受的解决scheme并没有为我工作。 相反,解决scheme是修改框架的安装名称。

原帖中的错误是:

 dyld: Library not loaded: /Library/Frameworks/TestMacFramework.framework/Versions/A/TestMacFramework Referenced from: /Users/samharman/Library/Developer/Xcode/DerivedData/TestMacContainer-dzabuelobzfknafuhmgooqhqrgzl/Build/Products/Debug/TestMacContainer.app/Contents/MacOS/TestMacContainer Reason: image not found 

请注意库未加载后的第一个path。 框架正从绝对path加载。 此path来自框架的安装名称(有时称为rpath),可以使用以下命令进行检查:

 otool -D MyFramework.framework/MyFramework 

当一个框架embedded到应用程序中时,这个path应该是相对的,并且是这种forms: @ rpath / MyFramework.framework / MyFramework 。 如果您的框架的安装名称是绝对path,那么它可能不会在运行时加载,并会产生类似上面的错误。

解决方法是修改安装名称:

 install_name_tool -id "@rpath/MyFramework.framework/MyFramework" MyFramework.framework/MyFramework 

有了这个改变,我不再会得到这个错误

应该有一个“运行脚本”到“构build阶段”:“/ usr / local / bin / carthage copy-frameworks”

在“运行脚本”的“input文件”上,您应该添加path到您的库。 喜欢这个:

构建阶段运行脚本

对于Xcode 8,一些陈旧的产品将从派生数据文件夹中删除,请参阅此解决scheme 。

Apple: 在macOS 10.12及更高版本中,Xcode清除过时的派生数据,预编译头文件和模块caching。 (23282174)

Xcode构build系统支持在之前的构build中生成的某些types的构build工件的陈旧文件删除,但是已经从项目中删除。

根据作者的想法,我发现这个构build日志从我的情况。

 Remove stale build products /bin/rm -rf /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks/AliyunVodPlayerSDK.framework /bin/rmdir /Users/usename/Library/Developer/Xcode/DerivedData/myapp-esvvhwwwwngijeemhatmklwzoxnb/Build/Products/Debug-iphonesimulator/myapp.app/Frameworks 

创build新的副本文件阶段并将目标陈旧框架复制到框架目标后,上面的删除日志在重build后消失。

只要澄清我的情况和理由,希望对某人有帮助。

我发现这个问题只与代码签名和证书有关,而不是代码本身。 要validation这一点,请创build基本的单一视图应用程序,并尝试运行它,而不需要对设备进行任何更改。 如果你看到相同的错误types,这表明你的代码是好的。 像我一样,你会发现你的证书是无效的。 再次下载并修复任何过期的。 然后,当你得到基本的应用程序不报告错误尝试退出Xcode之后再次尝试你的应用程序,也许重新启动您的Mac的好措施。 这终于把这个噩梦结束了。 这很可能与您的代码没有任何关系,尤其是当您尝试运行代码时,如果您收到构build成功消息。 FYI

尝试Xcode 9testing版并返回到Xcode 8时遇到了问题。目标上的一个简单的Clean可解决问题。

我有一个不同的原因相同的问题。 我创build了一个新的configurationdebugging和发布(在项目 – >信息选项卡 – >configuration)。 我不得不改变我的pod框架shell脚本(Pods-“appName”-frameworks.sh,在目标支持文件下)来使它工作。

[Xcode 9]