diff --git a/cmd/gomobile/bind_iosapp.go b/cmd/gomobile/bind_iosapp.go index f49a068..91d0de3 100644 --- a/cmd/gomobile/bind_iosapp.go +++ b/cmd/gomobile/bind_iosapp.go @@ -38,14 +38,19 @@ func goIOSBind(gobind string, pkgs []*packages.Package, archs []string) error { srcDir := filepath.Join(tmpdir, "src", "gobind") - name := pkgs[0].Name - title := strings.Title(name) - - if buildO != "" && !strings.HasSuffix(buildO, ".framework") { - return fmt.Errorf("static framework name %q missing .framework suffix", buildO) - } + var name string + var title string if buildO == "" { + name = pkgs[0].Name + title = strings.Title(name) buildO = title + ".framework" + } else { + if !strings.HasSuffix(buildO, ".framework") { + return fmt.Errorf("static framework name %q missing .framework suffix", buildO) + } + base := filepath.Base(buildO) + name = base[:len(base)-len(".framework")] + title = strings.Title(name) } fileBases := make([]string, len(pkgs)+1) diff --git a/cmd/gomobile/bind_test.go b/cmd/gomobile/bind_test.go index ba62b86..5be807a 100644 --- a/cmd/gomobile/bind_test.go +++ b/cmd/gomobile/bind_test.go @@ -117,6 +117,7 @@ func TestBindIOS(t *testing.T) { tests := []struct { prefix string + out string }{ { // empty prefix @@ -124,9 +125,15 @@ func TestBindIOS(t *testing.T) { { prefix: "Foo", }, + { + out: "Abcde.framework", + }, } for _, tc := range tests { bindPrefix = tc.prefix + if tc.out != "" { + buildO = tc.out + } buf := new(bytes.Buffer) xout = buf @@ -148,10 +155,12 @@ func TestBindIOS(t *testing.T) { data := struct { outputData + Output string Prefix string BitcodeEnabled bool }{ outputData: output, + Output: buildO[:len(buildO)-len(".framework")], Prefix: tc.prefix, BitcodeEnabled: bitcodeEnabled, } @@ -186,25 +195,25 @@ var bindIOSTmpl = template.Must(template.New("output").Parse(`GOMOBILE={{.GOPATH WORK=$WORK GOOS=darwin CGO_ENABLED=1 gobind -lang=go,objc -outdir=$WORK -tags=ios{{if .Prefix}} -prefix={{.Prefix}}{{end}} golang.org/x/mobile/asset mkdir -p $WORK/src -PWD=$WORK/src GOARM=7 GOOS=darwin GOARCH=arm CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_CXXFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_ENABLED=1 GOPATH=$WORK:$GOPATH go build -tags ios -x -buildmode=c-archive -o $WORK/asset-arm.a ./gobind -rm -r -f "Asset.framework" -mkdir -p Asset.framework/Versions/A/Headers -ln -s A Asset.framework/Versions/Current -ln -s Versions/Current/Headers Asset.framework/Headers -ln -s Versions/Current/Asset Asset.framework/Asset -xcrun lipo -create -arch armv7 $WORK/asset-arm.a -o Asset.framework/Versions/A/Asset -cp $WORK/src/gobind/{{.Prefix}}Asset.objc.h Asset.framework/Versions/A/Headers/{{.Prefix}}Asset.objc.h -mkdir -p Asset.framework/Versions/A/Headers -cp $WORK/src/gobind/Universe.objc.h Asset.framework/Versions/A/Headers/Universe.objc.h -mkdir -p Asset.framework/Versions/A/Headers -cp $WORK/src/gobind/ref.h Asset.framework/Versions/A/Headers/ref.h -mkdir -p Asset.framework/Versions/A/Headers -mkdir -p Asset.framework/Versions/A/Headers -mkdir -p Asset.framework/Versions/A/Resources -ln -s Versions/Current/Resources Asset.framework/Resources -mkdir -p Asset.framework/Resources -mkdir -p Asset.framework/Versions/A/Modules -ln -s Versions/Current/Modules Asset.framework/Modules +PWD=$WORK/src GOARM=7 GOOS=darwin GOARCH=arm CC=iphoneos-clang CXX=iphoneos-clang++ CGO_CFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_CXXFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_LDFLAGS=-isysroot=iphoneos -miphoneos-version-min=7.0 {{if .BitcodeEnabled}}-fembed-bitcode {{end}}-arch armv7 CGO_ENABLED=1 GOPATH=$WORK:$GOPATH go build -tags ios -x -buildmode=c-archive -o $WORK/{{.Output}}-arm.a ./gobind +rm -r -f "{{.Output}}.framework" +mkdir -p {{.Output}}.framework/Versions/A/Headers +ln -s A {{.Output}}.framework/Versions/Current +ln -s Versions/Current/Headers {{.Output}}.framework/Headers +ln -s Versions/Current/{{.Output}} {{.Output}}.framework/{{.Output}} +xcrun lipo -create -arch armv7 $WORK/{{.Output}}-arm.a -o {{.Output}}.framework/Versions/A/{{.Output}} +cp $WORK/src/gobind/{{.Prefix}}Asset.objc.h {{.Output}}.framework/Versions/A/Headers/{{.Prefix}}Asset.objc.h +mkdir -p {{.Output}}.framework/Versions/A/Headers +cp $WORK/src/gobind/Universe.objc.h {{.Output}}.framework/Versions/A/Headers/Universe.objc.h +mkdir -p {{.Output}}.framework/Versions/A/Headers +cp $WORK/src/gobind/ref.h {{.Output}}.framework/Versions/A/Headers/ref.h +mkdir -p {{.Output}}.framework/Versions/A/Headers +mkdir -p {{.Output}}.framework/Versions/A/Headers +mkdir -p {{.Output}}.framework/Versions/A/Resources +ln -s Versions/Current/Resources {{.Output}}.framework/Resources +mkdir -p {{.Output}}.framework/Resources +mkdir -p {{.Output}}.framework/Versions/A/Modules +ln -s Versions/Current/Modules {{.Output}}.framework/Modules `)) func TestBindWithGoModules(t *testing.T) {