dyld: 库未加载。原因:找不到合适的映像。

15
我看过这里的一堆答案,但没有一个能解决我的问题。
我有一个 Xcode 工作区,其中包括一个自定义框架和一个 iOS 应用程序项目。这个项目之前一直很好用,但今天早上突然构建后立即崩溃:
dyld: Library not loaded: @rpath/ONCKit.framework/ONCKit
  Referenced from: /private/var/mobile/Containers/Bundle/Application/4DF67A3F-6255-4276-8812-8C742A363995/atero_t.app/atero_t
  Reason: no suitable image found.  Did find:
    /private/var/mobile/Containers/Bundle/Application/4DF67A3F-6255-4276-8812-8C742A363995/atero_t.app/Frameworks/ONCKit.framework/ONCKit: mmap() error 1 at address=0x100118000, size=0x000B8000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/4DF67A3F-6255-4276-8812-8C742A363995/atero_t.app/Frameworks/ONCKit.framework/ONCKit
    /private/var/mobile/Containers/Bundle/Application/4DF67A3F-6255-4276-8812-8C742A363995/atero_t.app/Frameworks/ONCKit.framework/ONCKit: mmap() error 1 at address=0x100280000, size=0x000B8000 segment=__TEXT in Segment::map() mapping /private/var/mobile/Containers/Bundle/Application/4DF67A3F-6255-4276-8812-8C742A363995/atero_t.app/Frameworks/ONCKit.framework/ONCKit

我整天都在尝试构建设置,但我完全迷失了。

8个回答

13
如果有需要帮助的人,我想提供一点经验。我在网上找到了很多解决方案,但它们都对我不起作用。我为此烦恼了两天,尝试了各种方法,例如:撤销公司证书、新建配置文件、将文件添加到嵌入式中等。
直到我注意到在钥匙串访问中,我的苹果WWDR和iOS分发证书被设置为“始终信任”,而不是“使用系统默认值”,才明白其中的问题所在。将我的证书切换回“使用系统默认值”,一切都恢复正常了。我不知道为什么这样做可以解决问题,但它确实起了作用。

5
我其实不相信这个。这也是我的问题。当我在装有 Xcode 设备上本地运行时,一切都很好,但是当我启动从 Jenkins 构建作业生成的 IPA 时,由于证书的信任设置配置方式不同而失败了。这个错误并没有明确表明它与证书有任何关系。你帮我省去了几天的苦恼。 - Fergal Rooney
2
这真的解决了我的问题。我简直无法相信这可能是Keychain中如此误导属性的原因! - wilson100

12

今天我遇到了这个问题,并且以同样的方式解决了它。撤销和重新生成代码签名可以解决此问题。但是为了阐明其“原因”的部分。

苹果公司已经更改了证书内容。更准确地说,它在“主题”下添加了一个新的“OU”(组织单位)字段。通过撤销和重新生成代码签名,它添加了缺失的字段,问题就消失了。


这个OU字段是添加在哪个部分?是在颁发者还是主题中?你能指出来吗? - bikram990
修改了答案以提高清晰度。OU 是可以在主题部分下找到的组织单位。 - BlitzHiryu

12

原来Xcode会缓存一些与设备相关的内容,如果你在多个设备上运行应用程序可能会混淆。简单的解决方法是删除Xcode缓存。以下命令将为您清理它:

结果为:

事实证明,Xcode会缓存一些与设备有关的信息,如果您在多个设备上运行应用程序,则可能会混淆。简单的解决方法是删除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
四年后,这篇精彩的帖子解决了我的问题。感谢@Tarik。 - SaxDaddy
如果解决方案对用户有帮助,那就太棒了。 - Tarik

1

只需更改代码签名配置文件即可解决问题。进入Target,然后在General->Signing->Team中选择不同的选项。


0

清理 Xcode 的派生数据

启动 Finder > 前往 > 转到文件夹 > 粘贴下面的行

~/Library/Developer/Xcode/DerivedData

现在重新启动Xcode。


0
我的问题通过在 Podfile 中移除 "use_frameworks!" 并替换为 "use_modular_headers!" 并在终端中执行 pod update 和 pod install 来解决。
希望这能像对我一样在这个问题上挣扎了一个星期后帮到你。

0

只是为了其他和我一样最近遇到这个问题并且想知道在哪里以及如何撤销哪个代码签名实体的人提供一些建议(在“偏好设置”>“帐户”中):

对我来说,早上一切都正常运行。我在别处看到关于重启的信息。所以,在进行另一个冗长的签名-标识-配置文件会话之前,我只是重新启动了我的机器。结果显然很好,不需要进一步的努力。

Swift,Xcode 7.3,OS X 10.11.4。


0

嗯,在我的情况下,我正在使用CocoaPods,并从Pod文件中更改:

target 'CoreMotionExample' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!

# Pods for CoreMotionExample
pod 'Firebase/Analytics'

target 'CoreMotionExample' do
# Comment the next line if you don't want to use dynamic frameworks
# use_frameworks!

# Pods for CoreMotionExample
pod 'Firebase/Analytics'

然后事情开始工作了...我不知道为什么


1
你是否使用免费的开发者账户进行签名?自iOS 13.3.1以来,外部框架不支持免费账户,这可能是为什么切换到静态库可以解决问题的原因。 - Breiby

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接