Using Go Packages in iOS: A Developer’s Secret Sauce 🍝

Rajai Kumar
2 min readOct 19, 2024

--

If you can’t find a certain library in iOS but available in Go, you’re probably thinking, “Can I really use Go packages in iOS apps?” Yes, my friend — you can. Not only that, it’s actually simpler than you might think. So, put on your coding cap, and let’s dive into how you can integrate Go packages into your iOS app like a pro.

Step 1: Installing Go Mobile

Install Go if not available already.

https://go.dev/doc/install

The first thing you’ll need is Go Mobile, a Go project that enables Go packages to be used in mobile apps (iOS and Android).

To install it, you simply need to run:

go install golang.org/x/mobile/cmd/gomobile@latest
gomobile init

Now, you’re all set up to start writing Go for mobile devices.

Step 2: Wrapping Go Code for iOS

You’ve got Go Mobile ready. Now it’s time to wrap your Go code into something iOS-friendly. We’re going to use the xml2map package as an example here. This package makes parsing XML easy, which is great for apps dealing with lots of XML data.

Let’s go ahead and import the package in our Go code:

import "github.com/sbabiv/xml2map"

Once that’s done, you can use Go’s native functions to convert XML data into a map. Here’s a quick example of how you’d do it:

func ParseXMLData(xmlString string) (map[string]interface{}, error) {
return xml2map.NewDecoder(strings.NewReader(xmlString)).Decode()
}

Now, let’s create a Go mobile library. This will wrap our Go code so that Swift can call it. Run the following command to build your iOS framework:

gomobile bind -target=ios -o xml2map.xcframework

Step 3: Using the Go Package in Swift

Alright, now for the fun part. You’ve got your Go package bundled up into an iOS framework, and it’s time to import it into Swift.

  1. Open your Xcode project.
  2. Drag and drop the .xcframework file generated by gomobile into your project.
  3. Import the framework in Swift:
import YourGoFramework

Now, you can call your Go function in Swift just like any other Swift function:

let xmlString = "<note><to>Tove</to><from>Jani</from></note>"
do {
let result = try ParseXMLData(xmlString)
print(result)
} catch {
print("Error parsing XML: \(error)")
}

Boom! You just used Go in Swift. Feel like a wizard yet? 🧙‍♂️

--

--

Rajai Kumar
Rajai Kumar

Written by Rajai Kumar

I’m a workaholic iOS developer. I focus a lot on UX and product efficiancy.

No responses yet