ios - NSBluetoothAlwaysUsageDescription requerido, pero no se usa bluetooth




xcode permissions (5)

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.


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 "[email protected]"; 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.


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





xcode11