将 AudioKit iOS 应用程序移植到 Catalyst macOS 应用程序时出现编译错误

compilation error when porting AudioKit iOS app to Catalyst macOS app

我有一个 iOS 应用程序,它在 AudioKit 的 iOS 构建中运行良好。我想尝试通过放入 AudioKit.xcframework 来移植到 macOS w Catalyst。这是我做的

  1. 从源代码编译 AudioKit-4.9.5 以生成 AudioKit.xcframework(我之前一直使用来自同一源代码版本的本地编译的 AudioKit iOS 框架,在非 Catalyst 版本上没有问题)
  2. 在 "General" 选项卡中,
    • 选中 Mac 作为部署目标
    • 删除了旧的 AudioKit iOS 框架
    • 已添加AudioKit.xcframework
  3. 在 "Build Settings" 选项卡中,
    • 将"Framework Search Paths"从AudioKitiOS框架的父目录更改为AudioKit.xcframework
    • 的父目录
  4. 在 "Build Phases" 选项卡中,
    • AudioKit.xcframework 出现在 "Link Binary with Libraries"
    • AudioKit.xcframework 出现在 "Embed Frameworks"

我收到以下错误,

目前正在使用 Xcode 11.4.1。

在这里回答我自己的问题,因为这个问题似乎是包含 AudioKit 的 AudioKit 模块的产物 class。将 AudioKit class 重命名为其他名称可解决此问题,但我不鼓励人们这样做,而是等待未来的 AudioKit 版本会这样做。

我遇到了完全相同的问题。我最终编辑了 x86_64-apple-ios-macabi.swiftinterface 文件并手动更正了界面。

我只需要在未解析的标识符中加上前缀 AudioKit.。它看起来更像是 XCFramework 构建配置/swiftinterface 生成器的错误。

我也 运行 在 运行 使用 AKSampler() 时崩溃了。出于某种原因,编译器不理解 .init() 不存在,它应该使用 AKSampler(masterVolume: 1.0, pitchBend: 0.0, ... filterEnvelopeVelocityScaling: 0.0) 原型。使用默认值手动调用修复它。

编辑:您无需显式调用长初始化程序,只需删除以下行:


  @objc override dynamic public init()

来自 @objc open class AKSampler : AKPolyphonicNode, AKComponent { 部分。


总结一下: 编辑 XCFramework/ 中的 x86_64-apple-ios-macabi.swiftinterface AudioKit.outputAudioKit.midi.client 代替未解析的标识符。

如果您使用 AKSampler,请删除以下行:

  @objc override dynamic public init()

来自 @objc open class AKSampler : AKPolyphonicNode, AKComponent { 部分。