Foundation — ProcessInfo
This article is extracted from the chat log with AI. Please identify it with caution.

在 Apple 的 Foundation 框架中,ProcessInfo(Objective-C 中为 NSProcessInfo)是一个用于获取当前进程(应用)运行时环境信息的关键类。它提供了访问进程参数、环境变量、系统信息等能力,是开发中处理系统级操作的常用工具。


一、ProcessInfo 的核心概念 #

  • 单例模式:通过 ProcessInfo.shared(Swift)或 [NSProcessInfo processInfo](Objective-C)访问。
  • 不可变数据:提供的信息均为只读(如环境变量、启动参数等)。
  • 跨平台支持:适用于 iOS、macOS、watchOS 和 tvOS。

二、ProcessInfo 的体系结构 #

1. 核心功能模块 #

功能模块描述
进程参数获取启动时的命令行参数(arguments
环境变量读取系统或用户设置的环境变量(environment
系统信息操作系统版本、主机名、进程唯一标识符等
系统事件监测低电量模式、热状态变化等(通过通知机制)
调试与性能获取进程运行时间、内存警告次数等

三、核心 API 及使用场景 #

1. 获取进程启动参数 #

场景:解析命令行参数(macOS 常见,iOS 较少用)。

let args = ProcessInfo.processInfo.arguments
// 例如:启动时传入 `-debug` 参数
if args.contains("-debug") {
    enableDebugMode()
}

2. 读取环境变量 #

场景:区分开发/生产环境、传递敏感配置(如 API 密钥)。

let env = ProcessInfo.processInfo.environment
if let apiKey = env["API_KEY"] {
    configureService(with: apiKey)
}

3. 获取系统信息 #

场景:适配系统版本、记录日志、调试设备信息。

// 系统版本
let osVersion = ProcessInfo.processInfo.operatingSystemVersion
print("OS: \(osVersion.majorVersion).\(osVersion.minorVersion)")

// 主机名
let hostName = ProcessInfo.processInfo.hostName

// 进程唯一标识符
let processID = ProcessInfo.processInfo.processIdentifier

4. 监测系统事件 #

场景:响应低电量模式、设备热状态变化。

// 低电量模式(iOS)
NotificationCenter.default.addObserver(
    self,
    selector: #selector(handlePowerStateChange),
    name: NSNotification.Name.NSProcessInfoPowerStateDidChange,
    object: nil
)

// 检查当前是否处于低电量模式
let isLowPowerMode = ProcessInfo.processInfo.isLowPowerModeEnabled

5. 调试与性能监控 #

场景:统计进程运行时间、内存警告次数。

// 进程运行时间(秒)
let uptime = ProcessInfo.processInfo.systemUptime

// 内存警告次数(iOS 9+)
let memoryWarningCount = ProcessInfo.processInfo.memoryWarningCount

四、高级用法与技巧 #

1. 判断是否运行在模拟器 #

let isSimulator = ProcessInfo.processInfo.environment["SIMULATOR_DEVICE_NAME"] != nil

2. 动态启用/禁用功能 #

根据环境变量动态调整功能(如日志级别):

if ProcessInfo.processInfo.environment["ENABLE_DEBUG_LOGS"] == "YES" {
    Logger.enableDebugMode()
}

3. 适配不同操作系统版本 #

if #available(iOS 15, *) {
    // 使用 iOS 15+ 的 API
} else {
    // 回退方案
}

// 等价于:
let osVersion = ProcessInfo.processInfo.operatingSystemVersion
if osVersion.majorVersion >= 15 {
    // iOS 15+
}

4. 生成唯一临时文件名 #

let tempDir = ProcessInfo.processInfo.globallyUniqueString
// 输出类似 "3B48D9F1-1234-5678-9012-ABCDEF123456"

五、注意事项 #

  1. 环境变量的安全性

    • 避免将敏感信息(如密码)直接存储在环境变量中,优先使用 Keychain。
    • 在 Xcode 中配置环境变量:Edit Scheme > Run > Arguments > Environment Variables
  2. 平台差异

    • isLowPowerModeEnabled 仅适用于 iOS 9+。
    • thermalState(设备热状态)在 iOS 11+ 和 macOS 10.10.3+ 可用。
  3. 性能影响

    • 频繁访问 ProcessInfo 的属性(如 environment)可能轻微影响性能,建议缓存结果。

六、典型应用场景 #

  1. 调试工具:通过启动参数控制调试行为(如 -verbose)。
  2. 多环境配置:根据环境变量切换 API 服务器地址(开发、测试、生产)。
  3. 设备适配:根据系统版本或设备状态调整功能(如低电量模式下禁用动画)。
  4. 日志与监控:记录进程运行时间、系统资源状态。

通过 ProcessInfo,开发者可以轻松获取进程的运行时上下文信息,结合环境变量和系统事件通知,能够实现灵活的配置管理和系统适配逻辑。

本文共 1218 字,创建于 May 6, 2025
相关标签: Xcode, ByAI