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

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

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

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

Q&A

0回答

686閲覧

録音の承認を確認してリクエストする

isekiryu

総合スコア15

Xcode

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

0グッド

0クリップ

投稿2020/09/08 05:45

編集2020/09/08 12:49

前提・実現したいこと

appleのサイト(リンク内容)からのものです。

キャプチャの承認を確認してリクエストする
キャプチャセッションを設定する前に、必ずメソッドをテストしてください。ユーザーがキャプチャ権限をまだ付与または拒否していない場合、承認ステータスはです。この場合、メソッドを使用して、ユーザーにプロンプ​​トを表示するようにiOSに指示します。AVCaptureDevice authorizationStatus(for:)AVAuthorizationStatus.notDeterminedrequestAccess(for:completionHandler:)

上の文章がよくわかりません。

初めのアプリのinfo.plistの説明は、写真がついていたので、どこに設定すればいいかを把握できました。

しかし、キャプチャの承認を確認してリクエストするがわかりせん。
どこに以下のコードを挿入すればいいですか?

下記のコードにボイスメモを入れたいと思っています。
今はまだ、入れてません。

イメージ説明

イメージ説明

該当のソースコード

newTask

1 2// 3// newTask.swift 4// voiceAPP 5// 6// Created by user on 2020/09/06. 7// Copyright © 2020 user. All rights reserved. 8// 9 10import SwiftUI 11import AVFoundation 12 13 14 15 16struct newTask: View { 17 18 19 20 21 @State var task: String = "" 22 @State var task2: String = "" 23 @State var time: Date? = Date() 24 @State var category: Int16 = Entity.Category.ImpUrg_1st.rawValue 25 var categories: [Entity.Category] 26 = [.ImpUrg_1st, .ImpNUrg_2nd, .NImpUrg_3rd, .NImpNUrg_4th, .NImpNUrg_5th, .NImpNUrg_6th] 27 @Environment(.managedObjectContext) var viewContext 28 29 fileprivate func save() { 30 do { 31 try self.viewContext.save() 32 } catch { 33 let nserror = error as NSError 34 fatalError("Unresolved error (nserror), (nserror.userInfo)") 35 } 36 } 37 38 //enviromentは、 39 @Environment(.presentationMode) var presentationMode 40 var body: some View { 41 NavigationView { 42 Form { 43 Section(header: Text("タスク")) { 44 TextField("情報の入力", text: $task)} 45 46 47 48 49 50 Section(header: Toggle(isOn: Binding(isNotNil: $time, defaultValue: Date())){Text("時間設定")}) { 51 if time != nil { 52 DatePicker(selection: Binding($time, Date()), label: { Text("日時")}) 53 } else { 54 Text("時間未設定").foregroundColor(.secondary)}} 55 56 57 58 59 Picker(selection: $category, label: Text("種類")) { 60 ForEach(categories, id: .self) { category in 61 HStack { 62 CategoryImage(category) 63 Text(category.toString()) 64 }.tag(category.rawValue)}} 65 66 67 68 69 Section(header: Text("操作")) { 70 Button(action: { 71 self.presentationMode.wrappedValue.dismiss() 72 }) { 73 HStack(alignment: .center) { 74 Image(systemName: "minus.circle.fill") 75 Text("キャンセル") 76 }.foregroundColor(.red)}} 77 78 79 80 81 Section(header: Text("メモ")) { 82 TextField("メモ", text: $task2)} 83 84 85 86 }.navigationBarTitle("内容の追加") 87 .navigationBarItems(trailing: Button(action: { 88 Entity.create(in: self.viewContext, category: Entity.Category(rawValue: self.category) ?? .ImpUrg_1st, 89 task: self.task, time: self.time) //task2: self.task 90 91 92 93 94 95 self.save() 96 //dismissで画面を閉じる 97 self.presentationMode.wrappedValue.dismiss() 98 }) { 99 Text("保存") 100 }) 101 } 102 } 103} 104 105struct newTask_Previews: PreviewProvider { 106 static let context = (UIApplication.shared.delegate as! AppDelegate) 107 .persistentContainer.viewContext 108 static var previews: some View { 109 newTask() 110 .environment(.managedObjectContext, context) 111 } 112} 113 114

該当のソースコード

EditTask

