Family Groups

Family Groups lets you share finances with family, roommates, or friends. Create a group, invite members via iCloud, and collaborate on shared budgets and split expenses — all while keeping your personal financial data private.

Family Groups list showing active groups with role badges

Manage all your shared finance groups from a single list. Role badges indicate your relationship to each group.


Overview

Family Groups is built on top of Apple’s CloudKit sharing infrastructure. Each group creates a dedicated CloudKit zone where shared data (budgets, expenses, settlements) lives. Your personal accounts, transactions, and balances are never shared — only data you explicitly contribute to the group is visible to other members.

Key concepts:

Groups support up to 10 members by default.


Creating a Group

Any Coincert user with an active iCloud account can create a group.

Steps:

  1. Navigate to Groups (iOS) or Settings > Groups (macOS).
  2. Tap the + button or Create Your First Group if no groups exist yet.
  3. Enter a group name (1—50 characters). Examples: “Smith Family”, “Apartment 4B”.
  4. Tap Create.
Create Group screen with name field and secure sharing notice

Creating a new group. The name is visible to all members you invite.

What happens behind the scenes:

  1. Coincert creates a FamilyGroup record and a GroupMembership record with the owner role.
  2. A dedicated CloudKit zone (Group-<UUID>) is created in your private iCloud database.
  3. A CKShare is created with publicPermission = .none (private by default).
  4. Your iCloud display name is fetched and set as your member display name (if available).
  5. Both records are queued for sync via Harmony Sync.

If CloudKit share creation fails (network error, iCloud not signed in, schema not deployed), the local records are rolled back automatically. You will see a specific error message explaining the cause.


Family Dashboard

Once you belong to a family group, the Family tab shows a dedicated dashboard for managing shared finances.

Accessing the Dashboard

iPhone iPad: Navigate to More > Family in the tab bar.

Mac: Select Family in the sidebar.

Empty State

If you are not a member of any group, the Family tab shows:

Dashboard Sections

When you have an active group, the dashboard displays the following sections based on your role:

SectionVisible ToDescription
Joint AccountsParents onlyShared accounts with your partner. Tap + to designate a new joint account.
ChildrenParents onlyChild members with spending summaries and quick access to oversight tools.
Family BudgetsAll membersNavigate to shared budgets with progress tracking.
Shared ExpensesAll membersView settlements and (for parents) create new expense splits.
Family SettingsAll membersAccess members list, coaching, invites, and sharing settings.

Each section uses card-style navigation with clear icons and chevron indicators.


Inviting Members

Only the group owner can invite new members. Coincert offers two invite flows with different security trade-offs.

Dual Invite Flow

When the owner taps Invite Members, a confirmation dialog presents two options:

MethodSecurityHow It Works
Share Invite LinkPublicGenerates a shareable URL. Anyone with the link can join. The CKShare publicPermission is upgraded to .readWrite. Share via Messages, Mail, AirDrop, or any share sheet target.
Secure Invite (iCloud)PrivatePresents Apple’s UICloudSharingController. Only explicitly added iCloud accounts can accept. The CKShare publicPermission stays at .none.

The share link flow works on both platforms but uses platform-native sharing UI:

The share URL is a standard CloudKit share link. When a recipient taps it, Coincert’s handleShareURL method:

  1. Fetches the share metadata from iCloud.
  2. Accepts the share.
  3. Reads the group ID and name from the root record.
  4. Determines the member’s role from their CKShare participant permission (readWrite = Adult, readOnly = Minor).
  5. Creates a local GroupMembership record.
  6. Adds the shared zone to SharedSyncEngine and triggers an initial sync.

Secure Invite (iCloud) iPhone

The secure invite flow uses UICloudSharingController, which is iOS-only. This presents Apple’s native participant management UI where the owner can:

This method does not upgrade the CKShare’s public permission, so even if the share URL leaks, unauthorized users cannot join.

Invite options dialog showing Share Invite Link and Secure Invite choices

Choose between a shareable link (convenient) or a secure iCloud invite (restrictive).


Participant Status

Each group member has a role (local to Coincert) and an acceptance status (from CloudKit).

