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 に答える