SIGN IN SIGN UP

Set or unset subscriber attributes from the checkpoint tester (#4046)

### Motivation

Checkpoint rules can be evaluated against subscriber attributes, but the
checkpoint tester had no way to set them, so exercising an
attribute-driven rule meant editing and rebuilding the app.

Adds an action to allow to set custom attributes to the app
<img width="270" height="606" alt="image"
src="https://github.com/user-attachments/assets/1b3f3a7e-1ff1-4835-a43a-26cc9690eb19"
/>


<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Sample-app UI only. It calls the existing public setAttributes API and
does not change SDK, auth, or production behavior.
> 
> **Overview**
> Lets testers change a subscriber attribute at runtime so checkpoint
rules that depend on attributes can be exercised without rebuilding.
> 
> Adds a person icon in the top bar that opens a dialog with key/value
fields. **Set** calls `Purchases.sharedInstance.setAttributes`;
**Unset** sends `null` for that key (SDK delete). Documented in the
checkpoint tester README.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
2197c8aaa0402aecaf7e4876476957789f790d70. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
T
Toni Rico committed
64609c70074db57c7e21390bfafbeb2425c71b77
Parent: 54274be
Committed by GitHub <noreply@github.com> on 8/24/2026, 4:19:26 PM