oslog-logger-defaults — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited oslog-logger-defaults (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.
os.Logger DefaultsLogger declaration..private vs .public how to pick".import os); do not pull in any third-party logging library.subsystem = bundle ID (e.g. com.example.myapp)category = module name (aligned with the SwiftPM target name).private; integer, floating-point, and Boolean values default to .public. Any identifying numeric value (player ID, user ID, serial number) must be marked .private explicitly.import os
extension Logger {
static let engine = Logger(subsystem: "com.example.myapp", category: "Engine")
}
Logger.engine.info("user \(userId, privacy: .public) loaded puzzle \(puzzleId, privacy: .private)")
// ^^^^^^^ explicit public ^^^^^^^ explicit private —
// identifying values need this
// even when the type (Int, Bool)
// would otherwise default public.private values are redacted whenever no debugger is attached (see "What .private actually means" below).PrivacyInfo.xcprivacy, consistent with the "no third-party tracking" stance..private actually means (easily misunderstood)Practice observed — none of the four official pages in `references/official-docs.md` state the debugger-attached or `OSLogStore` behavior below; this is derived from testing, not documented.
.private content is redacted wherever no debugger is attached — this includes a TestFlight user viewing their own Console.app, not only "in someone else's sysdiagnose after release."OSLogStore reading its own process still sees <private> in place of redacted values — only a process that Xcode itself launched gets unredacted output. .private is redaction, not encryption; never log raw PII even under .private.swift-log (apple/swift-log) as a facade; on Apple platforms, back it with a third-party OSLog handler package (apple/swift-log's own distribution ships no OSLog backend) so the interface stays platform-neutral.telemetry-facade-pattern's fan-out sink rather than replacing OSLog directly.import Logging / import CocoaLumberjack / import Sentry or other third-party logging.Logger extension with a category aligned to the module name..public annotation can be explained as non-privacy-violating (e.g. non-PII, build hash)..private (or not logged at all).telemetry-facade-pattern: where OSLogSink sits within the facade.apple-three-piece-analytics: OSLog is an Apple-only path, in the same "no third-party" stance as ASC / MetricKit / GC.apple-public-repo-security: .private corresponds to sysdiagnose redaction, but is still visible under a debugger — the safety reasoning for the public repo relies on this semantics.ios-performance-engineering: OSSignposter / os_signpost intervals and Instruments profiling; this skill stops at Logger.references/official-docs.md.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.