@kasumiiです。こんにちは。
以前、「ファイル読み込みでTi.Filesystem.getFileがundefinedになるときの簡単な解決方法」というエントリーで「謎現象が起きたらプロジェクトをクリーン!」と書きましたが、今回は別の現象で悩まされました。
iOSシミュレータでは動くけど実機転送に失敗する
今までは実機転送もちゃんとできてたのに、なぜか突然こんなエラーが出るようになってしまいました。
[ERROR] [ERROR] Error: Traceback (most recent call last): File "/Library/Application Support/Titanium/mobilesdk/osx/2.1.2.GA/iphone/builder.py", line 1460, in main execute_xcode("iphoneos%s" % iphone_version,args,False) File "/Library/Application Support/Titanium/mobilesdk/osx/2.1.2.GA/iphone/builder.py", line 1215, in execute_xcode output = run.run(args,False,False,o) File "/Library/Application Support/Titanium/mobilesdk/osx/2.1.2.GA/iphone/run.py", line 41, in run sys.exit(rc) SystemExit: 65
「SystemExit: 65」で検索→コメント部分が怪しいっぽい
ぐぐってみると以下のブログ記事を発見。どうやらコメントアウトした部分が怪しいっぽい……?
【参考】Titanium mobile SDK 1.8.0.1でSystemExit:65が出るとき – st44100’s blog
複数行コメント /* 〜 */ のなかでTi.APPとかTi.Blob、Ti.APIみたいな文字列があるとダメみたいだということ。
Titaniumはビルド時に大きなJSファイル分割を行うみたいなんだけど、この時 /^Ti\./ みたいなところで分割してるみたい。それが複数行コメントにたまたま要るとダメみたい。
で、怪しそうなコメントアウト部分を削除してみると、
おー!エラーが消えて実機に転送できた!!w
上記のブログ記事では複数行コメントのときって書いてあるけど、わたしの場合は一行コメントでも同様のエラーが起きました。
どんなコメントだとエラーになるのか?
いくつか試してみたところ、以下のコメントは特に影響なく実機転送できました。
// Ti.UI.setBackgroundColor('#fff');
// win = Ti.UI.createWindow();
// var file = Ti.Filesystem.getFile(Ti.Filesystem.resourcesDirectory, 'data.json');
// Ti.App.Properties.setString()を使う
エラーが発生したのは以下のようなコメントの場合。
// Ti.Blobを返す
この1行が入っていると必ず実機転送に失敗。で、この1行を消すと実機転送できるようになるっぽい。。なんでだろー。
ググってみると「SystemExit: 65」というエラーが出て実機転送できない原因は日本語のファイル名使っちゃってるとか他にもいろいろあるみたいですが、怪しげなコメントアウトがあったら削除してみると直る場合があるかもしれません。
はー。またひとつ勉強になりましたw