macOS如何通过编程获取ComputerName 替代已弃用的NSHost方案
获取Mac计算机名称的实现方案
要获取与scutil --get ComputerName完全一致的输出结果,最优方案是使用SystemConfiguration框架提供的SCDynamicStoreCopyComputerName接口,该接口是scutil命令底层的调用实现,输出结果100%匹配,且不存在弃用风险。你之前找到的Network框架相关接口主要用于网络连接端点处理,不适合该场景。
使用该方案需要先在项目中链接SystemConfiguration.framework,以下是不同语言的实现代码:
Objective-C 实现
#import <SystemConfiguration/SystemConfiguration.h> - (NSString *)fetchComputerName { CFStringRef computerName = SCDynamicStoreCopyComputerName(NULL, NULL); if (computerName) { return (__bridge_transfer NSString *)computerName; } return nil; }
Swift 实现
import SystemConfiguration func fetchComputerName() -> String? { guard let cfName = SCDynamicStoreCopyComputerName(nil, nil) else { return nil } return cfName as String }
C/C++ 实现
#include <SystemConfiguration/SystemConfiguration.h> #include <CoreFoundation/CoreFoundation.h> #include <string.h> const char* fetchComputerName() { CFStringRef cfName = SCDynamicStoreCopyComputerName(NULL, NULL); if (!cfName) return NULL; const char* utf8Str = CFStringGetCStringPtr(cfName, kCFStringEncodingUTF8); if (utf8Str) { char* result = strdup(utf8Str); CFRelease(cfName); // 调用方使用完成后需手动free该返回值 return result; } CFRelease(cfName); return NULL; }
补充说明
- 该接口从macOS 10.1版本开始支持,兼容性极强
- 无需申请特殊沙盒权限,普通应用即可正常调用
- 如果需要获取对应
scutil --get HostName、scutil --get LocalHostName的输出结果,可以使用同框架下的SCDynamicStoreCopyHostName、SCDynamicStoreCopyLocalHostName接口
内容的提问来源于stack exchange,提问作者Zohar81
相关产品推荐
相关产品推荐

