Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 将Swift与OS X首选项窗格插件一起使用_Xcode_Macos_Swift_System Preferences_Nspreferencepane - Fatal编程技术网

Xcode 将Swift与OS X首选项窗格插件一起使用

Xcode 将Swift与OS X首选项窗格插件一起使用,xcode,macos,swift,system-preferences,nspreferencepane,Xcode,Macos,Swift,System Preferences,Nspreferencepane,我想使用Swift为System Preferences应用程序构建一个OS X首选项窗格插件,但我无法让它工作 单击“下一步”后,Xcode模板不提供选择Swift作为语言的选项,而是自动在Objective-C中创建项目 在不添加任何代码或执行任何其他操作的情况下,项目成功构建。如果右键单击产品并选择“在外部编辑器中打开”,系统首选项将成功安装并加载首选项窗格 它真的很管用 很好,但是现在,我想使用Swift添加一个新的Cocoa子类 接受默认值,并允许它创建桥接头 现在,退

我想使用Swift为System Preferences应用程序构建一个OS X首选项窗格插件,但我无法让它工作

单击“下一步”后,Xcode模板不提供选择Swift作为语言的选项,而是自动在Objective-C中创建项目

在不添加任何代码或执行任何其他操作的情况下,项目成功构建。如果右键单击产品并选择“在外部编辑器中打开”,系统首选项将成功安装并加载首选项窗格

它真的很管用

很好,但是现在,我想使用Swift添加一个新的Cocoa子类

接受默认值,并允许它创建桥接头

现在,退出系统首选项,然后在不添加任何代码的情况下重建项目。如前所述,右键单击产品并“在外部编辑器中打开”

系统首选项将确认替换首选项窗格,并将安装它,但随后无法加载

如果在Finder中显示内置产品,除了.prefPane插件外,还有一个.swiftmodule文件夹

我猜在构建阶段或构建设置中缺少了一些东西,这些东西负责将.swiftmodule与包的其余部分合并,但还没有找到答案

添加一些使用新类的代码后,需要导入 Swift项目伞形标题(“Prax Swift.h”)用于使项目编译,但导入伞形标题并不能解决此问题

//  Prax.h

#import <PreferencePanes/PreferencePanes.h>
#import "Prax-Swift.h"

@interface Prax : NSPreferencePane

@property PraxObject *ourPrax;

- (void)mainViewDidLoad;

@end

对不起,如果我在这个问题中使用了太多的图片;这似乎是解释这个问题并使其易于复制的最清晰的方式。可能有一个简单的解决方案。有什么想法吗?

首先,您需要启用“嵌入式内容包含Swift”设置,以便Xcode将必要的Swift库复制到捆绑包中

然后,您会得到以下错误:

System Preferences[68872]: dlopen_preflight failed with dlopen_preflight(/.../preftest.prefPane/Contents/MacOS/preftest): Library not loaded: @rpath/libswiftAppKit.dylib Referenced from: /.../preftest.prefPane/Contents/MacOS/preftest Reason: image not found for /.../preftest.prefPane 系统首选项[68872]:dlopen_预飞失败,原因是 dlopen_飞行前(/…/preftest.preftpane/Contents/MacOS/preftest): 未加载库:@rpath/libswittappkit.dylib 引用自:/…/preftest.preftpane/Contents/MacOS/preftest 原因:找不到/../preftest.prefPane的图像 这意味着应用程序不知道从何处加载包含的Swift库

要解决此问题,请将
@loader\u path/./Frameworks
添加到构建设置中的运行路径搜索路径,告诉它Swift库位于prefpane的Frameworks目录中:


有关动态加载的更多信息,请参阅。

macOS High Sierra引入了一个Apple bug。这个错误现在在macOS的最新dot版本中得到了解决。有关工作示例项目,请参阅。

您看过Console应用程序了吗?您可能会在控制台中找到错误消息。不,控制台中不会显示错误消息。有系统首选项活动消息,反映了“全部显示”和其他已访问的首选项窗格,但与它未能加载的窗格无关。我不希望它能提供很多关于这个问题的线索,因为这似乎是因为Xcode没有正确构建插件包。这是否也需要添加一个复制文件阶段,以便Swift库位于框架目录中?酷!我所要做的就是打开“嵌入式内容包含Swift代码”的开关。运行时搜索路径已经存在,我不必添加复制文件阶段。谢谢你,班德斯!这对Swift 4和macOS High Sierra仍然有效吗?@jtbandes我正在用Swift开发一个屏幕保护程序。它们也被安装到系统首选项中,苹果似乎在High Sierra中改变了它们的加载方式。请参阅和@jtbandes我刚刚在Xcode 9.1中用Swift 4创建了一个虚拟首选项窗格,当在高分辨率环境下使用时,它实际上会像屏幕保护程序一样崩溃。希望看到s.o.验证我的发现。这是我的示例窗格:现在将创建雷达。这似乎不再起作用。使用macOS 10.5.2和Xcode 11.3.1。它只是在加载pref窗格时显示一个错误。(无法加载QlaasSwiftPreferencesPane首选项窗格。)设置始终嵌入Swift标准库解决了此错误。 System Preferences[68872]: dlopen_preflight failed with dlopen_preflight(/.../preftest.prefPane/Contents/MacOS/preftest): Library not loaded: @rpath/libswiftAppKit.dylib Referenced from: /.../preftest.prefPane/Contents/MacOS/preftest Reason: image not found for /.../preftest.prefPane