All notable changes to NativeAppTemplate will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
EntityAdapterError(JSON:API parsing) now conforms toCodedErrorso failures — including login against an invalid server — surface with[NATIVEAPPTEMPLATE-2006..2008]prefixes instead of opaque descriptionsKeychainStoreErrornow conforms toCodedErrorwith new[NATIVEAPPTEMPLATE-4001..4004]codes for persistence failures
- Slim onboarding to a single welcome screen using the
sparklesSF Symbol - Replace logo and hero imagesets on sign-up/sign-in with
Strings.appNametext andsparkles - Introduce
Strings.appName("Native App Template") as the single source of truth for the in-app product name - Set
CFBundleDisplayNameto "Native App Template" - Refresh AppIcon to the upstream
nativeapptemplate-icon-composer-foregroundartwork
Onboardingmodel, repository/protocol, view model, and related tests- Onboarding 1–4 imagesets,
heroimageset, andLogoimageset
- Clarify Shop list card tag labels as "completed item tags" / "all item tags"
- NFC, QR code, and Scan functionality (Phase 2A-2)
tagsScannedcount andhowToUsefields from ItemTagmaximum_name_lengthfrom server permissions; moved to clientConstants- Onboarding reload ceremony
- Dead code:
ImageSaver,composited(), unused colors and fonts, deadDatehelper
- Renamed "Number Tag" to "Item Tag" across labels and identifiers
- Ported ItemTag schema and generic CRUD UI from paid iOS (Phase 2A-1, 2A-3)
- Display
completedAtasyyyy/MM/dd HH:mmregardless of locale - Added client-side length caps and truncation for Shop name/description
- Wrapped String constants in
enum Stringsnamespace - Slimmed onboarding to 4 slides; introduced
ImageOrientationenum - Tightened ItemTag labels and silenced success toasts on complete/idle
- Read API endpoint from env vars in Debug builds
- Renamed error code prefix
NATI-toNATIVEAPPTEMPLATE-and env var prefixNATEMPLATE_API_toNATIVEAPPTEMPLATE_API_ - Swiftier String predicates; replaced custom helpers with stdlib equivalents
- Unit tests for previously untested Models and
Dateextension CONTRIBUTING.mdandCODE_OF_CONDUCT.md
- Onboarding flow and asset cleanup
- README: dropped stale NFC/QR feature lines and updated env var references
- Replace PNG-based app icon with SVG-based
.iconformat - Move
Assets.xcassetsintoResources/directory
- Pagination support for item tags list
- CodedError system with
NATIVEAPPTEMPLATE-XXXXprefixed error codes - App version display in settings
- Design system constants (spacing, animation, glass, layout, corner radius)
- GlassButtonStyle and GlassCard components with glassmorphism styling
- Explicit Sendable conformance to model structs
- SwiftFormat for code formatting (with
--maxwidth 120) - SwiftFormat lint check to CI
@preconcurrency import CoreNFCandnonisolated(unsafe)for Sendable fixes- Model tests for ItemTagType, ItemTagState, and ScanState
- Tests for TabViewModel, MessageBus, Utility, and String extensions
- Update to iOS 26 and remove deprecated
UIRequiresFullScreen - Replace asset catalog colors with palette-based color system
- Replace Inter font with Apple system font
- Replace
confirmationDialogwithalertfor consistent centered presentation - Replace hardcoded spacing and corner radius values with
NativeAppTemplateConstants - Apply ultraThinMaterial backgrounds to scan views and ItemTagDetailView
- Use semi-transparent card background for list rows
- Update Lock toggle to button style in ItemTagDetailView
- Reorganize settings sections
- Clean up Settings: remove Discussions, update contact, remove dead code
- Remove SwiftyJSON dependency, use
JSONSerialization - Moved
.swiftlint.ymlto repository root with updated rules - Applied SwiftFormat across all source files
- Fixed all SwiftLint violations (line length, cyclomatic complexity, etc.)
- Prevent sensitive data from leaking to iOS console in Release builds
- Replace
#if DEBUG print()withos.Loggerfor structured, privacy-aware logging - Add TLS certificate pinning for API connections
- Remove backdoor authentication bypass
- Fix accept privacy/terms views not displaying
- Fix typo
startSesstion→startSessionin NFCManager - Fix typo
prmissionsResponse→permissionsResponsein SessionController - Fix
Event.refreshignoringactionparameter and hardcoding"Refresh" - Fix data race warning when sending
NFCNDEFMessageacross isolation boundaries - Remove unused
navigationPathStatsstate variable fromAppTabView - Remove hardcoded toolbar background from ScanView
- Updated for iOS 18 support
- Bug fixes
- Initial release of NativeAppTemplate
- 100% Swift, 99% SwiftUI (UIKit only for email screen via MessageUI)
@Observablemacro (iOS 17+) for state management- MVVM architecture with repository pattern
- Onboarding flow
- Sign Up / Sign In / Sign Out
- Email Confirmation
- Forgot Password
- Input Validation
- CRUD operations for Shops
- URL path-based multitenancy
- User invitation to organizations
- Role-based permissions and access control
- NFC tag reading and writing
- SwiftLint integration
- Swift Testing framework for unit tests
- GitHub Actions CI for automated testing
- Protocol-oriented repository pattern for testability
- DataManager as central dependency injection container
- Token-based authentication with automatic refresh
- NavigationStack with path-based routing
- JSON:API adapter layer