Agent skill

macOS Tcc Sigkill Missing Usage Description

by divinevideo in divinevideo/divine-mobile

Fix macOS app hard crashes (EXCCRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key.

MPL-2.0Auto-check passedMobile

Install macOS Tcc Sigkill Missing Usage Description

skills CLI
$ npx skills add divinevideo/divine-mobile --skill macos-tcc-sigkill-missing-usage-description -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install divinevideo/divine-mobile macos-tcc-sigkill-missing-usage-description --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/divinevideo/divine-mobile.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/macos-tcc-sigkill-missing-usage-description .claude/skills/macos-tcc-sigkill-missing-usage-description && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
macos-tcc-sigkill-missing-usage-description
GitHub stars
266
Token cost
~2.2k tokens
SKILL.md length
763 words
Files
1
Skills in repo
103
Repo updated
First seen
Licence
MPL-2.0

At a glance

Fix macOS app hard crashes (EXCCRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key.

  • Works in 5 steps: Read the crash report's termination… → Add the key to your app's Info.plist → If the app is sandboxed… → …
  • App crashes immediately when touching Photos
  • SKILL.md covers Problem, Context / Trigger Conditions, The Info.plist Key Map and Solution, plus 5 more sections
  • Calls flutter and python3

What it does

macOS Tcc Sigkill Missing Usage Description is an agent skill from divinevideo/divine-mobile. Fix macOS app hard crashes (EXCCRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key. Use when: (1) App crashes immediately when touching Photos, Contacts, Calendar, Reminders, Location, Microphone, Camera, Screen Recording, etc., (2) Crash report shows Exception: EXCCRASH (SIGKILL) with Termination namespace: TCC, (3) Crash stack includes TCC.TCCCRASHINGDUETOPRIVACYVIOLATION, (4) Termination details contain "This app has crashed because it attempted to…

Its SKILL.md is about 2.2k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Mobile, covering Mobile testing and debugging and Cross-platform mobile apps. It works with macOS and Flutter. The licence is MPL-2.0.

When your agent uses it

  • App crashes immediately when touching Photos
  • Screen Recording
  • Crash report shows Exception: EXCCRASH (SIGKILL) with Termination namespace: TCC
  • Crash stack includes TCC.TCCCRASHINGDUETOPRIVACYVIOLATION

Example prompts

  • “/macos-tcc-sigkill-missing-usage-description”

Requirements

  • Python 3

Workflow steps

5 steps, taken from the first numbered list in SKILL.md.

  1. Read the crash report's termination details — it names the exact key.
  2. Add the key to your app's Info.plist
  3. If the app is sandboxed (com.apple.security.app-sandbox = true in release),
  4. Rebuild. Info.plist changes do not hot-reload in Flutter — a full
  5. Relaunch the app.

What it can do on your machine

Read from SKILL.md and the folder at commit 4c622be. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • flutter
    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • developer.apple.com

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

macOS Tcc Sigkill Missing Usage Description loads about 2.2k tokens when it runs. Until then it costs about 239 tokens; SKILL.md has 763 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~239
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from divinevideo/divine-mobile at commit 4c622be, republished under its MPL-2.0 licence (© divinevideo). 763 words, ~2,244 tokens.

Download SKILL.mdSave it as .claude/skills/macos-tcc-sigkill-missing-usage-description/SKILL.md (or your agent's skills folder).
name
macos-tcc-sigkill-missing-usage-description
description
Fix macOS app hard crashes (EXC_CRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key. Use when: (1) App crashes immediately when touching Photos, Contacts, Calendar, Reminders, Location, Microphone, Camera, Screen Recording, etc., (2) Crash report shows `Exception: EXC_CRASH (SIGKILL)` with `Termination namespace: TCC`, (3) Crash stack includes `TCC.__TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION__`, (4) Termination details contain "This app has crashed because it attempted to access privacy-sensitive data without a usage description", (5) Flutter macOS publish / gallery-save flow crashes on Gal.putVideo, PHPhotoLibrary, CNContactStore, etc. Critical distinction: macOS does NOT return a deny error — it SIGKILLs the process. This skill also covers the NSPhotoLibraryUsageDescription vs NSPhotoLibraryAddUsageDescription distinction that trips many apps.
author
Claude Code
version
1.0.0
date
2026-04-05

macOS TCC SIGKILL: Missing Info.plist Usage Description

Problem

A macOS app crashes with EXC_CRASH (SIGKILL) the instant it calls a privacy-protected API. There is no chance to handle the error, no permission prompt, no deny response — just immediate process termination by the OS.

The crash is caused by macOS TCC enforcement: if your app links against or calls an API that accesses a privacy-protected resource and your Info.plist does NOT contain the matching usage-description key, the OS kills the process for privacy violation.

Context / Trigger Conditions

Crash report (~/Library/Logs/DiagnosticReports/<App>-*.ips) has all of these:

  • "exception": { "type": "EXC_CRASH", "signal": "SIGKILL" }
  • "termination": { "namespace": "TCC", ... }
  • Termination details string contains: "This app has crashed because it attempted to access privacy-sensitive data without a usage description"
  • The crashed thread stack includes TCC.__TCC_CRASHING_DUE_TO_PRIVACY_VIOLATION__
  • Frames below that are usually TCC.__TCCAccessRequest_block_invoke, libxpc.dylib._xpc_connection_reply_callout, dispatch queue machinery

The termination details string tells you exactly which key is missing — read it.

The Info.plist Key Map

ResourceInfo.plist keyEntitlement (sandboxed apps)
CameraNSCameraUsageDescriptioncom.apple.security.device.camera
MicrophoneNSMicrophoneUsageDescriptioncom.apple.security.device.audio-input
Photos (read/write)NSPhotoLibraryUsageDescriptioncom.apple.security.personal-information.photos-library
Photos (add-only)NSPhotoLibraryAddUsageDescriptioncom.apple.security.photos.library.add-only
ContactsNSContactsUsageDescriptioncom.apple.security.personal-information.addressbook
CalendarNSCalendarsUsageDescriptioncom.apple.security.personal-information.calendars
RemindersNSRemindersUsageDescriptioncom.apple.security.personal-information.reminders
LocationNSLocationUsageDescription (+ WhenInUse / Always variants)com.apple.security.personal-information.location
Speech recognitionNSSpeechRecognitionUsageDescription—
Desktop folderNSDesktopFolderUsageDescriptioncom.apple.security.files.user-selected.read-only etc.
Documents folderNSDocumentsFolderUsageDescription—
Downloads folderNSDownloadsFolderUsageDescriptioncom.apple.security.files.downloads.read-write
The Photos trap (critical)

NSPhotoLibraryAddUsageDescription is not a substitute for NSPhotoLibraryUsageDescription. They cover different permission scopes:

  • Add-only (NSPhotoLibraryAddUsageDescription + com.apple.security.photos.library.add-only): sufficient for APIs that only save an asset, like PHAssetCreationRequest from a file, or Gal.putVideo(path) with no album.
  • Full access (NSPhotoLibraryUsageDescription): required for any read, any query, any album lookup/creation, and notably for Gal.putVideo(path, album: 'SomeAlbum') — because "put into album X" has to read or create the album, which is a library-level operation.

Symptom of getting this wrong: save-without-album works, save-with-album crashes.

Solution

  1. Read the crash report's termination details — it names the exact key.
  2. Add the key to your app's Info.plist:
    • Flutter macOS: mobile/macos/Runner/Info.plist
    • Native macOS: <target>/Info.plist or the target's INFOPLIST_FILE build setting
  3. If the app is sandboxed (com.apple.security.app-sandbox = true in release), also add the matching entitlement to both Runner/DebugProfile.entitlements and Runner/Release.entitlements.
  4. Rebuild. Info.plist changes do not hot-reload in Flutter — a full flutter build macos --debug is required.
  5. Relaunch the app.

Example patch

Flutter macOS app crashing on gal.putVideo(path, album: 'MyAlbum'):

xml
<!-- mobile/macos/Runner/Info.plist -->
<key>NSPhotoLibraryAddUsageDescription</key>
<string>MyApp needs access to save videos to your Photos library.</string>
<!-- ADD THIS: -->
<key>NSPhotoLibraryUsageDescription</key>
<string>MyApp needs access to your Photos library to organize videos into albums.</string>

Then:

bash
cd mobile
flutter build macos --debug
open build/macos/Build/Products/Debug/MyApp.app

Verification

  1. No crash on the action that previously crashed.
  2. macOS shows a permission prompt the first time (if status is .notDetermined).
  3. Check the new crash reports directory — no new .ips files should appear after the action:
    bash
    ls -t ~/Library/Logs/DiagnosticReports/<AppName>-*.ips 2>/dev/null | head -3
  4. Verify the built .app bundle contains the key (Info.plist is copied in during build, but sanity-check):
    bash
    grep -A1 NSPhotoLibrary build/macos/Build/Products/Debug/MyApp.app/Contents/Info.plist
  5. log show --last 2m --predicate 'subsystem == "com.apple.TCC"' should show an authorization grant for the app's bundle ID instead of a crash.
Show full SKILL.md (316 more words)Show less

Diagnosing from the crash report

A fast one-liner to extract the key info from a .ips crash report:

bash
python3 -c "
import json, sys
with open(sys.argv[1]) as f:
    f.readline()  # skip header JSON line
    d = json.loads(f.read())
print('Signal:', d.get('exception', {}).get('signal'))
print('Namespace:', d.get('termination', {}).get('namespace'))
print('Details:', d.get('termination', {}).get('details'))
" ~/Library/Logs/DiagnosticReports/MyApp-*.ips

If namespace == 'TCC' and details mention "usage description", this skill applies.

Notes

  • Why SIGKILL and not a graceful deny? Apple decided privacy violations are a policy failure of the developer, not a runtime condition to handle. The OS terminates the process so there is no way for an app to "try anyway" or log workarounds. There is no API to catch this.
  • It applies even to code paths you do not call. If a linked framework or plugin touches a protected resource on your behalf (e.g. a media plugin that probes Photos on init), you need the usage description even if your own code never touches Photos. This is why the key should be added whenever you include a plugin that might access the resource.
  • Hot reload will not rescue you. Flutter hot reload and hot restart do not update Info.plist in the running bundle. You must fully rebuild.
  • iOS vs macOS: The same keys exist on iOS, but on iOS a missing key usually results in a silent deny rather than SIGKILL on older iOS versions. Recent iOS versions align with macOS and will crash. Either way, always set the key.
  • The "Add" vs full Photos distinction was tightened in macOS 14/15/26. Earlier macOS versions let you do some album operations with add-only; recent releases do not. If an app that worked on older macOS starts crashing after a macOS upgrade, check for this first.
  • Related but different: flutter-macos-tcc-responsible-process-camera-denial covers TCC denying camera access when the responsible process attribution is wrong (no crash, just silent denial). That is a different TCC failure mode than the SIGKILL covered here.

References

© divinevideo, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .agents/skills/macos-tcc-sigkill-missing-usage-description of divinevideo/divine-mobile.

Open the folder on GitHubat commit 4c622be

Compare with similar skills

macOS Tcc Sigkill Missing Usage Description next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

macOS Tcc Sigkill Missing Usage Description compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
macOS Tcc Sigkill Missing Usage Description this skilldivinevideo/divine-mobile266—~2.2kAutomated safety check: PassMPL-2.0
Frb Dev Envfzyzcjy/flutter_rust_bridge5.4k—~5.5kAutomated safety check: PassMIT
Engine Whats Newflutter/flutter179k—~978Automated safety check: PassBSD-3-Clause
Apple Designvrcm-team/VRCM1791 repos~6.2kAutomated safety check: PassMIT
Updating Android SDKflutter/flutter179k—~1.7kAutomated safety check: PassBSD-3-Clause
Frb Android Emulator Preparefzyzcjy/flutter_rust_bridge5.4k—~2.1kAutomated safety check: NotesMIT

Similar skills

  • Frb Dev Env

    fzyzcjy/flutter_rust_bridge

    A skill your agent uses when the user wants Docker-based FRB development or Tart-based iOS Simulator validation.

    5.4k GitHub stars~5.5k tokensUpdated yesterday
    MobileAuto-check passed
  • Engine Whats New

    flutter/flutter

    Generates the "what's new" release summary and diff file for changes in the Flutter engine (//engine/src/flutter) between two releases (e.g., 3.47 vs 3.44).

    179k GitHub stars~978 tokensUpdated today
    MobileAuto-check passed
  • Apple Design

    vrcm-team/VRCM

    Cross-platform UI/UX design reviewer grounded in Apple's Human Interface Guidelines (122 pages pulled from developer.apple.com, including 57 component pages) plus a design-craft lens for…

    179 GitHub starsUsed in 1 repo~6.2k tokens
    MobileAuto-check passed
  • Updating Android SDK

    flutter/flutter

    Upgrades Flutter's Android SDK dependency to a new Android API version (or preview/canary release) in packages.txt, verifies CIPD tag uniqueness, and packages/uploads the binaries using…

    179k GitHub stars~1.7k tokensUpdated today
    MobileAuto-check passed
  • Frb Android Emulator Prepare

    fzyzcjy/flutter_rust_bridge

    A skill your agent uses when preparing, installing, diagnosing, or explaining the host Android Emulator environment for flutterrustbridge local runtime validation, including Android SDK command-line…

    5.4k GitHub stars~2.1k tokensUpdated yesterday
    MobileAuto-check: notes
  • Odevio

    Odevio/Odevio-CLI

    Take a Flutter project to an iPhone or the App Store with Odevio - build, sign and publish iOS apps from Windows, Linux or macOS with no Mac and no Xcode.

    423 GitHub stars~7.6k tokensUpdated 14 days ago
    MobileAuto-check passed

More from divinevideo/divine-mobile

All 103 skills in this repo
  • Fix ArgoCD ExternalSecret deployment failing with "namespace X is not permitted in project Y".

    266 GitHub stars~931 tokensUpdated today
    Auto-check passed
  • Art Direct

    divinevideo/divine-mobile

    Art direction for any content — reads text, PDF, Word, HTML, PPT, then proposes 2-3 creative directions with photography style, mood, and visual language.

    266 GitHub stars~4.8k tokensUpdated today
    Auto-check passed
  • Async Await Null Race Condition

    divinevideo/divine-mobile

    Fix "Null check operator used on a null value" errors when an object is set to null during an async await.

    266 GitHub stars~881 tokensUpdated today
    Auto-check passed
  • AWS V4 Signing Custom Headers Gcs

    divinevideo/divine-mobile

    Add custom metadata headers (x-amz-meta-) to AWS v4 signed requests for GCS S3-compatible API.

    266 GitHub stars~1k tokensUpdated today
    Auto-check passed
  • Bash Herestring Newline Secrets

    divinevideo/divine-mobile

    Fix password/secret authentication failures caused by trailing newlines when creating Google Cloud secrets (or similar) with bash here-strings.

    266 GitHub stars~791 tokensUpdated today
    Auto-check passed
  • Fix silent video/media processing failures caused by URL extraction code that filters on file extensions (.mp4, .webm, .webp).

    266 GitHub stars~1.1k tokensUpdated today
    Auto-check passed

Works with

Categories

Questions about macOS Tcc Sigkill Missing Usage Description

What does macOS Tcc Sigkill Missing Usage Description do?

Fix macOS app hard crashes (EXCCRASH / SIGKILL) caused by accessing TCC-protected APIs without the matching Info.plist usage description key. macOS Tcc Sigkill Missing Usage Description is an agent skill from divinevideo/divine-mobile.plist usage description key.

When should I use macOS Tcc Sigkill Missing Usage Description?

macOS Tcc Sigkill Missing Usage Description fits situations like: app crashes immediately when touching Photos; screen Recording; crash report shows Exception: EXCCRASH (SIGKILL) with Termination namespace: TCC; crash stack includes TCC.TCCCRASHINGDUETOPRIVACYVIOLATION.

How do I install macOS Tcc Sigkill Missing Usage Description in Claude Code?

Run `npx skills add divinevideo/divine-mobile --skill macos-tcc-sigkill-missing-usage-description -a claude-code`. Or copy the skill folder (.agents/skills/macos-tcc-sigkill-missing-usage-description in divinevideo/divine-mobile) into .claude/skills/macos-tcc-sigkill-missing-usage-description in your project. Claude Code loads it when a task matches its description.

How do I install macOS Tcc Sigkill Missing Usage Description in Codex?

Run `npx skills add divinevideo/divine-mobile --skill macos-tcc-sigkill-missing-usage-description -a codex`. Or copy the skill folder (.agents/skills/macos-tcc-sigkill-missing-usage-description in divinevideo/divine-mobile) into .agents/skills/macos-tcc-sigkill-missing-usage-description in your project. Codex loads it when a task matches its description.

Can I use macOS Tcc Sigkill Missing Usage Description in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add divinevideo/divine-mobile --skill macos-tcc-sigkill-missing-usage-description -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/macos-tcc-sigkill-missing-usage-description, .gemini/skills/macos-tcc-sigkill-missing-usage-description, .github/skills/macos-tcc-sigkill-missing-usage-description and .opencode/skills/macos-tcc-sigkill-missing-usage-description in your project.

What does macOS Tcc Sigkill Missing Usage Description need to run?

Going by SKILL.md and its folder, macOS Tcc Sigkill Missing Usage Description needs the command-line tools its instructions call (flutter and python3). Our summary lists: Python 3.

Does macOS Tcc Sigkill Missing Usage Description access the network?

SKILL.md names 1 domain. As links in the text: developer.apple.com. This is read from the text; nothing was executed.

Is macOS Tcc Sigkill Missing Usage Description safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does macOS Tcc Sigkill Missing Usage Description use?

macOS Tcc Sigkill Missing Usage Description is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does macOS Tcc Sigkill Missing Usage Description use?

About 2.2k tokens (SKILL.md is roughly 9k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to macOS Tcc Sigkill Missing Usage Description?

Skills that share tags, products or a category with macOS Tcc Sigkill Missing Usage Description: Frb Dev Env (fzyzcjy/flutter_rust_bridge, 5.4k stars), Engine Whats New (flutter/flutter, 179k stars), Apple Design (vrcm-team/VRCM, 179 stars) and Updating Android SDK (flutter/flutter, 179k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains macOS Tcc Sigkill Missing Usage Description?

divinevideo (a GitHub organization) maintains it in divinevideo/divine-mobile, which has 266 GitHub stars. The repository holds 103 skills in this directory. The repository was last updated on October 8, 2026.

Source: divinevideo/divine-mobile on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.