AudioComponentGetIcon在Mac Catalyst上不可用(iOS到macOS移植)

4ngedf3f  于 2023-05-19  发布在  iOS
关注(0)|答案(1)|浏览(129)

我想使用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];
        }        
    }
y3bcpkx1

y3bcpkx11#

苹果官方的回答:AudioComponentGetIcon仅在iOS上支持应用程序间音频,而不支持音频单元扩展。由于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

相关问题