5 votos

Arreglando advertencia "un recurso sellado está ausente o es inválido"

He cambiado el icono de la aplicación de mi editor Eclipse, y esto hace que aparezca un cuadro de diálogo de confirmación preguntándome si permito que el programa acepte conexiones de red entrantes. Me enfrenté a esto antes, pero luego, de alguna manera me deshice de él. Ahora ya no puedo.

Aquí está la salida de la utilidad 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

¿Alguien sabe cómo puedo desinstalar completamente Eclipse para que el sistema operativo olvide ese archivo "Eclipse.icns.bak"?

¡Gracias!

1voto

flamingLogos Puntos 3637

Ok, logré hacerlo. Es un poco sucio pero hasta ahora bastante seguro.

La base de datos que contiene esa información se encuentra en /var/db/DetachedSignatures. Se trata de una base de datos SQLite, por lo que se puede modificar fácilmente utilizando la herramienta sqlite3 integrada. Aquí tienes un ejemplo de sesión que elimina las entradas que coinciden con la palabra clave "eclipse":

# estamos utilizando sudo, así que ten cuidado
$ sudo sqlite /var/db/DetachedSignatures

# ¿qué tablas contiene?
sqlite> .tables
code global

# ¿cuáles son las definiciones de las columnas en 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);

# ¿cuáles son las definiciones de las columnas en 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);

Lo que nos interesa son code.identifier y global.sign_location.

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

Echa un vistazo y haz una copia de seguridad antes de borrar todas las entradas que coincidan en ambas consultas.

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

También he reiniciado mi laptop, aunque no sé si realmente es necesario.

¡Eso es todo!

0voto

Otra solución alternativa sería reemplazar la firma de código inválida por una nueva:

sudo codesign --force --sign - /Applications/SomeApp.app

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X