Docs

Parla TemplateNew

Install, rebrand and theme Parla, the Language App template. Version 1.0.0.

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. This guide takes you from download to a running, renamed app. It covers version 1.0.0. See the screens on its library page.

Requirements

  • Xcode 26 and an iOS 17.0 or later deployment target
  • Tuist 4 (brew install tuist)
  • An Apple Developer team for devices, App Groups and Sign in with Apple. The simulator runs without one.

Install

Download

Included with Swift Pieces Pro. Not signed in? The button takes you to sign in or create an account, then starts the download when you're back. Unzip the archive; it contains one folder, Parla/.

Make it yours

cd Parla
scripts/setup.sh --name YourApp --bundle-id com.you.yourapp --preset parla-sol

The script rewrites the project configuration, renames the paywall product ids, renders the app icon in the chosen preset and runs tuist generate.

Run it

Open YourApp.xcworkspace, choose an iPhone simulator and run the YourApp scheme. The first launch loads sample data so every screen has content.

Rebrand options

OptionWhat it sets
--nameTarget, scheme and product name. Letters and digits.
--bundle-idThe bundle id. The widget, modules, tests and the App Group derive theirs from it.
--display-nameThe name under the icon. Copy that mentions the app reads it at runtime.
--teamYour Apple Developer team id.
--presetThe starting brand preset. Also re-renders the app icon.
--product-prefixApp Store Connect product id prefix. Defaults to the bundle id plus .pro.

The values live in Tuist/ProjectDescriptionHelpers/AppConfig.swift if you prefer to edit them by hand.

Theming

Parla reads every color, type size, radius and animation from @Environment(\.spTheme). Its three presets are three different scheme families, so switching changes the whole look: ground, surfaces, color blocks, type and shape. People switch presets and appearance in Settings > Theme, and the widget follows.

PresetIdLookType
Confettiparla-confettiPaper white, toy colors, pressable buttons and heavy rounded type.SF Pro Rounded
Solparla-solSun-bleached sand, marigold and terracotta.Space Grotesk
Editorialparla-editorialSerif headlines over scenery, ink and paper.New York
  • Blocks: theme.color.tiles holds each family's solid block colors with the ink that reads on them. Use them for categories, charts and highlights, and keep the accent for the primary action.
  • Numbers and display type: theme.type.numeral(64) and theme.type.display(40) set any size in the family's style, scaling with Dynamic Type.
  • Backdrop: SPBrandBackdrop draws the family's motif (contours, scenery, shapes, blobs, rings, the Pearl haze or Confetti's sprinkles) behind hero surfaces.
  • Liquid Glass: .spGlass uses glass on iOS 26, Material on iOS 17 and 18, and an opaque surface under Reduce Transparency.

To build your own brand, start from the preset closest to it in BrandPresets.swift, copy it, and change its colors; every role and block pairing should keep 4.5:1 contrast. For a quick start from hues, SPBrandConfiguration.custom(...) builds an accessible palette from three OKLCH hues.

Purchases and accounts

  • PurchaseStore handles StoreKit 2: products, purchase, restore and transaction updates. The scheme runs with Configuration/Products.storekit, so purchases work in the simulator before App Store Connect is set up.
  • Create the products in App Store Connect with the ids in the project's catalog (the product prefix plus .yearly and .monthly).
  • AccountStore signs in with Apple and keeps the account in the Keychain. People can also continue without an account.
  • Data lives in SwiftData inside the App Group, so the widget reads the same store. Replace the sample data by conforming your own type to the repository protocol.

Launch arguments

Debug builds accept these arguments for demos and screenshots. Release builds ignore them.

ArgumentEffect
-SPMockStoreLocal purchases with the same plans
-SPMockAccountA signed-in sample account
-SPSkipOnboardingOpen on the home screen
-SPResetOnboardingRun first launch again
-SPResetDataReseed the sample data
-SPTab followed by a tab idOpen a tab
-SPPresent paywallPresent the paywall
-SPPreset parla-solStart with a preset
-SPAppearance darkForce light or dark

Changelog

1.0.0

2026-10-01

  • Tuist project with feature modules (Onboarding, Paywall, Learn, Lesson, Words, Passport) on a shared DesignSystem and the PhraseKit domain module.
  • One-command setup: name, bundle id, team, product ids, brand preset and app icon.
  • Brand presets Confetti (default), Sol and Editorial with SF Pro Rounded, Space Grotesk and New York type, switchable in Settings. Every control stands on a lip and presses into it, in every preset.
  • A chunky tab bar of Parla's own (Learn, Words, Passport) over TabView, each tab with its own stack.
  • First run hosted by Pip: hello in three languages, the language on tiles with drawn flags, why you're learning, your level, a daily goal, the reminder permission (with a designed answer when it is declined) and Parla Plus.
  • Parla Plus: Pip, what Plus adds on block badges, tactile plan cards with a Best value sticker, loading, load error, purchase error and a confetti success, on StoreKit 2 with a .storekit configuration and a mock store for demos.
  • Learn on the Path: units as banners in their own color that pin and hand over as you scroll, stops on a wave with stars, the current stop ringed with its progress under a bouncing Start bubble, a lesson card on press, Pip with tips, and a course switcher behind the flag.
  • Lessons on the Practice screen: five to eight sentences built from word tiles, hints on every word, speech, a combo, a verdict that cheers or corrects, a confetti finish with stars, XP, accuracy and time, then the streak moment for the day's first round.
  • Words: every word met by unit with a strength meter, search, and a practice deck that runs spaced review rounds (ReviewScheduler), with one free round a day.
  • Passport on the Passport screen: the streak and its week, XP, words and time that open into their week, and a stamp per unit that lands with a thud when its checkpoint is passed. Settings (voice speed, accents, sounds, haptics, daily goal, reminder, course, level, theme, Plus) is pushed from its gear.
  • Courses as data: Spanish in full (three units, eighteen stops, sixty words) and one unit each of French and Italian.
  • SwiftData progress in an App Group with five weeks of sample Spanish progress and a repository protocol.
  • Streak (small) and Next lesson (medium) widgets with parla:// links.
  • A daily reminder at the time you choose.
  • Light and dark mode, Dynamic Type through the accessibility sizes, VoiceOver labels and traits, Reduce Motion.
  • String catalog, unit tests and a first-run UI test.