Install
$ agentstack add skill-rshankras-claude-code-apple-skills-analytics-setup ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Analytics Setup Generator
Generate a protocol-based analytics infrastructure that makes it easy to swap providers without changing app code.
When This Skill Activates
Use this skill when the user:
- Asks to "add analytics" or "set up analytics"
- Mentions "TelemetryDeck", "Firebase Analytics", "Mixpanel"
- Wants to "track events" or "add telemetry"
- Asks about "privacy-friendly analytics"
- Wants to swap analytics providers
Key Feature: Swappable Providers
The generated code uses a protocol-based architecture:
// Your app uses the protocol
analytics.track(.buttonTapped("subscribe"))
// Swap providers by changing ONE line:
let analytics: AnalyticsService = TelemetryDeckAnalytics() // or FirebaseAnalytics()
Pre-Generation Checks
1. Project Context Detection
- [ ] Check for existing analytics implementations
- [ ] Look for TelemetryDeck/Firebase/Mixpanel in Package.swift or Podfile
- [ ] Identify source file locations
2. Conflict Detection
Search for existing analytics:
Glob: **/*Analytics*.swift, **/*Telemetry*.swift
Grep: "protocol.*Analytics" or "TelemetryDeck" or "Firebase"
If found, ask user:
- Extend existing analytics?
- Replace with new implementation?
- Add new provider to existing setup?
Configuration Questions
Ask user via AskUserQuestion:
- Which provider(s)?
- TelemetryDeck (privacy-friendly, recommended)
- Firebase Analytics
- Mixpanel
- None (NoOp for now, add later)
- What events to track?
- App lifecycle (launch, background, foreground)
- Screen views
- User actions (buttons, features used)
- Errors
- Custom events
- User properties?
- App version
- Subscription status
- Custom properties
Generation Process
Step 1: Create Core Files
Always generate these files:
AnalyticsService.swift- Protocol (never changes)AnalyticsEvent.swift- Event definitions (app-specific)NoOpAnalytics.swift- For testing/privacy mode
Step 2: Create Selected Provider(s)
Based on user selection:
TelemetryDeckAnalytics.swiftFirebaseAnalytics.swiftMixpanelAnalytics.swift
Step 3: Create Environment Integration
For SwiftUI apps:
AnalyticsServiceKey.swift- Environment key for dependency injection
Step 4: Determine File Location
Check project structure:
- If
Sources/exists →Sources/Analytics/ - If
App/exists →App/Analytics/ - Otherwise →
Analytics/
Output Format
After generation, provide:
Files Created
Sources/Analytics/
├── AnalyticsService.swift # Protocol (stable interface)
├── AnalyticsEvent.swift # Your app's events
├── Providers/
│ ├── NoOpAnalytics.swift # Testing/privacy
│ └── [Provider]Analytics.swift # Selected provider(s)
└── AnalyticsServiceKey.swift # SwiftUI Environment (optional)
Integration Steps
App Entry Point:
@main
struct MyApp: App {
// Choose your provider
private let analytics: AnalyticsService = TelemetryDeckAnalytics(appID: "YOUR-APP-ID")
init() {
analytics.configure()
}
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.analytics, analytics)
}
}
}
Tracking Events:
struct ContentView: View {
@Environment(\.analytics) private var analytics
var body: some View {
Button("Subscribe") {
analytics.track(.buttonTapped("subscribe"))
}
}
}
Required Dependencies
TelemetryDeck:
// Package.swift
.package(url: "https://github.com/TelemetryDeck/SwiftClient", from: "1.0.0")
Firebase:
// Package.swift
.package(url: "https://github.com/firebase/firebase-ios-sdk", from: "10.0.0")
// Also requires GoogleService-Info.plist
Swapping Providers Later
To switch providers:
- Add new provider file (or generate with this skill)
- Change ONE line in App.swift:
// Before
private let analytics: AnalyticsService = TelemetryDeckAnalytics(...)
// After
private let analytics: AnalyticsService = FirebaseAnalytics()
Testing
- Use
NoOpAnalytics()in tests and previews - All tracking calls become no-ops
- No external dependencies in tests
References
- analytics-patterns.md - Protocol architecture and best practices
- templates/ - All template files
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: rshankras
- Source: rshankras/claude-code-apple-skills
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.