iPhone/iPad 模拟器主机名

Posted

技术标签:

【中文标题】iPhone/iPad 模拟器主机名【英文标题】:Name of the host machine of an iPhone/iPad simulator 【发布时间】:2011-01-10 18:03:07 【问题描述】:

我需要知道 iPhone/iPad 模拟器的主机名称。我的猜测是这应该是可能的,但我还没有找到方法。为什么我需要它?这是因为 [[UIDevice currentDevice] name] 为在同一网络上运行的任何模拟器返回相同的名称“iPhone Simulator”。而且我需要使用位于 Mac 上名为“My Mac Dev Machine”的特定设备。在模拟器上运行的应用程序应该能够确定它在“My Mac Dev Machine”的模拟器上运行,并且应该允许来自网络的连接。有任何想法吗?

【问题讨论】:

对于那些有兴趣解决这个问题的人。我已经用IP地址解决了。我不是获取模拟器主机的名称,而是获取设备的 IP 地址,并在网络中显示我的应用程序,如“/iPhone Simulator”。它允许区分网络中的多个 iPhone 模拟器并选择正确的一个进行连接。 【参考方案1】:

我遇到了同样的问题,并且能够在模拟器中使用 uname() 来获取主机的节点名称,如下所示:

#if TARGET_IPHONE_SIMULATOR
#include <sys/utsname.h>
#endif

...

#if TARGET_IPHONE_SIMULATOR
- (NSString *)testProxyHeaderValue 
    struct utsname name = ;
    uname(&name);
    return [NSString stringWithFormat:@"iPhone Simulator @ %s", name.nodename];

#else
- (NSString *)testProxyHeaderValue 
    return [[UIDevice currentDevice] name];

#endif

模拟器的节点名与宿主机的节点名相同,可以在命令行中使用uname -n获取。

在 Swift 2 中:

var name = utsname()
uname(&name)
return withUnsafePointer(&name.nodename) 
    String.fromCString(UnsafePointer($0))!

【讨论】:

【参考方案2】:

嗯...我知道你正在处理一个模拟器/模拟器,这不是很合乎逻辑,任何被模拟的东西都完全不知道它是模拟的吗?

【讨论】:

是的,我同意你的看法。如果 iPhone Simulator 允许为模拟器配置一个唯一的名称,那就太好了。它会解决问题。但不幸的是,事实并非如此。因此,这使得模拟器不同于设备。如果我知道主机的名称,我可以为模拟器分配一种“唯一”的名称。

以上是关于iPhone/iPad 模拟器主机名的主要内容,如果未能解决你的问题,请参考以下文章

应用程序适用于 iphone ipad 模拟器但不适用于 ipad 设备:黑屏然后熄灭

在 Xcode 6.1、iPhone 6 plus、iPad 滑块黑屏

screenShot代码不适用于ipad,适用于iphone

iPhone / iPad 控制台? [复制]

如何使用 Objective-c 为 iPhone/iPad 生成设备的唯一 ID

在 iPhone/iPad 应用程序中播放音频文件?