Re-assembly is the reverse of disassembly. (Haynes)
An iOS/iPadOS app for teardown photos: shoot while you take something apart, so you know how it went back together during reassembly. For personal use. The interface is English with a full Dutch localization.
The app stores (almost) nothing itself. All photos, structure and sync live in the iCloud Photo Library. Every byte of custom storage would be CloudKit sync complexity that Photos gives you for free.
The app structure mirrors the Photos hierarchy 1-to-1, under a single root folder "Re-assembly":
- Folder (
PHCollectionList) — can nest (client → project → …) - Album (
PHAssetCollection) — holds the photos
Because of this, managing everything also works straight from the Photos app.
- Project list — folders/albums under the root, sorted by latest activity (newest asset). Nesting, renaming (swipe or tap the title), and delete-all (album/folder + all its photos in one action). Folder rows show their contents split by kind ("1 folder, 2 albums"). A new project opens immediately, and the app reopens where you left off — even after a force-quit.
- Photo grid per album — grouped by day with a date header (Today / Yesterday / date), newest first. Multi-select to delete several photos in one action (one system confirmation).
- Rotate — 90° counterclockwise like Photos, from the grid's long-press menu or the viewer. Non-destructive via the Photos edit pipeline: the original is kept and Revert in Photos still works. Renders explicit 8-bit SDR output (HDR camera photos would otherwise be rejected by Photos).
- Built-in camera (AVFoundation) — no "Use Photo" confirmation, shoots straight through, the album stays active (next photo is one tap). Writes the geotag onto each photo itself. Shutter gives a flash + haptic. Swipe down to close (photos are already saved).
- Photo viewer — pinch-zoom, double-tap, panning; rotate and delete in Photos-style action bubbles; swipe down to close.
- Quick actions — long-press the app icon for "photo in " shortcuts (active + recent projects), and an App Intent for Shortcuts, Siri and the Action Button. Both jump straight into the album and open the camera.
- English + Dutch — English is the default; Dutch follows the system language via String Catalogs.
- ControlWidget (Control Center / lock-screen button) and
LockedCameraCaptureon the existing App Intent — waiting on the extension targets. - Optionally defer the location prompt until the first geotag moment.
See SPEC.md for the full concept and the architecture decisions
made along the way.
- SwiftUI, one codebase for iPhone + iPad, minimum iOS 18
- No external dependencies, no custom datastore
- PhotoKit for structure and assets, AVFoundation for the camera, CoreLocation for the geotag
- Own state: the active project and the open navigation path (UserDefaults,
per device — deliberately
localIdentifier-based, nothing syncs)
Permissions: full Photos access (.readWrite), camera, and location.
Open Reassembly/Reassembly.xcodeproj in Xcode and run on a simulator or
device. The camera and geotag only work on a real device.
The app icon (an exploded bolt assembly on a purple gradient) is generated by
Resources/make-icon.html.