原因:找不到合适的图像

时间:2015-09-23 03:07:49

标签: ios iphone xcode dyld

dyld: Library not loaded: @rpath/libswiftCore.dylib
  Referenced from: /var/mobile/Containers/Bundle/Application/3FC2DC5C-A908-42C4-8508-1320E01E0D5B/Stylist.app/Stylist
  Reason: no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/3FC2DC5C-A908-42C4-8508-1320E01E0D5B/testapp.app/Frameworks/libswiftCore.dylib: mmap() errno=1 validating first page of '/private/var/mobile/Containers/Bundle/Application/3FC2DC5C-A908-42C4-8508-1320E01E0D5B/testapp.app/Frameworks/libswiftCore.dylib'
(lldb) 

我在iPhone上构建时遇到此错误。我能够在模拟器上构建。我已经重做了所有的配置文件,但我仍然无法在我的iPhone上构建。我的Xcode就像这样

enter image description here

这是框架问题还是签名问题?这在Xcode 6中没有发生。谢谢。

31 个答案:

答案 0 :(得分:367)

我之前因为意外撤销了我的证书而遇到此问题。然后我所有的快速项目都有这个问题。有两种方法可以解决这个问题:

点击产品 - >清洁(或CMD-Shift-K)

或者通过手动清理Xcode设置文件:

rm -rf "$(getconf DARWIN_USER_CACHE_DIR)/org.llvm.clang/ModuleCache"
rm -rf ~/Library/Developer/Xcode/DerivedData
rm -rf ~/Library/Caches/com.apple.dt.Xcode

我不知道为什么。祝你好运,看看它是否有帮助。

答案 1 :(得分:26)

Xcode->Product->Clean + Xcode Restart

在尝试了许多其他提到的解决方案后,为了我的永恒尴尬,做Xcode-> Product->清理并重新启动Xcode,就可以了。

答案 2 :(得分:25)

我在这个问题上搜索得很久。造成这个问题的原因有几个。

如果你在Objectice C项目中遇到Swift代码/库,你应该尝试解决方法1-2-3

如果您在使用新的Swift项目时遇到此问题,解决方案4将最适合您。

解决方案1 ​​

重启Xcode,然后重启电脑和iPhone

解决方案2

转到项目构建设置并将Embedded Content Contains Swift代码标记设置为YES

解决方案3:

转到项目构建设置并将@executable_path/Frameworks添加到“运行路径搜索路径”选项

解决方案4:

如果以上都不起作用,这应该是。 Apple似乎是AirSign帖子中提到的忍者修补证书

InHouse证书

Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, O=Company Name, C=FR

他们添加了一个名为OU

的新字段
Subject: UID=269J2W3P2L, CN=iPhone Distribution: Company Name, OU=269J2W3P2L, O=Company Name, C=FR

所以你应该重新创建证书和提供

答案 3 :(得分:18)

对我来说,这个问题是由于WWRD证书而出现 - 我的是最新的,但由于某种原因它被设置为'始终信任'而不是'使用系统默认',这显然有所作为。

答案 4 :(得分:15)

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

  

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

答案 5 :(得分:11)

删除DerivedData对我来说很有用。

通过Xcode实现 - >偏好 - >地点 - >单击DerivedData路径后面的箭头,并在Finder中删除整个DerivedData文件夹。

答案 6 :(得分:5)

通过xcodebuild和xcrun PackageApplication在命令行中构建应用程序,使用企业配置文件对应用程序进行签名时,我发生了这种情况。在我们的CI构建服务器上,证书在密钥链中设置为“始终信任”(选择证书 - >获取信息 - >信任 - >“使用系统默认值”可以更改为“始终信任”)。我不得不将其设置回“使用系统默认值”以使其工作。 最初我们将其设置为“始终信任”,以解决在软件更新和证书更新后出现的钥匙串对话框。

答案 7 :(得分:2)

冒着播下更多混乱的风险,我在更新到XC8时遇到了这个问题。

这些建议和任何其他线程都没有解决它。 DID的工作原理是从“Link Binary with Libraries”构建阶段,“Target Dependencies”构建阶段以及“Linked Frameworks and Libraries”常规设置中删除所有内容。

仅供参考,我正在使用Carthage,并已将$(PROJECT_DIR)/Carthage/Build/tvOS添加到FRAMEWORK_SEARCH_PATHS版本设置中,以便找到我的框架。

仅供参考2,这个项目和框架是100%快速的,框架正在构建DEFINES_MODULE = YES

答案 8 :(得分:2)

  1. 从设备中删除应用
  2. 清理项目( CMD + SHift + K
  3. 在设备上构建/运行

答案 9 :(得分:1)

我刚刚通过alt产品菜单

清理了项目和Clean Build Folder

答案 10 :(得分:1)

以下步骤成功完成。

1)在动态库中,安装名称必须是" @ loader_path"

