0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Flutterにおけるファイル保存について for iOS

Last updated at Posted at 2025-03-05

はじめに

現在参加しているプロジェクトで、データ保存に関する重要な点に気づくことがありました。ファイルがどこに保存されているかを正確に理解していないと、仕様に合った実装ができず、大きなミスにつながる可能性があると学びましt。この記事では、iOSでファイルがどこに保存されているのか、また、どのようなディレクトリ指定方法があるのかについて説明します。少しでも参考になれば幸いです。

今回は「PathProvider」を使用してディレクトリパスの取得を実装しています。

PathProviderについては下記の記事を参考に理解を深めました。

https://qiita.com/haru-qiita/items/e564bc5ca3dd7d1ed0a8

📌 目次

  1. iOSのディレクトリ構成
  2. データ保存のメリット・デメリット
    1. アプリの一時保存領域(getTemporaryDirectory())
  3. アプリの永続保存領域(getApplicationDocumentsDirectory())
  4. まとめ

1. iOSのディレクトリ構成

まずiOSのディレクトリ構成について説明します。

1. Documents/

  • ユーザーが作成したファイル(画像、動画、音声)や、ユーザーに見せても良いファイルを保存する場所
  • iOSのファイルアプリから閲覧可能(アクセス許可のため info.plist の設定が必要)。
  • iCloudにバックアップされる。

2. Library/

  • ユーザーに見せたくないファイルを保存する場所。
  • UserDefaults に保存したデータもこのフォルダ内に格納される。
  • iCloudにバックアップされる(Caches/ を除く)。

3. Library/Caches

  • キャッシュ用のフォルダ。
  • tmp/ と似ているが、tmp/ より長期間保存される。
  • 定期的にシステムによって削除される。
  • iCloudにバックアップされない。

4. tmp/

  • 一時的なデータ保存用のフォルダ。
  • アプリ終了時にファイルを削除することを推奨。
  • アプリ再起動時にはファイルが削除される可能性があることを考慮する。
  • 定期的にシステムによって削除される。
  • iCloudにバックアップされない。

🔗公式サイトリンク

2. アプリの一時保存領域(getTemporaryDirectory()

用途

  • 一時的なデータ保存(アプリが閉じられると削除される可能性がある)
  • iOSでは tmp/ フォルダに格納される

パスの取得方法

import 'package:path_provider/path_provider.dart';
import 'dart:io';

Future<Directory> getTempDir() async {
  return await getTemporaryDirectory();
}

保存例

import 'dart:typed_data';
import 'dart:io';

Future<void> saveTempFile(Uint8List audioData) async {
  final tempDir = await getTemporaryDirectory();
  File file = File('${tempDir.path}/audio.wav');
  await file.writeAsBytes(audioData);
}

3. アプリの永続保存領域(getApplicationDocumentsDirectory()

用途

  • アプリが削除されるまでデータを保持する
  • iOSでは Documents/ フォルダに格納される

パスの取得方法

Future<Directory> getAppDocDir() async {
  return await getApplicationDocumentsDirectory();
}

保存例

Future<void> savePersistentFile(Uint8List audioData) async {
  final docDir = await getApplicationDocumentsDirectory();
  File file = File('${docDir.path}/audio.wav');
  await file.writeAsBytes(audioData);
}

まとめ

  • 一時的なデータ保存getTemporaryDirectory()(アプリ終了やシステムにより削除される可能性あり)
  • 永続的なデータ保存getApplicationDocumentsDirectory()(アプリ削除までデータ保持、iCloudバックアップ対象)
  • キャッシュ用途Library/Cachestmp/ よりも長期間保存可能、iCloudバックアップ対象外)
  • 完全な一時保存tmp/(アプリ終了時や再起動時に削除される可能性が高い)

アプリのデータ管理を適切に行い、ユーザー体験の向上を目指しましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?