Commit Graph

210 Commits

Author SHA1 Message Date
3c0f29adb6 docs(l10n): describe context for every string key
Replace the placeholder `context` on all 255 keys in strings.json with a
description of where each string appears and its purpose, and regenerate the
xcstrings so the comments flow through to the Apple catalog.
2026-07-20 10:20:34 +02:00
cd6a2d66aa feat(l10n): single-source localization pipeline
Add localization/ — one strings.json is the source of truth for every
user-facing string, and a Bun CLI generates the platform files:

  loc migrate   rebuild strings.json from existing platform files (one-time)
  loc validate  structural checks (plural `other`, arg refs, coverage)
  loc generate  emit .xcstrings (Apple) + per-language strings.xml (KMP)

Canonical `{name}` placeholders are converted to each platform's positional
printf tokens using declared arg types. Plurals use CLDR categories and emit
native forms: xcstrings plural variations and Compose <plurals> blocks.

Migration folds the KMP `transfer_file_count_one`/`_other` pair into a single
plural key, so `transferFileCountResource` now returns the plural resource and
callers resolve it with pluralStringResource.
2026-07-20 10:15:28 +02:00
Hammed Abass
9a3cfb55d0 Merge pull request #20 from sudosylabs/feat/port-swift
feat(apple): native SwiftUI app for iOS, iPadOS, and macOS
2026-07-20 00:22:21 +02:00
17099d32f2 test(apple): CoreGateway seam, XCTest suite, and CI
- Introduce a CoreGateway protocol so feature models depend on a seam
  (CoreRepository conforms); enables faking the core in tests
- Add a VniDropTests target with 42 tests mirroring the KMP suites:
  approval coordinator, send/receive/settings/app models, preferences,
  file previews, invitation decode, message queue, error mapping
- Add a fake gateway/file-system/device-info and fixtures
- Add .github/workflows/apple.yml: build the Rust core, generate the
  project, and run the tests on an iOS Simulator
2026-07-19 23:48:11 +02:00
e35c8c840a feat(apple): replace About source-code link with privacy policy 2026-07-19 23:20:45 +02:00
b1b8fa202c refactor(apple): adopt Swift 6 language mode
Enable complete strict concurrency and switch the app target to Swift 6.

- Isolate model dependency protocols to @MainActor
- Make the CoreRepository blocking-FFI bridge race-free: nonisolated(unsafe)
  core handle, nonisolated runCore/readSnapshot, @Sendable work block,
  Sendable domain models
- Fix Binding method-reference captures; @preconcurrency imports for
  CoreNFC/AVFoundation/VnidropCore; isolate the NFC/QR delegate helpers
