A native iOS & macOS pinball machine in the style of the 90s tables: one neon playfield, six chained missions, multiball and a wizard mode.
- ✅ A full 90s playfield — three pop bumpers, two slingshots, a five-target drop bank, four standup targets, two ramps, two orbits, a spinner, two saucers, a magnet and the P-I-N-B rollover lanes
- ✅ Two flippers on real pin joints, as on the classic 90s tables, a pull-and-release plunger, and a nudge that tilts the table if you push your luck three times in two seconds
- ✅ Six chained missions — Warm-Up, Ramp Rush, Target Frenzy, Orbit Loop, Lock 3 and Jackpot Hunt — leading into the Final Shot wizard mode, tracked on a lit mission ladder under the top arch
- ✅ A 90s skill shot: the lit lane walks across P-I-N-B while you aim, and the flipper buttons move the lit lanes (lane change)
- ✅ An amber dot-matrix display for the score, the missions, jackpots, TILT and the end-of-ball bonus counted out line by line
- ✅ Three-ball multiball where everything scores double, lit jackpots and super jackpots
- ✅ Combo multiplier up to 8× on back-to-back ramps and orbits, player multiplier up to 5× from the lanes and the drop bank
- ✅ Ball save, extra balls, end-of-ball bonus, a stuck-ball watchdog and a ten-entry high score table with initials
- ✅ Lamp inserts that flash at the shot to make, general illumination that goes out on a tilt, lamp flashes on a jackpot and cabinet movement when nudged
- ✅ Fully synthesised audio and Core Haptics — no sound files, every effect generated at launch
- ✅ Bilingual PT-PT / English in-app language switch, independent of your device language
- ✅ Dark, Light and System appearance, with the iVidi.dev orange, burnt yellow and black
- ✅ Animated splash screen with developer credits, then straight into the main menu
- ✅ Touch controls on iPhone and iPad, full keyboard play on the Mac, and Reduce Motion support throughout
- ✅ Shared SwiftUI codebase running natively on both iPhone/iPad and Mac
| Category | Technology |
|---|---|
| Language | Swift 5.9 |
| UI | SwiftUI |
| Physics & Rendering | SpriteKit |
| Audio | AVFoundation (synthesized SFX and music) |
| Haptics | Core Haptics |
| Project | XcodeGen |
| Min. iOS | 17.0 |
| Min. macOS | 14.0 |
- Xcode 15+ on macOS
- XcodeGen if you change the file structure (
brew install xcodegen)
git clone https://github.com/VidiPT89/iPinball.git
cd iPinball
open iPinball.xcodeprojPick the iPinball-iOS or iPinball-macOS scheme and run (⌘R).
The Xcode project is generated with XcodeGen from
project.yml. If you add or move Swift files, regenerate it withxcodegen generate.
- Watch the splash screen, then choose Play from the main menu
- Drag down anywhere and release to pull the plunger — the further you pull, the harder the ball is launched
- Tap the left or right half of the screen for that flipper
- Flick a finger sideways while holding a flipper to nudge the table. Three nudges in two seconds cause a TILT and cost you the ball
- Shoot a saucer to start a mission. Finish all six to unlock Final Shot, and clear Lock 3 to start multiball
- Chain ramps and orbits within four seconds to build the combo up to 8×, and complete the P-I-N-B lanes to raise the player multiplier up to 5×
- On the Mac:
←/→flippers,Spacehold and release to launch,N/Mnudge,Escpause - Switch language, appearance, sound and controls any time from Settings
xcodebuild -project iPinball.xcodeproj -scheme iPinball-macOS -destination 'platform=macOS' test
xcodebuild -project iPinball.xcodeproj -scheme iPinball-iOS -destination 'generic/platform=iOS Simulator' build
xcodebuild -project iPinball.xcodeproj -scheme iPinball-macOS -destination 'platform=macOS' buildThe suite covers rules, table clearances, persistence, translations and SpriteKit scene regressions, including an off-screen table render. Release builds keep the macOS hardened runtime enabled; Debug disables it so XCTest can load its test bundle.
Distributed under the MIT License. See LICENSE for details.
David Arsénio Martins
Contributions, issues and feature requests are welcome. Feel free to check the issues page.
Developed by David Arsénio Martins
⭐ If you like this project, give it a star!
