2017-02-28 7 views
1

私はキーと文字列のメッセージを.plistに追加しましたが、なんらかの理由で私のアプリケーションがクラッシュし続けているのを知りません。私はswiftから.plistファイルに追加しました。また、手動でコードに追加しようとしました。それは私がその時点に達すると、まだクラッシュするアプリを実行するときに動作しません。Swift NSPhotoLibraryUsageDescriptionキーが読まない

https://useyourloaf.com/assets/images/2016/2016-07-03-001.png

エラーメッセージ:

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. 




import UIKit 
import Firebase 
import FirebaseStorage 
import KeychainSwift 


class UserProfile: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    //Username UI Label 
    @IBOutlet weak var changeImageButton: UIButton! 


    @IBOutlet weak var usernameLabel: UILabel! 
    @IBOutlet weak var userProfileImage: UIImageView! 

    var ref: FIRDatabaseReference! 
    var storage: FIRStorageReference! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     ref = FIRDatabase.database().reference() 
     storage = FIRStorage.storage().reference() 

     //Make Porfile Image Cirlce 
     userProfileImage.layer.cornerRadius = userProfileImage.frame.size.width/2 
     userProfileImage.clipsToBounds = true 

     let userID = FIRAuth.auth()?.currentUser?.uid 

     ref.child("Users").child(userID!).observeSingleEvent(of: .value, with: {(snapshot) in 

      let snapDict = snapshot.value as? NSDictionary 

      let username = snapDict?["Username"] as? String ?? "" //Get Username 


      //print("Username: " + username) 

      self.usernameLabel.text = username //Label set to UserName 


     }) 

    }//View Did load 


    @IBAction func choosePicture(_ sender: AnyObject) { 

     let pickerController = UIImagePickerController() 
     pickerController.allowsEditing = true 

     let alertController = UIAlertController(title: "Add Picture", message: "Choose From", preferredStyle: .actionSheet) 

     let cameraAction = UIAlertAction(title: "Camera", style: .default) { (action) in 
      pickerController.sourceType = .camera 
      self.present(pickerController, animated: true, completion: nil) 

    } 


     let photoLibraryAction = UIAlertAction(title: "Photo Library", style: .default) { (action) in 
      pickerController.sourceType = .photoLibrary 
      self.present(pickerController, animated: true, completion: nil) 
} 

     let savedPhotosAction = UIAlertAction(title: "Saved Photos Album", style: .default) { (action) in 
      pickerController.sourceType = .savedPhotosAlbum 
      self.present(pickerController, animated: true, completion: nil) 
     } 


     let cancelAction = UIAlertAction(title: "Cancel", style: .destructive, handler: nil) 
     alertController.addAction(cameraAction) 
     alertController.addAction(photoLibraryAction) 
     alertController.addAction(savedPhotosAction) 
     alertController.addAction(cancelAction) 
     present(alertController, animated: true, completion: nil) 


    }//END CHOOSE PICTURE 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController, didFinishPackageImage image: UIImage, editingInfo: [String : AnyObject]?) { 

     self.dismiss(animated: true, completion: nil) 
     self.userProfileImage.image = image 
    } 


    func updateProfilePicture() { 

     //Assign current user ID 
     let userID = FIRAuth.auth()?.currentUser?.uid 

     //Create an access point for the Firebase Storage 
     let storageItem = storage.child("profile_images").child(userID!) 

     guard let image = userProfileImage.image else {return} 

     if let newImage = UIImagePNGRepresentation(image) { 

      //upload to Firebase 
      storageItem.put(newImage, metadata: nil, completion: { (metadata, error) in 
       if error != nil{ 
       print(error!) 
       return 

      } 

       storageItem.downloadURL(completion: { (url, error) in if error != nil{ 
        print(error!) 
        return 
        } 
     }) 
    }) 

} 


} 


    //UI Button: Sign Out the User 
    @IBAction func SignOut(_ sender: UIButton) { 

     let firebaseAuth = FIRAuth.auth() 
        do { 
         try firebaseAuth?.signOut() 
        } catch let signOutError as NSError { 
         print ("Error signing out: %@", signOutError) 
        } 
        //KeychainSwift().delete("uid") 
        DataService().keyChain.delete("uid") 
        dismiss(animated: true , completion: nil) 
    } 








}//End UserProfile Class 
+0

これは私がシミュレータでテストしているためかもしれませんか?これはシミュレータで許可されていますか? – nil

答えて

2

でキーとあなたの説明としてNSPhotoLibraryUsageDescriptionを設定する必要があります。 "プライバシー写真ライブラリの利用"

+0

NOtは最新のiosで動作しました。何か非常にwierd – KOTIOS

+0

@MyMasterPeiceあなたは10.2という意味ですか? APIがまったく変更されていないので、これはうまくいくはずです。カメラを使用している場合は、カメラの「プライバシー - カメラ使用説明」と写真「プライバシー - 写真ライブラリ使用説明」の両方を尋ねる必要があります。値を入力する必要はありません。 – apineda

+0

私は両方の事実を試してみましたが、それは必要ではありませんが、メディアに関連するいくつかの権限も疲れましたが、それでもNSPhotoLibraryUsageDescriptionはinfo.plistで定義する必要があります。しかし、それはウォークリングではありません – KOTIOS

0

あなたは間違ったものを使用しているあなたのinfo.plist

関連する問題