0

我有一个 iOS 本机应用程序。

我有一个在 Rails (4.1.4) 中开发的 API,它位于:http://api.myapp.local:5000

我已经配置了我的 /etc/hosts 来进行基本的 API / Web 开发,没问题,一切都运行良好。

我的问题是我想通过我的 iOS 应用程序(在实际设备中,而不是在模拟器中)通过 WiFi 使用我的本地 API。

这是我测试过的(不起作用)

  • 将 xip.io 与我的本地 en0 inet ip 与瘦 Web 服务器一起使用。
  • 将 xip.io 与我的本地 en0 inet ip 与 pow 网络服务器一起使用。
  • 我已经完成了一些端口转发以通过我的公共 IP 进行连接

事实上,问题本质上是由于子域:如果我的应用程序没有任何子域,上述所有解决方案都有效。(我可以通过这种方式访问​​我的本地 API,但这不是我想要的)

我的问题是我不能告诉我的 iOS 应用程序“连接到这个 IP,使用这个子域”

我可能缺乏网络方面的知识,但我真的对这个问题感到恼火,因为我真的需要用我的 iOS 应用程序测试我的本地网络服务器。

这是我的路线文件的样子:

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。设置完成后,您可以通过手机上的 wifi 设置将您的设备指向您的计算机。

这两个选项都需要一些时间和基本的网络了解来设置。

苏...

您可以选择从 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 地址。

一种选择是在您的 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. 使用“api”子域配置您的域的 DNS:
    • 指向您计算机的本地 IP 地址的 A 记录。
    • 指向您计算机的本地主机名的 CNAME 记录。
  3. 配置您的 iOS 应用程序以使用您的新域http://api.benjiox-dev.com:5000

请注意,您的 IP 地址可能会在您的内部网络上发生变化,因此您可能需要在 A 记录发生变化时更新它。

于 2015-12-16T05:42:15.397 回答