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 для этого в ближайшее время