2017-04-30 9 views
7

私はビデオを共有しようとしています。PHAssetUIActivityController requestAVAssetを使用しています。これはメッセージングでは機能しますが、AirDropでは「失敗」と表示されません。UIActivityController経由でビデオPHAsを共有する

PHCachingImageManager.default().requestAVAsset(forVideo: asset, options: nil, resultHandler: 
    { (givenAsset, audioMix, info) in 

     let videoAsset = givenAsset as! AVURLAsset 
     let videoURL = videoAsset.url 

     DispatchQueue.main.async { 
      let activityViewController = UIActivityViewController(
       activityItems: [videoURL], 
       applicationActivities: nil) 
      activityViewController.excludedActivityTypes = [UIActivityType.saveToCameraRoll] 

      if let popoverPresentationController = activityViewController.popoverPresentationController { 
       popoverPresentationController.barButtonItem = (sender) 
      } 

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

これは正しくUIActivityControllerを設置し、唯一の特定の活動で動作するようです:

  • メッセージング - ✔️Worksは、適切にビデオをエクスポートします。
  • AirDrop - ✖️ShowsはDropboxの
  • を "失敗" - 適切なDropboxのビューアップ✖️Puts、まだ私は

enter image description here

答えて

4

を "不明なエラーが発生しました" と言いますPHAssetsで作業しているときにも同様に奇妙な振る舞いをします。私の推測では、これは(意図的に)文書化されていないセキュリティ/サンドボックス制限です。

私はこの問題を回避するために、基礎となるファイルをユーザーディレクトリにコピーし、コピーしたファイルに対して操作を実行しました。

私はこれをループで行いました。場合によっては、コピーが曖昧なファイルアクセス許可エラーで失敗することがあります。それが終わると、数秒後に再試行します(DispatchQueue.main.asyncAfterを使用)。最終的に、それは動作します!

+0

完了したらどのようにドキュメントフォルダから削除されていることを確認できましたか? – Gizmodo

+1

私はこれを2つの方法で行いました:1)私のユースケースがビデオをS3にアップロードしていました。私はそれが終わった時を知っていて、ファイルを削除することができました。 2)バックアップとして、(NSUserDefaultsの)コピーしたファイルのリストを保存し、アプリケーションの起動時に古いファイルを定期的に削除しました。また、(NSFileManager.URLForDirectory(.ItemReplacementDirectory ...)から取得した)一時ディレクトリにこれらのファイルを保存しました。最悪の場合、iOSによって最終的にファイルがクリーンアップされます。 –

+0

@Gizmodoは、あなたのために?ありがとう! –

関連する問題