2016-08-11 2 views
8

zu Testzwecken (Erstellen eines Screenshots einer lokalen Benachrichtigung) Ich muss in der Lage sein, das Gerät (Simulator) aus Code (entweder Testcode oder App-Code) zu sperren. Ich habe ein paar Antworten von hier (GSEventLockDevice) angeschaut, aber sie sind ziemlich alt und funktionierte nicht für michiOS, Sperren des Geräts von Code

+0

Sie können ein Apple-Skript erstellen, das das tut und in Ihrem Code verwendet. (nicht von iOS, aber da es ein Simulator ist, können Sie es außerhalb Ihres Projektcodes ausführen) http://apple.stackexchange.com/questions/135728/using-applescript-to-lock-screen –

+0

Ich möchte es ein Teil meiner Testsuite, ist das möglich? – kap

+0

Das Ausführen von Apple Skript Skript von einem iOS-Projekt ist keine Option, soweit ich weiß. Sie können eine Shelldatei erstellen, die xcodebuild ausführt, auf der Ihre Testsuite ausgeführt wird, und gleichzeitig ein Apple-Skript ausführen. https://developer.apple.com/library/prerelease/content/documentation/DeveloperTools/Conceptual/testing_with_xcode/chapters/08-automation.html –

Antwort

5

Es gibt eine private Methode in XCUIDevice, so dass Sie Gerät/Simulator damit sperren können.

Beispiel für Swift 3:

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) 
    } 
} 

Und wird so etwas wie diese erhalten:

enter image description here

Ich habe keine Erfahrung mit Snapshot-Tool, das Sie verwenden, aber Sie müssen wissen, dass sich bewegenden Der Sperrstatus benötigt Zeit. Es kann daher sinnvoll sein, vor der Erstellung des Snapshots etwas zu warten (Sie können den folgenden Code verwenden):

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

Auch können Sie auf Springboard am Ende des Tests zurückzukehren unter der Rufnummer (iOS 10 only):

XCUIDevice.shared().press(.home) 

Hoffe, es hilft!

+0

Спасибо большое! – kap

+1

nur FYI, habe ich XCUIDevice.sharedDevice.performSelector („pressLockButton“) – kap

+0

über Selektoren falsch war, wird meine Antwort aktualisieren. Danke! –

Verwandte Themen