gomobileでiOSアプリをビルドする手順まとめ


iOSアプリをgomobile経由でビルドできるようになったので手順をまとめました。

必要な環境

  • iOS9.0のデバイス(iOS9.1はNGでした)
  • OS-X Yosemite以降(El-Capitan OK)

あらかじめやっておく作業

XCode7のインストール

image

コード署名用証明書の作成(Developer Program非加入の場合の手順)

  • Xcode7を起動してPreferencesを開く。
  • Accounts項目に自分のアカウントがあることを確認して、無ければ追加します。
  • 自分のアカウントの「View Details…」をクリックして「Sigining Identities」一覧を表示。
  • 「iOS Development」の「Create」ボタンをクリックします。(ボタンが見えない場合は作成済み)
  • 作成された証明書の確認はキーチェーンアクセス.appで自分の証明書一覧にあります。
  • うまくいかない場合はキーチェーンアクセスから削除してやり直すとうまくいく場合があります。

go.mobileのインストール

go get -u golang.org/x/mobile/cmd/...

ios-deployツールのインストール

npm install -g ios-deploy

サンプルのビルド

gomobileのiOSターゲットモードは*.appまでを一気に作成しようとしますが、 実際にはコード署名やターゲットデバイス指定が固定っぽい(指定方法がまだよくわかっていないだけかも)ため、 最終的にエラーで終了してしまいます。 これをテンポラリフォルダで行うため消さないようにワーキングフォルダを残してXcode7で開き直します。

cd $GOPAH/golang.org/x/mobile/example/sprite
eval $(gomobile build -target ios -work .); open $WORK/main.xcodeproj

iOSアプリではユニークなbundle-idをアプリごとに決めなければなりませんが、 gomobileのversion==+afa8a11ではまだ「org.golang.todo.パッケージ名」で プレフィックスが固定のようです。衝突がある場合ここをXcode上で修正する必要があります。 (暫定的な回避方法としてはmainパッケージのフォルダ名を珍しい名前にしておきます。)

改めてXcode上でターゲットデバイスにPCに接続した端末を指定し直してビルドしようとすると、 コード署名に問題があるからfixするかどうかダイアログが出ますので「Fix issues」をクリック。 自分のアカウントを選択します。

ビルドに成功すればターゲットデバイスに「アプリ「と上記で選択した「AppleIDアカウント名の 開発元プロファイル」がインストールされます。 ターゲットデバイス上でそのプロファイルを信頼する確認操作を行ってください。 「設定/一般/プロファイル」の一覧に表示されるプロファイルを選択して「信頼する」をタップしてください。 プロファイルの信頼操作は初回だけで大丈夫です。

動作サンプル:

  

以上の操作を一度でも実施しておけば、以後は「gomobile build -target ios .」だけでsprite.appが作成できるようになる模様。(「org.golang.todo.パッケージ名」で衝突がない場合に限る)

以下のコマンドにてターゲットデバイスにインストールできます。

ios-deploy --bundle sprite.app

結論

ずいぶんお手軽にiOSアプリの開発とテストができるようになりますね!

おまけ

ここにiOSアプリとAndroidアプリをビルドするプロジェクトテンプレート置いておきますね・・・。

https://github.com/nobonobo/gomobile-sample

あと、 #KUG2 っていうイベントで「Goでモバイルアプリを作ろう!」というトークをした時の資料。

http://golang.rdy.jp/GoMobileStrategy.svg

追記

Xcode7.1にアップしたら「gomobile init」をやり直す必要がありました。 また、プロジェクトテンプレートも対応可能なように修正を入れました!

iOS9.1でもgomobileは使えますよ!