IRKit は基本的に家に据え置きで使うことが想定されたプロダクト設計になってますが、自分の場合はいろいろと仕事で使う場面が多く、家とコワーキングスペース、その他別の作業場所など、使う場所がコロコロ変わります。
で、IRKitは軽くて小さいのでデバイス自体のモバイル性は高いのですが、公式アプリにしろSDKにしろ、WiFi設定は基本的には一度きり、という想定になったつくりになっています。具体的には、SSID, PasswordをWiFi環境が変わるたびに手打ちしないといけない。
それが面倒なので、WiFiのSSIDとPassowrdの設定を複数保持して、IRKitの設定時に呼び出せるユーティリティアプリをつくりました。
ダウンロード
GitHubでプロジェクト一式を公開しています。git clone して pod install してください。
使い方
1. wifi_settings.plist に ssid と password の辞書を入れておく
2. ビルド&インストール
起動するとplistに書いたWiFi設定がリスト表示され、
セルをタップするといつものセットアップ画面が立ち上がるのですが、下記のように Name (SSID) と Password があらかじめ入力された状態になります。
しくみ
WiFi設定画面のビューコントローラは IRWifiEditViewController なのですが、このクラスの keys という IRKeys 型オブジェクトに、plistファイルからとってきた SSID/Passをセットしています。
その際、IRWifiEditViewController オブジェクトはアプリ側(SDK導入側)から直接生成したり保持したりしてないので、そのプロパティをアプリ側からいじるために、IRNewPeripheralViewController の navController プロパティをヘッダに出す修正をSDKに行い(pull request 送信済み)、そのdelegateにアプリ側ビューコントローラをセットしています。
IRNewPeripheralViewController *vc = [[IRNewPeripheralViewController alloc] init]; vc.delegate = self; [self presentViewController:vc animated:YES completion:^{ vc.navController.delegate = self; }];
で、UINavigationControllerDelegate の 〜 willShowViewController 〜 メソッドで、IRWifiEditViewController オブジェクトをフックし keys プロパティをいじっています。
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated { if ([viewController isKindOfClass:[IRWifiEditViewController class]]) { IRKeys *keys = [(IRWifiEditViewController *)viewController keys]; if (keys) { NSAssert(selectedIndex < [self.items count], @"invalid index!"); NSDictionary *item = self.items[selectedIndex]; keys.ssid = item[@"ssid"]; keys.password = item[@"password"]; [(IRWifiEditViewController *)viewController setKeys:keys]; } } }
注意点
設定を変えるときはIRKitデバイス側のリセットが必要です。
自分の場合はボールペン等は持っていないことが多いのですが、ライトニングケーブルの角でもリセットスイッチを押せることを発見し、上記ユーティリティの作成と相俟ってだいぶIRKitをいろんな環境で使うのが快適になりました。