]> Cypherpunks repositories - gostls13.git/commitdiff
misc/ios: retry app install
authorElias Naur <elias.naur@gmail.com>
Wed, 2 May 2018 21:26:58 +0000 (23:26 +0200)
committerElias Naur <elias.naur@gmail.com>
Thu, 3 May 2018 07:45:46 +0000 (07:45 +0000)
Sometimes ideviceinstaller fails to install the app. Retry a few
times before giving up.

For the iOS builder.

Change-Id: Ib066ffd4f97ae8d22c0fa9a78ea4d04f67c17410
Reviewed-on: https://go-review.googlesource.com/111055
Run-TryBot: Elias Naur <elias.naur@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
misc/ios/go_darwin_arm_exec.go

index 6c5a913bc68ef5a338a1df13a8b46f03e07dd8be..985c82bf81448ba99b9d2e8c24077d9b314f0d92 100644 (file)
@@ -377,15 +377,25 @@ func findDeviceAppPath(bundleID string) (string, error) {
 }
 
 func install(appdir string) error {
-       cmd := idevCmd(exec.Command(
-               "ideviceinstaller",
-               "-i", appdir,
-       ))
-       if out, err := cmd.CombinedOutput(); err != nil {
-               os.Stderr.Write(out)
-               return fmt.Errorf("ideviceinstaller -i %q: %v", appdir, err)
+       attempt := 0
+       for {
+               cmd := idevCmd(exec.Command(
+                       "ideviceinstaller",
+                       "-i", appdir,
+               ))
+               if out, err := cmd.CombinedOutput(); err != nil {
+                       // Sometimes, installing the app fails for some reason.
+                       // Give the device a few seconds and try again.
+                       if attempt < 5 {
+                               time.Sleep(5 * time.Second)
+                               attempt++
+                               continue
+                       }
+                       os.Stderr.Write(out)
+                       return fmt.Errorf("ideviceinstaller -i %q: %v (%d attempts)", appdir, err, attempt)
+               }
+               return nil
        }
-       return nil
 }
 
 func idevCmd(cmd *exec.Cmd) *exec.Cmd {