Desktop Insights
  • Apps
  • Tech
  • Statistics
  • Documentation
  • Pricing
Sign InSign Up
Feb 28, 2026

How We Read the SDKs Inside a macOS App Bundle

How Desktop Insights extracts dependency metadata from Electron and native macOS applications, from asar archives to binary string analysis.

Cover Image for How We Read the SDKs Inside a macOS App Bundle

Desktop Insights reads thousands of macOS applications to record the SDKs, frameworks and libraries they bundle. The obvious question is which tool does that. The more useful one is where the information lives, because an Electron app and a native app keep it in different places, and one of them barely keeps it at all.

Electron apps hand you the metadata

An Electron app ships a full Chromium runtime and a Node environment, and that architecture leaves a paper trail.

package.json

Every Electron app carries a package.json listing its npm dependencies. We read it from the app's resources/ directory or from inside the .asar archive. That gives us the dependency tree: framework versions, utility libraries, and everything in between.

CREDITS.html

Chromium bundles a CREDITS.html listing every open-source component compiled into the browser engine. We parse it to identify which Chromium version the app ships and which upstream libraries it includes: ICU, V8, Skia and the rest.

The asar archive

Electron apps usually bundle their application code in an .asar archive, a tar-like format. We unpack it and inspect the contents for bundled modules, configuration files, and any dependency manifests that package.json does not fully capture.

Native apps make you read the binary

A native macOS app has no package.json. We infer its dependencies from what the bundle carries.

Framework plists

macOS frameworks include Info.plist files with version numbers and bundle identifiers. We scan every .framework directory inside the app bundle and read those files to identify frameworks such as Sparkle, Sentry and Realm.

CocoaPods and SPM bundles

Apps built with CocoaPods or Swift Package Manager often include resource bundles with identifying metadata. We look for .bundle directories and their plists to detect pod and package dependencies.

Strings in the binary

When the bundle carries no manifest, we run strings on the executable and look for known SDK signatures: version strings, class-name prefixes, and API endpoint patterns that identify a specific SDK. This is how we detect analytics providers like Amplitude, crash reporters like Bugsnag, and feature-flag services like LaunchDarkly.

Every extraction becomes a dated snapshot

Each extraction produces a structured record: app name, version, the dependencies with their versions, and the frameworks bundled inside. We keep those records over time, so you can see when an app added Sentry, upgraded Electron, or dropped a legacy framework.

The result is a version-by-version history of each tracked app's stack. Most of these apps are closed source, so for them the shipped binary is the only place that history exists.

Desktop Insights

BuiltWith for desktop apps. We extract the SDKs, frameworks, and dependency versions from thousands of shipped macOS and Windows applications and track how they change release by release.

© Copyright 2026 Desktop Insights. All Rights Reserved.

About
  • About
  • Blog
  • Contact
  • Twitter / X
Product
  • Statistics
  • Documentation
  • MCP Server
  • Smithery
  • Glama
Legal
  • Terms of Service
  • Privacy Policy
  • Cookie Policy