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

时间:2018-10-18 07:02:39

标签: swift macos macos-mojave

我制作了±个第三方应用程序的插件。该插件的一部分是用Swift编写的。由于this issue,该插件卡在Xcode 7.3.1 / Swift 2.2上。

该插件在Mojave上不再起作用。

我们有以下观察结果:

  • 问题仅限于Mojave,所有功能均可在旧版macOS上正常运行。
  • 如果第三方应用程序要求“加载此捆绑包”的插件,则只会显示nil。
  • 完全不调用插件的init方法。
  • 如果我从插件的代码库中完全删除了Swift 2.2(使其无法使用),则说明其捆绑包已正确加载。

有什么想法可能导致此问题以及如何解决此问题?

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

1 个答案:

答案 0 :(得分:0)

我设法使该插件在Mojave上运行。

通过调用NSBundle的PrincipalClass返回nil。 根据我对官方documentation的理解,有两种方法确定PrincipalClass。

  • 主体类名称是在info.plist文件中手动指定的。由于该插件未在此处指定,因此此步骤不适用。
  • 主体类是链接时ld命令行上列出的第一个类。由于High Siera和Mojave都使用了完全相同的插件二进制文件,因此“ ld命令行上列出的第一个插件”是相同的,因此返回的主体类在两个版本上应该相同。

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

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