きゅぶろぐ

きゅぶんずの ぶろぐができて べんりだな

UnityのApplication.persistentDataPathのドキュメントは間違っている

この記事は、2022/03/26時点での情報です。


2022/03現在、Application.persistentDataPathのドキュメントは、
Unity2020.3 https://docs.unity3d.com/ja/2020.3/ScriptReference/Application-persistentDataPath.html
Unity2022.1 https://docs.unity3d.com/ja/2021.1/ScriptReference/Application-persistentDataPath.html
の2つが保守されているはずですが、
いずれも少なくともmac上での挙動が正しく記載されていないため注意が必要です。

mac上でのApplication.persistentDataPathの挙動

以下、Unity2020.3で検証したmac上でのApplication.persistentDataPathの挙動を紹介します。
挙動を確かめただけなので、これが全ての挙動なのかも不明です。

Unity Editor

まず、mac上で動作しているUnity Editor上での挙動です。

これはドキュメント通り必ず ~/Library/Application Support/{company name}/{product name} を返します。

mac向けにビルドしたアプリ

問題なのは、mac向けにビルドしたアプリの挙動です。

~/Library/Application Support/{company name}/{product name} が存在する場合、 ~/Library/Application Support/{company name}/{product name} を返します。
存在しない場合、~/Library/Application Support/{bundle id} を返します。
(ドキュメントに乗っている unity.{company name}.{product name} ではなく {bundle id} です。)

問題点

この挙動の問題点は、
開発者のmac上では ~/Library/Application Support/{company name}/{product name} が存在してしまっているため、
ビルドしたアプリでも ~/Library/Application Support/{company name}/{product name} を読み込んでしまい、
必ずそのパスを使うと勘違いしてしまう点です。
ドキュメントにもこの挙動のことは一言も書いていないので当然でしょう。

この問題は、数年前からフォーラムにいくつか書き込みがありますが明確な答えは得られておらず、謎に包まれた挙動となってしまっています。

フォーラム

forum.unity.com

forum.unity.com