2026-07-19 18:39:34 +02:00
bfa489def1 feat(apple): storage screen, About content, and fixes
- Settings: add Storage screen (size breakdown + delete-all-transfers) and
  expand About (what it is/isn't, privacy & security, license/source)
- Move Report a bug to a toolbar sheet (cancel-only unless empty)
- Send progress: derive the list-row bar from receiver delivery status so it
  clears once every receiver completes
- Fixes: iPad orientations, onChange(of:) iOS 17 API, weak-self captures,
  invalid SF Symbol, macOS bug-report form labels; bump core build target to
  match the app (18.2/15.0)
2026-07-19 13:58:20 +02:00
ceccfcda71 feat(apple): transfer controls, progress fixes, and project config
- Sender progress: aggregate only in-flight receivers so the bar clears on
  completion and is order-independent ("Sending to N")
- Add Stop sharing and per-receiver Refuse (pending requests) on the sender
- Fix macOS: raise approval modal above the Share sheet; drive foreground
  state off NSApplication so background notifications fire
- Persist app identity (display name, category) and signing team via
  Info.plist / project.yml / gitignored Local.xcconfig
2026-07-19 12:33:58 +02:00
ea376a382b feat(apple): native SwiftUI app for iOS and macOS
Add a native SwiftUI VniDrop app (Send/Receive/Settings) talking to the
Rust core via generated UniFFI Swift bindings, plus the uniffi-bindgen
helper crate. iOS uses a TabView, macOS a NavigationSplitView sidebar.
2026-07-18 22:06:30 +02:00
601cbc486e Merge with master 2026-07-18 11:57:55 +02:00
c14a2397ae ios build 2026-07-18 11:39:35 +02:00
Hammed Abass
6973cc7351 Merge pull request #19 from sudosylabs/feat/linux-release
ci: build Linux release packages
2026-07-17 15:17:25 +02:00
ec03f210dc fix(ci): expose Android SDK to RPM container 2026-07-17 14:51:16 +02:00
d0844068bb ci: build Linux release packages 2026-07-17 02:08:57 +02:00
Hammed Abass
635e7268b5 Merge pull request #18 from vnidrop/feat/release-configuration
ci: add Windows Store release pipeline
v1.0.0
2026-07-16 23:29:25 +02:00
32c2734378 fix(ci): pass named MSIX build arguments 2026-07-16 23:11:32 +02:00
afa593b6db fix(ci): use available Temurin release version 2026-07-16 22:52:24 +02:00
97dd9b32be ci: build Windows Store release artifacts 2026-07-16 22:34:02 +02:00
4321340a23 docs: update privacy disclosures for store release 2026-07-16 21:40:13 +02:00
Hammed Abass
c0d6419eb5 Merge pull request #17 from vnidrop/feat/docs
feat(docs): add VniDrop product website
2026-07-16 20:40:08 +02:00
ebff97d5e2 feat(docs): add OG image and prune unused assets 2026-07-16 20:38:53 +02:00
68b379e6b5 ci(docs): validate typecheck and production build 2026-07-16 20:10:50 +02:00
526a5da444 feat(docs): streamline product and privacy pages 2026-07-16 19:49:17 +02:00
0a185077af feat(docs): refine product showcase and branding 2026-07-16 18:11:06 +02:00
d61d6f3c5b feat(docs): add animated product website 2026-07-16 16:38:30 +02:00
e40a4bfee2 fix(app): standardize branding and disable telemetry 2026-07-15 23:30:13 +02:00
d2d3c45180 fix(core): make import cancellation test deterministic 2026-07-15 23:20:22 +02:00
Hammed Abass
0474570e15 Merge pull request #16 from vnidrop/feat/project-community-docs
docs: establish project documentation and licensing
2026-07-15 22:49:09 +02:00
fbabb213f1 docs: establish project documentation and licensing 2026-07-15 22:35:42 +02:00
b22536eaf4 fix(ui): keep username draft stable while editing 2026-07-15 20:28:00 +02:00
Hammed Abass
b355838edf Merge pull request #15 from vnidrop/feat/ios-files-integration
fix(ios): support sandboxed file transfers
2026-07-15 20:09:33 +02:00
c3d54e9142 fix(ios): support sandboxed file transfers 2026-07-15 19:40:20 +02:00
43db35e9a2 feat(ui): add animated empty states 2026-07-15 18:34:26 +02:00
7cd125053c feat(shared): polish beta UX copy and friendly errors
Map snackbars to stable user-facing strings, rewrite transfer-oriented
empty states and settings copy, and resource-back progress/status labels.
2026-07-15 03:53:24 +02:00
Hammed Abass
bf81661667 Merge pull request #14 from vnidrop/feat/diagnostics-telemetry
feat(diagnostics): ship production telemetry and bug reporting
2026-07-15 02:49:03 +02:00
502d724743 fix(diagnostics): configure production ingestion safely 2026-07-15 02:36:21 +02:00
24e14565b3 fix(android): package native core for x86_64 2026-07-15 01:35:10 +02:00
37c364d66a fix(shared): keep dense transfer QR codes scannable 2026-07-15 01:10:48 +02:00
b602a3acb6 feat(diagnostics): harden ingestion and delivery 2026-07-15 00:43:49 +02:00
ead4e09a60 feat(shared): add opt-in diagnostics client with compile-time kill switch
Ship client-side telemetry, crash capture, and bug-report assembly behind a
user opt-in, with NoOp transport until Cloudflare is wired. Builds can set
vnidrop.diagnostics.included=false to omit the Share-diagnostics UI and
disable the telemetry/crash auto-upload stack while keeping bug reports.
2026-07-14 08:27:42 +02:00
Hammed Abass
6dd867e43d Merge pull request #13 from vnidrop/fix/security-hardening
fix(security): harden transfer ACL, tickets, and local secret handling
2026-07-13 19:06:49 +02:00
d0c8d8774a fix(security): address medium findings for ACL, limits, and UX
Tighten approve-endpoint to active shares with TTL sessions, reject non-file
FDs, lower default ticket/approval/size caps, show endpoint IDs and Public-mode
warnings, harden Android receive path checks, and run cargo-audit in CI.
2026-07-13 18:54:28 +02:00
e7fb0331b5 fix(security): harden provider ACL, tickets, and local secrets
Close high-severity findings from the security review: default-deny blob
gets for unmapped hashes, map collection members for ACL, fail closed on
unknown access modes, require vnd1 tickets only, redact tickets from events,
exclude Android app-data backups, and tighten secret-file creation.
2026-07-13 18:41:43 +02:00
98375f479a feat(desktop): unify Linux window chrome 2026-07-13 16:43:13 +02:00
76dbff5a7c fix(shared): build only host-compatible targets 2026-07-13 10:17:40 +02:00
Hammed Abass
fe97ad1b8a Merge pull request #12 from vnidrop/feat/macos-unified-window-chrome
feat(desktop): unify macOS window chrome
2026-07-13 08:44:00 +02:00
4059bce3e4 feat(desktop): unify macOS window chrome 2026-07-13 08:34:44 +02:00
Hammed Abass
b90148f6b8 Merge pull request #11 from vnidrop/docs/agents-md
docs: AGENTS.md guides and multi-platform app icons
2026-07-13 00:52:58 +02:00
47e828200e chore: ignore local output/ design exports 2026-07-13 00:44:43 +02:00
9b7d5fd586 chore(branding): add multi-platform app icons and source assets
Wire Android adaptive/webp launchers, iOS AppIcon, and desktop package
icons (macOS icns, Windows ico, Linux png) from a shared assets/ tree.
2026-07-13 00:44:43 +02:00