2012年8月23日木曜日

Force.com SDK for iOS最新版

今週の月曜日から仕事でいじってました。

GitHubからzipで落としてもダメなのは以前と同じ。ちゃんとgitでcloneしてから./install.shしましょう。

今度のリリースでローカル・キャッシュなども加わったので、その辺もぜひ試してみたいんだけど、とりあえず会社の案件では用がないので保留…この週末にでも個人用アプリで試してみますべ。

で、新しいテンプレートですが…今度こそARCとかStoryboardに対応しているのでは?と3mmぐらい期待したのですが、してません。まぁARC無くても困らないんだけど、先週この案件に向けて下調べしていたViewはStoryboardが前提だったのでちょっと苦労しました。でも、まぁnibの方が素直というかイマイチ挙動を把握し切れていないSegueよりもわかりやすいので決定的な不利にはならないのですが。あと、今まで手動でやらなきゃいけなかった設定(Linkerのオプションとかライブラリの選択)が不要になっているのは少し楽。

今回の案件は「クラウド上のデータをiPad上に表示し、ユーザの操作を収集してクラウド上に上げる、てな案件のデモ版を作る」というものです。ViewControllerの数は5つ、Force.comは全部custom objectで6 objects、親子関係4世代とその横に親子関係2世代が参照関係でつながっているという単純なものです…と文字で説明しても「何のこっちゃ?」だと思いますが、一応勤務先の案件なのでご勘弁を。

ところで、このぐらいの規模のデモアプリ、他の人はどんな感じで作業しているんでしょうかね。

私の場合はざっとこんな感じ:

  • 月曜
    • SDKを新規インストールしてテンプレートプロジェクト作成
    • nibで要求仕様通りの画面構成を実装してNavigationBarなどが邪魔しないことを確認
    • Force.comで必要なデータベースを定義して一番基本的なデータがiOSアプリのUITableView上に表示されるところまで。ほぼ定時。
  • 火曜日
    • Tableからタップして表示されるUIPageViewControllerまわりの実装
    • ModelControllerとModelViewの役割分担がいまいちわかりにくくて試行錯誤
    • Force.comのデータを少し調整
    • ほぼ定時ぐらいで全データが表示されるようになり、全画面がとりあえず見られるような状態に
  • 水曜日
    • iPadからのpush側を実装。謎のデータ消失や重複が出たものの、ModelControllerをすっきり整理することで解消。正常操作と異常操作のマトリクスを作って動作をチェック、細かいところを直したり、ミリセカンド単位で収集しているはずのデータが秒単位だったのでForce.comの項目を18.0から15.3に変更したり。だいたい定時で動作確認も終わり

と、こんな感じでした。年寄りだから遅いのは勘弁してくださひ。

そういえば先月会社のお金でObjective-cの講習会に出たのですが、これが大変役に立ちました。特にメモリ関係で悩んだりハマったりすることが激減して、さくさく(当社比)書けるようになった…ような気がします。c言語とはなんだかんだで20年以上の付き合いになりますが、objective-cになっても変わっていねーなー、というのが正直なところ。

ああ、それでもやっぱりnilと[NSNull null]の混同で何カ所かハマりました。とほほ。

--

余談ですが、今日はFlexBuilderの作業。SuicaってかFeliCaをIDカードとして使ってForce.comに問い合わせをしたりメールを送ったり、という実装をしていました。

あー肩凝った、ってか疲れた。「あれ、ActionScriptって配列の要素の数はcountだっけlengthだっけ?」と悩んだりしているせいだとおもうんですけどねorz 明日はiPadアプリのアイコンなどを作ってお化粧する予定です。

まぁ何だかんだで、なかなか楽しい日々を送っております。はい。

2012年8月16日木曜日

SplitViewControllerで右へのSwipeが効かない

iPad用のデモアプリをMaster-Detailテンプレートから作っていて、Swipe Gesture Recognizerを貼った。実機で試すと右へのSwipeが認識されない。

1時間ぐらいバインド先や順番を変えてみるなど試行錯誤するものの結果は変わらない。

試しにSingle Viewで試すとうまく認識される。

ググったら、Stack Overflowで同じ現象に悩んでいる人が見つかった。

結論:iOS 5.1のバグでした。

デモアプリはSplitViewControllerを使わない方向で作ることにした。単純なView上にTableとViewを並べるという原始的解決法。UITableViewControllerが使えないと何かとめんどくさいけど、そこは根性でカバーしますよ。とほほ。

2012年8月11日土曜日

カレー同期


■現象■

昼ご飯外でカレーライスを食べて帰ったら、家の夕食もカレーだった

■推定理由■

前日近所の家がカレーだったんじゃないだろか。その匂いをかいで、(ああ、そういえばしばらくカレー食べていなかったなぁ)と思って、翌日の昼食と夕食に反映されたんじゃないか。

…と思う。

■余談(後日加筆)■

このブログへのアクセスは知人とあとクロウラーぐらいかと思っていたんですが…このネタへのアクセスはほぼゼロだったので「ああ、検索エンジンなどから調べてここに来てくれた人もいるのだな」とわかりました。

