2012-10-18 13 views
8

Ho un semplice strumento Unix creato da me che avvia l'applicazione principale del cacao da una shell.Come sandbox uno strumento da riga di comando?

ho bisogno di sandbox, ma quando l'eseguo, si blocca con l'errore "Illegal instruction: 4", il console.app posso vedere il seguente messaggio di errore

creazione Sandbox non riuscita: inizializzazione dell'oggetto Container non riuscito: NIL oggetto informazioni contenitore senza descrizione errore per visdiff

Il file è firmato correttamente con il codice.

ho letto il post Mac OS app, sandbox with command line tool? ma non aiuta

+0

Forse sono necessarie ulteriori informazioni. In che modo il tuo strumento è confezionato con la tua app? Come si esegue lo strumento "da una shell" (codice, per favore). Cosa non ha aiutato l'altra domanda che hai citato (dove hai incontrato problemi)? –

+0

Hai usato l'argomento --entitlements durante il codesign? – Marius

risposta

5

Stavo avendo questo problema esatto, e andò via quando ho aggiunto un Info.plist incorporato.

Prova queste bandiere Clang (ammesso che abbiate info.plist nella directory di compilazione):

-Xlinker -sectcreate -Xlinker __TEXT -Xlinker __info_plist -Xlinker info.plist

+1

Wow. Hai salvato il giorno. Vorrei donare tutti i miei punti SO a te in questo momento se potessi. GRAZIE!!! – Lizza

+0

Prego :) –

+0

quali informazioni sono state aggiunte in Info.plist incorporato? Credo che questo plist sia per il file unix – Swati

4

è l'applicazione di console lanciata direttamente da console o si chiama da un'applicazione principale sandbox? Ho ricevuto un errore simile quando si cerca di sandbox alcuni binari e sono stato solo in grado di farlo funzionare utilizzando esclusivamente quei diritti di seguito:

<dict>                                          
    <key>com.apple.security.app-sandbox</key>                                 
    <true/>                                          
    <key>com.apple.security.inherit</key>                                  
    <true/>                                          
</dict> 

Naturalmente, dopo che è possibile chiamare solo il binario da un processo padre che è già in modalità sandbox (è per questo che ho chiesto come è stato chiamato il tuo binario :)).

+0

No, il mio strumento da riga di comando è chiamato da shell unix, è totalmente indipendente dall'app principale sandboxed – dafi

0

sembra se si firma un eseguibile con com.apple.security.inherit può essere chiamato solo da un altro applicazione che è già in modalità sandbox. Quindi non è più possibile richiamarlo da cmdline dopo aver eseguito il codesign.

+0

Sì, questo problema mi ha colpito non appena avevo firmato i miei eseguibili helper con quella minima com.apple.security.app-sandbox + com.apple.security.inherit plist. C'è una soluzione? Oppure ho bisogno di aggiungere titolarità "reali" per ogni eseguibile dell'helper come se fosse un'app genitoriale, ad es. com.apple.security.network.client? Sono preoccupato per le autorizzazioni del file system perché i miei aiutanti potrebbero aver bisogno di un accesso abbastanza ampio, lontano dai confini della cartella home. – user1475135

Problemi correlati