разрешение на доступ к контакту отображается в симуляторе, но не на реальном устройстве, иногда быстро

У меня есть простой код, который запрашивает доступ к контактам

override func viewDidLoad() {
    super.viewDidLoad()
   fetchContacts()
}
func fetchContacts()
{
    let allowedCharset = CharacterSet
        .decimalDigits
    let store = CNContactStore()
    store.requestAccess(for: .contacts) { (granted, err) in
        if let error = err
            {
                print("failed to access",error)
                return
            }
        if (granted)
        {
            ///// after we get access to fetch contacts //// we reload table view data ///
            print("access granted")
            let keys = [CNContactGivenNameKey,CNContactPhoneNumbersKey,CNContactFamilyNameKey,CNContactMiddleNameKey]
            let request = CNContactFetchRequest(keysToFetch: keys as [CNKeyDescriptor])
            do {
                try store.enumerateContacts(with: request, usingBlock: { (contact, stopPointerIfYouWantToStopEnumerating) in
                    let array = contact.phoneNumbers
                    for number in array
                    {
                        let fullName = contact.givenName + contact.middleName
                        let lastName = contact.familyName
                        let value = number.value.stringValue
                        let number = String(value.unicodeScalars.filter(allowedCharset.contains))
                        print (number)
                        /////////// 4 cases we just need the phone not to be zero ///////

                        if (fullName != "SPAM")
                        {
                            self.firstName.append(fullName)
                            self.lastName.append(lastName)
                            self.numberArray.append(number)
                        }
                    }

                })
                //self.table()
            }
            catch let err2 {
                print ("failer to enurmerate",err2)
            }
          }
        }
}

Этот код отлично работает на симуляторе. Когда я удаляю приложение на симуляторе и очищаю, а затем снова создаю и запускаю приложение, оно отлично работает, появляется всплывающее окно с запросом разрешений, однако на реальном устройстве оно работает, разрешения всплывают в первый раз, когда я удаляю приложение с телефона и затем очищаю построить и запустить Я больше не получаю запрос на разрешение pop


person Ahmed    schedule 19.10.2018    source источник


Ответы (1)


Когда вы удаляете приложение, iOS сохраняет разрешения в течение дня для идентификатора пакета, если вы хотите удалить его в тот же день, у вас есть три варианта.

  1. изменить данные iPhone OS (iOS), увеличив дату iPhone OS (iOS) на день
  2. Подождите день
  3. Сбросить настройки устройства

введите здесь описание изображения

Нажмите здесь ссылку на документы Apple, которую я использую Скриншот тоже можно проверить.

person Magdy Zamel    schedule 19.10.2018
comment
Привет, Мэгги, я попробовал, проблема в том, что если я предоставлю доступ, удалю приложение со своего телефона и переустановлю все снова на устройстве. Приложение все еще помнит, что я дал разрешение на доступ. - person Ahmed; 20.10.2018
comment
Привет @Ahmed Мне очень жаль, что я не понимаю ваш вопрос, я обновляю ответ, вы можете проверить его, и еще раз извините :( - person Magdy Zamel; 20.10.2018
comment
оценил ваш вопрос, но как насчет реструктуризации вашего вопроса, чтобы сделать его более полезным для других - person Magdy Zamel; 20.10.2018