compartir datos entre múltiples procesos usando NSUserDefault

Sep 15 2020

Me gustaría compartir datos entre el proceso compilado de aim-c y la terminal. ambos ejecutados por el mismo usuario.

Desde el código objC escribí un valor en el dominio a.b.c:

NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:@"a.b.c"];
[defaults setObject:@"fffff" forKey:@"bbbbb"];
[defaults synchronize];

Este proceso es, de hecho, un complemento de instalación que se ejecuta desde installer.app y tiene los siguientes derechos (sin sandbox):

codesign -d --entitlements :- /System/Library/CoreServices/Installer.app
-->
Executable=/System/Library/CoreServices/Installer.app/Contents/MacOS/Installer
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.private.tcc.allow-prompting</key>
    <array>
        <string>kTCCServiceAll</string>
    </array>
    <key>com.apple.security.cs.disable-library-validation</key>
    <true/>
</dict>
</plist>

Y esperaba que este valor fuera visible desde la terminal usando defaults read. Pero, desafortunadamente, no aparece a pesar de que ambos procesos se ejecutan bajo el mismo usuario.

Aquí está la salida de la terminal:

defaults read a.b.c
2020-09-15 14:56:58.245 defaults[23380:360050] 
Domain a.b.c does not exist

¿Alguna idea de lo que me estoy perdiendo aquí? Gracias.

Respuestas

1 MingxianZhao Sep 15 2020 at 16:34

Soy un novato, no sé qué quieres decir con "procesos".

(Quizás dos programas, Xcode ejecuta uno, el terminal ejecuta uno).

Pero sé que "NSUserdefaults" almacena datos en una caja de arena.

No hay una caja de arena para programas de terminal, y la caja de arena para cada programa es independiente.