Skip to content

Implement remoteFetchSymbols service client for local symbol caching #700

Description

@aluedeke

Summary

Implement a client for com.apple.dt.remoteFetchSymbols to download the dyld shared cache from iOS devices. This would enable local symbol resolution without needing Xcode.

Motivation

Currently, resolving symbol addresses (e.g. dlsym, objc_msgSend) in a remote process requires parsing Mach-O headers over GDB RSP memory reads (#699). While this works, having the shared cache locally would allow:

  • Faster symbol resolution — parse locally instead of over USB/network
  • Crash symbolication — resolve addresses in crash logs
  • Offline analysis — inspect device libraries without being connected
  • Cache per iOS version — download once, reuse for all devices on the same version

Currently only Xcode downloads these symbols (to ~/Library/Developer/Xcode/iOS DeviceSupport/). go-ios doesn't have this capability.

Implementation

The service is straightforward (see pymobiledevice3's RemoteFetchSymbolsService for reference):

  1. Connect to com.apple.dt.remoteFetchSymbols via RemoteXPC
  2. Send {"XPCDictionary_sideChannel": <uuid>, "DSCFilePaths": []} → receive file count
  3. For each file: receive metadata (path, size), then stream chunks via file transfer
  4. Store locally, indexed by iOS version/build

The shared cache is large (several GB), so downloading should be optional and cached per iOS version + build number.

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions