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。
我们有以下观察:
- 该问题仅限于 Mojave,在较旧的 macOS 版本上一切正常。
- 如果第三方应用程序要求"load this bundle"插件,它只是得到零。
- 根本没有调用插件的init方法。
- 如果我从插件的代码库中完全删除 Swift 2.2(使其无法使用),它的包将被正确加载。
是否知道可能导致此问题的原因以及解决方法?
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 上成功加载。
我为 ± 第三方应用制作了一个插件。部分插件写在Swift。由于this issue.
插件卡在Xcode7.3.1/Swift2.2该插件不再适用于 Mojave。
我们有以下观察:
- 该问题仅限于 Mojave,在较旧的 macOS 版本上一切正常。
- 如果第三方应用程序要求"load this bundle"插件,它只是得到零。
- 根本没有调用插件的init方法。
- 如果我从插件的代码库中完全删除 Swift 2.2(使其无法使用),它的包将被正确加载。
是否知道可能导致此问题的原因以及解决方法?
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 上成功加载。