Подтвердить что ты не робот

Когда приложение OS X запускается по зарегистрированной схеме URL-адресов, как вы получаете доступ к полному URL-адресу?

Я работаю над приложением Cocoa, которое запускается/активируется с использованием URL-адресов с пользовательской схемой, которая зарегистрирована в файле Info.plist следующим образом:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>Open myscheme:// URLs</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myscheme</string>
        </array>
    </dict>
</array>

Мой вопрос: после того, как приложение запущено или активировано, как мне узнать, что URL-адрес был запущен в приложении? В iOS это легко с помощью -application: openURL: sourceApplication: annotation: method в UIApplicationDelegate, поскольку ему передается экземпляр NSURL.

Я хочу иметь возможность передавать данные в свое приложение с такими URL-адресами, как myscheme://do/something/awesome

4b9b3361

Ответ 1

В делегате приложения -applicationWillFinishLaunching: выполните:

[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self andSelector:@selector(handleAppleEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];

И handleAppleEvent:withReplyEvent: должен выглядеть примерно так:

- (void)handleAppleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent {
    NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
    // do something with the URL string
}