Roles

RoleBadge ColorPermissions
OwnerBlueFull control. Can invite/remove members, create shared budgets, view minor activity, change roles, archive the group. Crown icon displayed.
AdultGreenCan view and contribute to shared budgets and expenses. Can control their own sharing settings.
MinorOrangeRead-only access. Owner can see their spending activity for guidance and coaching. Informed of this transparency on invite acceptance.

Roles are displayed as colored capsule badges throughout the UI. The owner can change a member’s role between Adult and Minor via the role change sheet (accessible from the members list context menu or swipe actions).

Acceptance Status

Participant acceptance status is fetched live from the CKShare and displayed as status badges next to non-owner members:

StatusBadge ColorMeaning
AcceptedGreenMember has accepted the invitation and is actively participating.
PendingOrangeInvitation sent but not yet accepted.
RemovedRedMember has been removed from the share (macOS detail view only).

The owner can view all participant statuses. On macOS, the group detail view shows an “Invite Status” section listing each participant with their acceptance badge.


Contact Linking

Group members appear by their iCloud display name or a custom display name by default. Contact Linking lets you associate a group member with one of your local Contacts, replacing their name and avatar with the contact’s information.

How It Works

  1. Long-press (context menu) on a member in the Members list.
  2. Select Link to Contact.
  3. A privacy notice explains that the link is stored locally only — never shared with other members or synced to iCloud.
  4. Tap Continue to open the contact picker.
  5. Select a contact. Their name and thumbnail photo are now displayed for that member.
Group members list showing contact photos, role badges, and status indicators

Members list with contact-linked photos, role badges, and acceptance status indicators.

Technical Details

What You Can Do


Shared Budgets

Shared Budgets let the group track collective spending against a limit. Only the group owner can create shared budgets; all members can view them.

Creating a Shared Budget

  1. Open a group and navigate to Shared Budgets.
  2. Tap the + button (owner only).
  3. Fill in the budget details:
    • Name: A descriptive name (e.g., “Groceries”, “Household Expenses”).
    • Spending Limit: The maximum amount for the budget period.
    • Period: Weekly, Monthly, or Yearly.
    • Categories: Select one or more expense categories to track. Only non-income categories are shown.
  4. Tap Create.
Shared budget list showing budget gauges with spending progress

Track group spending against shared budget limits with visual progress gauges.

Viewing Budget Progress

Each shared budget row shows:

Budget progress is calculated by SharedExpenseService, which aggregates all shared expenses in the group that match the budget’s category IDs.


Split Expenses

Split Expenses lets you divide costs among group members. You can split a new manual expense or tag an existing transaction from your accounts.

Split Methods

MethodDescription
EqualTotal divided evenly among all members. Each person’s share is automatically calculated.
By PercentageEach member pays a custom percentage. Percentages must total exactly 100%.
Custom AmountsEach member pays a specific dollar amount. Amounts must total exactly the expense amount.

Creating a Split Expense

  1. Open a group and tap Split Expense in the Shared Expenses section.
  2. Enter the expense description and amount (or these are pre-filled if splitting an existing transaction).
  3. Optionally select a category.
  4. Choose a split method (Equal, Percentage, or Custom).
  5. Adjust member shares if using Percentage or Custom.
  6. Tap Split.

The expense is created as a SharedExpense record with individual splits tracking each member’s share and payment status.

Settlement

The Settlement view shows the net balance for each group member:

Members can be marked as settled with the Settle Up button. A Send Reminder option is available to nudge members (reminders are in-app only).

Actual money transfers happen outside Coincert (via Venmo, cash, bank transfer, etc.). Coincert tracks the accounting, not the payment.


Joint Accounts

Joint Accounts let parents share an existing personal account with their partner within the family group. Both parents get visibility into the account’s balance and transactions.

Designating a Joint Account

  1. From the Family Dashboard, find the Joint Accounts section (parent role required).
  2. Tap the + button to open the designation flow.
  3. Select one of your personal accounts from the list. Accounts already designated as joint are excluded.
  4. Confirm sharing. The confirmation dialog explains that both you and your partner will have full read/write access, and that revoking joint access later requires mutual consent.
  5. The account appears in the Joint Accounts section for both parents.

