NativeAppTemplate-Free-iOS is a modern, comprehensive, and production-ready native iOS app with user authentication and background tag reading.
This iOS app is a free version of NativeAppTemplate-iOS (Solo) and NativeAppTemplate-iOS (Team).
The Android version is available here: NativeAppTemplate-Free-Android.
NativeAppTemplate-Free-iOS is configured to connect to api.nativeapptemplate.com
.
You can purchase the source code for the backend server APIs, made with Ruby on Rails, that power api.nativeapptemplate.com
:
NativeAppTemplate-Free-iOS uses modern iOS development tools and practices, including:
- 100% Swift
- 99% SwiftUI (UIKit is only used for the contact email screen.)
- @Observable (iOS 17: streamlined Swift state management)
- SwiftLint
- Simple MVVM Layered Architecture
- Test (Swift Testing)
- Inspired by emitron-iOS
- Onboarding
- Sign Up / Sign In / Sign Out
- Email Confirmation
- Forgot Password
- Input Validation
- CRUD Operations for Shops (Create/Read/Update/Delete)
- CRUD Operations for Shops’ Nested Resource, Number Tags (ItemTags) (Create/Read/Update/Delete)
- Generate QR Code Image for Number Tags (ItemTags) with a Centered Number
- NFC features for Number Tags (ItemTags): Write Application Info to a Tag, Read a Tag, Background Tag Reading
- And more!
The app replaces traditional paper tags with NFC tags to efficiently manage walk-in customer waitlists. It writes application-specific information onto your NFC cards (referred to as 🔴 Server Tag and 🔵 Customer Tag).
For Customers:
When a customer scans a 🔵 Customer Tag, they can view the 🟢 Number Tags Webpage (a public webpage) on their mobile browser. This page displays completed Number Tags.
For Staff:
By scanning a 🔴 Server Tag paired with the 🔵 Customer Tag, staff can complete a Number Tag. Completed Number Tags automatically appear on the 🟢 Number Tags Webpage for customer reference.
- Write application info to pair Number Tags (Server Tag and Customer Tag) or a Customer QR code:
- Go to: Shops > [Shop] > Shop Settings > Manage Number Tags > [Number Tag].
- Scan a Server Tag in the Scan tab.
- View the updated Number Tags status in the Shop Detail screen or on the Number Tags Webpage (see Background Tag Reading GIF below).
For best performance, use NTAG215 (540 bytes) tags.
Example: 50pcs NFC Cards Ntag215 (Amazon USA).
- Scan a Server Tag.
- View the updated Number Tags status in the Shop Detail screen or on the Number Tags Webpage.
The Number Tags Webpage updates in real-time using Rails Turbo.
This functionality is available in:
Note:
The GIF above shows MyTurnTag Creator for iOS in action, which may behave slightly differently from NativeAppTemplate-Free-iOS.
For background tag reading to work correctly on iOS, you must configure Associated Domains in your app.
To set up Associated Domains on iOS, follow these steps:
-
Add your domain (e.g.,
applinks:api.example.com
) to the Associated Domains section in Xcode under Signing & Capabilities. -
Configure the apple-app-site-association (AASA) file and host it on your server.
-
Verify that the AASA file is correctly configured and accessible by checking its contents at the following URL:
🔗 https://app-site-association.cdn-apple.com/a/v1/api.example.com
-
Uninstall NativeAppTemplate-Free-iOS, reset your device, and then reinstall NativeAppTemplate-Free-iOS to ensure the changes take effect.
For detailed instructions, refer to Apple’s official documentations:
The full versions (NativeAppTemplate-iOS (Solo) and NativeAppTemplate-iOS (Team)) include additional advanced features:
- URL Path-Based Multitenancy (prepends
/:account_id/
to URLs) - User Invitation to Organizations
- Role-Based Permissions and Access Control
-
iPhone
- SDK: iOS
- Orientation: Portrait mode only
- Screen: Requires full screen
-
iPad
- SDK: iOS
- Orientation: Portrait mode only
- Screen: Requires full screen
-
Mac
- SDK: iOS
- Orientation: Portrait mode only
- Screen: Requires full screen
- Notes: Designed for iPad
To get started, clone this repository:
git clone https://github.com/nativeapptemplate/NativeAppTemplate-Free-iOS.git
To run this app successfully, ensure you have:
- An iOS device or emulator with iOS version 17.6 or higher
To connect to a local API server, update the following configuration in in Constants.swift:
static let scheme: String = "http"
static let domain: String = "192.168.1.21"
static let port: String = "3000"
SwiftLint runs as part of the build process in Xcode, and errors/warnings are surfaced in Xcode as well. Please ensure that you run SwiftLint before submitting a pull request.
To install SwiftLint using homebrew:
$ brew install swiftlint
Xcode will automatically run SwiftLint if it is installed.
If you have an improvement you'd like to share, create a fork of the repository and send us a pull request.