cmd/dist,internal/platform: reenable the c-archive build mode on ios

Also fix misc/cgo/testcarchive to provide a missing CoreFoundation
dependency at link time.

Fixes #58221.
Updates #58172.
Updates #58225.

Change-Id: Ib8b6e52ed2914596615da4c427df2fe984722de6
Reviewed-on: https://go-review.googlesource.com/c/go/+/463752
Run-TryBot: Bryan Mills <bcmills@google.com>
Auto-Submit: Bryan Mills <bcmills@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Cherry Mui <cherryyz@google.com>
diff --git a/misc/cgo/testcarchive/carchive_test.go b/misc/cgo/testcarchive/carchive_test.go
index 30e12be..8a39c24 100644
--- a/misc/cgo/testcarchive/carchive_test.go
+++ b/misc/cgo/testcarchive/carchive_test.go
@@ -132,6 +132,15 @@
 		// in .text section.
 		cc = append(cc, "-Wl,-bnoobjreorder")
 	}
+	if GOOS == "ios" {
+		// Linking runtime/cgo on ios requires the CoreFoundation framework because
+		// x_cgo_init uses CoreFoundation APIs to switch directory to the app root.
+		//
+		// TODO(#58225): This special case probably should not be needed.
+		// runtime/cgo is a very low-level package, and should not provide
+		// high-level behaviors like changing the current working directory at init.
+		cc = append(cc, "-framework", "CoreFoundation")
+	}
 	libbase := GOOS + "_" + GOARCH
 	if runtime.Compiler == "gccgo" {
 		libbase = "gccgo_" + libgodir + "_fPIC"
diff --git a/src/cmd/dist/test.go b/src/cmd/dist/test.go
index b540984..35a9b50 100644
--- a/src/cmd/dist/test.go
+++ b/src/cmd/dist/test.go
@@ -1143,7 +1143,7 @@
 			return false
 		}
 		switch goos {
-		case "aix", "darwin", "windows":
+		case "aix", "darwin", "ios", "windows":
 			return true
 		case "linux":
 			switch goarch {
diff --git a/src/internal/platform/supported.go b/src/internal/platform/supported.go
index 857aff4..4c75b1d 100644
--- a/src/internal/platform/supported.go
+++ b/src/internal/platform/supported.go
@@ -101,7 +101,7 @@
 
 	case "c-archive":
 		switch goos {
-		case "aix", "darwin", "windows":
+		case "aix", "darwin", "ios", "windows":
 			return true
 		case "linux":
 			switch goarch {