Template · Education

New

Language App

Parla, a language course you play: a complete Xcode project with a lesson path, chunky word exercises, a talking coach, passport stamps, streaks, widgets and three brand presets.

A language app on three tabs. First run is hosted by Pip, the coach: pick a language, why you're learning, your level and a daily goal, allow a reminder, then Parla Plus on StoreKit 2. Learn is the course as a winding path; a lesson is a run of word-tile exercises with instant feedback that ends in confetti, and the day's first one grows your streak; finishing a unit presses a stamp into your passport. Words reviews what you've met with spaced repetition, and Passport keeps your stamps, streak, settings and the subscription.

SwiftUIiOS 17.0+Xcode project 1.0.0language-app

Get Swift Pieces Pro

$199 once, every piece included. See how installing works · Sign in

01

What's inside

The screens this template wires together, in the order someone meets them.

First run

Pip asks for your language, your reason, your level and a daily goal, then the reminder permission and Parla Plus on StoreKit 2. Runs once, then records completion.

Tabs

Learn, Words and Passport on Parla's chunky tab bar. Learn is the Path; Words is every word you've met with a practice deck; Passport is your stamps and streak, with Settings behind its gear.

From the tabs

A stop plays as Practice exercises and ends on a confetti finish and the streak moment; Words runs its review rounds in the same exercises.

02

What's included

SwiftUI source you own, built on Apple frameworks only.

  • The course as a winding path of lessons, with the next one bouncing
  • Word-tile exercises with a talking coach and instant feedback
  • A confetti finish, then a streak moment for the day's first lesson
  • A stamp in your passport for every unit you finish
  • Words to review, scheduled by spaced repetition
  • Streak and Next lesson widgets
  • Three presets: Confetti, Sol and Editorial

Includes

Path, Practice, Passport, Settings. Installed together, automatically.

Requires

In-App Purchase capability

03

Implementation notes

How it behaves, what it handles, and the decisions behind it.

LanguageApp is one root view. On first launch Pip, the coach, hosts Parla's first run from a speech bubble at the top of each step: a hello in three languages, the language on tactile tiles with drawn flags, a daily goal, then Parla Plus on StoreKit 2. Closing, purchasing or restoring finishes first run and records it under a completion key, so the root switches to the app on its own.

The app sits on three tabs under Parla's own chunky tab bar: a white bar on a 2pt rule where the selected tab stands on a tactile tile with its icon in its own color. It is a TabView with the system bar hidden, so each tab keeps its own stack. Learn is the Path screen: the course as a wave of stops you press, unit banners that pin and hand over, Pip beside the current stop, and a card that pops from a stop with Start. A lesson is the Practice screen, full screen: build each sentence from word tiles, check it, and the last one ends in confetti with stars, XP, accuracy and time. The day's first round then ends on the streak moment, where the flame swells, the count rolls over and today's circle fills. Words lists everything you've met by unit, each with a strength meter, under a deck of the words due and Practice. Passport is the Passport screen: the streak, your totals, a stamp per unit, and a gear that pushes the Settings screen. Finishing a unit's checkpoint lands its stamp there with a thud.

Adapting it

  • Products: pass your App Store Connect ids as productIDs. Until they exist, the paywall shows Pip wincing over "Plans didn't load", and its close key still finishes first run.
  • Your course: units, stops and sentences come from LanguageAppSample at the top of LanguageApp.swift. A unit is a PathUnit with its block; each stop plays a list of SentenceExercises (the prompt, the answer as it should read, distractor tiles and the words it teaches).
  • Progress: LanguageAppModel keeps it in memory, and finish(_:result:) is the one place a round is recorded: the stop's stars, the next stop current, the day's XP, the streak and, at a checkpoint, the unit's stamp. Move it to your own store when you have one.
  • Theme: everything follows the theme you set on LanguageApp. Without a brand it wears Parla Confetti; SPBrandTheme(.parlaSol) or .parlaEditorial change the ground, blocks, type and motif at once, while the tactile keys and Pip stay.

The Xcode project

The download is a complete project on Tuist: Spanish for English speakers in full (three units of six stops, sixty words, every sentence written for the template) with a unit each of French and Italian, kept as data; progress in SwiftData behind a repository protocol, with five weeks of sample progress ending yesterday; spaced review of every word met (ReviewScheduler), with one free round a day; Pip's longer first run (why you're learning, your level, the reminder permission and its declined state); Parla Plus on AppCore's purchase store, which opens the third unit, unlimited review and the Sol and Editorial themes; speech in the course's voice at the speed you choose; Settings for voice speed, accents, sounds, haptics, the goal, the reminder and the course; Streak and Next lesson widgets with parla:// links; three presets; unit tests for scheduling, sentence checking, the course data, the stats and the store, and a first-run UI test.

Notes

  • Not @main: put LanguageApp() in your own WindowGroup.
  • Enable the In-App Purchase capability before testing purchases.
  • Sentence checking forgives case and punctuation, and accents when accent forgiveness is on. Ñ always counts.
  • XP, a daily goal, a streak, stars, a combo and stamps are the whole reward system: a missed sentence comes back once at the end of the lesson, and that's all.
  • Previews ship with the file: first run, home, and home in each Parla preset.