Wykrywaj sprzętowe prasy słuchawkowe w mac

To pytanie dotyczy kodu z tego pytania:Wykryj naciśnięcia przycisków słuchawek w OS X

Ich odpowiedź była poprawna, jednak nie mogłem uruchomić ich kodu (może to być spowodowane brakiem wiedzy na temat celu-c). Przestrzegałem ich instrukcji i zmodyfikowałem trzy pliki. To właśnie próbowałem (sprawdziłem również dokumentację Apple IOKit i nie mogłem znaleźć żadnej dokumentacji przycisku sprzętu słuchawkowego):

AwesomeClass.h

#import <Cocoa/Cocoa.h>
#include "KeyboardPaneController.h"

@interface AwesomeClass : KeyboardPaneController
+ (NSArray *) allKeyboards;
- (void) initKeyboardElements: (NSArray *) elements;
- (void) ddhidQueueHasEvents: (DDHidQueue *) hidQueue;
@end

AwesomeClass.m

#import "AwesomeClass.h"
#import "DDHidLib.h"

@implementation AwesomeClass

+ (NSArray *) allKeyboards;
{
    NSArray *array = [DDHidDevice allDevicesMatchingUsagePage: kHIDPage_Consumer
                                                      usageId: kHIDUsage_GD_Pointer
                                                    withClass: self
                                            skipZeroLocations: NO];

    //Only return "Apple Mikey HID Driver", if not found, return nil.
    for (DDHidDevice *device in array) {
        if ([[device productName] isEqualToString:@"Apple Mikey HID Driver"]) {
            return [NSArray arrayWithObject:device];
        }
    }
    return nil;
}

- (void) initKeyboardElements: (NSArray *) elements;
{
    NSEnumerator * e = [elements objectEnumerator];
    DDHidElement * element;
    while (element = [e nextObject])
    {
        unsigned usagePage = [[element usage] usagePage];
        unsigned usageId = [[element usage] usageId];
        if (usagePage == kHIDPage_GenericDesktop)
        {
            if ((usageId >= 0x89) && (usageId <= 0x8D))
            {
                [mKeyElements addObject: element];
            }
        }
        NSArray * subElements = [element elements];
        if (subElements != nil)
            [self initKeyboardElements: subElements];
    }
}

- (void) ddhidQueueHasEvents: (DDHidQueue *) hidQueue;
{
    DDHidEvent * event;
    while ((event = [hidQueue nextEvent]))
    {
        DDHidElement * element = [self elementForCookie: [event elementCookie]];
        unsigned usageId = [[element usage] usageId];
        SInt32 value = [event value];
        if (value == 1)
            [self ddhidKeyboard: self keyDown: usageId];
    }
}
@end

... jak również modyfikowanie jednej linii w KeyboardPaneController.m (co pokazano w instrukcjach). Ze względu na brak dokumentacji w tym środowisku, naprawdę trudno jest znaleźć odpowiedź (plakat był offline od ponad roku, więc zakładam, że prawdopodobnie nie otrzymam odpowiedzi). Kod został przetestowany na lwie, a ja mam lwa górskiego, więc to może być problem.

Wiem, że jest to możliwe do zrealizowania, ponieważ iTunes bardzo reaguje na moje naciśnięcia przycisków na słuchawkach (co jest trochę niuansowe). Chciałbym móc sterować Spotify za pomocą przycisków na słuchawkach, a nie iTunes.

questionAnswers(1)

yourAnswerToTheQuestion