向きの変更(ポートレート/風景)を処理するアプリの機能をテストしたいと思います。私は現在KIFを使用していますが、私が知る限り、これを行うことはできません。iOSシミュレーター用にプログラムで回転イベントをシミュレートする方法はありますか?
文書化されていないプライベートAPIであるかハックであるかは関係ありません。これはテスト中にのみ実行され、本番ビルドの一部ではないためです。
向きの変更(ポートレート/風景)を処理するアプリの機能をテストしたいと思います。私は現在KIFを使用していますが、私が知る限り、これを行うことはできません。iOSシミュレーター用にプログラムで回転イベントをシミュレートする方法はありますか?
文書化されていないプライベートAPIであるかハックであるかは関係ありません。これはテスト中にのみ実行され、本番ビルドの一部ではないためです。
これを実現するための手順は次のとおりです。
+ (KIFTestStep*) stepToInterfaceOrientation: (UIInterfaceOrientation) toInterfaceOrientation {
NSString* orientation = UIInterfaceOrientationIsLandscape(toInterfaceOrientation) ? @"Landscape" : @"Portrait";
return [KIFTestStep stepWithDescription: [NSString stringWithFormat: @"Rotate to orientation %@", orientation]
executionBlock: ^KIFTestStepResult(KIFTestStep *step, NSError *__autoreleasing *error) {
if( [UIApplication sharedApplication].statusBarOrientation != toInterfaceOrientation ) {
UIDevice* device = [UIDevice currentDevice];
SEL message = NSSelectorFromString(@"setOrientation:");
if( [device respondsToSelector: message] ) {
NSMethodSignature* signature = [UIDevice instanceMethodSignatureForSelector: message];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature: signature];
[invocation setTarget: device];
[invocation setSelector: message];
[invocation setArgument: &toInterfaceOrientation atIndex: 2];
[invocation invoke];
}
}
return KIFTestStepResultSuccess;
}];
}
注:デバイスをテーブル上で平らに保つと、加速度計が更新されてビューが元に戻ります。
UIオートメーションで方向の変更をシミュレートするには、UIATargetのsetDeviceOrientationメソッドを使用できます。例:
UIATarget.localTarget().setDeviceOrientation(UIA_DEVICE_ORIENTATION_LANDSCAPELEFT);
メソッドには、1つのパラメーター「deviceOrientation」定数が必要です。詳細はこちら
この100%は実際のiOSデバイスで動作します。シミュレーターについてはよくわかりません。
「プログラムで」の意味はわかりませんが、Appleが提供するUIAutomationライブラリをInstrumentsアプリケーションの自動化テンプレートと一緒に使用すると、iPhoneでサポートされているさまざまな方向をシミュレートできます。
なぜそれをプログラム的に行うのですか?シミュレーターはあなたが望むことを正確に実行し、向きの変更を処理するアプリの能力をテストします。
シミュレータで、トップメニューの[ハードウェア]> [左/右に回転]を使用するか、コマンドを押したまま左右の矢印を使用します。