Skip to content

feat(watch): Add an Apple Watch app - #2801

Draft
karlitschek wants to merge 3 commits into
feat/haptics-reactions-widgets-call-adaptationfrom
feat/apple-watch-app
Draft

karlitschek wants to merge 3 commits into
feat/haptics-reactions-widgets-call-adaptationfrom
feat/apple-watch-app

Conversation

@karlitschek

Copy link
Copy Markdown
Member

New watchOS app (watchOS 10+, TalkWatch target) embedded in the iOS app:

  • Conversations of the active account with unread/mention badges, ongoing calls and last message preview
  • A conversation shows its last messages and reactions
  • Reply by dictation, Scribble or keyboard, or with a quick reply (👍, OK, Thanks!, On my way, I'll call you later)
  • Tap a message to react, opening a conversation marks it as read

The watch has no account of its own and never gets credentials. The iPhone sends the conversations via WatchConnectivity (application context, updated when rooms change) and does all server requests for it (WatchSessionController), waking up in the background if needed. Sensitive conversations show no preview. Incoming calls already reach the watch through CallKit, where they can be declined. Message ids are exchanged as Int64, as Int is 32 bit on watch hardware (arm64_32).

Reuses AppIcon.icon and Localizable.strings of the iOS app. Debug builds accept -TalkWatchSampleData and -TalkWatchOpenSampleConversation to try the app in the simulator without a paired iPhone. TalkWatch/** was added to the paths of the build workflow.

Notes

Testing

  • App and all extensions build for the simulator (Xcode 27.1)
  • Watch app builds for the watchOS simulator and runs there with sample data; built for arm64 + arm64_32 in the Release device build
  • New unit test UnitWatchModelsTest
  • The combined branch with all features also builds in Release for generic/platform=iOS (iPhone, iPad, Mac "Designed for iPad") and for watchOS hardware
  • Not yet tried by hand with a real account and device, hence the draft.

🤖 Generated with Claude Code

karlitschek and others added 3 commits October 25, 2026 21:39
…ect file

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
A new watchOS app (watchOS 10 and later, TalkWatch target), embedded in
the iOS app:

- The conversations of the active account, with unread and mention
  badges, ongoing calls and a preview of the last message
- A conversation shows its last messages and their reactions
- Reply by dictation, Scribble or the keyboard, or with a quick reply
  (👍, OK, Thanks!, On my way, I'll call you later)
- Tap a message to react to it
- Opening a conversation marks it as read

The watch has no account of its own and never gets any credentials.
The iPhone sends it the conversations through WatchConnectivity
(application context, updated whenever the rooms change) and does all
requests to the server for it (WatchSessionController), waking up in
the background if needed. Sensitive conversations don't show a preview
of the last message, like in notifications.

Incoming calls already show up on the watch through CallKit, where
they can be declined.

The watch app reuses the AppIcon.icon and the Localizable.strings of
the iOS app. In debug builds, the launch arguments
-TalkWatchSampleData and -TalkWatchOpenSampleConversation show example
data, to try the app in the simulator without a paired iPhone.

TalkWatch/** was added to the paths of the build workflow.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Frank Karlitschek <karlitschek@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant