iPhoneで有料アプリの無料版を同じXcodeプロジェクトで作りたい時のTipsです。

普通にアプリを作る

「こんにちは有料アプリ」と表示するだけのアプリ「HelloApp」を作りました。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
  [windowmakeKeyAndVisible];
  UILabel*messageView = [[UILabelalloc] initWithFrame:CGRectMake(10, 30, 300, 20)];
  messageView.text= @"Hello Paid App";
  [windowaddSubview:messageView];
  returnYES;
}

実行結果

無料版用のターゲットを作る

XCodeのターゲットから、オリジナルのターゲットを複製する。

複製したターゲット名を「HelloApp Lite」に変更して、ビルド設定を修正する。

GCC-プリプロセスの「プリコンパイルされたヘッダに使用しないプリプロセッサマクロ」に 「FREE_VERSION=1」を追加する。定義名は任意なので自分のわかりやすいように。

プロダクト名を「HelloApp Lite」にする。

Info.plistファイルを「HelloApp Lite-info.plist」にする。

プロジェクト内に作成されている「HelloApp-Info copy-info.plist」を併せて名称変更する。

ソースコード内で分岐する

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    
  UILabel*messageView = [[UILabelalloc] initWithFrame:CGRectMake(10, 30, 300, 20)];
#ifdef FREE_VERSION
  messageView.text= @"Hello Free App";
#else
  messageView.text= @"Hello Paid App";
#endif
  [windowaddSubview:messageView];
  [windowmakeKeyAndVisible];
  returnYES;
}

アクティブターゲットを「HelloApp Lite」にしてビルドすれば、無料版の出来上がり〜。

Posted in iPhone at 4月 14th, 2010. No Comments.

iPhone SDK 3.1.x あたりでの話です。

iPhoneでカメラ撮影した後の画像をファイルに保存する際(写真ライブラリじゃなくて)には 一度NSDataに変換してから保存するステップになると思うんですが、 NSDataに変換したデータをUIImageに戻すと写真の方向がおかしくなってしまいました。

具体的にはiPhoneを縦にして撮影した写真が横になってしまったりとか。

結論からいいますと、UIImagePNGRepresentationを使ってNSDataに変換していたのがダメらしく、UIImageJPEGRepresentationならOKでした。あんまり根本的解決になってないけれど、妥協できるラインだったのでこの方法で対処しました。

縦横の方向がおかしくなるコード例

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // UIImage取り出し
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    // PNGデータに変換
    NSData *imageData = UIImagePNGRepresentation(originalImage);
    // NSDataをUIImageに戻す
    UIImage *decodedImage = [UIImage imageWithData:imageData];
    // UIImageViewに設定
    imageView.image = decodedImage;
    // イメージピッカーを非表示
    [self dismissModalViewControllerAnimated:YES];
}

縦横の方向を正しく保持できるコード例

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // UIImage取り出し
    UIImage *originalImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    // JPEGデータに変換
    NSData *imageData = UIImageJPEGRepresentation(originalImage, 0.9);
    // NSDataをUIImageに戻す
    UIImage *decodedImage = [UIImage imageWithData:imageData];
    // UIImageViewに設定
    imageView.image = decodedImage;
    // イメージピッカーを非表示
    [self dismissModalViewControllerAnimated:YES];
}

超参考になったページ

Fifty Outs: Camera image orientation
http://mohrt.blogspot.com/2009/05/camera-image-orientation.html

Posted in Objective-C at 4月 13th, 2010. No Comments.