Error al conectar la tienda de aplicaciones: falta una cadena de propósito en el archivo Info.plist

153

Envié mi aplicación para su revisión a App Store Connect. Aunque la aplicación aún está en revisión, recibí un correo electrónico para informarme que tengo que corregir un error. Aquí está el contenido del mensaje:

Estimado desarrollador,

Identificamos uno o más problemas con una entrega reciente de su aplicación XXXXX. Su entrega fue exitosa, pero es posible que desee corregir los siguientes problemas en su próxima entrega:

"Cadena de propósito faltante en el archivo Info.plist. El código de su aplicación hace referencia a una o más API que acceden a datos confidenciales del usuario. El archivo Info.plist de la aplicación debe contener una clave NSLocationAlwaysUsageDescription con una cadena de propósito orientada al usuario que explique clara y completamente por qué su aplicación necesita a partir de la primavera de 2019, todas las aplicaciones enviadas a la tienda de aplicaciones que acceden a los datos del usuario deberán incluir una cadena de propósito. Si está utilizando bibliotecas o SDK externos, pueden hacer referencia a API que requieren una cadena de propósito. es posible que no use estas API, aún se requiere una cadena de propósito. Puede ponerse en contacto con el desarrollador de la biblioteca o SDK y solicitar que publiquen una versión de su código que no contenga las API.

Una vez que haya corregido los problemas, puede usar Xcode o Application Loader para cargar un nuevo binario en iTunes Connect.

Atentamente,

El equipo de la tienda de aplicaciones

Mi aplicación está completamente construida con Expo y no sé cómo acceder y modificar Info.plist.

¿Alguna idea?

John Doe
fuente
3
Tengo el mismo problema con la última compilación, dado que ni siquiera uso los Servicios de ubicación en mi aplicación. Y Apple no tiene un documento oficial sobre este cambio.
huong
3
Hizo un lanzamiento para la misma aplicación hace 2 días y todo está bien. 2 días después, solo cambié un par de líneas de código para hacer una nueva versión (no agregué más Pods o algo así) y recibí este mensaje
Tiago Ornelas
2
Hemos experimentado el mismo problema. Sospecho que es un error en el proceso de aprobación (con suerte). Voy a ignorar el fin de semana y espero que se arregle el lunes.
AMB
2
Enfrenté el mismo problema exacto en este momento, aunque nuestra aplicación realmente no necesita servicios de ubicación siempre. Solo necesita NSLocationWhenInUseUsageDescription para el que ya tenemos una cadena de propósito. ¿Probablemente esto sea solo una falla en el final de Apple?
ilight
3
Y en la moda de Apple, el enlace que proporcionan en el correo electrónico para solucionarlo está roto.
gwalshington

Respuestas:

45

Si está utilizando Expo, puede agregar soluciones agregando infoPlist a app.json de esta manera:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Expo Docs

gwalshington
fuente
25
En realidad, NO es "un mensaje para apaciguar a Apple", sino para que el usuario sepa QUÉ está haciendo con los datos (ubicación) generados en este caso. Es una cuestión de privacidad y creo que es bueno ser justo con los usuarios de sus aplicaciones.
Lookaji
44
Gotcha! ¡Estaba pensando en los novatos que podrían estar tentados a dejarlo así! No quería sonar gruñón :) ¡salud!
Lookaji
@gwalshington No tengo ningún objeto de exposición en app.json
Heemanshu Bhalla
@HeemanshuBhalla hmm, no estoy seguro de por qué. En mi app.json, está en la parte superior y se declara el primer objeto. Es donde declaras el número de versión, el identificador de paquete, etc. Si has expulsado la aplicación, ¿quizás se ve un poco diferente?
gwalshington
2
¿Qué texto escribir si no recopilamos datos de ubicación? Tenemos que inventar una mentira: S
Primož Kralj
62

EDITAR abril de 2019 : ahora debe agregar estas dos teclas, ya que la primavera de 2019 ha comenzado. Tenga en cuenta que NSLocationAlwaysUsageDescriptionahora está en desuso (desde iOS 11) y se ha reemplazado con NSLocationAlwaysAndWhenInUseUsageDescriptiony NSLocationWhenInUseUsageDescription. Si desea admitir versiones inferiores a iOS 11, deberá utilizar los tres valores.

