首页 文章

OS X Framework Library未加载:'Image not found'

提问于
浏览
199

我正在尝试创建一个基本的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

经过一段谷歌搜索后,我意识到我需要在我的容器应用程序构建阶段添加一个 Copy Files 部分,所以我已经完成了这个并将其设置为......

enter image description here

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

我错过了什么?

UPDATE:

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

enter image description here

UPDATE 2:

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

17 回答

  • 13

    [来自Xcode 6 - > 7.3]

    (是的,仍在使用Xcode 10,iOS和macOS)

    唯一要做的是将框架添加到应用目标的 General 标签中的 Embedded binaries 部分 .

    Screenshot from Xcode

  • 5

    所以我设法让它工作,当你有正确的指示时,这很简单 . 我正在寻找的是一个“私有”框架,它存在于应用程序包中,而不是写入系统库文件夹 .

    Building The Framework

    • 添加目标以创建Cocoa框架

    • 在该目标内'Build Settings'将'Installation Directory'配置为'@executable_path/../Frameworks'

    • 构建库,并从存档或产品目录访问.framework

    Including The Framework

    • 将创建的.framework文件拖到Xcode项目中,请务必勾选'Copy Files to Directory'

    • 在包含的应用程序目标中,添加一个新的'Copy File Build Phase'

    • 将'Destination'设为'Frameworks'

    • 在创建的.framework中拖动

  • 1

    这对我来说非常简单,我只是将我的框架添加到app目标下的嵌入式二进制文件中

  • 428

    上面的选项我不能包括在内 . 我通过指定Runpath搜索路径解决了它

    这是' Build Settings ' tab. In the ' Linking ' section. Change ' Runpath Search Paths '进 $(inherited) @executable_path/Frameworks

  • 3

    这些问题都没有为我解决这个问题 . 最终的问题很简单 . 看起来它是一个非常重要的Xcode错误,我已经记录了问题并修复了Apple错误:29820370 . 如果你正在努力(因为看起来有几页类似的问题),那么如果你能这样做会很棒提出bug记者的错误:https://bugreport.apple.com/并引用我提出的错误以获得可见性 . 我想让Xcode恢复到以前的乐趣 - 这是我确信Xcode应该自行修复的东西 .

    以下是修复:1 . 打开钥匙串 - 转到Apple Worldwide Developer Cert . 2.双击它3.从“始终信任”更改权限级别以使用系统默认值4.保存并关闭它5.重新启动Xcode,清理并构建项目,它应该消失 .

    下面是正确设置的屏幕截图:
    Keychain access fixed
    希望这有帮助!

  • 0

    删除派生数据为我保存了它

  • 5

    我遇到了同样的问题但是接受的解决方案对我不起作用 . 相反,解决方案是修改框架的安装名称 .

    原帖中的错误是:

    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
    

    请注意未加载库之后的第一个路径 . 框架是从绝对路径加载的 . 此路径来自框架的安装名称(有时称为rpath),可以使用以下方法检查:

    otool -D MyFramework.framework/MyFramework
    

    当框架嵌入到应用程序中时,此路径应该是相对的并且具有以下形式:@ rpath / MyFramework.framework / MyFramework . 如果框架的安装名称是绝对路径,则可能无法在运行时加载,并且将生成类似于上述错误的错误 .

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

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

    通过此更改,我不再收到错误

  • 3

    如果您不小心重置了钥匙串,可能会因钥匙串中缺少Apple证书而发生这种情况 . 我跟着this来解决我的问题 .

    我有同样的问题,并能够通过重新下载WWDR(Apple全球开发者关系认证中心)来解决 . 从这里下载:http://developer.apple.com/certificationauthority/AppleWWDRCA.cer

  • 1

    应该有一个“运行脚本”进入“构建阶段”:'/ usr / local / bin / carthage copy-frameworks'

    在“运行脚本”的“输入文件”中,您应该添加库的路径 . 像这样:

    Build Phases Run Script

  • 18

    对于Xcode 8,将从派生数据文件夹中删除一些陈旧产品,请参阅this solution .

    Apple:In macOS 10.12 and later, Xcode cleans up stale derived data, precompiled headers, and module caches. (23282174)

    The Xcode build system supports stale file removal of some types of build artifacts that were produced in a previous build, but have since been removed from the project.

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

    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
    

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

    只是澄清我的情况和理由,希望它对某人有帮助 .

  • 0

    对我来说,这是解决方案,经过几个小时的搜索!

    出于某种原因,在开发Swift 2.3自定义框架时,Xcode 8已经从 project.pbxproj 文件中删除了 DYLIB_INSTALL_NAME_BASE 设置 . 稍稍走进 Build Settings / Dynamic Library Install Name Base 设置回到 @rpath 修复了它 .

    (来自https://forums.developer.apple.com/thread/4687

  • 7

    我发现这个问题只与代码签名和证书有关,而与代码本身无关 . 要验证这一点,请创建基本的单一视图应用,并尝试在不对设备进行任何更改的情况下运行它 . 如果您看到相同的错误类型,则表明您的代码没问题 . 像我一样,你会发现你的证书无效 . 再次下载并修复任何过期的 . 然后当你得到基本的应用程序不报告错误时,请在退出Xcode后重新尝试你的应用程序,并可能重新启动你的mac以获得良好的衡量标准 . 这终于让这场噩梦结束了 . 这很可能与您的代码无关,尤其是当您尝试运行它时获得Build Successful消息 . FYI

  • 49

    在尝试Xcode 9 beta并返回Xcode 8时遇到了问题 . 目标上的简单清理解决了这个问题 .

  • 0

    出于不同的原因,我遇到了同样的问题 . 我已经为Debug和Release创建了一个新配置(在PROJECT - > Info选项卡 - > Configuration下) . 我不得不更改我的pod框架shell脚本(Pods-“appName”-frameworks.sh,在Targets Support Files下)以使其工作 .

    [Xcode 9]

  • 0

    唯一对我有用的东西:

    目标>构建阶段> [CP]嵌入窗格框架取消选中“在构建日志中显示环境变量”和“仅在安装时运行脚本”

  • 0

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

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

  • 0

    打开xcode - > general - >嵌入式二进制文件 - >添加QBImagepicker.framework和RSKImageCropper - >清理项目

    只需在嵌入式二进制文件中添加QBImagePicker.framework和RSKImageCropper.framework

相关问题