iOSアプリ開発の逆引き辞典

iPhone/iPadで使えるアプリ開発のTipsをまとめてみました

HTTPレスポンスヘッダーの時間(Date)の文字列からNSDateを生成する

NSDate dateで現在時刻を取得することができますが、HTTPサーバーから返ってくる時間を使って処理をおこなう方法をご紹介します。

ここでは、Amazon Simple Storage Service(Amazon S3)から返ってきたHTTPレスポンスヘッダーの時刻を取り出す汎用的な処理ですが、一般的なHTTPサーバーでも同様かと思います。

レスポンスヘッダーのDateを見ると以下のようなフォーマットで、サーバーの現在時刻が格納されています。

Mon, 25 Oct 2010 09:49:00 GMT

この文字列をフォーマットしてNSDate型に変換するコードを以下に示します。

- (NSDate*) getDate:(NSHTTPURLResponse*)response
{
    NSDictionary* headers = [response allHeaderFields];
    NSString* httpDateString = [headers valueForKey:@"Date"];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setTimeStyle:NSDateFormatterFullStyle];
    [dateFormatter setDateFormat:@"EEE',' dd' 'MMM' 'yyyy HH':'mm':'ss zzz"];
    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
    [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"JST"]];
    [dateFormatter setCalendar:[[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease]];
    
    NSDate* nsDate = [dateFormatter dateFromString:httpDateString];
    [dateFormatter release], dateFormatter = nil;
    
    return nsDate;
}

アプリが実行されているiOSのバージョンがiOS 7.0以上であるかどうか判定する

iOS 7.0になり今まで以上にiOS 7.0までのレイアウトとiOS 7.0以上のレイアウトを使い分ける必要が出てきました。

この記事では、アプリが実行されているiOSのバージョンがiOS 7.0以上であるかどうか判定する方法をご紹介します。

iOSのバージョンを取得する

iOSのバージョンを取得するには、UIDeviceクラスのsystemVersionプロパティを使用します。

// iOSのバージョンを取得する
NSString* sysVersion = [[UIDevice currentDevice] systemVersion];

他にもiOSでのデバイス情報(端末情報)を取得するには「端末情報(デバイス情報)を取得する - iOSアプリ開発の逆引き辞典」にて詳しく記載しております。合わせてご参考ください。

iOSのバージョンを比較する

例えば、iOS 7.0以上では新しく用意したレイアウトを適用させたい場合やサポートしていないAPIを使っているという場合、以下のような方法によって特定のバージョンより新しいiOSかどうかを判定させることができます。

まずは下記のisSupportメソッドを作成します。このメソッドは現在のiOSバージョンが「7.0」の時、「7.0」未満のバージョンを渡すと「NO」を返します。

- (BOOL)isSupport:(NSString*)reqSystemVersion
{
    // iOSのバージョンを取得する
    NSString* sysVersion = [[UIDevice currentDevice] systemVersion];
    
    BOOL ret = NO;
    if ([sysVersion compare:reqSystemVersion options:NSNumericSearch] == NSOrderedAscending) {
        // iOSのバージョンが、指定されたバージョン未満である
        ret = NO;
    } else {
        // iOSのバージョンが、指定されたバージョン以上である
        ret = YES;
    }
    return ret;
}

上記のisSupportメソッドを使った例をご紹介します。アプリを実行しているiOSのバージョンは7.0とします。

BOOL isSupport1 = [self isSupport:@"6.0"];
// 結果は「NO」
        
BOOL isSupport2 = [self isSupport:@"7.0"];
// 結果は「YES」

BOOL isSupport3 = [self isSupport:@"7.0.1"];
// 結果は「YES」