我为 ± 第三方应用制作了一个插件。部分插件是用 Swift 编写的。由于 this issue,该插件卡在 Xcode 7.3.1/Swift 2.2。 .
该插件不再适用于 Mojave。
我们有以下观察:
- 该问题仅限于 Mojave,在较旧的 macOS 版本上一切正常。
- 如果第三方应用程序要求“加载此插件包”,它只会返回 nil。
- 根本没有调用插件的 init 方法。
- 如果我从插件的代码库中完全删除 Swift 2.2(使其无法使用),它的包将被正确加载。
任何可能导致此问题的想法以及如何解决它?
PS:要求用户安装更新版本的 Python/PyObjC 是不可行的,也不指望苹果将更新版本的 Python/PyObjC 与 macOS 捆绑在一起(因此插件代码库无法升级到更新的 Swift 版本) .计划将代码从 Swift 迁移到 Objective-C,但不会立即发生(这需要几个月的时间)。
最佳答案
我已经设法让插件在 Mojave 上运行。
nil 是通过调用 NSBundle 的 principalClass 返回的。 以我对官方的了解documentation , principalClass 的确定方式有两种。
- 主体类名是在 info.plist 文件中手动指定的。由于插件未在此处指定,因此不应执行此步骤。
- 主体类是链接时在 ld 命令行中列出的第一个类。由于在 High Siera 和 Mojave 上使用了完全相同的插件二进制文件,“ld 命令行上列出的第一个”是相同的,因此返回的主要类在两个版本上应该相同。
不知何故,principalClass 调用在 High Sierra 和 Mojave 上返回了不同的值。就我个人而言,我看不出有任何理由表明它应该有不同的行为,因为文档没有改变,而且逻辑听起来完全取决于编译插件时发生的事情,而不是运行它时世界环境的情况。
但是,在我将 NSPrincipalClass 项添加到 info.plist 文件后,插件在 Mojave 上成功加载。
关于Swift 2.2 应用程序不再适用于 macOS 10.14 Mojave,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52868629/