【问题标题】:dyld: Library not loaded: @rpath/libswiftCore.dylib / Image not founddyld:库未加载:@rpath/libswiftCore.dylib / 找不到图像
【发布时间】:2014-11-24 03:29:40
【问题描述】:

我正在将我的应用程序从 xcode 运行到我的 iOS 设备上,但我在 iOS 设备上得到了这个和黑屏。

控制台文本:

dyld: Library not loaded: @rpath/libswiftCore.dylib
Referenced from: /private/var/mobile/Containers/Bundle/Application/10DB2FE8-EF09-4857-B4AC-0DB2E4419D6F/App-Name.app/App-Name           
Reason: image not found        
(lldb)

【问题讨论】:

  • 使用哪些框架?您的设备上运行的是哪个 iOS?
  • @return true - iOS 8 我的游戏中有以下框架:UIKit、AdSupport、CoreGraphics、AudioToolbox、AVFoundation、CoreTelephony、MessageUI、SystemConfiguration、Accelerate、Foundation、SpriteKit。把它们都写下来了:D
  • 我在迁移到新的 Mac 后遇到了这个问题。 The cause was a missing apple WWDR intermediate certificate.
  • 在一个真实的设备上我测试了整个方法并没有得到答案,但最后我从我的项目中删除了 cocoaPod 并再次重新安装它,问题解决了,我的应用程序在设备中运行了!!这是删除 cocoaPod 的答案:stackoverflow.com/a/34765245/2201814

标签: ios swift xcode6


【解决方案1】:

尝试将以下行添加到目标的 Runpath Search Paths

@executable_path/Frameworks

your_target -> 构建设置 -> 链接 -> 运行路径搜索路径

