web-dev-qa-db-ja.com

画像を写真ライブラリに保存しようとするとiOS 10アプリがクラッシュする

Swift 3(Xcode 8で作業しています)にある写真ライブラリに画像を保存しようとしています。

ViewControllerコード:

func shareImage(image: UIImage) {
    let items = [image]

    var activityVC: UIActivityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil)
    let excludeActivities: [UIActivityType] = [UIActivityType.airDrop,
                                               UIActivityType.assignToContact,
                                               UIActivityType.addToReadingList,
                                               UIActivityType.copyToPasteboard]

    activityVC.excludedActivityTypes = excludeActivities

    self.present(activityVC, animated: true, completion: nil)
}

アプリケーションを実行し、ボタンをクリックしてスクリーンショットを撮る(それを画像に変換する、...、すべて完璧に機能している)と、アプリはフォトライブラリへのアクセス許可を要求し、[OK]ボタンをタップします。そして、アプリがクラッシュします。画像はフォトライブラリに保存されません。

Xcodeから得られる唯一の手がかりは次のとおりです。

2016-09-28 11:24:27.216043 Ajax Kids[4143:1545362] [error] error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///var/mobile/Media/PhotoData/Photos.sqlite?readonly_shm=1 options:{
NSPersistentStoreFileProtectionKey = NSFileProtectionCompleteUntilFirstUserAuthentication;
NSReadOnlyPersistentStoreOption = 1;
NSSQLitePersistWALOption = 1;
NSSQLitePragmasOption =     {
    "journal_mode" = WAL;
};
} ... returned error Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo={reason=Failed to access file: 1} with userInfo dictionary {
reason = "Failed to access file: 1";
}
2016-09-28 11:24:27.216433 Ajax Kids[4143:1545362] [Migration] Unexpected error opening persistent store <private>, cannot attempt migration <private>)
2016-09-28 11:24:27.216568 Ajax Kids[4143:1545362] [Migration] Failed to open store <private>.  Requires update via assetsd (256: <private>)

誰かがこれを修正する方法を知っていますか?

前もって感謝します!

[〜#〜]更新[〜#〜]

ソーシャルメディアでの画像の共有は問題なく機能するため、画像をフォトライブラリに保存することで問題が特定されます。

20
Charlotte1993

新しいInfoPlist.stringsファイルに新しいレコードを追加します。

<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME)</string>

PD: iOS 11キー

45
Andrey Oshev

IOS 11には、NSPhotoLibraryAddUsageDescriptionに類似したNSPhotoLibraryUsageDescriptionという新しいプロパティがあります。 https://developer.Apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html を参照してください

13
Tiois

次のようなリクエスト権限を強制してみてください:

PHPhotoLibrary.requestAuthorization { status in
  if status == .authorized {
    //do things
  }
}

忘れないで import Photos。お役に立てれば。

1
Andrey M.

特定の事件で犯人を見つけた。分析とプッシュ通知にはLeanplumを使用しています。 Leanplum.syncResourcesAsyncメソッドが原因で、フォトライブラリのオープンがクラッシュしました。 Leanplumがユーザーの写真ライブラリにフックするために何かをしていることに気づかなかったので、見つけるのに数日かかりました...それ自体が心配です。

この特定のメソッドが提供する機能を使用していなかったため、メソッド呼び出しを削除するだけで写真ライブラリのクラッシュを停止できました。

0
SeanR