回答編集履歴
1
サンプルのコードを追記しました。
test
CHANGED
@@ -8,3 +8,62 @@
|
|
8
8
|
Documentsはディレクトリですので、
|
9
9
|
stringByAppendingPathComponentでファイルを指定する形になっているみたいです。
|
10
10
|
|
11
|
+
### 追記です。
|
12
|
+
|
13
|
+
|
14
|
+
コメントありがとうございます。
|
15
|
+
サンプルコードも含めて追記します。
|
16
|
+
|
17
|
+
|
18
|
+
> 他の青アプリで当該URL(...mp4)をダウンロードしたり保存することは可能です。
|
19
|
+
こちらはmp4ファイル自体は問題なさそうなのですね。
|
20
|
+
関係しているかわからないので念の為の確認ですが、ファイルサイズはどれくらいでしょうか?
|
21
|
+
|
22
|
+
|
23
|
+
> ちょっとわからなくなってきました、、
|
24
|
+
一度に全ての問題を対処しようとすると混乱してしまいますので、
|
25
|
+
1つずつゆっくり確認すると良いと思います。
|
26
|
+
|
27
|
+
|
28
|
+
処理の流れは次のような感じになりますので、
|
29
|
+
上から順番に、それぞれのポイントで正しく処理ができているか
|
30
|
+
確認してみると良いと思います。
|
31
|
+
|
32
|
+
1. mp4ファイルダウンロード
|
33
|
+
2. ドキュメントディレクトリに保存する([Product]-[Run]するたびにアプリのディレクトリが変わる?ため注意)
|
34
|
+
3. 写真アプリに保存する
|
35
|
+
|
36
|
+
|
37
|
+
ちょっと細かい実装は違いますが、
|
38
|
+
手元の環境(Xcode 14.0)で再現確認したコードも記載しておきます。
|
39
|
+
|
40
|
+
```swift
|
41
|
+
func action() {
|
42
|
+
Task {
|
43
|
+
// ダウンロード
|
44
|
+
let url = URL(string: "http://localhost:1313/test.mp4")!
|
45
|
+
let (data, response) = try await URLSession.shared.data(from: url)
|
46
|
+
guard let httpResponse = response as? HTTPURLResponse,
|
47
|
+
httpResponse.statusCode == 200 else {
|
48
|
+
print("response: \(response)")
|
49
|
+
return
|
50
|
+
}
|
51
|
+
// ドキュメントディレクトリに保存する
|
52
|
+
let urlDocumentDirectory = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
|
53
|
+
let urlFilePath = urlDocumentDirectory.appendingPathComponent("download.mp4")
|
54
|
+
print(urlFilePath)
|
55
|
+
try! data.write(to: urlFilePath)
|
56
|
+
// 写真アプリに保存する
|
57
|
+
PHPhotoLibrary.shared().performChanges {
|
58
|
+
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: urlFilePath)
|
59
|
+
} completionHandler: { success, error in
|
60
|
+
if let error = error {
|
61
|
+
print("error: \(error)")
|
62
|
+
return
|
63
|
+
}
|
64
|
+
print("success: \(success)")
|
65
|
+
}
|
66
|
+
}
|
67
|
+
}
|
68
|
+
```
|
69
|
+
|