0

iOS ネイティブ アプリがあります。

Rails (4.1.4) で開発された API があります。これはhttp://api.myapp.local:5000にあります。

/etc/hosts を構成して、基本的な API / Web 開発を行いましたが、問題なくすべてが完全に機能しています。

私の問題は、WiFi 経由で iOS アプリ (シミュレーターではなく実際のデバイス) を介してローカル API を使用したいことです。

これが私がテストしたものです(動作しません)

  • シンWebサーバーでローカルen0 inet ipでxip.ioを使用します。
  • pow webserver を使用して、ローカルの en0 inet ip で xip.io を使用します。
  • パブリックIP経由で接続するためにポート転送を行いました

実際、問題は基本的にサブドメインが原因です。アプリにサブドメインがない場合、上記のすべてのソリューションが機能します。(この方法でローカル API にアクセスできますが、これは私が望んでいるものではありません)

私の問題は、iOS アプリに「このサブドメインを使用して、この IP に接続する」と指示できないことです。

私はおそらくネットワークに関して知識が不足していますが、iOS アプリでローカル Web サーバーをテストする必要があるため、この問題に本当に悩まされています。

私のルートファイルは次のようになります。

constraints subdomain: 'api', format: 'json' do
  scope module: :api do
    scope module: :v1, constraints: ApiConstraints.new(version: 1, default: true) do
      resources :packs, only: [:index, :show]
    end
  end
end
4

2 に答える 2

0

デバイスでテストしているため、サーバーをホストしているコンピューターへのネットワーク アクセスはありません。

Charlesなどのアプリケーションを使用してプロキシを設定できます。WireSharkもあります。どちらかを設定する際に、電話の Wi-Fi 設定を介してデバイスをコンピューターに向けます。

どちらのオプションも、セットアップに時間がかかり、基本的なネットワークの理解が必要です。

すっごく...

それに代わる方法は、iOS シミュレーターからテストすることです。これにはセットアップが必要ないため、このルートを強くお勧めします。リクエストをhttp://api.myapp.local:5000に向けるだけです。

最後のオプションは、「ステージング」サーバーをセットアップし、リクエストをそのドメインに向けてから、アプリをデバイスにコンパイルすることです。

于 2014-08-08T23:53:54.877 に答える
0

ローカル API サーバーにアクセスするには、同じネットワーク上で API を実行しているコンピューターの「ローカル」IP アドレス (またはホスト名) に接続する必要があります。そのため、コンピュータと iPhone が同じ WiFi ネットワーク上にある場合、それらは通信できます。

ローカル IP アドレスを取得するには、次を使用できますifconfig

$ ifconfig en0 | grep "inet "
    inet 10.0.0.14 netmask 0xffffff00 broadcast 10.0.0.255

この場合、私のローカル IP は 10.0.0.14 です。これで、iOS アプリはhttp://10.0.0.14:5000に対して HTTP 要求を行うことができます。ただし、使いやすいと思いますhostname

$ hostname
Andrews-MacBook-Pro.local

これで、iOS アプリはhttp://Andrews-MacBook-Pro.local:5000に対して HTTP リクエストを行うことができます。

ただし、Rails アプリは API サブドメインに基づいて API リクエストをルーティングするため、IP アドレスだけを使用することはできません。

1 つのオプションは、iOS アプリが要求を行うときにホストを HTTP ヘッダーとして指定することです。curl を使用した例を次に示します。

curl -H "Host: api.myapp.local" http://10.0.0.1:5000

ただし、コードベース全体で API リクエストをどのように実装したかによっては、この HTTP ヘッダーをあらゆる場所で指定するのは大変な作業になる場合があります。それができない場合は、iPhone の「/etc/hosts」ファイルを変更できないため、他の唯一のオプションは、このローカル IP アドレスを指すパブリックにアクセス可能なドメインを作成することです。必要な作業は次のとおりです。

  1. ドメインを登録します。benjiox-dev.com のようなもの
  2. 次のいずれかを使用して、ドメインの DNS を「api」サブドメインで構成します。
    • コンピューターのローカル IP アドレスを指す A レコード。
    • コンピューターのローカル ホスト名を指す CNAME レコード。
  3. 新しいドメインhttp://api.benjiox-dev.com:5000を使用するように iOS アプリを構成します。

内部ネットワークで IP アドレスが変更される可能性があるため、A レコードが変更されたときに更新する必要がある場合があることに注意してください。

于 2015-12-16T05:42:15.397 に答える