Swift 4 で IOS 11.2 を更新:
AVPlayerを使用して音楽ファイルを再生している場合はMPNowPlayingInfoCenter.default()
、現在再生中の情報をロック画面に表示するように構成する必要があります。
以下のコードは、現在再生中のコントロールを画面に表示しますが、コマンドに応答することはできません。
コントロールも機能させたい場合は、こちらのアップルのサンプル プロジェクトを確認してください: https://developer.apple.com/library/content/samplecode/MPRemoteCommandSample/Introduction/Intro.html#//apple_ref/doc/uid/TP40017322
Apple のサンプル コードはすべてをカバーしていますが、わかりにくいと思います。
ロック画面でサウンドを再生してコントロールを表示する場合は、これらの手順で問題ありません。
重要な注意: AVPlayerを使用してサウンドを再生していない場合。サードパーティのライブラリを使用してサウンドを生成したり、サウンド ファイルを再生したりする場合は、コード内のコメントを読む必要があります。また、iOS シミュレーター 11.2 を使用している場合、ロック画面にコントロールが表示されません。デバイスを使用して動作を確認する必要があります。
1- プロジェクトを選択 -> 機能 -> バックグラウンド モードをオンに設定 -> Audio、AirPlay、Picture in Picture にチェックを入れる

2- AppDelegate.swiftファイルは次のようになります。
import UIKit
import AVFoundation
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate
{
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool
{
// Override point for customization after application launch.
do
{
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback)
try AVAudioSession.sharedInstance().setActive(true)
//!! IMPORTANT !!
/*
If you're using 3rd party libraries to play sound or generate sound you should
set sample rate manually here.
Otherwise you wont be able to hear any sound when you lock screen
*/
//try AVAudioSession.sharedInstance().setPreferredSampleRate(4096)
}
catch
{
print(error)
}
// This will enable to show nowplaying controls on lock screen
application.beginReceivingRemoteControlEvents()
return true
}
}
3- ViewController.swiftは次のようになります。
import UIKit
import AVFoundation
import MediaPlayer
class ViewController: UIViewController
{
var player : AVPlayer = AVPlayer()
override func viewDidLoad()
{
super.viewDidLoad()
let path = Bundle.main.path(forResource: "music", ofType: "mp3")
let url = URL(fileURLWithPath: path!)
// !! IMPORTANT !!
/*
If you are using 3rd party libraries to play sound
or generate sound you should always setNowPlayingInfo
before you create your player object.
right:
self.setNowPlayingInfo()
let notAVPlayer = SomePlayer()
wrong(You won't be able to see any controls on lock screen.):
let notAVPlayer = SomePlayer()
self.setNowPlayingInfo()
*/
self.setNowPlayingInfo()
self.player = AVPlayer(url: url)
}
func setNowPlayingInfo()
{
let nowPlayingInfoCenter = MPNowPlayingInfoCenter.default()
var nowPlayingInfo = nowPlayingInfoCenter.nowPlayingInfo ?? [String: Any]()
let title = "title"
let album = "album"
let artworkData = Data()
let image = UIImage(data: artworkData) ?? UIImage()
let artwork = MPMediaItemArtwork(boundsSize: image.size, requestHandler: { (_) -> UIImage in
return image
})
nowPlayingInfo[MPMediaItemPropertyTitle] = title
nowPlayingInfo[MPMediaItemPropertyAlbumTitle] = album
nowPlayingInfo[MPMediaItemPropertyArtwork] = artwork
nowPlayingInfoCenter.nowPlayingInfo = nowPlayingInfo
}
@IBAction func startPlayingButtonPressed(_ sender: Any)
{
self.player.play()
}
古い回答IOS 8.2:
パトリックの答えは完全に正しいです。
しかし、私はios 8.2のために何をするかを書くつもりです:
以下のように、アプリの info.plist に必要なバックグラウンド モードを追加します。

そして、私のAppDelegate.hにこれらのインポートを追加します:
#import <AVFoundation/AVFoundation.h>
#import <AudioToolbox/AudioToolbox.h>
次に、私のAppDelegate.mで、以下のように正確にアプリケーション didFinishLaunchingWithOptionsthisを書きました:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];
return YES;
}
画面がロックされていても、アプリは音楽を再生し続けます:)