run-safari/run-webkit-app fail to quit iOS simulator after Xcode installation
authoraakash_jain@apple.com <aakash_jain@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Jun 2016 03:57:23 +0000 (03:57 +0000)
committeraakash_jain@apple.com <aakash_jain@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 13 Jun 2016 03:57:23 +0000 (03:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=158651
rdar://problem/26499824

Reviewed by Daniel Bates.

This change is to make our tools more robust. Sometimes run-safari/run-webkit-app fails
to start the tests as one of the first thing these scripts do is to relaunch iOS Simulators,
and in process call quitIOSSimulator. In case the Simulator is not registered in LaunchServices
for some reason, quitIOSSimulator fails and the script stops. This change will make the scripts
still continue when they fail to quit iOS Simuator, and modify the way Simulator is opened,
so that Simulator is implicitly registered with LaunchServices while opening it.

* Scripts/webkitdirs.pm:
(relaunchIOSSimulator):
Launch iOS Simulator using complete path. Partially reverting http://trac.webkit.org/changeset/184202.
(quitIOSSimulator):
Do not die if quitting ios Simulator fails, so that relaunchIOSSimulator can still
attempt to launch the simulator.
(waitUntilIOSSimulatorDeviceIsInState):
Added a FIXME.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@201986 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Tools/ChangeLog
Tools/Scripts/webkitdirs.pm

index e23a41a..611493a 100644 (file)
@@ -1,3 +1,27 @@
+2016-06-12  Aakash Jain  <aakash_jain@apple.com>
+
+        run-safari/run-webkit-app fail to quit iOS simulator after Xcode installation
+        https://bugs.webkit.org/show_bug.cgi?id=158651
+        rdar://problem/26499824
+
+        Reviewed by Daniel Bates.
+
+        This change is to make our tools more robust. Sometimes run-safari/run-webkit-app fails 
+        to start the tests as one of the first thing these scripts do is to relaunch iOS Simulators,
+        and in process call quitIOSSimulator. In case the Simulator is not registered in LaunchServices
+        for some reason, quitIOSSimulator fails and the script stops. This change will make the scripts
+        still continue when they fail to quit iOS Simuator, and modify the way Simulator is opened, 
+        so that Simulator is implicitly registered with LaunchServices while opening it.
+
+        * Scripts/webkitdirs.pm:
+        (relaunchIOSSimulator):
+        Launch iOS Simulator using complete path. Partially reverting http://trac.webkit.org/changeset/184202.
+        (quitIOSSimulator):
+        Do not die if quitting ios Simulator fails, so that relaunchIOSSimulator can still 
+        attempt to launch the simulator.
+        (waitUntilIOSSimulatorDeviceIsInState):
+        Added a FIXME.
+
 2016-06-11  Myles C. Maxfield  <mmaxfield@apple.com>
 
         Addressing post-review comments after r201978.
index a6dda81..4a8493a 100755 (executable)
@@ -2252,6 +2252,7 @@ sub waitUntilIOSSimulatorDeviceIsInState($$)
 {
     my ($deviceUDID, $waitUntilState) = @_;
     my $device = iosSimulatorDeviceByUDID($deviceUDID);
+    # FIXME: We should add a maximum time limit to wait here.
     while ($device->{state} ne $waitUntilState) {
         usleep(500 * 1000); # Waiting 500ms between file system polls does not make script run-safari feel sluggish.
         $device = iosSimulatorDeviceByUDID($deviceUDID);
@@ -2278,8 +2279,9 @@ sub relaunchIOSSimulator($)
     quitIOSSimulator($simulatedDevice->{UDID});
 
     # FIXME: <rdar://problem/20916140> Switch to using CoreSimulator.framework for launching and quitting iOS Simulator
-    my $iosSimulatorBundleID = "com.apple.iphonesimulator";
-    system("open", "-b", $iosSimulatorBundleID, "--args", "-CurrentDeviceUDID", $simulatedDevice->{UDID}) == 0 or die "Failed to open $iosSimulatorBundleID: $!";
+    chomp(my $developerDirectory = $ENV{DEVELOPER_DIR} || `xcode-select --print-path`); 
+    my $iosSimulatorPath = File::Spec->catfile($developerDirectory, "Applications", "Simulator.app"); 
+    system("open", "-a", $iosSimulatorPath, "--args", "-CurrentDeviceUDID", $simulatedDevice->{UDID}) == 0 or die "Failed to open $iosSimulatorPath: $!"; 
 
     waitUntilIOSSimulatorDeviceIsInState($simulatedDevice->{UDID}, SIMULATOR_DEVICE_STATE_BOOTED);
 }
@@ -2288,7 +2290,11 @@ sub quitIOSSimulator(;$)
 {
     my ($waitForShutdownOfSimulatedDeviceUDID) = @_;
     # FIXME: <rdar://problem/20916140> Switch to using CoreSimulator.framework for launching and quitting iOS Simulator
-    exitStatus(system {"osascript"} "osascript", "-e", 'tell application id "com.apple.iphonesimulator" to quit') == 0 or die "Failed to quit iOS Simulator: $!";
+    if (exitStatus(system {"osascript"} "osascript", "-e", 'tell application id "com.apple.iphonesimulator" to quit')) {
+        # osascript returns a non-zero exit status if Simulator.app is not registered in LaunchServices.
+        return;
+    }
+
     if (!defined($waitForShutdownOfSimulatedDeviceUDID)) {
         return;
     }