someone's notebook

誰かさんの書いたジャポニカ学習帳

Twitterモジュール読み込みをiOSのバージョンで切り替える

Titanium2.0.1がローンチしましたね。
明日のローンチ記念イベントが楽しみです。
ちょっとここ2日ほど体調不良で寝込んでいたけど、なんとか行きたいところ。


さて、AppceleratorのMarketPlaceにはiOS5のTwitter.frameworkを使用したモジュールが無料で入手可能となっており、通常はそれをDLして同梱のapp.jsの通りに実装すれば何も問題はないのですが、iOS4で起動するとクラッシュしてしまいます。


そこでiOS4向けのビルドではTwitter.frameworkの参照を外す必要があります。
そんな方法ないかしら、と探していると以下の情報を発見。
iOS 4.0 と iPhone OS 3.x の両方で動作するアプリケーションをビルドする設定


新しいフレームワークをWeak Linkに設定する、とのこと。
上記の記事はiOS4とiOS3の場合ですが、iOS5と4でも基本は同じですね。


まずgithubに公開されているモジュールのソースをチェックアウトします。

git clone https://github.com/mpociot/titanium-mobile-twitter-module.git


モジュールはObjective-Cで作成されており、XCodeで開けます。
titanium-mobile-twitter-moduleディレクトリの中にtweet.xcodeprojがあります。


デプロイメントターゲットをiOS4.0に変更
(4.3の方がシミュレータで確認できるのでいいかもしれません)
f:id:oklahomaok:20120419213355j:image:w480


Twitter.frameworkのリンク設定をRequiredからOptionalに変更
f:id:oklahomaok:20120419213354j:image:w480


最後にtitanium.xcconfigを環境に合わせて変更
※ユーザ名やTitaniumSDKのバージョンは適宜変更してください。
f:id:oklahomaok:20120419213455j:image:w480


titanium-mobile-twitter-moduleディレクトリ内にbuild.pyというファイルがあるので、ターミナルから実行します。
ビルドが成功すると、de.marcelpociot.twitter-iphone-1.0.zipというファイルができます。


解凍すると中身は以下の2ファイルです。
modules/iphone/de.marcelpociot.twitter/1.0/libde.marcelpociot.twitter.a
modules/iphone/de.marcelpociot.twitter/1.0/manifest


MarketPlaceからDLしてきたde.marcelpociot.twitterをコピーしてv1.0のディレクトリを作成します。
そこに解凍した2ファイルを上書きます。

cd ~/Library/Application Support/Titanium/modules/iphone/de.marcelpociot.twitter/
cp -R 1.2/ 1.0
cp ~/tmp/modules/iphone/de.marcelpociot.twitter/1.0/* 1.0/


これでiOS4での起動時のクラッシュはなくなります。
ただし実際のソースコード上でモジュールを読み込むところはiOSバージョンで条件分岐が必要になります。

2012/11/5 追記
PullRequest送ったので反映されるといいなあ。

Fork me on GitHub