というタイトルですが、コードではなく、デバイスの問題でした。
これに気づかず、1日無駄にしました _:(´ཀ`」 ∠):_
技術系の内容からは少々脱線しているので、バグ解決したいんじゃボケって方は「デバイスを変えてみてください」ってことで。笑
前提条件
・Xcode11.4.1
・Swift5
・AVFoundation を使った静止画撮影
・実機デバイス(iPhoneXR, iPhone7Plus)
実機テストやデバッグでは以前使っていたデバイス(iPhone7Plus)をメインで使い、実装が落ち着いたら iPhoneXR を使っていました。
クラッシュしたコード
初期化の段階でクラッシュしたのですが、一応コード載せます。笑
1 2 3 4 5 6 7 8 9 |
do { let captureDeviceInput = try AVCaptureDeviceInput(device: device) // ここでクラッシュ self.captureSession.addInput(captureDeviceInput) . . . } catch { print(error.localizedDescription) } |
初期化でクラッシュの時点でワロチなのですが、謎なのは普通に撮影できる時もあるということ。
クラッシュ時のログは、
Message from debugger: Terminated due to memory issue
と吐かれます。お察しの通り、メモリの問題と吐かれてます。
AVCaptureDeviceInput を初期化する段階 = カメラを立ち上げる「準備」をしただけ。
どんなメモリの使い方よってマジで言いました。
原因
まさかの端末でした。
原因が分からず、まじおわたーと思いながら、1日が過ぎることに心も無になりつつ、なんとなく iPhoneXR に転送したら、普通に動いたんです。
どうせ数回試したらクラッシュするんだろーなーと思ったら、全然クラッシュしないんです。
まさか…と思い、iPhone7Plus で他のカメラアプリを起動したんです。
br>
br>
クラッシュ ヽ(ヅ)ノ
br>
br>
純正カメラなら…と思って起動。
br>
br>
クラッシュ ヽ(ヅ)ノ
br>
br>
お前かーいってなりました。
盲点すぎると同時に、解放感がハンパなかったですwww(それくらい謎だった)
未修理の iPhone7Plus を使っている人が家族内にいたので、借りて転送したところ、クラッシュせずに動きました。
クラッシュした端末について
このクラッシュした端末、iPhoneXR へ機種変したと同時期にディスプレイ修理に出したんです。
AppleStoreではない非正規修理店に。
開発者のみんなそうだと思いますが、古い端末はテスト端末になるじゃないですか。
でもディスプレイがバッキバキだったんですよ。(泥酔落下)
数万円払ってテスト端末のディスプレイ綺麗にするという財力はないので、1万いかないくらいで綺麗にしてくれる非正規修理店で直すことにしたんです。
非正規って言っても、一応総務省の登録修理業者に認定されているので、なんの許可も取っていない激安修理店ではありません。
(激安修理店だと3千円以下で修理してくれます…)
クレーム言いたい!とかクソ店舗!なんて思っていませんが、受け取りの際はカメラも確認してください。
さいごに
技術系の内容とはちょっと違いまいますが、AVCaptureDeviceInput の初期化でクラッシュしてる方、未修理端末で確認してみてください!
企業でも非正規で修理頼んだ端末とかもあると思うので、非正規で修理したのなら、それも管理した方がよさげ。
シミュレータで確認できない部分なので、気付くまで時間かかりました…(ノдヽ)
コメント