2016年3月2日水曜日

[iOS開発] APPNAME was compiled with optimization - stepping may behave oddly; variables may not be available.

久しぶりにアプリを改造していたら、表題のエラーが発生。


 検索してみるが、いまいち、的を得た内容がない。 完全な解決に至っていないので、まだ調査中ということになりますが、後世?のために何をしたかを記載しときます。


エラーメッセージ 


XXXアプリ was compiled with optimization - stepping may behave oddly; variables may not be available. 

発生する条件:
  1. 任意の場所、つまりどこでもいいからBreakPointを設定して実行すると、メッセージが表示される。 
  2. どんな操作をしても、データに関わらず発生するように見える。
  3. X-codeのスキームは複数設定してあるが、リリース用設定をしているスキーマでデバッグを実行させると発生する。 

条件3が限定的で怪しい。
いくつかスキーマの条件をいじってみると、どうもRun 設定で Releaseになっているとこのメッセージが表示されるようである。 新しいスキームをつくってみても、エラーが出ていないスキームでも、このオプションを設定するとエラーが発生する。

 このままにしておくわけにはいかない。何しろ、アプリをリリースするときは最適化した状態だし、最適化オプション無しなら動くということはたまたま動いているにすぎないからだ。  

 ググってみると、プログラム全体がおかしいという情報がちらほら。 作り直しは避けたいので、様々なバージョンから同じ条件で実行すると、エラーが発生しないバージョンが存在した。そこから頑張って作成すれば、エラーは出ないと思われるが、かなり古い状態なのでそこから作り直すのは避けたい。
悪あがきに、とりあえず x-code のプロジェクトファイルでも差分をとってみようかとチェックすることにした。






X-code付属のFileMergeを使って見る




 すると、 UserInterfaceState.xcuserstateで差分が大量に発生している。UserInterfaceState.xcuserstateとは何だろうか?エラーが発生していないバージョンにそのプロジェクトファイルをコピーしてみる。


・・・ エラーが発生した! これが原因のようだ。


 一説によると workspace や project layout に関する情報を個々のアカウントに紐付けている情報のようである。アカウントを複数使って何かしている場合には何か有用なのかもしれないが、アプリのロジック自体には影響しない。(gitにも登録不要)


 というわけで、どうもプロジェクトファイルが何らかの操作でおかしな状態になっていたようである。古いプロジェクトファイルをコピーして、そのバージョンから追加したファイルなど、再度紐付けてコンパイルする。


 ・・・問題ない。





差分が大量にあった問題のファイル




 ちなみに、このファイルはx-codeをちょっとでも触れば更新が入るようで、大量の差分が発生するのも納得である。この UserInterfaceState.xcuserstate がどうして、こんなエラーを吐くことにつながったのかは不明だ。

だが、現実問題として、このファイル以外に差分はなく、プロジェクトファイルのコピーで対処できてしまったのである。
 
 もやもやした結果だが、このままで開発を続けてみることにする。

どなたか、何かご存知でしたら情報ください。


0 件のコメント:

コメントを投稿