1 2// 3// EditTask.swift 4// voiceAPP 5// 6// Created by user on 2020/09/07. 7// Copyright © 2020 user. All rights reserved. 8// 9 10import SwiftUI 11import AVFoundation 12 13 14struct EditTask: View { 15 @ObservedObject var todo: Entity 16 @State var showingSheet = false 17 var categories: [Entity.Category] 18 = [.ImpUrg_1st, .ImpNUrg_2nd, .NImpUrg_3rd, .NImpNUrg_4th, .NImpNUrg_5th, .NImpNUrg_6th] 19 @Environment(.managedObjectContext) var viewContext 20 21 fileprivate func save() { 22 do { 23 try self.viewContext.save() 24 } catch { 25 let nserror = error as NSError 26 fatalError("Unresolved error (nserror), (nserror.userInfo)") 27 } 28 } 29 30 fileprivate func delete() { 31 viewContext.delete(todo) 32 save() 33 } 34 35 //enviromentは、 36 37 @Environment(.presentationMode) var presentationMode 38 39 var body: some View { 40 41 Form { 42 Section(header: Text("タスク")) { 43 TextField("情報の入力", text: Binding($todo.task,"内容の編集")) 44 45 46 } 47 Section(header: Toggle(isOn: Binding(isNotNil: $todo.time, defaultValue: Date())){Text("時間設定")}) { 48 if todo.time != nil { 49 DatePicker(selection: Binding($todo.time, Date()), label: { Text("日時")}) 50 } else { 51 Text("時間未設定").foregroundColor(.secondary) 52 } 53 } 54 Picker(selection: $todo.category, label: Text("種類")) { 55 ForEach(categories, id: .self) { category in 56 HStack { 57 CategoryImage(category) 58 Text(category.toString()) 59 }.tag(category.rawValue) 60 } 61 } 62 63 Section(header: Text("メモ")) { 64 TextField("メモ", text: Binding($todo.task2,"メモ")) 65 } 66 67 68 Section(header: Text("操作")) { 69 Button(action: { 70 self.showingSheet = true 71 72 }) { 73 HStack(alignment: .center) { 74 Image(systemName: "minus.circle.fill") 75 Text("削除") 76 }.foregroundColor(.red)}} 77 78 79 80 81 82 }.navigationBarTitle("内容の編集") 83 .navigationBarItems(trailing: Button(action: { 84 self.save() 85 //dismissで画面を閉じる 86 self.presentationMode.wrappedValue.dismiss() 87 }) { 88 Text("閉じる") 89 }) 90 .actionSheet(isPresented: $showingSheet) { 91 ActionSheet(title: Text("タスクの削除"), message: Text("情報を削除します。よろしいですか?"), buttons: [.destructive(Text("削除")) { 92 self.delete() 93 self.presentationMode.wrappedValue.dismiss() 94 }, 95 .cancel(Text(" キャンセル")) 96 ]) 97 } 98 } 99} 100 101struct EditTask_Previews: PreviewProvider { 102 static let context = (UIApplication.shared.delegate as! AppDelegate) 103 .persistentContainer.viewContext 104 static var previews: some View { 105 let newTodo = Entity(context: context) 106 return NavigationView { 107 EditTask(todo: newTodo) 108 .environment(.managedObjectContext, context) 109 } 110 } 111} 112 113

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

TsukubaDepot

2020/09/08 06:13

> それがよくわかりません。 初めのアプリのinfo.plistの説明は、写真がついていたので、どこに設定すればいいかを把握できました。 この部分の、「写真がついていたので、どこに設定すればいいのかを把握できました」というのは、テキストか何かみて、同じようにやってみた、ということでしょうか。
isekiryu

2020/09/08 07:20

写真があり、自分のXcodeと画面が同じだったので、その通りにできたということです。
TsukubaDepot

2020/09/08 07:23

その「写真」というのが何らかの参考書であれば、そこに書かれていた手順と同じ手順で設定できます。 「 NSCameraUsageDescription 」というキー名で、任意の文字列(メッセージとして出したい文字列)をInfo.plist に入力すれば良いとおもいますが、いかがでしょうか。
isekiryu

2020/09/08 09:17

すみません。写真は他のサイトでした。 アプリがデバイスカメラを使用している場合は、アプリのInfo.plistファイルにNSCameraUsageDescriptionキーを含めます。 アプリがデバイスマイクを使用する場合は、アプリのInfo.plistファイルにNSMicrophoneUsageDescriptionキーを含めます。 上のものはできました。 キャプチャの承認を確認してリクエストする  ここからがどこにコードなどを入力するのかがわかりません。
TsukubaDepot

2020/09/08 10:23

では、現在までできているコードを「ご質問本文」に追記していただけますでしょうか。 それを見ないことには、どこまで記述できていて、どこが足りないのか判断できないので、ご協力よろしくお願いします。
isekiryu

2020/09/08 10:59

わかりました。 自分の作ったTodoアプリの編集画面で「タイトル、メモ」の記入できるものと合わせて音声を保存できる桃のを作りたいと思っています。
TsukubaDepot

2020/09/08 11:18

タグが「Swift」なので、Swiftの話だと思っていました。 これは「SwiftUI」なので、また異なった話になってくるかと思います。 私は SwiftUI での記述方法は知らないので、別の方の回答を得た方がいいかと思います。 ただ、このままだと質問が注目されないため、タグを「SwiftUI」に変更し、タイトルを「SwiftUIでキャプチャの承認を確認してリクエストする方法」など、もっとわかりやすいタイトルにしてみてはいかがでしょうか。
isekiryu

2020/09/08 12:14

了解です。ありがとうございます。変更します。
isekiryu

2020/09/08 12:41

書き忘れてましたが、私がやりたいことは、録音でした、
TsukubaDepot

2020/09/08 12:44

そうすると、質問タイトルとやりたいことが一致していないかと思います。 「キャプチャ」というと「撮影」と解釈されることが多いので、「キャプチャの承認を確認してリクエストする」ではなく、「録音の承認を確認してリクエストする」のほうがいいのではないでしょうか。
isekiryu

2020/09/08 12:49

了解です。直ちに変更します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問