質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

6186閲覧

[Swift3.0 xcode8.0] カメラを呼び出す際の"devices()"が非推奨

ghana

総合スコア18

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/10/03 13:23

編集2016/10/03 13:34

###前提・実現したいこと
カメラを使ったアプリケーションの開発を行っています。
最近xcode8.0とiOS10.0にアップデートしました。アップデートをした初期は実機テストでアプリケーションが動いていることは確認できていましたが、つい最近コードを少々書き足したところで実機テストを行うと、
"Thread 6:signal SIGABRT"と出てしまいアプリが落ちてしまうようになりました。
storyboardの紐付けもしっかり確認しましたが、いたって正常でした。変更前のプロジェクトも試してみたのですが同じ結果でした。
そこで、もう一度コードを確認してみたところこのような警告が一つだけあって、もしやこれなのではないかと考えました。コード自体は参考にしている部分が多く、深く理解できていません。
そこで質問なのですが、代わりにAVCaptureDeviceDiscoverySessionを使うにはどのように変更すれば良いのでしょうか。

###発生している問題・エラーメッセージ

'devices()' was deprecated on iOS 10.0: Use AVCaptureDeviceDiscoverySession instead.

コードは以下のようになります。警告は let device = AVCaptureDevice.device()の行に現れました
また、ブレークポイントを付けて一つずつ確認したところ最後のreturn trueの次の } で先ほどのように止まってしまいました。
###該当のソースコード

//セッション キャプチャに関する入力と出力の管理 var mySession : AVCaptureSession! //カメラデバイス カメラやマイクといったデバイスそのものを表現 var myDevice : AVCaptureDevice! //出力先 サブクラス 動画フレームデータ var myOutput : AVCaptureVideoDataOutput! //SpeechSynthesizerクラス var talker = AVSpeechSynthesizer() override func viewDidLoad() { super.viewDidLoad() //カメラを準備 if initCamera(){ mySession.startRunning() } } // カメラの準備処理 func initCamera() -> Bool { // セッションの作成. mySession = AVCaptureSession() // 解像度の指定. mySession.sessionPreset = AVCaptureSessionPreset640x480 // デバイス一覧の取得. let devices = AVCaptureDevice.devices() // バックカメラをmyDeviceに格納. for device in devices! { //前面カメラを取得 //if(device.position == AVCaptureDevicePosition.Front){ //背面カメラの取得 if((device as AnyObject).position == AVCaptureDevicePosition.back){ myDevice = device as! AVCaptureDevice } } if myDevice == nil { return false } // バックカメラからVideoInputを取得. var myInput: AVCaptureDeviceInput! = nil do { myInput = try AVCaptureDeviceInput(device: myDevice) as AVCaptureDeviceInput } catch let error { print(error) } // セッションに追加. if mySession.canAddInput(myInput) { mySession.addInput(myInput) } else { return false } // 出力先を設定 myOutput = AVCaptureVideoDataOutput() myOutput.videoSettings = [ kCVPixelBufferPixelFormatTypeKey as AnyHashable: Int(kCVPixelFormatType_32BGRA) ] // FPSを設定 do { try myDevice.lockForConfiguration() myDevice.activeVideoMinFrameDuration = CMTimeMake(1, 30) myDevice.unlockForConfiguration() } catch let error { print("lock error: \(error)") return false } // デリゲートを設定 let queue: DispatchQueue = DispatchQueue(label: "myqueue", attributes: []) myOutput.setSampleBufferDelegate(self, queue: queue) // 遅れてきたフレームは無視するかしないか myOutput.alwaysDiscardsLateVideoFrames = true // セッションに追加. if mySession.canAddOutput(myOutput) { mySession.addOutput(myOutput) } else { return false } // カメラの向きを合わせる for connection in myOutput.connections { if let conn = connection as? AVCaptureConnection { if conn.isVideoOrientationSupported { conn.videoOrientation = AVCaptureVideoOrientation.portrait } } } return true }

お手数ですがご教授願います。
環境
iPhone5
xcode8.0
swift3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

記載されている警告へも対応したほうが良いとは思いますが、以下の事例に該当していませんか?
カメラ等を利用するアプリの場合、info.plistに権限(```Privacy - Camera Usage Description

[iOS10ではカメラアクセスなどの目的を明示しないと強制終了する](http://qiita.com/Takumi_Mori/items/f53c6eec1676d3df59dc)

投稿2016/10/03 14:45

takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ghana

2016/10/03 14:55

info.plistに明記したところ実機テストでの動作が確認できました!ありがとうございます このような勉強不足が見えるような質問に答えてくださってありがとうございました
takyafumin

2016/10/03 14:56

最近、全く同じ事象でハマったので回答させてもらいました。役に立てたようでよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問