This is an ios port of the rhythm game osu!. It is written in Swift based on SpriteKit framework. It is just a hobby project for fun. So don't expect that I can make it full functional in a short time.
Updated 2019-05-15: The official osu!lazer is already playable on iOS devices.
- Scan beatmaps imported by iTunes
- Decode .osu file (partly)
- Timing with Quartz
- Render background image & Background dim
- Draw Plain HitCircle & Judge
- Draw Sliders & Judge
- Play with backgound video
- Play with StoryBoard
- Play with skin in beatmap bundle
The sketch file of the UI design is available here. The implementation is available at iosu_ui. This project also includes database and thumbnial cache implementation.
According to the licence of osu! default skin, the skin derived from osu! cannot be used here. So the skin used in this project is designed from scratch. All of the source files can be found under assets/. In the future sound effects will also be replaced in order to prevent possible violations.
- Install the latest version of XCode.
- Install CocoaPods.
- Run the following commands:
git clone https://github.com/imxieyi/iosu.git
cd iosu
pod install
- Open iosu.xcworkspace in the project directory.
- Build.
- Download Cydia Impactor.
- Download latest ipa artifact from my personal gitlab server. (Direct link to ipa file: https://git.imxieyi.com/xieyi/iosu/-/jobs/artifacts/v0.3.1/download?job=archive_project)
- Connect your iDevice and run Cydia Impactor.
- Drag .ipa file to Cydia Impactor window.
- Input your Apple ID info.
- Wait until it finishes.
Both osu and osb files should be contained in directories shown in the iTunes. Directly importing directories in Songs
on your PC (can be found in osu! installation path) should work fine.
- This project is still at super early stage, there are plenty of bugs among the whole application. So don't worry if it crashes constantly on your device. If you want to report, please attach the link to the beatmap on osu.ppy.sh while creating an issue.
- Currently there is no database, so please do not import too many beatmaps.
- It's okay to play a beatmap with too complicated storyboard as background now. However due to thread synchronization issue, unused SKNodes will not be released during gameplay. This would result in more memory usage depending on beatmap and storyboard.
The patched PlaySoundFileNamed function has some bugs that may crash the application, I'm still finding the solution.(should have been fixed in 43e862)- I have an iPhone6s and an iPad Pro 10.5 to test, so it may works well on all iDevices.
- If the framerate drops under 10, the timing will be inaccurate. So do not try to run it in the simulator. If that happens on your device, maybe you can consider update it because of low performance.
- I have modified the SpriteKitEasingSwift framework to meet the need of osu! storyboard. The modified version can also be installed by CocoaPods.
- With the help of image buffer, you can load any complicated storyboard with acceptable memory usage. But be sure to correct storyboard image paths because in Unix-like system file name is case sensitive. Also, there are still some bugs in the render and processor. But in most of the time it works well.
- StoryBoard support for Cheat Sheet is incomplete. Loading such storyboards might crash the application.
- I'm new to iOS development, Swift and SpriteKit. And I don't like to insert a lot of comments. So please tolerate my awful code.
With background image:
beatmap: fourfolium - Now Loading!!!!
With skin in beatmap bundle:
beatmap: DJ Okawari - Flower Dance
With background video:
beatmap: Hatsune Miku - Ievan Polkka
With background storyboard:
beatmap: fhana - Outside of Melancholy Yuuutsu no Mukougawa
beatmap: Tatsumi Megumi featured by Sano Hiroaki - Tsubomi (Long Version)
beatmap: Kana Nishino - Sweet Dreams (11t dnb mix)
beatmap: DM vs. POCKET - uNDeRWoRLD MoNaRCHy
- osu!
- opsu!
- osu-parser
- SpriteKitEasingSwift
- MobileVLCKit
KSYMediaPlayer_iOS(Abandoned because of compatibility issue)- SQLite.swift
- UIBezierPath-Length
- Source Han Sans
- Stack Overflow
- Apple Developer Documentation