@wwdrew/expo-spotify-sdk 0.4.3 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/LICENSE +21 -3
  2. package/README.md +345 -96
  3. package/android/build.gradle +28 -22
  4. package/android/consumer-rules.pro +8 -0
  5. package/android/src/main/AndroidManifest.xml +3 -0
  6. package/android/src/main/java/expo/modules/spotifysdk/ExpoSpotifySDKModule.kt +130 -145
  7. package/android/src/main/java/expo/modules/spotifysdk/SpotifyAuthCoordinator.kt +36 -0
  8. package/android/src/main/java/expo/modules/spotifysdk/SpotifyAuthorizationContract.kt +45 -0
  9. package/android/src/main/java/expo/modules/spotifysdk/SpotifyConfig.kt +80 -0
  10. package/android/src/main/java/expo/modules/spotifysdk/SpotifyErrors.kt +34 -0
  11. package/android/src/main/java/expo/modules/spotifysdk/SpotifyTokenSwapClient.kt +154 -0
  12. package/build/ExpoSpotifySDK.types.d.ts +76 -1
  13. package/build/ExpoSpotifySDK.types.d.ts.map +1 -1
  14. package/build/ExpoSpotifySDK.types.js +12 -1
  15. package/build/ExpoSpotifySDK.types.js.map +1 -1
  16. package/build/ExpoSpotifySDKModule.web.d.ts +7 -3
  17. package/build/ExpoSpotifySDKModule.web.d.ts.map +1 -1
  18. package/build/ExpoSpotifySDKModule.web.js +17 -7
  19. package/build/ExpoSpotifySDKModule.web.js.map +1 -1
  20. package/build/index.d.ts +39 -2
  21. package/build/index.d.ts.map +1 -1
  22. package/build/index.js +117 -4
  23. package/build/index.js.map +1 -1
  24. package/expo-module.config.json +1 -1
  25. package/ios/ExpoSpotifyAppDelegate.swift +14 -0
  26. package/ios/ExpoSpotifyConfiguration.swift +33 -15
  27. package/ios/ExpoSpotifySDK.podspec +2 -4
  28. package/ios/ExpoSpotifySDKModule.swift +96 -26
  29. package/ios/SPTScopeSerializer.swift +40 -39
  30. package/ios/SpotifyAuthCoordinator.swift +133 -0
  31. package/ios/SpotifySDK/SpotifyiOS.xcframework/Info.plist +5 -9
  32. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h +43 -41
  33. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteCommon.h +9 -8
  34. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteConnectivityAPI.h +4 -3
  35. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentAPI.h +8 -6
  36. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h +3 -3
  37. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteImageAPI.h +3 -3
  38. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemotePlayerAPI.h +12 -7
  39. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteUserAPI.h +4 -5
  40. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTConfiguration.h +5 -5
  41. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTError.h +7 -9
  42. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTMacros.h +59 -23
  43. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTScope.h +67 -63
  44. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTSession.h +2 -1
  45. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTSessionManager.h +59 -19
  46. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyAppRemote.h +11 -15
  47. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyiOS.h +1 -1
  48. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Info.plist +0 -0
  49. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Modules/module.modulemap +0 -1
  50. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/SpotifyiOS +0 -0
  51. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemote.h +43 -41
  52. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteCommon.h +9 -8
  53. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteConnectivityAPI.h +4 -3
  54. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentAPI.h +8 -6
  55. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h +3 -3
  56. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteImageAPI.h +3 -3
  57. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemotePlayerAPI.h +12 -7
  58. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteUserAPI.h +4 -5
  59. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTConfiguration.h +5 -5
  60. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTError.h +7 -9
  61. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTMacros.h +59 -23
  62. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTScope.h +67 -63
  63. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTSession.h +2 -1
  64. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTSessionManager.h +59 -19
  65. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyAppRemote.h +11 -15
  66. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyiOS.h +1 -1
  67. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Info.plist +0 -0
  68. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Modules/module.modulemap +0 -1
  69. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/SpotifyiOS +0 -0
  70. package/ios/SpotifyTokenRefreshClient.swift +118 -0
  71. package/package.json +12 -11
  72. package/plugin/build/android/withSpotifyAndroidAppBuildGradle.js +15 -10
  73. package/plugin/build/ios/withSpotifyConfigValues.js +12 -7
  74. package/plugin/build/ios/withSpotifyURLScheme.d.ts +1 -1
  75. package/plugin/build/ios/withSpotifyURLScheme.js +9 -8
  76. package/plugin/build/types.d.ts +35 -0
  77. package/plugin/build/types.js +0 -19
  78. package/ios/ExpoSpotifyAuthDelegate.swift +0 -13
  79. package/ios/ExpoSpotifySessionManager+SessionManagerDelegate.swift +0 -16
  80. package/ios/ExpoSpotifySessionManager.swift +0 -90
  81. package/ios/SpotifySDK/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/_CodeSignature/CodeResources +0 -454
