xcode4 で新規デバイスへアプリインストールが簡単になっている

以前は突発的に普段開発に利用していないデバイスへアプリをインストールすることはとても大変な作業でした。

理由は、
1) 新規デバイスの UDID を把握する
2) iOS Developer Program へアクセスし、新規 UDID を登録し、新たにプロビジョニング ファイルを作成する
3) 新規デバイスに新たに作成したプロビジョニング ファイル、アプリをインストールする
上記の作業が大変であったからだと思います。

ですが、xcode4 では、上記の作業が2つのボタン押下で行えるようになっています。

開発中アプリを新たなデバイスへアプリをインストールする場合は、
1) デバイスを mac に接続し、オーガナイザを起動する
2) デバイスが認識されている場合、”Devices”に表示されているので、”Use for Development”ボタンを押下する
“Sign in with your Apple ID” といわれるので、Username と Password を入力します。
3) 画面下部の “Add to Portal”ボタンを押下します。

新規デバイスが iOS Developer Program の開発用デバイスとして登録され、プロビジョニング ファイルがインストールされているはずです。

xcode4 変数名を一度に変更する

xcode4 にてコードを編集中に変数名を変更したい場合、リファクタリングなどの機能を利用することもできるが、以下の方法が簡単。

1. 変数名を変更する変数を選択(反転表示)
2. command + control + e
関連する変数が編集状態となり、変数名変更が全てに適用される

UITableView が reloadData されない場合に確認する点

UITableView に reloadData メソッドを発行しても cellForRowAtIndexPath がコールされない場合は、テーブルビューの高さが 0 に設定されていないか?確認すること。

テーブルビューの高さが 0 に設定されていると、
– (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
– (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

上記のメソッドがコールされても、
– (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
が、コールされない。

iOS で JSON 形式データを作成する方法

json-framework → SBJson
TouchJSON
などが有名のようである。(2011/09時点)

ー SBJson を使用して、JSON 形式データを出力する
値に数値を指定したい場合、NSNumber をセットすればよい。

1
2
3
4
5
6
7
8
9
10
11
12
NSDictionary *dict0, *dict1;
dict0 = [NSDictionary dictionaryWithObjectsAndKeys:@"value00", @"key00", 
                                                   @"value01", @"key01", nil];
dict1 = [NSDictionary dictionaryWithObjectsAndKeys:@"value10", @"key10", 
                                                   @"value11", @"key11", nil];
NSArray *array = [[NSArray alloc] initWithObjects:dict0, dict1, nil];
 
SBJsonWriter *writer = [[[SBJsonWriter alloc] init] autorelease];
writer.humanReadable = YES;
writer.sortKeys = YES;
 
NSLog(@"%@", [writer stringWithObject:array]);

– 出力結果

1
2
3
4
5
6
7
8
9
10
[
  {
    "key00" : "value00",
    "key01" : "value01"
  },
  {
    "key10" : "value10",
    "key11" : "value11"
  }
]

iOS デバイスから WCF サーバへ POST でパラメータ (JSON形式) を送信する方法

– ASIFormDataRequest の場合

ASIFormDataRequest クラスを使用して POST する場合、Content-Type は以下のものが指定される。
‘application/x-www-form-urlencoded’
‘multipart/form-data’

上記以外の Content-Tpye を明示的に指定し、POST する場合は以下の様にする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// Http通信 postでパラメータ(json形式)をサーバへ渡す
NSString *interfaceURL;
interfaceURL = [NSString stringWithFormat:@"http://(サーバ アドレス)"];    
 
NSURL *url = [NSURL URLWithString:interfaceURL];
request_ = [[ASIFormDataRequest alloc] initWithURL:url];
request_.delegate = self;
[request_ addRequestHeader:@"Content-Type" value:@"application/json; charset=utf-8"];
 
// WCFインタフェースへ渡すパラメータを json 形式に変換する
// NSDictionary → (json文字列) NSString
NSDictionary *dict;
dict = [NSDictionary dictionaryWithObjectsAndKeys:@"(値1)", @"(キー1)",  
                                                  @"(値2)", @"(キー2)", 
                                                  nil];
 
SBJsonWriter *writer = [[[SBJsonWriter alloc] init] autorelease];
writer.humanReadable = YES;
writer.sortKeys = YES;
NSLog(@"送信パラメータ:%@", [writer stringWithObject:dict]);
 
NSString *postParameterString;
postParameterString = [NSString stringWithFormat:@"%@", [writer stringWithObject:dict]];
 
// パラメータをボディにセットし、WCF サーバへ通信する
[request_ appendPostData:[postParameterString dataUsingEncoding:NSUTF8StringEncoding]];    
[request_ startAsynchronous];

xcode4 で static link library を追加する

以前の xcode3 でスタティックリンクライブラリを開発アプリのプロジェクトに追加するには、以下の手順でOKだったと思う。
1) スタティックリンクライブラリのプロジェクトを開発アプリのプロジェクトに追加
2) ライブラリのヘッダを [Header Search Paths] に追加
3) ライブラリが求めるビルド設定 [Other Linker Flags] に “-ObjC” と “-all_load” などを追加
4) ライブラリが求めるフレームワークの追加

