在测试连接到本地计算机服务器的iPhone应用程序时,我需要输入计算机的本地IP地址,而localhost不是使用模拟器以外的设备进行测试.这会让动态IP地址和多个开发人员进行测试时变得烦人.是否有代码片段可以获取正在编译代码的计算机的IP地址,而不是IP运行应用程序的设备的地址(最好是C或Objective-C,而不是Swift)?
1)在Xcode项目的"Build Phases"选项卡中添加一个"Run Script",其中包含:
export SERVER_IP=`ipconfig getifaddr en0`
Run Code Online (Sandbox Code Playgroud)
注意:将"en0"更改为与您的机器匹配的任何接口.en0是我机器上的wifi,我的硬线是en3.在终端中执行"ifconfig -a"以获取所有适配器的列表,并查看哪台适合您的计算机
2)转到您的项目文件.单击左侧菜单中的Project本身,然后单击右侧的Build Settings.转到"Apple LLVM 6.0 - 自定义编译器标志".在"Other C Flags" - >"Debug"下定义一个名为-DSERVER_IP = $ {SERVER_IP}的新值
这会将构建脚本的结果映射到项目中的#DEFINE
3)在您的代码中使用SERVER_IP就像使用任何其他#DEFINE一样,它将始终具有构建代码的计算机的值.
我通过运行脚本在应用程序的plist中设置计算机的IP地址,然后在代码中读取plist值来实现此功能.
1)在Info.plist文件中,添加一个包含计算机IP地址的键/值对.对于此示例,我们将添加"CompanyNameDevServerIP"的键,类型为"String".请注意,此键/值对应该唯一地加上前缀,以便它不会与Apple的键冲突(有关详细信息,请参阅此处).
2)在"Build Phases"选项卡中,添加包含以下内容的运行脚本:
if [ "$CONFIGURATION" == "Debug" ]; then
echo -n ${TARGET_BUILD_DIR}/${INFOPLIST_PATH} | xargs -0 /usr/libexec/PlistBuddy -c "Set :CompanyNameDevServerIP `ipconfig getifaddr en0`"
else
echo -n ${TARGET_BUILD_DIR}/${INFOPLIST_PATH} | xargs -0 /usr/libexec/PlistBuddy -c "Delete :CompanyNameDevServerIP"
fi
Run Code Online (Sandbox Code Playgroud)
这将计算机的IP地址设置在与构建捆绑在一起的plist中,但仅限于调试版本中.(它在发布版本中从plist文件中删除.)
3)在代码中,检索此plist值以获取计算机的IP地址:
NSString *serverIP = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CompanyNameDevServerIP"];
Run Code Online (Sandbox Code Playgroud)
如果您在编译时需要这个,您只需在 Xcode 项目的“Build Phases”选项卡中添加一个“Run Script”即可。将其放入源代码中自然会返回代码运行位置的 IP 地址,而不是构建代码的位置。
该脚本将返回主 IP 地址。您可以修改脚本来编辑 Plist 或任何您需要的内容。PlistBuddy 非常适合在构建时修改 plist 文件。
ifconfig | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9]*\.){3}[0-9]*' | grep -v '127.0.0.1'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3464 次 |
| 最近记录: |