2014-10-10 6 views
6

Sto cercando una semplice applicazione di esempio su XPCServices, in cui sto seguendo i passaggi qui sotto:XPCService non ottenere lanciato da app

Fase 1: Creato un progetto di esempio e un obiettivo aggiunto - XPCServices con il nome - HelperProcess a esso. Quando viene creato il target XCode genera automaticamente sotto file:

  1. HelperProcessProtocol.h
  2. HelperProcess.h
  3. HelperProcess.m
  4. main.m

Fase 2: Inmain.m aggiunto una dichiarazione di registro all'interno dell'implementazione di ServiceDelegate:

- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection { 
    // This method is where the NSXPCListener configures, accepts, and resumes a new incoming NSXPCConnection. 
    NSLog(@"Log which is never displayed :("); 
    // Configure the connection. 
    // First, set the interface that the exported object implements. 
    newConnection.exportedInterface = [NSXPCInterface interfaceWithProtocol:@protocol(HelperProcessProtocol)]; 

    // Next, set the object that the connection exports. All messages sent on the connection to this service will be sent to the exported object to handle. The connection retains the exported object. 
    HelperProcess *exportedObject = [HelperProcess new]; 
    newConnection.exportedObject = exportedObject; 

    // Resuming the connection allows the system to deliver more incoming messages. 
    [newConnection resume]; 

    // Returning YES from this method tells the system that you have accepted this connection. If you want to reject the connection for some reason, call -invalidate on the connection and return NO. 
    return YES; 
} 

Fase 3: In AppDelegate aggiunto sottostante Codice in applicationDidFinishLaunching:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    // Insert code here to initialize your application 

    _connectionToService = [[NSXPCConnection alloc] initWithServiceName:@"HelperProcess"]; 
    _connectionToService.remoteObjectInterface = [NSXPCInterface interfaceWithProtocol:@protocol(HelperProcessProtocol)]; 
    [_connectionToService resume]; 
} 

Il problema è -

Quando lancio l'applicazione, né il registro aggiunto in ascoltatore: shouldAcceptNewConnection : viene visualizzato, né il processo helper viene visualizzato in Monitoraggio attività :(

Ecco il codice: XPCShootOut

Nota: sto cercando questo su XCode 6.0

C'è alcuna configurazione aggiuntiva, che devo fare per farlo funzionare? Si prega di suggerire.

- Aggiornamento -

ho cercato di fare riferimento questo campione dalla mela: AppSandboxLoginItemXPCDemo

Quando ho provato a farlo funzionare su XCode 6, è visualizzato il messaggio di errore - 'No identità firma trovato' . Poiché non ho un account sviluppatore Mac registrato, nelle impostazioni di build per - iDecide e iDecideHelper ho cambiato "Identificazione firma codice" come "Non firmare il codice".

ho avuto un avvertimento per ciascuno degli obiettivi:

Code Sign warning: CODE_SIGN_ENTITLEMENTS specified without specifying CODE_SIGN_IDENTITY. It is not possible to add entitlements to a binary without signing it. 

Questa volta, quando ho compilato la costruzione, ha funzionato come previsto.

Ora ho provato a seguire i passaggi specificati nel suo Leggimi.file txt, specificamente ho eseguito questi passaggi nel mio campione app:

Fase 1: Aggiornato - principale App target - Tab> Funzionalità

  1. Acceso 'App Sandbox'
  2. Acceso 'App gruppi
  3. Aggiunto un gruppo di app - 'XYZ'

Fase 2: aggiornato - Helper target -> Ca Tab pabilities

  1. Acceso
  2. abilitato 'connessioni in uscita (clienti)' 'App Sandbox'
  3. Acceso 'App Gruppi'
  4. Aggiunto un gruppo di app - 'XYZ'

Passaggio 3: Aggiornato - Helper Target -> Scheda Generale -> Identificatore pacchetto, aggiunto prefisso 'XYZ' ad esso.

Sul esecuzione l'applicazione in console è visualizzato questi messaggi:

10/12/14 6:27:42.159 PM xpcd[554]: (null): Code identity[pid: 11875::Devarshi-Kulshreshtha.XPCShootOut (/Users/devarshi/Library/Developer/Xcode/DerivedData/XPCShootOut-aaedwraccpinnndivoaqkujcmhmj/Build/Products/Debug/XPCShootOut.app)] is not in ACL for container: ~/Library/Containers/Devarshi-Kulshreshtha.XPCShootOut/Data -- allowing access. 

10/12/14 6:27:43.712 PM appleeventsd[63]: <rdar://problem/11489077> A sandboxed application with pid 11875, "XPCShootOut" checked in with appleeventsd, but its code signature could not be validated (either because it was corrupt, or could not be read by appleeventsd) and so it cannot receive AppleEvents targeted by name, bundle id, or signature. Error=ERROR: #100013 { "NSDescription"="SecCodeCopySigningInformation() returned 100013, -." } (handleMessage()/appleEventsD.cp #2072) client-reqs-q 

Né app svolto la sua funzione prevista né è visualizzato il messaggio di log aggiunto listener:shouldAcceptNewConnection: delegato.

Sono senza tracce. Ti suggerisco gentilmente se mi manca qualcosa? È possibile che l'app di esempio del servizio XPC funzioni senza un account sviluppatore mac registrato?

+0

È strano ma per me ha funzionato all'improvviso quando ho cambiato l'identificatore del pacchetto da "XYZ" a com. . Anno2001

+0

che è davvero bizzarro Sorry ma ci provo, grazie amico :) Se ha funzionato puoi postarlo come risposta, lo contrassegnerò come risposta accettata una volta verificato :) – Devarshi

+0

@ Anno2001 per alcuni motivi non funziona ancora :(puoi condividere il codice che ha funzionato per te? – Devarshi

risposta

-1

Non penso che sia possibile avviare i servizi XPC senza averli firmati.

Anche per il test e il debug l'infrastruttura di creazione del segno di codice deve essere configurata.

Penso che il certificato per sviluppatori Mac sia gratuito non è necessario un account a pagamento per questo.

Problemi correlati