ビルドの最後に、エラーでビルドが失敗してしまいました。
なお、このエラーが出るとビルドディレクトリを勝手に消されてしまうというおまけ付きです。
UnauthorizedAccessException: Access to the path "D:/unity/sample/Build" is denied.
System.IO.Directory.CreateDirectoriesInternal (System.String path) (at :0)
Windows で iOS をビルドすること自体、あまりないケースではあります。
対処法
(おそらく)unity がここしばらく抱えているバグで、理屈の通った対処法はないのですが、私は以下のようにして回避することができました。
その1:Mac でビルドする
Mac を xcode 専用機とせず、unity のビルドも行わせるという方法です。
Mac のスペックがそれなりであれば、この方法で問題ありませんでした。
その2:ビルドディレクトリの構成を工夫する
このエラー、なぜか Asset/ と同じパスに Build/ といったディレクトリを作り、ビルドすると発生しますが、Build/iOS/ のように階層を深くすると起こりませんでした。
unity プロジェクトを外れて、デスクトップに Build/ を作成し、ビルドした場合もエラーになりますが、Build/iOS/ にするとエラーは起こらず、ビルドできます。
その3:ビルドディレクトリを一旦けして、作り直す
ここからは今回の問題に類似した、一般的な問題にも触れておこうと思います。(一応)
製作者側になにかオペレーションミスがあった場合(読み取り専用属性つけちゃったり、管理者権限がない、等)、一旦ディレクトリを完全に消して、作り直せば上手くいくかもしれません。
番外:特定の dll が原因で UnauthorizedAccessException が出る場合
その dll ファイルがなんらかの拍子に読み取り専用になったりすると、こういうケースも考えられます。ファイルを探して、読み取り専用属性を外しましょう。
まっさらなプロジェクトでは発生しない
試してみたところまっさらなプロジェクトではエラーになりません。
気になったので、確認してみました。
まっさらなプロジェクトをビルド
問題なくビルド完了。
Addressable Asset System を入れ、空プレファブを登録してビルド
問題なくビルド完了。
AddressableAssetSettings の Compress Local Catalog、Optimize Catalog Size、Contiguous Bundles にチェック
Default Local Group の Bundle Naming を Use Hash of AssetBundle に。この状態でビルド
ここでエラー発生。
一つずつ元に戻しながらビルド
キャッシュが残っているためか、エラーは消えない。
Library/ を消して再起動
エラーは表示されたまま。もうあの頃へは帰れない…。
ここらへんで調べるのが面倒になり(ぇ)、その2の回避策で満足することにしました。
Android や PC ビルドでは起こらないので、iOS 固有の問題といえそうです。
Unity forum
結構困っている人がいるようですが、修正される気配はありません。。
「まっさらなプロジェクトでは起こらない」ので、開発側も問題を特定しづらいのかもしれません。
一応問題の起こった環境を、unity に提出しておきました。
英語が怪しすぎて通じない可能性あり