diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go
index 5be807a..b0dedb9 100644
--- a/cmd/gomobile/bind_test.go
+++ b/cmd/gomobile/bind_test.go
@@ -216,6 +216,36 @@
 ln -s Versions/Current/Modules {{.Output}}.framework/Modules
 `))
 
+func TestBindIOSAll(t *testing.T) {
+	if !xcodeAvailable() {
+		t.Skip("Xcode is missing")
+	}
+	defer func() {
+		xout = os.Stderr
+		buildN = false
+		buildX = false
+		buildO = ""
+		buildTarget = ""
+		bindPrefix = ""
+	}()
+	buildN = true
+	buildX = true
+	buildO = "Asset.framework"
+	buildTarget = "ios"
+
+	buf := new(bytes.Buffer)
+	xout = buf
+	gopath = filepath.SplitList(goEnv("GOPATH"))[0]
+	if goos == "windows" {
+		os.Setenv("HOMEDRIVE", "C:")
+	}
+	cmdBind.flag.Parse([]string{"golang.org/x/mobile/asset"})
+	if err := runBind(cmdBind); err != nil {
+		t.Log(buf.String())
+		t.Fatal(err)
+	}
+}
+
 func TestBindWithGoModules(t *testing.T) {
 	if runtime.GOOS == "android" {
 		t.Skipf("gomobile and gobind are not available on %s", runtime.GOOS)
diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go
index bbb2dfb..4811ab7 100644
--- a/cmd/gomobile/build.go
+++ b/cmd/gomobile/build.go
@@ -358,8 +358,8 @@
 	}
 
 	// verify all archs are supported one while deduping.
-	isSupported := func(arch string) bool {
-		for _, a := range allArchs {
+	isSupported := func(os, arch string) bool {
+		for _, a := range allArchs(os) {
 			if a == arch {
 				return true
 			}
@@ -367,12 +367,17 @@
 		return false
 	}
 
+	targetOS := os
+	if os == "ios" {
+		targetOS = "darwin"
+	}
+
 	seen := map[string]bool{}
 	for _, arch := range archNames {
 		if _, ok := seen[arch]; ok {
 			continue
 		}
-		if !isSupported(arch) {
+		if !isSupported(os, arch) {
 			return "", nil, fmt.Errorf(`unsupported arch: %q`, arch)
 		}
 
@@ -380,12 +385,8 @@
 		archs = append(archs, arch)
 	}
 
-	targetOS := os
-	if os == "ios" {
-		targetOS = "darwin"
-	}
 	if all {
-		return targetOS, allArchs, nil
+		return targetOS, allArchs(os), nil
 	}
 	return targetOS, archs, nil
 }
diff --git a/cmd/gomobile/build_test.go b/cmd/gomobile/build_test.go
index 9d3fdcd..501175c 100644
--- a/cmd/gomobile/build_test.go
+++ b/cmd/gomobile/build_test.go
@@ -115,7 +115,8 @@
 `))
 
 func TestParseBuildTargetFlag(t *testing.T) {
-	archs := strings.Join(allArchs, ",")
+	androidArchs := strings.Join(allArchs("android"), ",")
+	iosArchs := strings.Join(allArchs("ios"), ",")
 
 	tests := []struct {
 		in        string
@@ -123,13 +124,13 @@
 		wantOS    string
 		wantArchs string
 	}{
-		{"android", false, "android", archs},
-		{"android,android/arm", false, "android", archs},
+		{"android", false, "android", androidArchs},
+		{"android,android/arm", false, "android", androidArchs},
 		{"android/arm", false, "android", "arm"},
 
-		{"ios", false, "darwin", archs},
-		{"ios,ios/arm", false, "darwin", archs},
-		{"ios/arm", false, "darwin", "arm"},
+		{"ios", false, "darwin", iosArchs},
+		{"ios,ios/arm64", false, "darwin", iosArchs},
+		{"ios/arm64", false, "darwin", "arm64"},
 		{"ios/amd64", false, "darwin", "amd64"},
 
 		{"", true, "", ""},
diff --git a/cmd/gomobile/env.go b/cmd/gomobile/env.go
index 868c114..c9484ff 100644
--- a/cmd/gomobile/env.go
+++ b/cmd/gomobile/env.go
@@ -22,11 +22,20 @@
 	androidArmNM string
 	darwinArmNM  string
 
-	allArchs = []string{"arm", "arm64", "386", "amd64"}
-
 	bitcodeEnabled bool
 )
 
+func allArchs(targetOS string) []string {
+	switch targetOS {
+	case "ios":
+		return []string{"arm64", "386", "amd64"}
+	case "android":
+		return []string{"arm", "arm64", "386", "amd64"}
+	default:
+		panic(fmt.Sprintf("unexpected target OS: %s", targetOS))
+	}
+}
+
 func buildEnvInit() (cleanup func(), err error) {
 	// Find gomobilepath.
 	gopath := goEnv("GOPATH")
@@ -132,14 +141,11 @@
 
 	darwinArmNM = "nm"
 	darwinEnv = make(map[string][]string)
-	for _, arch := range allArchs {
+	for _, arch := range allArchs("ios") {
 		var env []string
 		var err error
 		var clang, cflags string
 		switch arch {
-		case "arm":
-			env = append(env, "GOARM=7")
-			fallthrough
 		case "arm64":
 			clang, cflags, err = envClang("iphoneos")
 			cflags += " -miphoneos-version-min=" + buildIOSVersion
diff --git a/cmd/gomobile/init.go b/cmd/gomobile/init.go
index 0ada746..00b9a56 100644
--- a/cmd/gomobile/init.go
+++ b/cmd/gomobile/init.go
@@ -167,7 +167,7 @@
 		}
 	}
 
-	for _, arch := range allArchs {
+	for _, arch := range allArchs("android") {
 		t := ndk[arch]
 		abi := t.arch
 		if abi == "arm" {
