Risolve il problema di "una risorsa sigillata mancante o non valida"

5

Ho modificato l'icona dell'applicazione del mio editor di Eclipse e questo fa apparire una finestra di conferma che mi chiede se autorizzo il programma ad accettare le connessioni di rete in entrata. L'ho affrontato prima, ma poi, in qualche modo, mi sono liberato di esso. Ora non posso più.

Ecco l'output dell'utilità codesign :

$ codesign -vv /Applications/Indigo/Eclipse.app/
/Applications/Indigo/Eclipse.app/: a sealed resource is missing or invalid
/Applications/Indigo/Eclipse.app/Contents/Resources/Eclipse.icns.bak: resource missing

Qualcuno sa come posso totalmente disinstallare Eclipse in modo che il sistema operativo si dimentichi di quel file "Eclipse.icns.bak"?

Grazie!

    
posta Ionuț G. Stan 22.07.2011 - 21:18
fonte

2 risposte

1

Ok, sono riuscito a farlo. È sporco ma abbastanza sicuro finora.

Il database contenente tali informazioni si trova in /var/db/DetachedSignatures . Questo è un database SQLite, quindi può essere facilmente modificato usando lo strumento sqlite3 integrato. Ecco una sessione di esempio che elimina le voci che corrispondono alla parola chiave "eclipse":

# we're using sudo, so be careful
$ sudo sqlite /var/db/DetachedSignatures

# what tables does it contain?
sqlite> .tables
code global

# what are the column definitions in code?
sqlite> .schema code
CREATE TABLE code ( 
        id integer primary key on conflict replace autoincrement not null, 
        global integer null references global (id), 
        identifier text not null, 
        architecture integer, 
        identification blob not null unique on conflict replace, 
        signature blob not null, 
        created text default current_timestamp 
    );
CREATE INDEX architecture_index on code (architecture);
CREATE INDEX id_index on code (identification);
CREATE INDEX identifier_index on code (identifier);


# what are the column definitions in global?
sqlite> .schema global
CREATE TABLE global ( 
        id integer primary key on conflict replace autoincrement not null, 
        sign_location text not null, 
        signature blob null 
    );
CREATE INDEX location_index on global (sign_location);

Ciò che ci interessa sono code.identifier e global.sign_location .

sqlite> SELECT * FROM code WHERE identifier LIKE "%eclipse%";
sqlite> SELECT * FROM global WHERE sign_location LIKE "%eclipse%";

Dai un'occhiata e crea un backup prima di eliminare tutte le voci corrispondenti da entrambe le query.

sqlite> DELETE FROM code WHERE identifier LIKE "%eclipse%";
sqlite> DELETE FROM global WHERE sign_location LIKE "%eclipse%";

Ho anche riavviato il mio laptop, anche se non so se sia davvero necessario.

Questo è tutto!

    
risposta data 23.07.2011 - 00:02
fonte
0

Un'altra soluzione alternativa sarebbe sostituire la firma del codice non valida con una nuova:

sudo codesign --force --sign - /Applications/SomeApp.app
    
risposta data 26.04.2012 - 12:19
fonte

Leggi altre domande sui tag