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

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

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 снова

1 Ответ

0 голосов
/ 20 октября 2018

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

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

enter image description here

Нажмите здесь справочник Apple Docs, что я беру форму скриншота, также вы можете проверить его.

...