A kidsโ English/Chinese vocabulary and speaking-practice app, packaged as a native iOS app using Capacitor.
com.fafa.kidlearning@capacitor-community/text-to-speech โ native on-device text-to-speech, with a fallback to the browserโs Web Speech API when the app is opened in a normal browsermain.
โโโ web/ # Source of truth for the app's web content
โ โโโ index.html # โ edit this file for any app changes
โ โโโ BG/ # โ background images
โ โโโ dialogue/ # โ dialogue/speaking practice assets
โโโ ios/
โ โโโ App/ # Native iOS Xcode project
โ โโโ App.xcodeproj
โ โโโ App.xcworkspace
โ โโโ Podfile
โ โโโ App/
โ โโโ AppDelegate.swift
โ โโโ Info.plist
โ โโโ public/ # Generated copy of web/ โ DO NOT edit directly,
โ # it gets overwritten by `npx cap sync ios`
โโโ package.json
โโโ capacitor.config.json # webDir points at "web"
โโโ codemagic.yaml # CI build + TestFlight publish pipeline
โ ๏ธ Only edit files inside
web/. Theios/App/App/public/folder is a build artifact, regenerated fromweb/every timenpx cap sync iosruns (including automatically on every Codemagic build). Changes made directly insideios/App/App/public/will be silently overwritten.
Since this is a plain HTML/JS app, you can just open web/index.html directly in a
browser to work on layout, content, or quiz logic โ text-to-speech will use the
browserโs built-in Web Speech API in that case.
To test the native TTS plugin and other native behavior, you need to build and run the iOS app itself (see below).
npm install
npx cap sync ios
cd ios/App
pod install
Then open ios/App/App.xcworkspace in Xcode (not the .xcodeproj) and build/run as
usual.
Every push to main triggers an automated build defined in codemagic.yaml, which:
npx cap sync ios (copies web/ into ios/App/App/public/, generates
capacitor.js, and updates the Podfile with plugin dependencies).ipaBefore this pipeline will work, make sure codemagic.yaml has:
integrations.app_store_connect)APP_STORE_APPLE_ID (found in App
Store Connect โ your app โ App Information โ Apple ID)cap sync fails with โios platform has not been added yetโ โ the CLI expects
the native project at ios/App/App.xcodeproj. Donโt move or rename the ios/
folder structure.cap sync fails trying to copy a folder onto itself โ webDir in
capacitor.config.json must point at web (the source folder), never at
ios/App/App/public (the destination folder) โ otherwise Capacitor tries to copy
that folder into itself and fails immediately.