【讨论】:

  • 在我的 Runpath Search Paths 我已经默认拥有这个
  • 解决了!谢谢!我建议也清理项目:shift + cmd + k
  • 在我的例子中,这个错误是在我合并到另一个分支后发生的,在该分支中我创建了一个 Today Extension (Widget)。合并冲突后,我合并的小部件目标的运行路径以某种方式损坏,并且不包含正确的运行路径。当跳回小部件预合并时,我注意到它有这两个运行路径:@executable_path/Frameworks@executable_path/../../Frameworks(除了$(CONFIGURATION_BUILD_DIR)
  • 在我的例子中,我创建了两个目标,并添加了一个 Swift 文件,该文件创建了一个桥接头文件和一些配置,但我只将它标记为一个目标的成员。第一个目标工作正常,但第二个没有,我注意到构建设置的差异是这个设置:Runpath Search Paths -> $(inherited) and @executable_path/Frameworks 而且我还需要参考 Objective-C Bridging Header之前创建的文件。添加这两个设置后,第二个目标开始正常工作。
【解决方案2】:

我也有同样的问题。我最终在以下位置添加了框架:

  1. General > Embedded Binaries
  2. General > Linked Frameworks and Libraries
  3. Build Phases > Link Binaries with Libraries

嵌入式二进制文件对我来说似乎是关键。

【讨论】:

  • 嵌入式二进制文件!这似乎是我在这里看到的许多其他答案中缺少的关键
  • 这个问题是在引用我的 "SharedCode.framework" 时发生的。在应用程序 Target>General>"Embedded Binaries" 中添加 .framework 解决了这个问题。
【解决方案3】:

我有同样的错误信息,这就是我解决它的方法:

问题来自 Xcode 自动生成的证书。我不得不吊销这些证书并从 developer.apple.com 生成它们

解决方案是: - 转到 developer.apple.com/certificates --> 撤销证书 或进入 Xcode > 首选项 > 帐户 > 查看详细信息 > 选择签名身份 > clic setting whell > revoke - 前往developper.apple.com 并按照说明生成新证书 - 在我项目的 Xcode 中:转到代码签名身份并使用生成的证书对两个调试行进行签名 - 两个发布行都设置为“iOS Developer” - 然后项目>清洁 - 在设备上构建和运行

【讨论】:

    【解决方案4】:

    对我来说有助于将@executable_path/Frameworks 添加到项目运行路径搜索路径,而不是目标。 your_project -> 构建设置 -> 链接 -> 运行路径搜索路径

    【讨论】:

      【解决方案5】:

      我遇到了同样的问题,设置正确的代码签名身份解决了问题(构建设置->代码签名身份)。

      根据Apple 技术问题“在 iOS 8 发布后创建的所有企业和标准 iOS 开发人员证书在适当的位置都有新的团队 ID 字段,以允许 Swift 语言应用程序运行”

      【讨论】:

        【解决方案6】:

        @Saikiran 的回答有效。

        我的证书是在 iOS 8 发布之前生成的。我撤销了所有证书并重新生成了所有配置文件,它立即解决了我的问题。

        我没有足够的声誉来投票支持@Saikiran 的答案,但这肯定有助于解决问题。

        【讨论】:

          【解决方案7】:

          其他解决方案都没有帮助我,但通过删除 Xcode 的 Derived Data 目录,一切都得到了解决。

          【讨论】:

          • 是的,这对我有用。我以前只删除特定项目的派生数据,但需要删除 Xcode 的派生数据文件夹。谢谢。
          • 派生数据在哪里?
          • DerivedData 目录可以在 Xcode -> Preferences -> Locations 找到然后点击箭头带你到目录
          【解决方案8】:

          在使用 Swift 对象更新 Obj-C 嵌入式框架后,我必须将“嵌入的内容包含 Swift 代码”切换为“是”才能让我的 Obj-C 应用程序正常工作。

          【讨论】:

            【解决方案9】:

            我收到了同样的错误信息,这就是我解决它的方法: 发生这种情况是因为我更改了捆绑标识符,所以我只是输入了旧的捆绑 ID,它又开始工作了

            【讨论】:

              【解决方案10】:

              我通过从 Xcode Derived Data 目录中删除所有来修复:

              ~/Library/Developer/Xcode/DerivedData

              祝大家好运!

              【讨论】:

                【解决方案11】:

                For Me 重启模拟器解决了这个问题。

                【讨论】:

                  【解决方案12】:

                  我已经正确设置了运行路径搜索路径,但它仍然无法正常工作。 @Justin Domnitz 的回答让我走上了正确的道路:在我的目标构建设置中将“始终嵌入 Swift 标准库”设置为“是”对我有用。

                  【讨论】:

                    【解决方案13】:

                    我尝试了上面的一堆案例,但似乎并没有解决我的问题。我在一个项目中使用了 git 和 cocoapods,当我进行新的提交时,错误就消失了。

                    【讨论】:

                      【解决方案14】:

                      对我来说已经设置了选项

                      ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
                      

                      在项目中设置为 YES -> 构建设置 -> 构建选项

                      (通过Cocoapods实现Namirial框架)

                      【讨论】:

                        【解决方案15】:

                        我之前在 iPod touch iOS 9.3 中遇到过这个问题。我使用了post 中提到的所有方法,但都没有奏效。 我检查了我的项目设置。在另一个链接标志中,我发现我添加了-Wl,-sectcreate,__RESTRICT,__restrict,/dev/null

                        这个标志防止 dyld 在越狱手机中插入。当我删除此标志时,该应用程序可以再次启动。我不确定它为什么起作用。因为在 iPhone se iOS 10 中我不必删除这一行。但它确实适用于 iPod touch iOS 9.3。所以如果你有和我一样的情况,请检查一下。

                        【讨论】:

                          【解决方案16】:

                          似乎这个问题是由于将 Swift 文件包含到 Objective-C 自定义框架中引起的。也不确定是否相关,但我的应用程序目标也是在 Objective-c 中构建的。还在调试中构建到模拟器。尚未验证发布或存档版本。
                          此外,项目目标的运行路径搜索设置被设置为“@executable_path/Frameworks”,在框架的目标设置中它们被设置为:“@executable_path/Frameworks”和“@loader_path/Frameworks”。

                          在尝试重建自定义框架并重新附加到应用程序目标、清除派生数据文件夹和其他一些建议之后,最终对我有用的是更改自定义框架项目(不是应用程序目标)的项目目标中的构建设置:“始终嵌入 Swift 标准库”为“是”。应用程序目标的设置似乎无关紧要。我通过重置模拟器并重建来验证这一点。这类似于 Daniele Ceglia 的回答,但我无法添加评论并希望提供更清晰的说明。

                          【讨论】:

                            【解决方案17】:

                            哦,是的。我遇到了这个问题,花了几个小时来解决这个问题。 您可以尝试在 Build Settings > Build Options 下将“Always Embed Swift Standard Libraries”设置为“Yes”

                            (之后别忘了 shift+cmd+K 你的项目)

                            【讨论】:

                            • 谢谢,“(之后别忘了 shift+cmd+K 你的项目)”建议对我有用 :)
                            【解决方案18】:

                            为我清理项目解决问题!

                            【讨论】:

                              【解决方案19】:

                              当使用与当前使用的版本不同的 Swift 版本构建的框架时,也会出现此错误消息,例如如果你升级 Xcode。

                              【讨论】:

                              • 我尝试了所有讨论的所有可能场景,但似乎没有任何效果,我很肯定我使用的框架是基于不同的 Swift 版本构建的,但我不确定是否是问题所在。我会尝试为更新版本的 Swift 重新构建框架,并将在此处分享状态。
                              • 我认为对我来说就是这种情况 - 使用 Xcode 9.2 和使用需要 Xcode 9.3 的 Swift 4.1 的框架。
                              【解决方案20】:

                              在框架目标(不是应用目标)中,转到构建设置 > 构建选项 > 始终将标准 Swift 库嵌入到 YES。

                              这解决了我的问题!

                              【讨论】:

                              • 对我有用,但是在将 Always Embed Standard Swift Libraries 设置为 YES 之后。需要干净的构建(shift+cmd+K)。
                              【解决方案21】:

                              我也遇到过这样的问题 所有其他方式都无法帮助我, 所以我以愚蠢的方式做到了 从头开始创建新项目和 pod install 在确认它工作正常后,我复制了所有的类文件和故事板文件,终于完成了! 我认为这是最后的方法,也许可以帮助你

                              【讨论】:

                                【解决方案22】:

                                就我而言,这个问题出现在我使用 Swift 框架 (AirWatch SDK) 的 Objective-c 项目中。

                                解决方案: 我已经用 Xcode 9.3 和 11.0.1 iOS 解决了这个问题,如下所述:

                                1. 将您的 swift 框架拖放到您的项目中,然后移动到您项目的默认框架文件夹中。
                                2. 然后将它们添加为嵌入式二进制文件,如屏幕截图所示。
                                3. 将您的框架状态从必需更改为可选,如屏幕截图所示。 (构建阶段 > 将二进制文件与库链接)

                                1. 在构建设置中将始终嵌入 Swift 标准库设置为

                                2. 设置 Subpath 并选择目标作为 Framework 用于在 Build Phases 中添加的框架> 嵌入框架 如屏幕截图所示。

                                希望对某人有所帮助。

                                【讨论】:

                                • 如果我们将框架设置为可选,那么我们在代码中访问的框架类为零。你有什么解决办法吗?
                                • 请问您是如何获得此 AirWatch SDK 的?我遇到了麻烦。这是我的问题:stackoverflow.com/questions/53023149/…
                                • 谢谢!这是唯一对我有用的解决方案! +1
                                • @akdsouza 很高兴听到:)
                                【解决方案23】:

                                以上解决方案都不适合我。我更改了钥匙串中的 iPhone 开发者证书信任设置。它应该是始终信任。将其更改为使用系统默认值。双击钥匙串中的证书以打开选项屏幕 从this博客发现的

                                【讨论】:

                                • 更改为 Use System Defaults 也为我解决了这个问题。
                                • 我的已经是“使用系统默认值”了,还是不行
                                【解决方案24】:

                                我在一个开始包含 Swift 文件的 Objective-C 项目中遇到了类似的问题。

                                在我的例子中,我在主项目中创建了两个目标,并添加了一个 Swift 空文件,该文件创建了一个桥接头文件和一些配置,但我只将它标记为一个目标的成员。第一个目标工作正常,但第二个没有,我注意到构建设置的差异是这个设置:

                                Runpath 搜索路径 -> $(inherited)@executable_path/Frameworks

                                而且我还需要将 Objective-C Bridging Header 引用到之前创建的文件:

                                Objective-C 桥接头 -> pathTo/Target-Bridging-Header.h

                                添加这两个设置后,第二个目标开始正常工作。

                                【讨论】:

                                  【解决方案25】:

                                  尝试清理构建文件夹,我遇到了同样的问题,我通过以下方式解决了它: 产品 -> 清理构建文件夹

                                  【讨论】:

                                    【解决方案26】:

                                    我在命令行项目(Xcode 10.2 和 macOS 10.14.3)中遇到此错误

                                    解决方案是更新到 macOS 10.14.4

                                    除非您安装 Swift 5 Runtime Support for Command Line Tools 软件包,否则 Swift 命令行项目将无法在 macOS 10.14.3 及更早版本上运行。如果没有那个包,Swift 命令行项目在启动时会崩溃,并出现“dyld: Library not loaded”错误。 (46824656)

                                    来自Swift 5 Release Notes for Xcode 10.2

                                    【讨论】:

                                    • 这为我解决了问题。如果没有 dlyd 错误,甚至无法运行 vanilla 命令行应用程序。
                                    • 这也是我的解决方法。我在操作系统版本为 10.14.3 的全新 Swift 项目(hello world)中遇到了这个错误。升级到 10.14.4 并且可以正常工作。
                                    【解决方案27】:

                                    请检查 *.framework 是否有 _CodeSignature 签名框架目录。 如果没有 _CodeSignature 文件夹, 导航到 Build Phases ,单击 + 添加 New Copy File Phase 以创建 Copy Files。 之后,参考 *.framework 并选择 Code Sign On Copy

                                    【讨论】:

                                      猜你喜欢
                                      • 2016-05-24
                                      • 2017-04-09
                                      • 2020-10-15
                                      • 1970-01-01
                                      • 2018-03-26
                                      • 2020-05-10
                                      • 2018-03-04
                                      相关资源
                                      最近更新 更多