lynnswap/privateheaderkit
[日本語](README.ja.md)
Installation
swift run -c release privateheaderkit-installBy default, privateheaderkit-install installs the following binaries to ~/.local/bin:
privateheaderkit-dumpheaderdump(host)headerdump-sim(iOS Simulator)
If ~/.local/bin is not in your PATH, add it:
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
source ~/.zshrcTo change the destination:
swift run -c release privateheaderkit-install --prefix "$HOME/.local"
# or
swift run -c release privateheaderkit-install --bindir "$HOME/bin"If you prefer running the built binary directly:
swift build -c release --product privateheaderkit-install
"$(swift build -c release --show-bin-path)/privateheaderkit-install" --bindir "$HOME/bin"Usage
1) Dump headers
privateheaderkit-dump2) Dump headers with args
privateheaderkit-dump 26.2Default output directory is ~/PrivateHeaderKit/generated-headers/iOS/<version>. This dumps both Frameworks and PrivateFrameworks. (Relative paths passed to --out / PH_OUT_DIR are resolved from the current directory. If you want the old output under this repo, run from the repo root and pass --out generated-headers/iOS/<version> or set PH_OUT_DIR.)
3) Dump specific targets (--target)
Use --target to specify what to dump. You can use it multiple times to include multiple targets.
Examples:
# A single framework
privateheaderkit-dump 26.2 --target SafariShared
# A single SystemLibrary bundle
privateheaderkit-dump 26.2 --target PreferenceBundles/Foo.bundle
# A single usr/lib dylib
privateheaderkit-dump 26.2 --target /usr/lib/libobjc.A.dylib
# Presets
privateheaderkit-dump 26.2 --target @frameworks # Frameworks / PrivateFrameworks
privateheaderkit-dump 26.2 --target @system # @frameworks + SystemLibrary bundles
privateheaderkit-dump 26.2 --target @all # @system + /usr/lib dylibs
# Multiple targets example
privateheaderkit-dump 26.2 --target SafariShared --target UIKitCore
# Disable nested bundle dumping
privateheaderkit-dump 26.2 --target SafariShared --no-nestedWhen --layout headers (default), output bundle directory suffixes are stripped for easier searching: .framework, .app, .bundle, .xpc, .appex.
4) List runtimes / devices (iOS only)
privateheaderkit-dump --list-runtimes
privateheaderkit-dump --list-devices --runtime 26.0.1Options
| Option | Description | | --- | --- | | --platform <ios\|macos> | Target platform (default: ios; you can also set PH_PLATFORM) | | --device <udid\|name> | Choose a simulator device | | --out <dir> | Output directory | | --force | Always dump headers even if they already exist (successful frameworks replace their output directory; failures keep existing output and are recorded in _failures.txt) | | --skip-existing | Skip frameworks that already exist (useful to override PH_FORCE=1) | | --exec-mode <host\|simulator> | Force execution mode | | --target <value> | Select dump target (repeatable). Presets: @frameworks, @system, @all. | | --no-nested | Disable nested XPCServices / PlugIns bundle dumping (default: enabled) | | --layout <bundle\|headers> | Output layout (bundle keeps .framework dirs, headers removes the .framework suffix) | | --framework <name> | (Legacy) Dump only the exact framework name (repeatable, .framework optional) | | --filter <substring> | (Legacy) Substring filter for framework names (repeatable) | | --scope <frameworks\|system\|all> | (Legacy) Dump scope (default: frameworks) | | --nested | (Legacy) Enable nested bundle dumping (now enabled by default) | | --list-runtimes | List available iOS runtimes and exit | | --list-devices | List devices for a runtime and exit (use --runtime) | | --runtime <version> | Runtime version for --list-devices | | --json | JSON output for list commands | | --shared-cache | Use dyld shared cache when dumping (enabled by default; set PH_SHARED_CACHE=0 to disable) | | -D, --verbose | Enable verbose logging |
--list-runtimes, --list-devices, --runtime, and --device are iOS-only options.
Notes
- Requires Xcode command line tools (
xcrun,xcodebuild). - Simulator mode uses
xcrun simctl spawn. - During dumping, raw output is staged under
<out>/.tmp-<run-id>and then moved to the final layout. - The output directory is locked for the duration of a run to avoid concurrent writes.
- Verbose mode suppresses skipped-class logs by default; set
PH_VERBOSE_SKIP=1to show them. - You can override the device type used for auto-creation with
PH_DEVICE_TYPE(device name or identifier). - Environment overrides:
PH_PLATFORM,PH_EXEC_MODE,PH_OUT_DIR,PH_FORCE=1|0,PH_SKIP_EXISTING=1|0,PH_LAYOUT,PH_SHARED_CACHE=1|0,PH_VERBOSE=1|0,PH_VERBOSE_SKIP=1,PH_DEVICE_TYPE,PH_PROFILE=1|0,PH_SWIFT_EVENTS=1|0
License
- MIT for this workspace: see
LICENSE.
Package Metadata
Repository: lynnswap/privateheaderkit
Default branch: main
README: README.md