diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go index 3b36502..c1e9957 100644 --- a/cmd/gomobile/build.go +++ b/cmd/gomobile/build.go @@ -14,7 +14,6 @@ import ( "os" "os/exec" "regexp" - "runtime" "strings" ) @@ -110,8 +109,8 @@ func runBuild(cmd *command) (err error) { } case "darwin": // TODO: use targetArchs? - if runtime.GOOS != "darwin" { - return fmt.Errorf("-target=ios requires darwin host") + if !xcodeAvailable() { + return fmt.Errorf("-target=ios requires XCode") } if pkg.Name != "main" { if err := goBuild(pkg.ImportPath, darwinArmEnv); err != nil { diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go index fbddaba..e96848b 100644 --- a/cmd/gomobile/env.go +++ b/cmd/gomobile/env.go @@ -149,7 +149,7 @@ func envInit() (err error) { } } - if runtime.GOOS != "darwin" { + if !xcodeAvailable() { return nil } @@ -378,3 +378,8 @@ var ndk = ndkConfig{ minGoVer: go1_6, }, } + +func xcodeAvailable() bool { + _, err := exec.LookPath("xcrun") + return err == nil +} diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go index 5b8a5e0..120a9bb 100644 --- a/cmd/gomobile/init.go +++ b/cmd/gomobile/init.go @@ -315,8 +315,8 @@ var commonPkgs = []string{ } func installDarwin() error { - if goos != "darwin" { - return nil // Only build iOS compilers on OS X. + if !xcodeAvailable() { + return nil } if err := installStd(darwinArmEnv); err != nil { return err diff --git a/cmd/gomobile/version.go b/cmd/gomobile/version.go index 5ce4551..08bd317 100644 --- a/cmd/gomobile/version.go +++ b/cmd/gomobile/version.go @@ -51,7 +51,7 @@ func runVersion(cmd *command) (err error) { // Supported platforms platforms := "android" - if goos == "darwin" { + if xcodeAvailable() { platforms = "android,ios" }