Swift 2.2 应用程序不再适用于 macOS 10.14 Mojave

Swift 2.2 app no longer works on macOS 10.14 Mojave

我为 ± 第三方应用制作了一个插件。部分插件写在Swift。由于this issue.

插件卡在Xcode7.3.1/Swift2.2

该插件不再适用于 Mojave。

我们有以下观察:

是否知道可能导致此问题的原因以及解决方法?

PS:要求用户安装更新版本的 Python/PyObjC 是不可行的,也不期望 Apple 将更新版本的 Python/PyObjC 与 macOS 捆绑在一起(因此插件代码基础无法升级到较新的 Swift 版本)。计划将代码从 Swift 迁移到 Objective-C,但不会立即发生(这需要几个月的时间)。

我已经在 Mojave 上获得插件 运行。

调用 NSBundle 的 principalClass 返回了 nil。 根据我对官方的理解documentation,principalClass的确定方式有两种

  • 主体 class 名称是在 info.plist 文件中手动指定的。由于插件没有在这里指定,所以这一步应该不适用。
  • 主体 class 是链接时在 ld 命令行中列出的第一个。由于在 High Siera 和 Mojave 上使用了完全相同的插件二进制文件,"the first one listed on the ld command line" 相同,因此返回的主体 class 在两个版本上应该相同。

不知何故,principalClass 调用在 High Sierra 和 Mojave 上返回了不同的值。就我个人而言,我看不出有任何理由表明它应该有不同的行为,因为文档没有改变,而且逻辑听起来完全取决于编译插件时发生的事情,而不是 运行 它的世界上下文。

但是,在我将 NSPrincipalClass 项目添加到 info.plist 文件后,插件在 Mojave 上成功加载。