2010年7月28日水曜日

iPhone/iPad 双方へ対応したアプリの作成

ここに詳しくのっていました。

それ以外の記事は全然だめです。なぜかほとんどのブログの説明ではわかりません。

http://labs.techfirm.co.jp/ipad/cho/403

2010年7月25日日曜日

XCode便利機能 (変数等一気置換機能)

Appleの開発入門ビデオは、英語なのでちょっと聞き取りが不十分になりますが、勉強になります。

先日ビデオを見ていると、ファイルの中の同じ変数名など全てを、一気に変更する機能が紹介されていました。

変数名などをクリックすると、アンダーラインで囲まれるような記号がでますが、その状態で、
「編集」ー「範囲内の全てを編集」
を洗濯すると、一気置換モードに入り、全ての同じ変数などが置換されます。


綴りミスはもとより、intからdoubleへの変更など、ソースをなめて変更する必要があるような場合に非常に便利な機能です。

iPhoneアプリを公開する。

iPhoneアプリの公開方法は、以下に簡単な説明が記載されています。

http://gihyo.jp/dev/serial/01/iphone/0010?page=1

注意点としては、ここには、iTunes Connectの登録方法がほとんど記載されていません。

iTunesConnectの登録方法は、Appleのドキュメント(日本語版があります)が良いでしょう。
iTunesConnectのManage Your Applicationsの下のJapaneseを選びます。

さらに、過去の経験者のブログには、米国納税者番号(EIN)の取得や、W-8BENの送付などの非常にやっかいな手続きが記載されており、誤って弁理士などに依頼しそうになっていませんが、現在はそのような手続きは一切不要になっていますのでご注意ください(iTunes Connectのアメリカ在住者、アメリカ営業所に関する質問に2クリックするだけでOKになっています)。

いやはや、Appleも手続きをする前から最新の手続き概要がわかるドキュメントを出して、混乱をなくしてもらいたいものです・・・

IPhoneで実機検証する。

iPhoneで実機検証する方法は、下記にわかりやすくまとめてあります。

ただしAPPIDsは、Notificationサービスの利用や、独自サーバによるAPP内課金や、GameCenterへ登録するとき以外、追加登録不要(ワイルドカード登録済み)のため、要注意です。あえて入れるとすると、jp.個人ID,*くらい入れておけばいいのかもです。

http://gihyo.jp/dev/serial/01/iphone/0009?page=1

APPIDs

iPhone のdeveloper Programの登録の際、APPIDsなるものがあります。

なんなの?という感じですが、APP毎に設定するものと勘違いして、沢山つくってしまいました。
実際は、汎用のワイルドカードが登録されており、特段の登録は必要ないようです。

必要なのは、AppleのNotification Servieや、サーバを立てた課金(In App Purchase)をする場合
及びGameCenterへ登録する場合のみです。

しかも、一度登録すると削除ができないという代物。要注意です。
誰か。登録いらねーっていってくれよ!!!



ま、いいけど。

UIButton(ボタンクラス)での長押し(longTouch)実装方法

iPhone COCOA Touch のボタンクラス(UIButton)で、標準では長押しがサポートされません。

はじめよくわかりませんでしたが、以下で実装可能です。ご参考まで。
うーん、時間かかった。標準でサポートしてね・・・・



-(IBAction) onTouchDown:(id)sender{

// Interface Builderを使って、TouchDownイベントと結びつける。
// 1秒後にdidDetectLoungTouchメソッドが呼び出される。
// ただしその間、TouchUpInsideイベントが発生すると、下のメソッドが
// 呼ばれ、キャンセルされる。
   [self performSelector:@selector(didDetectLongTouch:) withObject:sender afterDelay:1];

}

-(IBAction) onTouchUpInside:(id)sender{
// Interface Builderを使って、TouchUpInside イベントと結びつける。

//  上で設定したセレクタでの実行がキャンセルされる。
  [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(didDetectLongTouch:) object:sender];


 // ここに短く押した場合の処理を実装する。
 //  ただし、長く押したあとのTouchUpでもイベントされるため、
長く押したときの処理との互換性を確保、もしくは長く押した際のフラグを
もとに、互換性が確保できない処理をスキップする。


}


-(void) didDetectLongTouch:(id)sender{
  // 長押しした際の処理を実装する。
}