2012-03-16 13 views
12

Pracuję nad app kakao, które jest uruchomiona/aktywowana za pomocą adresów URL z programu niestandardowego, który jest zarejestrowany w pliku Info.plist tak:Kiedy uruchamiana jest aplikacja OS X według zarejestrowanego schematu URL, w jaki sposób uzyskujesz dostęp do pełnego adresu URL?

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

Moje pytanie jest, gdy aplikacja jest uruchomiona lub aktywowane, jak mogę powiedzieć, jaki był URL, który uruchomił aplikację? W systemie iOS jest to łatwe dzięki aplikacji -application: openURL: sourceApplication: adnotation: metoda na UIApplicationDelegate, ponieważ jest ona przekazywana do instancji NSURL.

Chcę być w stanie przejść w danych do mojej aplikacji z URL jak myscheme: // zrobić/coś/niesamowite

Odpowiedz

21

w aplikacji delegata -applicationWillFinishLaunching:, zrobić:

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

I handleAppleEvent:withReplyEvent: powinien wyglądać mniej więcej tak:

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

Co to jest keyDirectObject i gdzie jest zdefiniowany? Nie rozumiem, jaka powinna być wartość keyDirectObject. Dzięki. – Joel

+1

Dla tych, którzy zastanawiają się jak ja, "W jaki sposób keyDirectObject kompiluje się bez błędu składni dla brakującego symbolu?", Jest zdefiniowany w AE/AppleEvents.h jako przypadek enum. W jakiś sposób AE/AppleEvents.h dostaje się do twojej aplikacji, nawet jeśli nie umieścisz jej bezpośrednio. – Joel