さらに関係ないけど、AdSenseの設定がわからん…。

2012年8月10日金曜日

PhoneGapってかCordova 2.0.0

2.0になってインストール方法が少し変わりましたね。

とりあえず、今週末にLion上にインストールして試してみる予定です。

どうせまたハマると思いますので…お楽しみにorz

2012年7月12日木曜日

ADT 20でプロジェクトが作れない

会社のLionにAndroid開発キットをインストールしました。EclipseはForce.com IDE用にすでに入れてあったので、adnからインストールし、SDK ManagerからAPI 8, 10, 15、それにIntel HAXを選択。

さて、Hello worldを…と思ったら、Android Application Projectで、最後のFinishが押せません。いや、押してもすぐに戻ってきてしまって終わらない。

ググってみると、どうもADT 20の問題みたいで、いろいろwork aroundが出ている。

  • android-sdk-macosx/extras/compatibility -> supportにrename
    • すでにsupportだった
  • sdk managerからsupport libraryを削除してもう一度create new project、ライブラリがないって言われたらそこでinstallをクリック
    • 変化なし
でも、結局、症状は同じでした…。ADT 20よりも古いツールからインストールしていたマシンでは問題ありません。

とりあえず、当面Androidいじる予定ないから良いんですが…何とか早く解決してほしいものです。また何か思いついたら対策してみます。

2012年7月10日火曜日

会社にMacが来た! ・その後

標準の500GB HDDをPlextor PX-256M5Sに換装しました。外付けUSBは禁止されているので、東映のアダプタを使ってDVD Driveのところに500GB HDDをセットして移行完了。やー、廉価版SSDとはいえ、HDDとは比べものにならないぐらい爆速ですね。立ち上がりが早すぎてXPのスリープ復帰より早いです(いやマジで)。移行が終わったところで、またHDをDVD Driveに戻しました。
外したねじ置き場。まぁ右奥3本が長いだけですが。
Excelとかパワポを使わずにはいられない会社なので、BootcampにWindows7を入れました。

ツールでパーティションを切って、Windows7のDVDを入れて待つことしばし。ってか、「展開中xx%」で止まること3度。00%, 53%, 68%だっけかな。68%では30分以上止まっていたのでWindowsに詳しい人に「もうリセットしちゃおうかしら」って話に行って戻ってきたら進んでいたというオチ。しかし、インストール後、Bootcampはそのままでは暗号化できず、暗号化しないと会社の規則で持ち出せず、暗号化するとVMWareからは起動できなくなる、ということで没。

再びBootcampツールを使って、パーティションを消す。サイズを変えることはできないけど、消すことはできるのね。で、改めて、VMWareでインストール。そしたら、CPUを2個しか割り当ててないのに8分でインストール終了。さっきの「展開中」は何だったんでしょう。

MacのパーティションはFilevault 2で暗号化済なのでその上のVMWareもセキュリティ的には問題ない。ただ、MacOS上にもWindows上にもSymantec EndProtectionを入れたらとても重い。特にMac側でファイルをダウンロードした後のスキャンが異様に遅くて泣けます。Mac界で比較的評価の高いSophosとかじゃダメか聞いてみようと思います。

さて、あとは入社以来使っていたXP(Core 2 Duo / 2GB / HDD 64GB)の中身を載せ替えれば移行完了です。

インストールが一段落したら、もう一度DVD-DriveをHDDに換装して、HDDをTimeMachine用に使おうと思ってます。実は今回、超お買い得なRetinaを諦めた理由の一つがこれです。セキュリティのため普通の会社ではプロテクションのない外付けUSBは禁止されていると思いますが、TimeMachineなしでMacを使うのも不便、ならば無理矢理2スピンドル化して使おう、というココロです。

まぁTimeMachineも暗号化できるので、そこを説得できれば良いのかもしれませんが、説得するのめんどくさいのよ。

2012年7月6日金曜日

会社にMacが来た!

そういえば、このブログのタイトルには「MacもGoogle docも使えないのでここに書く。会社をやめる理由はたぶん『Macが使えないから』になる予定w」とか書いていたのですが、MacBook pro 15" mid 2012さんが来ちゃいました。

Symantecさんを入れなければいけないなど、いろいろ制約もあるのですが…ともかくきれいなフォントを見ながら仕事できるだけでもうれしいざます。

でも、「Macは印刷業界ぐらいしか使えないじゃんw」という古い人もまだまだ多いよね。実際のところ、Macとは関係ない技術会議でもほんと冗談みたいにみんなMacBook Airだもん。先日の「ヒッグス粒子発表か?」を取り上げたニュースでも、技術者が使っているのはMacばっかりだったし。Salesforceの中の人も技術職はAirがやったらと多い。

スライド上映中に会場に浮かびあがる無数のアップルロゴ、こんな日が来るなんてちょっと感無量ですわ。

というわけで、今後もこのブログは続きます。

2012年7月3日火曜日

Painless Mobile App Development Webinar


