xip for descargar apple ios xcode ios10 xcode8
thisthis

for - SecItemAdd siempre devuelve el error-34018 en Xcode 8 en el simulador de iOS 10



xcode 9.0 download (7)

En Xcode 8.1 GM Release Notes Apple reconoció el problema y sugirió una solución más limpia:

Las API de llavero pueden no funcionar en el simulador si su archivo de derechos no contiene un valor para el derecho de identificador de la aplicación. (28338972) Solución alternativa: agregue una configuración de compilación definida por el usuario a su objetivo llamado ENTITLEMENTS_REQUIRED y establezca el valor en YES. Esto hará que Xcode inserte automáticamente un derecho de identificador de aplicación al compilar.

Tenga en cuenta que, por lo que he intentado, solo funciona en Xcode 8.1. Aunque el texto puede confundirlo con una configuración de compilación, lo que debe hacer es agregar esto a sus Variables de entorno, en su esquema.

Xcode 8.2 resolverá esto:

Resuelto en Xcode 8.2 beta: las API IDE Keychain funcionan correctamente en Simulator. (28338972)

Actualización : este problema se ha solucionado en Xcode 8.2. Keychain funciona en el simulador sin habilitar el uso compartido de keychain.

¿Por qué siempre recibo el error -34018 cuando llamo a la función SecItemAdd en el simulador Xcode 8 / iOS 10 ?

Pasos para reproducir

Cree un nuevo proyecto de aplicación iOS de página única en Xcode 8. Ejecute el siguiente código en viewDidLoad (o abra this proyecto Xcode).

let itemKey = "My key" let itemValue = "My secretive bee 🐝" // Remove from Keychain // ---------------- let queryDelete: [String: AnyObject] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: itemKey as AnyObject ] let resultCodeDelete = SecItemDelete(queryDelete as CFDictionary) if resultCodeDelete != noErr { print("Error deleting from Keychain: /(resultCodeDelete)") } // Add to keychain // ---------------- guard let valueData = itemValue.data(using: String.Encoding.utf8) else { print("🐣🐣🐣🐣🐣🐣🐣🐣🐣🐣 Error saving text to Keychain") return } let queryAdd: [String: AnyObject] = [ kSecClass as String: kSecClassGenericPassword, kSecAttrAccount as String: itemKey as AnyObject, kSecValueData as String: valueData as AnyObject, kSecAttrAccessible as String: kSecAttrAccessibleWhenUnlocked ] let resultCode = SecItemAdd(queryAdd as CFDictionary, nil) if resultCode != noErr { print("🐝🐝🐝🐝🐝🐝🐝🐝🐝 Error saving to Keychain: /(resultCode).") } else { print("🍀🍀🍀🍀🍀🍀🍀🍀🍀 Saved to keychain successfully.") }

Resultados previstos

El artículo se agrega al llavero.

Resultados actuales

La función SecItemAdd devuelve el siguiente código de error: -34018 .

Versión

Xcode versión 8.1 (8B62), macOS Sierra 10.12.1.

Configuración

Siempre ocurre en Xcode 8 desde Beta 2 cuando se prueba en un simulador de iOS 10.

NO ocurre en Xcode 8 cuando se prueba en un simulador iOS 9.3.

Manifestación

this

Referencias

Radar: https://openradar.appspot.com/27422249

Foros de desarrolladores de Apple: https://forums.developer.apple.com/message/179846

Este problema es diferente de la siguiente publicación porque se produce de forma coherente en Xcode 8. SecItemAdd y SecItemCopyMatching devuelve el código de error -34018 (errSecMissingEntitlement)


Estaba buscando una solución que no utilizara el uso compartido de Keychain, ya que esa no era la característica que estaba buscando. https://forums.developer.apple.com/message/179846 parece tener un buen trabajo de EvergreenCoder que puede limitar en alcance solo al simulador de iOS 10 (ya que este parece ser el único simulador afectado). De la publicación:

El problema parece ser que debe haber al menos un derecho para que Xcode agregue correctamente el enttilement "identificador de aplicación" a la aplicación compilada. Esta es la razón por la cual el intercambio de llaveros parece ser una solución, pero solo lo es indirectamente: cualquier otro derecho parece funcionar bien.

Puede crear un .plist así:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-/ <plist version="1.0"> <dict> <key>get-task-allow</key> <true/> </dict> </plist>

y proporcionar una ruta a ese archivo en Configuración de compilación en

Code Signing->Debug->Simulater iOS 10 SDK->($SRCROOT)/your-path-to-file

Como se indica en la publicación, este derecho solo permite adjuntar el depurador.


Esto puede suceder si tiene un objetivo de prueba que no tiene una aplicación host. Arreglar

  1. agregar una aplicación de host ficticia:

  2. Habilite la firma automática de código y agregue un equipo:

  1. Habilite el uso compartido de llaveros en las capacidades


Funciona después de habilitar el intercambio de llavero en capacidades.


Pude solucionar este problema en mi aplicación agregando Grupos de acceso de llavero al archivo de Derechos. Encendí el interruptor Compartir llavero en la sección Capacidades de su aplicación de prueba, y también funciona para mí.

Artículo para agregar a los derechos:

<key>keychain-access-groups</key> <array> <string>$(AppIdentifierPrefix)com.evgenii.KeychainBugDemo</string> </array>

Solo he intentado esto en macOS Sierra (10.12), así que no estoy seguro de si funcionará para usted en 10.11.5.


Recibí un error al firmar con el correo electrónico, al crear un nuevo usuario o al cerrar sesión con firebase.

El error fue:

código de dominio de error firauth 17995

Encendí el interruptor Compartir llavero en la sección Capacidades de su aplicación de prueba, y también funciona para mí.


Tuve un problema similar, aunque recibí el error -34018 al intentar ejecutar en el dispositivo. Estoy usando XCode 8.1 en Sierra con iOS 10.1. Trabajo en un equipo y de repente tuve este problema cuando cambiamos a "Administrar automáticamente la firma" en la configuración del proyecto. Cuando apago esto y selecciono manualmente mi perfil, todo funciona bien. Terminé teniendo que eliminar mi certificado de desarrollador de mi llavero y luego volver a seleccionar "Gestionar automáticamente la firma". En la próxima compilación, generó un nuevo certificado de firma para mí y todo funciona bien ahora. Todavía no estoy seguro de qué causó el problema, ya que el otro certificado funcionó bien cuando se seleccionó manualmente, pero no cuando XCode lo administra. Espero que esto ayude a detener el dolor de cabeza de una hora para otra persona.