iOSアプリのインストール日時を取得する
前回に引き続き、AndroidとiOSのアプリ作成での調査メモを。
Androidはアプリケーション自身が「自分がいつインストールされたのか」を取得できるAPIが存在しますと。
アプリケーションのインストール日時、更新日時を取得する TechBooster
APIレベル9,Android2.3からではありますが、このうちインストール日時が特に使いたい機能だった訳です。
で、コレに相当する機能がiOSにあるのかどうか、ここ数日しらべまくりました。
結論から言えば、一発で取得できるメソッドは無いけど、取得はできる、だろうと。
Androiのように上手く取得できるメソッドが無いので、sysctlとかNSTaskとか色々探したものの、すべて検討違いなところで、最終的にはすでに買ってあったObjective-Cの逆引きハンドブックに書いてあったというオチ。
肝はインストールされる「*.app」自身のタイムスタンプを取得できればよいということで、
1、NSFileManagerをつかう
2、ホームディレクトリからアプリ自身のappファイルのパスを設定する
という2点でできました。
以下、サンプルコード。
アプリの名前が「AppTimeTest」という前提。
ファイル変更日時も取得できますが、インストール日時と同じになってしまうようで、今日時点ではどのような条件で変更日付が変わるかは不明。
なんとなく、AppStoreから新バージョンアップデートをしたら、かなぁ〜〜〜〜〜?と思うけど確認未済。
まぁ、作成日付が取得できればよかったので一旦これまで。
確認はiOSシュミレータと私物のiPhone4(iOS 5.1.1)で実施。
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"];
//NSFileManagerでファイル情報をNSDictionaryにつめる。
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *err = nil;
NSDictionary *fileInfoDict;
fileInfoDict = [fileManager attributesOfItemAtPath:appFilePath error:&err];
//一旦ログにだしてみる。errは普通何もでない。
NSLog(@"error = %@", err);
NSLog(@"fileInfo = %@", fileInfoDict);
//NSDictionaryからappファイル作成日時を取得
NSDate *fileInstallDate = [fileInfoDict objectForKey:NSFileCreationDate];
//appファイル変更日時を取得
NSDate *fileUpdateDate = [fileInfoDict objectForKey:NSFileModificationDate];
//TextLabelに出すのでフォーマット設定
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterMediumStyle];
[formatter setTimeStyle:NSDateFormatterMediumStyle];
//フォーマットに従ってTextLabelにセット。一応ファイルパスも表示。
[textAppInstallDate setText:[formatter stringFromDate:fileInstallDate]];
[textAppUndateDate setText:[formatter stringFromDate:fileUpdateDate]];
[textAppFilePath setText:appFilePath];
}
ファイル変更日時も取得できますが、インストール日時と同じになってしまうようで、今日時点ではどのような条件で変更日付が変わるかは不明。
なんとなく、AppStoreから新バージョンアップデートをしたら、かなぁ〜〜〜〜〜?と思うけど確認未済。
まぁ、作成日付が取得できればよかったので一旦これまで。
確認はiOSシュミレータと私物のiPhone4(iOS 5.1.1)で実施。

コメント