2)在主项目中,Runpath搜索路径必须是" @ loader_path"和" @ loader_path / Frameworks"

3)从钥匙串使用的视图 - >显示过期的证书并删除所有内容。

4)删除了分发证书并重新安装。

5)已下载developer.apple.com/certificationauthority/AppleWWDRCA.cer并已安装。

答案 11 :(得分:1)

引自Technical Q&A QA1886

尝试引用Swift库libswiftCore.dylib时,Swift应用程序崩溃。

问:在我尝试运行Swift语言应用程序时,我的设备控制台中的libswiftCore.dylib加载错误怎么办?

答:要解决此问题,您需要使用代码签名证书对您的应用进行签名,并将主题组织单位(OU)设置为您的团队ID。在iOS 8发布之后创建的所有企业版和标准iOS开发人员证书都在适当的位置使用新的团队ID字段,以允许Swift语言应用程序运行。

通常,此错误会显示在设备的控制台日志中,并显示类似于以下内容之一的消息:     [....] [deny-mmap]映射文件没有团队标识符,也不是平台二进制文件:     /private/var/mobile/Containers/Bundle/Application/5D8FB2F7-1083-4564-94B2-0CB7DC75C9D1/YourAppNameHere.app/Frameworks/libswiftCore.dylib

Dyld Error Message:
  Library not loaded: @rpath/libswiftCore.dylib

Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000001, 0x0000000120021088
Triggered by Thread: 0

Referenced from: /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/TestApp
Reason: no suitable image found. Did find:
/private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib: mmap() error 1 at address=0x1001D8000, size=0x00194000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/C3DCD586-2A40-4C7C-AA2B-64EDAE8339E2/TestApp.app/Frameworks/libswiftCore.dylib
Dyld Version: 353.5

构建存档和打包应用时需要新证书。即使您拥有其中一个新证书,只需重新签署现有的swift应用程序存档也行不通。如果它是使用iOS 8之前的证书构建的,则需要构建另一个存档。

重要提示:如果您需要撤销并设置新的企业分发证书,请谨慎使用。如果您是内部企业开发人员,则需要注意不要撤销用于签署应用程序的分发证书,任何一个企业员工仍然使用该证书作为使用该企业分发证书签名的任何应用程序将立即停止工作。以上仅适用于企业分发证书。对于企业/标准iOS开发人员,可以安​​全地撤销开发证书。

正如AirSign的员工所说,问题源于内部证书主题领域缺少的OU属性。

主题:UID = 269J2W3P2L,CN = iPhone发行:公司名称,OU = 269J2W3P2L,O =公司名称,C = FR

我有一个企业开发证书,创建一个新的解决了这个问题。

答案 12 :(得分:1)

我也遇到过这个问题,但是我在上面和其他几个帖子中都没有尝试过......除了这个。

对我来说,我更改了包标识符,因为我们有一个不同的包ID用于分发与开发。

此规定允许我的硬件,我的团队帐户有效,但它在其他一些框架上引发了上述错误。

原来我需要从手机中完全删除旧版本的应用程序。而不只是以标准方式删除它。

解决方案:

  1. 确保目标手机已连接
  2. 从xcode菜单中单击[Window> Devices]
  3. 在左侧菜单中选择目标设备。
  4. 右侧是设备中的应用程序列表。找到您尝试测试并删除它的应用程序。
  5. 显然,在不同的捆绑ID下,在同一个团队下安装相同的应用程序,如果您不是从头开始,那么有一些框架的参考会变得混乱。

    希望这有助于某人。

答案 13 :(得分:1)

在尝试了@Jieyi Hu之后你仍然可以得到这个问题。可能它似乎是固定的,但如果它再来(可能在xCode 9)。

但是,这种解决方法似乎有效(适用于Cocoapods 1.5.x):

  1. 清理您的项目
  2. 关闭Xcode并删除DerivedData
  3. 在项目中打开Podfile,然后添加:

    ruby_block 'Run Curl API' do block do require 'net/http' require 'uri' require 'json' uri = URI.parse("http://#{server}") request = Net::HTTP::Post.new(uri) request.content_type = "application/json" request.body = JSON.dump({ "customerId" => "#{customerId}", "cloudName" => "#{cloudName}", "vpcId" => "#{vpcId}", }) req_options = { use_ssl: uri.scheme == "https", } response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http| http.request(request) end # response.code # response.body action :run end

  4. pod update

  5. 来源:

    https://github.com/evgenyneu/Cosmos/issues/105

    https://github.com/Skyscanner/SkyFloatingLabelTextField/issues/201#issuecomment-381915911

    谢谢@Cédric

