HomeKit: проверьте разрешение

У меня есть приложение для iOS, использующее HomeKit, и мне нужно проверить, может ли приложение получить доступ к HomeKit Store. Как я заметил, homeManagerDidUpdateHomes будет вызван в любом случае. Как проверить разрешение магазина HomeKit?

3 ответа

Решение

Изменить: Это, очевидно, больше не работает. К сожалению, я больше не занимаюсь разработкой HK. Смотрите комментарий @windwalker ниже для некоторой информации.

[[HMHomeManager alloc] init]

вернет ноль, если у вас нет доступа к дому. Другие модули HomeKit также будут возвращать ноль, это именно то, что я проверяю, так как это первое, что мы пробуем после загрузки приложения.

Версия Swift 4.2 взлома Владимира / ответ.

import UIKit
import HomeKit

class HomeKitAccessViewController: UIViewController {

    let manager = HMHomeManager()

    override func viewDidLoad() {
        super.viewDidLoad()

        self.manager.delegate = self

    }

}

extension HomeKitAccessViewController: HMHomeManagerDelegate {

    func homeManagerDidUpdateHomes(_ manager: HMHomeManager) {
        let number = manager.value(forKey: "_didUpdateHomes")

        if let num = number, let boolValue = num as? Bool {
            if boolValue == true {
                print("We got access.")
            }else{
                print("We don't have access")
            }
        }
    }
}

У меня есть взломать эту проблему, которая работает для меня:

Init HMHomeManager

self.manager = [[HMHomeManager alloc] init];
self.manager.delegate = self;

Проверьте частную собственность в

-(void)homeManagerDidUpdateHomes:(HMHomeManager *)manager {

  //HACK to check that the application does not have HomeKit permission
  NSNumber *private = [self.manager valueForKey:@"_didUpdateHomes"];


  if (private && ![private boolValue]) {
    //Warning to user
    return; 
  }
  // Do other logic
}

Я надеюсь, что Apple предоставит нам API для этого в ближайшее время

Другие вопросы по тегам