@@ -1,18 +1,19 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.withSpotifyURLScheme = void 0;
4
- const config_plugins_1 = require("expo/config-plugins");
4
+ const config_plugins_1 = require("@expo/config-plugins");
5
5
  const withSpotifyURLScheme = (config, { scheme }) => {
6
6
  return (0, config_plugins_1.withInfoPlist)(config, (config) => {
7
7
  const bundleId = config.ios?.bundleIdentifier;
8
- const urlType = {
9
- CFBundleURLName: bundleId,
10
- CFBundleURLSchemes: [scheme],
11
- };
12
- if (!config.modResults.CFBundleURLTypes) {
13
- config.modResults.CFBundleURLTypes = [];
8
+ const urlTypes = config.modResults.CFBundleURLTypes ?? [];
9
+ const alreadyDeclared = urlTypes.some((entry) => entry.CFBundleURLSchemes?.includes(scheme));
10
+ if (!alreadyDeclared) {
11
+ urlTypes.push({
12
+ CFBundleURLName: bundleId ?? "",
13
+ CFBundleURLSchemes: [scheme],
14
+ });
15
+ config.modResults.CFBundleURLTypes = urlTypes;
14
16
  }
15
- config.modResults.CFBundleURLTypes.push(urlType);
16
17
  return config;
17
18
  });
18
19
  };
@@ -1,6 +1,41 @@
1
+ /**
2
+ * Spotify scopes that are valid in Spotify's iOS, Android and Web auth APIs.
3
+ *
4
+ * See: https://developer.spotify.com/documentation/web-api/concepts/scopes
5
+ */
1
6
  export type SpotifyScopes = "ugc-image-upload" | "user-read-playback-state" | "user-modify-playback-state" | "user-read-currently-playing" | "app-remote-control" | "streaming" | "playlist-read-private" | "playlist-read-collaborative" | "playlist-modify-private" | "playlist-modify-public" | "user-follow-modify" | "user-follow-read" | "user-top-read" | "user-read-recently-played" | "user-library-modify" | "user-library-read" | "user-read-email" | "user-read-private";
7
+ /**
8
+ * Configuration accepted by the `@wwdrew/expo-spotify-sdk` Expo config plugin.
9
+ *
10
+ * @example
11
+ * // app.config.ts
12
+ * export default {
13
+ * plugins: [
14
+ * ["@wwdrew/expo-spotify-sdk", {
15
+ * clientID: "<spotify-client-id>",
16
+ * scheme: "myapp",
17
+ * host: "spotify-auth",
18
+ * redirectPathPattern: "/.*"
19
+ * }]
20
+ * ]
21
+ * }
22
+ */
2
23
  export interface SpotifyConfig {
24
+ /** Spotify Client ID for your application. */
3
25
  clientID: string;
26
+ /** Path component of the redirect URI (e.g. `"spotify-auth"`). */
4
27
  host: string;
28
+ /**
29
+ * URL scheme registered for your app, used as the redirect URI scheme
30
+ * (e.g. `"myapp"`). Must match your Expo app's `scheme`.
31
+ */
5
32
  scheme: string;
33
+ /**
34
+ * Path pattern Spotify will accept on the redirect URI. Required by the
35
+ * Spotify Android Auth SDK from version 3.0.0 onwards. Defaults to `"/.*"`
36
+ * which matches any path (preserving pre-3.0.0 SDK behaviour).
37
+ *
38
+ * See: https://developer.android.com/guide/topics/manifest/data-element#path
39
+ */
40
+ redirectPathPattern?: string;
6
41
  }
@@ -1,21 +1,2 @@
1
1
  "use strict";
2
- /*
3
-
4
- List of Scopes: https://developer.spotify.com/documentation/web-api/concepts/scopes
5
-
6
- Note: these scopes are not currently available in the iOS SDK:
7
-
8
- - user-read-playback-position
9
- - user-soa-link
10
- - user-soa-unlink
11
- - user-manage-entitlements
12
- - user-manage-partner
13
- - user-create-partner
14
-
15
- Also, although these scopes exist in the iOS SDK, they are not valid:
16
-
17
- - user-read-birthdate
18
- - openid
19
-
20
- */
21
2
  Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,13 +0,0 @@
1
- import ExpoModulesCore
2
- import SpotifyiOS
3
-
4
- public class ExpoSpotifyAuthDelegate: ExpoAppDelegateSubscriber {
5
- let sessionManager = ExpoSpotifySessionManager.shared
6
-
7
- public func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
8
- if let canHandleURL = sessionManager.sessionManager?.application(app, open: url, options: options) {
9
- return canHandleURL
10
- }
11
- return false
12
- }
13
- }
@@ -1,16 +0,0 @@
1
- import Foundation
2
- import SpotifyiOS
3
-
4
- extension ExpoSpotifySessionManager: SPTSessionManagerDelegate {
5
- public func sessionManager(manager _: SPTSessionManager, didInitiate session: SPTSession) {
6
- authPromiseSeal?.fulfill(session)
7
- }
8
-
9
- public func sessionManager(manager _: SPTSessionManager, didFailWith error: Error) {
10
- authPromiseSeal?.reject(error)
11
- }
12
-
13
- public func sessionManager(manager _: SPTSessionManager, didRenew session: SPTSession) {
14
- authPromiseSeal?.fulfill(session)
15
- }
16
- }
@@ -1,90 +0,0 @@
1
- import ExpoModulesCore
2
- import SpotifyiOS
3
- import PromiseKit
4
-
5
- enum SessionManagerError: Error {
6
- case notInitialized
7
- case invalidConfiguration
8
- }
9
-
10
- final class ExpoSpotifySessionManager: NSObject {
11
- weak var module: ExpoSpotifySDKModule?
12
- var authPromiseSeal: Resolver<SPTSession>?
13
-
14
- static let shared = ExpoSpotifySessionManager()
15
-
16
- private var expoSpotifyConfiguration: ExpoSpotifyConfiguration? {
17
- guard let expoSpotifySdkDict = Bundle.main.object(forInfoDictionaryKey: "ExpoSpotifySDK") as? [String: String],
18
- let clientID = expoSpotifySdkDict["clientID"],
19
- let host = expoSpotifySdkDict["host"],
20
- let scheme = expoSpotifySdkDict["scheme"] else
21
- {
22
- return nil
23
- }
24
-
25
- return ExpoSpotifyConfiguration(clientID: clientID, host: host, scheme: scheme)
26
- }
27
-
28
- lazy var configuration: SPTConfiguration? = {
29
- guard let clientID = expoSpotifyConfiguration?.clientID,
30
- let redirectURL = expoSpotifyConfiguration?.redirectURL else {
31
- NSLog("Invalid Spotify configuration")
32
- return nil
33
- }
34
-
35
- return SPTConfiguration(clientID: clientID, redirectURL: redirectURL)
36
- }()
37
-
38
- lazy var sessionManager: SPTSessionManager? = {
39
- guard let configuration = configuration else {
40
- return nil
41
- }
42
-
43
- return SPTSessionManager(configuration: configuration, delegate: self)
44
- }()
45
-
46
-
47
- func authenticate(scopes: [String], tokenSwapURL: String?, tokenRefreshURL: String?) -> PromiseKit.Promise<SPTSession> {
48
- return Promise { seal in
49
- guard let clientID = self.expoSpotifyConfiguration?.clientID,
50
- let redirectURL = self.expoSpotifyConfiguration?.redirectURL else {
51
- NSLog("Invalid Spotify configuration")
52
- seal.reject(SessionManagerError.invalidConfiguration)
53
- return
54
- }
55
-
56
- let configuration = SPTConfiguration(clientID: clientID, redirectURL: redirectURL)
57
-
58
- if (tokenSwapURL != nil) {
59
- configuration.tokenSwapURL = URL(string: tokenSwapURL ?? "")
60
- }
61
-
62
- if (tokenRefreshURL != nil) {
63
- configuration.tokenRefreshURL = URL(string: tokenRefreshURL ?? "")
64
- }
65
-
66
- self.authPromiseSeal = seal
67
- self.configuration = configuration
68
- self.sessionManager = SPTSessionManager(configuration: configuration, delegate: self)
69
-
70
- DispatchQueue.main.sync {
71
- sessionManager?.initiateSession(with: SPTScopeSerializer.deserializeScopes(scopes), options: .default, campaign: nil)
72
- }
73
- }
74
- }
75
-
76
- func spotifyAppInstalled() -> Bool {
77
- guard let sessionManager = sessionManager else {
78
- NSLog("SPTSessionManager not initialized")
79
- return false
80
- }
81
-
82
- var isInstalled = false
83
-
84
- DispatchQueue.main.sync {
85
- isInstalled = sessionManager.isSpotifyAppInstalled
86
- }
87
-
88
- return isInstalled
89
- }
90
- }
@@ -1,454 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
- <plist version="1.0">
4
- <dict>
5
- <key>files</key>
6
- <dict>
7
- <key>Headers/SPTAppRemote.h</key>
8
- <data>
9
- vp2fDLrEgvwm5wd1GwLK2CnY1/4=
10
- </data>
11
- <key>Headers/SPTAppRemoteAlbum.h</key>
12
- <data>
13
- Lu2h8RV/1rCYVe0UeVYTpq08R0s=
14
- </data>
15
- <key>Headers/SPTAppRemoteArtist.h</key>
16
- <data>
17
- tE8Iok89gLPlWD3mhRcBWnvJ7LM=
18
- </data>
19
- <key>Headers/SPTAppRemoteCommon.h</key>
20
- <data>
21
- CpelKULwWd0nTTZbrWggK9Wh1Sk=
22
- </data>
23
- <key>Headers/SPTAppRemoteConnectionParams.h</key>
24
- <data>
25
- 5Q+ZskgYeMEl9/QUrJEGrIOt/qU=
26
- </data>
27
- <key>Headers/SPTAppRemoteConnectivityAPI.h</key>
28
- <data>
29
- 1IsWgCd35d9eLZ1bLK9rcc42SC4=
30
- </data>
31
- <key>Headers/SPTAppRemoteConnectivityState.h</key>
32
- <data>
33
- gQ/++ZcqYbuCiOwa5pfKqlY081s=
34
- </data>
35
- <key>Headers/SPTAppRemoteContentAPI.h</key>
36
- <data>
37
- 0CSzqvLvOMUxpLRCSBx47RDBMdA=
38
- </data>
39
- <key>Headers/SPTAppRemoteContentItem.h</key>
40
- <data>
41
- hO4Xt+59R4BoPfF0y7mIMcQTTiY=
42
- </data>
43
- <key>Headers/SPTAppRemoteCrossfadeState.h</key>
44
- <data>
45
- USFdXS57TktpjTBwfq4MRMR5AR8=
46
- </data>
47
- <key>Headers/SPTAppRemoteImageAPI.h</key>
48
- <data>
49
- cFwXJG6kY/Wp9abR7/JSlGRjVhU=
50
- </data>
51
- <key>Headers/SPTAppRemoteImageRepresentable.h</key>
52
- <data>
53
- ciJ5/qk+pvsaWmK/Htwzo8VWV+I=
54
- </data>
55
- <key>Headers/SPTAppRemoteLibraryState.h</key>
56
- <data>
57
- SVMsqEYwTZpjyW7aoWdcj/WlP7k=
58
- </data>
59
- <key>Headers/SPTAppRemotePlaybackOptions.h</key>
60
- <data>
61
- pvw2bdL4fv6RTSBuMCc9K5QevCQ=
62
- </data>
63
- <key>Headers/SPTAppRemotePlaybackRestrictions.h</key>
64
- <data>
65
- ALUn1+dXGFf0AEY4mWOSFz4F3qg=
66
- </data>
67
- <key>Headers/SPTAppRemotePlayerAPI.h</key>
68
- <data>
69
- krhVrXqBo4Nh4YXRuHZURfKclEE=
70
- </data>
71
- <key>Headers/SPTAppRemotePlayerState.h</key>
72
- <data>
73
- 0nUxiikB1mLHRqFJodmtSGL1hqo=
74
- </data>
75
- <key>Headers/SPTAppRemotePodcastPlaybackSpeed.h</key>
76
- <data>
77
- buVPJyc1tr0zVzlF8BxtP1fmG2s=
78
- </data>
79
- <key>Headers/SPTAppRemoteTrack.h</key>
80
- <data>
81
- v7ZLVkQtBEpkm+4SivDvn3tYr0M=
82
- </data>
83
- <key>Headers/SPTAppRemoteUserAPI.h</key>
84
- <data>
85
- jqgSBg6Bc1Aae/ON6m2ZsusMyoY=
86
- </data>
87
- <key>Headers/SPTAppRemoteUserCapabilities.h</key>
88
- <data>
89
- On4cqNDucPiWZnxsw2L7e02TifQ=
90
- </data>
91
- <key>Headers/SPTConfiguration.h</key>
92
- <data>
93
- wInZ+pQ74rpgg+DSyN9GdZEoRVI=
94
- </data>
95
- <key>Headers/SPTError.h</key>
96
- <data>
97
- Kj+zm7PGIYwZLO3nL5NfqmfXVXk=
98
- </data>
99
- <key>Headers/SPTLogin.h</key>
100
- <data>
101
- ZPUkIqDFb0qI+2kxt9cwkiviDko=
102
- </data>
103
- <key>Headers/SPTMacros.h</key>
104
- <data>
105
- 2idMsqzDSas1N9J6xTuIf5w7ozI=
106
- </data>
107
- <key>Headers/SPTScope.h</key>
108
- <data>
109
- F575KcNSsah0efQcJ9NxqhMj1XU=
110
- </data>
111
- <key>Headers/SPTSession.h</key>
112
- <data>
113
- tlKyXr4cYHsmCVT1Pirrn7YD35M=
114
- </data>
115
- <key>Headers/SPTSessionManager.h</key>
116
- <data>
117
- SBxEZidPSxu0kqTbIjqSsm5a77Y=
118
- </data>
119
- <key>Headers/SpotifyAppRemote.h</key>
120
- <data>
121
- 1Cw+jZPqfjJ5sc6yW7xoPHNN2fU=
122
- </data>
123
- <key>Headers/SpotifyiOS.h</key>
124
- <data>
125
- q2AWpJkisBaRyAAIh23bnigAQec=
126
- </data>
127
- <key>Info.plist</key>
128
- <data>
129
- dIQEPuwCF05rSz5+JYQt/ZYEQ/8=
130
- </data>
131
- <key>Modules/module.modulemap</key>
132
- <data>
133
- bSv5rrubzka9LTf5wONuMfVl89g=
134
- </data>
135
- <key>PrivacyInfo.xcprivacy</key>
136
- <data>
137
- AL1dh5ctObXBjoBiabSJ86M3HQs=
138
- </data>
139
- </dict>
140
- <key>files2</key>
141
- <dict>
142
- <key>Headers/SPTAppRemote.h</key>
143
- <dict>
144
- <key>hash2</key>
145
- <data>
146
- LqO/oRsmWu5uFGJuYm2xmaj7Lq4bdmYhyYqD/nVFR8w=
147
- </data>
148
- </dict>
149
- <key>Headers/SPTAppRemoteAlbum.h</key>
150
- <dict>
151
- <key>hash2</key>
152
- <data>
153
- juYHeLMlaqhRmfOQgyPv3+mqe19WB9c/yN9YhZmYkuw=
154
- </data>
155
- </dict>
156
- <key>Headers/SPTAppRemoteArtist.h</key>
157
- <dict>
158
- <key>hash2</key>
159
- <data>
160
- 16uyxiFbm57Zbm6EvDLKut7wUBQYMY0gqsco8+e1EUQ=
161
- </data>
162
- </dict>
163
- <key>Headers/SPTAppRemoteCommon.h</key>
164
- <dict>
165
- <key>hash2</key>
166
- <data>
167
- w2tXhJ6V84gaIx/oufHMM0aVRj6s5J1qhoHN/N8dwKA=
168
- </data>
169
- </dict>
170
- <key>Headers/SPTAppRemoteConnectionParams.h</key>
171
- <dict>
172
- <key>hash2</key>
173
- <data>
174
- YBy/6s0WAEfEy7DbEx+Y7Emavnp8+95MrmRfai1kCXI=
175
- </data>
176
- </dict>
177
- <key>Headers/SPTAppRemoteConnectivityAPI.h</key>
178
- <dict>
179
- <key>hash2</key>
180
- <data>
181
- y39A3+0t/j/EkXSsm0S/dJ/bbq6oPB+x7VzRh9UPF6I=
182
- </data>
183
- </dict>
184
- <key>Headers/SPTAppRemoteConnectivityState.h</key>
185
- <dict>
186
- <key>hash2</key>
187
- <data>
188
- OXTYAMLmKRT8pEPD3x5G+Srjfc6genLNyv7/+LONxZE=
189
- </data>
190
- </dict>
191
- <key>Headers/SPTAppRemoteContentAPI.h</key>
192
- <dict>
193
- <key>hash2</key>
194
- <data>
195
- wUxkL7K8laoKaNERxEMy7g1idgkQHHEcXkWDTd502Lc=
196
- </data>
197
- </dict>
198
- <key>Headers/SPTAppRemoteContentItem.h</key>
199
- <dict>
200
- <key>hash2</key>
201
- <data>
202
- OVONqE0kPMPEPtBmg6qBJyk13EX7AS+Gty4eabVgX10=
203
- </data>
204
- </dict>
205
- <key>Headers/SPTAppRemoteCrossfadeState.h</key>
206
- <dict>
207
- <key>hash2</key>
208
- <data>
209
- 06hbkMdjdn6+wjqoIYXh27mnu6W2fKZ6Q0LPUQ8I85M=
210
- </data>
211
- </dict>
212
- <key>Headers/SPTAppRemoteImageAPI.h</key>
213
- <dict>
214
- <key>hash2</key>
215
- <data>
216
- IZe/KdziuyH++/XzVhual9PbJGOmoSITmoGzKUDXxm0=
217
- </data>
218
- </dict>
219
- <key>Headers/SPTAppRemoteImageRepresentable.h</key>
220
- <dict>
221
- <key>hash2</key>
222
- <data>
223
- gZBSnduQFKgPAyxGlhOITe/t2W4V3Wbn8s4rwLOfz+E=
224
- </data>
225
- </dict>
226
- <key>Headers/SPTAppRemoteLibraryState.h</key>
227
- <dict>
228
- <key>hash2</key>
229
- <data>
230
- /eJQTzpaVEJiOoqG2rKbd+0WCitm5v/ii0bcBbF+bN8=
231
- </data>
232
- </dict>
233
- <key>Headers/SPTAppRemotePlaybackOptions.h</key>
234
- <dict>
235
- <key>hash2</key>
236
- <data>
237
- 1G7XYL6zsUzdDiLHAk90M4xKRAsCcnG0anx7hJtBOIw=
238
- </data>
239
- </dict>
240
- <key>Headers/SPTAppRemotePlaybackRestrictions.h</key>
241
- <dict>
242
- <key>hash2</key>
243
- <data>
244
- +N64MGaUhioHAEuekcSrvVl1FcxznUei5Yq1/KkNei0=
245
- </data>
246
- </dict>
247
- <key>Headers/SPTAppRemotePlayerAPI.h</key>
248
- <dict>
249
- <key>hash2</key>
250
- <data>
251
- 6z0uDE9BpPOZKQnKlWPNWCwR/SI0sNAdsE9bBd8vBPM=
252
- </data>
253
- </dict>
254
- <key>Headers/SPTAppRemotePlayerState.h</key>
255
- <dict>
256
- <key>hash2</key>
257
- <data>
258
- 7Ll+4R7t6Q6NmK8hPnM9+eTrmWR1giwbO0tl3gNveGg=
259
- </data>
260
- </dict>
261
- <key>Headers/SPTAppRemotePodcastPlaybackSpeed.h</key>
262
- <dict>
263
- <key>hash2</key>
264
- <data>
265
- K6cJayK1RuCic1Fs7eLWuw6H0MhhoRWO7Qfvn4NOW0s=
266
- </data>
267
- </dict>
268
- <key>Headers/SPTAppRemoteTrack.h</key>
269
- <dict>
270
- <key>hash2</key>
271
- <data>
272
- z1NcXcgGzKWhIOZevAQkV2xci5z/j6p8DOz2fc8daAQ=
273
- </data>
274
- </dict>
275
- <key>Headers/SPTAppRemoteUserAPI.h</key>
276
- <dict>
277
- <key>hash2</key>
278
- <data>
279
- TwgrVtdlg5ymXlTu1AUGCYsgADjaiPCfAw3xtP4Ni+0=
280
- </data>
281
- </dict>
282
- <key>Headers/SPTAppRemoteUserCapabilities.h</key>
283
- <dict>
284
- <key>hash2</key>
285
- <data>
286
- rgzoWbjiSQUKhTH4hzYJo1V4oOZ4xFWukaED0hRL7yw=
287
- </data>
288
- </dict>
289
- <key>Headers/SPTConfiguration.h</key>
290
- <dict>
291
- <key>hash2</key>
292
- <data>
293
- KOEVP54qMgj9xnvGAjhJOZfDI84RSGqCmPCUA7D5qXs=
294
- </data>
295
- </dict>
296
- <key>Headers/SPTError.h</key>
297
- <dict>
298
- <key>hash2</key>
299
- <data>
300
- I3Wuh5U8eLBeuTGWV/yJYUs5Atyxua9PVcNY/2cngUw=
301
- </data>
302
- </dict>
303
- <key>Headers/SPTLogin.h</key>
304
- <dict>
305
- <key>hash2</key>
306
- <data>
307
- 3ztxaTf7CakFIb3Taz03z0g6SIig46Typzij8SFOjhQ=
308
- </data>
309
- </dict>
310
- <key>Headers/SPTMacros.h</key>
311
- <dict>
312
- <key>hash2</key>
313
- <data>
314
- UnnsQX3ImXUW0a1tx8DJP31c400JMOqw3gBvpITN3ZQ=
315
- </data>
316
- </dict>
317
- <key>Headers/SPTScope.h</key>
318
- <dict>
319
- <key>hash2</key>
320
- <data>
321
- oZRtWZZrHNdvliwGwMDUAH/E2Vm6ndbJY/bjqznGmMk=
322
- </data>
323
- </dict>
324
- <key>Headers/SPTSession.h</key>
325
- <dict>
326
- <key>hash2</key>
327
- <data>
328
- vBWbY6+HvUhHlV9tJR+cTDCIm7PX7qYms/CZ4o6rdE8=
329
- </data>
330
- </dict>
331
- <key>Headers/SPTSessionManager.h</key>
332
- <dict>
333
- <key>hash2</key>
334
- <data>
335
- Wldpc0wHvSO51aH3GNEzkjoNiJ6dahRIY18k3tOBxbY=
336
- </data>
337
- </dict>
338
- <key>Headers/SpotifyAppRemote.h</key>
339
- <dict>
340
- <key>hash2</key>
341
- <data>
342
- 0ObwzhpBLFLDyQYujNSwdCRrHo9QoTRQWSOlQ82MHyM=
343
- </data>
344
- </dict>
345
- <key>Headers/SpotifyiOS.h</key>
346
- <dict>
347
- <key>hash2</key>
348
- <data>
349
- w/SJykKvp2r09Ybp14YnSuITltaCZXKnBTWeQ1NILHM=
350
- </data>
351
- </dict>
352
- <key>Modules/module.modulemap</key>
353
- <dict>
354
- <key>hash2</key>
355
- <data>
356
- vR9YKCxR0961pUp2+RjzaFT70qVubKGYzMnmFbHJRXg=
357
- </data>
358
- </dict>
359
- <key>PrivacyInfo.xcprivacy</key>
360
- <dict>
361
- <key>hash2</key>
362
- <data>
363
- WpuPwM3bECAbtHzCgEs/AExyUUdmItJb/E61TtRuEIQ=
364
- </data>
365
- </dict>
366
- </dict>
367
- <key>rules</key>
368
- <dict>
369
- <key>^.*</key>
370
- <true/>
371
- <key>^.*\.lproj/</key>
372
- <dict>
373
- <key>optional</key>
374
- <true/>
375
- <key>weight</key>
376
- <real>1000</real>
377
- </dict>
378
- <key>^.*\.lproj/locversion.plist$</key>
379
- <dict>
380
- <key>omit</key>
381
- <true/>
382
- <key>weight</key>
383
- <real>1100</real>
384
- </dict>
385
- <key>^Base\.lproj/</key>
386
- <dict>
387
- <key>weight</key>
388
- <real>1010</real>
389
- </dict>
390
- <key>^version.plist$</key>
391
- <true/>
392
- </dict>
393
- <key>rules2</key>
394
- <dict>
395
- <key>.*\.dSYM($|/)</key>
396
- <dict>
397
- <key>weight</key>
398
- <real>11</real>
399
- </dict>
400
- <key>^(.*/)?\.DS_Store$</key>
401
- <dict>
402
- <key>omit</key>
403
- <true/>
404
- <key>weight</key>
405
- <real>2000</real>
406
- </dict>
407
- <key>^.*</key>
408
- <true/>
409
- <key>^.*\.lproj/</key>
410
- <dict>
411
- <key>optional</key>
412
- <true/>
413
- <key>weight</key>
414
- <real>1000</real>
415
- </dict>
416
- <key>^.*\.lproj/locversion.plist$</key>
417
- <dict>
418
- <key>omit</key>
419
- <true/>
420
- <key>weight</key>
421
- <real>1100</real>
422
- </dict>
423
- <key>^Base\.lproj/</key>
424
- <dict>
425
- <key>weight</key>
426
- <real>1010</real>
427
- </dict>
428
- <key>^Info\.plist$</key>
429
- <dict>
430
- <key>omit</key>
431
- <true/>
432
- <key>weight</key>
433
- <real>20</real>
434
- </dict>
435
- <key>^PkgInfo$</key>
436
- <dict>
437
- <key>omit</key>
438
- <true/>
439
- <key>weight</key>
440
- <real>20</real>
441
- </dict>
442
- <key>^embedded\.provisionprofile$</key>
443
- <dict>
444
- <key>weight</key>
445
- <real>20</real>
446
- </dict>
447
- <key>^version\.plist$</key>
448
- <dict>
449
- <key>weight</key>
450
- <real>20</real>
451
- </dict>
452
- </dict>
453
- </dict>
454
- </plist>