.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.27 2009

SDK バージョン条件付きコンパイル

Tasaki です。

今回は、それが必要かという疑問はありますが、
iPhone SDK のバージョンをコンパイルの条件にするための
手法について解説しようと思います。
ただし、これは undocumented な方法なので、
使用については自己責任ということでお願いします。

やり方はいたって簡単で、
__IPHONE_OS_VERSION_MIN_REQUIRED というマクロの
値を評価するというものです。
このマクロは現在のSDKのバージョンを表しています。
例えば、2.2 なら 20200、2.2.1 なら 20201 という具合です。

具体例でいきますと、
AVFoundation フレームワークは、OS 2.2 以降に追加されたものです。
なので、当然 2.1 以前には含まれていません。
そこで、SDK2.2 以降がターゲットの場合のみ有効にしたい
といった場合には、以下のようにします。
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= 20200
#import <AVFoundation/AVFoundation.h>
#endif
ただし、この方法、
シミュレータだと SDK 2.2.1 でも 20000 が返されてしまうので、
使えるのは実機の場合に限られます。

なんかビミョーですね。
次回はもうちょっと役立つ話をしたいなあ。
スポンサーサイト
.26 2009

Interface Builder を使用しないアプリ開発

Tasaki です。

前回のソースコードでさらっと流していましたが、
あのコードは Nib ファイルを使用しない場合の
アプリケーション初期化メソッドの実装例でした。

iPhone アプリを開発する場合、
Xcode のプロジェクトテンプレートを利用するのが簡単で便利なのですが、
Interface Builder の使用を前提とした構成になっていて、
“初心者には逆にとっつきにくい”と感じた方もおられるのではないでしょうか?
かくいう僕自身がそうでした。

ということで、今回は Interface Builder や Nib ファイルを
全く使わないようにするための手順をご紹介したいと思います。

まず、適当なプロジェクトを Xcode で開きます。
(ここでは仮に、MyProject としておきます。)
そしたら、プロジェクトウィンドウのグループとファイル一覧から
MainWindow.xib ファイルを削除します。

entry5-1

次に Info.plist の Main nib file base name の項目を削除します。

entry5-2

後は、ソースを数カ所書き換えるだけです。
まず、MyProjectAppDelegate.h にある
@property (nonatomic, retain) IBOutlet UIWindow window;
上記の項目から、IBOutlet の記述を削除します。

次に、MyProjectAppDelegate.m の
applicationDidFinishLaunching: メソッドの先頭に
window = [[ UIWindow alloc ] initWithFrame: [[ UIScreen mainScreen ] applicationFrame ];
を追加します。

最後に main.m の
int retVal = UIApplicationMain(argc, argv, nil, nil );
の2つ目の nil を @"MyProjectAppDelegate" に置き換えます。
これで、プロジェクトから Interface Builder の影が
きれいさっぱりなくなりました。

公式のサンプルコードでも、ウィンドウだけの Nib ファイルが
そのまま置いてあったりして何となく気持ち悪い感じなんですよね。
使わないなら省いておいてくれたらいいのにと思うんですけど。

.25 2009

UIImagePickerController とナビゲーションバー

どうも、Tasaki です。

今回は画像データの読み込みに使用する UIImagePickerController の
ちょっとした注意点についてです。

カメラや写真アルバムを使用する場合には、
このイメージピッカーコントローラを使用することになるのですが、
このときアプリケーションはナビゲーションバーを使用する必要があるようです。

以前、ナビゲーションバーを使わない設計で
イメージピッカーを呼んでいたところ、
アルバムやカメラのUIから処理が戻ってくる段階で
アクセス違反となって強制終了するという事態に陥りました。

その後、色々と悪戦苦闘していたのですが、
UIImagePickerController のデリゲートが、
UIImagePickerControllerDelegate だけでなく、
UINavigetionControllerDelegate まで採用しなければならない点に思い至り、
試しにナビゲーションバーを追加してみたところ
無事エラー地獄から脱出できました。

で、ナビゲーションバーとかステータスバーとか
表示したくない時はどうすんだ?と思った訳ですが、
これは単純に非表示にしちゃえばいいってだけでした。
これで、イメージピッカーを呼びたいけど、
ナビゲーションバーは邪魔だという問題は解決したわけですね。

めでたし、めでたし。

ちなみにソースコードはこんな感じです。

- ( void ) applicationDidFinishLaunching:( UIApplication *) application {    
// ウィンドウの生成
 window = [[ UIWindow alloc ] initWithFrame:[[ UIScreen mainScreen ] bounds ]];
// ビューコントローラの生成
 viewController = [[ UIViewController alloc ] initWithNibName: nil bundle: nil ];
// ナビゲーションコントローラの生成とビューコントローラの追加
 navigationController = [[ UINavigationController alloc ] initWithRootViewController: viewController ];
// ウィンドウの子にナビゲーションバーを追加
 [ window addSubview: navigationController.view ];
// ナビゲーションバーを非表示にする
 [ navigationController setNavigationBarHidden: YES animated: NO ];
 [ window makeKeyAndVisible ];
}


ところで、こういうところで詰まってるような記述を
他の開発者の方のブログなんかで全然見かけなかったんですが、
僕がおかしいんですかね?
公式ドキュメントにも特に書かれてなかったように思いますし。

.24 2009

アプリを申請しました!

NEXT-SYSTEM の Tasaki です。

このブログでは、
iPhone アプリ開発の進捗状況やコツなどを紹介していきたいと思います。
よろしくお願いします。

早速ですが、昨日の時点で
現在開発中の初アプリ『Bullet Hole』を申請しました!

初めての申請ということで、
リジェクトされないかドキドキしています。
(実のところ、指摘されそうな箇所があるのですが…)
…まあ、そうなったら修正すればいいだけなんですけどね。

それよりも怖いのが、
一部の iPhone ディベロッパの間で騒がれている
かの Pending Contract 問題です!

もし捕まってしまったらと考えると……
いや今は考えないでおこう。


それでは、本日はこの辺で。
 HOME 

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。