unityでタイトルのようなエラーが出たので調べた内容をメモ。
該当のファイルを確認すると確かに存在していたがファイルサイズが明らかに小さすぎる。なので中身を確認するとgit lfsのメタファイルになっていた。こういうやつ。
version https://git-lfs.github.com/spec/v1 oid sha256:44a8486abdf0330a3fe6b586e407506e738fe075fe0b5dfc43961e358fda7206 size 2684586
ドキュメントに従ってpackage managerのログを見てみる
# ~/Library/Logs/Unity/upm.log [ERROR] Error when executing Git command: git lfs pull --include <package path> - message: `/usr/bin/git lfs pull --include <package path>` failed with code 1 - stderr: git: 'lfs' is not a git command. See 'git --help'. ...
lfsが見つからないという状態だった。
気になるのは /usr/bin/git
を呼んでいる点。おそらくpackage managerには自分のシェルで設定しているPATHは通ってないので、デフォルトのものを参照していると考えられる。
ちなみに自分のシェルで確認するとちゃんとlfsもインストールされてるように見える。
$ /usr/bin/git lfs version git-lfs/3.2.0 (GitHub; darwin arm64; go 1.18.2)
しばらく考えつついろいろ見てると、brewでインストールしたgitも同じversionのlfsを使っていることに気づく。
$ /opt/homebrew/bin/git lfs version git-lfs/3.2.0 (GitHub; darwin arm64; go 1.18.2)
/opt/homebrew/bin
にPATHを通さずに実行してみると
$ /usr/bin/git lfs version git: 'lfs' is not a git command. See 'git --help'.
ということで、gitコマンド内でPATHを参照してlfsにアクセスしているということだった。なのでPATHの設定がされていないpackage managerだと当然見つからない。
ここでようやく気づいたが、git lfsはgit-lfsという実体を呼んでいるだけだった。でgit-lfsはbrewでインスールしてあるので/opt/homebrew/bin
にある。
よって以下のどちらかで解決できそう
一つ目の方法を少し調べてみたがこのようなFAQが見つかった
環境変数を設定した状態で Unity を起動するにはどうすればいいですか? – Unity
wrapperスクリプトを書いて呼び出せとのこと。それは面倒なので2つ目の方法でとりあえず解決することに。
.zprofileや.zshrcなどの設定ファイルを除いてから起動したシェルでPATHを確認するとこうなっていた。
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Frameworks/Mono.framework/Versions/Current/Commands
なので/usr/local/bin
にシンボリックリンクを貼っておく。
ln -s /usr/local/bin/git-lfs /opt/homebrew/bin/git-lfs
これでupm.logのエラーは出なくなり、dllは正しく解決されて実体がダウンロードできた。
ちなみにapple siliconの場合に/opt/homebrew/bin
が使われるのはrosetta2との共存のためとのこと。
intel macの場合、デフォルトでbrewが/usr/local/bin
にシンボリックリンクを貼ってくれていたために労せず動いてたということだった。
apple silicon対応のために/usr/local/bin
はrosseta2用になったのでシンボリックリンクは貼られず、今回のようなことが起きるということがわかった。
他のツール利用時でもこれと同じことに引っかかるのは目に見えてるので今度あればこのあたりを疑ってみることにする。