在iOs 10中请求位置时,应用程序崩溃

时间:2016-11-30 08:47:27

标签: ios objective-c location xcode8

在我的应用程序中,我使用获取位置数据并将其发送回服务器。该应用程序在以前的版本中运行良好,它在iOs 10中崩溃。我正在使用Xcode 8.日志中显示以下消息。

Couldn't find the "com.apple.private.externalaccessory.showallaccessories" entitlement
[MC] System group container for systemgroup.com.apple.configurationprofiles path is /Users/delta/Library/Developer/CoreSimulator/Devices/EE3BD084-BA73-44F6-AD95-BE49BBE838AC/data/Containers/Shared/SystemGroup/systemgroup.com.apple.configurationprofiles
[MC] Reading from private effective user settings. 

所以如何解决这个问题。

2 个答案:

答案 0 :(得分:3)

在iOS 10中,如果您想访问私人数据,那么您必须提前申报或者您的应用会崩溃,这是一个重大变化。

如果您使用下面列出的任何框架

  

通讯录,日历,提醒,照片,蓝牙共享,麦克风,   相机,位置,健康,HomeKit,媒体库,动作,CallKit,   语音识别,SiriKit

您必须在 Info.plist

中声明说明

以下是您必须为iOS10声明的Info.plist键的完整列表。

    <!-- Photo Library -->
    <key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) photo use</string>

    <!-- Camera -->
    <key>NSCameraUsageDescription</key>
    <string>$(PRODUCT_NAME) camera use</string>

    <!-- Microphone -->
    <key>NSMicrophoneUsageDescription</key>
    <string>$(PRODUCT_NAME) microphone use</string>

    <!-- Location -->
    <key>NSLocationUsageDescription</key>
    <string>$(PRODUCT_NAME) location use</string>

    <!-- Location When In Use -->
    <key>NSLocationWhenInUseUsageDescription</key>
    <string>$(PRODUCT_NAME) location use</string>

    <!-- Location Always -->
    <key>NSLocationAlwaysUsageDescription</key>
    <string>$(PRODUCT_NAME) always uses location </string>

    <!-- Calendars -->
    <key>NSCalendarsUsageDescription</key>
    <string>$(PRODUCT_NAME) calendar events</string>

    <!-- Reminders -->
    <key>NSRemindersUsageDescription</key>
    <string>$(PRODUCT_NAME) reminder use</string>

    <!-- Contacts -->
    <key>NSContactsUsageDescription</key>
    <string>$(PRODUCT_NAME) contact use</string>

    <!-- Motion -->
    <key>NSMotionUsageDescription</key>
    <string>$(PRODUCT_NAME) motion use</string>

    <!-- Health Update -->
    <key>NSHealthUpdateUsageDescription</key>
    <string>$(PRODUCT_NAME) heath update use</string>

    <!-- Health Share -->
    <key>NSHealthShareUsageDescription</key>
    <string>$(PRODUCT_NAME) heath share use</string>

    <!-- Bluetooth Peripheral -->
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>$(PRODUCT_NAME) Bluetooth Peripheral use</string>

    <!-- Media Library -->
    <key>NSAppleMusicUsageDescription</key>
    <string>$(PRODUCT_NAME) media library use</string>

    <!-- Siri -->
    <key>NSSiriUsageDescription</key>
    <string>$(PRODUCT_NAME) siri use</string>

    <!-- HomeKit -->
    <key>NSHomeKitUsageDescription</key>
    <string>$(PRODUCT_NAME) home kit use</string>

    <!-- SpeechRecognition -->
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>$(PRODUCT_NAME) speech use</string>

    <!-- VideoSubscriber -->
    <key>NSVideoSubscriberAccountUsageDescription</key>
    <string>$(PRODUCT_NAME) tvProvider use</string>

另外

能够与外部附件通信的应用必须在 Info.plist 文件中声明其支持的协议。

  

要声明您的应用支持的协议,您必须包含   应用的Info.plist中的 UISupportedExternalAccessoryProtocols 键   文件。此键包含一个标识字符串的字符串数组   您的应用支持的通信协议。

希望它有所帮助.. !!

答案 1 :(得分:1)

转到应用 Info.Plist 文件,并根据您的要求添加隐私密钥。

位置: 密钥:隐私 - 位置始终使用说明
价值:$(PRODUCT_NAME)位置使用

密钥:隐私 - 使用时的位置用法说明
价值:$(PRODUCT_NAME)位置使用

如果您添加了上述隐私密钥,但仍然会崩溃该应用。然后启用相应的&#34; 功能&#34;

示例:如果您正在使用&#34; 使用Bluettoth LE配件&#34;

项目 - &gt;能力 - &gt;背景模式 - &gt;使用蓝牙LE配件。