AudioComponentGetIcon недоступен на Catalyst (iOS на macOS портирование) - PullRequest
0 голосов
/ 27 января 2020

Я бы хотел портировать приложение iOS на macOS, используя Catalyst. Приложение является аудио-хостом для плагинов AUv3.

Проблема в том, что я не могу получить значок плагина с помощью API AudioComponentGetIcon, поскольку он недоступен в 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];
        }        
    }

1 Ответ

0 голосов
/ 30 января 2020

Официальный ответ Apple: AudioComponentGetIcon поддерживался только на iOS для Inter-App Audio, но не для расширений аудиоустройства. Поскольку Inter-App Audio теперь устарела на iOS, эта функциональность недоступна в Catalyst, включая AudioComponentGetIcon. Так что, да, в приложении Ma c 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
...