バンドルフォルダ(同梱ファイルとか)

macOSアプリが使えるフォルダは大きく5種類あります。

  1. アプリバンドル内(読み取り専用)
  2. Application Support(永続データ)
  3. Caches(キャッシュ・一時的)
  4. tmp(一時ファイル・超短命)
  5. ユーザーが明示的に選択したフォルダ(Security-Scoped)

キャンバスに送る画像・矢印アイコン・素材フォルダ
👉 ⑤ + 必要なら② がベストです。

① アプリバンドル内(Bundle)

特徴

  • ❌ 書き込み不可
  • ⭕ 読み取り専用
  • アプリに同梱する初期素材向け

向いている用途

  • デフォルト矢印
  • 初期スタンプ
  • UI用アイコン

② Application Support(最重要)

特徴

  • ⭕ 永続保存
  • ⭕ サンドボックスでも自由
  • ❌ Finderからは見えにくい

向いている用途

  • ユーザー素材
  • スクショ履歴
  • 保存したキャンバス画像
  • あなたの「ScreenshotSidebarView」の裏側保存先

取得方法

さらに

👉
「アプリが管理するフォルダ」= ここ

③ Caches(キャッシュ)

特徴

  • ⭕ 書き込み可
  • ❌ OSが勝手に消す
  • 再生成できるもの専用

向いている用途

  • OCRの中間画像
  • 一時レンダリング結果
  • プレビュー用画像

👉
「消えても困らない」ものだけ

④ tmp(一時ファイル)

特徴

  • ⏱ アプリ終了やOS都合で消える
  • Finder不可視

向いている用途

  • テキストエディタ保存時の一時ファイル
  • 書き出し直前の中間データ

👉
あなたが見かけた

テキストエディタ保存の際、一時ファイル

= ほぼ確実にここ

⑤ ユーザーが選択したフォルダ(重要)

NSOpenPanel / Folder Picker

特徴

  • ⭕ Finder上の任意フォルダ
  • ⭕ 画像素材フォルダに最適
  • ⚠️ Security-Scoped Bookmark 必須

向いている用途

  • 「素材フォルダA / B 切り替え」
  • ユーザー管理の画像集
  • 矢印・記号・スクショ置き場

Application Support フォルダへの自動保存

Sidebarにスクリーンショットのデータを並べてる例

フォルダを作る基本コード

"YourApp" はアプリ名と合わせるべき?

Bundle Identifier を使う(最強)

理由

  • アプリ名変更に強い
  • 同名アプリと衝突しない
  • App Store 審査でも好印象

👉 これが一番「macOSっぽい」

フォルダ名おすすめ度

方法おすすめ度
Bundle Identifier⭐⭐⭐⭐⭐
CFBundleName⭐⭐⭐⭐
固定文字列

用途別にファイル分け:

例:スクリーンショットを「撮った瞬間」に自動保存

ここに 1行足すだけで自動保存になります。

保存例

👉
Sidebarを閉じても、アプリ再起動しても復活可能

アプリ起動時に Sidebar を復元する

起動時ロード

👉
これだけで「常に履歴が残るアプリ」になる

「削除バージョン」

ここは 2パターンあります。

パターンA:URLが分かっている場合(最も安全)

保存時にURLも管理する設計

保存

削除

👉
Sidebarの削除 = ファイル削除
という綺麗な設計になります。

パターンB:画像から逆算する(非推奨)

⚠️

  • ファイル名の管理が地獄
  • 将来拡張しづらい

推奨(永続削除)

↑にした時のロード関数

並び順を「撮影順」にしたい場合

macOS は ディレクトリ列挙順を保証しません
スクショ履歴アプリなら、時系列順が自然です。

creationDate でソート

アプリ起動時の使い方

保存 → Sidebar → 削除の流れ(完成形)

保存

削除

同梱ファイル・フォルダのやり方

❌ リリース時に同梱する素材を
Application Support に「最初から置く」のは NG

✅ Bundle(アプリ内)に同梱し、
必要なら初回起動時に Application Support にコピーする

これが macOSアプリの正解ルートです。

なぜ Application Support に直接入れないのか

理由①

Application Support はインストール時には存在しない

  • App Store / dmg 配布時
  • そのフォルダは 初回起動で初めて作られる
  • 同梱不可能

理由②

アプリ更新時に消える可能性がある

  • バージョンアップ
  • クリーンインストール
  • Sandboxing の再構成

👉
初期素材は「配布物に含める」必要がある

正しい構成(これが王道)

1️⃣ アプリ Bundle に素材を入れる

Xcode
👉 Copy Bundle Resources に追加

2️⃣ 初回起動時だけ Application Support にコピー

判定フラグ

コピー処理

👉
これが「初期素材のインストール処理」

3️⃣ アプリ起動時に必ず呼ぶ

この設計のメリット(大事)

✅ Bundle

  • 読み取り専用
  • 配布保証
  • App Store 審査OK

✅ Application Support

  • ユーザー編集可能
  • 追加・削除・上書き自由
  • 将来の素材アップデートに対応

👉
「初期素材はアプリのもの」
「編集後はユーザーのもの」

コメント

タイトルとURLをコピーしました