Where是一款针对iOS和Android的实时位置共享软件,注重隐私。与其他位置软件不同,Where使用端到端加密(E2EE),确保只有您和您的朋友能看到您的位置。
AI 翻译
Where is a realtime location sharing app for iOS and Android designed for privacy. Unlike other location apps, Where uses end-to-end encryption (E2EE) to ensure that only you and your friends can see where you are.
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
👉Join the Testers group to get early access (and help me publish on the Play Store)!👈
A cross-platform, end-to-end encrypted real-time location sharing app for iOS and Android, built with Kotlin Multiplatform.
• Webpage: where.af0.net
• Android: Google Play
• iOS: App Store
• Beta Testing: Join the closed testing group
Where is designed so the server learns as little as possible:查看完整 README ↗A cross-platform, end-to-end encrypted real-time location sharing app for iOS and Android, built with Kotlin Multiplatform.
Where is designed so the server learns as little as possible:
[iOS / Android]
GPS → LocationService
→ encrypt (Double Ratchet)
→ POST /inbox/{send_token}
[Server]
routes opaque ciphertext, no decryption
[Recipient]
GET /inbox/{recv_token}
→ decrypt
→ update map pin
| Module | Description |
|---|---|
shared/ | KMP library — data models, Double Ratchet E2EE, LocationClient |
android/ | Android app — Jetpack Compose UI, FusedLocation foreground service, Google Maps |
ios/ | iOS app — SwiftUI, MapKit, CoreLocation |
server/ | Ktor server — Anonymous Mailbox API, DynamoDB-backed message store |
cli/ | Command-line tool for scripting and testing |
Uses an in-memory store by default; set AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY and AWS_REGION to use DynamoDB.
./gradlew :server:run
curl localhost:8080/health # → ok
local.properties:
MAPS_API_KEY=your_google_maps_key
SERVER_HTTP_URL=http://10.0.2.2:8080 # emulator; use LAN IP for a real device
./gradlew :android:assembleDebug
cd ios && xcodegen generate
ios/Where.xcodeproj in Xcode and run on simulator or device.
./scripts/run-server.sh); other builds use production. Override with WHERE_SERVER_HTTP_URL in the Xcode scheme (see ios/Sources/Where/ServerConfig.swift).Useful for scripting, integration testing, and pairing two terminals to verify the protocol end-to-end.
./gradlew :cli:installDist
# Terminal A — create an invite
./cli/build/install/cli/bin/cli init
./cli/build/install/cli/bin/cli invite # prints a where.af0.net/invite#… URL
# Terminal B — accept and start syncing
./cli/build/install/cli/bin/cli join <url> bob
./cli/build/install/cli/bin/cli sync
See MANUAL_TESTING.md for a full walkthrough.
./gradlew :shared:jvmTest
The E2EE crypto tests live in shared/src/commonTest/kotlin/net/af0/where/e2ee/.
Machine-specific paths go in gitignored local files — never in checked-in config:
| File | Purpose |
|---|---|
local.properties | Android SDK path, Maps API key, server URL |
local.gradle.kts | Build output dirs, cache dirs, SDK locations |
.envrc | Environment variables (GRADLE_USER_HOME, KONAN_DATA_DIR, etc.) |