2012-03-16 15 views
12

Estoy trabajando en una aplicación de cacao que se puso en marcha/activará mediante URL con un esquema personalizado que está registrado en el archivo Info.plist así:Cuando una aplicación OS X se inicia mediante un esquema de URL registrado, ¿cómo se accede a la URL completa?

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

Mi pregunta es, una vez que se lanza la aplicación o activado, ¿cómo puedo saber cuál fue la URL que lanzó la aplicación? En iOS, esto es fácil con el método -application: openURL: sourceApplication: annotation: en el UIApplicationDelegate, ya que se pasa una instancia de NSURL.

Quiero ser capaz de pasar los datos en mi aplicación con las URL como myscheme: // hacer algo// impresionante

Respuesta

21

En la aplicación del delegado -applicationWillFinishLaunching:, hacer:

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

Y handleAppleEvent:withReplyEvent: debería ser algo como:

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

lo que se keyDirectObject y donde se define? No entiendo cuál es el valor de keyDirectObject. Gracias. – Joel

+1

Para aquellos que se preguntan como yo, "¿Cómo se compila keyDirectObject sin error de sintaxis para un símbolo que falta?", Se define en AE/AppleEvents.h como un caso enum. De alguna manera, AE/AppleEvents.h se incluye en tu aplicación incluso si no la incluyes directamente. – Joel

Cuestiones relacionadas