Para resumir tienes que:

  • Agregue NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptionpara iOS 11 y más
  • Y agregue NSLocationAlwaysUsageDescriptionsi desea admitir iOS 10 y menos
  • Y, por último, puede agregar NSLocationUsageDescriptionsi desea admitir iOS 8 y menos.


¡Puedes enviar tu aplicación incluso si recibiste este mensaje!

Acabo de enfrentar el mismo problema ayer, incluso si la aplicación no está utilizando la funcionalidad de ubicación. Puede estar relacionado con algún marco incluido en el proyecto que tiene esta característica opcional.

Puedo confirmar que mi aplicación ha sido aprobada incluso sin el NSLocationAlwaysUsageDescriptionyNSLocationWhenInUseUsageDescription teclainfo.plist

De hecho, como Apple declaró en el correo:

A partir de la primavera de 2019, todas las aplicaciones enviadas a la App Store que accedan a los datos del usuario deberán incluir una cadena de propósito.

Entonces, lo único que debe hacer es agregar esta clave (en este momento es mejor, para que no lo olvide) en su proyecto para que se incluya en su próxima actualización .

Simplemente agregue dos nuevas entradas en su info.plist, con NSLocationAlwaysUsageDescriptiony NSLocationWhenInUseUsageDescriptioncomo claves y una breve descripción de por qué las usa como valor (incluso si realmente no las usa ...).

AnthoPak
fuente
2
En su edición de abril de 2019, ¿está seguro de que no ha revertido la desaprobación? Por lo que veo NSLocationUsageDescription es el que está en desuso. Mirando aquí: developer.apple.com/library/archive/documentation/General/…
apricity
El correo electrónico que recibí de Apple menciona NSLocationAlwaysUsageDescription, así que creo que lo ha revertido.
Dror Bar
@apricity @DrorBar Lo siento chicos, de hecho, me había equivocado. No se revirtió, pero todavía hubo un error, NSLocationAlwaysUsageDescriptiondebería reemplazarse por NSLocationAlwaysAndWhenInUseUsageDescriptiony NSLocationWhenInUseUsageDescription , y no por NSLocationUsageDescription(como escribí anteriormente, lo siento ...). He actualizado mi respuesta para agregar un resumen del proceso.
AnthoPak
48

Tengo algunas aplicaciones en la tienda e intenté distribuir una versión para el control de calidad y sucedió lo mismo en dos aplicaciones diferentes. Creo que este es un nuevo criterio para aceptar las cargas de compilaciones en Appstore connect.

La solución es simple, agregue las siguientes líneas en el archivo .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PD: En mi caso, no he usado ninguna función de ubicación, pero agregué estas líneas para cumplir con las pautas de conexión de Appstore. Por cierto, después de recibir ese correo electrónico, pude probar la aplicación incluso cuando dijeron que la compilación tenía algunos problemas.

Espero que esto funcione para ustedes.

vroldan
fuente
55
Wow, acabo de recibir esto, ¡me di cuenta de que todos también lo están recibiendo!
Cameron A. Ellis
la primera clave ha cambiado a partir de ahora a<key>NSLocationUsageDescription</key>
Hudi Ilfeld
1
¿Tenemos que volver a archivar después de actualizar info.plist?
Bishoy Hanna
¿Tengo que aumentar la versión del paquete o el número de versión para cargar un nuevo binario?
Dror Bar
20

Es un nuevo requisito de Apple, incluso si no utiliza la ubicación. Si desea agregar los permisos en Xcode, busque "Privacidad - Descripción del uso de la ubicación" y "Privacidad - Ubicación cuando esté en uso Descripción del uso" y escriba una cadena personalizada para cada uno de ellos.

ingrese la descripción de la imagen aquí

