Skip to content

tosh7/BlackCat

Repository files navigation

BlackCat - Package Delivery Tracker for iOS

A native iOS app for tracking package deliveries across major Japanese carriers — Yamato Transport, Sagawa Express, and Japan Post — all in one place. Built entirely with SwiftUI, Combine, and Apple-native frameworks. No third-party dependencies.

Available on the App Store.

Features

  • Multi-Carrier Tracking — Track packages from Yamato (ヤマト運輸), Sagawa (佐川急便), and Japan Post (日本郵便) in a unified interface
  • Zero Dependencies — Built entirely with Apple-native frameworks

Coming Soon

  • Apple Watch App — View delivery status from your wrist with watch complications (code in place, under testing)
  • Home Screen Widget — WidgetKit-powered widget for at-a-glance delivery status
  • Background Refresh — Automatic status updates via BGTaskScheduler at configurable intervals
  • Push Notifications — Alerts on status changes and delivery completion
  • Dark Mode — Full support for both light and dark appearances

Architecture

MVVM with Combine for reactive data binding. The codebase is organized into four targets:

BlackCat/                  # Main iOS app
├── Scenes/
│   ├── Splash/            # Launch screen
│   ├── DeliveryList/      # Main list of tracked packages
│   ├── AddList/           # Register a new tracking number
│   ├── StateDetail/       # Delivery status timeline
│   ├── Settings/          # Background refresh, notifications, display
│   ├── Onboarding/        # First-run experience
│   └── Help/              # FAQ
├── Models/                # DeliveryItem, DeliveryCarrier, DeliveryStatus
├── Utils/                 # BackgroundRefreshManager, NotificationManager
└── CommonViews/           # Reusable UI components

Domain/                    # Networking & API layer
├── APIProtocols/          # Generic API client, error handling
├── Endpoints/             # Carrier-specific request/response (Tneko, Sagawa, JapanPost)
└── DomainTests/           # Unit tests per carrier + API error tests

Shared/                    # Cross-target models
├── SharedDeliveryItem     # Common delivery model
├── SharedDataManager      # App Group data sync (iOS ↔ Widget ↔ Watch)
└── WatchDeliveryData      # Lightweight Codable model for WatchConnectivity

BlackCatWatch/             # watchOS companion app
├── Views/                 # Watch-optimized list & detail views
├── Complications/         # Watch face complications
└── Utils/                 # WatchConnectivityManager

BlackCarWidget/            # WidgetKit home screen widget

Supported Carriers

Carrier Tracking Format API
Yamato Transport (ヤマト運輸) 12 digits HTML scraping
Sagawa Express (佐川急便) 12 digits HTML scraping
Japan Post (日本郵便) 11–13 digits / international (e.g. EA123456789JP) REST API

Tech Stack

Category Technology
UI SwiftUI
Reactive Combine
Testing XCTest
Background (planned) BGTaskScheduler
Widget (planned) WidgetKit
Watch (planned) WatchConnectivity, App Groups

Getting Started

Requirements

  • Xcode 26 or later (recommended)
  • iOS deployment target: 26.0

Build & Run

git clone https://github.com/tosh7/BlackCat.git
cd BlackCat
open BlackCat.xcodeproj

Select the BlackCat scheme and run on a simulator or device.

Testing

xcodebuild test -project BlackCat.xcodeproj -scheme BlackCat -destination 'platform=iOS Simulator,name=iPhone 16'

Tests cover:

  • Carrier API parsing (Tneko, Sagawa, Japan Post)
  • ViewModel logic (DeliveryList, AddList, StateDetail)
  • API error handling and HTTP method routing

License

MIT

Contact

About

BlackCat iOS App made with SwiftUI. Check where your delivery item is!

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages