From fc11b4202805bef8dfdc13c70e59a89bd8863c0c Mon Sep 17 00:00:00 2001 From: mjgu Date: Wed, 11 Feb 2026 14:01:02 +0900 Subject: [PATCH] refactor: change fetchIP to return IP list with interface types --- .../Implement/NetworkFetcher.swift | 36 ++++++++++--------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/Source/AppleFetcher/Implement/NetworkFetcher.swift b/Source/AppleFetcher/Implement/NetworkFetcher.swift index 7fbc1f39..7cf7b304 100644 --- a/Source/AppleFetcher/Implement/NetworkFetcher.swift +++ b/Source/AppleFetcher/Implement/NetworkFetcher.swift @@ -18,35 +18,41 @@ public final class NetworkFetcher: Fetcher { public init() {} public func fetch() -> Network { - let ip = fetchIP() + let ipList = fetchIPList() let type = fetchType() return Network( - ip: ip, + ip: ipList, isCellular: type == .cellular, isWiFi: type == .wifi ) } } +public struct InterfaceType: Hashable { + let name: String + let family: sa_family_t +} + +public struct IP { + public let ip: String + public let interfaceType: InterfaceType +} + public struct Network { - public let ip: String? + public let ip: [IP] public let isCellular: Bool public let isWiFi: Bool } extension NetworkFetcher { - private func fetchIP() -> String? { - struct InterfaceType: Hashable { - let name: String - let family: sa_family_t - } + private func fetchIPList() -> [IP] { var ipStorage: [InterfaceType: String] = [:] var interfacesPointer: UnsafeMutablePointer? - guard getifaddrs(&interfacesPointer) == 0 else { return nil } - guard let interfaceFirstPointer = interfacesPointer else { return nil } + guard getifaddrs(&interfacesPointer) == 0 else { return [] } + guard let interfaceFirstPointer = interfacesPointer else { return [] } for interfacePointer in sequence( first: interfaceFirstPointer, @@ -86,13 +92,11 @@ extension NetworkFetcher { InterfaceType(name: "utun0", family: sa_family_t(AF_INET6)) ] - for search in searchs { - if let ip = ipStorage[search] { - return ip + return ipStorage + .filter { searchs.contains($0.key) } + .map { key, value in + IP(ip: value, interfaceType: key) } - } - - return nil } private func fetchType() -> NetworkType {