capacitor-ios-security-hardening
Audits and progressively hardens Xcode security build settings for a Capacitor iOS app (ios/App/App.xcodeproj, scheme App) and native plugin code…
Skill by Cap-go
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/cap-go-capacitor-ios-security-hardening
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: security
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md and code. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
- Runs as
- Node.js package
Network hosts it talks to 4
capacitorjs.com· found in codeclang.llvm.org· found in codecodeload.github.com· found in install commanddeveloper.apple.com· found in code
Files it touches
~/.claude/skills/capacitor-ios-security-hardening
What's inside
- Skill name
capacitor-ios-security-hardening- Description
- Audits and progressively hardens Xcode security build settings for a Capacitor iOS app (ios/App/App.xcodeproj, scheme App) and native plugin code (Swift/ObjC/C, Package.swift, podspec). Covers `xcodebuild -showBuildSettings -json`, security compiler warnings, static analyzer checkers (`xcodebuild analyze`), Xcode Enhanced Security (ENABLE_ENHANCED_SECURITY, com.apple.security.hardened-process entitlements, pointer authentication / arm64e, memory tagging soft mode), what is safe for a WKWebView hybrid app vs what breaks CocoaPods, SPM binary xcframeworks or Cordova plugins, staged adoption, and a decision log. Use for "harden my iOS build", "enable Enhanced Security", security build settings audit, arm64e link errors after enabling pointer authentication, or Build and Analyze setup. Do not use for ATS/TLS, signing, secrets or WebView rules (capacitor-security), or App Store review (capacitor-apple-review-preflight).
- License
- MIT
- Instructions
- 134 lines in SKILL.md · view on GitHub
Before installing
- Ships executable scripts
Agent Skills spec issues
- allowed-tools: must be a space-separated string
Files (8)
- SKILL.md
- metadata.json
- decision-log.md · references/
- enhanced-security.md · references/
- plugin-authors.md · references/
- reading-build-settings.md · references/
- settings-catalog.md · references/
- audit-build-settings.mjs · scripts/
SKILL.md (first lines)
# Capacitor iOS Security Hardening Audit the security-relevant Xcode build settings of a Capacitor app and its native plugins, then enable them in stages the user approves. This skill changes build settings and entitlements only. It never touches web code, ATS, signing, or secrets. ## When to Use TRIGGER when: - The user wants to audit or harden the iOS build configuration of a Capacitor app - The user asks about Enhanced Security, `ENABLE_ENHANCED_SECURITY`, hardened-process entitlements, pointer authentication, arm64e, or memory tagging - After enabling Enhanced Security, the link step fails with errors that mention `arm64e` - A plugin author wants stricter warnings or static analysis for plugin Swift/ObjC/C code - The user wants "Build and Analyze" / `xcodebuild analyze` in CI Do not use: - ATS, TLS pinning, signing, secrets, WebView config, Capsec scans: `capacitor-security` - App Store privacy manifest and review checklist: `capacitor-apple-review-preflight` - The AppDelegate to SceneDelegate migration: `capacitor-uiscene-migration` - Android R8, network security config: `capacitor-security` ## Facts that change the plan - **Build settings do not cross project boundaries.** Settings on the App target do not apply to Pods (`ios/App/Pods/Pods.xcodeproj`), to SPM packages (plugins, `CapApp-SPM`), or to the Cordova plugin package that `npx cap sync` generates. Hardening plugin code is done in the plugin repo (podspec / Package.swift), not in the app. - **The App target of a stock Capacitor app is pure Swift** (`AppDelegate.swift`, `SceneDelegate.swift`). Clang warnings and analyzer checkers only matter if the app target has `.m`, `.mm`, `.c` or `.cpp` files. Detect languages before proposing them. - **The Capacitor 8 templates already set three Stage A warnings** at project level (`GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR`, `GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE`, `GCC_WARN_64_TO_32_BIT_CONVERSION = YES`). Report them as already hardened. Do not re-add them. - **WKWebView content is not affected.** JavaScript and JIT run in WebKit's own processes. Enhanced Security entitlements apply to the app process and the native code linked into it (Capacitor runtime, plugins, SDKs). - **Pointer authentication adds an `arm64e` slice** to device builds. Every binary linked into the app must also have `arm64e`, or the link fails. This is the main breakage risk in Capacitor apps. See [references/enhanced-security.md](references/enhanced-security.md). - **Do not edit generated files.** `ios/App/Pods/**`, `Pods-App.*.xcconfig`, `ios/App/CapApp-SPM/Package.swift`, `ios/capacitor-cordova-ios-plugins/**` and `ios/debug.xcconfig` (SPM template, Debug only, CLI-managed) are rewritten by CocoaPods or `npx cap sync`. Put settings in the App project (Xcode Build Settings, which writes `project.pbxproj`) or in an xcconfig the team already owns. - **The user owns the result.** Enhanced Security turns latent memory bugs into crashes. Report findings and get approval before changing anything. Test on real hardware before shipping. ## References Only load a reference when its topic is in play. | File | Load when | |------|-----------| | [references/settings-catalog.md](references/settings-catalog.md) | Building the audit table: every tracked setting, its hardened value, language scope, risk | | [references/reading-build-settings.md](references/reading-build-settings.md) | Running `xcodebuild -showBuildSettings`, using the audit script, telling "explicitly disabled" from "default off" | | [references/enhanced-security.md](references/enhanced-security.md) | Enabling the Enhanced Security capability, entitlements, pointer authentication with CocoaPods/SPM/binary SDKs, memory tagging | | [references/plugin-authors.md](references/plugin-authors.md) | Hardening plugin code: podspec `pod_target_xcconfig`, Package.swift warning settings, analyzing a plugin repo, shipping arm64e xcframeworks | | [references/decision-log.md](references/decision-log.md) | Creating or updating the team's decision document | Script: [scripts/audit-build-settings.mjs](scripts/audit-build-settings.mjs) filters `xcodebuild -showBuildSettings -json` output to the tracked settings and marks each as hardened, default, or explicitly set (when given the pbxproj). ## Workflow ### 1. Brief and check source control Tell the user in two or three sentences: you will audit first, write a plan, and change nothing until they approve. If the project has no git, recommend committing first. Stop if they decline. ### 2. Discover (read-only) 1. Confirm the iOS project: `ios/App/App.xcodeproj` exists. Note SPM (`ios/App/CapApp-SPM/`) vs CocoaPods (`ios/App/Podfile`, `App.xcworkspace`). 2. Read the Capacitor version from `package.json` (`@capacitor/ios`). Capacitor 8 deploys to iOS 15, Capacitor 9 to iOS 16 and needs Xcode 27. 3. Detect languages in the App target folder: `find ios/App/App -name '*.m' -o -name '*.mm' -o -name '*.c' -o -name '*.cpp'`. Also run `grep -E 'sourcecode\.cpp\.' ios/App/App.xcodeproj/project.pbxproj` to catch files whose type was overridden to C++/ObjC++. 4. List native dependencies that ship binaries: xcframeworks in `node_modules/**/ios/**`, `binaryTarget` in plugin `Package.swift` files, `vendored_frameworks` in podspecs. 5. Look for an existing decision document (`ios/xcode-security-settings.md` or similar) and read prior decisions. 6. Read evaluated settings for Debug and Release (see [references/reading-build-settings.md](references/reading-build-settings.md)): ```bash xcodebuild -showBuildSettings -json -project ios/App/App.xcodeproj -target App -configuration Release > /tmp/app-release.json node <skill>/scripts/audit-build-settings.mjs /tmp/app-release.json --pbxproj ios/App/App.xcodeproj/project.pbxproj ``` 7. Read the entitlements file at the evaluated `CODE_SIGN_ENTITLEMENTS` path. The stock template has none; that is normal. ### 3. Build the plan and ask Write the plan into the chat (or a file the user names). Group it by stage. Show only items that apply: | Stage | Items | Default | |-------|-------|---------| | A. Compiler warnings | The five security warnings, only if C/ObjC/C++ is present in the target | on | | B. Static analyzer | The security checkers plus the clang-tidy check; analyzer runs only on Analyze, so no build risk | on | | C. Enhanced Security | Capability at project level, entitlements on the App target, pointer authentication with the dependency plan | on, after the dependency check | | D. Memory tagging | `checked-allocations` + `soft-mode` | off, offer | | E. Extra diagnostics | The noisier warnings | off, offer | | F. Disabled settings | Ask about each explicit `= NO` that has no documented reason | on | Ask the user to approve, edit or cancel. Real judgement calls to put to the user: - A binary SDK with no `arm64e` slice: turn pointer authentication off on the App target (keeps the rest of Enhanced Security) or wait for the vendor. - CocoaPods: add a `post_install` hook that enables pointer authentication on pod targets, or turn it off on the App target. - Memory tagging: only with a plan to test on capable hardware. ### 4. Apply, one stage at a time - Apply settings at the **project** level of `App.xcodeproj` so every target inherits them, unless the setting is per target (entitlements, pointer-authentication opt-out). - Best path: ask the user to set them in Xcode (project > Build Settings > All). Then verify with `grep` on `project.pbxproj`. If you edit `project.pbxproj` yourself, edit only the `buildSettings` dictionaries of the project's own Debug and Release `XCBuildConfiguration` entries (the ones listed by the PBXProject `buildConfigurationList`), keep the `KEY = VALUE;` syntax, and re-run `-showBuildSettings` to confirm. - Add Enhanced Security through **Signing & Capabilities > + Capability > Enhanced Security** on the App target. This creates or updates `App.entitlements` and wires `CODE_SIGN_ENTITLEMENTS`. Details: [references/enhanced-security.md](references/enhanced-security.md). - After each stage, build (step 5) before starting the next one. If a stage breaks the build, revert that stage, record why in the decision log, and continue. ### 5. Verify ```bash # Sync, then build for a device (arm64e only exists for device SDKs) npx cap sync ios xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Release \ -destination 'generic/platform=iOS' CODE_SIGNING_ALLOWED=NO build # CocoaPods projects: use -workspace ios/App/App.xcworkspace instead of -project # Static analyzer xcodebuild -project ios/App/App.xcodeproj -scheme App -configuration Debug \ -destination 'generic/platform=iOS Simulator' analyze # Confirm the slices of the built app binary lipo -archs ~/Library/Developer/Xcode/DerivedData/App-*/Build/Products/Release-iphoneos/App.app/App ``` - Re-run the audit script. Every approved setting shows as hardened. - Simulator builds keep working: simulator SDKs have no `arm64e`, and the build system drops it. Do not add a simulator-only opt-out. - Run the app on a real device. Check launch, plugin calls, and the JS `pause` / `resume` events. With memory tagging in soft mode, collect the simulated crash reports from Xcode Organizer or the device logs (`ios-android-logs`). ### 6. Report and record Report: what was enabled, what was already hardened, what was skipped and why, which dependencies block `arm64e`, and the action item to test on hardware before release. Then update the decision document ([references/decision-log.md](references/decision-log.md)). ## Error Handling | Symptom | Cause | Fix | |---------|-------|-----|
From Cap-go/capgo-skills, MIT.
More from Cap-go/capgo-skills
- 0.674score
capacitor-offline-first
Cap-go
Designs and implements offline-first data in Capacitor apps - local SQLite source of truth with @capgo/capacitor-fast-sql (`FastSQL.connect`…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-plugin-spm-support
Cap-go
Adds Swift Package Manager support to an existing Capacitor plugin repository so apps using CapApp-SPM can consume it after CocoaPods Trunk goes read-only…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-mcp
Cap-go
Connect AI agents (Claude Code, Claude Desktop, Cursor, VS Code, Cline, Codex) to Capacitor and Ionic tooling over Model Context Protocol.
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-deep-linking
Cap-go
Implements and debugs deep links in Capacitor apps - custom URL schemes, iOS Universal Links (apple-app-site-association, Associated Domains entitlement)…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-splash-screen
Cap-go
Configures and debugs launch splash screens in Capacitor apps with @capacitor/splash-screen and @capacitor/assets - `launchAutoHide`, `SplashScreen.hide()`…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
cocoapods-to-spm
Cap-go
Migrates an existing Capacitor iOS app from CocoaPods to Swift Package Manager (SPM) before CocoaPods Trunk goes read-only (expected December 2, 2026).
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-testing
Cap-go
Testing guide for Capacitor apps and plugins.
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-best-practices
Cap-go
Review and set up Capacitor apps against current best practices (Capacitor 8.5 stable, 9 alpha via `@next`).
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-plugins
Cap-go
Pick, install, and wire up Capacitor plugins for native features (camera, filesystem, geolocation, biometrics, in-app purchases, social login, SQLite…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-app-intents
Cap-go
Exposes Capacitor app features to Siri, Shortcuts, Spotlight, the Action button, Apple Intelligence, widgets and controls with native App Intents in…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-push-notifications
Cap-go
Sets up and debugs remote push in Capacitor apps with @capacitor/push-notifications (FCM on Android, APNs on iOS), or Capgo alternatives…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-accessibility
Cap-go
Makes Capacitor apps work with VoiceOver, TalkBack, Dynamic Type / Android font scale, Switch Control, hardware keyboards, Reduce Motion and Increase Contrast.
SkillAFreshness: A★ 73Claude Code +9
Signals
- Stars
- 73
- Forks
- 3
- Open issues
- 0
- Last commit (this folder)
- Oct 11, 2026 (19 days ago)
- Last release
- Oct 11, 2026 (19 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/Cap-go/capgo-skills
- Website
- capgo.app
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Cap-go
- 0.674score
capacitor-best-practices
Cap-go
Review and set up Capacitor apps against current best practices (Capacitor 8.5 stable, 9 alpha via `@next`).
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-plugins
Cap-go
Pick, install, and wire up Capacitor plugins for native features (camera, filesystem, geolocation, biometrics, in-app purchases, social login, SQLite…
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-testing
Cap-go
Testing guide for Capacitor apps and plugins.
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
cocoapods-to-spm
Cap-go
Migrates an existing Capacitor iOS app from CocoaPods to Swift Package Manager (SPM) before CocoaPods Trunk goes read-only (expected December 2, 2026).
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-mcp
Cap-go
Connect AI agents (Claude Code, Claude Desktop, Cursor, VS Code, Cline, Codex) to Capacitor and Ionic tooling over Model Context Protocol.
SkillAFreshness: A★ 73Claude Code +9 - 0.674score
capacitor-app-intents
Cap-go
Exposes Capacitor app features to Siri, Shortcuts, Spotlight, the Action button, Apple Intelligence, widgets and controls with native App Intents in…
SkillAFreshness: A★ 73Claude Code +9
Cite this page
capacitor-ios-security-hardening skill. Agent Mart. https://agentmart.dev/skills/cap-go-capacitor-ios-security-hardening (last updated 2026-10-24)