Skip to content

Commit 2f1e2cf

Browse files
authored
Merge pull request #76 from rryam/feature/74-library-playlists-limit
Add missing Apple Music API properties to LibraryPlaylist
2 parents 949966c + 63a6889 commit 2f1e2cf

File tree

7 files changed

+301
-73
lines changed

7 files changed

+301
-73
lines changed

Musadora/Musadora CLI/main.swift

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
//
2+
// main.swift
3+
// Musadora CLI
4+
//
5+
// Created by Rudrank Riyam on 11/14/25.
6+
//
7+
8+
import Foundation
9+
import MusadoraKit
10+
11+
@preconcurrency import MusicKit
12+
13+
print("Musadora CLI - Token Information")
14+
print("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n")
15+
16+
let status = await MusicAuthorization.request()
17+
guard status == .authorized else {
18+
fputs("ERROR: Music authorization not granted\n", stderr)
19+
exit(1)
20+
}
21+
22+
print("Authorization: OK\n")
23+
24+
do {
25+
let developerToken = try await MusicDataRequest.tokenProvider.developerToken(options: .ignoreCache)
26+
print("Developer Token:")
27+
print(developerToken)
28+
print("")
29+
30+
let userToken = try await MusicDataRequest.tokenProvider.userToken(for: developerToken, options: .ignoreCache)
31+
print("User Token:")
32+
print(userToken)
33+
print("")
34+
} catch {
35+
fputs("ERROR getting tokens: \(error)\n", stderr)
36+
exit(1)
37+
}
38+

Musadora/Musadora.xcodeproj/project.pbxproj

Lines changed: 117 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -7,35 +7,49 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10-
0A4C262A2E67578E00570FA7 /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 0A4C26292E67578E00570FA7 /* README.md */; };
1110
0A834F2429B926AF0063AA6C /* MusadoraKit in Frameworks */ = {isa = PBXBuildFile; productRef = 0A834F2329B926AF0063AA6C /* MusadoraKit */; };
12-
0A8FFEFF29B9248F0029A91F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0A8FFEFE29B9248F0029A91F /* Assets.xcassets */; };
13-
0AF15F8229C4D9FE00FFEF63 /* release_notes.json in Resources */ = {isa = PBXBuildFile; fileRef = 0AF15F8129C4D9FE00FFEF63 /* release_notes.json */; };
1411
/* End PBXBuildFile section */
1512

13+
/* Begin PBXCopyFilesBuildPhase section */
14+
0A8A20762EC75B6F00D41DBC /* CopyFiles */ = {
15+
isa = PBXCopyFilesBuildPhase;
16+
buildActionMask = 2147483647;
17+
dstPath = /usr/share/man/man1/;
18+
dstSubfolderSpec = 0;
19+
files = (
20+
);
21+
runOnlyForDeploymentPostprocessing = 1;
22+
};
23+
/* End PBXCopyFilesBuildPhase section */
24+
1625
/* Begin PBXFileReference section */
17-
0A4C26292E67578E00570FA7 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
18-
0A834F2529B928510063AA6C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; };
26+
0A8A20782EC75B6F00D41DBC /* Musadora CLI */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "Musadora CLI"; sourceTree = BUILT_PRODUCTS_DIR; };
1927
0A8FFEF729B9248F0029A91F /* Musadora.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Musadora.app; sourceTree = BUILT_PRODUCTS_DIR; };
20-
0A8FFEFE29B9248F0029A91F /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
21-
0AF15F8129C4D9FE00FFEF63 /* release_notes.json */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path = release_notes.json; sourceTree = SOURCE_ROOT; };
2228
/* End PBXFileReference section */
2329

