HomeKit:检查权限

HomeKit: Check for permission

我有一个使用 HomeKit 的 iOS 应用程序,我需要检查应用程序是否可以访问 HomeKit Store。正如我所注意到的, homeManagerDidUpdateHomes 无论如何都会被调用。如何检查 HomeKit 商店权限?

编辑:这显然不再有效了。不幸的是,我不再做 HK 开发了。有关一些信息,请参阅下面@windwalker 的评论。

[[HMHomeManager alloc] init]

如果您无权访问房屋,return 将为零。其他 HomeKit inits 也将 return nil,这只是我正在检查的一个,因为它是我们在应用程序加载后尝试的第一件事。

我有解决这个问题的技巧,对我有用:

初始化 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

Swift 4.2 版本的 Volodymyr hack/answer.

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")
            }
        }
    }
}