Hatena::ブログ(Diary)

このブログは証明できない。

2011-02-16

[]Titaniumでcontentsという名前のフォルダを作ってはいけない罠。

TitaniumでiPadアプリを作っています。JavaScriptは言語パワーがすごいので、おもしろいですね。ただ、設計に気を付けないと、モジュール構造が一瞬で破綻します。薄目のフレームワークを作っておくといいかもしれません。




シミュレーター上で動くアプリを作ったのですが、アプリを実機に転送しようとするとエラーが出ます。Titaniumで作った他のアプリは問題なく動きます。あるアプリだけが転送できません。こんなエラーが出ます。

The application does not have a valid signature.

何が悪いのかサッパリわかりません。ググッても出てきません。いろいろ試行錯誤した結果、やっと原因を突き止めました。




Titaniumのプロジェクトのフォルダの中に、app.jsなどが入っているResourcesというフォルダがあります。この中にcontentsという名前のフォルダを作っていました。これが、いけないらしい。ビルドした.appファイルの中身を「パッケージの内容を表示」で見てみると、本来であればパッケージの直下にあるはずの_CodeSignatureフォルダがcontentsフォルダの中に入ってしまっています。


ちなみに実機に転送する.ipaファイルはただのzipファイルなので、拡張子zipにすると.appファイルを取り出せます。とにかく、その中の構造がおかしいのです。そこで、Resourcesの中のcontentsフォルダを削除したところ、問題なく実機に転送することができました。




これって、ドキュメントを見たら載ってるんでしょうか。こんな仕様になっているとは気づきませんでした。同じ理由で、Resourcesフォルダの中にresourcesという名前のフォルダを作っても転送時にエラーが出るんじゃないかと思います。


こんな罠があるなんて。かなりの時間を費やしてしまいました。


Building iPhone Applications with Titanium: The Official Guide to the Appcelerator Titanium Mobile Platform

Building iPhone Applications with Titanium: The Official Guide to the Appcelerator Titanium Mobile Platform