30+
/* Begin PBXFileSystemSynchronizedBuildFileExceptionSet section */
31+
0A8A20732EC75B5500D41DBC /* PBXFileSystemSynchronizedBuildFileExceptionSet */ = {
32+
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
33+
membershipExceptions = (
34+
Info.plist,
35+
);
36+
target = 0A8FFEF629B9248E0029A91F /* Musadora */;
37+
};
38+
/* End PBXFileSystemSynchronizedBuildFileExceptionSet section */
39+
2440
/* Begin PBXFileSystemSynchronizedRootGroup section */
25-
0A4C25A12E67576900570FA7 /* Library */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Library; sourceTree = "<group>"; };
26-
0A4C25A92E67576D00570FA7 /* History */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = History; sourceTree = "<group>"; };
27-
0A4C25B12E67576D00570FA7 /* Catalog */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Catalog; sourceTree = "<group>"; };
28-
0A4C25B62E67577400570FA7 /* Onboarding */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Onboarding; sourceTree = "<group>"; };
29-
0A4C25BE2E67577400570FA7 /* Charts */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Charts; sourceTree = "<group>"; };
30-
0A4C25C72E67577400570FA7 /* Main */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Main; sourceTree = "<group>"; };
31-
0A4C25D52E67577400570FA7 /* Music Items */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Music Items"; sourceTree = "<group>"; };
32-
0A4C25DE2E67577800570FA7 /* Settings */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Settings; sourceTree = "<group>"; };
33-
0A4C25E22E67577A00570FA7 /* Recommendations */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Recommendations; sourceTree = "<group>"; };
34-
0A4C25E62E67577E00570FA7 /* Preview Content */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Preview Content"; sourceTree = "<group>"; };
35-
0A4C29AE2E675F9700570FA7 /* Shared */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Shared; sourceTree = "<group>"; };
41+
0A8A20502EC75B5500D41DBC /* Musadora */ = {isa = PBXFileSystemSynchronizedRootGroup; exceptions = (0A8A20732EC75B5500D41DBC /* PBXFileSystemSynchronizedBuildFileExceptionSet */, ); explicitFileTypes = {}; explicitFolders = (); path = Musadora; sourceTree = "<group>"; };
42+
0A8A20792EC75B6F00D41DBC /* Musadora CLI */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = "Musadora CLI"; sourceTree = "<group>"; };
3643
/* End PBXFileSystemSynchronizedRootGroup section */
3744

