ilyas-hallak/romm-ios-app

yet another iOS app for RomM

149

stars

253

commits

Swift

primary language

Sep 15, 2026

updated

README

RomM iOS App

MIT License

A native iOS companion app for RomM. Connect to your self-hosted RomM server to browse, play, and manage your retro game ROM collection directly from your iPhone or iPad.

Compatible with RomM 5.0.*

Download

TestFlight Beta

Join the beta program and help improve the app:

Join TestFlight Beta

Screenshots

Play games directly in the app Take your retro library anywhere Browse your collection by platform Organize with collections Download games for offline play Sync saves with your RomM instance

Features

Emulation

  • ๐ŸŽฎ Play ROMs directly on your iPhone or iPad
  • ๐Ÿ•น๏ธ Native Delta emulator cores for GBA, GBC, GB, NES, SNES, N64, and NDS
  • ๐Ÿ–ฅ๏ธ Libretro-based emulation for Sega Genesis/Mega Drive, Master System, Game Gear, Saturn, Dreamcast, PlayStation, PSP, and Arcade
  • โ˜๏ธ Cloud save sync โ€” upload and download save states and save files to/from your RomM server
  • ๐ŸŽ›๏ธ Physical controller support
  • โฉ 2x fast-forward for native DeltaCore emulation from the in-game menu

Library

  • ๐Ÿ“ฑ Native SwiftUI design with dark mode support
  • ๐Ÿ–ผ๏ธ Game covers, screenshots, and full metadata from your RomM server
  • ๐Ÿ“Š Card and list view layouts
  • ๐Ÿ” Search across your entire ROM library
  • ๐Ÿ“š Browse by platform with ROM counts and platform logos
  • ๐Ÿ“ Organize games in custom collections
  • ๐Ÿ“ˆ Server statistics and platform insights
  • โš™๏ธ QR code scanner for quick server setup

Offline & Transfer

  • ๐Ÿ’พ Download ROMs for offline play
  • ๐Ÿ”„ Transfer ROMs to remote devices via SFTP
  • ๐Ÿ—‚๏ธ BIOS file management for emulator cores

Platform

  • ๐Ÿ“ฒ iPhone and iPad support

Getting Started

This repository uses git submodules for the emulator cores in Vendor/. Clone with submodules:

git clone --recurse-submodules https://github.com/ilyas-hallak/romm-ios-app.git

If you already cloned without submodules:

git submodule update --init --recursive

Then open romm/romm.xcodeproj in Xcode and build.

Building on a device

Building for the Simulator needs nothing extra. To run on a physical device you need your own Apple Developer team and a bundle identifier that is unique to you. The upstream de.ilyashallak.* identifiers are already registered to the maintainer and cannot be re-registered to your account.

The project reads those two values from a gitignored Signing.xcconfig, so you never have to edit project.pbxproj:

cp romm/Config/Signing.xcconfig.template romm/Config/Signing.xcconfig

Then edit romm/Config/Signing.xcconfig and set:

  • DEVELOPMENT_TEAM, your 10-character Team ID (Xcode > Settings > Accounts, or the Apple Developer site under Membership details)
  • ROMM_BUNDLE_ID_PREFIX, a reverse-DNS prefix only you use, e.g. com.yourname

Signing is automatic, so Xcode registers the App ID and provisioning profile the first time you build to a connected device.

The emulator core submodules

