- 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
- Add UILaunchStoryboardName to Info.plist
- Add UIRequiresFullScreen setting
- Add UIBackgroundModes for Bluetooth background operations
- Add interface orientation support for iPhone and iPad
- Add development team to all project targets
- 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
- 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
This commit improves VoiceOver support by adding descriptive accessibility labels to all icon-only buttons and visual indicators in the app. This ensures users with visual impairments can understand and interact with all UI elements.
Changes made:
- Send message button: Added label "Send message" with context-aware hints
- Navigation buttons: Added "Back to main chat" labels for back arrows
- Favorite stars: Dynamic labels that change between "Add to favorites" and "Remove from favorites"
- Lock icons: Context-aware labels for password protection status
- Signal strength indicators: Descriptive labels (excellent/good/fair/poor) instead of color-only information
- Unread message indicators: Clear labels for envelope and number icons
- People/channel counts: Proper pluralization and descriptive text
- Save/bookmark buttons: Labels indicating retention enable/disable action
Technical details:
- Used .accessibilityLabel() for descriptive text
- Added .accessibilityHint() for additional context where helpful
- Used .accessibilityHidden(true) to hide redundant decorative elements
- All labels are dynamic and update based on current state
This change ensures BitChat meets WCAG accessibility guidelines and provides a better experience for all users.
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>
- 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
- Add deduplication check when adding messages to retry queue
- Prevent duplicate messages with same ID from being queued
- Maintain proper message ordering during sync
- Sort retry queue by original timestamp when adding and processing messages
- Add 50ms delay between retry messages to prevent out-of-order delivery
- Messages now sync in the exact order they were sent (ping 1, ping 2, ping 3)
- Add content validation to skip empty or whitespace-only messages
- Apply validation in both channel and regular message handling
- Add validation at retry service level to prevent queuing empty messages
- This fixes the phantom space issue between synced messages
- Capture both URL and title when sharing links
- Create LinkPreviewView component with clickable cards
- Support markdown-style links [title](url)
- Auto-detect plain URLs in messages
- Add link metadata fetching on iOS
- Display clean preview cards with title, URL, and description
- 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
- Introduce thread safety for recentlySentMessages using NSLock to prevent race conditions.
- Adjust message delay parameters for faster synchronization: reduce min/max message delays and adjust initial announce timing.
- Update sendMessage and sendEncryptedRoomMessage methods to accept optional messageID and timestamp parameters for better tracking.
- Improve message deduplication logic in ChatViewModel to prevent duplicates from being added when echoing back sent messages.
- Modify MessageRetryService to include original message ID and timestamp for better retry handling.
- 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
- Screenshot notifications now properly appear as system messages
- Send messages directly via mesh service to avoid local echo
- Remove 'private:' prefix from private chat header
- Keep only lock icon and peer name in private chat header
- Detect when users take screenshots on iOS
- Send system notification to all participants
- Works in public chat, channels, and private messages
- Display screenshot notifications as system messages