Joint Account Detail

Tap a joint account to view its details:

Permissions

PermissionAccess
Read OnlyView balance and transactions. Cannot create or edit transactions.
Read/WriteFull access including creating, editing, and deleting transactions.

When requiresMutualConsent is enabled on a grant, both parents must agree before the joint access can be revoked. This prevents one partner from unilaterally removing access to shared finances.

Joint Account Sync

Joint account grants sync via CloudKit to the family group’s shared zone. When one parent designates a joint account, it appears on the other parent’s device after sync.


Child Oversight

Parents can supervise and guide children’s financial activities. The Child Oversight tools are available from the Children section of the Family Dashboard.

Child Overview

Tap a child member card on the dashboard to open their overview. The Child Overview screen shows:

Three quick action buttons are available: Set Spending Limit, Set Up Allowance, and Grant Account Access.

Spending Limits

Parents can set spending limits for children to help them learn financial discipline.

Creating a spending limit:

  1. From the Child Overview, tap Set Spending Limit.
  2. Enter the limit amount (e.g., $200).
  3. Select a period: Weekly, Biweekly, or Monthly.
  4. Optionally select specific categories. If no categories are selected, the limit applies to all spending.
  5. Configure alert thresholds:
    • 80% warning — notification when the child approaches the limit.
    • 100% reached — notification when the limit is hit.
    • Over budget — notification when spending exceeds the limit.
  6. Tap Save.

The spending limit is created as a SharedBudget assigned to the child via assignedMemberID. If alerts are enabled and notification permission has not been granted, you will be prompted to allow notifications.

Alert behavior:

Each threshold fires only once per budget period. When the period resets, threshold tracking is cleared and alerts can fire again. Notifications use the CHILD_SPENDING_ALERT category.

Allowances

Parents can set up recurring allowances for children.

Creating an allowance:

  1. From the Child Overview, tap Set Up Allowance.
  2. Enter the allowance amount.
  3. Select a frequency: Weekly, Biweekly, or Monthly.
  4. Choose a delivery method:
    • Recurring Transaction: Creates a transaction in a selected account on each allowance date. You must choose which account receives the deposit.
    • Budget Allocation: Sets a spending cap for the child without creating transactions.
  5. Add optional notes (e.g., “For school lunches”).
  6. Tap Save.

Editing an allowance:

Tap an existing allowance in the Child Overview. The form is pre-populated with current values. The navigation title shows “Edit Allowance” instead of “Set Up Allowance.”

Validation:

Account Access

Parents can grant children read-only access to specific accounts so they can view balances and transactions.

  1. From the Child Overview, grant access to a checking or savings account.
  2. Set the permission to Read Only.
  3. The child can see the account in their view but cannot modify it.

Account access is tracked via ChildAccountAccess records that sync to the family group’s shared zone.


Coaching Messages

Parents can send encouraging financial guidance messages to family members. Coaching is designed to be supportive rather than punitive.

Sending a Coaching Message iPhone

  1. From the Family Dashboard > Family Settings, tap Coaching.
  2. Select a recipient from eligible group members.
  3. Write your message in the text area.
  4. On iOS 26+, the message is automatically softened using on-device AI (Foundation Models) to ensure a supportive tone. On earlier iOS versions, messages are sent with minimal softening and a banner explains that AI tone adjustment is unavailable.
  5. Tap Send.

Coaching compose includes frequency guardrails — if you send too many messages in a short period, a nudge alert appears suggesting you space out your coaching.

Muting Coaching

Adult members can mute coaching from specific senders:

  1. Navigate to your group settings.
  2. Toggle coaching mute for any sender.
  3. Messages from muted senders no longer appear.

The mute state is stored in the GroupMembership.coachingMuted field and persists across sessions.

Minor Coaching Restrictions

Parents can restrict who may send coaching to a minor child:


Managing Members

Editing Display Names

Any member can edit their own display name. The owner can edit any non-owner member’s name. Display names are visible to all group members and synced via Harmony Sync.

Changing Roles

