web-dev-qa-db-ja.com

NSBluetoothAlwaysUsageDescriptionが必要ですが、Bluetoothは使用されていません

新しいXcode 11の私のiOSアプリではGM Seed 2、Apple返されたエラー:ITMS-90683:NSBluetoothAlwaysUsageDescriptionを持つInfo.plistに目的文字列がありません。

https://developer.Apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription?language=objc 既読。

問題は、アプリでBluetoothを使用しないことです。それとも私はそれについて知りません。この許可の目的が必要な理由を知るにはどうすればよいですか?

CoreBluetooth.frameworkを使用していません

16
Nik Kov

今日もまったく同じ問題がありました。 grep検索を行ったとき、私のプロジェクト内にCoreBluetooth.frameworkへの参照があることがわかりました.pbxproj

参照を削除し、アプリの構築はうまくいきました。 Appleにアップロードしましたが、これで問題なく動作しました。

検索するには、次のコマンドを使用します

grep -r -a CoreBluetooth.framework ProjectFolder
8
Maurice

Info.plistを開き、NSBluetoothAlwaysUsageDescriptionを追加します。エディターでこれを行うには、次のような行項目を追加します。

Screenshot of info.plist with NSBluetoothAlwaysUsadeDescription as the key and explanation text as the String value

または、Info.plistを右クリックして[名前を付けて開く]-> [ソースコード]をクリックし、適切な2行に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>
4
Chase Roberts

特にCBCentralManagerを探して、シンボルの使用状況をスキャンすることで、CoreBluetoothの使用状況を特定できました。私がそうするために書いたスクリプト:

#!/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

これにより、メインバイナリとそれに含まれるフレームワークを調べ、CBCentralManager参照を見つけます。例:

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

2
John

アプリのサードパーティライブラリ/フレームワーク/ポッドがCoreBluetoothを使用している可能性があります。 Info.plistにNSBluetoothAlwaysUsageDescriptionを追加するだけで、エラーはなくなります。

2
Deepak

アプリにiOS 13より前の導入ターゲットがある場合、プロジェクトの1つ以上のサードパーティがBluetooth機能を使用するため、NSBluetoothAlwaysUsageDescriptionキーに加えて、NSBluetoothPeripheralUsageDescriptionキーをアプリの情報プロパティリストファイルに追加します。

0
vatsal tanna

スウィフト5

<key>NSBluetoothAlwaysUsageDescription</key>
<string>App would like to use your bluetooth for communication purposes</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App would like to use your bluetooth for communication purposes</string>
0
Shakeel Ahmed

NSBluetoothPeripheralUsageDescriptionとNSBluetoothAlwaysUsageDescriptionの両方をInfo.plistファイルに追加する必要があります。 Info.plistファイルは、(デフォルトでは)prrojectフォルダーの「Supporting Files」グループ内にあり、{PROJECTNAME} -Info.plistのような名前で呼ばれる場合があります。追加する方法はいくつかあります。 1つの選択肢は、vimなどを使用してコマンドラインからファイルを編集することです。次に、次の行を追加します。

<key>NSBluetoothAlwaysUsageDescription</key>
<string>App would like to use your bluetooth for communication purposes</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>App would like to use your bluetooth for communication purposes</string>

2番目の選択肢は、XCodeでそのInfo.plistファイルをダブルクリックし、「非常に役立つ」XCodeエディターを使用することです。この迷惑なエディタでは、実際にはドロップダウンリストにNSBluetoothAlwaysUsageDescriptionがないため、手動で追加する必要があります。超役立つ。とにかく、情報プロパティリストのヘッダーの右側に小さなプラスボタンがあります。それをクリックするだけです。ステップ1では、「プライバシー-Bluetooth周辺機器の使用法の説明」を探します。これは、NSBluetoothPeripheralUsageDescriptionの読み取り可能な名前です。次に、右側の値の部分をクリックして、「アプリがBluetoothを通信目的で使用したい」などのテキストを入力するだけです。それが完了したら、同じ同じプラスボタンをもう一度クリックすると、同じdrpdownリストが表示されます。そのリストは無視して、そこにNSBluetoothAlwaysUsageDescriptionという文字列を貼り付けてください。次に、右側の値をクリックして、「アプリがBluetoothを通信に使用したい」と貼り付けます。

0
Marc

私は.framework拡張子の有無にかかわらず、モーリスの回答を試しましたが、プロジェクトでCoreBluetoothへの参照が見つかりませんでした。また、以前にInfo.plistファイルに追加しました: "Privacy - Bluetooth Peripheral Usage Description"、文字列値: "App would like to use your bluetooth for communication purposes""。これも機能しませんでした。
最後に、チェイスロバーツの回答を確認した後、「NSBluetoothAlwaysUsageDescription」と文字列値「App would like to use your bluetooth for communication purposes」を追加しました。その後、公開中にこのエラーが私のアプリで再び表示されませんでした。

注:エラーの警告:ITMS-90683、私のアプリは配信が成功したと言われましたが、記載された問題に関して変更を加えたい場合はできます。

0
Bane M

私の場合、Bluetooth関連のAPIを使用していませんでしたが、これが原因でアプリがクラッシュしていました。そして、Googleモバイル広告はBluetoothを使用していることがわかりました。ポッドから削除してアプリを再実行することで、これを確認しました。 (モバイル広告を表示するためにBluetoothが必要な理由をGoogleに質問する必要があると思います)

とにかく、今のところplistにNSBluetoothAlwaysUsageDescriptionを追加することで、アプリのクラッシュを防ぐことができます。

0
ysnzlcn

どうやらAppleはいくつかのポリシーを変更しました。それ以外の場合は、未使用のフラグを要求するのはおかしいです。非常に心配です。これらの理由でアプリも拒否されましたこれなしで実行されています。

0
jolly