しかし、xcode4 で上記の設定を行っても、開発アプリにライブラリの追加が正常に行われない。
以前からビルドしたスタティックリンクライブラリがどうして赤色で表示されているのか気になっていたので、調査した。

結果、xcode4 では、ビルドしたライブラリの格納場所が変更されており、プロジェクトがビルドしたライブラリを認識できていないとのこと。
→ 確かに、~/Library/Developer/Xcode/DerivedData/(プロジェクト名)/Build/Products/Debug-iphonesimulator と以前と異なる場所にビルドされている

解決方法は、いろいろ提示されているようだが。。。。
とりあえずは、手動リンクすることにした。(T_T)

補足: 2013/5 時点は CocoaPods を利用するのが楽だと思う。(^^)

cocos2d

1. cocos2d 公開ページ
cocos2d

2. インストール方法
$ cd (cocos2dフォルダ)
$sudo ./install-templates.sh

xcodeでプロジェクトの新規作成時に cocos2d が選択できるようにプロジェクト テンプレートの登録が行われる

3. cocos2dで作る iPhone&iPadゲームプログラミング
インプレス社のサポートページ
著者のサポートページ

実機にアプリを転送する手順

実機にアプリを転送するには、iOS Developer Program を契約しておく必要がある。

1. キーチェーンより正規開発者証明書請求書類の作成
キーチェーンは、
オンライン証明書状況プロトコル(OCSP)
証明書失効リスト(CRL)
を「切」に設定されていること。

メニュー「証明書アシスタント」「認証局に証明書を要求」を選択し、正規開発者証明書を請求する書類(秘密鍵、公開鍵)を作成する。

iOS Developer Program で登録した
メールアドレス、通称(ローマ字の氏名)
を指定し、「ディスクに保存」「鍵ペア情報を指定」を選択する。
鍵のサイズ:2048 ビット
アルゴリズム:RSA
を指定されていることを確認すること。

作成した鍵はバックアップをとっておくこと。
→ 他のマシンで開発を行う場合、キーチェーンに登録する必要があるため

CertificateSigningRequest.certSigningRequest
(正規開発者証明書を請求する書類)
〜.pem (公開鍵)
〜.p12 (秘密鍵)

2. iOS Developer Program から正規開発者証明書を取得
iOS Provisioning Portal – Certificates に「正規開発者証明書を請求する書類」を登録し、正規開発者証明書(developer_identity.cer)を取得する。
開発環境に登録する。

3. 実機の Device ID (40文字のID)を登録
4. iOS Developer Program からプロビジョニングファイルを取得
実機にプロビジョニングファイルを登録する。
登録状態をオーガナイザで確認する。

5. xcode プロジェクトに識別子の設定
xcode4 の場合、プロジェクト ナビゲータよりプロジェクトを選択
TARGETS – Info
Custom iOS Target Properties
Bundle identifier にBundle IDを指定する

Build Settings
Code Signing
Code Signing Identity をプロビジョニング ファイルのサインと合致するように設定する

6. xcode から実機にアプリを転送する

上記の手順で実機でプログラムが動作できない場合、
– オーガナイザで実機のプロビジョニングファイルに問題がないか?
– xcode プロジェクト設定 [iOS Deployment Target] の iOS バージョンが実機の iOS バージョンより新しくないか?
など確認する。

xcode4 ショートカット

xcode4 では、xcode3 からショートカットが変更されています。
というわけで、よく使うショートカットを以下に記します。

キー 説明
control + command + ↑ ヘッダ、ソース切り換え
command + r 実行
shift + command + f ワークスペース内検索
command + f ソース内検索
control + command + → or ← ソースの次へ、戻る
shift + command + j プロジェクト ナビでソース表示