ラベル iPhone の投稿を表示しています。 すべての投稿を表示
ラベル iPhone の投稿を表示しています。 すべての投稿を表示

2013年1月20日日曜日

ムービーアプリがリジェクト

お友達からの依頼で作ったiPhoneアプリ、リジェクトされました。

理由:「ムービーだけならiTunes Storeから売れや」

昔は良かった…。

というわけで、お友達から「参考にして」と言われて買った「AKB48」アプリや「We are the world」アプリを眺めつつ、機能を大幅アップ中。AKB48はともかくWe are the worldなら技術的にはそう難しくないんだけど、ちょこっとしたアニメーションとか配色なんぞのさりげないセンスが難しい…。

2013年1月19日土曜日

iPhoneアプリ開発のお勉強

iPhoneアプリ開発について、ググれば大抵のことは出てきます。でも、古い人間なもんで、本を読まないと全体像が頭に入りません。

新しいプラットフォームを学ぶ場合、私(痛い目に合わないと学習しないタイプ)は:
  • (概念がわからない時は)まず雑誌や本を片っ端から斜め読みする
  • 入門書のチュートリアルに沿って実習
    • これは開発環境などの確認です。超初心者だと環境が悪いのか自分が悪いのかがわからないので、そのロスを防止します
  • とりあえず自分の好きなものを作ってみる
  • 当然ハマるのでググりつつ進む
  • 上級編の書籍を熟読するか、セミナーに出る
で。

なんだかんだでこれまで買った本は10冊ぐらいだと思います。とりあえず、その中で役に立ったものを何冊かピックアップします。

■まず入門編■

よくわかるiPhoneアプリ開発の教科書【iOS 5&Xcode 4.2対応版】
「何だかよくわからないんだけど、とりあえず作ってみよう」「『来週までに簡単なiPhoneアプリ1本作って』って言われたけど、どーすればw」そんな時にお役に立ちます。ある程度自信と経験のあるヒトは後述の「10日でおぼえるiPhoneアプリ開発入門教室」から始めても良いと思います。

■実践編■

10日でおぼえるiPhoneアプリ開発入門教室 (10日でおぼえるシリーズ)
有料セミナーで教科書として使われていた本。上の「教科書」は小さなサンプルが沢山乗っていてとにかく動くようにする、こっちは開発フローを意識してある程度ボリュームのあるサンプルを丁寧に教えていく感じです。入門書の割にコードもしっかり正しく書かれているので悪い癖がつきにくいと思います。まぁ10日で覚えるのはまず無理ですがw

■学習編■

詳解 Objective-C 2.0 第3版
ARCが導入されたからあんまり意識しなくていいんじゃねーの?という見解もあったりしますが、やっぱりこの変な言語についてはしっかり学んでおかないといけません。もう一冊入門 Objective-C 2.0 (Programmer’s SELECTION) の方もコード例が沢山乗っていてわかりやすいですが、言語の教科書としては「詳解」の方がしっかり学べるかなと思います。

■これが電子書籍だったら編■

iOSプログラミング逆引きリファレンス110 [iOS 5.1対応]
この本に書かれている内容を全文検索できるなら、もうアップルその他に問い合わせしなくても良いんじゃね?と思うくらい、びっしり情報のツマった本。もうお世話になりっぱなし。気力と記憶力のあるヒトは、精読しておくことをお勧めします。そうすれば具体的なAPIは覚えていなくても、誰かに相談された時に「できるか、できないか」の判断ができますから。

2012年5月10日木曜日

Chatter APIにまつわる愚痴

会社で作業していると目的のAPIがなかなか出てこない。自宅で作業していると同じGoogle先生を使っているのに「FeedItem」でサクッとREST APIが出てくる。

何ででしょう? 昨日30分ぐらい「あれ、Chatterのメッセージにコメントがいくつついているかを返すメンバーって何だっけ? Comments?」ってGoogle先生をお供にさまよっていたんですが…今検索したら一発でFeedItemのCommentCountが出てきました。

見つかれば文句ないんですけどねぇ…。

それにしても個人で提出したiPhoneアプリ。今までの経験から「審査待ちまですくなくとも1週間」ってのはわかっているんですが、それにしても待ち遠しい。

2012年5月6日日曜日

Native iOSアプリをChatterの「いいね!」に対応

■FourChatter絶賛改良中■

Chatter上の文言をサクっと検索する倉橋屋謹製アプリFourChatterを改良してます。今更ですが。主な改良のポイントは以下の2点:
  1. iPad対応
  2. 「いいね!」の実装
