Post

Replies

Boosts

Views

Activity

Reply to Privacy manifests: how to identify which pod a category use is originating from?
I didn't understand what @Sisky_RO meant by using a link map to track down a use of a particular API. So I went about it another way... Quit Xcode Clear your DerivedData folder rm -rf ~/Library/Developer/Xcode/DerivedData Launch your project in Xcode Wait for dependencies to resolve and build the app (I don't use React Native, but presumably you have another way to do this than in Xcode) Find the offending API(s) My email said I need to address this one: NSPrivacyAccessedAPICategorySystemBootTime I found some documentation, which provides the names of the two calls that will require this privacy configuration: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api#4278394 For me, the two uses are: systemUptime and mach_absolute_time() Search for calls. For example: grep -RHn "systemUptime" ~/Library/Developer/Xcode/DerivedData A lot of results were returned, so I didn't include everything. The interesting results I found were within a SourcePackages directory. Here's an example of my results (with pathnames shortened to make it easier to view): In /Users/username/Library/Developer/Xcode/DerivedData/MyTargetName-darnasgcpehipbceilnyjlqsmpxt/SourcePackages: Binary file /artifacts/newrelic-ios-agent-spm/NewRelic/NewRelic.xcframework/tvos-arm64/dSYMs/NewRelic.framework.dSYM/Contents/Resources/DWARF/NewRelic matches Binary file /artifacts/newrelic-ios-agent-spm/NewRelic/NewRelic.xcframework/ios-arm64_x86_64-maccatalyst/dSYMs/NewRelic.framework.dSYM/Contents/Resources/DWARF/NewRelic matches Binary file /artifacts/newrelic-ios-agent-spm/NewRelic/NewRelic.xcframework/ios-arm64/dSYMs/NewRelic.framework.dSYM/Contents/Resources/DWARF/NewRelic matches /checkouts/Alamofire/Source/Core/DownloadRequest.swift:368: let start = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Core/DownloadRequest.swift:377: let end = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Core/WebSocketRequest.swift:283: let startTimestamp = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Core/WebSocketRequest.swift:293: let endTimestamp = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Core/DataRequest.swift:244: let start = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Core/DataRequest.swift:254: let end = ProcessInfo.processInfo.systemUptime /checkouts/Alamofire/Source/Features/AuthenticationInterceptor.swift:336: mutableState.refreshTimestamps.append(ProcessInfo.processInfo.systemUptime) /checkouts/Alamofire/Source/Features/AuthenticationInterceptor.swift:357: let refreshWindowMin = ProcessInfo.processInfo.systemUptime - refreshWindow.interval /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/AuthenticationInterceptor.swift:338: mutableState.refreshTimestamps.append(ProcessInfo.processInfo.systemUptime) /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/AuthenticationInterceptor.swift:359: let refreshWindowMin = ProcessInfo.processInfo.systemUptime - refreshWindow.interval /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/ResponseSerialization.swift:217: let start = ProcessInfo.processInfo.systemUptime /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/ResponseSerialization.swift:227: let end = ProcessInfo.processInfo.systemUptime /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/ResponseSerialization.swift:332: let start = ProcessInfo.processInfo.systemUptime /checkouts/AlamofireNetworkActivityLogger/Carthage/Checkouts/Alamofire/Source/ResponseSerialization.swift:341: let end = ProcessInfo.processInfo.systemUptime For me, it's pretty clear that AlamoFire uses one of these APIs. I will also be looking into NewRelic as well. I'm not sure that this is an exhastive approach, but it's hopefully another approach to tracking down libraries that you find helpful.
Apr ’24