The owner can change a member’s role between Adult and Minor:

  1. Long-press the member and select Change Role.
  2. Choose between Adult and Minor using the segmented control.
  3. If changing to Minor, a transparency notice appears: the owner will be able to see the minor’s spending activity.
  4. Tap Save.

Role changes update both the local GroupMembership and the CKShare participant permission (readWrite for Adult, readOnly for Minor).

Removing Members

The owner can remove any non-owner member:

  1. Swipe left on the member and tap Remove, or long-press and select Remove Member.
  2. Confirm the removal. The member loses access to the group.
  3. Their shared expense history is preserved (soft delete — isActive = false).
  4. The member is also removed from the CKShare in CloudKit.

Leaving a Group

Non-owner members can leave a group:

Leaving marks your membership as inactive and removes the shared zone from your sync engine. Your personal data is unaffected.

Archiving a Group (Owner Only)

Owners cannot “leave” — they can archive the group instead:

Archiving hides the group from your list. Shared data remains accessible to other members. CloudKit ownership cannot be transferred — if a new owner is needed, a new group must be created.


Platform Differences

Family Groups is available on both iOS and macOS, with platform-specific presentation styles.

FeatureiOSmacOS
Family DashboardFamilyDashboardView (card-based scroll)FamilyDashboardViewMac (same sections, adapted layout)
Group listFull-screen navigation listSettings window > Groups tab
Create groupSheet presentationSheet with minimum 400x300 frame
Invite via Share LinkUIActivityViewController share sheetNSSharingServicePicker or Copy Link to clipboard
Invite via Secure iCloudUICloudSharingController (full participant management)Not available — UICloudSharingController is iOS-only
Member managementSwipe actions + context menusNavigation-based detail view
Participant statusBadge on member rowsDedicated “Invite Status” section in detail
Joint accountsFull designation + detailFull designation + detail
Child oversightFull spending limits, allowances, account accessFull spending limits, allowances, account access
Split expensesFull split expense UIFull split expense UI
Shared budgetsFull budget list + detailFull budget list + detail
SettlementFull settlement UIFull settlement UI
Contact linkingContact picker + photo avatarsContact picker + photo avatars
Coaching messagesFull compose + sendNot yet available (iOS only, uses Foundation Models)
Privacy & SafetyFull separation + export + resourcesFull separation + export + resources

Most family features now work on both platforms. Coaching messages remain iOS-only due to reliance on Foundation Models (iOS 26+). The Secure iCloud invite flow is iOS-only due to UICloudSharingController.


Privacy & Security

Family Groups is designed with the same privacy-first philosophy as the rest of Coincert.

Data Isolation

iCloud-Based Sharing

Contact Linking Privacy

Encrypted Fields

Financial amounts, descriptions, and member names within shared CloudKit records use CloudKit’s encryptedValues container. UUIDs and booleans remain unencrypted to support server-side querying.

Soft Deletes

Removing a member or leaving a group uses soft deletion (isActive = false). No user data is hard-deleted, preserving audit trails and allowing potential restoration.

Minor Transparency

When a member is assigned the Minor role, the owner can view their spending activity. Minors are informed of this transparency when accepting the invitation. Adults in the group cannot access minor activity — only the owner can.

Privacy & Safety Settings

For users who need to manage or disconnect shared access, Coincert provides a Privacy & Safety screen in Settings. This screen uses intentionally generic language and provides:

For complete details, see the Privacy & Safety section in Settings.

One-Sided Separation

The disconnection mechanism in Privacy & Safety is designed for safety:


Error Handling

Common errors and their resolutions:

ErrorCauseResolution
”Please sign in to iCloud”No iCloud account on deviceSign in via Settings > Apple ID > iCloud
”No network connection”Device is offlineCheck Wi-Fi or cellular connection
”iCloud storage is full”iCloud quota exceededFree up iCloud storage or upgrade plan
”CloudKit sharing isn’t available yet”Production schema not deployedContact support; developer action required
”Group not found”Group record may be corrupted or not syncedClose and reopen the group detail screen
”Share data is corrupted”ShareReference JSON decode failureRecreate the group