UIPopoverController を閉じる際に注意すること

dismissPopoverAnimated:メソッドをコールすると
– (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
がコールされない。

ポップオーバー コントロール作成時にポップオーバー コントロールのメンバ変数を参照し、alloc している場合は、必ず nil をセットしておく。
また、ポップオーバー コントロールへ release メッセージを送信し、解放しておかないとリークの原因になるので注意すること。

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
28
29
30
31
32
33
34
35
36
37
// ポップオーバー コントロールの表示処理
- (void)dispPopoverControll
{
    // ポップオーバー コントロールを表示する
    if (!popoverController_) {
    	// ポップオーバー コントロールを alloc する
    	:
    }
    if (!popoverController_.popoverVisible) {
		:
    }
}
 
#pragma mark -
#pragma mark UIPopoverControllerDelegate Method
 
// ポップオーバー コントロールがコントロール領域外をタップするなどして非表示とされた際の処理
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
    // the user dismissed the popover, so release it here
    [popoverController release];
    popoverController = nil;
 
    popoverController_ = nil;    
}
 
- (void)closePopoverController
{
    // 本ポップオーバーを非表示にする
    if (popoverController_.popoverVisible == YES) {
        [popoverController_ dismissPopoverAnimated:YES];
 
        [popoverController_ release];
        popoverController_ = nil;
    }
    :
}

iPad アプリを OTA 配信(Over The Air)する方法

オーガナイザでビルドが完了した後の処理は以下の通り。
IIS にアプリを配置し配信しようとして悩んだ箇所があったので、対処方法も記す。

1. ”Save for Enterprise Distribution”チェックボックスをチェックすると設定項目が表示されるので、OTA配信に必要な情報を入力し、[Save]ボタンを押下する
“Save As:”にアプリ名を入力する
“Application URL:”に配信用URLを入力する
→ アプリケーション(.ipa)ファイルの完全修飾 HTTP または HTTPS URL
“Title:”に適当なタイトル(???アプリ配信など)を入力する

2. 配信用ページを用意する
アプリ名と配信用URL(.plist)を記入し、配信用ページを用意する
→ index.html (配信用ページ)

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html>
<head> 
  <meta name="viewport" content="width=device-width" />
  <title>(アプリ名)</title> 
</head> 
<body>
<center>
<h1>(アプリ名)</h1>
<a href="itms-services://?action=download-manifest&url=http://example.com/(アプリ名).plist">(アプリ名)をインストール</a>
</center>
</body>
</html>

3. 作成した以下のファイルをサーバへアップロードする
– .ipa (アプリファイル)
– .plist(”Save for Enterprise Distribution”チェックボックスをチェックしておくと生成される)
– (必要であれば、)画像ファイル
– 配信用ページ(index.html)

4. 配信用URLへアクセスし、テストする
ここで問題が起きるようであれば、サーバのMIMEタイプの設定を確認する
私は IIS サーバを利用したが、ここで問題が起きたので、以下の資料を基に MIME タイプの設定を行うことで、問題が解決した
→ MIME タイプ設定を行うと web.config ファイルが作成されていた

Apple公開のSDK
– iOS 4 搭載デバイス用 エンタープライズアプリケーションの配布

– サーバの MIME タイプの設定
マニフェストファイルとアプリケーションファイルが正常に配信されるように、Web サーバの構成が必要になる場合があります。
– Mac OS X Server の場合は、サーバ管理を使用して「MIME タイプ」設定に次の MIME タイプを追加します。
application/octet-stream ipa
text/xml plist
– IIS の場合は、IIS マネージャを使用して、サーバの「プロパティ」ページで次の MIME タイプを追加します。
.ipa application/octet-stream
.plist text/xml

Ad Hoc ビルドする方法 (マルチ アプリケーションバンドルで ipa ファイルがビルドできないときの対処)

開発中アプリを関係者に配布する際、開発者に負担が少ない Ad Hoc ビルドという方法があります。
~.ipa ファイルのみを配布すれば良いので、開発者にとっては非常に助かるはずです。
以前より、Ad Hoc ビルドという手法があることは知っていましたが、なかなか試す機会がなかったので、実際試してみました。
また、その際にスタティック リンク ライブラリなどを利用していて ~.ipa ファイルがビルドできないという問題にも遭遇したので、対処方法をまとめておきます。
(xcode3.xではこの様な問題はなかったんだけどなぁ~。)

■ iTunes から iPad アプリを実機にインストールする方法
1. ディストリビューション用証明書をダウンロードする
Ad Hoc ディストリビューション用プロビジョニングファイルをダウンロードする
Create and Download an iOS Distribution Certificate
Create and Download an Ad Hoc Distribution Provisioning Profile

2. xcodeでアプリをビルドする
[Product]-[Archive]メニューを選択する

(注意点) 複数のプロジェクトが設定されているプロジェクトの場合、xcode 4.2.1ではビルドに失敗するため、スタティック リンク ライブラリなどのプロジェクト設定を以下の通りにすること。
“Skip Install” を “YES” にする
(自分が開発しているアプリのプロジェクトは、設定する必要なし)
Archiving project in XCode incorrectly creates multi-application bundle

