iOS,通过代码锁定设备

iOS, locking the device from code

出于测试目的(制作本地通知的屏幕截图)我需要能够从代码(测试代码或应用程序代码)锁定设备(模拟器)。 我看过这里的几个答案 (GSEventLockDevice),但它们很旧,对我不起作用

XCUIDevice 中有一个私有方法,所以你可以使用它来锁定device/simulator。

Swift3 的示例:

import XCTest

class LockTests: XCTestCase {
  func testExample() {
    XCUIDevice.shared().perform(NSSelectorFromString("pressLockButton"))

    let localNotification = UILocalNotification()
    localNotification.fireDate = Date(timeIntervalSinceNow: 2)
    localNotification.alertBody = "This is local notification"
    localNotification.timeZone = NSTimeZone.local
    localNotification.category = "Message"
    UIApplication.shared.scheduleLocalNotification(localNotification)
  }
}

并且会收到这样的东西:

我没有使用过你使用的快照工具,但你需要知道进入锁定状态需要时间,所以在创建快照之前等待一段时间可能会有用(你可以使用这样的代码):

let date = Date(timeIntervalSinceNow: 3)
while date.timeIntervalSinceNow > 0 {
  CFRunLoopRunInMode(CFRunLoopMode.defaultMode, 0.1, true)
}

此外,您可以在测试结束时通过调用(iOS 10)return 跳板:

XCUIDevice.shared().press(.home)

希望对您有所帮助!