Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
48 commits
Select commit Hold shift + click to select a range
37d37a2
ci: trigger
faultables Mar 6, 2026
e7b73c6
ci: trigger
faultables Mar 6, 2026
1a87251
ci: trigger
faultables Mar 15, 2026
f8b7fed
Add transparent stream pre cache
docmeth02 Mar 7, 2026
be8e563
Add Cached playlist to downloads downloads view (works when offline)
docmeth02 Mar 7, 2026
75949d0
rework caching PR. Cache stream audio, library metadata, and cover ar…
docmeth02 Mar 24, 2026
2b50e17
ci: trigger
faultables Mar 6, 2026
b594303
ci: trigger
faultables Mar 6, 2026
957e7e4
ci: trigger
faultables Mar 15, 2026
2812834
feat: add liked songs view and song star/unstar support for iOS
docmeth02 Mar 15, 2026
96c63c9
fix: evenly space bottom bar icons and refresh liked songs on star ch…
docmeth02 Mar 15, 2026
b93521d
Add support for navidrome liked/faved songs
docmeth02 Mar 19, 2026
09e6b57
Fix carplay hear button on radio playback. Fix ListenBrainz/LastFM ac…
docmeth02 Mar 24, 2026
c326f32
Added German translation
Mar 20, 2026
34736e0
added Carplay translations
Mar 20, 2026
55d417d
docs(l10n): Add Norwegian Bokmål translations
SindreKjelsrud Mar 26, 2026
98a8159
Added IPadOS support
Mar 29, 2026
63ef2ef
chore: update [skip ci]
faultables Apr 11, 2026
2f9ba93
docs(l10n): Fix some translations
SindreKjelsrud Apr 18, 2026
706bd91
feat: add Liked Songs to CarPlay Library tab
docmeth02 Apr 12, 2026
69630c2
feat: add cached songs to CarPlay Downloads tab
docmeth02 Apr 12, 2026
5fbb10d
feat: use fullScreenCover for login on iPad and center empty states
faultables Apr 21, 2026
6a218cf
chore: bump version to 2.3
faultables Apr 21, 2026
01ed2fc
fix: align Home header with iPad content container
faultables Apr 25, 2026
69b6c60
feat: add iPad sidebar Library submenus with quick-link toggle
faultables Apr 25, 2026
a0e079a
fix: iPad floating player placement
faultables Apr 25, 2026
a24b39d
fix: restore fullscreen player swipe-down behavior
faultables Apr 25, 2026
b254e75
fix: polish fullscreen player control spacing
faultables Apr 25, 2026
faea4e6
feat: some adjustment
faultables Apr 25, 2026
f7ef4a9
fix: refine iPad login close button and portrait queue sheet
faultables Apr 25, 2026
eac8118
fix: support Mac Catalyst runtime
faultables Apr 26, 2026
8ddeb44
fix: preserve artist navigation environment
faultables Apr 26, 2026
58b2b5d
chore: add quick link localization keys
faultables Apr 26, 2026
6753e30
fix: restore full-screen slide-off offset on iOS after Catalyst change
faultables Apr 26, 2026
577718a
fix: center floating player when sidebar is collapsed on iPadOS 18+
faultables Apr 26, 2026
811d1f7
chore: update fastlane thing
faultables Apr 26, 2026
5034a68
chore: catalyst thing
faultables Apr 26, 2026
43d350e
chore: fastlane again
faultables Apr 26, 2026
488bb32
chore: fastlane again
faultables Apr 26, 2026
85f42b4
chore: fastlane again
faultables Apr 26, 2026
a702619
chore: test update fastlane
faultables Apr 26, 2026
9696636
chore: let's test the mac app!!1!
faultables Apr 26, 2026
ce3b4d2
feat: icons
faultables May 17, 2026
6addbe1
fix: icons
faultables May 17, 2026
e4eeef1
fix: icons
faultables May 17, 2026
acf145f
fix: still icons stuff
faultables May 17, 2026
f1d91c6
feat: create icons from Icon Composer
faultables May 17, 2026
c156975
Merge develop into release/2.3
faultables May 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions flo.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@
C4B232EF2F44809F006A5044 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C4E8D95F2B763BAB00C2353E /* Assets.xcassets */; };
C4B7E6A42F3C1001001D9A01 /* PrivacyInfo.xcprivacy in Resources */ = {isa = PBXBuildFile; fileRef = C4B7E6A32F3C0FFF001D9A01 /* PrivacyInfo.xcprivacy */; };
C4CACHE012D7B0000003B9C4F /* StreamCacheManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4CACHE002D7B0000003B9C4F /* StreamCacheManager.swift */; };
C4CBBA742FBA223C00F0DE75 /* floIcon.icon in Resources */ = {isa = PBXBuildFile; fileRef = C4CBBA732FBA223C00F0DE75 /* floIcon.icon */; };
C4D7F84D2C7F2AE900165EFD /* flo.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = C4D7F84B2C7F2AE900165EFD /* flo.xcdatamodeld */; };
C4D7F84F2C7F2C5D00165EFD /* PlaybackService.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4D7F84E2C7F2C5D00165EFD /* PlaybackService.swift */; };
C4DE89182C2FFBC900E078CC /* CoreDataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = C4DE89172C2FFBC900E078CC /* CoreDataManager.swift */; };
Expand Down Expand Up @@ -252,6 +253,7 @@
C4A4BF3C2C1455A100363290 /* FloatingPlayerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FloatingPlayerView.swift; sourceTree = "<group>"; };
C4B7E6A32F3C0FFF001D9A01 /* PrivacyInfo.xcprivacy */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = PrivacyInfo.xcprivacy; sourceTree = "<group>"; };
C4CACHE002D7B0000003B9C4F /* StreamCacheManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StreamCacheManager.swift; sourceTree = "<group>"; };
C4CBBA732FBA223C00F0DE75 /* floIcon.icon */ = {isa = PBXFileReference; lastKnownFileType = folder.iconcomposer.icon; path = floIcon.icon; sourceTree = "<group>"; };
C4D7F84C2C7F2AE900165EFD /* flo.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = flo.xcdatamodel; sourceTree = "<group>"; };
C4D7F84E2C7F2C5D00165EFD /* PlaybackService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlaybackService.swift; sourceTree = "<group>"; };
C4DE89172C2FFBC900E078CC /* CoreDataManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreDataManager.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -390,6 +392,7 @@
C4289F4E2C12553800C3A4FD /* Resources */ = {
isa = PBXGroup;
children = (
C4CBBA732FBA223C00F0DE75 /* floIcon.icon */,
C4B7E6A32F3C0FFF001D9A01 /* PrivacyInfo.xcprivacy */,
C4E958972CA033BC00BBF394 /* Localizable.xcstrings */,
C4E8D95F2B763BAB00C2353E /* Assets.xcassets */,
Expand Down Expand Up @@ -643,6 +646,7 @@
C4B7E6A42F3C1001001D9A01 /* PrivacyInfo.xcprivacy in Resources */,
C4E8D9632B763BAB00C2353E /* Preview Assets.xcassets in Resources */,
C4E8D9602B763BAB00C2353E /* Assets.xcassets in Resources */,
C4CBBA742FBA223C00F0DE75 /* floIcon.icon in Resources */,
C4E958982CA033BC00BBF394 /* Localizable.xcstrings in Resources */,
C415F55F2C11A34C00E3E1D2 /* PlusJakartaSans-VariableFont_wght.ttf in Resources */,
);
Expand Down Expand Up @@ -995,14 +999,14 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = AppIconAlt1;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_APPICON_NAME = floIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = flo/flo.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 212;
CURRENT_PROJECT_VERSION = 300;
DEVELOPMENT_ASSET_PATHS = "\"flo/Resources/Preview Content\"";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8BJ4LW5J8P;
Expand Down Expand Up @@ -1040,7 +1044,7 @@
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match Development com.penerbangwalet.flo";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match Development com.penerbangwalet.flo catalyst";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
Expand All @@ -1054,14 +1058,14 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_ALTERNATE_APPICON_NAMES = AppIconAlt1;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
ASSETCATALOG_COMPILER_APPICON_NAME = floIcon;
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
ASSETCATALOG_COMPILER_INCLUDE_ALL_APPICON_ASSETS = YES;
"CODE_SIGN_ENTITLEMENTS[sdk=iphoneos*]" = flo/flo.entitlements;
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
"CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Distribution";
CODE_SIGN_STYLE = Manual;
CURRENT_PROJECT_VERSION = 212;
CURRENT_PROJECT_VERSION = 300;
DEVELOPMENT_ASSET_PATHS = "\"flo/Resources/Preview Content\"";
DEVELOPMENT_TEAM = "";
"DEVELOPMENT_TEAM[sdk=iphoneos*]" = 8BJ4LW5J8P;
Expand Down Expand Up @@ -1100,7 +1104,7 @@
PROVISIONING_PROFILE_SPECIFIER = "";
"PROVISIONING_PROFILE_SPECIFIER[sdk=iphoneos*]" = "match AppStore com.penerbangwalet.flo 1773593177";
"PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "match AppStore com.penerbangwalet.flo catalyst";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator macosx";
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
SUPPORTS_MACCATALYST = YES;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
Expand Down
2 changes: 2 additions & 0 deletions flo/Info.plist
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleIconFile</key>
<string>floIcon</string>
<key>UIAppFonts</key>
<array>
<string>PlusJakartaSans-VariableFont_wght.ttf</string>
Expand Down
14 changes: 1 addition & 13 deletions flo/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"images" : [
{
"filename" : "flo.png",
"filename" : "flo 1.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
Expand All @@ -18,18 +18,6 @@
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
"appearance" : "luminosity",
"value" : "clear"
}
],
"filename" : "flo-clear-light.png",
"idiom" : "universal",
"platform" : "ios",
"size" : "1024x1024"
},
{
"appearances" : [
{
Expand Down
Binary file not shown.
100 changes: 3 additions & 97 deletions flo/Resources/Assets.xcassets/AppIconWatch.appiconset/Contents.json
Original file line number Diff line number Diff line change
@@ -1,104 +1,10 @@
{
"images" : [
{
"filename" : "watch-marketing-1024.png",
"idiom" : "watch-marketing",
"scale" : "1x",
"filename" : "flo.png",
"idiom" : "universal",
"platform" : "watchos",
"size" : "1024x1024"
},
{
"filename" : "watch-notification-38mm@2x.png",
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "24x24",
"subtype" : "38mm"
},
{
"filename" : "watch-notification-42mm@2x.png",
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
"size" : "27.5x27.5",
"subtype" : "42mm"
},
{
"filename" : "watch-companion@2x.png",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "2x",
"size" : "29x29"
},
{
"filename" : "watch-companion@3x.png",
"idiom" : "watch",
"role" : "companionSettings",
"scale" : "3x",
"size" : "29x29"
},
{
"filename" : "watch-home-38mm@2x.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "40x40",
"subtype" : "38mm"
},
{
"filename" : "watch-home-40mm@2x.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "44x44",
"subtype" : "40mm"
},
{
"filename" : "watch-home-44mm@2x.png",
"idiom" : "watch",
"role" : "appLauncher",
"scale" : "2x",
"size" : "50x50",
"subtype" : "44mm"
},
{
"filename" : "watch-longlook-42mm@2x.png",
"idiom" : "watch",
"role" : "longLook",
"scale" : "2x",
"size" : "44x44",
"subtype" : "42mm"
},
{
"filename" : "watch-longlook-44mm@2x.png",
"idiom" : "watch",
"role" : "longLook",
"scale" : "2x",
"size" : "50x50",
"subtype" : "44mm"
},
{
"filename" : "watch-shortlook-38mm@2x.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "86x86",
"subtype" : "38mm"
},
{
"filename" : "watch-shortlook-42mm@2x.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "98x98",
"subtype" : "42mm"
},
{
"filename" : "watch-shortlook-44mm@2x.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
"size" : "108x108",
"subtype" : "44mm"
}
],
"info" : {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
15 changes: 15 additions & 0 deletions flo/Resources/floIcon.icon/Assets/a.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions flo/Resources/floIcon.icon/Assets/b.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
105 changes: 105 additions & 0 deletions flo/Resources/floIcon.icon/icon.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"fill-specializations" : [
{
"value" : {
"automatic-gradient" : "srgb:0.99029,1.00000,1.00000,1.00000"
}
},
{
"appearance" : "dark",
"value" : "automatic"
}
],
"groups" : [
{
"blur-material-specializations" : [
{
"appearance" : "tinted",
"value" : null
}
],
"layers" : [
{
"blend-mode-specializations" : [
{
"appearance" : "tinted",
"value" : "normal"
}
],
"fill-specializations" : [
{
"appearance" : "tinted",
"value" : "automatic"
}
],
"glass-specializations" : [
{
"value" : true
},
{
"appearance" : "tinted",
"value" : true
}
],
"hidden" : false,
"image-name" : "a.svg",
"name" : "a",
"opacity-specializations" : [
{
"appearance" : "tinted",
"value" : 0
}
]
},
{
"glass-specializations" : [
{
"appearance" : "tinted",
"value" : true
}
],
"image-name" : "b.svg",
"name" : "b",
"opacity" : 1
}
],
"lighting-specializations" : [
{
"appearance" : "tinted",
"value" : "individual"
}
],
"opacity-specializations" : [
{
"appearance" : "tinted",
"value" : 1
}
],
"shadow" : {
"kind" : "neutral",
"opacity" : 0.5
},
"specular-specializations" : [
{
"appearance" : "tinted",
"value" : true
}
],
"translucency-specializations" : [
{
"appearance" : "tinted",
"value" : {
"enabled" : false,
"value" : 0.5
}
}
]
}
],
"supported-platforms" : {
"circles" : [
"watchOS"
],
"squares" : "shared"
}
}
Loading