17

__DATE__Objective-C でandを使用し__TIME__て、アプリのビルド日時を取得しています。Swift でこの情報を取得する方法が見つかりません。出来ますか?

4

5 に答える 5

33

Objective-C に戻らずに、ビルドの日時を取得できます。アプリがビルドされると、バンドルに配置された Info.plist ファイルは、常にプロジェクト内のファイルから作成されます。したがって、そのファイルの作成日はビルドの日時と一致します。アプリのバンドル内のファイルをいつでも読み取って、その属性を取得できます。Info.plist ファイルの属性にアクセスすることで、Swift でビルド日を取得できます。

 var buildDate:NSDate 
 {
     if let infoPath = NSBundle.mainBundle().pathForResource("Info.plist", ofType: nil),
        let infoAttr = try? NSFileManager.defaultManager().attributesOfItemAtPath(infoPath),
        let infoDate = infoAttr["NSFileCreationDate"] as? NSDate
     { return infoDate }
     return NSDate()
 }

注: これは、最初にこの問題が発生したときにブリッジ ヘッダーを使用するようになった投稿です。それ以来、この「Swifter」ソリューションを見つけたので、今後の参考のために共有したいと思いました。

[編集] compileDate 変数を追加して、フル ビルドを実行していない場合でも最新のコンパイル日を取得できるようにしました。アプリ ストアでアプリケーションをリリースするにはフル ビルドを行う必要があるため、これは開発中にのみ意味がありますが、それでもある程度は役立つ可能性があります。同じように動作しますが、Info.plist ファイルの代わりに実際のコードを含むバンドル ファイルを使用します。

var compileDate:Date
{
    let bundleName = Bundle.main.infoDictionary!["CFBundleName"] as? String ?? "Info.plist"
    if let infoPath = Bundle.main.path(forResource: bundleName, ofType: nil),
       let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath),
       let infoDate = infoAttr[FileAttributeKey.creationDate] as? Date
    { return infoDate }
    return Date()
}
于 2016-07-17T12:58:54.553 に答える