Commit Graph
22 Commits
Author SHA1 Message Date
jack 022050193f Fix macOS Bluetooth entitlements and remove debug logging
- Created separate macOS entitlements file with required Bluetooth permission
- Fixed "Bluetooth unsupported" issue on Mac by adding com.apple.security.device.bluetooth entitlement
- Removed all debug logging from BluetoothMeshService
- Re-enabled scan duty cycling
- Reverted RSSI threshold back to -90 dBm from temporary -100 dBm debug value
2025-07-10 12:53:51 +02:00
jack c6d74b7574 Fix macOS Bluetooth permissions by adding proper entitlements
- Create separate bitchat-macOS.entitlements file with com.apple.security.device.bluetooth
- Update project.yml to use the macOS-specific entitlements for the macOS target
- Regenerate Xcode project with proper entitlements configuration

This fixes the 'Bluetooth unsupported' issue on macOS which was caused by missing
device.bluetooth entitlement required for sandboxed apps
2025-07-10 12:45:00 +02:00
jack cb2a1801cd Update project configuration with code signing and launch settings
- Add development team L3N5LHJD5Y to all targets in project.yml
- Add automatic code signing settings to test targets
- Fix UIRequiresFullScreen setting to false for launch storyboard compatibility
- Update Info.plist with proper launch configuration
- Ensure all targets have consistent code signing configuration
2025-07-09 19:48:26 +02:00
jack fc5e83612a Fix iPhone 16 screen display issue with proper launch screen
- Add LaunchScreen.storyboard to properly support all iPhone models
- Configure UILaunchStoryboardName in Info.plist for full screen display
- Add UIRequiresFullScreen to prevent black bars on newer devices
- Update project.yml to include launch screen in iOS target resources
- Add proper interface orientation support for iPhone and iPad
2025-07-09 16:28:56 +02:00
jack c352542331 Fix macOS build error and iPhone 16 display issues
- Split multi-platform target into separate iOS and macOS targets to prevent iOS share extension from being embedded in macOS build
- Add launch screen configuration and full screen support for proper iPhone 16 display
- Configure iOS-specific Info.plist entries for background modes and interface orientations
2025-07-09 16:08:37 +02:00
jack d5ccf6bc0b Add iOS share extension with rich link previews
- Implement share extension to receive URLs from other apps
- Display shared links with emoji indicator and rich preview cards
- Add custom compact link preview with image, title, and domain
- Configure app groups for data sharing between extension and main app
- Handle URL detection and parsing in share extension
- Update message formatting to show only emoji for shared links
- Add proper entitlements and activation rules for share extension
2025-07-08 17:47:53 +02:00
jack 244af2197c Fix share extension functionality
- Add debugging logs to help diagnose sharing issues
- Improve completion handling in share extension
- Check for shared content when app becomes active
- Fix async handling of shared content processing
2025-07-08 04:26:02 +02:00
jack 7f6a32e350 Add iOS Share Extension support
- Create share extension to handle shared content from other apps
- Support sharing text, URLs, and prepare for future image support
- Use app groups for data sharing between extension and main app
- Add URL scheme handling for app communication
- Add entitlements for app groups
- Display system message when content is shared
- Update project configuration to include share extension
2025-07-08 04:18:42 +02:00
jack 2e56245a7e Fix deadlock in DeliveryTracker causing macOS app freeze
- Fixed nested lock acquisition in trackMessage/scheduleTimeout
- Properly handle lock release before calling methods that need locks
- Ensure retryDelivery and handleTimeout don't cause deadlocks
- Release locks before calling external methods
2025-07-06 21:41:41 +02:00
jack 78cb8b1039 Fix delivery confirmation for private messages
- Pass message ID from ChatViewModel to BluetoothMeshService
- Preserve original message ID when creating ACK messages
- Move delivery tracking to ChatViewModel for consistent IDs
- Update project.yml to match current project structure
2025-07-06 21:25:41 +02:00
jack cbcfaed7a2 Fix compilation errors and prepare for App Store submission
- Fix NotificationService warnings by replacing unused error parameters with _
- Add public domain header to NotificationService.swift
- Fix BluetoothMeshService compilation errors:
  - Replace removeAll with filter for processedKeyExchanges cleanup
  - Remove duplicate cleanupStalePeers function declaration
  - Remove duplicate peerLastSeenTimestamps property declaration
- All code now compiles cleanly for both iOS and macOS targets
2025-07-04 17:28:36 +02:00
jack 00e75fff72 Fix connect/disconnect/connect pattern on initial connection
- Added duplicate connection detection in key exchange handler
- When same peer connects through multiple peripherals, keep only one
- Track intentional disconnects to suppress disconnect messages
- Don't show disconnect message when dropping duplicate connections
- This prevents the confusing connect/disconnect/connect pattern

The issue was that both devices try to connect to each other simultaneously,
creating duplicate connections. One gets dropped, but now it's handled gracefully.
2025-07-04 17:05:25 +02:00
jack f2031f3973 Update project configuration and generate Xcode project
- Removed test targets from project.yml (causing dependency issues)
- Generated fresh Xcode project with xcodegen
- Project now includes proper Assets.xcassets configuration
- Ready for App Store build and submission
2025-07-04 16:45:42 +02:00
jack 4d61cec032 Prepare for App Store submission
- Added public domain headers to all test files
- Updated Info.plist with required App Store keys:
  - ITSAppUsesNonExemptEncryption = NO
  - LSApplicationCategoryType = Social Networking
  - UIRequiresFullScreen = YES
