我想使用 Mac Catalyst 将 iOS 应用程序移植到 macOS。 该应用程序是 AUv3 插件的音频主机。
问题是我无法使用 AudioComponentGetIcon API 获取插件图标,因为在 macOS 上不可用。
如何获取插件图标?
while (true) {
comp = AudioComponentFindNext(comp, &rau->_desc);
if (comp == NULL) break;
AudioComponentDescription desc = { 0, 0, 0, 0, 0 };
if (AudioComponentGetDescription(comp, &desc) != noErr) continue;
#if !TARGET_OS_MACCATALYST
rau->_image = AudioComponentGetIcon(comp, 76);
rau->_lastActiveTime = AudioComponentGetLastActiveTime(comp);
#else
#warning CATALYST WHAT I SHOULD DO here?
//rau->_image = AudioComponentGetIcon(comp);
#endif
if (rau->_image == nil) {
rau->_image = [UIImage imageNamed:DEFAULT_AU_IMAGE];
}
}
苹果的官方回答:AudioComponentGetIcon仅在iOS上支持用于应用间音频,而不支持音频单元扩展。由于 Inter-App Audio 现已在 iOS 上弃用,因此该功能在 Catalyst 中不可用,包括 AudioComponentGetIcon。 所以,是的,在Mac Catalyst应用程序中,不可能获得AU图标。 在 macOS 应用(非 Catalyst(中,AudioComponentGetIcon 函数仍然可用,但这并不能为 Catalyst 应用提供解决方案。没有"桥接"机制允许您的 Catalyst 应用程序交叉到 macOS 功能。
我也想出了这个解决方法,但 __comp.icon 和 __comp.iconURL 在 Catalyst 中仍然不可用。
AVAudioUnitComponentManager* av = [AVAudioUnitComponentManager sharedAudioUnitComponentManager];
NSArray<AVAudioUnitComponent *>* comps = [av componentsMatchingDescription:desc];
AVAudioUnitComponent* __comp = [comps objectAtIndex:0];
NSImage *iconIMG = __comp.icon; //not available on Catalyst
NSURL *iconURL = __comp.iconURL; //not available on Catalyst