渋谷ほととぎす通信

完全趣味でやってる技術メモ。※所属団体とは一切関係がありません。

Unity TouchScriptの実機ビルドエラーにハマる


Unityアセットストアには2013年頃から存在するTouchScript。
手軽にタップやドラッグ、ピンチインアウトなどの特にモバイルデバイスではよく必要とされるが、実装するのは少し面倒くさい、これらの機能をお手軽に追加することが出来るヘルパーアセットです。

僕が最後に触ったのは2014年頃。

久々にTouchScriptを導入する機会があり、その際にハマったポイントがあったので共有しておきます。

実機ビルドでコケる

ヌルヌルとUnityEditor上では気持ちよく動く状態まで実装しました。
ただ、ピンチインアウトなどは2本の指で実際に触ってみないと良さはわかりませんので、実機ビルドは必須です。 早速手持ちのiPhone6sで試してみようとXcodeで実行してみると以下のエラー。

UnauthorizedAccessException: Access to the path "/var/containers/Bundle/Application/ ID/hoge.app/TouchEvents.bin" is denied.
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode, System.IO.FileAccess access, System.IO.FileShare share, System.Int32 bufferSize, System.Boolean anonymous, System.IO.FileOptions options) [0x00000] in <00000000000000000000000000000000>:0 
  at System.IO.FileStream..ctor (System.String path, System.IO.FileMode mode) [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Debugging.Loggers.FileWriterLogger..ctor () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Debugging.TouchScriptDebugger.ClearPointerLogger () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.ScriptableObject.CreateInstance[T] () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Debugging.TouchScriptDebugger.get_Instance () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Core.TouchManagerInstance.Awake () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Core.TouchManagerInstance.get_Instance () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Core.LayerManagerInstance.Awake () [0x00000] in <00000000000000000000000000000000>:0 
  at UnityEngine.GameObject.AddComponent[T] () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Core.LayerManagerInstance.get_Instance () [0x00000] in <00000000000000000000000000000000>:0 
  at TouchScript.Layers.TouchLayer.Awake () [0x00000] in <00000000000000000000000000000000>:0 

原因はTOUCHSCRIPT_DEBUG定義

f:id:esakun:20190123201549p:plain:w450
Window > TouchScript > Settingsを実行すると、TouchScriptの設定画面が表示されます。

f:id:esakun:20190123201634p:plain:w450
この設定画面で上図のように、Enable Debug Modeにチェックを入れると、TOUCHSCRIPT_DEBUGシンボルが定義されてしまいます。

f:id:esakun:20190123201713p:plain:w450
このように。

まとめ

良かれと思ってデバッグモードにしましたが、実機ビルド時はTOUCHSCRIPT_DEBUGは外しましょう。

環境

  • Unity2018.3.2f1
  • TouchScript 9.0
  • iOS 12.1.2 iPhone6s

以上