Xcode有时会删除链接库

时间:2019-01-24 15:23:07

标签: xcode linker dependencies ios-frameworks dyld

在Xcode中使用不同的Frameworks时,编译器和链接器有时不会在库中包含该Framework。结果是在启动过程中立即崩溃,并显示以下消息:

dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications
  Referenced from: /var/containers/Bundle/Application/1D41BD68-9B88-4D5D-B7AB-0D1C31979964/App.app/App
  Reason: image not found

我找到了避免这种情况的一种方法。它只是像这样直接在应用程序代码中提到该库的各个部分:

UNNotificationRequest *unr = [UNNotificationRequest alloc];

仅使用#include <UserNotifications/UserNotifications.h>包含来自该框架的文件并不能解决该问题。 @import UserNotifications;

也不

对于不同的ios版本,我已经在不同的xcode版本上使用了不同的库。

以下是另外两个具有更具体用例的问题:

1)CABTMidiCentralViewController used in Storyboard only working if using code reference

2)Switching to Xcode 10 causes `UserNotifications.framekwor dyld: Library not loaded crash` for iOS9

有人知道为什么会这样吗?以及如何避免代码的笨拙部分却仍然链接/嵌入所需的框架?

P.S。

  1. 我已将Always Embed Swift Standard Libraries设置为YES
  2. 我已将Link Frameworks Automatically设置为YES

更新#1

UserNotifications框架的问题:

iOS9和XCode 9-作品

No crash on iOS9 with XCode9

带有XCode 10的iOS9-崩溃

Crash on iOS9 with XCode10

使用模拟器:

iOS9 & XCode 10 Crashh - simulator

使用真实设备:

enter image description here

更新#2

当我将框架从Required更改为Optional时,它没有崩溃,但是推送通知不起作用。

1 个答案:

答案 0 :(得分:0)

UserNotifications.framework是一个系统框架,要使用它,它必须存在于您的应用程序所运行的系统上。它是在最近才添加的,所以我想您会看到在早于框架存在的较旧版本的iOS上运行时,缺少该错误的错误。