Futify Remix: a native Spotify client for Ubuntu Touch
-
Download here:
https://open-store.io/app/futify.brennoflavio
Somewhere last year, Spotify changed some of its API deprecating some fields and redirects, breaking Futify. Around 3 months ago I submited some patches to keep the app alive, but it is not merged / released yet.
This fork applies those patches so people can continue using the app while upstream is not updated.
Contributions are welcome to make it build with noble framework, currently this app uses a umantained qml-go binding, that only allow building for focal. Luckly the focal build works on noble without issues.
Give it a try and leave feedback!
-
@brenno.almeida tried logging in. The app crashes after completing oauth flow and crashes on open every time afterwards. Oddly, there's no exception in the logs?
-
@projectmoon something similar happened to me when I forgot to disable app suspension on UT tweak tool. Could that be your case? If so, can you clear cache, data, disable suspension and try again?
-
@brenno.almeida same result. Browser shows error empty response. And then connection refused on refresh (because app crashed).
-
@brenno.almeida same here
-
@AmauryDBZ any logs?
-
@brenno.almeida sure.
I've registered in web browser where I got an error. I cannot explain why I was redirected to a 127.0.0.1 page.
I don't know if it granted access but when I try to launch futify app it crashes instantly with theses logs.
(app unconfined of course)[07/05/2026 09:58] Env $XDG_CACHE_HOME set use it = /home/phablet/.cache/futify.brennoflavio [07/05/2026 09:58] Env $XDG_CONFIG_HOME no set use default = /home/phablet/.config/futify.brennoflavio/ [07/05/2026 09:58] library "eglSubDriverAndroid.so" not found [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: Creating a QMirClientScreen now [07/05/2026 09:58] before create context [07/05/2026 09:58] before set spotSession [07/05/2026 09:58] before create window [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: error calling result "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.857\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"com.lomiri.libertine.Service.Operations\" member=\"list\" error name=\"(unset)\" requested_reply=\"0\" destination=\"com.lomiri.libertine.Service\" (uid=32011 pid=4872 comm=\"/usr/bin/python3 /usr/bin/libertined\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: error calling result "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.857\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"com.lomiri.libertine.Service.OperationsMonitor\" member=\"running\" error name=\"(unset)\" requested_reply=\"0\" destination=\"com.lomiri.libertine.Service\" (uid=32011 pid=4872 comm=\"/usr/bin/python3 /usr/bin/libertined\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: lastError - no arguments? [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: error calling result "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.857\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"com.lomiri.libertine.Service.OperationsMonitor\" member=\"last_error\" error name=\"(unset)\" requested_reply=\"0\" destination=\"com.lomiri.libertine.Service\" (uid=32011 pid=4872 comm=\"/usr/bin/python3 /usr/bin/libertined\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: lastError - no arguments? [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: error calling result "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.857\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"com.lomiri.libertine.Service.OperationsMonitor\" member=\"result\" error name=\"(unset)\" requested_reply=\"0\" destination=\"com.lomiri.libertine.Service\" (uid=32011 pid=4872 comm=\"/usr/bin/python3 /usr/bin/libertined\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: lastError - no arguments? [07/05/2026 09:58] 2026/05/07 09:58:19 .:0: virtual QMediaService* AalServicePlugin::create(const QString&) "org.qt-project.qt.mediaplayer" [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: Using Hybris video sink [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual QMediaPlayer::State AalMediaPlayerControl::state() const [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual QMediaPlayer::MediaStatus AalMediaPlayerControl::mediaStatus() const [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: propsReply "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.727\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"org.freedesktop.DBus.Properties\" member=\"GetAll\" error name=\"(unset)\" requested_reply=\"0\" destination=\"org.freedesktop.NetworkManager\" (uid=0 pid=2004 comm=\"/usr/sbin/NetworkManager --no-daemon\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: nmReply "An AppArmor policy prevents this sender from sending this message to this recipient; type=\"method_call\", sender=\":1.727\" (uid=32011 pid=631010 comm=\"futify\" label=\"futify.brennoflavio_futify_1.6.3 (enforce)\") interface=\"org.freedesktop.NetworkManager\" member=\"GetDevices\" error name=\"(unset)\" requested_reply=\"0\" destination=\"org.freedesktop.NetworkManager\" (uid=0 pid=2004 comm=\"/usr/sbin/NetworkManager --no-daemon\" label=\"unconfined\")" [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: "Object path cannot be empty" [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual void AalMediaPlayerControl::stop() [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: void AalMediaPlaylistProvider::disconnect_signals() [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: void AalMediaPlaylistProvider::connect_signals() [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: Track list doesn't exist so can't clear it! [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual void AalMediaPlaylistControl::setPlaybackMode(QMediaPlaylist::PlaybackMode) [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: PlaybackMode: Sequential [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual void AalMediaPlaylistControl::setCurrentIndex(int) [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: position: -1 , mediaCount: 0 [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual void AalMediaPlayerControl::setMedia(const QMediaContent&, QIODevice*) [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: setMedia() media: QUrl("") [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: setMedia() headers empty: true [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: Same media as current [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: virtual void AalMediaPlayerControl::play() [07/05/2026 09:58] 2026/05/07 09:58:20 .:0: void AalMediaPlayerService::play() [07/05/2026 09:58] 2026/05/07 09:58:20 Player.qml:30: player state changed 1 [07/05/2026 09:58] 2026/05/07 09:58:20 PlayerView.qml:18: file:////opt/click.ubuntu.com/futify.brennoflavio/1.6.3/qml/components/PlayerView.qml:18:5: QML QQuickItem: Detected anchors on an item that is managed by a layout. This is undefined behavior; use Layout.alignment instead. [07/05/2026 09:58] 2026/05/07 09:58:20 Settings.qml:15: OnComplete 945 [07/05/2026 09:58] 2026/05/07 09:58:20 Main.qml.:365: OnComplete [07/05/2026 09:58] Playlists don't exsit UserPlaylists [07/05/2026 09:58] 2026/05/07 09:58:21 couldn't get UserTracks: spotify: couldn't decode error: (119) [The user is not registered for this application. Please check your settings on https://developer.spotify.com/dashboard.]Then I got to this web page developer.spotify.com and I was well connected
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login