將圖片儲存到 iOS 的 photo album

將圖片儲存到 iPhone 的 photo album 十分容易,只要以下兩行程式碼。

if let image = UIImage(named: "peter") {
UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil)
}

但是當我們在 iOS 11 啟動 App,執行照片儲存的程式時,App 卻會毫不留情地閃退 ! Console 的錯誤訊息說我們必須在 Info.plist 加上 NSPhotoLibraryAddUsageDescription。

DemoPhoto[22015:2053658] [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 NSPhotoLibraryAddUsageDescription key with a string value explaining to the user how the app uses this data.

閃退是因為權限的問題,我們想將圖片存到使用者私密的相簿,必須先跟使用者要求權限。

在 iOS 11,Apple 新增了 NSPhotoLibraryAddUsageDescription,當你的 App 想儲存照片到相簿時,必須透過它跟使用者說明原因 。因此,你只要在 App 的 Info 頁面,新增 Privacy — Photo Library Additions Usage Description,在它的 value 欄位跟使用者說明理由即可。

執行 App

也許有人想到,不是有另一個要求權限的 key 也跟照片有關,叫做 Privacy — Photo Library Usage Description ?

這兩者的差別如下:

  1. 寫入 photo album: 使用 Privacy — Photo Library Additions Usage Description。
  2. 讀取 photo album: 使用 Privacy — Photo Library Usage Description

不過 Photo Library Additions Usage Description 是 iOS 11 之後才有,所以對 iOS 11 之前的系統來說,不管是讀取或寫入,都是搭配 Photo Library Usage Description。因此,如果你的 App 需要儲存照片,而且又要支援 iOS 11 之前的版本,這兩種 key 都要設定,缺一不可。

參考資訊:

--

--

彼得潘的 iOS App Neverland
彼得潘的 Swift iOS App 開發問題解答集

彼得潘的iOS App程式設計入門,文組生的iOS App程式設計入門講師,彼得潘的 Swift 程式設計入門,App程式設計入門作者,http://apppeterpan.strikingly.com