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.
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á.