UIDevice类适用于Mac OS X吗?

13

我正在尝试将我的一款iOS应用程序移植到Mac OS X,但我无法找到类似于UIDevice的对象来用于OS X。我想获取设备名称,例如“MacBookAir”。

编辑/答案
正如Josh Caswell所指出的那样,您可以使用SCDynamicStoreCopyComputerName键。

这是代码:

+ (NSString *)computerName {
   return [(id)SCDynamicStoreCopyComputerName(NULL, NULL) autorelease];
}

1
对于那些想知道的人:#import <SystemConfiguration/SCDynamicStoreCopySpecific.h> - levigroker
1
对于 ARC:返回 CFBridgingRelease(SCDynamicStoreCopyComputerName(NULL, NULL)); - jqgsninimo
5个回答

9

Swift 4.0 OSX

以下是我需要类似于 UIDevice 名称的相似值:

iOS(Swift 3.2)

let deviceName = UIDevice.current.name

OSX (swift 4.0)

let deviceName = Host.current().name

7

Net Services编程指南中提到:

在桌面版的Mac OS X中,从系统配置框架调用SCDynamicStore函数会返回计算机名称,因此您可以像处理其他字符串一样操纵它。在iOS中,您可以从UIDevice类的名称属性中获取相同的信息。

似乎没有一个名为SCDynamicStore的单个函数(文档错误),但您可能想要使用SCDynamicStoreCopyValue。看起来您可以使用SCDynamicStoreKeyCreateComputerName获得所需的键。

编辑:或者,更好的办法是像你发现的那样,使用在SCDynamicStoreCopySpecific.h文件中找到的SCDynamicStoreCopyComputerName函数。


谢谢Josh。我在我的问题中提供了代码片段。您可以编辑您的答案以包含代码片段,以便其他人有参考。计算机名称应该是一个简单的任务,但事实证明它并不是。再次感谢。 - Cyprian
很高兴能够帮忙。感谢您添加了代码片段 - 我将其保留在问题中,但我已经为该函数添加了文档链接。 - jscs

1
NSHost *host = [NSHost currentHost];
NSLog(@"hostName %@",[host localizedName]);

你可以看到Mac名称


苹果文档:“……如果网络不可达,可能会阻塞几秒钟。为了避免在主线程上阻塞执行,您应该在操作或Grand Central Dispatch中调用此方法。” 在Swift 4.2中:let host = Host.current()… - ingconti

0

随着Host的弃用,您可能会考虑使用ProcessInfo.hostName作为替代方案。在我的案例中,它返回了:

ExampleHostName.local

0

1
是的,但它会给我类似'John's_MacBook'这样的名称吗? - Cyprian

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接