iPhone の実機でテスト環境に接続する

API サーバと通信するタイプの iPhone アプリ開発において、実機を使う必要があったので環境を構築しました。iPhone 実機上のアプリと Vagrant のゲスト OS 上で動作している API サーバを通信させます。

実現したいこと

  • Vagrant のゲスト OS で動いている API サーバに接続する
  • 接続先を簡単に切り替える
  • 配布用と同じ設定でアプリをビルドする

アプリや API サーバの環境に応じた設定変更はなるべく避けて、本番環境と同じバイナリをテストできるようにする。アプリと API サーバが HTTPS 接続しているので、別のホスト名を使うとそれ用の証明書を用意したり切り替えたりするのが面倒なのも理由のひとつ。

手順

DNS サーバで本番環境の替わりにテスト環境のホストを解決させることで、テスト環境に接続させる方法を選びました。

Vagrant のゲスト OS をローカルネットワークに公開する

ゲスト OS が iPhone から見える状態にするために、Vagrantfile に次の設定を追加する。

config.vm.network :public_network, ip: "192.168.0.101", :bridge => "en0: Wi-Fi (AirPort)"

bridge 名は最初適当に指定しておけば下記のように起動時に聞かれるのでそれを設定すれば良い。

[default] Specific bridge 'xxxx' not found. You may be asked to specify
which network to bridge to.
[default] Available bridged network interfaces:
1) en0: Wi-Fi (AirPort)
2) en1: Thunderbolt 1
3) en2: Thunderbolt 2
4) bridge0
5) p2p0
What interface should the network bridge to?

DNS サーバを設定する

DNS サーバとして DNSMasq を使った。DNSMasq は設定が簡単。

インストール

brew install dnsmasq

設定ファイルを用意 (api.sakenowa.com で 192.168.0.101 を返す)

sudo echo “address=/api.sakenowa.com/192.168.0.101” > /usr/local/etc/dnsmasq.conf 

起動

sudo cp `brew --prefix dnsmasq`/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons

sudo launchctl load /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist

iPhone 側で DNS を切り替える

Wi-Fi の設定で DNSMasq を参照するように変更する。

これでテスト環境に接続するようになる。

まとめ

  • iPhone の DNS の設定を変更するだけで簡単にテスト環境に接続できた
  • DNSMasq は手軽に使える
  • どこに接続しているかわかるようにアプリの色を変えたら便利かも?