3845
/* Begin PBXFrameworksBuildPhase section */
46+
0A8A20752EC75B6F00D41DBC /* Frameworks */ = {
47+
isa = PBXFrameworksBuildPhase;
48+
buildActionMask = 2147483647;
49+
files = (
50+
);
51+
runOnlyForDeploymentPostprocessing = 0;
52+
};
3953
0A8FFEF429B9248E0029A91F /* Frameworks */ = {
4054
isa = PBXFrameworksBuildPhase;
4155
buildActionMask = 2147483647;
@@ -50,7 +64,8 @@
5064
0A8FFEEE29B9248E0029A91F = {
5165
isa = PBXGroup;
5266
children = (
53-
0A8FFEF929B9248F0029A91F /* Musadora */,
67+
0A8A20502EC75B5500D41DBC /* Musadora */,
68+
0A8A20792EC75B6F00D41DBC /* Musadora CLI */,
5469
0A8FFEF829B9248F0029A91F /* Products */,
5570
);
5671
sourceTree = "<group>";
@@ -59,35 +74,37 @@
5974
isa = PBXGroup;
6075
children = (
6176
0A8FFEF729B9248F0029A91F /* Musadora.app */,
77+
0A8A20782EC75B6F00D41DBC /* Musadora CLI */,
6278
);
6379
name = Products;
6480
sourceTree = "<group>";
6581
};
66-
0A8FFEF929B9248F0029A91F /* Musadora */ = {
67-
isa = PBXGroup;
68-
children = (
69-
0A4C29AE2E675F9700570FA7 /* Shared */,
70-
0A4C26292E67578E00570FA7 /* README.md */,
71-
0A4C25DE2E67577800570FA7 /* Settings */,
72-
0AF15F8129C4D9FE00FFEF63 /* release_notes.json */,
73-
0A4C25C72E67577400570FA7 /* Main */,
74-
0A4C25D52E67577400570FA7 /* Music Items */,
75-
0A4C25B62E67577400570FA7 /* Onboarding */,
76-
0A4C25BE2E67577400570FA7 /* Charts */,
77-
0A4C25E22E67577A00570FA7 /* Recommendations */,
78-
0A4C25A92E67576D00570FA7 /* History */,
79-
0A4C25B12E67576D00570FA7 /* Catalog */,
80-
0A4C25A12E67576900570FA7 /* Library */,
81-
0A834F2529B928510063AA6C /* Info.plist */,
82-
0A8FFEFE29B9248F0029A91F /* Assets.xcassets */,
83-
0A4C25E62E67577E00570FA7 /* Preview Content */,
84-
);
85-
path = Musadora;
86-
sourceTree = "<group>";
87-
};
8882
/* End PBXGroup section */
8983

9084
/* Begin PBXNativeTarget section */
85+
0A8A20772EC75B6F00D41DBC /* Musadora CLI */ = {
86+
isa = PBXNativeTarget;
87+
buildConfigurationList = 0A8A207C2EC75B6F00D41DBC /* Build configuration list for PBXNativeTarget "Musadora CLI" */;
88+
buildPhases = (
89+
0A8A20742EC75B6F00D41DBC /* Sources */,
90+
0A8A20752EC75B6F00D41DBC /* Frameworks */,
91+
0A8A20762EC75B6F00D41DBC /* CopyFiles */,
92+
);
93+
buildRules = (
94+
);
95+
dependencies = (
96+
);
97+
fileSystemSynchronizedGroups = (
98+
0A8A20792EC75B6F00D41DBC /* Musadora CLI */,
99+
);
100+
name = "Musadora CLI";
101+
packageProductDependencies = (
102+
0A834F2329B926AF0063AA6C /* MusadoraKit */,
103+
);
104+
productName = "Musadora CLI";
105+
productReference = 0A8A20782EC75B6F00D41DBC /* Musadora CLI */;
106+
productType = "com.apple.product-type.tool";
107+
};
91108
0A8FFEF629B9248E0029A91F /* Musadora */ = {
92109
isa = PBXNativeTarget;
93110
buildConfigurationList = 0A8FFF0529B9248F0029A91F /* Build configuration list for PBXNativeTarget "Musadora" */;
@@ -101,17 +118,7 @@
101118
dependencies = (
102119
);
103120
fileSystemSynchronizedGroups = (
104-
0A4C25A12E67576900570FA7 /* Library */,
105-
0A4C25A92E67576D00570FA7 /* History */,
106-
0A4C25B12E67576D00570FA7 /* Catalog */,
107-
0A4C25B62E67577400570FA7 /* Onboarding */,
108-
0A4C25BE2E67577400570FA7 /* Charts */,
109-
0A4C25C72E67577400570FA7 /* Main */,
110-
0A4C25D52E67577400570FA7 /* Music Items */,
111-
0A4C25DE2E67577800570FA7 /* Settings */,
112-
0A4C25E22E67577A00570FA7 /* Recommendations */,
113-
0A4C25E62E67577E00570FA7 /* Preview Content */,
114-
0A4C29AE2E675F9700570FA7 /* Shared */,
121+
0A8A20502EC75B5500D41DBC /* Musadora */,
115122
);
116123
name = Musadora;
117124
packageProductDependencies = (
@@ -128,9 +135,12 @@
128135
isa = PBXProject;
129136
attributes = {
130137
BuildIndependentTargetsInParallel = 1;
131-
LastSwiftUpdateCheck = 1420;
138+
LastSwiftUpdateCheck = 2610;
132139
LastUpgradeCheck = 2610;
133140
TargetAttributes = {
141+
0A8A20772EC75B6F00D41DBC = {
142+
CreatedOnToolsVersion = 26.1;
143+
};
134144
0A8FFEF629B9248E0029A91F = {
135145
CreatedOnToolsVersion = 14.2;
136146
};
@@ -153,6 +163,7 @@
153163
projectRoot = "";
154164
targets = (
155165
0A8FFEF629B9248E0029A91F /* Musadora */,
166+
0A8A20772EC75B6F00D41DBC /* Musadora CLI */,
156167
);
157168
};
158169
/* End PBXProject section */
@@ -162,15 +173,19 @@
162173
isa = PBXResourcesBuildPhase;
163174
buildActionMask = 2147483647;
164175
files = (
165-
0AF15F8229C4D9FE00FFEF63 /* release_notes.json in Resources */,
166-
0A4C262A2E67578E00570FA7 /* README.md in Resources */,
167-
0A8FFEFF29B9248F0029A91F /* Assets.xcassets in Resources */,
168176
);
169177
runOnlyForDeploymentPostprocessing = 0;
170178
};
171179
/* End PBXResourcesBuildPhase section */
172180

173181
/* Begin PBXSourcesBuildPhase section */
182+
0A8A20742EC75B6F00D41DBC /* Sources */ = {
183+
isa = PBXSourcesBuildPhase;
184+
buildActionMask = 2147483647;
185+
files = (
186+
);
187+
runOnlyForDeploymentPostprocessing = 0;
188+
};
174189
0A8FFEF329B9248E0029A91F /* Sources */ = {
175190
isa = PBXSourcesBuildPhase;
176191
buildActionMask = 2147483647;
@@ -181,6 +196,43 @@
181196
/* End PBXSourcesBuildPhase section */
182197

183198
/* Begin XCBuildConfiguration section */
199+
0A8A207D2EC75B6F00D41DBC /* Debug */ = {
200+
isa = XCBuildConfiguration;
201+
buildSettings = {
202+
CODE_SIGN_STYLE = Automatic;
203+
DEVELOPMENT_TEAM = YQZQG7N4WG;
204+
ENABLE_HARDENED_RUNTIME = YES;
205+
GCC_C_LANGUAGE_STANDARD = gnu17;
206+
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
207+
MACOSX_DEPLOYMENT_TARGET = 14.0;
208+
PRODUCT_BUNDLE_IDENTIFIER = com.rudrankriyam.musadora;
209+
PRODUCT_NAME = "$(TARGET_NAME)";
210+
SDKROOT = macosx;
211+
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)";
212+
SWIFT_APPROACHABLE_CONCURRENCY = YES;
213+
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
214+
SWIFT_VERSION = 5.0;
215+
};
216+
name = Debug;
217+
};
218+
0A8A207E2EC75B6F00D41DBC /* Release */ = {
219+
isa = XCBuildConfiguration;
220+
buildSettings = {
221+
CODE_SIGN_STYLE = Automatic;
222+
DEVELOPMENT_TEAM = YQZQG7N4WG;
223+
ENABLE_HARDENED_RUNTIME = YES;
224+
GCC_C_LANGUAGE_STANDARD = gnu17;
225+
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
226+
MACOSX_DEPLOYMENT_TARGET = 14.0;
227+
PRODUCT_BUNDLE_IDENTIFIER = com.rudrankriyam.musadora;
228+
PRODUCT_NAME = "$(TARGET_NAME)";
229+
SDKROOT = macosx;
230+
SWIFT_APPROACHABLE_CONCURRENCY = YES;
231+
SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES;
232+
SWIFT_VERSION = 5.0;
233+
};
234+
name = Release;
235+
};
184236
0A8FFF0329B9248F0029A91F /* Debug */ = {
185237
isa = XCBuildConfiguration;
186238
buildSettings = {
@@ -386,6 +438,15 @@
386438
/* End XCBuildConfiguration section */
387439

388440
/* Begin XCConfigurationList section */
441+
0A8A207C2EC75B6F00D41DBC /* Build configuration list for PBXNativeTarget "Musadora CLI" */ = {
442+
isa = XCConfigurationList;
443+
buildConfigurations = (
444+
0A8A207D2EC75B6F00D41DBC /* Debug */,
445+
0A8A207E2EC75B6F00D41DBC /* Release */,
446+
);
447+
defaultConfigurationIsVisible = 0;
448+
defaultConfigurationName = Release;
449+
};
389450
0A8FFEF229B9248E0029A91F /* Build configuration list for PBXProject "Musadora" */ = {
390451
isa = XCConfigurationList;
391452
buildConfigurations = (

0 commit comments

Comments
 (0)