2012-11-15 3 views
10

Ho setacciato la rete e Apple mi ha aiutato per una sorta di guida su questo e in arrivo. Mi chiedo se qualcuno si è imbattuto in una situazione simile, o potrebbe avere qualche idea di ciò che è (o non) sta accadendo.Impossibile ottenere il segnalibro con ambito applicazione per il file - sandbox OS X

Sto cercando di ottenere un segnalibro con ambito applicazione per un file da richiamare in una sessione successiva dall'applicazione. Posso confermare che il percorso stesso viene correttamente aggiunto alla sandbox dopo essere stato selezionato dall'utente, perché posso aprirlo (e riaprirlo) durante la sessione quando viene selezionato.

Tuttavia, il tentativo di ottenere un segnalibro con ambito di sicurezza per accedervi in ​​seguito non funziona.

Ecco quello che sto facendo:

NSURL *url = [[NSURL alloc] initFileURLWithPath:path]; 
NSError *error = nil; 
NSData *bookmarkData = [url 
      bookmarkDataWithOptions:(1UL << 11) //NSURLBookmarkCreationWithSecurityScope 
      includingResourceValuesForKeys:nil 
      relativeToURL:nil 
      error:&error]; 
[url release]; 

ho provato sia con url generato dalla stringa path così come solo provandola con, per esempio, il risultato della NSSavePanel del URL. (La stringa path è, per motivi di eredità, quella che mi piacerebbe essere in grado di utilizzare.)

Sto dover utilizzare il valore per bookmarkDataWithOptions invece della costante perché, per motivi di qualche altro codice legacy , Sono costretto a compilare con l'SDK 10.6 dove NSURLBookmarkCreationWithSecurityScope non è disponibile.

Posso confermare che il percorso punta al file in questione come "/Users/me/Documents/document.ext" e che NSURL sembra inizializzare correttamente (o almeno riflette lo stesso percorso).

L'applicazione include il diritto com.apple.security.files.bookmarks.app-scope.

In ogni caso, questo non funziona. Che i risultati di codice sia in un bookmarkData di 0x0 ed un error di 0x0, e la console mostra: ScopedBookmarkAgent: Failed to retrieve app-scope key, aborting.

se cambio relativeToURL essere url invece di nil e modificare il diritto alle com.apple.security.files.bookmarks.document-scope, allora sembra funzionare correttamente - che è, bookmarkData almeno ottiene un valore diverso da zero e non viene registrato alcun errore. Ma sono abbastanza sicuro che non è quello che voglio (vale a dire, un segnalibro di portata del documento).

C'è qualcosa di ovvio che sto sbagliando?

risposta

9

Alla mia vergogna eterna, è stata colpa mia.

In qualche modo spostando il progetto su una macchina diversa per il test e il debug, la firma del codice per la build di sviluppo è stata disattivata.

Apparentemente questo causa il fallimento (quasi) silenzioso, senza codice di errore e solo un messaggio criptico nella console e nessun'altra indicazione che qualcos'altro non funzioni correttamente.

Lasciando questo qui nel caso in cui qualcun altro erroneamente fa la stessa cosa.

+0

Bene, posso confermare che una build non firmata provoca questo. Per chiunque stia inciampando qui, stavo eseguendo il debug di Open Source [Mac Linux USB Loader] (https://github.com/SevenBits/Mac-Linux-USB-Loader), e questo ha risolto il mio problema. – Bigood