Pregunta Probando el llavero - error OSStatus -34018


Estoy tratando de probar el código que lee y altera el llavero usando el marco SenTest básico en Xcode. El código funciona bien en el dispositivo, pero cuando comienzo la prueba obtengo estos errores cada vez que quiero tocar el llavero con SecItemDelete/SecItemAdd/ etc.

The operation couldn’t be completed. (OSStatus error -34018 - client has neither application-identifier nor keychain-access-groups entitlements)

Tengo los perfiles de aprovisionamiento de comodines coincidentes (iOS Team Provisioning Profile: *) tanto para el objetivo de compilación como para el objetivo de prueba.

Estas (no confirmadas) resuelven las respuestas de desbordamiento:

Lea los resultados de keychain en errSecItemNotFound 25300

Digo que necesito un perfil de aprovisionamiento que coincida con el identificador de mi aplicación cada vez que uso el llavero, pero no puede ser el correcto o obtendría los mismos errores fuera del objetivo de la prueba.

Profundizando más, las respuestas (sin confirmar) aquí:

SecItemAdd y SecItemCopyMatching devuelve el código de error -34018 (errSecMissingEntitlement)

implica que puede haber un error dentro de llavero y, en general Security.framework, que es francamente aterrador.

Mi pregunta es; alguien ha golpeado el error OSStatus -34018 solamente cuando estaban en un objetivo de prueba? Ese parece ser el comportamiento que estoy viendo.

EDITAR: Agregar esta respuesta ese JorgeDeCorte utilizado en su respuesta a continuación.

Este hilo parece contener la solución si el problema sale en su   objetivo de prueba unitaria

https://devforums.apple.com/message/917498#917498

Básicamente debe codirigir su carpeta .xcttest agregando el   siguiendo como script de ejecución en su objetivo de prueba.

codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH"

Recibí muchos errores -34018 al probar mi llavero en el dispositivo   y esto logró arreglarlo.

Si el problema no existe en su objetivo de prueba, probablemente esto no sea así   la solución.

Así que supongo que la solución es: forzar a firmar su objetivo de prueba.


40
2018-02-27 23:32


origen


Respuestas:


Para responder a su pregunta: sí, experimento el mismo problema. Parece funcionar bien cuando se ejecuta mi aplicación. Pero cuando ejecuto mis XCTests en mi dispositivo, parece que el llavero devuelve el error -34018. Lo extraño es que no sucede cuando ejecuto las pruebas en el simulador.

EDIT: encontré una solución que he explicado en esta respuesta


6
2018-03-10 14:25



Obtuve este error al intentar ejecutar operaciones de llavero a través de Grand Central Dispatch. Encuentre una forma de instanciar su llavero (o envoltorio de llavero) en el hilo principal. 

//results in code -34018
   static dispatch_once_t token;
    dispatch_once(&token, ^{
        keychain = [[KeychainWrapper alloc] init];

    });

//works fine
keychain = [[KeychainWrapper alloc] init];

4
2018-06-05 14:37



Codesigning un paquete .xctest no es tan fácil como parece en algunos casos. Principalmente JorgeDeCorte tiene razón con su responder que la línea corta dada como una Run Script es suficiente para la mayoría de los desarrolladores.

codesign --verify --force --sign "$CODE_SIGN_IDENTITY" "$CODESIGNING_FOLDER_PATH"

Pero cuando tienes múltiples certificados en tu llavero, esto fallará con la siguiente línea

iPhone Developer: ambiguous (matches "iPhone Developer: Your Name (ABC123DEF45)" and "iPhone Developer: Your Name (123ABC456DE)"

Una solución para obtener el certificado correcto incluso con múltiples es este pequeño script. Seguro que esto no es lo ideal, pero que yo sepa, no tiene posibilidad de obtener el certificado que Xcode encontró y utiliza para firmar su .app.

echo "codesign --verify --force --sign \"$CODE_SIGN_IDENTITY\" \"$CODESIGNING_FOLDER_PATH\""
IDENTITIES=`security find-identity -v -s "Code Signing" | grep "iPhone Developer" | awk '{ print $2 }'`

for SHA in $IDENTITIES; do
    codesign --verify --force --sign $SHA "$CODESIGNING_FOLDER_PATH"
    if [ $? -eq 0 ]; then
        echo "Matching identity found: $SHA"
        exit 0
    fi
done;

exit 1

1
2017-07-24 09:21



También recibí el "OSStatus error -34018". Lo resolví recreando mi perfil de aprovisionamiento.


1
2017-07-14 22:54



Preguntas populares