The ios-qt6 branch contains experimental forks of mixxx and vcpkg that support compiling Mixxx and its dependencies for iOS, i.e. for arm64-ios-release. Most changes to Mixxx have been upstreamed, vcpkg upstreaming is still in progress. iOS CI passes.
Documentation and general stuff
[x] Add instructions to README.md
[x] Build dependencies and Mixxx for iOS in CI
Porting the dependencies to iOS
[x] Fix the dependencies (running scripts/install-vcpkg-deps with the arguments given in the aforementioned instructions should pass)
[x] Fix ffmpeg build by setting --disable-audiotoolbox
[x] Skip libusb and hidapi for now
[x] Add patched ports for iOS under vcpkg/overlay/ios
[x] Fix mp3lame by setting --disable-frontend (otherwise the build would error with missing curses.h headers)
[x] Disable rubberband due to licensing issues (GPL + App Store) and build issues
[x] Patch Qt as needed (it builds but hasn't been tested yet)
[x] Disable _debug suffix for libraries (not needed since we already place them in a /debug subfolder, additionally they cause the Mixxx build to fail as Qt5CoreConfig.cmake looks for unsuffixed libraries (e.g. libQt5Core.a instead of the actual libQt5Core_debug.a))
[x] Update to Qt 6
[x] Add gles3 feature to qtbase (otherwise the port is identical to upstream vcpkg)
[x] Figure out the right combination of features (Notably opengl, gles2, gles3 and sql-sqlite, but not sql-psql)
[ ] Figure out if we can link Qt and all non-permissively/non-App Store-clause-licensed libraries dynamically or ideally exclude them/make them optional (this includes Rubberband, xwax, libkeyfinder and potentially others)
For libkeyfinder it might be worth asking the rightholders nicely for a relicensing under GPL + App Store clause, given how essential the library has become
[x] Patch harfbuzz with iOS sdkroot
[x] Support building a patched version of Qt 5 too (as an alternative to Qt 6)
[ ] Build Mixxx for iOS 12
[x] Add support for targeting iOS simulator
Requires building for arm64-ios-simulator-release (instead of arm64-ios-release)
[x] Successfully load a track from within the sandbox (i.e. Mixxx's documents directory, which the user can access via the files app, e.g. to import music or to export recordings)
[x] Implement screen lock suspension for iOS
[x] Disable tool tips on iOS
[x] Default audio backend to patched PortAudio's "iOS Audio"
[x] Figure out why we still don't get any sound when using speakers (headphones work, strangely)
Solution: We needed a playback AVAudioSession
[ ] Investigate how to read files within the iOS sandbox (especially user-picked ones, e.g. via QFileChooser in MixxxMainWindow::slotFileLoadSongPlayer, which is invoked by File > Load Track to Deck ...)
Perhaps "import" files by always copying them to the sandbox/documents folder when loading them to a deck?
This would probably be required anyway to (permanently) add them to the library
[ ] Investigate how much of the macOS sandboxing logic we can reuse
Bookmarking seems to be possible, but in a slightly different fashion, see
[ ] Set dragMode to scrolling on scrollable views (library, preferences etc.)
[ ] Make preferences (and other modals such as "about"?) full-screen
Ideally, these modals should probably be a sheet-presented view controllers, but it is unclear whether Qt supports this natively
[x] Use MediaPlayer (instead of iTunesLibrary) framework to access music library on iOS
[x] Figure out how we can make the sandbox play these tracks (the same issue as for files outside the sandbox)
Solution: We copy these tracks for now
[x] Tapping track in library brings up keyboard, even if the text field seems to be non-editable, it would be nice if we could find a fix or workaround for this
Status
The
ios-qt6
branch contains experimental forks ofmixxx
andvcpkg
that support compiling Mixxx and its dependencies for iOS, i.e. forarm64-ios-release
. Most changes to Mixxx have been upstreamed, vcpkg upstreaming is still in progress. iOS CI passes.Documentation and general stuff
Porting the dependencies to iOS
scripts/install-vcpkg-deps
with the arguments given in the aforementioned instructions should pass)ffmpeg
build by setting--disable-audiotoolbox
libusb
andhidapi
for nowvcpkg/overlay/ios
mp3lame
by setting--disable-frontend
(otherwise the build would error with missingcurses.h
headers)portaudio
by patching in an experimental iOS CoreAudio backend (source)portmidi
by patching use of legacy Carbon APIs and unavailable CoreAudio APIs (e.g. by replacing the hosttime calls with the mach time APIs as suggested by this Q&A doc)rubberband
due to licensing issues (GPL + App Store) and build issues_debug
suffix for libraries (not needed since we already place them in a/debug
subfolder, additionally they cause the Mixxx build to fail asQt5CoreConfig.cmake
looks for unsuffixed libraries (e.g.libQt5Core.a
instead of the actuallibQt5Core_debug.a
))gles3
feature toqtbase
(otherwise the port is identical to upstream vcpkg)opengl
,gles2
,gles3
andsql-sqlite
, but notsql-psql
)harfbuzz
with iOS sdkrootarm64-ios-simulator-release
(instead ofarm64-ios-release
)Porting Mixxx to iOS
mixxx.xcodeproj
with thecmake
command in the READMEQIOSIntegrationPlugin
RUBBERBAND
)AVAudioSession
QFileChooser
inMixxxMainWindow::slotFileLoadSongPlayer
, which is invoked byFile > Load Track to Deck ...
)MediaPlayer
(instead ofiTunesLibrary
) framework to access music library on iOSPackaging Mixxx for iOS
qResourcePath
logic to handle iOS app bundles (which use a flatter file structure than macOS bundles)IOS
variable is not automatically set by CMake when settingCMAKE_SYSTEM_NAME
to iOSproject
call. We check the vcpkg triplet instead now and setCMAKE_SYSTEM_NAME
automatically as needed.Upstreaming the Mixxx patches
TBD:
RUBBERBAND
,HID
,BATTERY
,QTKEYCHAIN
) for iOS in upstream CMakeLists and remove them from our README (and user presets as needed)rubberband
andqtkeychain-qt6
have been fixed, so we could investigate reenabling themUpstreaming the vcpkg patches
to
microsoft/vcpkg
to
mixxxdj/vcpkg
TBD:
vcpkg.json
manifestSDKROOT
workaroundsto upstream projects
TBD:
SDKROOT
for some portsIdeas for future work