iOS 提供 Network Framework,它可以帮助开发者方便地获取设备的 IP 地址。通过以下代码,可以获取设备的 IPv4 和 IPv6 地址:
import Network
let monitor = NWPathMonitor()
monitor.start(queue: DispatchQueue.global())
monitor.pathUpdateHandler = { path in
if let ipv4 = path.evaluateTCPConnection(to: NWEndpoint.Host("www.apple.com"), from: nil)?.localEndpoint?.debugDescription {
print("IPv4 Address: \(ipv4)")
}
if let ipv6 = path.evaluateTCPConnection(to: NWEndpoint.Host("www.apple.com"), from: nil)?.localEndpoint?.debugDescription {
print("IPv6 Address: \(ipv6)")
}
}
除 Network Framework,开发者也可以使用 SystemConfiguration Framework 来获取设备的 IP 地址。以下代码演示如何通过这种方式获取 IPv4 地址:
import SystemConfiguration
func getIPAddress() -> String? {
var address: String?
var ifaddr: UnsafeMutablePointer? = nil
if getifaddrs(&ifaddr) == 0 {
var ptr = ifaddr
while ptr != nil {
defer { ptr = ptr?.pointee.ifa_next }
guard let interface = ptr?.pointee else {
return nil
}
let addrFamily = interface.ifa_addr.pointee.sa_family
if addrFamily == AF_INET || addrFamily == AF_INET6 {
let name = String(cString: interface.ifa_name)
if name == "en0" {
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
&hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST)
address = String(cString: hostname)
}
}
}
freeifaddrs(ifaddr)
}
return address
}
以上是两种常见的获取 iOS 设备 IP 地址的方法。开发者可以根据具体需求选择合适的方式实现。