You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:24:03