Signing.xcconfig only applies to this project's targets, not to the DeltaCore projects under Vendor/. Several of those pin their own DEVELOPMENT_TEAM, so a device build needs your team applied to them too:

  • Xcode (UI): in each Vendor/*/โ€ฆxcodeproj, select every target and set your team under Signing & Capabilities. These edits stay in the submodule working trees, don't commit them.

  • Command line: pass DEVELOPMENT_TEAM on the xcodebuild invocation. It applies to every target in the graph, submodules included, so nothing under Vendor/ needs editing:

    xcodebuild -project romm/romm.xcodeproj -scheme romm \
      -destination 'generic/platform=iOS' \
      -allowProvisioningUpdates \
      DEVELOPMENT_TEAM=YOURTEAMID \
      build
    

    Signing.xcconfig is still required, it supplies the unique app bundle identifier (ROMM_BUNDLE_ID_PREFIX) that no command-line override can set per-target.

Credits

Standing on the shoulders of giants.

This app would not be possible without the outstanding open-source emulation work of:

Contributing

  1. Follow the established Clean Architecture patterns (Domain / Data / UI layers)
  2. Maintain one ViewModel per View โ€” no sharing between views
  3. Use Cases must not call other Use Cases โ€” compose at the ViewModel level
  4. Use the existing dependency injection system
  5. Follow SwiftUI best practices
  6. All user-facing strings must be in English

License

MIT โ€” see LICENSE for details. This project is part of the RomM ecosystem.

Contributors

ilyas-hallak

245 commits

Hello-User

3 commits

NicolaFolchi

3 commits

camorobot

1 commits

ilyas-hallak/romm-ios-app

yet another iOS app for RomM

149

stars

253

commits

Swift

primary language

Sep 15, 2026

updated

README

RomM iOS App

MIT License

A native iOS companion app for RomM. Connect to your self-hosted RomM server to browse, play, and manage your retro game ROM collection directly from your iPhone or iPad.

Compatible with RomM 5.0.*

Download

TestFlight Beta

Join the beta program and help improve the app:

Join TestFlight Beta

Screenshots

Play games directly in the app Take your retro library anywhere Browse your collection by platform Organize with collections Download games for offline play Sync saves with your RomM instance

Features

Emulation

  • ๐ŸŽฎ Play ROMs directly on your iPhone or iPad
  • ๐Ÿ•น๏ธ Native Delta emulator cores for GBA, GBC, GB, NES, SNES, N64, and NDS
  • ๐Ÿ–ฅ๏ธ Libretro-based emulation for Sega Genesis/Mega Drive, Master System, Game Gear, Saturn, Dreamcast, PlayStation, PSP, and Arcade
  • โ˜๏ธ Cloud save sync โ€” upload and download save states and save files to/from your RomM server
  • ๐ŸŽ›๏ธ Physical controller support
  • โฉ 2x fast-forward for native DeltaCore emulation from the in-game menu

Library

  • ๐Ÿ“ฑ Native SwiftUI design with dark mode support
  • ๐Ÿ–ผ๏ธ Game covers, screenshots, and full metadata from your RomM server
  • ๐Ÿ“Š Card and list view layouts
  • ๐Ÿ” Search across your entire ROM library
  • ๐Ÿ“š Browse by platform with ROM counts and platform logos
  • ๐Ÿ“ Organize games in custom collections
  • ๐Ÿ“ˆ Server statistics and platform insights
  • โš™๏ธ QR code scanner for quick server setup

Offline & Transfer

  • ๐Ÿ’พ Download ROMs for offline play
  • ๐Ÿ”„ Transfer ROMs to remote devices via SFTP
  • ๐Ÿ—‚๏ธ BIOS file management for emulator cores

Platform

  • ๐Ÿ“ฒ iPhone and iPad support

Getting Started

This repository uses git submodules for the emulator cores in Vendor/. Clone with submodules:

git clone --recurse-submodules https://github.com/ilyas-hallak/romm-ios-app.git

If you already cloned without submodules:

git submodule update --init --recursive

Then open romm/romm.xcodeproj in Xcode and build.

Building on a device

Building for the Simulator needs nothing extra. To run on a physical device you need your own Apple Developer team and a bundle identifier that is unique to you. The upstream de.ilyashallak.* identifiers are already registered to the maintainer and cannot be re-registered to your account.

The project reads those two values from a gitignored Signing.xcconfig, so you never have to edit project.pbxproj:

cp romm/Config/Signing.xcconfig.template romm/Config/Signing.xcconfig

Then edit romm/Config/Signing.xcconfig and set:

  • DEVELOPMENT_TEAM, your 10-character Team ID (Xcode > Settings > Accounts, or the Apple Developer site under Membership details)
  • ROMM_BUNDLE_ID_PREFIX, a reverse-DNS prefix only you use, e.g. com.yourname

Signing is automatic, so Xcode registers the App ID and provisioning profile the first time you build to a connected device.

The emulator core submodules

Signing.xcconfig only applies to this project's targets, not to the DeltaCore projects under Vendor/. Several of those pin their own DEVELOPMENT_TEAM, so a device build needs your team applied to them too:

  • Xcode (UI): in each Vendor/*/โ€ฆxcodeproj, select every target and set your team under Signing & Capabilities. These edits stay in the submodule working trees, don't commit them.

  • Command line: pass DEVELOPMENT_TEAM on the xcodebuild invocation. It applies to every target in the graph, submodules included, so nothing under Vendor/ needs editing:

    xcodebuild -project romm/romm.xcodeproj -scheme romm \
      -destination 'generic/platform=iOS' \
      -allowProvisioningUpdates \
      DEVELOPMENT_TEAM=YOURTEAMID \
      build
    

    Signing.xcconfig is still required, it supplies the unique app bundle identifier (ROMM_BUNDLE_ID_PREFIX) that no command-line override can set per-target.

Credits

Standing on the shoulders of giants.

This app would not be possible without the outstanding open-source emulation work of:

Contributing

  1. Follow the established Clean Architecture patterns (Domain / Data / UI layers)
  2. Maintain one ViewModel per View โ€” no sharing between views
  3. Use Cases must not call other Use Cases โ€” compose at the ViewModel level
  4. Use the existing dependency injection system
  5. Follow SwiftUI best practices
  6. All user-facing strings must be in English

License

MIT โ€” see LICENSE for details. This project is part of the RomM ecosystem.

Contributors

ilyas-hallak

245 commits

Hello-User

3 commits

NicolaFolchi

3 commits

camorobot

1 commits

Languages

Swift

84.6%

C

7.8%

Objective-C

4.9%