(Swift)iOS应用程序在请求HomeKit访问之前崩溃

(Swift)iOS应用程序在请求HomeKit访问之前崩溃,ios,swift,xcode,homekit,ios-homekit,Ios,Swift,Xcode,Homekit,Ios Homekit,在我的iOS应用程序中,当我从手机上删除应用程序并重新构建它时,当我启动它时,该应用程序因试图访问我设置的HMHomeManager变量而崩溃,然后请求获得访问HomeKit的权限 在HomeKit崩溃之前,我能做些什么让应用程序请求HomeKit的许可吗 我尝试将其放入我的appDelegate文件中 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIAp

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

在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("")
}
并在我的
applicationdFinishLoadingwithOptions方法中调用它

 let home = HMHomeManager()
    home.accessibilityActivate()

    home.delegate = self

    homeKit.addAcessories()
    homeKit.addCharacteristics()

    return true

您必须将
nshomekitusedescription
添加到
info.plist
中以防止崩溃

这将自动请求许可。此外,您还必须为iOS 10添加描述。你可以说“(应用程序名)需要访问home kit”,但你可以随心所欲


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

发布崩溃的相关代码。^^^然后尝试将崩溃的代码包装到guard语句中,如果失败,则再次请求权限。我将代码放入,我将研究如何做到这一点。有没有一种通用的方法可以让应用程序在开始之前获得许可?我找不到类似的东西。有没有代码我可以运行来手动请求许可?实际上,我在那里有,这让我很困惑。它在崩溃后请求许可,我在
info.plist
文件中放了一条消息。您是否在
信息属性列表下添加了密钥
,密钥是否命名为
隐私-家庭工具包使用说明
?另外,您是在模拟器中还是在设备上运行应用程序?很抱歉,HomeKit之间不应该有空格是的,密钥位于
信息属性列表
下的
隐私-HomeKit使用说明
中的正确位置,而我正在设备上运行应用程序。问题就在应用程序请求许可的时候。它会在尝试运行代码后发出询问,而不是在应用程序启动之前。如果有崩溃消息,请使用控制台中的崩溃消息更新您的帖子,好吗?
 let home = HMHomeManager()
    home.accessibilityActivate()

    home.delegate = self

    homeKit.addAcessories()
    homeKit.addCharacteristics()

    return true