2012-03-03 10 views
5

Fin da OS X 10.7.3, il mio editor di testo sta impostando il bit "quarantena" su qualunque file tocchi.Come posso impedire alla mia app di impostare il bit "quarantena"?

Il mio editor di testo è progettato per funzionare con script di shell e se il bit di quarantena è impostato, non è possibile eseguire uno script di shell dalla riga di comando, finché non si fa doppio clic su Finder e si passa a "Questa applicazione è stata scaricata da Internet "(o rimuovere il bit di quarantena con xattr).

Per esempio, ho appena creato uno script "ciao mondo" nella mia app, è stato messo in quarantena, e non può essere eseguita:

$ xattr -l foo 
com.apple.quarantine: 0006;4f51dd2f;Dux; 
$ chmod +x foo 
$ ./foo 
-bash: ./foo: Operation not permitted 

Se rimuovo il bit di quarantena, lo script funziona:

$ xattr -d com.apple.quarantine foo 
$ ./foo 
hello world 


Secondo alcuni post del forum, TextEdit imposta anche il bit di quarantena in qualsiasi script di shell che crea.

che sto utilizzando un semplice NSDocument sottoclasse per creare il file:

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 
{ 
    return [self.textStorage.string dataUsingEncoding:self.stringEncoding]; 
} 


Come posso rimuovere la punta di quarantena da file creati nella mia app? Altri editor di testo, come TextWrangler, non impostano il bit di quarantena.

UPDATE

Un po 'più di informazioni, ciò si verifica solo quando si crea un file "domanda script", che è qualsiasi cosa, da script perl a html.

E si verifica solo quando la mia app è in modalità sandbox. Disabilitare il sandboxing risolve il problema, ma questa non è una soluzione a lungo termine.

Ho archiviato un bug con Radar, sembra che non ci possa essere altro da fare che attendere/sperare che il viale venga risolto.

risposta

0

Per quanto posso dire, questo errore è stato risolto in OS X 10.8 (Mountain Lion).

Sembra che dovrò fare 10.8 la versione minima del sistema operativo per la mia app. Non è un grosso problema per me ... ma spero che Apple lo risolva con una correzione di 10.7 (i requisiti di sistema per 10.8 sono un po 'più alti di 10.7, conosco persone che non possono aggiornare).

+0

Sei sicuro che questo è stato risolto? Sto avendo lo stesso identico problema su 10.8.2 - tutti i file creati dalla mia app vengono messi in quarantena. –

+0

@DennisRitchie se creo un nuovo documento di testo normale in TextEdit e lo salvi sul desktop come "test.rb" il file non viene messo in quarantena. Su OS X 10.7 sarebbe stato messo in quarantena. Forse ci sono altre situazioni in cui può accadere la stessa cosa? Penso che dovresti aprire una nuova domanda separata dalla mia. –

+3

non è stato risolto neanche per me in 10.8. stranamente, l'aggiunta di 'com.apple.security.files.user-selected.executable' alle autorizzazioni risolve il problema per me – user1259710

1

Try garantire che il LSFileQuarantineEnabled nel vostro Info.plist è impostato su false (che dovrebbe essere il default). Se l'attributo è ancora stato impostato, quindi suggerirei di segnalare un bug e la rimozione a livello di codice con removexattr(2)/fremovexattr(2)

+0

Grazie, aggiungendo che l'ingresso ai miei correzioni plist il problema, tuttavia la documentazione afferma chiaramente NO è il default, forse hanno cambiato su YES in 10.7.3. –

+0

In realtà, si scopre questo non sembra funzionare (non so cosa sta succedendo?) Sono sicuro che ho provato, ma ora sto vedendo lo stesso bit di quarantena impostato anche se la mia applicazione ha ancora 'LSFileQuarantineEnabled' impostato 'NO'. –

+0

Segnala un errore e prova a rimuovere manualmente il flag. –

1

Bello sapere che io non sono l'unico ad avere questo problema - che è stato difficile tenere traccia -down informazioni su. Ho trovato questo problema si verifica con i file di dati salvati dal mio programma (questi non sono script, sono solo dati XML ...).

Confermo che LSFileQuarantineEnabled non ha fatto alcuna differenza.

Ho anche provato a rimuovere l'attributo dopo che il file è stato scritto, utilizzando removexattr http://hints.macworld.com/article.php?story=20071029151619619, ma questo non ha funzionato: la sandbox ha impedito il funzionamento della chiamata.

A titolo di fondo, ho trovato anche questo discussione del problema: http://reviews.cnet.com/8301-13727_7-57374676-263/workarounds-for-quarantine-bug-in-os-x-lion/

Per la cronaca, ho sollevato separatamente un bug con Apple.

EDIT: Ho trovato la fonte del problema e ho risolto il problema.

Il problema era che se i dati del file sono semplici dati in formato XML, MacOS visualizza erroneamente il messaggio riportato (penso sia perché presuppone erroneamente che il file sia uno script). Se cambio il formato del file in un'alternativa che chiaramente non è XML, l'avviso scompare. Tuttavia, il file viene ancora salvato con il set di bit di quarantena!

Quindi questo è sicuramente dovuto a un problema in MacOS, ma c'è una soluzione relativamente semplice - basta cambiare il formato del file!

+0

Sembra che sia stato corretto in OS X 10.8 (ho intenzione di rispondere alla mia domanda, ma volevo commentare per essere sicuro di averlo scoperto). Suppongo che dobbiamo solo rendere necessarie le nostre applicazioni in sandbox 10.8. –

+0

Grazie per le informazioni Abhi! – Pete

Problemi correlati