Xcode有时会删除链接库

Xcode有时会删除链接库,xcode,linker,dependencies,ios-frameworks,dyld,Xcode,Linker,Dependencies,Ios Frameworks,Dyld,在Xcode中使用不同的框架时,编译器和链接器有时不将该框架包含在库中。结果是在启动过程中立即崩溃,并显示以下消息: dyld: Library not loaded: /System/Library/Frameworks/UserNotifications.framework/UserNotifications Referenced from: /var/containers/Bundle/Application/1D41BD68-9B88-4D5D-B7AB-0D1C31979964/A

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

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
包含该框架中的文件并不能修复它。
@也不会导入用户通知

我在不同的ios版本的不同xcode版本上看到了不同的库

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

(一)

(二)

有人知道为什么会这样吗?如何避免代码中愚蠢的部分,但仍然链接/嵌入所需的框架?

附笔。
  • 我已将
    始终嵌入Swift标准库
    设置为
  • 我已将
    链接框架自动设置为
  • 更新#1
    UserNotifications
    框架的问题:

    iOS9和XCode 9-工作

    带XCode 10的iOS9-崩溃

    使用模拟器:

    使用真实设备:

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

    UserNotifications.framework是一个系统框架,要使用它,应用程序运行的系统上必须存在它。它是最近才添加的,所以我猜你看到了一个错误,即在框架存在之前的较旧iOS版本上运行时,它丢失了。

    好吧,它发生在具有完全相同行为和修复的不同框架上。我不确定这是什么意思。如果您在iOS<10.0上运行,则UserNotification.framework不存在,因此您的应用程序将在启动时崩溃,并显示此消息。您是否在早于10.0或更高版本的iOS上看到此崩溃?此崩溃发生在使用xcode10构建的ios9上,但在使用xcode9构建的ios9上仍在工作。有些内容您没有共享。iOS 9上不存在UserNotification.framework,因此应用程序无法针对它进行链接并在iOS 9上使用它。现在,有一些替代技术可以让它工作(例如,弱链接框架和返回到替代API),但您没有提到这样做。不共享是什么意思?UserNotifications以某种方式存在于iOS9上,当使用XCode9构建时,为什么构建没有在iOS9上崩溃,并且推送通知正在工作?XCode10中的同一个项目(启用了旧版构建系统)将导致iOS9崩溃(选项设置为
    requred
    )或不崩溃,但推送通知将不起作用(选项设置为
    optional
    。顺便说一句,我已经更新了问题我的建议:共享来自崩溃的完整崩溃日志,以及有关您看到崩溃的iOS版本的信息。您提到的两个构建设置与找不到系统框架的任何运行时崩溃无关。您的iOS开发是什么目标?框架是添加在“链接框架和库”还是“嵌入二进制文件”(在“常规”选项卡中)?“构建阶段”选项卡如何?是否在“链接二进制文件与库”中?在“嵌入框架”中?你是说部署目标?:
    9.3
    是的,它在
    链接的F和L的两个区域中
    否,它不在嵌入式,因为它会像
    UserNotification.framework…在../../../../../../../../Applications/XCode.app..
    那样显示,这不是我们的CI和团队工作的选项