BusinessCard/README.md

5.4 KiB

BusinessCard

A SwiftUI iOS + watchOS app that creates and shares digital business cards with QR codes, quick share actions, customization, and contact tracking. Data syncs across devices via iCloud.

Platforms

  • iOS 26+
  • watchOS 12+
  • Swift 6.2

Features

My Cards

  • Create and browse multiple cards in a carousel
  • Set a default card for sharing
  • Preview bold card styles inspired by modern design
  • Profile photos: Add a photo from your library or use an icon
  • Rich profiles: Pronouns, bio, social media links, custom URLs

Share

  • QR code display for vCard payloads
  • Share options: copy link, SMS, email, WhatsApp, LinkedIn
  • Track shares: Record who received your card and when
  • Placeholder actions for Apple Wallet and NFC (alerts included)

Customize

  • Theme picker with multiple color palettes (Coral, Midnight, Ocean, Lime, Violet)
  • Layout picker for stacked, split, or photo style
  • Edit all card details: Name, role, company, email, phone, website, location
  • Social media links: LinkedIn, Twitter/X, Instagram, Facebook, TikTok, GitHub
  • Custom links: Add up to 2 custom URLs with titles
  • Delete cards you no longer need

Contacts

  • Track who you've shared your card with
  • Scan QR codes to save someone else's business card
  • Notes & annotations: Add notes about each contact
  • Tags: Organize contacts with comma-separated tags
  • Follow-up reminders: Set reminder dates with overdue indicators
  • Where you met: Record event or location where you connected
  • Search contacts using localized matching (searches name, company, role, tags, notes)
  • Shows last shared time and the card label used
  • Swipe to delete contacts

Widgets (Preview Only)

  • Phone widget preview mock
  • Watch widget preview mock

watchOS App

  • Shows the default card QR code
  • Pick which card is the default on watch
  • Syncs with iPhone via App Groups

Data Sync

iCloud Sync (iOS)

Cards and contacts are stored using SwiftData with CloudKit sync enabled. Your data automatically syncs across all your iPhones and iPads signed into the same iCloud account.

iPhone to Watch Sync

The iPhone app syncs card data to the paired Apple Watch via App Groups. When you create, edit, or delete cards on your iPhone, the changes appear on your watch.

Note: The watch reads data from the iPhone. To update cards on the watch, make changes on the iPhone first.

Architecture

  • Clean Architecture: Clear separation between Views, State, Services, and Models
  • Views are dumb: Presentation only, no business logic
  • State is smart: @Observable classes with all business logic
  • Protocol-oriented: Interfaces for services and stores
  • SwiftData + CloudKit: Persistent storage with iCloud sync
  • One type per file: Lean, maintainable files under 300 lines
  • Reusable components: Shared UI in Views/Components/
  • Bedrock package: Shared design system and utilities
  • String Catalogs: Localization for en, es-MX, fr-CA

Dependencies

Bedrock (Local Package)

The app uses the Bedrock package for:

  • Design constants: Design.Spacing, Design.CornerRadius, Design.Opacity, etc.
  • QR code generation: QRCodeGenerator, QRCodeImageView
  • Reusable UI components: Settings views, badges, effects

App-specific extensions are in Design/DesignConstants.swift.

Project Structure

BusinessCard/
├── Design/              # Design constants (extends Bedrock)
├── Localization/        # String helpers
├── Models/              # SwiftData models (BusinessCard, Contact)
├── Protocols/           # Protocol definitions
├── Resources/           # String Catalogs (.xcstrings)
├── Services/            # Share link service, watch sync
├── State/               # Observable stores (CardStore, ContactsStore)
└── Views/
    ├── Components/      # Reusable UI components (AvatarBadgeView, etc.)
    ├── Sheets/          # Modal sheets (RecordContactSheet, etc.)
    └── [Feature].swift  # Feature screens

BusinessCardWatch/       # watchOS app target
BusinessCardTests/       # Unit tests

Configuration

Required Capabilities

iOS Target:

  • iCloud (CloudKit enabled)
  • App Groups (group.com.mbrucedogs.BusinessCard)
  • Background Modes (Remote notifications)
  • Camera (for QR code scanning)

watchOS Target:

  • App Groups (group.com.mbrucedogs.BusinessCard)

CloudKit Container

iCloud.com.mbrucedogs.BusinessCard

Notes

  • Share URLs are sample placeholders
  • Wallet/NFC flows are stubs with alerts only
  • Widget UI is a visual preview (not a WidgetKit extension)
  • First launch creates sample cards for demonstration

Running

  1. Open BusinessCard.xcodeproj in Xcode
  2. Ensure Bedrock package is resolved (File → Packages → Resolve Package Versions)
  3. Build and run on iOS Simulator or device

Tests

Unit tests cover:

  • vCard payload formatting
  • Default card selection
  • Contact search filtering
  • Create, update, delete cards
  • Contact tracking (new and existing contacts)
  • Theme and layout assignment
  • Social links detection
  • Contact notes and tags
  • Follow-up status and overdue detection
  • vCard parsing for received cards
  • Adding received cards via QR scan

Run tests with Cmd+U in Xcode.

Roadmap

See ROADMAP.md for planned features and implementation status.


Built with SwiftUI, SwiftData, and ❤️