2

在我的 iOS 应用程序中,当我从手机上删除应用程序并重新构建它时,当我启动它时,应用程序会因尝试访问我设置的 HMHomeManager 变量而崩溃,然后请求 HomeKit 访问权限。

我能做些什么来让应用程序在崩溃之前请求 HomeKit 的许可吗?

我试着把它放在我的appDelegate文件中。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    //push notifications
    registerPushNotifications()

    let home = HMHomeManager()
    home.accessibilityActivate()

    return true
}

但它不起作用。谢谢您的帮助!

编辑:

这是崩溃的代码,在第一个视图控制器加载时调用。

//adding the accessories
func addAcessories() {
    for accessory in (homeManager.primaryHome?.accessories)! { // <-- crashes right here
        if accessory.isBridged == true {
            devices.append(accessory)
            print(accessory.name)
        }
    }
    print("")
}

编辑:当它崩溃时,它会(lldb)在控制台和Thread 1: EXC_BREAKPOINT文本编辑器中给我。

我也试过把它放在我的appDelegate文件中。我试过让 appDelegate 符合HMHomeManagerDelegate

class AppDelegate: UIResponder, UIApplicationDelegate, HMHomeDelegate, HMHomeManagerDelegate {

并在我的ApplicationDidFinishLoadingWithOptions方法中调用它。

 let home = HMHomeManager()
    home.accessibilityActivate()

    home.delegate = self

    homeKit.addAcessories()
    homeKit.addCharacteristics()

    return true
4

1 回答 1

1

您必须添加NSHomeKitUsageDescription到您的info.plist以防止崩溃。

这将自动请求许可。此外,从 iOS 10 开始,您还必须为其添加描述。您可以只说“(APP NAME)需要访问家庭套件”,但您可以随意设置。

编辑:尝试从您的 appDelegate 中删除 HomeKit 代码

于 2016-12-13T00:19:42.777 回答