ios xcode permissions xcode11

ios - NSBluetoothAlwaysUsageDescription requerido, pero no se usa bluetooth



xcode permissions (7)

Abra su Info.plist y agregue una NSBluetoothAlwaysUsageDescription . Puede hacer esto en el editor agregando una línea de pedido como esta:

O puede hacer clic derecho en Info.plist y Abrir como -> Código fuente y pegar en las dos líneas apropiadas como xml:

<?xml version="1.0" encoding="UTF-8"?> <plist version="1.0"> <dict> .... <key>NSBluetoothPeripheralUsageDescription</key> <string>We use Bluetooth to connect to the MantisX hardware device.</string> .... </dict> </plist>

En mi aplicación ios con el nuevo Xcode 11 GM Seed 2 después de la implementación, apple devolvió el error: ITMS-90683: Falta la cadena de propósito en Info.plist con NSBluetoothAlwaysUsageDescription.

https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription?language=objc leyó.

El problema es que no uso bluetooth en mi aplicación. O tal vez no lo sé. ¿Cómo puedo averiguar por qué se necesita este permiso?

No estoy usando CoreBluetooth.framework


Aparentemente, Apple ha realizado algunos cambios de política. De lo contrario, está cansado pedir indicadores no utilizados. Es muy preocupante. También obtuve mis aplicaciones rechazadas por estos motivos, mientras que las versiones anteriores se ejecutan sin esto.


He intentado la respuesta de Maurice, con y sin extensión .framework , pero no encontré ninguna referencia a CoreBluetooth en mi proyecto. También tenía previamente en el archivo Info.plist agregado: " Privacy - Bluetooth Peripheral Usage Description ", con el valor de cadena: "La App would like to use your bluetooth for communication purposes" ". Esto tampoco funcionó.
Finalmente, después de ver la respuesta de Chase Roberts, agregué: " NSBluetoothAlwaysUsageDescription ", con el valor String: "La App would like to use your bluetooth for communication purposes ". Después de eso, este error no se volvió a mostrar para mi aplicación durante la publicación.

Nota: En la advertencia de error: ITMS-90683 , para mi aplicación se dijo que la entrega fue exitosa, pero puedo hacerlo si deseo hacer cambios con respecto al problema declarado.


Pude eliminar los usos de CoreBluetooth escaneando los usos de símbolos, específicamente buscando CBCentralManager . El guión que escribí para hacerlo:

#!/usr/bin/env bash # # find-bluetooth-usages.sh <app1.app> <app2.app> ... check_references_corebluetooth() { nm "$1" | grep "CBCentralManager" 2>&1 >/dev/null } find_usages () { app_path=$1 if [[ ! -d $app_path || ! -d "$app_path/Frameworks" ]]; then echo "$app_path is not a valid app directory." exit 1 fi app_filename=$(basename -- "$app_path") app_name="${app_filename%.*}" if check_references_corebluetooth "$app_path/$app_name"; then echo "$app_name contains references to CoreBluetooth" fi for framework_filename in $(ls "$app_path/Frameworks" | egrep ''/.framework$''); do framework_path="$app_path/Frameworks/$framework_filename" framework_name=$(basename "$framework_path" .framework) if check_references_corebluetooth "$framework_path/$framework_name"; then echo "$framework_name contains references to CoreBluetooth" fi done } for arg in "$@"; do find_usages "$arg" done

Esto buscará en el binario principal + sus marcos incluidos para encontrar referencias de CBCentralManager . Ex:

./find-bluetooth-usages.sh /path/to/MyApp.app


Si su aplicación tiene un objetivo de implementación anterior a iOS 13, agregue la clave NSBluetoothPeripheralUsageDescription al archivo de la Lista de propiedades de información de su aplicación, además de la clave NSBluetoothAlwaysUsageDescription, ya que uno o más de terceros en su proyecto utiliza la funcionalidad bluetooth.


Tuve exactamente el mismo problema hoy. Cuando hice una búsqueda grep, encontré que hay alguna referencia a CoreBluetooth.framework dentro de mi proyecto.pbxproj

Eliminé la referencia y la construcción de la aplicación salió bien. Subido a Apple y se hizo realidad, así que esto funcionó para mí.

Para buscar use el siguiente comando

grep -r -a CoreBluetooth.framework ProjectFolder


Una biblioteca / marco / pod de terceros en su aplicación podría estar usando CoreBluetooth. Simplemente agregue NSBluetoothAlwaysUsageDescription en su Info.plist, el error desaparecerá.