Mext is an iOS keyboard extension built in Swift that allows users to type math symbols easily.
It supports dynamic key colors, iOS-like key animations, and a mini-game mechanic for playful interaction while typing.
- 🎨 Dynamic key colors – Customize individual key colors or entire themes
- ✨ iOS-like key animations – Smooth and natural key tap animations
- 🧮 Math symbol support – Quickly type common mathematical symbols
- 🕹️ Mini-game mechanic – Keys can trigger a "clicker"-style system with counters and probabilities
- 🛠️ Helper functions – Utilities for text input, layout adjustments, and internal keyboard logic
- 📦 Swift + UIKit – Fully written in Swift, compatible with modern iOS versions
| Component | Technology |
|---|---|
| Language | Swift |
| Development | iOS SDK (Xcode) |
| Architecture | Modular / UIKit-based |
| Testing | Xcode Unit & UI Tests |
The keyboard extension separates UI, logic, and helper functions for maintainability:
- 🎛️ KeyboardViewController – Handles layout, taps, animations, and symbol input
- 🛠️ HelperFunctions.swift – Utility functions for text input, counters, and mini-game logic
- 🖋️ Symbols.swift – Defines available math symbols
- 🎨 Assets.xcassets – Key colors, icons, and themes
This modular design ensures easy feature extensions, testing, and maintainability.
├── 📁 Mext
│ ├── 📁 Assets.xcassets
│ │ ├── 📁 AccentColor.colorset
│ │ │ └── ⚙️ Contents.json
│ │ ├── 📁 AppIcon.appiconset
│ │ │ ├── ⚙️ Contents.json
│ │ │ ├── 🖼️ mext_icon_any.png
│ │ │ └── 🖼️ mext_icon_dark.png
│ │ └── ⚙️ Contents.json
│ ├── 🍎 ContentView.swift
│ ├── 📄 Mext.entitlements
│ └── 🍎 MextApp.swift
├── 📁 Mext.xcodeproj
│ ├── 📁 project.xcworkspace
│ │ ├── 📁 xcshareddata
│ │ │ └── 📁 swiftpm
│ │ │ └── 📁 configuration
│ │ └── 📄 contents.xcworkspacedata
│ ├── 📁 xcshareddata
│ │ └── 📁 xcschemes
│ │ ├── 📄 Mext.xcscheme
│ │ └── 📄 keyboard ext.xcscheme
│ └── 📄 project.pbxproj
├── 📁 MextTests
│ └── 🍎 MextTests.swift
├── 📁 MextUITests
│ ├── 🍎 MextUITests.swift
│ └── 🍎 MextUITestsLaunchTests.swift
├── 📁 keyboard ext
│ ├── 🍎 HelperFunctions.swift
│ ├── 📄 Info.plist
│ ├── 🍎 KeyboardViewController.swift
│ ├── 🍎 Symbols.swift
│ └── 📄 keyboard ext.entitlements
├── ⚙️ .gitignore
└── 📝 README.md
- macOS & Xcode
- iOS Simulator or physical iPhone
- Clone the repository:
git clone git@github.com:acai10/Mext-Custom-iOS-Math-Symbols-Keyboard.git
- Open in Xcode: Open
Mext.xcodeproj - Replace bundle identifiers and App Group IDs (see section below)
- Build & Run: Select a simulator or device and press
Cmd + R - Enable the keyboard in iOS settings:
Settings → General → Keyboard → Add New Keyboard → Mext
Before building, replace all occurrences of the placeholder identifiers with your own values.
The App Group is used to share data between the main app and the keyboard extension. Replace every occurrence of:
group.com.acai10.mextwith your own App Group ID, e.g.:
group.com.yourname.mextYou'll need to update this in the following places:
Mext/Mext.entitlementskeyboard ext/keyboard ext.entitlements- Any code in
HelperFunctions.swiftorKeyboardViewController.swiftthat references the App Group
Replace the bundle identifier com.acai10.mext with your own in:
- Xcode project settings → Select the
Mexttarget → General → Bundle Identifier - Xcode project settings → Select the
keyboard exttarget → General → Bundle Identifier (typicallycom.yourname.mext.keyboard-ext) keyboard ext/Info.plist
Make sure your App Group is registered in the Apple Developer Portal:
- Go to Certificates, Identifiers & Profiles → Identifiers
- Create a new App Group with your chosen ID (e.g.,
group.com.yourname.mext) - Add the App Group to both your App ID and your Keyboard Extension ID
- Regenerate and download the corresponding provisioning profiles
⚠️ Without matching App Group IDs across the app and extension, data sharing between them will not work.
This project explores:
- iOS keyboard extension development with Swift and UIKit
- Custom UI design with dynamic key colors and animations
- Math symbol input for easy typing of common symbols
- Lightweight modular architecture for maintainable and testable code
- Customizable keyboard themes
- Expanded math symbol sets
- Enhanced mini-game counters and probabilities
- Haptic feedback support
- Optional iCloud sync for user settings
This project is for educational and experimental purposes only.
It is not intended for professional mathematical software, but as a playful and practical keyboard extension.