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

标签 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 是不可行的,也不指望苹果将更新版本的 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/

相关文章:

xcode - NSTabView 在 Interface Builder 中带有重复的按钮?

debugging - macOS Mojave : How to achieve codesign to enable debugging (gdb)?

python - MacPorts- 端口 : command not found?

macos - 无法在 Mac Os Mojave 上停止或重新启动 Apache

swift - 如何使表格 View 单元格中的按钮起作用

ios - 从自动旋转动画中排除 UIView

ios - 快速完成 block

ios - 如何在不按后退按钮的情况下从一个单元格导航到一行中的下一个单元格

c++ - 安装了 Xcode 命令行工具的 Mac OS X 中的 clang-format 和 clang-format.py 在哪里?

macos - 同步两个 NSScrollView