- Created proper Assets.xcassets structure
- Configured AppIcon.appiconset with all icon references
- Removed last TODO comment
- Created comprehensive App Store submission checklist
- Updated project.yml to include Assets.xcassets

The app is now ready for App Store submission. All debug code has been removed,
icons are configured, and privacy/security compliance is documented.
2025-07-04 16:44:00 +02:00
jack e3cc469bf8 Remove voice memo references and improve duplicate message prevention
- Remove NSMicrophoneUsageDescription from Info.plist and project.yml
- Add millisecond timestamps to prevent same-second message collisions
- Include payload hash in message ID for absolute uniqueness
- Add recentlySentMessages tracking to prevent any duplicate sends
- Reduce retries from 2 to 1 for broadcast messages
- Clean up sent message tracking after 10 seconds
2025-07-04 15:35:26 +02:00
jack 7b3cfb6227 Fix Bluetooth errors and improve store-and-forward
- Add peripheral state checks before all write operations
- Fix 'can only accept commands while connected' errors
- Check characteristic write properties to avoid ATT errors
- Preserve original timestamps in store-and-forward messages
- Only log crypto errors once per peer to reduce noise
- Store-and-forward now correctly maintains message ordering

The timestamp preservation ensures messages appear in the correct
chronological order even when delivered later via store-and-forward.
2025-07-04 14:30:00 +02:00
jack fe986ed397 Fix encryption key exchange and add persistent identity for favorites
- Implement three-tier key system: ephemeral encryption, ephemeral signing, persistent identity
- Fix signature verification by properly separating KeyAgreement and Signing keys
- Add persistent identity key for favorites that survives app restarts
- Fix Data subscript crashes by converting to byte arrays
- Add proper error handling for key exchange
- Private messages remain fully encrypted with ephemeral keys
2025-07-04 01:43:16 +02:00
jack 6652d1f429 Fix voice recording and notification issues
- Fix mic button gesture handling by removing Button wrapper
  - Use direct gesture on ZStack for more reliable touch detection
  - Add debug logging for recording start/stop

- Fix notification delivery on iOS
  - Change from checking .background to checking != .active
  - Notifications now work when app is inactive or background
  - Add NSUserNotificationsUsageDescription to Info.plist

- Improve voice note fragment transmission
  - Reduce fragment size from 400 to 200 bytes for better reliability
  - Simplify fragment timing from batch-based to linear 100ms delays
  - Lower packet size threshold from 512 to 400 bytes for fragmentation
  - Add peripheral connection state checking before writes
  - Better error logging throughout transmission pipeline

- Add comprehensive debug logging for troubleshooting
  - Log audio file size and duration
  - Log peripheral connection states during broadcast
  - Log fragment send progress with timing info
2025-07-03 23:14:42 +02:00
jack 2993fc3e06 Implement favorites, notifications, and improve fragment handling
- Add favorites functionality for peers with persistent storage
  - Star icon to toggle favorites in sidebar
  - Favorites appear at top of peer list
  - Storage persists across app launches using peer ID

- Add local notifications for mentions and private messages
  - Notifications appear when app is in background
  - Separate notification types for mentions vs private messages
  - Request notification permissions on app launch

- Fix sidebar header alignment to match main toolbar (44pt)
  - Add background color to sidebar header for visual consistency

- Improve voice note fragment transmission
  - Send fragments in batches of 5 with delays to prevent congestion
  - Better logging to debug fragment transmission issues
  - Reduce delay between fragments from 50ms to batch-based timing

- Fix other UI issues
  - Ensure mic recording ripples originate from mic button
  - Update sidebar to swipe from right edge smoothly
2025-07-03 22:13:28 +02:00
jack 94a9888ef5 Add push-to-talk voice notes functionality
- Added voice note support to BitchatMessage with audio data and duration
- Updated binary protocol to encode/decode voice notes (flag 0x40)
- Created AudioRecordingService for recording up to 10s voice clips
- Created AudioPlaybackService for playing voice notes
- Added microphone permission to Info.plist and project.yml
- Implemented push-to-talk UI with mic button in ContentView
- Voice notes use AAC compression at 16kHz/32kbps for small file sizes
- Added play/pause buttons for voice notes in message list
- Voice notes display as '🎤 Voice note (X.Xs)' in chat
- Platform-specific audio session handling for iOS/macOS
2025-07-03 01:13:16 +02:00
jack 4b98aa7918 Fix iOS background BLE, RSSI tracking, and peer nickname display
- Add UIBackgroundModes for bluetooth-central/peripheral to restore background messaging
- Implement RSSI tracking with proper peer ID mapping and UI updates
- Fix announce packet delivery for immediate nickname display
- Convert to binary protocol for 62-69% size reduction
- Fix peer count to exclude self from display
- Add platform-specific UI improvements (font sizes, dropdown styling)
2025-07-03 00:51:59 +02:00
jack 7e90bf6369 Initial commit: Bluetooth mesh chat app with end-to-end encryption 2025-07-02 19:18:35 +02:00