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.