Data collection in iOS

General information about data collection can be found here.
The article below describes types and internal structure of the data collected from iOS applications.

Performance metrics

Performance monitor collects the following metrics:

  • CPU
    Average CPU usage for all cores available
  • Memory
    Resident size for the app process
  • Network
    It consists of two metrics: download and upload speed calculated as average for WiFi and WWAN interfaces
  • Disk
    Bytes read and written
  • FPS
    Number of frames per second calculated by CADisplayLink attached to main run loop
  • Battery
    Value from batteryLevel provided by UIDevice class. Not applicable for AppleTV.

HTTP requests

HTTP monitor intercepts all requests made via NSURLSession and tracks their responses, execution time etc. Please note that any network activity outside NSURLSession APIs is not tracked at the moment.

SQLite database

We discover all databases in your app and provide their contents and schemes.
We identify database files by their extension. The following extensions are treated as database files: db, sqlite, sqlite2, sqlite3, sqlitedb,db3.
The following directories are scanned: NSDocumentDirectory, NSCachesDirectory, NSLibraryDirectory, NSApplicationDirectory, NSApplicationSupportDirectory.

Screenshots

For now we support screenshots only for one window. It means you will not get a screenshot of the window displayed at Apple TV if your app uses mirroring.

Logs

Log monitor intercepts data written by app to stdout and stderr. It tracks all calls to NSLog(), Swift print() and other print-family functions. Log level is set to verbose by default.
We also provide integration with CocoaLumberjack library for better log level separation. Log monitor intercepts DDLog() calls separately and sends them along with the log level you used.

User location

Location monitor gets a location object received by LocationManager and sends it to backend. The resulting position is displayed on a map on frontend.
It also allows to request location services permissions from the frontend. We never request them without explicit user command, so until your app has started a location manager, location tracking will not be available.

Environment information

It includes your app info.plist contents, CLI arguments passed to the app on launch, some information about device, and environment variables defined in your project.

Analytics

Monitor tracks analytic systems initialization and usage in your app. Currently supported analytic systems are Google Analytics, Firebase, Mixpanel, Flurry, Adobe and Fabric (Answers). Once you start analytic SDK from your code AppSpector starts watching events you send. Important to remember that we track data when you send it to analytic SDK and not when it was sent via network. That's why due to throttling settings or networking issues you can see some events in the analytic monitor but still miss them in your GA dashboard. The monitor is intended to debug your code and not the analytic SDK itself.

CoreData

CoreData monitor injects deeply in CoreData stack and allows to track all data in your stores, their schemes and settings. Please note that CoreData monitor could possibly slow down your CoreData operations a bit.

NSNotificationCenter

Monitor tracks default notification center, intercepts all notification subscriptions and dispatches along with notification user info.