2019年9月26日木曜日

iOS13でAVAudioPlayerが落ちるようになった

以下のようなコードでBGMやSEを鳴らすアプリをリリースしてたのだが、iOS13にアップデートしたら音を鳴らす所で落ちるようになってしまった。
もっと詳細には try player = AVAudioPlayer(contentsOf: url) 
Thread 1: EXC_BAD_ACCESS (code=1, address=0x48) - broken with 
というエラーコードで落ちた。リリースしていたアプリが落ちるのだから、iOS13のせいだ。

import UIKit
import AVFoundation

class ViewController: UIViewController {
var player = AVAudioPlayer()
override func viewDidLoad() {
super.viewDidLoad()
do {
if let audioPath = Bundle.main.path(forResource: "BGM", ofType: "mp3") {
let url = URL(fileURLWithPath: audioPath)
try player = AVAudioPlayer(contentsOf: url)
}
} catch {
print("ERROR")
}
self.player.play()
}
}

調べたところ、頭でインスタンス変数として宣言している
var player = AVAudioPlayer()
var player:AVAudioPlayer!
とoptionalにしたところ、落ちなくなった。

変数作る際に初期化コードを書いても初期化されなくなる仕様変更があったんだろうか? そうなるとAVAudioPlayer以外でも同じ問題出てくる?

参考サイト


2 件のコメント:

  1. はじめまして。AVAudioPlayerを使用する2つのアプリをリリースしている者です。

    今日、ちょうどアップデート申請をしたところ、トップページでAVAudioPlayerを使用している
    アプリで、クラッシュが原因で審査却下されていました。

    Xcode10+iOS12.4の実機で諸々確認していたため、原因・状況がわからなかったのですが、
    「iOS13にして色々なアプリが落ちるようになった」と訴える人が多いようだったので、
    Xcode11+iOS13実機にして再確認したところ、こちらの記事と同様のエラーが出ており、
    ネット検索したところ、こちらの記事にたどり着きました。

    私のアプリでも、var player:AVAudioPlayer! のように記述変更したところ、iOS13実機では
    無事正常な動作になっていたので、これで再度審査に出してみたいと思います。

    本当に助かりました、記事にしていただいてありがとうございました!!

    返信削除
  2. はじめまして!

    クライアントからチャット画面のボイスが再生できず落ちるという報告を受けて狼狽していたところこちらの記事に救われました。。。
    本当にありがとうございます!!!

    返信削除