2016-11-06 14 views
1

FoodTrackerアップルのチュートリアルに従おうとしています。 xCode 8.1。私はiOSの10で、プライバシーキーが欠落上のいくつかの記事を読んだことがある、と私は、必要なキーを追加NSPhotoLibraryUsageDescriptionキーがinfo.plistに追加されましたが、プライバシーに敏感なデータのためにクラッシュします

2016-11-06 16:49:17.922832 FoodTracker[2307:660318] [access] This app has crashed because it attempted to access privacy-sensitive data without a usage description. The app's Info.plist must contain an NSPhotoLibraryUsageDescription key with a string value explaining to the user how the app uses this data. 

(lldb)

...

プライバシー - フォトライブラリ:私はこのcrashlogを取得します使用法説明

...値の列の下にカスタムメッセージがあります。それでもイメージをタップすると、私は同じクラッシュを取得します。どんな助けも素晴らしいだろう。私はこのチュートリアルを終了したいと思います。

ありがとうございます!

INFO:

私はここに、まだ私のInfo.plistのスクリーンショットを含めることはできませんが、スクリーンショットへのリンクです:

screenshot of info.plist

ここでは念のために私のViewController.swiftです。

import UIKit 

class ViewController: UIViewController, UITextFieldDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

// MARK: Properties 

@IBOutlet weak var nameTextField: UITextField! 
@IBOutlet weak var mealNameLabel: UILabel! 
@IBOutlet weak var photoImageView: UIImageView! 

override func viewDidLoad() { 
    super.viewDidLoad() 

    nameTextField.delegate = self 
} 

// MARK: UITextFieldDelegate 
func textFieldShouldReturn(_ textField: UITextField) -> Bool { 

    // Hide the keyboard 
    textField.resignFirstResponder() 

    return true 
} 

func textFieldDidEndEditing(_ textField: UITextField) { 

    mealNameLabel.text = textField.text 
} 

// MARK: UIImageControllerDelegate 
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 

    dismiss(animated: true, completion: (nil)) 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    let selectedImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    photoImageView.image = selectedImage 
    dismiss(animated: true, completion: (nil)) 
} 

// MARK: Actions 
@IBAction func selectImageFromPhotoLibrary(_ sender: UITapGestureRecognizer) { 

    nameTextField.resignFirstResponder() 
    let imagePickerController = UIImagePickerController() 
    imagePickerController.sourceType = .photoLibrary 
    imagePickerController.delegate = self 
    present(imagePickerController, animated: true, completion: nil) 
} 

@IBAction func setDefaultLabelText(_ sender: UIButton) { 

    mealNameLabel.text = "Default Text" 
} 
} 
+0

私は現在チュートリアルもやっていますが、私はImage Pickerのセクションにあります。私はプライバシーキーを追加した後、すべて私のために働く。たぶんそれはあなたを助けるhttps://github.com/ronatory/food-tracker – ronatory

答えて

0

あなたのアプリに許可が与えられていることを確認する必要があります。 info.plistの文字列を追加したかもしれませんが、あなたのデバイス上で既にアプリを実行しているので、エラーが発生している可能性があります。私はきれいにすることをお勧めします。派生データ "ショートカット" Command + Option + Sift + kを削除し、デバイスからアプリケーションを削除し、再度ビルド/実行してください。それでも問題が解決しない場合は、実際にそのソースを使用できるかどうかを調べる必要があります。

func pickPhoto() { 
    if UIImagePickerController.isSourceTypeAvailable(.camera) { 
     showPhotoMenu() 
    } else { 
     choosePhotoFromLibrary() 
    } 
} 

実際のデバイスと同じように、シミュレータを使用している場合は、実際にはカメラが搭載されていないためです。これはクラッシュを引き起こします。それで解決できない場合は、そのメディアタイプの権限をチェックするだけです。

let status = AVCaptureDevice.authorizationStatus(forMediaType: AVMediaTypeVideo) 
    if status == AVAuthorizationStatus.denied { 
let changeYourSettingsAlert = UIAlertController(title: "You do not have permissions enabled for this.", message: "Would you like to change them in settings?", preferredStyle: .alert) 
    let okAction = UIAlertAction(title: "OK", style: .default, handler: { (UIAlertAction) -> Void in 
    guard let url = URL(string: UIApplicationOpenSettingsURLString) else {return} 
    UIApplication.shared.openURL(url) 
    }) 
    let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)   
     changeYourSettingsAlert.addAction(okAction) 
     changeYourSettingsAlert.addAction(cancelAction) 
     presentAlert(sender: changeYourSettingsAlert) 
} 

残りの半分は、ユーザにSettingsを開くオプションを与える方法です。

私は3つのInfo.plistファイルの合計がFoodTrackerプロジェクトの下にあり、それは幸運

+0

これは部分的にのみ正しいです。現在のステータスが「未決定」の場合は、実際に認可を要求する必要があります。 – rmaddy

+0

助けてくれてありがとう。私はそれをきれいにしようとし、それを構築しようとしています。それもアンインストールしました。実際のデバイスを搭載した私のMacとシミュレータの両方で同じ動作。私はちょうどレッスンのようにリンゴプロジェクトをダウンロードしたばかりです。私を運転するナッツ... – user1269290

0

に役立ちます願っています。 'FoodTracker'フォルダの下にあるものを編集していることを確認してください。また、既存の配列プロパティでプロパティがカスケードされていないことを確認してください。

関連する問題