投稿

7月, 2012の投稿を表示しています

iOSアプリのインストール日時を取得する

イメージ
前回に引き続き、AndroidとiOSのアプリ作成での調査メモを。 Androidはアプリケーション自身が「自分がいつインストールされたのか」を取得できるAPIが存在しますと。 アプリケーションのインストール日時、更新日時を取得する TechBooster APIレベル9,Android2.3からではありますが、このうちインストール日時が特に使いたい機能だった訳です。 で、コレに相当する機能がiOSにあるのかどうか、ここ数日しらべまくりました。 結論から言えば、一発で取得できるメソッドは無いけど、取得はできる、だろうと。 Androiのように上手く取得できるメソッドが無いので、sysctlとかNSTaskとか色々探したものの、すべて検討違いなところで、最終的にはすでに買ってあったObjective-Cの逆引きハンドブックに書いてあったというオチ。 肝はインストールされる「*.app」自身のタイムスタンプを取得できればよいということで、 1、NSFileManagerをつかう 2、ホームディレクトリからアプリ自身のappファイルのパスを設定する という2点でできました。 以下、サンプルコード。 アプリの名前が「AppTimeTest」という前提。 - (void)viewDidLoad { [super viewDidLoad]; //outletの代わりに紐付け textAppInstallDate = (UILabel*)[self.view viewWithTag:2]; textAppUndateDate = (UILabel*)[self.view viewWithTag:4]; textAppFilePath = (UILabel*)[self.view viewWithTag:6]; NSString *appFilePath; //ホームディレクトリパスを取得 appFilePath = NSHomeDirectory(); //ディレクトリパスにappファイル名を追加。 [appFilePath stringByAppendingString:@"AppTimeTest.app"];

スマホアプリのUIデザインとプログラム作成の分離

スマホアプリ開発について。 どうもUIデザインとプログラム作成を物理的にも別々のチームで実施しなければならいようで、「UIデザインの成果物とプログラム作成の成果物」をなんとか分離できないものかと画策しています。 まぁ世間のアプリ開発しているチームの大半はデザイン担当とプログラム作成担当は隣のデスクで分離なんていらないのかも知れませんが…。 まず、AndroidについてはXMLにレイアウトが集約されており、ActivityクラスからXMLの名前をしていし、そこからXML上に設定された各部品のidを指定する事ができるので、こちらはUIデザイン担当はXMLの作成とidの指定をすれば良いであろう、という見解になりました。 問題はiOSについてで、どうやらStoryboardを何も考えずに使うと、ViewとControllerクラスの宣言がStoryboard上でくっついているので「後からコーディングでViewとControllerを紐付ける」という操作が出来ない様子。 実際、プログラム上でself.storyboard instantiateViewControllerWithIdentifierを使っても返ってくるのはControllerなのでviewだけ引っこ抜く事が出来ません。(ここでのselfはカスタムVewController) で、一旦tempControllerという変数に入れて、self.view = tempController.viewとか無理矢理やってみたけど、だめだった。 色々さまよった結果、どうやらStoryboardを使いながらカスタムViewControllerを使うなら、Storyboard上で各画面(シーン)にカスタムViewController紐づける必要がある、というやり方しか見つけられなかった。それではUIデザイン担当がカスタムViewControllerのクラス名を知ってもらう必要が出てくるので、もう少しUIデザイン側がプログラムを知らなくても良いようにしたいなと。 で、Storyboard以前の仕組みであるNibファイルを使うやり方だと、Nibファイル側では具体的なControllerクラスの名前を知らなくても、Controllerクラス側でNibファイルと自身のviewを紐づける事ができるので、デザイ