答案 14 :(得分:0)

对于它的价值,我在XCode 9.0.1中遇到了类似的错误。我尝试卸载并重新安装所有证书,但是当我重新安装时,他们似乎记得我以前的信任设置。最终对我有用的(似乎)是关闭“ Apple Worldwide开发人员关系认证中心”证书的“始终信任”设置,然后重新启动。真是个神秘的问题!

答案 15 :(得分:0)

enter image description here

我有一个类似的问题,将详细信息作为第一张图片。

我的解决方案是切换认证始终信任使用系统默认值。 就像: enter image description here enter image description here

答案 16 :(得分:0)

在我的情况下,这是我使用的其中一个吊舱的问题。我最终删除了该pod并将其中的代码手动放入我的项目中。

答案 17 :(得分:0)

这解决了我的错误 -

重新下载WWDR(Apple Worldwide Developer Relations Certification Authority),将“使用系统默认值”设置为选项。

答案 18 :(得分:0)

我在XCode 9中遇到了这个问题。以上都没有解决。这对我来说很有把握:

Project > Build Settings > Swift Compiler - Search Path: Setting "Import Paths"$(PROJECT_DIR)(递归)

答案 19 :(得分:0)

面临同样的问题

  1. 我的开发者证书已过期,因此创建了新的开发人员 证书和下载
  2. 清理并重启xcode这对我有用

答案 20 :(得分:0)

我用这些技巧解决了。

第1步:

转到项目构建设置并将@ executable_path / Frameworks添加到Runpath搜索路径选项

第2步:

转到目标构建设置并将@ executable_path / Frameworks添加到Runpath搜索路径选项和框架搜索路径。

enter image description here

第3步:

重新下载WWDR(Apple Worldwide Developer Relations Certification Authority),将“使用系统默认值”设置为选项。

第4步:

使用终端

删除所有派生数据

rm -rf~ / Library / Developer / Xcode / DerivedData / *

第5步

删除所有证书并将其重新安装到Keychain。我启用了“使用系统默认”选项。

第6步:

重启Xcode。

答案 21 :(得分:0)

我只在模拟器上遇到过这个问题。它似乎与我们的应用程序中的一些无效的权利相关,但是当我们在设备上运行时,问题不会出现。

答案 22 :(得分:0)

在我的情况下,删除Xcode创建并下载的所有认证后。让xcode 8.1管理app的认证,效果很好! 希望这可以帮助别人。

答案 23 :(得分:0)

您需要为项目中{(3}}

链接(直接或间接)的每个动态框架设置证书(只是证书和非配置文件)

答案 24 :(得分:0)

如果您在Xamarin Studio中工作,并且您正在引用一个便携式库,您需要为其执行PCL诱饵和切换技巧,您会看到相同的症状。如果引用项目相对于引用的库已过期,则会发生这种情况。我发现我已经将我的公共库更新为更新的框架,更新了我的软件包,但没有更新我的iOS软件包以匹配。更新包为我解决了这个错误。

答案 25 :(得分:0)

在我的情况下,钥匙串显示证书是不可信的,为了解决这个问题,我已经将证书的信任选项设置为"始终信任"。将证书设置为"始终信任"是崩溃的主要原因。我无法将应用程序安装到设备中。通过将信任选项设置为"系统默认值"解决了这个问题。而不是"始终信任"它对我有用。

答案 26 :(得分:0)

我遇到了同样的问题,可以通过重新下载NULL来解决问题。从here下载:

并在钥匙串中设置为始终信任。更改为 WWDR (Apple Worldwide Developer Relations Certification Authority)

它适合我,我希望这能帮到你

答案 27 :(得分:0)

我最近遇到了这个问题。我尝试了所有可能的解决方案,但没有任最后我退出了Xcode,删除了钥匙串中的证书并安装了所有新鲜的并重新启动了mac。幸运的是它像魅力一样工作:)

答案 28 :(得分:0)

你可能没有在那个lib中使用正确的拱门,你可以做一个

file /private/var/mobile/Containers/Bundle/Application/3FC2DC5C-A908-42C4-8508-1320E01E0D5B/testapp.app/Frameworks/libswiftCore.dylib

并且它应该显示该库中的arch ...我不确定你是如何链接的,但它可能不是正确的方法(如果libswiftcore是一个工厂库,如果它是一些添加的库然后它可能没有正确编译)

答案 29 :(得分:0)

我通过检查我的本地钥匙串来解决问题。请登录login.keychain有正确的证书

答案 30 :(得分:0)

您可以重新生成证书并重新启动iPhone。

这项工作对我来说,我希望这能帮到你。