ios - NSBluaxyAlwaysUsageDescription की आवश्यकता है, लेकिन ब्लूटूथ का उपयोग नहीं किया जाता है




xcode permissions (5)

नई Xcode 11 GM Seed 2 परिनियोजन के बाद मेरे ios ऐप में, Apple ने त्रुटि लौटा दी: ITMS-90683: NSBluaxyAlwaysUsageDescription के साथ Info.plist में मिसिंग पर्पस स्ट्रिंग

https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription?language=objc पढ़ी गई।

समस्या यह है कि मैं अपने ऐप में ब्लूटूथ का उपयोग नहीं करता हूं। या शायद मैं इसके बारे में नहीं जानता। मुझे कैसे पता चलेगा कि इस अनुमति के उद्देश्य की आवश्यकता क्यों है?

मैं CoreBluetooth.framework का उपयोग नहीं कर रहा हूं


अपना Info.plist खोलें और एक NSBluetoothAlwaysUsageDescription जोड़ें। आप इस तरह से एक पंक्ति वस्तु जोड़कर संपादक में कर सकते हैं:

या आप Info.plist पर राइट क्लिक कर सकते हैं और इस रूप में खोलें -> सोर्स कोड और दो उचित लाइनों में 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>

आपके ऐप में एक तृतीय पक्ष लाइब्रेरी / फ्रेमवर्क / पॉड CoreBluaxy का उपयोग कर सकता है। बस अपने Info.plist में NSBluetoothAlwaysUsageDescription जोड़ें, त्रुटि दूर हो जाएगी।


मेरा आज भी यही मुद्दा था। जब मैंने एक grep खोज की तो मैंने पाया कि मेरे प्रोजेक्ट के अंदर CoreBluaxy.framework का कुछ संदर्भ है।

मैंने संदर्भ हटा दिया और ऐप का निर्माण ठीक चला। Apple पर अपलोड किया गया और यह मेरे लिए काम कर गया।

निम्न कमांड का उपयोग करने के लिए खोज करने के लिए

grep -r -a CoreBluetooth.framework ProjectFolder

मैं विशेष रूप से CBCentralManager तलाश में, प्रतीक usages के लिए स्कैन करके CoreBluaxy usages को सूँघने में सक्षम था। स्क्रिप्ट मैंने ऐसा करने के लिए लिखा था:

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

यह CBCentralManager संदर्भों को खोजने के लिए मुख्य बाइनरी + इसके शामिल फ्रेमवर्क के माध्यम से खुदाई करेगा। उदाहरण के लिए:

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


यदि आपके ऐप का iOS 13 से पहले कोई परिनियोजन लक्ष्य है, तो NSBluaxyAlwaysUsageDescription कुंजी के अलावा अपने ऐप की सूचना संपत्ति सूची फ़ाइल में NSBluaxyPeripheralUsageDescription कुंजी जोड़ें और अपने प्रोजेक्ट में एक या अधिक तृतीय पक्ष ब्लूटूथ कार्यक्षमता का उपयोग करता है।





xcode11