Facebookのタイムラインに新しいWebinarが出てました。しばらくForce.com Mobile SDKをアップデートしていなかったのですが、いろいろ変わっていました。Webinarの中身を紹介します。英語力ほぼ皆無なので聞き違えていたりするところがあればご指摘ください。なお、私の主観的なコメントは黄色で表示しています。

  • Database.comに関して
    • Database.com概要
    • Apexの流し込み
    • workbenchの使い方(SOQL、REST APIのURLの作り方)
  • ここで急におっさんに声が変わって、Mobile SDKの説明に
  • まずMobileSDKの技術要素の説明(Push notification対応してたんだなぁ)
  • Native/Hybrid/HTML5の位置づけ
  • mobile SDKはOpenSourceで開発されている
  • OAuthについての説明
    • 認証不成立時のスライドになぜか日本のファミリーマートがw
    • OAuthの各Flowについて
      • UserAgentfFlow/RefreshFlowの動作フロー
  • 実際にXcodeを使ってのデモ
    • SDKのインストールが結構めんどくさいのだけど、そこは省略
      • みんなそこでハマったことがあると思うんだけどなぁ
    • NativeProjectをスタート
    • ハマりやすいRemote Access設定についての説明がわりとしっかり
    • build&run→User-Agent FlowのOAuthがしっかり動作。良かった良かった。
    • ソースを読んでいく
      • やっぱりまだStoryboardには対応していないんですね。
      • view controllerについての説明など。
  • RESTについての説明。
  • 28分頃、オンラインでのSOQLクエリについての説明
  • その下にオフラインのサンプルが出ている。
    • あとで読もうと思う。
    • クエリとJSONの対比。
    • JSONでの戻りの説明。
    • JSONからtableへデータをセット。
  • SmatStoreはオフラインでの動作をサポートするメカニズム
    • SQLiteとJSONベースのdocument store。
    • device level hardware encryption対応
    • SmartStore Phonegap Pluginが用意されている
    • SQLCipherにも対応。
  • HyblidはJASONベースのみ。
    • ブラウザ組み込みSecure SQLのサポートの関係で?
  • 36分あたりからSecureなJASONベースのストレージについて
    • Newton 'Soups'な話がでてきた。懐かしい。
    • 使い方についての説明。
    • サンプルではrequest:didLoadResponseでSoupと同期をとっている。
    • Soapに対するQueryについて説明。
  • 各リソースについて紹介
    • サンプルはこれ。
    • https://github.com/tomgersic/CrumpRealEstate
  • Q&A
    • Upsertした場合の同期について質問が出ていたけど聞き取れない。


だいたいこんな内容です。Androidでの開発は出てきませんし、Hybidについても概要だけで実例のデモはありません。

すでに開発経験のある人の場合、とりあえずSmartStoreについての概要を把握するのに良いかもしれません。これからiOS+Force.comで開発しようという方は、もしハマったら私の過去ログなどでインストール方法を確認してみてくださいませ。

2012年7月1日日曜日

jQueryで一部ページだけローテーション禁止にする

この週末、同僚氏からの質問を受けて、ちょっと調べてみました。

結論としては、無理です。mobile Safariが対応していません。jQuery/PhoneGapでは1つのアプリを1本のhtmlで処理しますが、htmlごとなら「ロックする/しない」を設定できるものの毎度おなじみの<div data-role="page">のブロック内だけで切り替えることはできません。

ただ、まったく方法がないわけではなくて、一つは、PhoneGapのプラグインをobjective-cで書いて、まいどおなじみのこれを実行する方法です。たぶんこれが正攻法。

 (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return NO;
}

もう一つは「ローテートしたら無理矢理view内部を逆方向に90度ローテートして打ち消す」という力業。ここのページの一番下にコードが出ていますが、iPhoneを回転させると、追従して回転した後でまた無理矢理元に戻るところがいとおかし。

ということで、jQuery mobileでアプリを作る場合は、「一部だけ回転禁止はできないよ」ということを念頭においといた方が良いですね、というお話でした。

基本的に役に立たない情報ですいませんm(_ _)m

2012年6月17日日曜日

Dreamweaver CS6 + PhoneGap 1.7

表題の通り、DW CS6を使い始めています。まぁ無料評価版ですが。なんかものすごい重いけど、それはまぁ最新のMacなら問題ないのでしょう。

で、今日はさくっと簡単にアプリをiPhoneの上で走らせて、そこまでの紆余曲折なんかも公開して、「いやー、ちょっとハマりましたけど、簡単ですね。はははははは」とか書こうと思っていたのですが、最後の最後、iPhoneにインストールするところで失敗してしまいます。

Androidはエミュレータ上で普通に起動するんですが。

というわけで、表題のDreamweaver CS6 + PhoneGap 1.7>iPhone4については、また今度の週末チャレンジ致します。

それにしても、これまでPhoneGap苦手ってかJavaScript苦手なんであんまり触っていなかったんですが…覚えることがたくさんあり過ぎて涙目です。

いや、まだ別にPhoneGapで行くと決めたわけではないのですが。