我试图创建一个基本的OS X框架,现在我刚刚创建了一个测试框架:TestMacFramework.framework,我试图将它导入到一个全新的OS X应用程序项目。

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

然而,当我尝试运行容器应用程序时,我得到以下错误:

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

在谷歌了一下之后,我意识到我需要在我的容器应用程序构建阶段添加一个复制文件部分,所以我已经这样做了,并像这样设置它…

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

我错过了什么?

更新:

我可以在构建日志中看到我的TestMacFramework.framework被复制到.app contents/frameworks目录中,但它没有被安装到HD上的Library/ frameworks目录中

更新2:

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


当前回答

如果你不小心重置了你的钥匙链,这可能是由于在钥匙链中丢失了苹果证书。我遵循这个方法来解决我的问题。

我遇到了同样的问题,并通过重新下载WWDR(苹果全球开发者关系认证机构)来解决。 从这里下载:http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

其他回答

对于Xcode 8,一些陈旧的产品将从派生的数据文件夹中删除参考这个解决方案。

苹果:在macOS 10.12及以后版本中,Xcode会清理陈旧的派生数据、预编译的头文件和模块缓存。(23282174)

Xcode构建系统支持旧文件删除某些类型的构建构件,这些构件在以前的构建中产生,但已经从项目中删除了。

根据作者的想法,我从我的案例中找到了这个构建日志。

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

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

澄清一下我的情况和原因,希望对大家有所帮助。

我尝试了许多修复,但对我有效的是删除构建方案的构建选项卡中列出的缺失目标。您可以通过打开当前方案的编辑窗口来访问它。

编辑:我的UI测试目标不能正常工作,我找到的解决方案是删除它并重新生成它。

我只在真正的设备(iPhone SE)上运行时遇到过这个问题。在模拟器项目工作如预期。

我尝试了所有的修复从这个线程和从这里。 这些对我都没用。

对我来说,重启iPhone后问题就解决了。

我做了:

清洁构建文件夹, 干净的衍生数据, 从设备上删除app 重新启动设备

最终成功了。:)

如果其他解决方案都失败了,不要忘记尝试一下。

我也有同样的问题,但原因不同。 我已经创建了一个新的配置调试和发布(在项目->信息选项卡->配置)。 我不得不改变我的pod框架shell脚本(Pods-"appName"-frameworks.sh,在目标支持文件下)使其工作。

[Xcode 9]

当尝试Xcode 9测试版并返回到Xcode 8时,出现了问题。对目标进行简单的Clean就解决了这个问题。