Juan José Ramírez
fuente
1
En otra actualización de la aplicación, Apple también solicitó este permiso: "Privacidad - Ubicación Descripción del uso siempre"
Juan José Ramírez
2
Entonces, si no uso estas características, ¿qué tengo que escribir allí, una mentira, algo así como "recopilar ubicación para uso futuro, tal vez"?
Ruslan Shashkov
Sí, Apple te contactará si tienen preguntas
Juan José Ramírez
No puedo encontrar la Lista de propiedades de información en mi xcode 10.1, debería haber mencionado dónde encontrarla, he buscado la configuración de compilación tanto para los objetivos como para el proyecto
Awais Nasir
1
De acuerdo, los objetivos-> Información-> Propiedades de destino de ios personalizadas era la ubicación exacta
Awais Nasir
15

Para simplificar más, puede agregar estas líneas en su info.plist. Este error se produce porque a partir de la primavera de 2019, todas las aplicaciones enviadas a la tienda de aplicaciones que acceden a los datos del usuario deberán incluir una cadena de propósito.

  1. Abra info.plist como código fuente.
  2. Agregue estas líneas siguientes en su plist

    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
Sachin Nautiyal
fuente
2
Tuve que eliminar espacios adicionales en las etiquetas <key> y luego funcionó.
innich
@innich gracias por señalarlo, he cambiado mi respuesta.
Sachin Nautiyal
8
## Use esta clave en el archivo info.plist

NSLocationAlwaysUsageDescription Su ubicación es necesaria para los beneficios de xyz para usted NSLocationWhenInUseUsageDescription Su ubicación es necesaria para los beneficios de xyz para usted

Sumit Sharma
fuente
8

Recibimos el mismo correo electrónico y no estamos utilizando CoreLocation en absoluto. Después de una búsqueda rápida, encontramos que Parse SDK podría usar CoreLocation. En el correo electrónico de Apple, dicen claramente:

Si está utilizando bibliotecas externas o SDK, pueden hacer referencia a API que requieren una cadena de propósito.

Eso significa que en el momento en que su código o cualquier otra biblioteca o SDK pueda usar CoreLocation, incluso si no lo usa, debe proporcionar una descripción de privacidad para "Cuando esté en uso" y "Usar siempre".

También es algo nuevo de Apple y por ahora es solo una advertencia, pero se requerirá a partir de la primavera de 2019 para nuevas presentaciones.

sebleclerc
fuente
Es simplemente estúpido ... Si no lo estoy usando, podría hacer que la gente no descargue mi aplicación solo por eso. -_-
Mayoul
3
Realmente no. La alerta que le pide que use su localización no se mostrará a menos que CLLocationManager.requestWhenInUseAuthorization()se llame en algún lugar del código . Apple analizó el código de cada aplicación para ver si se podría invocar dicha función. Si nunca se llama, la alerta no aparecerá.
sebleclerc
6

Este problema se produce porque no has incluido

 <NSLocationAlwaysUsageDescription>

para tu aplicación Me enfrenté al mismo problema cuando intenté enviar mi aplicación en la AppStore. Después de que se procesó la aplicación, recibí el mismo correo. Acabo de agregar la descripción y ahora está resuelta.

Espero que esto ayude.

Sachin Nautiyal
fuente
Esto me ayudo. Si está utilizando Ubicación en su aplicación (o tal vez siempre), debe agregar esta línea y una cadena debajo de ella. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor
6

Existen los siguientes casos:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple declara en:

Agregue la NSLocationWhenInUseUsageDescriptionclave y la NSLocationAlwaysAndWhenInUseUsageDescriptionclave a su archivo Info.plist .

y:

Si su aplicación es compatible con iOS 10 y versiones anteriores, agregue el NSLocationAlwaysUsage

NSLocationUsageDescriptionparece muerto, la única referencia en el sitio ADC es: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Entonces, para estar seguro, use los primeros 3.

ingconti
fuente
3

Todas estas respuestas le dicen cómo cumplir con las reglas de la tienda de aplicaciones para evitar la advertencia, pero la solución verdadera sería que Expo le permita desactivar sus requisitos de SDK para los servicios de ubicación a menos que realmente los use; no estoy seguro de si esto es posible.

Calvin
fuente
3

mismo problema el 19 de febrero, recibí un correo electrónico con un montón de permisos que no estoy usando, supongo que son de complementos. Apple dice que el 19 de marzo es un requisito, así que estoy agregando estos en info.plst y subiendo de nuevo.

