apple-public-repo-security — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited apple-public-repo-security (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
| Secret | Purpose | Storage |
|---|---|---|
| CloudKit server-to-server key (Key ID + PEM) | Backend API | Xcode Cloud Env Vars (Secret); locally in secrets/ (chmod 600, gitignored) or Keychain |
App Store Connect API Key (.p8 + Key ID + Issuer ID) | TestFlight / submission automation | Xcode Cloud Env Vars (Secret); locally in secrets/ (chmod 600, gitignored) or Keychain |
APNs Auth Key (.p8 + Key ID + Team ID) | Push notifications | Xcode Cloud Env Vars (Secret) |
Signing certificate + private key (.p12) | Code signing | Xcode Cloud automatic signing, hosted by Apple |
| Provisioning profiles | Code signing | Xcode Cloud Apple-managed |
| Player identification data | Runtime debug | OSLog .private interpolation; never committed to git |
secrets/ real files.gitignore# Secrets / credentials
*.pem
*.p8
*.p12
*.mobileprovision
*.cer
.env
.env.*
!.env.example
secrets/
# Xcode / build
DerivedData/
build/
xcuserdata/
*.xcuserstate
.swiftpm/
# macOS
.DS_Store
# Personal notes
*.private.md
# Local development secrets directory is `secrets/` (chmod 600 PEMs / API keys
# live here; already ignored above via `secrets/`). Allow-list examples with a
# nested `secrets/.gitignore` (`* / !*.example / !README.md / !example/ /
# !example/**`) instead of a second top-level rule — see
# `build-time-secret-injection`. The last two lines are required: `*` also
# ignores the `example/` directory itself, and git does not descend into an
# ignored directory to apply `!README.md` to files inside it (verify with
# `git check-ignore -v secrets/example/README.md`).| Line | Tool | Scope |
|---|---|---|
| 1. Local pre-commit | lefthook + gitleaks (via mise) | Catches staged diffs; can be bypassed with --no-verify |
| 2. CI post-clone | Xcode Cloud ci_post_clone.sh runs gitleaks | Catches at PR time; fails the build; earliest stage is cheapest |
| 3. GitHub Secret Scanning Alerts | GitHub platform (free on public repos) | Passive detection; alerts a common private-key / generic API-key pattern — only once Generic patterns is enabled (Settings → Advanced Security → Secret Protection) — but does not auto-revoke it — Apple is not in GitHub's secret-scanning partner program, so any Apple-issued key (CloudKit, ASC, APNs) still needs a manual rotation |
lefthook.yml example:
pre-commit:
parallel: true
commands:
gitleaks:
run: mise exec -- gitleaks git --pre-commit --staged --redact --verboseci_post_clone.sh example — Xcode Cloud runs custom build scripts with ci_scripts/ as the root directory, so the first line must cd back to the repo root before anything else; Xcode Cloud also has no mise preinstalled (see xcode-cloud-single-track-ci), so this goes through the committed bin/mise wrapper, and scans the checked-out working directory rather than the staged diff (a fresh clone has nothing staged, so --staged would scan zero lines and leave this line of defence empty):
cd "$CI_PRIMARY_REPOSITORY_PATH"
./bin/mise trust
./bin/mise install
./bin/mise exec -- gitleaks dir . --redact --verbose
if [ $? -ne 0 ]; then
echo "gitleaks detected potential secrets — failing build"
exit 1
figit filter-repo to clean history + force push (Git's own docs say git filter-branch's use "is not recommended", not that it's deprecated — but filter-repo remains the practical choice; GitHub's own sensitive-data-removal workflow requires filter-repo ≥ 2.47 run with --sensitive-data-removal)meetings/ for consumers of collaboration-skills:spec-phase-orchestration).env.example: list all env var keys with placeholder valuessecrets/example/README.md: explain the local PEM directory layout (do not include a `.pem.example` real file — gitleaks's built-in private-key rule needs the full header + ≥64-character body + footer to fire, so a placeholder with only the header text won't trip it and isn't a safe substitute for keeping the real key out; if you must include a real example, explicitly allowlist it in .gitleaks.toml)docs/setup.md: first-clone steps for new developersThe App's commitment to users (aligned with PrivacyInfo.xcprivacy):
Legitimate Apple upstream channels (users can disable in Settings):
MXMetricPayload / MXDiagnosticPayload — delivered to the App itself, not to Apple; this is in-app telemetry, not an upload channel.private is redacted here)Every PR review additionally checks:
PrivacyInfo.xcprivacy + App Store metadata are updated in sync.pem.example) to hold real files temporarily; clean up before going public.git commit --no-verify — this cannot be technically blocked client-side. Educate contributors, and rely on the second line (CI gitleaks in ci_post_clone.sh) as the actual hard gate. Without CI, the second line is missing entirely; mitigations are social (code review, contributor education) rather than technical..gitignore covers the secret file extensions listed above..mise.toml includes gitleaks + lefthook.lefthook.yml runs gitleaks pre-commit.ci_post_clone.sh runs gitleaks with fail-on-detect.docs/setup.md instructs lefthook install to activate hooks.PrivacyInfo.xcprivacy is consistent with the public commitments.mise-tool-management: gitleaks + lefthook installed via mise.xcode-cloud-single-track-ci: ci_post_clone.sh is where the second line lives.oslog-logger-defaults: .private interpolation matches the sysdiagnose redaction semantics.apple-three-piece-analytics: "no third-party SDK" is one of the public commitments.build-time-secret-injection: ship-in-binary identifiers (AdMob IDs via xcconfig) and CLI keys in secrets/.env — this skill only owns the leak-prevention lines of defence, not where those values live day to day.asc-api-automation: what the ASC API .p8 is used for once it is stored safely.references/official-docs.md.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.