iPad対応は、同じGUIそのままならそんなに苦労はないけれど、このFourChatterは「iPhoneの向きを変えるだけでキーワードを切り替えて検索できる」ってのがウリです(電車の中ではちょっと恥ずかしいけどね)。が。iPadで向きを変えるのは結構ウザい。というよりも、五十肩の私にはしんどい。というわけで、Segmented Controlを導入しました。

…iPhone版もこれでいいんじゃね? Segmented Controlなら4つに限らなくても良いんじゃない??という声もありますが。


■「いいね!」の実装■

Chatterの「いいね!」はFeedLikeというオブジェクトを使ってます。NewsFeedまたはFeedCommentへのto one relationshipになっていて

  • CreatedByID - 「いいね!」をクリックしたユーザのID
  • FeedItemID - 「いいね!」の対象となるNews Feed ID
  • FeedEntityID - 「いいね!」の対象となるFeedまたはCommentのID
  • InsertedById - このオブジェクトを作ったユーザのID
もともとFeedEntityIDはなかったと思うけど、最近FeedCommentへの「いいね!」がサポートされたことにともなって追加された、ような気がします。


■まず「いいね!」はこんな感じ■

SFRestRequest *requestInsert;

NSString *fId = [feed objectForKey:@"Id"];

NSDictionary* dic = [NSDictionary 
    dictionaryWithObjectsAndKeys:fId, @"FeedItemId", nil];

requestInsert = [[SFRestAPI sharedInstance] 
    requestForCreateWithObjectType:@"FeedLike" fields:dic];
[[SFRestAPI sharedInstance] send:requestInsert delegate:self];

これでOK。実行結果は例によって以下が呼び出されます。

- (void)request:(SFRestRequest *)request didLoadResponse:(id)jsonResponse ;
- (void)request:(SFRestRequest*)request didFailLoadWithError:(NSError*)error ;
- (void)requestDidCancelLoad:(SFRestRequest *)request ;
- (void)requestDidTimeout:(SFRestRequest *)request ;

要するに「いいね!」をしたいfeedのidを"FeedItemId"にセットしたNSDictionaryを用意して、それをFeedLikeとしてinsertするだけです。


■いいね!を取り消すには■

上記で作ったFeedLikeを削除します。最初、SELECTで該当するFeedItemIDとCreatedByIDを持つFeedLikeを検索しようとしたのですが、FeedLikeは直接fetchできないというエラーが出ました。ので、NewsFeedをfetchする時に、一緒にFeedLikesもfetchしておきます。

