【问题标题】:NSPhotoLibraryUsageDescription key added to info.plist, still crashing due to privacy sensitive dataNSPhotoLibraryUsageDescription 键添加到 info.plist,由于隐私敏感数据仍然崩溃
【发布时间】:2017-11-10 05:37:52
【问题描述】:

尝试遵循 FoodTracker Apple 教程。代码 8.1。我得到了这个崩溃日志:

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)

我已经阅读了几篇关于 iOS 10 中缺少隐私密钥的帖子,因此我添加了所需的密钥...

隐私 - 照片库使用说明

...以及值列下的自定义消息。然而,当我点击图像时,我仍然会遇到同样的崩溃。任何帮助都会很棒。我很想完成本教程。

谢谢!

信息:

我还不能包含我的 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"
}
}

【问题讨论】:

  • 我目前也在做这个教程,我在使用图像选择器的部分。添加隐私密钥后,一切都对我有用。也许它会帮助你github.com/ronatory/food-tracker

标签: ios swift xcode info.plist


【解决方案1】:

您可能需要确保您的应用已获得权限。尽管您现在可能已经添加了 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

希望对你有帮助??

【讨论】:

  • 这只是部分正确。如果当前状态为“未确定”,则需要实际请求授权。
  • 感谢您的帮助。我试图清理它并构建它。也卸载了。在我的两台 Mac 上使用真实设备和模拟器时的行为相同。我什至刚刚从课程中下载了苹果项目。快把我逼疯了……
【解决方案2】:

FoodTracker项目下共有3个Info.plist文件。确保您正在编辑“FoodTracker”文件夹下的那个。此外,请确保该属性未在任何现有数组属性下级联。

【讨论】:

    猜你喜欢
    • 2018-04-18
    • 2019-09-05
    • 1970-01-01
    • 2017-02-11
    • 2017-05-13
    • 1970-01-01
    • 2020-01-11
    • 2017-01-25
    • 1970-01-01
    相关资源
    最近更新 更多