gomobileでiOS用のライブラリをビルドするまで

$ cd
$ brew uninstall go
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
$ vi .zprofile.local
# gvm
[[ -s "$HOME/.gvm/scripts/gvm" ]] && source "$HOME/.gvm/scripts/gvm"
  • まず、gomobileはGo 1.5以降が必要なので、HomebrewをやめてgvmでGoのバージョン管理をする。
$ source .zprofile
$ gvm install go1.4.2
$ gvm use go1.4.2 --default
$ GOROOT_BOOTSTRAP=$GOROOT gvm install go1.5beta2
$ gvm use go1.5beta2 --default
$ go get golang.org/x/mobile/cmd/gomobile
$ gomobile init -v
  • Go 1.5のインストールにはGo 1.4以降が必要なので先に1.4.2をインストールする。
  • その後GOROOT_BOOTSTRAPで1.4.2のGOROOTを指定して1.5beta2をインストールする。
  • gomobile initでiOSやAndroid向けにツールチェーンをインストールしたり標準ライブラリをビルドしたりしているようだ。
$ cd $GOROOT/src
$ mkdir gomobile_playground && cd $_
$ mkdir hello
$ vi hello/hello.go
package hello

func World() string {
    return "Hello, world!"
}
  • helloというパッケージをとりあえず書いてみる。
$ cd hello
$ gomobile bind -target ios
$ ls
hello.framework hello.go
  • gomobile bind -target iosでパッケージをiOS用のフレームワークにビルドする。
// Objective-C API for talking to github.com/naoty/gomobile_playground/hello Go package.
//   gobind -lang=objc github.com/naoty/gomobile_playground/hello
//
// File is generated by gobind. Do not edit.

#ifndef __GoHello_H__
#define __GoHello_H__

#include <Foundation/Foundation.h>

FOUNDATION_EXPORT NSString* GoHelloWorld();

#endif
  • ヘッダーファイルを見てみると、確かに文字列を返す関数が定義されているようだ。