Version 1.3 für App Store

This commit is contained in:
2026-04-08 17:47:47 +02:00
parent d7e7bef83f
commit ec1ffcb0b1
4 changed files with 90 additions and 27 deletions
@@ -274,8 +274,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -310,8 +310,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight";
INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown";
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "subsonic_94696.svg",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}
@@ -0,0 +1,24 @@
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" version="1.1" viewBox="0 0 32 32">
<defs>
<linearGradient id="linearGradient4207" x1="2" x2="8" y1="1038.1" y2="1038.1" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-opacity="0"/>
<stop offset="1"/>
</linearGradient>
</defs>
<g transform="translate(0 -1020.4)">
<g transform="matrix(.66667 0 0 .8 -1.3333 215.87)">
<rect fill="#41b941" width="3" height="10" x="14" y="1014.4" rx="1.406" ry="1.747"/>
<path fill="#fff" opacity=".2" d="m15.406 10c-0.779 0-1.406 0.778-1.406 1.746v1c0-0.968 0.627-1.746 1.406-1.746h0.1875c0.779 0 1.406 0.778 1.406 1.746v-1c0-0.968-0.627-1.746-1.406-1.746h-0.1875z" transform="translate(0 1004.4)"/>
</g>
<path fill="#ffca1d" d="m14.6 1027.4c-0.7756 0-1.6 0.6175-1.6 1.3846v1.6168c-2.5977 0.8209-4.3 3.114-5 4.4986-0.7-1.3846-5-2-5-2v3.5h-1v4h1v3c-0.027344 0 4.3-0.6154 5-2 0.7 1.3846 4.5 4 10.1 4s11.9-3.0272 11.9-7.6154c-0.0061-3.2607-2.7438-6.0433-7-7.3859v-1.6141c0-0.7671-0.6244-1.3846-1.4-1.3846z"/>
<circle opacity=".2" cx="18" cy="1038.4" r="2"/>
<circle fill="#fff" cx="18" cy="1037.4" r="2"/>
<circle opacity=".2" cx="23" cy="1038.4" r="2"/>
<circle fill="#fff" cx="23" cy="1037.4" r="2"/>
<circle opacity=".2" cx="13" cy="1038.4" r="2"/>
<circle fill="#fff" cx="13" cy="1037.4" r="2"/>
<path fill="#fff" opacity=".2" d="m14.6 7c-0.776 0-1.6 0.6177-1.6 1.3848v1c0-0.7671 0.824-1.3848 1.6-1.3848h7c0.775 0 1.4 0.6177 1.4 1.3848v-1c0-0.7671-0.625-1.3848-1.4-1.3848zm8.4 2.998v1c3.9894 1.2584 6.6445 3.7828 6.9668 6.7793 0.01-0.131 0.033-0.259 0.033-0.392-0.006-3.261-2.744-6.044-7-7.387zm-10 0.00391c-2.598 0.821-4.3 3.113-5 4.498-0.7-1.385-5-2-5-2v1s4.3 0.6154 5 2c0.7-1.3846 2.4023-3.6771 5-4.498z" transform="translate(0 1020.4)"/>
<path opacity=".2" d="m29.967 1038.1c-0.35239 4.3638-6.4312 7.2207-11.867 7.2207-5.6 0-9.3996-2.6154-10.1-4-0.7 1.3846-5.0273 2-5 2v1c-0.027344 0 4.3-0.6154 5-2 0.7 1.3846 4.4996 4 10.1 4 5.6 0 11.9-3.027 11.9-7.6152-0.000381-0.2038-0.01178-0.4057-0.0332-0.6055z"/>
<path fill="url(#linearGradient4207)" opacity=".1" d="m8 1034.9c-0.7-1.3846-5-2-5-2v3.5h-1v4h1v3c-0.027344 0 4.3-0.6154 5-2z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

+29 -5
View File
@@ -48,12 +48,21 @@ struct ProviderBadge: View {
var body: some View {
HStack(spacing: 4) {
ForEach(providers, id: \.self) { provider in
Image(systemName: provider.icon)
.font(.system(size: 9, weight: .bold))
.foregroundStyle(.white)
.frame(width: 20, height: 20)
if let assetName = provider.logoAssetName {
Image(assetName)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 30, height: 30)
.background(.black.opacity(0.55))
.clipShape(Circle())
} else {
Image(systemName: provider.icon)
.font(.system(size: 14, weight: .bold))
.foregroundStyle(.white)
.frame(width: 30, height: 30)
.background(.black.opacity(0.55))
.clipShape(Circle())
}
}
}
}
@@ -76,8 +85,18 @@ enum MusicProvider: Hashable {
case filesystem
case jellyfin
case dlna
case ardAudiothek
/// SF Symbol name for this provider.
/// Asset catalog image name for providers that have a custom logo.
/// Returns `nil` when the provider uses an SF Symbol instead.
var logoAssetName: String? {
switch self {
case .subsonic: return "SubsonicLogo"
default: return nil
}
}
/// SF Symbol name for this provider (used when `logoAssetName` is nil).
var icon: String {
switch self {
case .library: return "building.columns.fill"
@@ -94,6 +113,7 @@ enum MusicProvider: Hashable {
case .filesystem: return "folder.fill"
case .jellyfin: return "server.rack"
case .dlna: return "wifi"
case .ardAudiothek: return "antenna.radiowaves.left.and.right"
}
}
@@ -115,6 +135,8 @@ enum MusicProvider: Hashable {
if scheme.hasPrefix("filesystem") { return .filesystem }
if scheme.hasPrefix("jellyfin") { return .jellyfin }
if scheme.hasPrefix("dlna") { return .dlna }
if scheme.hasPrefix("ard_audiothek") { return .ardAudiothek }
if scheme.hasPrefix("ard") { return .ardAudiothek }
return nil
}
@@ -136,6 +158,8 @@ enum MusicProvider: Hashable {
if k.hasPrefix("filesystem") { return .filesystem }
if k.hasPrefix("jellyfin") { return .jellyfin }
if k.hasPrefix("dlna") { return .dlna }
if k.hasPrefix("ard_audiothek") { return .ardAudiothek }
if k.hasPrefix("ard") { return .ardAudiothek }
// Image-only metadata providers not a music source
if k == "lastfm" || k == "musicbrainz" || k == "fanarttv" { return nil }