Skip to content

Repository files navigation

PicChronoImporter

PicChronoImporter is a macOS SwiftUI app for reviewing and importing photos and videos from an SD card or selected folder. It resolves capture dates from media metadata, plans date-based destination folders, detects duplicates, and lets the user resolve conflicts before any copy is performed.

The app is localized in English and Japanese.

Important

The PicChronoImporter v1.0 GitHub Release provides an ad hoc-signed binary that is not notarized with Apple. It is not intended to pass Gatekeeper like a Developer ID-distributed macOS app. Verify the published SHA-256 checksum and artifact source before using Apple’s “Open Anyway” procedure; do not disable Gatekeeper globally.

Highlights

  • Scan a mounted volume or selected folder, including DCIM-only and custom-folder scopes.
  • Classify RAW images, compressed images, videos, sidecars, and other files independently; no strict RAW+JPEG pairing is assumed.
  • Resolve capture dates from EXIF or container metadata with file timestamps as a fallback. Unresolved dates always use UnknownDate.
  • Preview planned destination paths using supported year/month/day templates.
  • Filter, sort, search, and bulk-select review items before import.
  • Detect duplicate candidates cheaply, then confirm duplicates with a strong content hash.
  • Default conflicts to skip, with explicit rename and overwrite choices.
  • Re-check destination state immediately before each copy so one late conflict is skipped and reported without stopping the remaining import.
  • Keep thumbnails in memory only and store no image bodies in the SQLite cache.

Requirements

  • macOS 26.0 or later
  • Xcode 26.6 or a compatible newer Xcode
  • Swift 6

Build the app

Clone the repository and open PicChronoImporter.xcodeproj in Xcode:

git clone https://github.com/3ckey/picchronoimporter.git
cd picchronoimporter
open PicChronoImporter.xcodeproj

Select the shared PicChronoImporter scheme and run the macOS app target. The app uses the standard macOS folder picker and does not require a real SD card.

Run tests

Core and platform tests are Swift packages:

cd Packages/PhotoImportCore
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
  /usr/bin/xcrun swift test

cd ../PhotoImportPlatformMac
DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer \
  /usr/bin/xcrun swift test

cd ../..
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild test \
  -project PicChronoImporter.xcodeproj \
  -scheme PicChronoImporter \
  -destination 'platform=macOS' \
  -only-testing:PicChronoImporterTests

Replace the last target with PicChronoImporterUITests to run the longer fixture-driven UI suite. The platform suite skips its private representative-media test unless PICCHRONO_REAL_MEDIA_MANIFEST is set. See Representative real-media validation for the opt-in procedure. Deterministic tests and UI tests never require private media, a photo library, network access, or manual folder selection.

Download or build a release artifact

The v1.0 Release contains the Universal app ZIP, its SHA-256 checksum, and a Manifest v1 file recording source, build, signing, and verification metadata.

From a clean, non-shallow clone with Xcode 26.6 and betterleaks installed:

scripts/build-release.sh

See the ad hoc release runbook for the exact prerequisites, GitHub Actions procedure, checksum and code-signing verification, tag contract, and Manifest v1 format. The ZIP is ad hoc signed and not notarized, so it is not intended to pass Gatekeeper as a normal public binary distribution. Follow the documented “Open Anyway” procedure only after confirming the checksum and the artifact’s source; do not disable Gatekeeper.

Architecture

The repository keeps domain rules and platform integrations separate:

Packages/PhotoImportCore/          Domain models, protocols, and use cases
Packages/PhotoImportPlatformMac/   macOS file, metadata, thumbnail, and SQLite adapters
MacApp/PicChronoImporter/          SwiftUI, ViewModels, composition, and fixtures

Core is platform-independent and does not depend on SwiftUI, AppKit, ImageIO, FileManager, or SQLite implementation details. See the product specification and implementation plan for the complete behavior and current phase status.

Privacy and data safety

PicChronoImporter processes selected files locally and contains no telemetry or upload path. Import copies source files rather than modifying them. Its cache stores file identity and content hashes only; it does not store media bodies or thumbnails, and cache records can be cleared in Settings.

Real camera files, populated validation manifests, absolute private paths, and real content hashes are intentionally excluded from Git. Please follow CONTRIBUTING.md before adding tests or fixtures.

Contributing and security

Contributions are welcome. Read CONTRIBUTING.md for the test, architecture, and fixture rules. Report security or data-loss issues privately as described in SECURITY.md; do not include personal media or metadata in a public issue.

License and asset provenance

The project is available under the MIT License.

The tracked app icon was generated with OpenAI Imagegen and approved for publication by the repository owner. No third-party source image is included in the icon asset.

About

A macOS SwiftUI app for reviewing and importing photos and videos into date-based folders.

Topics

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages