2011年10月29日土曜日

PhoneGap 1.1.0でもちょっとハマる

■小さな落とし穴

PhoneGap入門といえば「古籏一浩のJavaScriptラボ」です。第65回以降PhoneGapが取り上げられています。記事が比較的新しく説明が丁寧で初心者の陥りがちなミスをちゃんとふさいでくれて、テーマも一通り網羅している。何度読み返したかわかりません。

この度ちょっと検証したいことがあって、久しぶりにPhoneGap-1.1.0をインストールしました。0.9から1.0に進んだのは知っていましたが、いつの間にか1.1なんすね。


で、試したのはForce.com Mobile SDK Developer PreviewのHTML5Application関連のことですが、以前0.9.5で動いていたはずのコードが動いてくれません。




■「PhoneGap 0.9.xでは動いたのに1.xが動かない」という方

以下PhoneGap 1.1.xのテンプレートから新規プロジェクトを作ることが前提です。テンプレートを動かしてみてシミュレータ上でスプラッシュとアラートは出て一応PhoneGapのコードは動いているけどクリックしてもPhoneGapのページに飛ばない、という方はXcode上のコンソールに表示されるエラーをご覧下さい。Xcode4ならWindow右上の3つ並んだViewアイコンの真ん中をクリックしてログを表示させます。


2011-10-22 04:52:39.620 PhoneGap[30146:2103] ERROR whitelist rejection: url='http://...


というような行があるはずです。参照先のホストがリストに登録されておらん、というPhoneGapからのお叱りです。これを解消するにはXcodeのProject Navigatorで「PhoneGap」グループの中にある「Supporting Files」グループ下の「PhoneGap.plist」をクリックします(PhoneGap-info.plistではありません…私は間違えたさ)。下記のような項目が表示されます。



ここでExternalHostsのArrayの左付近にカーソルを移動すると「+」「−」アイコンが表示されますのでプラスをクリックします。




(1 item)の下の入力欄に「*」と入力してください。これでどのホストとも接続できるようになります。ファイルを保存しプロジェクトを実行すると今度はちゃんと動いているはずです。




■しかしこの直後…


さあ、これでPhoneGapでいろいろ試せるぞ…と思った直後風邪でダウンしました。これを書いている10月29日でもう8日目、4日目にムリして会社に出たのと5日目に同じくムリして客先に出たのが決定打になりました…。自営業という引きこもりを長年やっていた50歳は免疫がないので感染症に弱いのです。


皆さんもどうぞご自愛くださいませ…。


#貼り付けたスクリーンショットが消えていたので貼り直しました(2011/11/06)
#貼り付けたスクリーンショットがまた消えていた(ry JPEGで貼った(2011/11/08)
#貼り付けたスクリーンショットが(ry  GIFにしてみた(2011/11/08 18:51)
#貼り付け(ry コピペでなく画像アップロードしてみた (2011/11/09 06:06)

2011年10月22日土曜日

Salesforce Mobile SDK for iOSでハマる


■例によってハマりました

Salesforce Mobile SDKはiOS / AndroidからREST経由で簡単にSalesforceにアクセスできちゃうよ!っていう有り難いSDKです。OAuth認証も簡単で、Native, Hyblid, HTML5版に対応しています。

ここのページにあるPDFとiOS Mobile Templateは一発で動くんですよね、Xcodeのバージョンなどに間違いがなければ。で、もてる知識を総動員してChatterのFeedから特定のキーワードを引っ張ってくるアプリなんぞを作って喜んでいたものでした。で、テンプレートではできることにも限りがあるので、新規にiOSプロジェクトを作って、そこにMobile SDKを入れて作った1本目は奇跡的にか何かの冗談か、一発でうまく動きました。

しかし。 その次、わりと本格的なというか倉橋屋の社運(社じゃないが)をかけたプロジェクトを作ろうとしたところ、開発以前のところでビルドが通らなくなってしまいました。この間にiOS5へアップデート、Google Data APIsに浮気、Xcode 4.0.2から4.2にアップデートする…等いろいろと狼藉を働いたので、何が原因かわかりません。この辺がiOSシロウトの哀しいところです。

Xcodeがはき出すエラーは「missing required architecture i386 in file」が26個、同じ原因でワーニングが6個ほど出てきます。まぁこういうエラーの山は大抵1カ所つぶすだけで直るか激減するものです。今回もそうでした。

結果から申しますと、Force.com SDKからDependenciesをdrag & dropで追加した際にXcodeプロジェクトのFramework Search Pathsに勝手に余計なパスが追加されていたことが原因でした。"$(SRCROOT)"とか$(inherited)が入ってたら消します。プロジェクト>Build Settingsから「framework」で検索してSearch pathsの下のFramework Search Pathsを見てください。

いやはや…。

2011年10月8日土曜日

iOSアプリ開発ツール


■趣味プログラミング■

長らく自営業で土日も趣味だか仕事だかわからないような状態でMacに向かっていたのですが、せっかくサラリーマンになって土日はしっかり休めるのだからと30年ぶりぐらいに趣味のプログラムを再開しております。

で、iOSアプリなんかをじわじわ書いています。昔はiPhoneアプリといえばXcodeでobjective-cで書くしかありませんでした。しかし、私はどうもこのobjective-cというヤツが苦手でした。メモリ管理みたいな足回りの処理を書きたくねぇ、ってかいうか頭悪いから書けないorz

そんなこんなで、もっとラクのできるツールはないか探してみました。

条件としては:
  • ラク
  • メモリリークで苦しむのはいや
  • できればAndroid / iOSクロスプラットフォーム
  • できればAppStoreで公開したい
  • Force.com/Database.comを比較的楽に使える
  • WYSIWYGなGUI build toolがある
てな感じで。


■Flash Builder 4.5■

ラクと言えば一番ラク。通常のFlashより使えるGUI部品が少なかったりメモリ消費大きいけど「とりあえず15分でforce.comから取ってきたデータを表示するアプリ書け」って言われても不可能ではない。

ただ、やっぱり重い。なるべくラクをして生きていきたい私としては、ごく初歩的なアプリですら重くなってしまう環境はカンベンしていただきたい。


■混迷■

この辺から何故か「どうせならAndroidとiPhoneクロスプラットフォーム」を目指すようになりまして。


■PhoneGapとTitanium Mobile■

TitaniumはHTML5+JavaScriptのWebアプリをラップしてスタンドアローンアプリにしてくれるツール、Titanium MobileはJavaScript+CSSっぽい言語でソースを書くとネイティブコードを吐いてくれるツール…っていう定義で良いのかしら。

どっちのツールもGUI Builderがない。ただし、PhoneGap+jQueryについては、Dreamweaver CS 5.5でGUIを使えるようになったし、この当時重視していたクロスプラットフォームという条件を無視すれば、PhoneGap+DashCodeという選択肢もある。

しかし、どっちも(少なくともこの時点では)例えば変数名を間違えた状態でもそのままビルドできてしまい、コンパイル系言語でおなじみの「そんな変数ねえよ」っていうエラーが出てくれない。実はPhoneGapのチュートリアル、それで半日ツブしてしまいまして…試して見たらTitaniumも同じだったので、「これは私にはムリだ」と離脱。そういうのを防ぐためにもTestってものがあるんですが、私はテストコード上でも同じ間違いをするという奇跡的なボケをかます持ち主なのでダメです。

とりあえずヒトに頼まれたアプリを1本リリースしてみたもののしんどくて見事に挫折しました。


■DashCode■

これはもちろんiOS専用のツールなんですが、HTML5+JavaScript+CSSでほとんとネイティブと見た目変わらないWebアプリを作ることができて、上記PhoneGapを使ったり、ちょっとしたラッパを使えばAppStoreで売り出すようなネイティブアプリも作れる。

DashCodeはApple製の専用開発ツールでEclipse系と違ってサクサク動くし細かいところに気が利いていて使いやすい。Eclipseの見た目も使用感も嫌いな私としてはまさに手に馴染むツール。iOSアプリを書く上でできないことはほとんどない。言語もJavaScriptなのでメモリリークの心配いらないし、何より一番得意な言語なので少なくとも言語習得の負荷がないのはありがたい。

ただ、Force.comにアクセスするためのコードは自分で書かなければいけない。私はやっぱりデータベース系アプリ屋なので、クラウド上に置いたリレーショナルデータベースをあれこれいじりたい。そうなった場合、制約はあるもののWebアプリやFlashアプリとの連携を考えるとForce.com / Database.comへのアクセスがラクにできた方が良い。

そんなわけでDashcodeのお勉強も現在は保留中です。


■で結局Xcode■

Xcodeでobjective-cでiPhoneアプリ書いてます。最初の条件は忘れてくださいははははは。

悩んでいる最中にSalesforceからiOS用SDKが正式にリリースされたことが決定打になりました。OAuthに対応しているし、queryもさくっと書けてNSArray of NSDictionary(おお懐かしい、WebObjects的に)に落ちるので、扱いもラク。タイポもちゃんとコンパイラが拾ってくれるw

何より現在のXcode 4.1ではRhapsodyやWebObjects 4の頃とは違い、操作上のへんな制約も減ってSeaser2のひがさん的な意味で「流れるように」作業ができる。繰り返しになるけど、Eclipseのどうももっさりした動作とへんな色使いとずんぐりしたGUIが好きになれない自分としてはXcodeは違和感なく操作ができて手に馴染みます。
 objective-cも付き合ってみればそんなに悪いやつじゃないしw

まぁしかし一つのFrameworkを手足のように操作できるようになるのは簡単なことではないので、テキストだらけの地味な画面を相手に遊んでます。

入門書はXcode4に対応しているやつが良いってんでとりあえず左の書籍を買ってみました。開発の流れを把握しやすい作りになっていてわかりやすいです。入門書の役割はこの「作業の流れを知る」ってことだと思ってます。ググれば何でも調べられるこのご時世、ピンポイントで知りたいAPI情報などはいくらでも探すことができますが、初心者が一番最初に越えるべき壁はツールに慣れることですからね。


■追記(2011/10/30)■

上記iOS用SDKは、Xcode 4.1 + iOS5では動きません。起動しても1回目はスプラッシュが出た後でSalesforce認証画面の後白い画面に変わりそのまま、2回目以降はスプラッシュ出た後にクラッシュします。


■追記(2011/11/06)■

Xcode 4.2にしたら動くようになりました。よかったよかった。