AppSignalsAnalytics
Self‑Hosted iOS Analytics & Crash Reporting
Install / Use
/learn @adgan11/AppSignalsAnalyticsREADME
AppSignals Analytics
Self-hosted analytics for iOS apps with first-party data ownership.
</div>Overview
AppSignals Analytics is an open-source analytics stack for iOS products. It combines a Laravel backend dashboard, a Swift SDK, and a demo app so teams can run analytics on their own infrastructure.
Project Screenshot
Features
- Event ingestion with batching and custom properties
- Crash reporting with dSYM-based symbolication support
- Session replay wireframes with redaction-aware capture
- Dashboard views for events, crashes, replays, and product metrics
- Real-time updates via Laravel Reverb
- API key-based ingestion and project-level isolation
- Privacy-first design with self-hosted control
Repository Structure
| Path | Description |
| --- | --- |
| backend/ | Laravel backend, ingestion APIs, dashboard UI, queues, scheduler |
| AppSignalsSDK/ | Swift Package SDK for iOS/macOS event and crash tracking |
| AppSignalsDemo/ | Example iOS app integrated with the SDK |
| Documentation/ | Setup guide, deployment templates, server requirements |
Architecture
flowchart LR
A[iOS App] --> B[AppSignalsSDK]
B --> C[Ingestion API]
C --> D[Queue + Jobs]
D --> E[(MySQL or MariaDB)]
E --> F[Dashboard API + UI]
F --> G[Analytics Dashboard]
Quick Start
Prerequisites
- PHP 8.2+
- Composer
- Node.js 20+ and npm
- MySQL 8.0+ or MariaDB 10.6+
- Xcode (for SDK/demo app development)
1. Start the Backend
cd backend
composer install
npm install
cp .env.example .env
php artisan key:generate
# Set DB_* values in .env, then:
php artisan migrate --seed
Run services (recommended helper):
./start_dev.sh
Or run manually:
php artisan serve --host=127.0.0.1 --port=8000
php artisan reverb:start
php artisan queue:work
npm run dev
2. Add the SDK
Use Swift Package Manager from local path:
dependencies: [
.package(path: "../AppSignalsSDK")
]
Initialize in your app:
import AppSignalsSDK
AppSignals.initialize(
apiKey: "ok_live_your_api_key_here",
serverURL: "http://127.0.0.1:8000"
)
AppSignals.debugLogging = true
AppSignals.enableAutoTracking = true
AppSignals.enableCrashReporting = true
Track your first event:
AppSignals.track("button_clicked", properties: [
"screen": "home"
])
API Endpoints
| Endpoint | Method | Purpose |
| --- | --- | --- |
| /api/v1/ingest | POST | Batched event ingestion |
| /api/v1/crash | POST | Crash payload ingestion |
| /api/v1/replay | POST | Session replay frame ingestion |
Documentation
- Full docs:
Documentation/index.html - Backend details:
backend/README.md - SDK details:
AppSignalsSDK/README.md - Deployment templates:
Documentation/deployment-templates/
Development
Backend tests:
cd backend
php artisan test
SDK tests:
cd AppSignalsSDK
swift test
Contributing
Issues and pull requests are welcome.
- Fork the repository
- Create a feature branch
- Add tests for behavior changes
- Open a pull request with a clear summary
Star History
Support
If this project helps you, support development here:
https://shabgagan.gumroad.com/coffee
License
Licensed under the MIT License. See LICENSE.
