Menu β–Ύ β–΄

#395 feat(macos): show the sender's face in message notifications

closed
nobody
None
2026-11-07
2026-11-07
Anonymous
No

Originally created by: kristofferR

On macOS, every Carrier notification showed Carrier's own icon, with the sender's avatar only as a small attachment. Messages and other chat apps show the sender's face instead and group notifications per conversation.

What changes

  • A message notification becomes a communication notification: Carrier donates an INSendMessageIntent with the sender (name and own photo), the group's name for group chats, and the conversation id, then updates the notification content from it. macOS shows the sender's face in place of the app icon and groups notifications per conversation.
  • The sender is resolved on the page from Messenger's participants, never from display text: the other person in a one-to-one chat, or in a group the participant uniquely named by the original "Name:" preview prefix. Each person is identified as messenger:<account>:<participant id>, so namesakes stay distinct. Unresolved or ambiguous senders, hidden previews, route-less notifications and macOS before 12 keep today's plain notification. A group's photo is never used as a sender's face.
  • Adapted from fMess (MIT); the intent update is sent directly because the objc2-intents bindings don't declare that conformance.

Signing
Communication notifications need a restricted entitlement. Release builds sign with entitlements.release.plist (the entitlement plus Carrier's application and team identifiers) and embed Carrier's Developer ID provisioning profile as Contents/embedded.provisionprofile. The profile and bundle ID (io.github.kristofferr.carrier, Communication Notifications enabled) now exist in the developer account, and CI writes the profile from the APPLE_PROVISIONING_PROFILE secret in release.yml and debug.yml, failing clearly if it is missing. Local and ad-hoc builds keep the old entitlements and the plain notifications.

Manual check needed
Install a CI-built debug draft on the Mac (signed with the profile) and confirm: the app launches; a one-to-one message shows the sender's face; a group message shows the sender with the group's name; hidden previews stay plain.

Reviewed over four rounds; CodeRabbit covers it in the combined PR [#394].

Ref [#366]

Related

Tickets: #366
Tickets: #394

Discussion

  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    ⏸️ crq will not request further automated reviews for this pull request.

    Reason: CodeRabbit reviews these changes once, in combined PR [#394]

    Resume with crq unhold kristofferr/carrier 395.

     

    Related

    Tickets: #394

  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    [!NOTE]
    πŸ€– Claude Opus 5.5 responding on behalf of Kristoffer

    @codex review

     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review Summary: βœ… Completed This comment shows the latest Codex review activity on this pull request. | Review | Status | Commit | Review trigger | | --- | --- | --- | --- | | πŸ“ **Code Review** | βœ… **Completed** <relative-time datetime="2026-11-07T21:41:10.762016Z">2026-11-07T21:41:10.762016Z</relative-time> | `7561be4` | Manual request |
    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review" or "@codex security review". Codex reacts with πŸ‘€ while any review is running, comments if it has suggestions, and reacts with πŸ‘ once all reviews finish with no findings.
     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review: Didn't find any major issues. You're on a roll.

    Reviewed commit: 322614bdaa

    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with πŸ‘. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    [!NOTE]
    πŸ€– Claude Opus 5.5 responding on behalf of Kristoffer

    Rebased onto main. The conflicts in Cargo.toml, macos/notifications.rs and the notifications tests were additive and both sides were kept.

    @codex review

     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: chatgpt-codex-connector[bot]

    Codex Review: Didn't find any major issues. Keep them coming!

    Reviewed commit: 7561be4de0

    ℹ️ About Codex in GitHub
    [Your team has set up Codex to review pull requests in this repo](https://chatgpt.com/codex/cloud/settings/general). Reviews are triggered when you - Open a pull request for review - Mark a draft as ready - Comment "@codex review". If Codex has suggestions, it will comment; otherwise it will react with πŸ‘. Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
     
  • Anonymous

    Anonymous - 2026-11-07

    Ticket changed by: kristofferR

    • status: open --> closed
     
  • Anonymous

    Anonymous - 2026-11-07

    Originally posted by: kristofferR

    βœ… The administrative hold has been retired because this pull request merged. crq will not request further automated reviews.

     

Log in to post a comment.