最近Titanium Mobileをやってます。
http://developer.appcelerator.com/
Titaniumはとっても生産性が上がる素晴らしいツールなんですが
使っていくうちに、もう少しOOPっぽく楽に書きたいなと思うようになりました。
そのひとつの回答として「CoffeeScript」を使うというのがあるんですけど
CoffeeScriptを使ったTitanium Mobileアプリケーション開発
http://d.hatena.ne.jp/donayama/20110107/titanium_with_coffeescript
Objective-Cを生成するためのJavaScriptを生成するためのCoffeeScriptを書く
というところに、どうしても抵抗があります(何をいまさら・・)。
複数人で、しかも学習しながら開発をしようと考えているので
リファレンスやサンプルを一度CoffeeScriptに翻訳するというプロセスは
結構きついだろうと思いました。
そこでmootoolsを使います。
http://mootools.net/
mootoolsにはサーバサイド用のmootools-serverというのがあるので、それを使いましょう。
http://mootools.net/download
// app.js
Ti.include('mootools-core-1.3-server.js');
var Window = new Class({
initialize: function(options){
return Ti.UI.createWindow(options)
}
});
var w = new Window({backgroundColor: '#fff'});
w.open();
こんな感じでクラスベースにコードを書いていくことができます。
Titaniumに適したJSライブラリを探している方、お試しアレ。
CM
僕が最近起こした会社FoodFotoでは、エンジニア、デザイナーを募集しています。
サーバインフラに強い方、Railsに詳しい方、TitaniumでiPhone開発したい方、iPhoneやWebサービスのデザインをしたい方、などなど募集中です。一緒に世界をめざそーぜ。
興味あるという方がいらっしゃいましたら、@func09 か haga@foodfoto.jp 宛にご連絡ください。
Posted in
iPhone,
javascript at 1月 13th, 2011.
1 Comment.
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.