I am using iTunes Search API in my application & playing the previewUrl songs from within the application by using
AVPlayer
Here is the update posted for iOS 9.3 that has info about accessing the Music Library and adding Apple Music tracks... https://developer.apple.com/library/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9_3.html
@"Ted Hosmann" Thanks for reply .
I would like to share some code from here
viewcontroller.m
@import StoreKit;
-(void) submitAppleMusicTrackWithProductID: (NSString *) productID // productID in US is the last numbers after i= in the share URL from Apple Music
{
NSLog(@"submitAppleMusic has been called for productID: %@", productID);
[SKCloudServiceController requestAuthorization:^(SKCloudServiceAuthorizationStatus status) {
NSLog(@"status is %ld", (long)status);
SKCloudServiceController *cloudServiceController;
cloudServiceController = [[SKCloudServiceController alloc] init];
[cloudServiceController requestCapabilitiesWithCompletionHandler:^(SKCloudServiceCapability capabilities, NSError * _Nullable error) {
NSLog(@"%lu %@", (unsigned long)capabilities, error);
if (capabilities >= SKCloudServiceCapabilityAddToCloudMusicLibrary)
{
NSLog(@"You CAN add to iCloud!");
[[MPMediaLibrary defaultMediaLibrary] addItemWithProductID:productID completionHandler:^(NSArray<__kindof MPMediaEntity *> * _Nonnull entities, NSError * _Nullable error)
{
NSLog(@"added id%@ entities: %@ and error is %@", productID, entities, error);
NSArray *tracksToPlay = [NSArray arrayWithObject:productID];
[[MPMusicPlayerController systemMusicPlayer] setQueueWithStoreIDs:tracksToPlay];
[[MPMusicPlayerController systemMusicPlayer] play];
[self performSelectorOnMainThread:@selector(getInfoFromAddedAppleMusicTrack:) withObject:productID waitUntilDone:YES];
}];
}
else
{
NSLog(@"Blast! The ability to add Apple Music track is not there. sigh.");
}
}];
}];
}
-(void) getInfoFromAddedAppleMusicTrack: (NSString *) productID
{
NSLog(@"FYI - musicplayer duration is: %f", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] playbackDuration]);
//need to check for both the nowPlaying item and if there is a reported playbackDuration, as there is a variable time between a storeMediaItema and a concreteMediaItem
if (([[MPMusicPlayerController systemMusicPlayer] nowPlayingItem]) && ([[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] playbackDuration]))
{
NSLog(@"Media item is playing: %@",[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem]);
NSLog(@"appleProductIDURL: %@",productID);
NSLog(@"Ending time: %d",[[[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyPlaybackDuration] intValue]);
NSLog(@"Track Name: %@", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyTitle]);
NSLog(@"Artists Name: %@", [[[MPMusicPlayerController systemMusicPlayer] nowPlayingItem] valueForProperty:MPMediaItemPropertyArtist]);
}
else
{
NSLog(@"seems the track is not fully loaded so try again in 1 second");
[self performSelector:@selector(getInfoFromAddedAppleMusicTrack:) withObject:productID afterDelay:1.0];
// count loops and jump out if something is wrong - I've never seen more that 7 seconds needed
}
}