查找用于Web API + iPhone设置的开发机器的IP地址

时间:2010-10-01 04:11:19

标签: objective-c xcode api networking

我正在开发一些与基于HTTP的API服务器通信的iPhone应用程序(这恰好是Rails,但这与此无关),而且我经常被iPhone的IP(un)可达性所困扰设备到我的MacBook Pro - iPhone设备必须点击MBP上的URL。

现在,我在Config.h中有类似的内容:

#if (TARGET_IPHONE_SIMULATOR)
// for iPhone Simulator
#define API_BASE  @"http://127.0.0.1:3000/api"
#else
// for iPhone Device
#define API_BASE  @"http://10.0.0.1:3000/api"
#endif

它工作正常,只要:1。你自己工作,2。或者你完全控制DHCP服务器,3。或者你只能使用iPhone模拟器并使用环回地址(即,没有推送通知或应用程序内购买。)

但是我经常从咖啡馆或图书馆与其他人远程工作,所以这让我很烦恼 - 现在我必须手动找到我的MBP分配的IP地址,将上述常量API_BASE从“10.0.0.1”重写为新的地址,并且不要忘记在提交git或svn之前恢复原文。

有没有办法以编程方式从Xcode内部获取开发机器的IP地址并将其发送到基于每个版本的iPhone设备?

更新

使用Bonjour是不够的,因为团队中的每台机器都有不同的名称。

4 个答案:

答案 0 :(得分:4)

好的,所以需要使用多个开发环境,这意味着Bonjour不会削减它。

我对XCode构建环境并不十分熟悉。你能以某种方式设置shell评估的环境变量吗?如果你能以某种方式得到以下评估:

DEV_IP_ADDRESS=$(/sbin/ifconfig |awk '/inet 127.0.0.1/ { next } /inet / { print $2; exit }')

然后作为预处理器define传递:

gcc <...> -DDEV_IP_ADDRESS="${DEV_IP_ADDRESS}"

,在代码中:

#define API_BASE "http://" DEV_IP_ADDRESS ":3000/api"

(我生锈了,但我模糊地回想起预处理器连续连续字符串,对吗?)

如果你可以加入他们,那应该可以解决问题。 : - )

或者你可以与bonjour结合使奥术hackery更加可忍受。您的环境中已经定义了$HOSTNAME的可能性,因此,如果您可以将其作为预处理器#define进行排序,则可以对其进行排序。

答案 1 :(得分:2)

由于它已经是一个URL,您可以使用主机名而不是IP,它将通过Bonjour解决。例如,我用来写这个的笔记本电脑叫做Jura,这意味着它的Bonjour主机名为jura.local

您可以转到“共享”偏好设置面板,找到计算机的Bonjour DNS名称。在计算机名称下,有一个句子开头,“本地网络上的计算机......”,并以您要使用的名称结束。

然后您可以将上面的代码更改为:

#define API_BASE  @"http://my-macbook-pro.local:3000/api"

因为相同的机制将解析模拟器和设备上的URL。

答案 2 :(得分:0)

您可以使用bonjour

答案 3 :(得分:0)

我通常会构建一个表单或控件来编辑服务器地址。表单的按钮只能在调试版本中使用(使其变得丑陋和红色,因此您不会发送它:-))然后将其隐藏在发布版本中。