Я пытаюсь заставить следующий код работать как инструмент командной строки macOS. Важно, чтобы это не было приложение Какао, так что это не вариант.
Этот же код прекрасно работает в том же проекте с целью приложения Cocoa и обнаруживает совместимый контроллер, но при запуске в качестве цели инструмента командной строки ничего не происходит, и API не показывает подключенных контроллеров.
Очевидно, что некоторые из них придуманы ... это просто самое простое, что я мог бы свести к этому и иметь некоторые признаки того, что происходит, когда это действительно работает.
#import <Cocoa/Cocoa.h>
#import <GameController/GameController.h>
int main( int argc, const char * argv[] )
{
@autoreleasepool
{
NSApplication * application = [NSApplication sharedApplication];
NSNotificationCenter * center = [NSNotificationCenter defaultCenter];
[center addObserverForName: GCControllerDidConnectNotification
object: nil
queue: nil
usingBlock: ^(NSNotification * note) {
GCController * controller = note.object;
printf( "ATTACHED: %s\n", controller.vendorName.UTF8String );
}
];
bool shouldKeepRunning = true;
while (shouldKeepRunning)
{
printf( "." );
while (true)
{
NSEvent * event = [application
nextEventMatchingMask: NSEventMaskAny
untilDate: nil
inMode: NSDefaultRunLoopMode
dequeue: YES];
if (event == NULL)
{
break;
}
else
{
[application sendEvent: event];
}
}
usleep( 100 * 1000 );
}
}
return 0;
}
Я предполагаю, что это как-то связано с настройкой приложения Какао или обработкой циклов событий. Или, может быть, есть какой-то внутренний триггер, который инициализирует каркас GameController. Похоже, у API нет явного способа его инициализации.
https://developer.apple.com/documentation/gamecontroller?language=objc
Может кто-нибудь пролить свет на то, как я могу заставить это работать?
В конечном счете, этот код действительно должен работать внутри пакета Core Foundation, поэтому, если он действительно мог бы работать с циклом запуска Core Foundation, это было бы идеально.