Я интегрирую наше приложение музыкальных сервисов с новой функцией ярлыков и застрял со странным поведением расширения SiriKit.Моя реализация INPlayMediaIntentHandling загружает музыкальные треки и начинает воспроизводить их с помощью AVPlayer, но расширение завершается с кодом 0 через 120 секунд при каждом запуске (консоль Xcode сообщает: «Программа завершилась с кодом выхода: 0»).Я попытался выполнить поиск, но документация Apple по этой теме пуста, и у сессии WWDC 2018 года есть только краткая информация для этого намерения.
На GitHub есть пример - https://github.com/beryu/SiriShortcutsSample, но он использует образцы Apple Music 30 секунд,Я пытался использовать его с длинным потоком mp3, но он работает как мое приложение и останавливается через 2 минуты.
Кто-нибудь успешно реализовал INPPlayMediaIntent?
Код IntentHandler
class IntentHandler: INExtension, INPlayMediaIntentHandling {
private var intentCompletion: Any?
@available(iOSApplicationExtension 12.0, *)
func handle(intent: INPlayMediaIntent, completion: @escaping (INPlayMediaIntentResponse) -> Void) {
intentCompletion = completion
switch intent.mediaContainer?.identifier {
case ShortcutsMeta.FavouritesIdentifier: startFavourites()
default: complete(.success);
}
}
@available(iOSApplicationExtension 12.0, *)
private func complete(_ resultCode: INPlayMediaIntentResponseCode) {
let userActivity = NSUserActivity(activityType: NSStringFromClass(INPlayMediaIntent.self))
let response = INPlayMediaIntentResponse(code: resultCode, userActivity: userActivity)
(intentCompletion as? ((INPlayMediaIntentResponse) -> Void))?(response)
intentCompletion = nil
}
override func handler(for intent: INIntent) -> Any {
return self
}
private func startFavourites() {
let command = IntentCommand(type: .favourites)
// this code loads track and calls AVPlayer to play it, then calls completion
command.run{ [weak self] (result: Bool) in
if #available(iOSApplicationExtension 12.0, *) {
self?.complete(result ? .success : .failure)
}
}
}
}