¿Cómo saber en qué dispositivo estoy en las testings de UI de Xcode?

Mientras se ejecuta una testing de interfaz de usuario Xcode, quiero saber qué dispositivo / entorno se está utilizando (por ejemplo, iPad Air 2, iOS 9.0, Simulator).

¿Cómo puedo get esta información?

Usando Swift 3 (cambie .pad a .phone según sea necesario):

if UIDevice.current.userInterfaceIdiom == .pad { // Ipad specific checks } 

Usando versiones anteriores de Swift:

 UIDevice.currentDevice().userInterfaceIdiom 

Lamentablemente, no hay una forma directa de consultar el dispositivo actual. Sin embargo, puede solucionar consultas de las classs de tamaño del dispositivo:

 private func isIpad(app: XCUIApplication) -> Bool { return app.windows.elementBoundByIndex(0).horizontalSizeClass == .Regular && app.windows.elementBoundByIndex(0).verticalSizeClass == .Regular } 

Como puede ver en la Descripción de Apple de las classs de tamaño , solo los dispositivos iPad (actualmente) tienen class de tamaño vertical y horizontal "Regular".

Tal vez a alguien le sea útil lo mismo para XCTest en el Objetivo C:

 // Check if the device is iPhone if ( ([[app windows] elementBoundByIndex:0].horizontalSizeClass != XCUIUserInterfaceSizeClassRegular) || ([[app windows] elementBoundByIndex:0].verticalSizeClass != XCUIUserInterfaceSizeClassRegular) ) { // do something for iPhone } else { // do something for iPad } 

Puede verificar utilizando el marco del elemento de windows XCUIApplication().windows.element(boundBy: 0).frame y verificar el tipo de dispositivo.

También puede establecer una extensión para XCUIDevice con una propiedad currentDevice :

 /// Device types public enum Devices: CGFloat { /// iPhone case iPhone4 = 480 case iPhone5 = 568 case iPhone7 = 667 case iPhone7Plus = 736 /// iPad - Portraite case iPad = 1024 case iPadPro = 1366 /// iPad - Landscape case iPad_Landscape = 768 case iPadPro_Landscape = 0 } /// Check current device extension XCUIDevice { public static var currentDevice:Devices { get { let orientation = XCUIDevice.shanetworking().orientation let frame = XCUIApplication().windows.element(boundBy: 0).frame switch orientation { case .landscapeLeft, .landscapeRight: return frame.width == 1024 ? .iPadPro_Landscape : Devices(rawValue: frame.width)! default: return Devices(rawValue: frame.height)! } } } } 

Uso

let currentDevice = XCUIDevice.currentDevice