diff --git a/CHANGELOG.md b/CHANGELOG.md index 41ed00b..6b7efa4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## Spotify iOS SDK v2.0.0 + +What's New: +- Added a completionHandler to authorizeAndPlayURI API +- Support for pinned items in Your Library +- Fix crash NSRangeException -[NSConcreteMutableData replaceBytesInRange:withBytes:length:]: +- Fix umbrela header warnings in SpotifyiOS.xcframework +- Bumped the min deployment target version to iOS 12.0 + ## Spotify iOS SDK v1.2.5 What's New: diff --git a/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/project.pbxproj b/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/project.pbxproj index 88b1859..a39df09 100644 --- a/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/project.pbxproj +++ b/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/project.pbxproj @@ -19,7 +19,6 @@ F4F973F51CAD60320036411D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F4F973F31CAD60320036411D /* Main.storyboard */; }; F4F973F71CAD60320036411D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F4F973F61CAD60320036411D /* Assets.xcassets */; }; F4F973FA1CAD60320036411D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = F4F973F81CAD60320036411D /* LaunchScreen.storyboard */; }; - F4F974051CAD60C60036411D /* host.entitlements in Resources */ = {isa = PBXBuildFile; fileRef = F4F974041CAD60C60036411D /* host.entitlements */; }; F6EB42E11D2BB01100F57322 /* ContentItemCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6EB42E01D2BB01100F57322 /* ContentItemCell.swift */; }; F6EB42E31D2BB0D800F57322 /* ContentCollectionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6EB42E21D2BB0D800F57322 /* ContentCollectionViewController.swift */; }; /* End PBXBuildFile section */ @@ -52,7 +51,6 @@ F4F973F61CAD60320036411D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; F4F973F91CAD60320036411D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; F4F973FB1CAD60320036411D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; - F4F974041CAD60C60036411D /* host.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = host.entitlements; sourceTree = "<group>"; }; F4F974081CAD62D40036411D /* NowPlayingView-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "NowPlayingView-Bridging-Header.h"; sourceTree = "<group>"; }; F6EB42E01D2BB01100F57322 /* ContentItemCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentItemCell.swift; sourceTree = "<group>"; }; F6EB42E21D2BB0D800F57322 /* ContentCollectionViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ContentCollectionViewController.swift; sourceTree = "<group>"; }; @@ -100,7 +98,6 @@ F4F973F31CAD60320036411D /* Main.storyboard */, F4F973F81CAD60320036411D /* LaunchScreen.storyboard */, F4F973FB1CAD60320036411D /* Info.plist */, - F4F974041CAD60C60036411D /* host.entitlements */, F4F974081CAD62D40036411D /* NowPlayingView-Bridging-Header.h */, 99A0FFE31D38F9B600A90453 /* PlaybackButtonGraphics.swift */, 998FF9BD1D3E54AC003E339B /* ConnectionStatusIndicatorView.swift */, @@ -144,8 +141,9 @@ F4F973E41CAD60320036411D /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0720; - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = Spotify; TargetAttributes = { F4F973EB1CAD60320036411D = { @@ -187,7 +185,6 @@ buildActionMask = 2147483647; files = ( F4F973FA1CAD60320036411D /* LaunchScreen.storyboard in Resources */, - F4F974051CAD60C60036411D /* host.entitlements in Resources */, F4F973F71CAD60320036411D /* Assets.xcassets in Resources */, F4F973F51CAD60320036411D /* Main.storyboard in Resources */, ); @@ -238,6 +235,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -257,6 +255,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -269,6 +268,7 @@ ENABLE_BITCODE = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = ../..; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; @@ -297,6 +297,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; @@ -316,6 +317,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -328,6 +330,7 @@ ENABLE_BITCODE = NO; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = ../..; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; diff --git a/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/xcshareddata/xcschemes/Demo Projects - NowPlayingView.xcscheme b/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/xcshareddata/xcschemes/Demo Projects - NowPlayingView.xcscheme index 1a9b917..69c70f8 100644 --- a/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/xcshareddata/xcschemes/Demo Projects - NowPlayingView.xcscheme +++ b/DemoProjects/NowPlayingView/NowPlayingView.xcodeproj/xcshareddata/xcschemes/Demo Projects - NowPlayingView.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "1020" + LastUpgradeVersion = "1510" version = "1.3"> <BuildAction parallelizeBuildables = "YES" @@ -27,8 +27,6 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> - <Testables> - </Testables> <MacroExpansion> <BuildableReference BuildableIdentifier = "primary" @@ -38,8 +36,8 @@ ReferencedContainer = "container:NowPlayingView.xcodeproj"> </BuildableReference> </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> + <Testables> + </Testables> </TestAction> <LaunchAction buildConfiguration = "Debug" @@ -61,8 +59,6 @@ ReferencedContainer = "container:NowPlayingView.xcodeproj"> </BuildableReference> </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> </LaunchAction> <ProfileAction buildConfiguration = "Release" diff --git a/DemoProjects/NowPlayingView/NowPlayingView/ConnectionStatusIndicatorView.swift b/DemoProjects/NowPlayingView/NowPlayingView/ConnectionStatusIndicatorView.swift index 15e2dd1..58f5be7 100644 --- a/DemoProjects/NowPlayingView/NowPlayingView/ConnectionStatusIndicatorView.swift +++ b/DemoProjects/NowPlayingView/NowPlayingView/ConnectionStatusIndicatorView.swift @@ -39,9 +39,7 @@ class ConnectionStatusIndicatorView : UIView { } let size = self.bounds.size - let path = CGMutablePath() - - path.__addRoundedRect(transform: nil, rect: self.bounds, cornerWidth: size.width/2, cornerHeight: size.height/2) + let path = CGPath(roundedRect: self.bounds, cornerWidth: size.width/2, cornerHeight: size.height/2, transform: nil) context.addPath(path) context.setFillColor(fillColor()) diff --git a/DemoProjects/NowPlayingView/NowPlayingView/ContentCollectionViewController.swift b/DemoProjects/NowPlayingView/NowPlayingView/ContentCollectionViewController.swift index 5cfa94d..883eab6 100644 --- a/DemoProjects/NowPlayingView/NowPlayingView/ContentCollectionViewController.swift +++ b/DemoProjects/NowPlayingView/NowPlayingView/ContentCollectionViewController.swift @@ -71,10 +71,11 @@ class ContentCollectionViewController : UICollectionViewController, UICollection cell.imageView.image = nil appRemote?.imageAPI?.fetchImage(forItem: item, with: scaledSizeForCell(cell)) { (image, error) in - // If the cell hasn't been reused - if cell.titleLabel.text == item.title { - cell.imageView?.image = image as? UIImage + guard let image = image as? UIImage, error == nil, + let cell = collectionView.cellForItem(at: indexPath) as? ContentItemCell else { + return } + cell.imageView?.image = image } return cell diff --git a/DemoProjects/NowPlayingView/NowPlayingView/ViewController.swift b/DemoProjects/NowPlayingView/NowPlayingView/ViewController.swift index 37f336b..fc0035a 100644 --- a/DemoProjects/NowPlayingView/NowPlayingView/ViewController.swift +++ b/DemoProjects/NowPlayingView/NowPlayingView/ViewController.swift @@ -59,7 +59,7 @@ class ViewController: UIViewController { self.navigationItem.rightBarButtonItem = UIBarButtonItem(customView: connectionIndicatorView) connectionIndicatorView.frame = CGRect(origin: CGPoint(), size: CGSize(width: 20,height: 20)) - playPauseButton.setTitle("", for: UIControl.State.normal); + playPauseButton.setTitle("", for: UIControl.State.normal) playPauseButton.setImage(PlaybackButtonGraphics.playButtonImage(), for: UIControl.State.normal) playPauseButton.setImage(PlaybackButtonGraphics.playButtonImage(), for: UIControl.State.highlighted) @@ -104,7 +104,7 @@ class ViewController: UIViewController { if (!enabled) { albumArtImageView.image = nil - updatePlayPauseButtonState(true); + updatePlayPauseButtonState(true) } } @@ -120,19 +120,19 @@ class ViewController: UIViewController { private func updatePodcastSpeed(speed: SPTAppRemotePodcastPlaybackSpeed) { currentPodcastSpeed = speed - podcastSpeedButton.setTitle(String(format: "%0.1fx", speed.value.floatValue), for: .normal); + podcastSpeedButton.setTitle(String(format: "%0.1fx", speed.value.floatValue), for: .normal) } // MARK: Player State private func updatePlayPauseButtonState(_ paused: Bool) { let playPauseButtonImage = paused ? PlaybackButtonGraphics.playButtonImage() : PlaybackButtonGraphics.pauseButtonImage() - playPauseButton.setImage(playPauseButtonImage, for: UIControl.State()) + playPauseButton.setImage(playPauseButtonImage, for: .normal) playPauseButton.setImage(playPauseButtonImage, for: .highlighted) } private func updatePlayerStateSubscriptionButtonState() { let playerStateSubscriptionButtonTitle = subscribedToPlayerState ? "Unsubscribe" : "Subscribe" - playerStateSubscriptionButton.setTitle(playerStateSubscriptionButtonTitle, for: UIControl.State()) + playerStateSubscriptionButton.setTitle(playerStateSubscriptionButtonTitle, for: .normal) } // MARK: Capabilities @@ -142,7 +142,7 @@ class ViewController: UIViewController { private func updateCapabilitiesSubscriptionButtonState() { let capabilitiesSubscriptionButtonTitle = subscribedToCapabilities ? "Unsubscribe" : "Subscribe" - capabilitiesSubscriptionButton.setTitle(capabilitiesSubscriptionButtonTitle, for: UIControl.State()) + capabilitiesSubscriptionButton.setTitle(capabilitiesSubscriptionButtonTitle, for: .normal) } // MARK: Shuffle @@ -159,7 +159,7 @@ class ViewController: UIViewController { case .context: return "Context" default: return "Off" } - }() + }() } // MARK: Album Art @@ -206,7 +206,7 @@ class ViewController: UIViewController { private func pausePlayback() { appRemote?.playerAPI?.pause(defaultCallback) } - + private func playTrack() { appRemote?.playerAPI?.play(trackIdentifier, callback: defaultCallback) } @@ -357,9 +357,11 @@ class ViewController: UIViewController { // MARK: - IBActions @IBAction func didPressPlayPauseButton(_ sender: AnyObject) { if appRemote?.isConnected == false { - if appRemote?.authorizeAndPlayURI(playURI) == false { - // The Spotify app is not installed, present the user with an App Store page - showAppStoreInstall() + appRemote?.authorizeAndPlayURI(playURI) { success in + if !success { + // The Spotify app is not installed, present the user with an App Store page + self.showAppStoreInstall() + } } } else if playerState == nil || playerState!.isPaused { startPlayback() @@ -430,9 +432,11 @@ class ViewController: UIViewController { @IBAction func playRadioTapped(_ sender: Any) { if appRemote?.isConnected == false && appRemote?.playerAPI != nil { - if appRemote?.authorizeAndPlayURI(trackIdentifier, asRadio: true) == false { - // The Spotify app is not installed, present the user with an App Store page - showAppStoreInstall() + appRemote?.authorizeAndPlayURI(trackIdentifier, asRadio: true) { success in + if !success { + // The Spotify app is not installed, present the user with an App Store page + self.showAppStoreInstall() + } } } else { var trackUri = trackIdentifier @@ -467,10 +471,10 @@ extension ViewController: SpeedPickerViewControllerDelegate { // MARK: - SPTAppRemotePlayerStateDelegate extension ViewController: SPTAppRemotePlayerStateDelegate { - func playerStateDidChange(_ playerState: SPTAppRemotePlayerState) { - self.playerState = playerState - updateViewWithPlayerState(playerState) - } + func playerStateDidChange(_ playerState: SPTAppRemotePlayerState) { + self.playerState = playerState + updateViewWithPlayerState(playerState) + } } // MARK: - SPTAppRemoteUserAPIDelegate extension ViewController: SPTAppRemoteUserAPIDelegate { diff --git a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/project.pbxproj b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/project.pbxproj index 4ec3b50..51fb336 100644 --- a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/project.pbxproj +++ b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/project.pbxproj @@ -18,16 +18,6 @@ 3518DFFE1F99983F00A5313C /* ConnectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 3518DFFD1F99983F00A5313C /* ConnectView.m */; }; /* End PBXBuildFile section */ -/* Begin PBXContainerItemProxy section */ - 54D50C5320C87A490035B73A /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 35029C451F5F476800383619 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 35029C4C1F5F476800383619; - remoteInfo = SPTLoginSampleApp; - }; -/* End PBXContainerItemProxy section */ - /* Begin PBXCopyFilesBuildPhase section */ 54A5565220C85523000CD9C0 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -57,7 +47,6 @@ 3518DFFA1F99674A00A5313C /* ConnectButton.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConnectButton.m; sourceTree = "<group>"; }; 3518DFFC1F99983F00A5313C /* ConnectView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ConnectView.h; sourceTree = "<group>"; }; 3518DFFD1F99983F00A5313C /* ConnectView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ConnectView.m; sourceTree = "<group>"; }; - 54D50C4E20C87A480035B73A /* SPTLoginSampleAppUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SPTLoginSampleAppUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -69,13 +58,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 54D50C4B20C87A480035B73A /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -92,7 +74,6 @@ isa = PBXGroup; children = ( 35029C4D1F5F476800383619 /* SPTLoginSampleApp.app */, - 54D50C4E20C87A480035B73A /* SPTLoginSampleAppUITests.xctest */, ); name = Products; sourceTree = "<group>"; @@ -145,42 +126,20 @@ productReference = 35029C4D1F5F476800383619 /* SPTLoginSampleApp.app */; productType = "com.apple.product-type.application"; }; - 54D50C4D20C87A480035B73A /* SPTLoginSampleAppUITests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 54D50C5820C87A490035B73A /* Build configuration list for PBXNativeTarget "SPTLoginSampleAppUITests" */; - buildPhases = ( - 54D50C4A20C87A480035B73A /* Sources */, - 54D50C4B20C87A480035B73A /* Frameworks */, - 54D50C4C20C87A480035B73A /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 54D50C5420C87A490035B73A /* PBXTargetDependency */, - ); - name = SPTLoginSampleAppUITests; - productName = SPTLoginSampleAppUITests; - productReference = 54D50C4E20C87A480035B73A /* SPTLoginSampleAppUITests.xctest */; - productType = "com.apple.product-type.bundle.ui-testing"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 35029C451F5F476800383619 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 0940; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = Spotify; TargetAttributes = { 35029C4C1F5F476800383619 = { CreatedOnToolsVersion = 9.0; ProvisioningStyle = Automatic; }; - 54D50C4D20C87A480035B73A = { - CreatedOnToolsVersion = 9.4; - ProvisioningStyle = Automatic; - TestTargetID = 35029C4C1F5F476800383619; - }; }; }; buildConfigurationList = 35029C481F5F476800383619 /* Build configuration list for PBXProject "SPTLoginSampleApp" */; @@ -197,7 +156,6 @@ projectRoot = ""; targets = ( 35029C4C1F5F476800383619 /* SPTLoginSampleApp */, - 54D50C4D20C87A480035B73A /* SPTLoginSampleAppUITests */, ); }; /* End PBXProject section */ @@ -212,13 +170,6 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 54D50C4C20C87A480035B73A /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -234,23 +185,8 @@ ); runOnlyForDeploymentPostprocessing = 0; }; - 54D50C4A20C87A480035B73A /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ -/* Begin PBXTargetDependency section */ - 54D50C5420C87A490035B73A /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 35029C4C1F5F476800383619 /* SPTLoginSampleApp */; - targetProxy = 54D50C5320C87A490035B73A /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - /* Begin PBXVariantGroup section */ 35029C5B1F5F476800383619 /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; @@ -267,6 +203,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -288,6 +225,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -299,6 +237,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = "../../**"; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -315,7 +254,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -327,6 +266,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -348,6 +288,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -359,6 +300,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = "../../**"; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; @@ -369,7 +311,7 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; HEADER_SEARCH_PATHS = ""; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; USER_HEADER_SEARCH_PATHS = ""; @@ -384,7 +326,6 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 2FNC3A47ZF; INFOPLIST_FILE = SPTLoginSampleApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -403,7 +344,6 @@ CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = 2FNC3A47ZF; INFOPLIST_FILE = SPTLoginSampleApp/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -415,50 +355,6 @@ }; name = Release; }; - 54D50C5520C87A490035B73A /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2FNC3A47ZF; - INFOPLIST_FILE = SPTLoginSampleAppUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = Spotify.SPTLoginSampleAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = SPTLoginSampleApp; - }; - name = Debug; - }; - 54D50C5620C87A490035B73A /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CLANG_ENABLE_OBJC_WEAK = YES; - CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; - CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; - CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = 2FNC3A47ZF; - INFOPLIST_FILE = SPTLoginSampleAppUITests/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.4; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@loader_path/Frameworks", - ); - PRODUCT_BUNDLE_IDENTIFIER = Spotify.SPTLoginSampleAppUITests; - PRODUCT_NAME = "$(TARGET_NAME)"; - TARGETED_DEVICE_FAMILY = "1,2"; - TEST_TARGET_NAME = SPTLoginSampleApp; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -480,15 +376,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - 54D50C5820C87A490035B73A /* Build configuration list for PBXNativeTarget "SPTLoginSampleAppUITests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 54D50C5520C87A490035B73A /* Debug */, - 54D50C5620C87A490035B73A /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ }; rootObject = 35029C451F5F476800383619 /* Project object */; diff --git a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleApp.xcscheme b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleApp.xcscheme index cf5b00a..9fc396e 100644 --- a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleApp.xcscheme +++ b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleApp.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "0940" + LastUpgradeVersion = "1510" version = "1.3"> <BuildAction parallelizeBuildables = "YES" @@ -27,6 +27,15 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "35029C4C1F5F476800383619" + BuildableName = "SPTLoginSampleApp.app" + BlueprintName = "SPTLoginSampleApp" + ReferencedContainer = "container:SPTLoginSampleApp.xcodeproj"> + </BuildableReference> + </MacroExpansion> <Testables> <TestableReference skipped = "NO"> @@ -39,17 +48,6 @@ </BuildableReference> </TestableReference> </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "35029C4C1F5F476800383619" - BuildableName = "SPTLoginSampleApp.app" - BlueprintName = "SPTLoginSampleApp" - ReferencedContainer = "container:SPTLoginSampleApp.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> </TestAction> <LaunchAction buildConfiguration = "Debug" @@ -71,8 +69,6 @@ ReferencedContainer = "container:SPTLoginSampleApp.xcodeproj"> </BuildableReference> </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> </LaunchAction> <ProfileAction buildConfiguration = "Release" diff --git a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.h b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.h index 7d729ab..317a27c 100644 --- a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.h +++ b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.h @@ -1,5 +1,5 @@ @import UIKit; -#import <SpotifyiOS/SpotifyiOS.h> +@import SpotifyiOS; NS_ASSUME_NONNULL_BEGIN diff --git a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.m b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.m index 62a1757..93ebb35 100644 --- a/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.m +++ b/DemoProjects/SPTLoginSampleApp/SPTLoginSampleApp/ViewController.m @@ -55,13 +55,7 @@ - (void)didTapAuthButton:(ConnectButton *)sender /* Start the authorization process. This requires user input. */ - if (@available(iOS 11, *)) { - // Use this on iOS 11 and above to take advantage of SFAuthenticationSession - [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption]; - } else { - // Use this on iOS versions < 11 to use SFSafariViewController - [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption presentingViewController:self]; - } + [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption]; } #pragma mark - SPTSessionManagerDelegate diff --git a/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/project.pbxproj b/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/project.pbxproj index 8eb350a..1990f32 100644 --- a/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/project.pbxproj +++ b/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/project.pbxproj @@ -120,8 +120,9 @@ 54AC7ED420081242008CD692 /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0940; - LastUpgradeCheck = 0940; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = Spotify; TargetAttributes = { 54AC7EDB20081243008CD692 = { @@ -190,6 +191,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -211,6 +213,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -222,6 +225,7 @@ DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = "../../**"; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; @@ -237,7 +241,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; OTHER_LDFLAGS = "-ObjC"; @@ -252,6 +256,7 @@ isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; @@ -273,6 +278,7 @@ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; @@ -284,6 +290,7 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; FRAMEWORK_SEARCH_PATHS = "../../**"; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; @@ -293,7 +300,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; OTHER_LDFLAGS = "-ObjC"; SDKROOT = iphoneos; diff --git a/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleAppSwift.xcscheme b/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleAppSwift.xcscheme index b201590..feaa6c8 100644 --- a/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleAppSwift.xcscheme +++ b/DemoProjects/SPTLoginSampleAppSwift/SPTLoginSampleAppSwift.xcodeproj/xcshareddata/xcschemes/SPTLoginSampleAppSwift.xcscheme @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <Scheme - LastUpgradeVersion = "0940" + LastUpgradeVersion = "1510" version = "1.3"> <BuildAction parallelizeBuildables = "YES" @@ -27,6 +27,15 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "54AC7EDB20081243008CD692" + BuildableName = "SPTLoginSampleAppSwift.app" + BlueprintName = "SPTLoginSampleAppSwift" + ReferencedContainer = "container:SPTLoginSampleAppSwift.xcodeproj"> + </BuildableReference> + </MacroExpansion> <Testables> <TestableReference skipped = "NO"> @@ -39,17 +48,6 @@ </BuildableReference> </TestableReference> </Testables> - <MacroExpansion> - <BuildableReference - BuildableIdentifier = "primary" - BlueprintIdentifier = "54AC7EDB20081243008CD692" - BuildableName = "SPTLoginSampleAppSwift.app" - BlueprintName = "SPTLoginSampleAppSwift" - ReferencedContainer = "container:SPTLoginSampleAppSwift.xcodeproj"> - </BuildableReference> - </MacroExpansion> - <AdditionalOptions> - </AdditionalOptions> </TestAction> <LaunchAction buildConfiguration = "Debug" @@ -71,8 +69,6 @@ ReferencedContainer = "container:SPTLoginSampleAppSwift.xcodeproj"> </BuildableReference> </BuildableProductRunnable> - <AdditionalOptions> - </AdditionalOptions> </LaunchAction> <ProfileAction buildConfiguration = "Release" diff --git a/README.md b/README.md index e5ad739..5198dd4 100644 --- a/README.md +++ b/README.md @@ -169,7 +169,7 @@ To be able to use the playback control part of the SDK the user needs to authori ```objective-c SPTConfiguration *configuration = - [[SPTConfiguration alloc] initWithClientID:@"your_client_id" redirectURL:[NSURL urlWithString:@"your_redirect_uri"]]; + [[SPTConfiguration alloc] initWithClientID:@"your_client_id" redirectURL:[NSURL URLWithString:@"your_redirect_uri"]]; ``` 2. Initialize `SPTAppRemote` with your `SPTConfiguration` @@ -182,14 +182,16 @@ To be able to use the playback control part of the SDK the user needs to authori ```objective-c // Note: A blank string will play the user's last song or pick a random one. - BOOL spotifyInstalled = [self.appRemote authorizeAndPlayURI:@"spotify:track:69bp2EbF7Q2rqc5N3ylezZ"]; - if (!spotifyInstalled) { - /* - * The Spotify app is not installed. - * Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user - * with a way to install the Spotify app. - */ - } + [self.appRemote authorizeAndPlayURI:@"spotify:track:69bp2EbF7Q2rqc5N3ylezZ" completionHandler:^(BOOL spotifyInstalled) { + if (!spotifyInstalled) { + /* + * The Spotify app is not installed. + * Use SKStoreProductViewController with [SPTAppRemote spotifyItunesItemIdentifier] to present the user + * with a way to install the Spotify app. + */ + } + }]; + ``` 4. Configure your `AppDelegate` to parse out the accessToken in `application:openURL:options:` and set it on the `SPTAppRemote` connectionParameters. diff --git a/SpotifyiOS.framework/Headers/SPTAppRemote.h b/SpotifyiOS.framework/Headers/SPTAppRemote.h index bef85ef..a758a79 100644 --- a/SpotifyiOS.framework/Headers/SPTAppRemote.h +++ b/SpotifyiOS.framework/Headers/SPTAppRemote.h @@ -166,24 +166,26 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * The passed URI will start playing unless Spotify is already playing. * * @param URI The URI to play. Use a blank string to attempt to play the user's last song + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)URI; +- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. * * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio; +- (void)authorizeAndPlayURI:(NSString *)playURI + asRadio:(BOOL)asRadio + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -191,14 +193,15 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. * @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need `app-remote-control` +* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * -* @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio - additionalScopes:(nullable NSArray<NSString *> *)additionalScopes; + additionalScopes:(nullable NSArray<NSString *> *)additionalScopes + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -209,15 +212,16 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics purposes. Every new attempt to * connect to the Spotify app should have a new identifier, but the identifier used here should then be reused for the accompanied call to * `connectWithSessionIdentifier:`. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio additionalScopes:(nullable NSArray<NSString *> *)additionalScopes - sessionIdentifier:(nullable NSUUID *)sessionIdentifier; + sessionIdentifier:(nullable NSUUID *)sessionIdentifier + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Parse out an access token or error description from a url passed to application:openURL:options: * diff --git a/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h b/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h index 2119543..a1d5b42 100644 --- a/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h +++ b/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN /// Returns `YES` if the item is expected to contain children, otherwise `NO`. @property (nonatomic, assign, readonly, getter=isContainer) BOOL container; +/// Returns `YES` if the item is pinned in Your Library, otherwise `NO`. +@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned; + /** A list of the content item's children. diff --git a/SpotifyiOS.framework/Headers/SpotifyAppRemote.h b/SpotifyiOS.framework/Headers/SpotifyAppRemote.h index afce4a6..5383aa5 100644 --- a/SpotifyiOS.framework/Headers/SpotifyAppRemote.h +++ b/SpotifyiOS.framework/Headers/SpotifyAppRemote.h @@ -24,6 +24,8 @@ #import "SPTAppRemoteLibraryState.h" #import "SPTAppRemoteContentItem.h" #import "SPTAppRemotePodcastPlaybackSpeed.h" +#import "SPTAppRemoteConnectivityAPI.h" +#import "SPTAppRemoteConnectivityState.h" #import "SPTConfiguration.h" diff --git a/SpotifyiOS.framework/SpotifyiOS b/SpotifyiOS.framework/SpotifyiOS index d8327c8..5d879dc 100644 Binary files a/SpotifyiOS.framework/SpotifyiOS and b/SpotifyiOS.framework/SpotifyiOS differ diff --git a/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemote.h b/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemote.h index bef85ef..a758a79 100644 --- a/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemote.h +++ b/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemote.h @@ -166,24 +166,26 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * The passed URI will start playing unless Spotify is already playing. * * @param URI The URI to play. Use a blank string to attempt to play the user's last song + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)URI; +- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. * * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio; +- (void)authorizeAndPlayURI:(NSString *)playURI + asRadio:(BOOL)asRadio + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -191,14 +193,15 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. * @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need `app-remote-control` +* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * -* @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio - additionalScopes:(nullable NSArray<NSString *> *)additionalScopes; + additionalScopes:(nullable NSArray<NSString *> *)additionalScopes + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -209,15 +212,16 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics purposes. Every new attempt to * connect to the Spotify app should have a new identifier, but the identifier used here should then be reused for the accompanied call to * `connectWithSessionIdentifier:`. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio additionalScopes:(nullable NSArray<NSString *> *)additionalScopes - sessionIdentifier:(nullable NSUUID *)sessionIdentifier; + sessionIdentifier:(nullable NSUUID *)sessionIdentifier + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Parse out an access token or error description from a url passed to application:openURL:options: * diff --git a/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemoteContentItem.h b/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemoteContentItem.h index 2119543..a1d5b42 100644 --- a/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemoteContentItem.h +++ b/SpotifyiOS.framework/Versions/A/Headers/SPTAppRemoteContentItem.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN /// Returns `YES` if the item is expected to contain children, otherwise `NO`. @property (nonatomic, assign, readonly, getter=isContainer) BOOL container; +/// Returns `YES` if the item is pinned in Your Library, otherwise `NO`. +@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned; + /** A list of the content item's children. diff --git a/SpotifyiOS.framework/Versions/A/Headers/SpotifyAppRemote.h b/SpotifyiOS.framework/Versions/A/Headers/SpotifyAppRemote.h index afce4a6..5383aa5 100644 --- a/SpotifyiOS.framework/Versions/A/Headers/SpotifyAppRemote.h +++ b/SpotifyiOS.framework/Versions/A/Headers/SpotifyAppRemote.h @@ -24,6 +24,8 @@ #import "SPTAppRemoteLibraryState.h" #import "SPTAppRemoteContentItem.h" #import "SPTAppRemotePodcastPlaybackSpeed.h" +#import "SPTAppRemoteConnectivityAPI.h" +#import "SPTAppRemoteConnectivityState.h" #import "SPTConfiguration.h" diff --git a/SpotifyiOS.framework/Versions/A/SpotifyiOS b/SpotifyiOS.framework/Versions/A/SpotifyiOS index d8327c8..5d879dc 100644 Binary files a/SpotifyiOS.framework/Versions/A/SpotifyiOS and b/SpotifyiOS.framework/Versions/A/SpotifyiOS differ diff --git a/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemote.h b/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemote.h index bef85ef..a758a79 100644 --- a/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemote.h +++ b/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemote.h @@ -166,24 +166,26 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * The passed URI will start playing unless Spotify is already playing. * * @param URI The URI to play. Use a blank string to attempt to play the user's last song + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)URI; +- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. * * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio; +- (void)authorizeAndPlayURI:(NSString *)playURI + asRadio:(BOOL)asRadio + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -191,14 +193,15 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. * @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need `app-remote-control` +* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * -* @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio - additionalScopes:(nullable NSArray<NSString *> *)additionalScopes; + additionalScopes:(nullable NSArray<NSString *> *)additionalScopes + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -209,15 +212,16 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics purposes. Every new attempt to * connect to the Spotify app should have a new identifier, but the identifier used here should then be reused for the accompanied call to * `connectWithSessionIdentifier:`. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio additionalScopes:(nullable NSArray<NSString *> *)additionalScopes - sessionIdentifier:(nullable NSUUID *)sessionIdentifier; + sessionIdentifier:(nullable NSUUID *)sessionIdentifier + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Parse out an access token or error description from a url passed to application:openURL:options: * diff --git a/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemoteContentItem.h b/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemoteContentItem.h index 2119543..a1d5b42 100644 --- a/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemoteContentItem.h +++ b/SpotifyiOS.framework/Versions/Current/Headers/SPTAppRemoteContentItem.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN /// Returns `YES` if the item is expected to contain children, otherwise `NO`. @property (nonatomic, assign, readonly, getter=isContainer) BOOL container; +/// Returns `YES` if the item is pinned in Your Library, otherwise `NO`. +@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned; + /** A list of the content item's children. diff --git a/SpotifyiOS.framework/Versions/Current/Headers/SpotifyAppRemote.h b/SpotifyiOS.framework/Versions/Current/Headers/SpotifyAppRemote.h index afce4a6..5383aa5 100644 --- a/SpotifyiOS.framework/Versions/Current/Headers/SpotifyAppRemote.h +++ b/SpotifyiOS.framework/Versions/Current/Headers/SpotifyAppRemote.h @@ -24,6 +24,8 @@ #import "SPTAppRemoteLibraryState.h" #import "SPTAppRemoteContentItem.h" #import "SPTAppRemotePodcastPlaybackSpeed.h" +#import "SPTAppRemoteConnectivityAPI.h" +#import "SPTAppRemoteConnectivityState.h" #import "SPTConfiguration.h" diff --git a/SpotifyiOS.framework/Versions/Current/SpotifyiOS b/SpotifyiOS.framework/Versions/Current/SpotifyiOS index d8327c8..5d879dc 100644 Binary files a/SpotifyiOS.framework/Versions/Current/SpotifyiOS and b/SpotifyiOS.framework/Versions/Current/SpotifyiOS differ diff --git a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h index bef85ef..a758a79 100644 --- a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h +++ b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemote.h @@ -166,24 +166,26 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * The passed URI will start playing unless Spotify is already playing. * * @param URI The URI to play. Use a blank string to attempt to play the user's last song + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)URI; +- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. * * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio; +- (void)authorizeAndPlayURI:(NSString *)playURI + asRadio:(BOOL)asRadio + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -191,14 +193,15 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. * @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need `app-remote-control` +* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * -* @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio - additionalScopes:(nullable NSArray<NSString *> *)additionalScopes; + additionalScopes:(nullable NSArray<NSString *> *)additionalScopes + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -209,15 +212,16 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics purposes. Every new attempt to * connect to the Spotify app should have a new identifier, but the identifier used here should then be reused for the accompanied call to * `connectWithSessionIdentifier:`. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio additionalScopes:(nullable NSArray<NSString *> *)additionalScopes - sessionIdentifier:(nullable NSUUID *)sessionIdentifier; + sessionIdentifier:(nullable NSUUID *)sessionIdentifier + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Parse out an access token or error description from a url passed to application:openURL:options: * diff --git a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h index 2119543..a1d5b42 100644 --- a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h +++ b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN /// Returns `YES` if the item is expected to contain children, otherwise `NO`. @property (nonatomic, assign, readonly, getter=isContainer) BOOL container; +/// Returns `YES` if the item is pinned in Your Library, otherwise `NO`. +@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned; + /** A list of the content item's children. diff --git a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyAppRemote.h b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyAppRemote.h index afce4a6..5383aa5 100644 --- a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyAppRemote.h +++ b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Headers/SpotifyAppRemote.h @@ -24,6 +24,8 @@ #import "SPTAppRemoteLibraryState.h" #import "SPTAppRemoteContentItem.h" #import "SPTAppRemotePodcastPlaybackSpeed.h" +#import "SPTAppRemoteConnectivityAPI.h" +#import "SPTAppRemoteConnectivityState.h" #import "SPTConfiguration.h" diff --git a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Info.plist b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Info.plist index 29755ff..7f0f859 100644 Binary files a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Info.plist and b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/Info.plist differ diff --git a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/SpotifyiOS b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/SpotifyiOS index b0000dc..612fa38 100755 Binary files a/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/SpotifyiOS and b/SpotifyiOS.xcframework/ios-arm64/SpotifyiOS.framework/SpotifyiOS differ diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemote.h b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemote.h index bef85ef..a758a79 100644 --- a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemote.h +++ b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemote.h @@ -166,24 +166,26 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * The passed URI will start playing unless Spotify is already playing. * * @param URI The URI to play. Use a blank string to attempt to play the user's last song + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)URI; +- (void)authorizeAndPlayURI:(NSString *)URI completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. * * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio; +- (void)authorizeAndPlayURI:(NSString *)playURI + asRadio:(BOOL)asRadio + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -191,14 +193,15 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param playURI The URI to play. Use a blank string to attempt to play the user's last song * @param asRadio `YES` to start radio for the given URI. * @param additionalScopes An array of scopes in addition to `app-remote-control`. Can be nil if you only need `app-remote-control` +* @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * -* @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio - additionalScopes:(nullable NSArray<NSString *> *)additionalScopes; + additionalScopes:(nullable NSArray<NSString *> *)additionalScopes + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Open Spotify app to obtain access token and start playback. @@ -209,15 +212,16 @@ typedef NS_ENUM(NSUInteger, SPTAppRemoteLogLevel) { * @param sessionIdentifier An optional unique identifier for this specific session, which is used for analytics purposes. Every new attempt to * connect to the Spotify app should have a new identifier, but the identifier used here should then be reused for the accompanied call to * `connectWithSessionIdentifier:`. + * @param completionHandler `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * - * @return `YES` if the Spotify app is installed and an authorization attempt can be made, otherwise `NO`. * Note: The return `BOOL` here is not a measure of whether or not authentication succeeded, only a check if * the Spotify app is installed and can attempt to handle the authorization request. */ -- (BOOL)authorizeAndPlayURI:(NSString *)playURI +- (void)authorizeAndPlayURI:(NSString *)playURI asRadio:(BOOL)asRadio additionalScopes:(nullable NSArray<NSString *> *)additionalScopes - sessionIdentifier:(nullable NSUUID *)sessionIdentifier; + sessionIdentifier:(nullable NSUUID *)sessionIdentifier + completionHandler:(void (^ __nullable)(BOOL success))completionHandler; /** * Parse out an access token or error description from a url passed to application:openURL:options: * diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h index 2119543..a1d5b42 100644 --- a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h +++ b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SPTAppRemoteContentItem.h @@ -33,6 +33,9 @@ NS_ASSUME_NONNULL_BEGIN /// Returns `YES` if the item is expected to contain children, otherwise `NO`. @property (nonatomic, assign, readonly, getter=isContainer) BOOL container; +/// Returns `YES` if the item is pinned in Your Library, otherwise `NO`. +@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned; + /** A list of the content item's children. diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyAppRemote.h b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyAppRemote.h index afce4a6..5383aa5 100644 --- a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyAppRemote.h +++ b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Headers/SpotifyAppRemote.h @@ -24,6 +24,8 @@ #import "SPTAppRemoteLibraryState.h" #import "SPTAppRemoteContentItem.h" #import "SPTAppRemotePodcastPlaybackSpeed.h" +#import "SPTAppRemoteConnectivityAPI.h" +#import "SPTAppRemoteConnectivityState.h" #import "SPTConfiguration.h" diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Info.plist b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Info.plist index d458e3c..18589fb 100644 Binary files a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Info.plist and b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/Info.plist differ diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/SpotifyiOS b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/SpotifyiOS index 9c3271f..aeddb97 100755 Binary files a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/SpotifyiOS and b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/SpotifyiOS differ diff --git a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/_CodeSignature/CodeResources b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/_CodeSignature/CodeResources index 952c3b8..be0a021 100644 --- a/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/_CodeSignature/CodeResources +++ b/SpotifyiOS.xcframework/ios-arm64_x86_64-simulator/SpotifyiOS.framework/_CodeSignature/CodeResources @@ -6,7 +6,7 @@ <dict> <key>Headers/SPTAppRemote.h</key> <data> - t7Hh0L+Ak3xs6WIBPjMos5RegOE= + vp2fDLrEgvwm5wd1GwLK2CnY1/4= </data> <key>Headers/SPTAppRemoteAlbum.h</key> <data> @@ -38,7 +38,7 @@ </data> <key>Headers/SPTAppRemoteContentItem.h</key> <data> - tkJ3T/eZcZGrEXO2Js63LB6y8TY= + hO4Xt+59R4BoPfF0y7mIMcQTTiY= </data> <key>Headers/SPTAppRemoteCrossfadeState.h</key> <data> @@ -118,7 +118,7 @@ </data> <key>Headers/SpotifyAppRemote.h</key> <data> - TCwc+uBsEd4YUZOvpso42XL5VyQ= + 1Cw+jZPqfjJ5sc6yW7xoPHNN2fU= </data> <key>Headers/SpotifyiOS.h</key> <data> @@ -126,7 +126,7 @@ </data> <key>Info.plist</key> <data> - mByYLZyZ8HkCZUmDX+2K2RIBHDM= + /v/AhOv6QcQ/6v7/aN8A5Rxcjck= </data> <key>Modules/module.modulemap</key> <data> @@ -141,21 +141,13 @@ <dict> <key>Headers/SPTAppRemote.h</key> <dict> - <key>hash</key> - <data> - t7Hh0L+Ak3xs6WIBPjMos5RegOE= - </data> <key>hash2</key> <data> - n1eb/urgmLhozCxMSEHITpWZ0/jAwg7Iw5s8W+IQhZQ= + LqO/oRsmWu5uFGJuYm2xmaj7Lq4bdmYhyYqD/nVFR8w= </data> </dict> <key>Headers/SPTAppRemoteAlbum.h</key> <dict> - <key>hash</key> - <data> - Lu2h8RV/1rCYVe0UeVYTpq08R0s= - </data> <key>hash2</key> <data> juYHeLMlaqhRmfOQgyPv3+mqe19WB9c/yN9YhZmYkuw= @@ -163,10 +155,6 @@ </dict> <key>Headers/SPTAppRemoteArtist.h</key> <dict> - <key>hash</key> - <data> - tE8Iok89gLPlWD3mhRcBWnvJ7LM= - </data> <key>hash2</key> <data> 16uyxiFbm57Zbm6EvDLKut7wUBQYMY0gqsco8+e1EUQ= @@ -174,10 +162,6 @@ </dict> <key>Headers/SPTAppRemoteCommon.h</key> <dict> - <key>hash</key> - <data> - CpelKULwWd0nTTZbrWggK9Wh1Sk= - </data> <key>hash2</key> <data> w2tXhJ6V84gaIx/oufHMM0aVRj6s5J1qhoHN/N8dwKA= @@ -185,10 +169,6 @@ </dict> <key>Headers/SPTAppRemoteConnectionParams.h</key> <dict> - <key>hash</key> - <data> - 5Q+ZskgYeMEl9/QUrJEGrIOt/qU= - </data> <key>hash2</key> <data> YBy/6s0WAEfEy7DbEx+Y7Emavnp8+95MrmRfai1kCXI= @@ -196,10 +176,6 @@ </dict> <key>Headers/SPTAppRemoteConnectivityAPI.h</key> <dict> - <key>hash</key> - <data> - 1IsWgCd35d9eLZ1bLK9rcc42SC4= - </data> <key>hash2</key> <data> y39A3+0t/j/EkXSsm0S/dJ/bbq6oPB+x7VzRh9UPF6I= @@ -207,10 +183,6 @@ </dict> <key>Headers/SPTAppRemoteConnectivityState.h</key> <dict> - <key>hash</key> - <data> - gQ/++ZcqYbuCiOwa5pfKqlY081s= - </data> <key>hash2</key> <data> OXTYAMLmKRT8pEPD3x5G+Srjfc6genLNyv7/+LONxZE= @@ -218,10 +190,6 @@ </dict> <key>Headers/SPTAppRemoteContentAPI.h</key> <dict> - <key>hash</key> - <data> - 0CSzqvLvOMUxpLRCSBx47RDBMdA= - </data> <key>hash2</key> <data> wUxkL7K8laoKaNERxEMy7g1idgkQHHEcXkWDTd502Lc= @@ -229,21 +197,13 @@ </dict> <key>Headers/SPTAppRemoteContentItem.h</key> <dict> - <key>hash</key> - <data> - tkJ3T/eZcZGrEXO2Js63LB6y8TY= - </data> <key>hash2</key> <data> - xJQbxcr/OCWc0bREbNhIcHee/B4hx1LXlatNxlT4/ak= + OVONqE0kPMPEPtBmg6qBJyk13EX7AS+Gty4eabVgX10= </data> </dict> <key>Headers/SPTAppRemoteCrossfadeState.h</key> <dict> - <key>hash</key> - <data> - USFdXS57TktpjTBwfq4MRMR5AR8= - </data> <key>hash2</key> <data> 06hbkMdjdn6+wjqoIYXh27mnu6W2fKZ6Q0LPUQ8I85M= @@ -251,10 +211,6 @@ </dict> <key>Headers/SPTAppRemoteImageAPI.h</key> <dict> - <key>hash</key> - <data> - cFwXJG6kY/Wp9abR7/JSlGRjVhU= - </data> <key>hash2</key> <data> IZe/KdziuyH++/XzVhual9PbJGOmoSITmoGzKUDXxm0= @@ -262,10 +218,6 @@ </dict> <key>Headers/SPTAppRemoteImageRepresentable.h</key> <dict> - <key>hash</key> - <data> - ciJ5/qk+pvsaWmK/Htwzo8VWV+I= - </data> <key>hash2</key> <data> gZBSnduQFKgPAyxGlhOITe/t2W4V3Wbn8s4rwLOfz+E= @@ -273,10 +225,6 @@ </dict> <key>Headers/SPTAppRemoteLibraryState.h</key> <dict> - <key>hash</key> - <data> - SVMsqEYwTZpjyW7aoWdcj/WlP7k= - </data> <key>hash2</key> <data> /eJQTzpaVEJiOoqG2rKbd+0WCitm5v/ii0bcBbF+bN8= @@ -284,10 +232,6 @@ </dict> <key>Headers/SPTAppRemotePlaybackOptions.h</key> <dict> - <key>hash</key> - <data> - pvw2bdL4fv6RTSBuMCc9K5QevCQ= - </data> <key>hash2</key> <data> 1G7XYL6zsUzdDiLHAk90M4xKRAsCcnG0anx7hJtBOIw= @@ -295,10 +239,6 @@ </dict> <key>Headers/SPTAppRemotePlaybackRestrictions.h</key> <dict> - <key>hash</key> - <data> - ALUn1+dXGFf0AEY4mWOSFz4F3qg= - </data> <key>hash2</key> <data> +N64MGaUhioHAEuekcSrvVl1FcxznUei5Yq1/KkNei0= @@ -306,10 +246,6 @@ </dict> <key>Headers/SPTAppRemotePlayerAPI.h</key> <dict> - <key>hash</key> - <data> - krhVrXqBo4Nh4YXRuHZURfKclEE= - </data> <key>hash2</key> <data> 6z0uDE9BpPOZKQnKlWPNWCwR/SI0sNAdsE9bBd8vBPM= @@ -317,10 +253,6 @@ </dict> <key>Headers/SPTAppRemotePlayerState.h</key> <dict> - <key>hash</key> - <data> - 0nUxiikB1mLHRqFJodmtSGL1hqo= - </data> <key>hash2</key> <data> 7Ll+4R7t6Q6NmK8hPnM9+eTrmWR1giwbO0tl3gNveGg= @@ -328,10 +260,6 @@ </dict> <key>Headers/SPTAppRemotePodcastPlaybackSpeed.h</key> <dict> - <key>hash</key> - <data> - buVPJyc1tr0zVzlF8BxtP1fmG2s= - </data> <key>hash2</key> <data> K6cJayK1RuCic1Fs7eLWuw6H0MhhoRWO7Qfvn4NOW0s= @@ -339,10 +267,6 @@ </dict> <key>Headers/SPTAppRemoteTrack.h</key> <dict> - <key>hash</key> - <data> - v7ZLVkQtBEpkm+4SivDvn3tYr0M= - </data> <key>hash2</key> <data> z1NcXcgGzKWhIOZevAQkV2xci5z/j6p8DOz2fc8daAQ= @@ -350,10 +274,6 @@ </dict> <key>Headers/SPTAppRemoteUserAPI.h</key> <dict> - <key>hash</key> - <data> - jqgSBg6Bc1Aae/ON6m2ZsusMyoY= - </data> <key>hash2</key> <data> TwgrVtdlg5ymXlTu1AUGCYsgADjaiPCfAw3xtP4Ni+0= @@ -361,10 +281,6 @@ </dict> <key>Headers/SPTAppRemoteUserCapabilities.h</key> <dict> - <key>hash</key> - <data> - On4cqNDucPiWZnxsw2L7e02TifQ= - </data> <key>hash2</key> <data> rgzoWbjiSQUKhTH4hzYJo1V4oOZ4xFWukaED0hRL7yw= @@ -372,10 +288,6 @@ </dict> <key>Headers/SPTConfiguration.h</key> <dict> - <key>hash</key> - <data> - wInZ+pQ74rpgg+DSyN9GdZEoRVI= - </data> <key>hash2</key> <data> KOEVP54qMgj9xnvGAjhJOZfDI84RSGqCmPCUA7D5qXs= @@ -383,10 +295,6 @@ </dict> <key>Headers/SPTError.h</key> <dict> - <key>hash</key> - <data> - Kj+zm7PGIYwZLO3nL5NfqmfXVXk= - </data> <key>hash2</key> <data> I3Wuh5U8eLBeuTGWV/yJYUs5Atyxua9PVcNY/2cngUw= @@ -394,10 +302,6 @@ </dict> <key>Headers/SPTLogin.h</key> <dict> - <key>hash</key> - <data> - ZPUkIqDFb0qI+2kxt9cwkiviDko= - </data> <key>hash2</key> <data> 3ztxaTf7CakFIb3Taz03z0g6SIig46Typzij8SFOjhQ= @@ -405,10 +309,6 @@ </dict> <key>Headers/SPTMacros.h</key> <dict> - <key>hash</key> - <data> - 2idMsqzDSas1N9J6xTuIf5w7ozI= - </data> <key>hash2</key> <data> UnnsQX3ImXUW0a1tx8DJP31c400JMOqw3gBvpITN3ZQ= @@ -416,10 +316,6 @@ </dict> <key>Headers/SPTScope.h</key> <dict> - <key>hash</key> - <data> - F575KcNSsah0efQcJ9NxqhMj1XU= - </data> <key>hash2</key> <data> oZRtWZZrHNdvliwGwMDUAH/E2Vm6ndbJY/bjqznGmMk= @@ -427,10 +323,6 @@ </dict> <key>Headers/SPTSession.h</key> <dict> - <key>hash</key> - <data> - tlKyXr4cYHsmCVT1Pirrn7YD35M= - </data> <key>hash2</key> <data> vBWbY6+HvUhHlV9tJR+cTDCIm7PX7qYms/CZ4o6rdE8= @@ -438,10 +330,6 @@ </dict> <key>Headers/SPTSessionManager.h</key> <dict> - <key>hash</key> - <data> - evF+aCKdg+ryTNUXk5Eik/6MNOk= - </data> <key>hash2</key> <data> p/WBdGNx2Obgjj9TAAjhS6QP/j80z8ShuFmr6uQdNZA= @@ -449,21 +337,13 @@ </dict> <key>Headers/SpotifyAppRemote.h</key> <dict> - <key>hash</key> - <data> - TCwc+uBsEd4YUZOvpso42XL5VyQ= - </data> <key>hash2</key> <data> - qmvRjoF49m2IoRzbsHDQHB2LJu8WgF14k9gGWPiBVvE= + 0ObwzhpBLFLDyQYujNSwdCRrHo9QoTRQWSOlQ82MHyM= </data> </dict> <key>Headers/SpotifyiOS.h</key> <dict> - <key>hash</key> - <data> - q2AWpJkisBaRyAAIh23bnigAQec= - </data> <key>hash2</key> <data> w/SJykKvp2r09Ybp14YnSuITltaCZXKnBTWeQ1NILHM= @@ -471,10 +351,6 @@ </dict> <key>Modules/module.modulemap</key> <dict> - <key>hash</key> - <data> - bSv5rrubzka9LTf5wONuMfVl89g= - </data> <key>hash2</key> <data> vR9YKCxR0961pUp2+RjzaFT70qVubKGYzMnmFbHJRXg= @@ -482,10 +358,6 @@ </dict> <key>PrivacyInfo.xcprivacy</key> <dict> - <key>hash</key> - <data> - AL1dh5ctObXBjoBiabSJ86M3HQs= - </data> <key>hash2</key> <data> WpuPwM3bECAbtHzCgEs/AExyUUdmItJb/E61TtRuEIQ= diff --git a/docs/auth.md b/docs/auth.md index e68ac74..18b178e 100644 --- a/docs/auth.md +++ b/docs/auth.md @@ -61,11 +61,5 @@ The main entry point for authentication if you need to authorize without startin */ SPTScope scope = SPTUserFollowReadScope | SPTAppRemoteControlScope; - if (@available(iOS 11, *)) { - // Use this on iOS 11 and above to take advantage of SFAuthenticationSession - [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption]; - } else { - // Use this on iOS versions < 11 to use SFSafariViewController - [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption presentingViewController:self]; - } + [self.sessionManager initiateSessionWithScope:scope options:SPTDefaultAuthorizationOption]; ``` diff --git a/docs/html/Blocks/SPTAppRemoteCallback.html b/docs/html/Blocks/SPTAppRemoteCallback.html index 37c9205..b22061e 100644 --- a/docs/html/Blocks/SPTAppRemoteCallback.html +++ b/docs/html/Blocks/SPTAppRemoteCallback.html @@ -112,7 +112,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTAppRemote.html b/docs/html/Classes/SPTAppRemote.html index fead8d6..e3dc356 100644 --- a/docs/html/Classes/SPTAppRemote.html +++ b/docs/html/Classes/SPTAppRemote.html @@ -92,13 +92,13 @@ <h1 id="library-title"> <option value="//api/name/authorizationParametersFromURL:">- authorizationParametersFromURL:</option> - <option value="//api/name/authorizeAndPlayURI:">- authorizeAndPlayURI:</option> + <option value="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:">- authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:</option> - <option value="//api/name/authorizeAndPlayURI:asRadio:">- authorizeAndPlayURI:asRadio:</option> + <option value="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:">- authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:</option> - <option value="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:">- authorizeAndPlayURI:asRadio:additionalScopes:</option> + <option value="//api/name/authorizeAndPlayURI:asRadio:completionHandler:">- authorizeAndPlayURI:asRadio:completionHandler:</option> - <option value="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:">- authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:</option> + <option value="//api/name/authorizeAndPlayURI:completionHandler:">- authorizeAndPlayURI:completionHandler:</option> <option value="//api/name/connect">- connect</option> @@ -596,7 +596,7 @@ <h3 class="method-title"><code><a href="#//api/name/connect">– connec <div class="method-subsection discussion-section"> <h4 class="method-subtitle">Discussion</h4> - <p>If the Spotify app is not running you will need to use <a href="#//api/name/authorizeAndPlayURI:">authorizeAndPlayURI:</a> to wake it up</p> + <p>If the Spotify app is not running you will need to use authorizeAndPlayURI: to wake it up</p> </div> @@ -641,7 +641,7 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <tr> <th scope="row" class="argument-name"><code>sessionIdentifier</code></th> <td><p>The unique session identifier which was used when calling -<a href="#//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:"><code>authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:</code></a></p></td> +<code>authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:</code></p></td> </tr> </table> @@ -655,7 +655,7 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <div class="method-subsection discussion-section"> <h4 class="method-subtitle">Discussion</h4> - <p>If the Spotify app is not running you will need to use <a href="#//api/name/authorizeAndPlayURI:">authorizeAndPlayURI:</a> to wake it up.</p><p>If <code>authorizeAndPlayURI</code> was used without a given session identifier, <a href="#//api/name/connect"><code>connect</code></a> should be used instead of this method.</p> + <p>If the Spotify app is not running you will need to use authorizeAndPlayURI: to wake it up.</p><p>If <code>authorizeAndPlayURI</code> was used without a given session identifier, <a href="#//api/name/connect"><code>connect</code></a> should be used instead of this method.</p> </div> @@ -714,8 +714,8 @@ <h4 class="method-subtitle">Declared In</h4> </div> </div> </div><div class="section-method"> - <a name="//api/name/authorizeAndPlayURI:" title="authorizeAndPlayURI:"></a> - <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:">– authorizeAndPlayURI:</a></code> + <a name="//api/name/authorizeAndPlayURI:completionHandler:" title="authorizeAndPlayURI:completionHandler:"></a> + <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:completionHandler:">– authorizeAndPlayURI:completionHandler:</a></code> </h3> <div class="method-info"> @@ -731,7 +731,7 @@ <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:">&ndash - <div class="method-subsection method-declaration"><code>- (BOOL)authorizeAndPlayURI:(NSString *)<em>URI</em></code></div> + <div class="method-subsection method-declaration"><code>- (void)authorizeAndPlayURI:(NSString *)<em>URI</em> completionHandler:(void ( ^ __nullable ) ( BOOL success ))<em>completionHandler</em></code></div> @@ -744,18 +744,19 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <td><p>The URI to play. Use a blank string to attempt to play the user’s last song</p></td> </tr> + <tr> + <th scope="row" class="argument-name"><code>completionHandler</code></th> + <td><p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>.</p> + +<p>Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if +the Spotify app is installed and can attempt to handle the authorization request.</p></td> + </tr> + </table> </div> - <div class="method-subsection return"> - <h4 class="method-subtitle parameter-title">Return Value</h4> - <p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>. -Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if -the Spotify app is installed and can attempt to handle the authorization request.</p> - </div> - @@ -775,8 +776,8 @@ <h4 class="method-subtitle">Declared In</h4> </div> </div> </div><div class="section-method"> - <a name="//api/name/authorizeAndPlayURI:asRadio:" title="authorizeAndPlayURI:asRadio:"></a> - <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:">– authorizeAndPlayURI:asRadio:</a></code> + <a name="//api/name/authorizeAndPlayURI:asRadio:completionHandler:" title="authorizeAndPlayURI:asRadio:completionHandler:"></a> + <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:completionHandler:">– authorizeAndPlayURI:asRadio:completionHandler:</a></code> </h3> <div class="method-info"> @@ -791,7 +792,7 @@ <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio: - <div class="method-subsection method-declaration"><code>- (BOOL)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em></code></div> + <div class="method-subsection method-declaration"><code>- (void)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em> completionHandler:(void ( ^ __nullable ) ( BOOL success ))<em>completionHandler</em></code></div> @@ -809,18 +810,19 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <td><p><code>YES</code> to start radio for the given URI.</p></td> </tr> + <tr> + <th scope="row" class="argument-name"><code>completionHandler</code></th> + <td><p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>.</p> + +<p>Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if +the Spotify app is installed and can attempt to handle the authorization request.</p></td> + </tr> + </table> </div> - <div class="method-subsection return"> - <h4 class="method-subtitle parameter-title">Return Value</h4> - <p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>. -Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if -the Spotify app is installed and can attempt to handle the authorization request.</p> - </div> - @@ -840,8 +842,8 @@ <h4 class="method-subtitle">Declared In</h4> </div> </div> </div><div class="section-method"> - <a name="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:" title="authorizeAndPlayURI:asRadio:additionalScopes:"></a> - <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:additionalScopes:">– authorizeAndPlayURI:asRadio:additionalScopes:</a></code> + <a name="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:" title="authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:"></a> + <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:">– authorizeAndPlayURI:asRadio:additionalScopes:completionHandler:</a></code> </h3> <div class="method-info"> @@ -856,7 +858,7 @@ <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio: - <div class="method-subsection method-declaration"><code>- (BOOL)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em> additionalScopes:(nullable NSArray<NSString*> *)<em>additionalScopes</em></code></div> + <div class="method-subsection method-declaration"><code>- (void)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em> additionalScopes:(nullable NSArray<NSString*> *)<em>additionalScopes</em> completionHandler:(void ( ^ __nullable ) ( BOOL success ))<em>completionHandler</em></code></div> @@ -879,18 +881,19 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <td><p>An array of scopes in addition to <code>app-remote-control</code>. Can be nil if you only need <code>app-remote-control</code></p></td> </tr> + <tr> + <th scope="row" class="argument-name"><code>completionHandler</code></th> + <td><p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>.</p> + +<p>Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if +the Spotify app is installed and can attempt to handle the authorization request.</p></td> + </tr> + </table> </div> - <div class="method-subsection return"> - <h4 class="method-subtitle parameter-title">Return Value</h4> - <p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>. -Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if -the Spotify app is installed and can attempt to handle the authorization request.</p> - </div> - @@ -910,8 +913,8 @@ <h4 class="method-subtitle">Declared In</h4> </div> </div> </div><div class="section-method"> - <a name="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:" title="authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:"></a> - <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:">– authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:</a></code> + <a name="//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:" title="authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:"></a> + <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:">– authorizeAndPlayURI:asRadio:additionalScopes:sessionIdentifier:completionHandler:</a></code> </h3> <div class="method-info"> @@ -926,7 +929,7 @@ <h3 class="method-title"><code><a href="#//api/name/authorizeAndPlayURI:asRadio: - <div class="method-subsection method-declaration"><code>- (BOOL)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em> additionalScopes:(nullable NSArray<NSString*> *)<em>additionalScopes</em> sessionIdentifier:(nullable NSUUID *)<em>sessionIdentifier</em></code></div> + <div class="method-subsection method-declaration"><code>- (void)authorizeAndPlayURI:(NSString *)<em>playURI</em> asRadio:(BOOL)<em>asRadio</em> additionalScopes:(nullable NSArray<NSString*> *)<em>additionalScopes</em> sessionIdentifier:(nullable NSUUID *)<em>sessionIdentifier</em> completionHandler:(void ( ^ __nullable ) ( BOOL success ))<em>completionHandler</em></code></div> @@ -956,18 +959,19 @@ <h4 class="method-subtitle parameter-title">Parameters</h4> <a href="#//api/name/connectWithSessionIdentifier:"><code>connectWithSessionIdentifier:</code></a>.</p></td> </tr> + <tr> + <th scope="row" class="argument-name"><code>completionHandler</code></th> + <td><p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>.</p> + +<p>Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if +the Spotify app is installed and can attempt to handle the authorization request.</p></td> + </tr> + </table> </div> - <div class="method-subsection return"> - <h4 class="method-subtitle parameter-title">Return Value</h4> - <p><code>YES</code> if the Spotify app is installed and an authorization attempt can be made, otherwise <code>NO</code>. -Note: The return <code>BOOL</code> here is not a measure of whether or not authentication succeeded, only a check if -the Spotify app is installed and can attempt to handle the authorization request.</p> - </div> - @@ -1296,7 +1300,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTAppRemoteConnectionParams.html b/docs/html/Classes/SPTAppRemoteConnectionParams.html index 6fdf651..a943bc2 100644 --- a/docs/html/Classes/SPTAppRemoteConnectionParams.html +++ b/docs/html/Classes/SPTAppRemoteConnectionParams.html @@ -462,7 +462,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTConfiguration.html b/docs/html/Classes/SPTConfiguration.html index 32252ef..3431d92 100644 --- a/docs/html/Classes/SPTConfiguration.html +++ b/docs/html/Classes/SPTConfiguration.html @@ -538,7 +538,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTError.html b/docs/html/Classes/SPTError.html index a1d395c..a0653ac 100644 --- a/docs/html/Classes/SPTError.html +++ b/docs/html/Classes/SPTError.html @@ -105,7 +105,7 @@ <h2 class="subtitle subtitle-overview">Overview</h2> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTSession.html b/docs/html/Classes/SPTSession.html index 9a8495f..4e790c3 100644 --- a/docs/html/Classes/SPTSession.html +++ b/docs/html/Classes/SPTSession.html @@ -343,7 +343,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Classes/SPTSessionManager.html b/docs/html/Classes/SPTSessionManager.html index fc09cf9..e47cb32 100644 --- a/docs/html/Classes/SPTSessionManager.html +++ b/docs/html/Classes/SPTSessionManager.html @@ -612,7 +612,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTAppRemoteConnectionParamsImageFormat.html b/docs/html/Constants/SPTAppRemoteConnectionParamsImageFormat.html index d02959c..62c18d7 100644 --- a/docs/html/Constants/SPTAppRemoteConnectionParamsImageFormat.html +++ b/docs/html/Constants/SPTAppRemoteConnectionParamsImageFormat.html @@ -178,7 +178,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTAppRemoteErrorCode.html b/docs/html/Constants/SPTAppRemoteErrorCode.html index daecadc..83e6711 100644 --- a/docs/html/Constants/SPTAppRemoteErrorCode.html +++ b/docs/html/Constants/SPTAppRemoteErrorCode.html @@ -235,7 +235,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTAppRemoteLogLevel.html b/docs/html/Constants/SPTAppRemoteLogLevel.html index 66bd172..c1067a5 100644 --- a/docs/html/Constants/SPTAppRemoteLogLevel.html +++ b/docs/html/Constants/SPTAppRemoteLogLevel.html @@ -197,7 +197,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTAppRemotePlaybackOptionsRepeatMode.html b/docs/html/Constants/SPTAppRemotePlaybackOptionsRepeatMode.html index bb2a253..0900a66 100644 --- a/docs/html/Constants/SPTAppRemotePlaybackOptionsRepeatMode.html +++ b/docs/html/Constants/SPTAppRemotePlaybackOptionsRepeatMode.html @@ -178,7 +178,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTAuthorizationOptions.html b/docs/html/Constants/SPTAuthorizationOptions.html index 51ab93a..6dd98e9 100644 --- a/docs/html/Constants/SPTAuthorizationOptions.html +++ b/docs/html/Constants/SPTAuthorizationOptions.html @@ -159,7 +159,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTErrorCode.html b/docs/html/Constants/SPTErrorCode.html index bb4fead..c613a1f 100644 --- a/docs/html/Constants/SPTErrorCode.html +++ b/docs/html/Constants/SPTErrorCode.html @@ -197,7 +197,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Constants/SPTScope.html b/docs/html/Constants/SPTScope.html index 9cb9e0d..915cfb5 100644 --- a/docs/html/Constants/SPTScope.html +++ b/docs/html/Constants/SPTScope.html @@ -502,7 +502,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteAlbum.html b/docs/html/Protocols/SPTAppRemoteAlbum.html index 9388e73..7161ee9 100644 --- a/docs/html/Protocols/SPTAppRemoteAlbum.html +++ b/docs/html/Protocols/SPTAppRemoteAlbum.html @@ -210,7 +210,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteArtist.html b/docs/html/Protocols/SPTAppRemoteArtist.html index b995d9a..b802f0d 100644 --- a/docs/html/Protocols/SPTAppRemoteArtist.html +++ b/docs/html/Protocols/SPTAppRemoteArtist.html @@ -210,7 +210,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteConnectivityAPI.html b/docs/html/Protocols/SPTAppRemoteConnectivityAPI.html index 34faba4..1317a47 100644 --- a/docs/html/Protocols/SPTAppRemoteConnectivityAPI.html +++ b/docs/html/Protocols/SPTAppRemoteConnectivityAPI.html @@ -289,7 +289,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteConnectivityAPIDelegate.html b/docs/html/Protocols/SPTAppRemoteConnectivityAPIDelegate.html index 09d5f2f..82386ae 100644 --- a/docs/html/Protocols/SPTAppRemoteConnectivityAPIDelegate.html +++ b/docs/html/Protocols/SPTAppRemoteConnectivityAPIDelegate.html @@ -184,7 +184,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteConnectivityState.html b/docs/html/Protocols/SPTAppRemoteConnectivityState.html index d3c42c7..7a26783 100644 --- a/docs/html/Protocols/SPTAppRemoteConnectivityState.html +++ b/docs/html/Protocols/SPTAppRemoteConnectivityState.html @@ -167,7 +167,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteContentAPI.html b/docs/html/Protocols/SPTAppRemoteContentAPI.html index 704b760..6d74960 100644 --- a/docs/html/Protocols/SPTAppRemoteContentAPI.html +++ b/docs/html/Protocols/SPTAppRemoteContentAPI.html @@ -393,7 +393,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteContentItem.html b/docs/html/Protocols/SPTAppRemoteContentItem.html index 18fe6aa..fb115f6 100644 --- a/docs/html/Protocols/SPTAppRemoteContentItem.html +++ b/docs/html/Protocols/SPTAppRemoteContentItem.html @@ -68,6 +68,8 @@ <h1 id="library-title"> <option value="//api/name/identifier">identifier</option> + <option value="//api/name/pinnned">pinnned</option> + <option value="//api/name/playable">playable</option> <option value="//api/name/subtitle">subtitle</option> @@ -448,6 +450,47 @@ <h3 class="method-title"><code><a href="#//api/name/container"> conta + <div class="method-subsection declared-in-section"> + <h4 class="method-subtitle">Declared In</h4> + <p><code class="declared-in-ref">SPTAppRemoteContentItem.h</code></p> + </div> + + + </div> + </div> +</div><div class="section-method"> + <a name="//api/name/pinnned" title="pinnned"></a> + <h3 class="method-title"><code><a href="#//api/name/pinnned"> pinnned</a></code> +<span class="task-item-suffix">required method</span></h3> + + <div class="method-info"> + <div class="pointy-thing"></div> + + <div class="method-info-container"> + + + <div class="method-subsection brief-description"> + <p>Returns <code>YES</code> if the item is pinned in Your Library, otherwise <code>NO</code>.</p> + </div> + + + + <div class="method-subsection method-declaration"><code>@property (nonatomic, assign, readonly, getter=isPinned) BOOL pinnned</code></div> + + + + + + + + + + + + + + + <div class="method-subsection declared-in-section"> <h4 class="method-subtitle">Declared In</h4> <p><code class="declared-in-ref">SPTAppRemoteContentItem.h</code></p> @@ -518,7 +561,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteCrossfadeState.html b/docs/html/Protocols/SPTAppRemoteCrossfadeState.html index 196ed95..8aecae7 100644 --- a/docs/html/Protocols/SPTAppRemoteCrossfadeState.html +++ b/docs/html/Protocols/SPTAppRemoteCrossfadeState.html @@ -210,7 +210,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteDelegate.html b/docs/html/Protocols/SPTAppRemoteDelegate.html index 7342687..dc76b91 100644 --- a/docs/html/Protocols/SPTAppRemoteDelegate.html +++ b/docs/html/Protocols/SPTAppRemoteDelegate.html @@ -306,7 +306,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteImageAPI.html b/docs/html/Protocols/SPTAppRemoteImageAPI.html index 22fde42..e78542c 100644 --- a/docs/html/Protocols/SPTAppRemoteImageAPI.html +++ b/docs/html/Protocols/SPTAppRemoteImageAPI.html @@ -190,7 +190,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteImageRepresentable.html b/docs/html/Protocols/SPTAppRemoteImageRepresentable.html index bbc9a8a..40938bd 100644 --- a/docs/html/Protocols/SPTAppRemoteImageRepresentable.html +++ b/docs/html/Protocols/SPTAppRemoteImageRepresentable.html @@ -168,7 +168,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteLibraryState.html b/docs/html/Protocols/SPTAppRemoteLibraryState.html index 07e6d25..54c6ed2 100644 --- a/docs/html/Protocols/SPTAppRemoteLibraryState.html +++ b/docs/html/Protocols/SPTAppRemoteLibraryState.html @@ -253,7 +253,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePlaybackOptions.html b/docs/html/Protocols/SPTAppRemotePlaybackOptions.html index 81ae6c0..f2b3bc5 100644 --- a/docs/html/Protocols/SPTAppRemotePlaybackOptions.html +++ b/docs/html/Protocols/SPTAppRemotePlaybackOptions.html @@ -210,7 +210,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePlaybackRestrictions.html b/docs/html/Protocols/SPTAppRemotePlaybackRestrictions.html index a30d973..56fdad2 100644 --- a/docs/html/Protocols/SPTAppRemotePlaybackRestrictions.html +++ b/docs/html/Protocols/SPTAppRemotePlaybackRestrictions.html @@ -382,7 +382,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePlayerAPI.html b/docs/html/Protocols/SPTAppRemotePlayerAPI.html index 3507872..571f228 100644 --- a/docs/html/Protocols/SPTAppRemotePlayerAPI.html +++ b/docs/html/Protocols/SPTAppRemotePlayerAPI.html @@ -1473,7 +1473,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePlayerState.html b/docs/html/Protocols/SPTAppRemotePlayerState.html index 243a27c..68d12aa 100644 --- a/docs/html/Protocols/SPTAppRemotePlayerState.html +++ b/docs/html/Protocols/SPTAppRemotePlayerState.html @@ -468,7 +468,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePlayerStateDelegate.html b/docs/html/Protocols/SPTAppRemotePlayerStateDelegate.html index e491329..39a263b 100644 --- a/docs/html/Protocols/SPTAppRemotePlayerStateDelegate.html +++ b/docs/html/Protocols/SPTAppRemotePlayerStateDelegate.html @@ -179,7 +179,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemotePodcastPlaybackSpeed.html b/docs/html/Protocols/SPTAppRemotePodcastPlaybackSpeed.html index 238256d..4acda10 100644 --- a/docs/html/Protocols/SPTAppRemotePodcastPlaybackSpeed.html +++ b/docs/html/Protocols/SPTAppRemotePodcastPlaybackSpeed.html @@ -167,7 +167,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteTrack.html b/docs/html/Protocols/SPTAppRemoteTrack.html index 09c0953..2899906 100644 --- a/docs/html/Protocols/SPTAppRemoteTrack.html +++ b/docs/html/Protocols/SPTAppRemoteTrack.html @@ -515,7 +515,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteUserAPI.html b/docs/html/Protocols/SPTAppRemoteUserAPI.html index d5d2ab5..42c1a72 100644 --- a/docs/html/Protocols/SPTAppRemoteUserAPI.html +++ b/docs/html/Protocols/SPTAppRemoteUserAPI.html @@ -540,7 +540,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteUserAPIDelegate.html b/docs/html/Protocols/SPTAppRemoteUserAPIDelegate.html index a4e4511..9b733a4 100644 --- a/docs/html/Protocols/SPTAppRemoteUserAPIDelegate.html +++ b/docs/html/Protocols/SPTAppRemoteUserAPIDelegate.html @@ -189,7 +189,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTAppRemoteUserCapabilities.html b/docs/html/Protocols/SPTAppRemoteUserCapabilities.html index 239903a..da7ba29 100644 --- a/docs/html/Protocols/SPTAppRemoteUserCapabilities.html +++ b/docs/html/Protocols/SPTAppRemoteUserCapabilities.html @@ -167,7 +167,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/Protocols/SPTSessionManagerDelegate.html b/docs/html/Protocols/SPTSessionManagerDelegate.html index d5eac7e..eae634b 100644 --- a/docs/html/Protocols/SPTSessionManagerDelegate.html +++ b/docs/html/Protocols/SPTSessionManagerDelegate.html @@ -371,7 +371,7 @@ <h4 class="method-subtitle">Declared In</h4> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/hierarchy.html b/docs/html/hierarchy.html index c7ccb2e..da3627f 100644 --- a/docs/html/hierarchy.html +++ b/docs/html/hierarchy.html @@ -156,7 +156,7 @@ <h2 class="index-title">Constant References</h2> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p> diff --git a/docs/html/index.html b/docs/html/index.html index 4802ccc..3e51529 100644 --- a/docs/html/index.html +++ b/docs/html/index.html @@ -150,7 +150,7 @@ <h2 class="index-title">Constant References</h2> <footer> <div class="footer-copyright"> - <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-04-15</p> + <p class="copyright">Copyright © 2024 Spotify. All rights reserved. Updated: 2024-05-08</p> <p class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.2.1 (build 1334)</a>.</p>