ARTICLE AD BOX
I'm building a turn-based iMessage game and hitting a wall with iPad support. Looking for anyone who has solved this.
The Problem
On iPad, didSelect(message:conversation:) only fires the first time a user taps a message bubble. Tapping the same message again does nothing - the method simply isn't called.
On iPhone, it works correctly every time.
This breaks turn-based games where both players interact with the same message.
What I've tried so far
Calling dismiss() after sending - hoping to deselect the message so the next tap registers as new. Didn't work.
Using other lifecycle methods:
willBecomeActive(with:) - fires but doesn't provide the selected message didBecomeActive(with:) - same issue didResignActive(with:) / willResignActive(with:) - not useful for thisChecking conversation.selectedMessage - often stale or nil when checking in lifecycle methods
Sending a new message each turn (different URL/session) - doesn't help since user still taps the same visible bubble
Forcing UI refreshes and state reloads - the underlying selection state doesn't update
Code
override func didSelect(_ message: MSMessage, conversation: MSConversation) { // iPhone: fires every tap ✓ // iPad: fires only on first tap ✗ loadGame(from: message, in: conversation) }Environment
Xcode 15+ iOS 16.6+ MSMessagesAppViewController subclass Game state encoded in message URLWhat I'm looking for
Has anyone shipped a turn-based iMessage game that works on iPad? Is there a workaround I'm missing? Any undocumented APIs or creative solutions? Should I be using a completely different architecture?I've seen Developer Forums posts about this going back to 2016 with no Apple response. Hoping someone in the community has cracked it.
Happy to share more code or try any suggestions. Thanks!