Es muy tonto de hecho.

Panda Power
fuente
2
Más de un comentario realmente ...?
Steve
3

También me enfrento al mismo problema, pero después de 27 horas, recibí el correo electrónico sobre aprobado incluso no hice nada. Por lo tanto, espere aproximadamente 24 horas en lugar de volver a hacer todo este proceso.

Abdul Qayum
fuente
1
Sí, es un error!
Danh Huynh
2

Tuve en <key>NSLocationWhenInUseUsageDescription </key> lugar de <key>NSLocationWhenInUseUsageDescription</key>

asegúrese de eliminar los espacios en blanco finales

Michael van de Waeter
fuente
2

Revise el correo electrónico que recibió de ** App Store Connect **

Identificar la clave que falta ingrese la descripción de la imagen aquí

Instrucciones

  1. Abra el archivo info.plist.

  2. Agregue y busque la clave que falta en las opciones proporcionadas (por ejemplo, Contactos = Privacidad - Descripción de uso de contactos)

  3. Agregar descripción de uso:

$ (PRODUCT_NAME) necesita acceso de Contactos para "Proporcionar la razón aquí".

Ejemplo:

Zeus
fuente
1
señor, obtuve el mismo error, pero ¿por qué agregar a info.plist en realidad no estoy usando la función de contacto en mi aplicación, así que por qué necesitamos agregarla?
Kapil soni
@Kapilsoni Asegúrese de no acceder a una o más API que tienen acceso a datos confidenciales del usuario
Zeus
1
: señor, ¿he usado solo cámara y ubicación en mi aplicación?
Kapil soni
2

Con Xcode 11, copie la clave NSLocationAlwaysUsageDescriptiony agréguela a Info-> Custom iOS Target Properties-> Haga clic +en la parte inferior izquierda de esta pestaña y, como valor, inserte algún tipo de descripción como This app requires location access to function properly..

Daniel Danielecki
fuente
2

"Cadena de propósito faltante en el archivo Info.plist. El código de su aplicación hace referencia a una o más API que acceden a datos confidenciales del usuario. El archivo Info.plist de la aplicación debe contener una clave NSLocationAlwaysUsageDescription con una cadena de propósito orientada al usuario que explique clara y completamente por qué su aplicación necesita a partir de la primavera de 2019, todas las aplicaciones enviadas a la tienda de aplicaciones que acceden a los datos del usuario deberán incluir una cadena de propósito. Si está utilizando bibliotecas o SDK externos, pueden hacer referencia a API que requieren una cadena de propósito. es posible que no use estas API, aún se requiere una cadena de propósito. Puede ponerse en contacto con el desarrollador de la biblioteca o SDK y solicitar que publiquen una versión de su código que no contenga las API.

Abra info.plist como código fuente.
Agregue estas líneas siguientes en su plist

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
Supriya
fuente
1

Mi aplicación también obtuvo eso, y no hago nada al respecto, pero puede funcionar bien, la próxima vez que piense que debería agregar esa clave en una lista, solo haga una descripción

liunianhuaguoyanxi
fuente
1

Una respuesta corta al problema anterior:

NSLocationAlwaysUsageDescription debe actualizarse con la siguiente descripción en el archivo Info.plist

{El nombre de su aplicación} requiere acceso a la ubicación para sugerir zonas de brote de dengue.

Soman Dubey
fuente
0

En nuestro caso, estábamos usando NSLocationWhenInUseUsageDescriptionen nuestra aplicación, pero no NSLocationAlwaysUsageDescription.

Leyendo los comentarios aquí (gracias, roble-mate), parece queNSLocationAlwaysUsageDescription está siendo utilizado por uno de los marcos de dependencia que utilizamos.

Al ejecutar nuestra aplicación, no se muestra el modal de permiso NSLocationAlwaysUsageDescription real, por lo que parece manejar esto en segundo plano.

En resumen, agregar NSLocationAlwaysUsageDescriptiona Info.plist arregló el correo electrónico de advertencia y no modificó ningún comportamiento en la aplicación 👍🏻

Harry Bloom
fuente