NSString *strQuery = [NSString stringWithFormat:
     @"SELECT Id, (SELECT Id, CreatedById From FeedLikes) 
       From NewsFeed Where Id = '%@' Limit 1", fId];

で、FeedLikesの中から自分のUser IDと同じCreatedByIdを持つFeedLikeを探し出して消します。

fId = (NSString *)[feedLike objectForKey:@"Id"];
requestDeleteLike = [[SFRestAPI sharedInstance] 
    requestForDeleteWithObjectType:@"FeedLike" objectId:fId];
[[SFRestAPI sharedInstance] send:requestDeleteLike delegate:self];

とても簡単。なお、自分以外のユーザの「いいね!」を消せるかどうかは試してません。

2012年3月28日水曜日

iPhone対応Force.comアプリをiPadでも


■iPhoneアプリをiPad対応に■

Force.com iOS SDKのnativeテンプレートは、iPhone / iPad両方に対応しています。

ただ、iPad版はMaster / Detailが前提。しかし私の作ったFourChatterはChatterがソースなもんで必ずしもきっちりMaster / Detailがあるわけではなくテンプレートのままの形態では動かすことができません。というわけで、当初はdisabledしてました。

しかしそのままというのも何だし、このところまったく開発が止まってしまっているのも何なので久しぶりに手をいれてiPad対応にしてみることにしました。


■経緯■

新しくiPad用のStoryboardを作り、プロジェクトに登録。 iPhone用のStoryboardを別ウィンドウで開いておいて、見比べながらviewをぽちぽち置いていく地味な作業を約30分。とりあえず、iPad上でもRoot Viewが動くようになりました。

で、StoryboardにCommentViewを追加したら…見事にハマりました。

…ってか、このブログハマってばっかりだよなorz


■症状■

症状としては、RootViewだけでは動いていたのにCommentViewをStoryboardに追加しただけでRootViewすら出てこなくなりました。SIGABRTです。そこから約2時間、Assembler上をシングルステップで追いかけてみましたが、どーにも見つかりません。念のためiPhoneで試してみると、動きます。 まぁこの場合、動かなかったら泣きますけどね。


■解決■

最終的な原因は、テンプレートのAppDelegate.mにありました。ここで「iPadだったらsplitViewをどうたら」という処理をしています。そうです、そんなものはとっくの昔に消しちまいました。ということで、この辺をコメントアウトして無事動くようになりました。

で…リリースしようと思ったんですが…FourChatterのウリは「iPhoneの向きを変えるだけでさくっとキーワードを切り替えてChatterを検索できる」っていうところにあります。しかし、iPadをぶんぶん回すとバカみたいという問題があります。私のiPad(初代)は回転ロックしちゃってるしね…。

というわけで、やっぱりiPhoneにはiPhone、iPadにはiPadに向いたGUIがあるよなぁ…というのが結論です。

さて、どうしましょう。タブで切り替えるか、任意の個数のキーワードを登録してタップで切り替えられるようにするか…。ただ任意の個数ってことになると「Four」Chatterっていうアプリ名が意味不明になるわな(4方向のfourです)。

--

でも今四十肩が痛くて新しいGUIのあるべき姿、みたいなことが考えられない。

…これを「四十肩ぐらいでw 言い訳にも程があるww」と思ったヒトは、本当の四十肩の怖さを知らないのだよ。寝返り打つたびに目が覚めるし、何かにつまずいてうっかり手を撞こうものならその場にしゃがみ込むほど痛いし。消炎鎮痛剤効かないし。今も何もしてないのに痛いし。

……以下、記事本体よりも長くなりそうなので省略。とにかく痛いのだ。

この記事を、とび職なのに四十肩でも仕事を休まなかった亡父に捧げます。

四十肩には効かないけど便利なので愛用

2012年1月18日水曜日

Salesforce mobile SDK for iOS +1

■テンプレート以外で作業する場合のTips 1■

SFAuthorizingViewControllerにこんなのが定義されてますが。

    @property (nonatomic, retain) IBOutlet UIView *oauthView;  

これ、使われていません。テンプレートについてる「Authorizing」の画面があまりにもスゴいので当然置き換えを考えるわけですが、置き換えたxibでちょっと小細工をしたものの、どうも思ったとおりの動作をしてくれない。何だかんだ調べたら、oauthViewは全然使われていませんでした。

普通にviewをFile's Ownerにしてください。

2011年12月31日土曜日

Salesforce mobile SDK正式版(GA)

■βが取れました■

まぁとりあえず、めでたいです。今後はドキュメントなども充実してくれますよーに。



■では試してみましょう■

というわけで、例によってGitHubから最新版を落としてきます。もしXcodeが立ち上がっていたら、念のため終了しといてください。なお、私の環境ではGitHub for Macでの同期がうまく働きませんでした。ので、zipを落としてきます。

SalesforceMobileSDK-iOS

落としたら、zipを解凍したディレクトリに移り、 ./install.shを実行します。例によって数分後、BUILD SUCCESSFULが出たら無事終了です。

さて、Xcode 4.2を起動します。New Projectを選ぶと、以前よりちょっと派手なテンプレートアイコン「Hyblid Force.com App」と「Native Force.com REST App」が追加されています。今回はサクっと Native を選びます。


次の「Choose options for your new project」でProduct Nameに適当なプロジェクト名、iTunes connectなどに登録したあなたの会社ID、Consumer KeyにはあなたのSalesforce/Database.com組織のリモートアクセスキー、Redirect URLにはその戻り先URLを入力します。

Xcode 4.2だとその下の「Use Automatic Reference Counting」をonにしたいのですが、残念ながらMobile SDKが対応していないのでここはチェックを外してください。外さないとビルドエラーの塊になります。すべて入力したらNextをクリックし、プロジェクト保存先を指定し、プロジェクトを作ります。

以前はここでOther linker flagを設定したりFrameworkを追加する一手間が必要だったのですが、さすがはβでないGA、さくっとそのままcmd+Rで実行できます。起動すると、黄土色の「Authorizing」画面が表示され、その後Salesforce.comのOAuth認証画面になります。ID, Passなどを入力すると、その組織のユーザが10名分表示されます。


■βとの差異■

βはAppDelegateに認証関連の処理を細々と書かなければいけませんでしたし、「認証中です」の画面も自分でイチから作ってやらなければいけませんでした。でも、1.0では、その辺の処理はSFAuthorizingViewControllerとSFNativeRestAppDelegateに実装されていて、AppDelegateにはごく僅かなコードを書くだけで処理してもらえます。本来のAppDelegateに書きたい処理と分離することができて、非常にすっきりしました。

ViewControllerに関しては元々テンプレートが作ってくれるコードは非常に単純なので、あんまりRESTがどうこう考えないで実装することができます。


■そして、ハマる(お約束)■

以下は余談です。

とりあえず、プロジェクトの構造などを検証するために今度はMobile SDKのテンプレートを使わずにアプリを作ってみることにしました。
  1. Single View Appテンプレートでプロジェクトを作る
  2. さっきNative Force.com REST Appで作ったプロジェクトからDependenciesフォルダとNativeRestAppフォルダをコピー
  3. 必要なFrameworkを追加
  4. AppDelegateとViewControllerに必要なコードをコピペ
  5. cmd+Rでビルド&RUN
アプリは無事シミュレータ上で起動し、ドドメ色の「Authorizing」から認証を得て…オチますorz

これが3日ほど前でした。それから他の作業もしつつ、いろいろ原因究明したんですが、どうやっても同じところで落ちます。以前のパターンで同じようなエラーが出た時にはdelegateのスペルが間違っていたのが原因だったので、今回も何かdelegateを抜かしているのではないかと思い、ソースをにらめっこする日々でした。でも治らない。

その辺のウダウダを書いてもしょうがないので、例によって最終的に解決に至った課程のみ書きます。
  • エラーが出ているのは、viewDidLoadの下記の行
[[SFRestAPI sharedInstance] send:request delegate:self];
  • SIGABRTで止まった時点でのスタックトレースを見る←最初にやっとけ
  • [SFRestRequest description」でググる→SFRestRequest.mのソースがヒット
SFRestRequest.m
  • ソースに以下の記述を発見
  • _queryParamsはNSDictionaryなので当然JSONRepresentationなどというメソッドはない。遅まきながら、ここで「カテゴリ」が実装されてないことに気づく

原因は…上にヒントが書いてあります。

Other Linker Flagsに-ObjC -all_loadがセットされてない

でした。お粗末さまでした…。

言い訳をするとね…以前これらのLinker Flagsがセットされていない時にはビルドエラーで止まったのよ…。

2011年12月4日日曜日

Resizeしたい

■ごく単純なこと(そして落とし穴)■

現在開発中のiPhoneアプリはTableViewにカスタマイズしたCellを置いてそこにdatabase.comから取ってきたデータを表示するだけのごく単純なものなのです。ええごく単純。

要件としてはorientation(画面の向き)に応じてcellの幅を変える必要があるぐらい。Autoresizingを使えばほんと簡単。

あと表示するデータが可変長文字列なので、cellの高さを変える必要があります。これも単純な話で、以下のコードをview controllerに書いてやればおk

- (CGFloat)tableView:(UITableView *)tableView 
     heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    MyCell *cell = (MyCell *)[self tableView:self.tableView
                       cellForRowAtIndexPath:indexPath];
    
    float width = cell.status.frame.size.width;
    CGSize bounds = CGSizeMake(width, self.tableView.frame.size.height);
    
    CGSize size = [cell.status.text sizeWithFont: cell.status.font 
                               constrainedToSize: bounds 
                                   lineBreakMode: cell.status.lineBreakMode];
    
    return MAX(size.height, ConstMinCellHeight);
}

なのですが…。このboundsがくせ者でした。当然、当然cell上に置いたUILabelの幅を使います。このLabelにもautoresizingを設定してますから、iPhoneを横向きにすると当然リサイズされます。しかし…boundsに入ってくるwidth、つまりUILabelのサイズは初期設定値のままでリサイズ後のwidthを返してくれません。


■毎度おなじみ試行錯誤地獄■

そこから約4時間ほど試行錯誤を繰り返しました。覚えている範囲で列挙すると:

  • とりあえずautoresizingのモードをあれこれ試す
  • 友人のアドバイスに従いboundsへのkey value notificationを使用
  • UILabelのサブクラスを作ってsetBounds/setFrame/drawRectなどをオーバーライド

で、最終的にわかったことは、「cellの中に置いたLabelの幅がわかるのは、tableViewのheightForRowAtIndexPathが呼ばれた後」ってことでした。

描画の仕組みから考えて、そんなことはないと思うのですが…現状でそれを知る方法が見つかりませんでした。とほほ。


■美しくない妥協案■

というわけで、deviceOrientationDidChangeでiPhoneの向きが変わったことを検出したら、そこで定数からラベル幅を算出する、という方法にしました…。一応、デバイスの規定値が変わってもそのまま動くようにはしてあるけど…どうも美しくないっす。

問題は、この方法は最初からわかっていたということで…「美しくないから」という理由だけで4時間試行錯誤してしまったのはどーなの?というあたり。まぁ時間単価で仕事しているわけじゃないから良いんだけど…困ったもんだ。

まぁ、あれだ、4時間の試行錯誤でいろいろ分かったこともあったから、そのうちそれらが花開く日も来るだろう、ということで…。

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にしたら動くようになりました。よかったよかった。