HostName 是一个示例应用,演示了第三方应用如何在没有 com.apple.developer.device-information.user-assigned-device-name 授权的情况下访问用户的设备名称。
在 iOS 16 中,Apple 添加了 com.apple.developer.device-information.user-assigned-device-name 授权,以防止第三方应用通过设备名称对用户进行指纹识别。然而,ProcessInfo.processInfo.hostName API 在此过程中出现了问题,该 API 允许第三方开发者无需授权即可获取设备的网络主机名。虽然主机名并非设备名称的 1:1 精确副本,但非常接近。例如,我的设备名为 Astronaut Sloth,其主机名则为 Astronaut-Sloth。
当第三方开发者访问 ProcessInfo.processInfo.hostName API 时,用户会看到一个“允许 与局域网设备通信”的提示。在 iOS 15 中,如果用户拒绝此 API,ProcessInfo.processInfo.hostName API 会返回 localhost。然而,在 iOS 16 中,这一行为也出现了问题——无论用户如何选择,都会始终返回设备名称。