diff --git a/cmd/gomobile/build.go b/cmd/gomobile/build.go
index 156feb4..727a7c7 100644
--- a/cmd/gomobile/build.go
+++ b/cmd/gomobile/build.go
@@ -81,6 +81,10 @@
 	ctx.GOARCH = targetArchs[0]
 	ctx.GOOS = targetOS
 
+	if ctx.GOOS == "darwin" {
+		ctx.BuildTags = append(ctx.BuildTags, "ios")
+	}
+
 	switch len(args) {
 	case 0:
 		pkg, err = ctx.ImportDir(cwd, build.ImportComment)
diff --git a/cmd/gomobile/build_darwin_test.go b/cmd/gomobile/build_darwin_test.go
index 3b33832..81a607e 100644
--- a/cmd/gomobile/build_darwin_test.go
+++ b/cmd/gomobile/build_darwin_test.go
@@ -13,75 +13,92 @@
 )
 
 func TestIOSBuild(t *testing.T) {
-	buf := new(bytes.Buffer)
 	defer func() {
 		xout = os.Stderr
 		buildN = false
 		buildX = false
 	}()
-	xout = buf
 	buildN = true
 	buildX = true
-	buildO = "basic.app"
 	buildTarget = "ios"
 	gopath = filepath.SplitList(goEnv("GOPATH"))[0]
-	cmdBuild.flag.Parse([]string{"golang.org/x/mobile/example/basic"})
 	oldTags := ctx.BuildTags
 	ctx.BuildTags = []string{"tag1"}
 	defer func() {
 		ctx.BuildTags = oldTags
 	}()
-	err := runBuild(cmdBuild)
-	if err != nil {
-		t.Log(buf.String())
-		t.Fatal(err)
-	}
-
-	teamID, err := detectTeamID()
-	if err != nil {
-		t.Fatalf("detecting team ID failed: %v", err)
-	}
-
-	data := struct {
-		outputData
-		TeamID string
+	tests := []struct {
+		pkg  string
+		main bool
 	}{
-		outputData: defaultOutputData(),
-		TeamID:     teamID,
+		{"golang.org/x/mobile/example/basic", true},
+		{"golang.org/x/mobile/bind/testdata/testpkg", false},
 	}
+	for _, test := range tests {
+		buf := new(bytes.Buffer)
+		xout = buf
+		if test.main {
+			buildO = "basic.app"
+		} else {
+			buildO = ""
+		}
+		cmdBuild.flag.Parse([]string{test.pkg})
+		err := runBuild(cmdBuild)
+		if err != nil {
+			t.Log(buf.String())
+			t.Fatal(err)
+		}
 
-	got := filepath.ToSlash(buf.String())
+		teamID, err := detectTeamID()
+		if err != nil {
+			t.Fatalf("detecting team ID failed: %v", err)
+		}
 
-	wantBuf := new(bytes.Buffer)
+		data := struct {
+			outputData
+			TeamID string
+			Pkg    string
+			Main   bool
+		}{
+			outputData: defaultOutputData(),
+			TeamID:     teamID,
+			Pkg:        test.pkg,
+			Main:       test.main,
+		}
 
-	if err := iosBuildTmpl.Execute(wantBuf, data); err != nil {
-		t.Fatalf("computing diff failed: %v", err)
-	}
+		got := filepath.ToSlash(buf.String())
 
-	diff, err := diff(got, wantBuf.String())
+		wantBuf := new(bytes.Buffer)
 
-	if err != nil {
-		t.Fatalf("computing diff failed: %v", err)
-	}
-	if diff != "" {
-		t.Errorf("unexpected output:\n%s", diff)
+		if err := iosBuildTmpl.Execute(wantBuf, data); err != nil {
+			t.Fatalf("computing diff failed: %v", err)
+		}
+
+		diff, err := diff(got, wantBuf.String())
+
+		if err != nil {
+			t.Fatalf("computing diff failed: %v", err)
+		}
+		if diff != "" {
+			t.Errorf("unexpected output:\n%s", diff)
+		}
 	}
 }
 
 var iosBuildTmpl = template.Must(infoplistTmpl.New("output").Parse(`GOMOBILE={{.GOPATH}}/pkg/gomobile
-WORK=$WORK
+WORK=$WORK{{if .Main}}
 mkdir -p $WORK/main.xcodeproj
 echo "{{.Xproj}}" > $WORK/main.xcodeproj/project.pbxproj
 mkdir -p $WORK/main
 echo "{{template "infoplist" .Xinfo}}" > $WORK/main/Info.plist
 mkdir -p $WORK/main/Images.xcassets/AppIcon.appiconset
-echo "{{.Xcontents}}" > $WORK/main/Images.xcassets/AppIcon.appiconset/Contents.json
-GOARM=7 GOOS=darwin GOARCH=arm CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go build -tags tag1 ios -x -ldflags=-w -o=$WORK/arm golang.org/x/mobile/example/basic
-GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go build -tags tag1 ios -x -ldflags=-w -o=$WORK/arm64 golang.org/x/mobile/example/basic
-GOOS=darwin GOARCH=386 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch i386 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch i386 CGO_ENABLED=1 go build -tags tag1 ios -x -ldflags=-w -o=$WORK/386 golang.org/x/mobile/example/basic
-GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go build -tags tag1 ios -x -ldflags=-w -o=$WORK/amd64 golang.org/x/mobile/example/basic
+echo "{{.Xcontents}}" > $WORK/main/Images.xcassets/AppIcon.appiconset/Contents.json{{end}}
+GOARM=7 GOOS=darwin GOARCH=arm CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch armv7 CGO_ENABLED=1 go build -tags tag1 ios -x {{if .Main}}-ldflags=-w -o=$WORK/arm {{end}}{{.Pkg}}
+GOOS=darwin GOARCH=arm64 CC=clang-iphoneos CXX=clang-iphoneos CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=6.1 -arch arm64 CGO_ENABLED=1 go build -tags tag1 ios -x {{if .Main}}-ldflags=-w -o=$WORK/arm64 {{end}}{{.Pkg}}
+GOOS=darwin GOARCH=386 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch i386 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch i386 CGO_ENABLED=1 go build -tags tag1 ios -x {{if .Main}}-ldflags=-w -o=$WORK/386 {{end}}{{.Pkg}}
+GOOS=darwin GOARCH=amd64 CC=clang-iphonesimulator CXX=clang-iphonesimulator CGO_CFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_LDFLAGS=-isysroot=iphonesimulator -mios-simulator-version-min=6.1 -arch x86_64 CGO_ENABLED=1 go build -tags tag1 ios -x {{if .Main}}-ldflags=-w -o=$WORK/amd64 {{end}}{{.Pkg}}{{if .Main}}
 xcrun lipo -o $WORK/main/main -create $WORK/arm $WORK/arm64 $WORK/386 $WORK/amd64
 mkdir -p $WORK/main/assets
 xcrun xcodebuild -configuration Release -project $WORK/main.xcodeproj -allowProvisioningUpdates DEVELOPMENT_TEAM={{.TeamID}}
-mv $WORK/build/Release-iphoneos/main.app basic.app
+mv $WORK/build/Release-iphoneos/main.app basic.app{{end}}
 `))
diff --git a/cmd/gomobile/build_iosapp.go b/cmd/gomobile/build_iosapp.go
index 0b0ff2c..9cc22ab 100644
--- a/cmd/gomobile/build_iosapp.go
+++ b/cmd/gomobile/build_iosapp.go
@@ -62,8 +62,6 @@
 		}
 	}
 
-	ctx.BuildTags = append(ctx.BuildTags, "ios")
-
 	// We are using lipo tool to build multiarchitecture binaries.
 	cmd := exec.Command(
 		"xcrun", "lipo",