3. ビルドが完了するとオーガナイザーが起動する
オーガナイザー – Archives にビルドしたアプリが一覧表示される。
対象のバージョンを選択し、[Share…]ボタンを押下する。

[iOS App Store Package(.ipa)]を選択し、[Identity:]は、ディストリビューション用プロビジョニングファイルを選択する。

ファイル名、出力先を設定し、[Save]ボタンで、〜.ipa ファイルを出力する。

■ OTA(企業の配信) する方法
1.上記の ”Save for Enterprise Distribution”チェックボックスをチェックすると設定項目が表示される。

2.配信用Webページを作成することで、配信できる。

■ iTunes から iPad アプリを実機にインストールする方法
1. 上記で作成した 〜.ipa ファイルをダブルクリックすると、iTunes – App に登録される。
2. iPad を iTunes と同期することでインストールすることができる。

xcode4 で static link library を追加する2

1. static link library の xcodeプロジェクト ファイルが公開されている場合は、プロジェクトファイルを xcode のプロジェクトナビゲータへドラッグ&ドロップする。

2. スタティック リンク ライブラリにより設定方法は異なるが、たいていは以下の様な事柄を設定する
プロジェクト設定
・プロジェクトの依存設定
TERGETS – プロジェクトを選択し、Build Phases – Target Dependencies にスタティック リンク ライブラリ プロジェクトを設定する。
・ “Header Search Paths” 設定
・ライブラリが利用しているフレームワークを追加設定する
・ビルド設定:“Other Linker Flags” under the “Linker” section, and add “-ObjC” and “-all_load” to the list of flags.

3. スタティックリンクライブラリのビルド
プロジェクト ナビゲータで、適切に認識されているか?確認する(問題がある場合、赤く表示される?)

4. スタティック リンク ライブラリを利用するプロジェクトの設定を行う
TERGETS – Build Phases – Target Dependences にリンクライブラリのプロジェクトを設定する
Link Binary With Libraries にスタティック リンク ライブラリを追加設定する

xcode 4.2.1 のアップデートができない場合の対処

mac AppStore で xcode がアップデートと表示されているのに、アップデートができない場合があります。
(私の場合、3台のマシンで xcode をアップデートして、1台がアップデートできませんでした。)

対処方法としては、アプリケーション フォルダの”Install Xcode.app”を削除し、再度、アップデートを試みることで正常にアップデートができました。

ボタンのタイトル文字を太くする

iPad の開発をしていると画面サイズが大きいので画面デザインのメリハリをつけたくなることがあります。そんなときのために、タイトル文字列なんかをボールドにしたりしてます。

1
button1_.titleLabel.font = [UIFont boldSystemFontOfSize:16];    // ボールド

SSCheckBoxView

SSCheckBoxView for iOS

さまざまなパターンのチェックボックス コントロールが利用できます。
iPhone ではテーブル ビュー(行チェック)を利用すれば、チェックボックス コントロールを利用する局面はあまりないかと思いますが、iPad では結構重宝するかと思います。
リソースを作らなくて良いことだけでも嬉しいです。(^^)v

github

グリッド コントロール風のテーブル ビュー

– iPad で表形式のデータ表示にベストなコントロール

いろいろ表形式のコントロールは紹介されているようですが、単にデータを表示するだけならこのコントロールが扱いやすかったです。

MultiColumnTableViewForiOS for iOS
紹介記事
github

シングルトン パターン オブジェクトの解放

– シングルトン パターンの生成と解放

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
static hoge *sInstance = nil;
 
@implementation hoge
 
+ (id)sharedInstance 
{
    @synchronized(self) {   // スレッドセーフとする
	if (!sInstance) {
            sInstance = [[self alloc] init];
        }
    }
 
    return sInstance;
}
 
+ (void)releaseInstance
{    
    [sInstance release];
    sInstance = nil;        // インスタンスにアクセスされても問題がないように nil をセットする
}
 
@end

instruments が落ちてしまう時に確認する点

xcode 4.2 付属の instruments でデバッグしていてある処理を行った後に必ずデバッグ実行が停止していました。
いろいろ調べた結果、Profile の “Build Configuration”が “Release”となっていることが原因と判明。
“Debug”と設定することでデバッグ実行が停止しなくなりました。
こういう問題って、一人で開発している時に凄く不安にさせてくれるんだよなぁ~
でも、”Release”で問題ないような気がするし、コードのどこかに問題があるような気がするなぁ。。。

(追記)
Profile の “Build Configuration”が “Release”であっても動作するようになりました。
やはり、自分のコードに問題がありました。(>_<) 原因は、ポップオーバー ビューの閉じる際の処理、また、その他 リークしている箇所がありました。 理屈で考えると、"Release"で問題ないのは明らかであるのに心に余裕がなく血迷っていたようです。笑 その際のリーク対処方法もまとめておこうと思います。