概要
IOException: Write fault on path /XXXX/[Unknown] at System.IO.FileStream.WriteInternal (System.Byte[] src, System.Int32 offset, System.Int32 count) [0x00077] in <eae584ce26bc40229c1b1aa476bfa589>:0 at System.IO.FileStream.Write (System.Byte[] array, System.Int32 offset, System.Int32 count) [0x00090] in <eae584ce26bc40229c1b1aa476bfa589>:0
Play Asset Delivery を使用してビルドしようとしたら、
Windows では問題なかったが、Mac だと上記の例外が出て
ビルドできない現象に遭遇した
発生している場所は JarSigner.cs の JarSignerResponder クラスの
CheckAndRespond 関数内の以下の場所だった
// Use UTF8 to support non ASCII passwords var passwordBytes = Encoding.UTF8.GetBytes(password + Environment.NewLine); stdin.BaseStream.Write(passwordBytes, 0, passwordBytes.Length); // ★この場所で例外 stdin.BaseStream.Flush();
Play Asset Delivery では自動で jarsigner を実行するが、
キーストアのパスワードの入力時に上記の例外が出ているような状況だった
var arguments = string.Format( "-keystore {0} {1} {2} -storepass {3}", CommandLine.QuotePath(_keystoreName), CommandLine.QuotePath(zipFilePath), CommandLine.QuotePath(_keyaliasName), CommandLine.QuotePath(_keystorePass));
JarSigner.cs の JarSigner クラスの Sign 関数内で
jarsigner に渡すコマンドライン引数を生成している箇所で
上記のように -storepass
を指定するようにして
なおかつ JarSigner.cs の JarSignerResponder クラスの
CheckAndRespond 関数内の処理をすべて削除したら、
例外が発生しなくなり、正常に jarsigner の処理が完了するようになった
また、現象調査中に Mac の Terminal から直接 jarsigner を呼び出してみたら
「"jarsigner"がXXXXフォルダにアクセスしようとしています。」
というダイアログが表示されたので「OK」を押した
もしかしたらその対応も必須かもしれない