Releases: ipinfo/apple-device-sdk-xcframeworks
Releases · ipinfo/apple-device-sdk-xcframeworks
Release list
0.6.0
Changed
- BREAKING: Rename
NetworkInterfacetoNetworkPath.Interfaceacross public APIs, includingDevice.interfaceInfo,InterfaceInfoClient,TracerouteClient, and theInterfaceMonitorWi-Fi/VPN/Ethernet/Cellular dependency factories - BREAKING: Replace the top-level
TracerouteProbeandTracerouteErrorwith nestedTraceroute.Probe(now carrying anIDandResponse) andTraceroute.Error - BREAKING:
TracerouteClient.tracerouteis nowasync throwsand yields enrichedTraceroute.Probevalues - BREAKING: Replace the stored
InterfaceInfoClient.liveandTracerouteClient.livevalues with factory functions:InterfaceInfoClient.live(interface:)andTracerouteClient.live(device:bundleInfo:logger:) - BREAKING:
IPInfoAPIClient.lookupnow threads request headers through the call - BREAKING: Remove the
pathparameter fromInterfaceMonitor.init Deviceand all of its accessor closures are now@Sendable- Deprecate
Traceroute.Probe.probeIndexin favor ofindex
Added
PingAPI with configurable host, timeout, and interval, emittingReplyvalues (Response/Error) as an async sequence- Hopscotch
DNS.hostname(for:timeout:)reverse-DNS resolution - Enriched traceroute:
Traceroute.hops String.isPrivateIPAddressfor classifying IP-address stringsCellularNetwork.interfaceNetwork, backed by a newNetworkInterface.NetworkenumSendable,Codable,Hashable, andEquatableconformances acrossTraceroute,Device,PathMonitor,CellularNetwork,IPInfoResponse, and the traceroute/ping error types
Removed
- BREAKING: Remove the public
tracerouteproperty and its initializer fromIPInfoHeaders
Fixed
- Add an explicit
import HTTPClientinRetryConfigurationso the pre-built XCFrameworks compile under theMemberImportVisibilityupcoming feature. SwiftPM source builds were unaffected; only XCFramework distribution builds failed to archive
Changed
- BREAKING:
NetworkInfoandInterfaceDataprotocols now requireSendableconformance. - Add
Sendableconformance to built-inNetworkInfoandInterfaceDataconformers
Added
Sendableconformances for public model types. This enables passing these types across actor boundaries without@preconcurrencyworkarounds
Changed
- BREAKING: Rename
IPInfoMonitor.InterfaceStatetoIPInfoMonitor.Interface. The new type exposes a.stateproperty (.loading/.unavailable/.available(_:)) to enable exhaustive switching - BREAKING: Replace
IPInfoMonitor.primaryInterfaceStateand the asyncprimaryInterfacegetter with a synchronousprimaryInterface: Interface?that returns the first element ofinterfaces - BREAKING:
IPInfoMonitoris now@MainActor-isolated. Per-interface monitors are created dynamically fromNWPathMonitorupdates instead of statically at initialization, and are reconciled to match the system's interface order - BREAKING:
IPInfoMonitor.Dependenciesnow exposes per-type factory closures (makeWifiDependencies,makeVPNDependencies,makeEthernetDependencies,makeCellularDependencies) that receive aNetworkInterface, instead of static per-monitor dependency instances. This supports interface monitors being created on demand fromNWPathMonitorupdates. Most call sites can continue usingIPInfoMonitor.Dependencies.live(logger:) - Forward the
IPInfoMonitorlogger to its per-interface monitors so SDK-wide logging configuration propagates correctly
Added
IPInfoMonitor.interfaces: [Interface]active interfaces ordered by the system's routing preference- Top-level
NetworkInterfacemodel exposing the underlying interface'sname,type, and helpers (isVPN,isEthernet) IPInfoMonitor.availableInterfaces: [NetworkInterface]available system interfaces without enrichment data, for diagnostic tools (ping, traceroute)InterfaceMonitoringprotocol for type-erased per-interface monitor storageHTTPClient.Client.InterfaceBinding(.interfaceType(_:),.interface(_:)) and abind:argument on request builders, allowing callers to route a request through a specific interface or interface type
Fixed
- Crash when enabling logging from a widget extension on macOS, where
NSAppis unavailable
Removed
- BREAKING:
PrimaryInterfaceStatetype. Useinterfacesfor the full list orprimaryInterfacefor the highest-priority one
Fixed
- Throw response code errors from
IPInfoAPIClientso 429 retry logic works
correctly
Changed
- Use .otherNavigation as location activity type
- Retry 429 response codes after one hour
Changed
- BREAKING: Reduce public API surface — DeviceKit, AsyncAlgorithms, and NIOConcurrencyHelpers are now implementation details
- BREAKING: Remove
IPinfoKittype - BREAKING: Replace swift-log with built-in logger
- Favor system APIs over AsyncDNSResolver dependency
- Implement own HTTP types, replacing dependency
- Relax dependency versions
Added
- Canonical log lines for SDK debugging; single-line logs per request with IP version, application state, update reason, and request count
- Support cellular interface on macOS
- XCFramework build infrastructure for third-party distribution
Fixed
- Report correct macOS model identifier and OS version in device headers
Added
- Report Wi-Fi security type
Fixed
- Fix SSID and BSSID being sent as empty strings instead of being omitted
- Refresh Cloudflare traces that are older than an hour
Changed
- Update location for each request
Added
- Titanium module
Fixed
- Report ethernet instead of VPN information for ethernet interface
- Remove additional headers from traceroute requests
Removed
- BREAKING: Remove reverse geocoding
Changed
- Report interface type in traceroute header
- Emit updates when IP hasn't changed
Fixed
- Use hardware UUID as vendor identifier on macOS
- Only start location monitoring after we're granted permission
Added
- BREAKING: Add support for ethernet interfaces
Fixed
- Bind traceroute to a specific interface
Changed
- Only emit updates when data changes
- Reduce redundant enrichments. Only update when IP address has changed
Changed
- Use kernel timestamps (
SO_TIMESTAMP) for traceroute RTT measurements instead of user-space timing, improving accuracy - Replace Swift-NIO with plain BSD sockets for traceroute implementation to improve performance
Added
swift run hopscotch compareto compare system and Hopscotch traceroute performance
Removed
- Ping functionality (
Ping.swift,PingResult) because it was using Swift-NIO and it wasn't worth the rewrite
Fixed
- Ensure IP is updated after switching networks
0.3.1
Added
- Report Wi-Fi security type
Fixed
- Fix SSID and BSSID being sent as empty strings instead of being omitted
- Refresh Cloudflare traces that are older than an hour