2012-08-02 15 views
14

Ich kann das Erstellungsdatum für meine App im Simulator anzeigen, aber wenn ich die App archiviere und sie auf TestFlight hochlade und dann auf einem Gerät installiere, wird das Erstellungsdatum nicht angezeigt .Anzeigen des Builddatums der App

Hier ist, was ich mache, um das Build-Datum anzuzeigen.

Zuerst habe ich CFBuildDate als String hinzugefügt myproject-info.plist

Als nächstes fügte ich das folgende Skript Schema bearbeiten -> Build -> Pre-Aktionen -> Run Script-Aktion:

infoplist="$BUILT_PRODUCTS_DIR/$INFOPLIST_PATH" 
builddate=`date` 
if [[ -n "$builddate" ]]; then 
/usr/libexec/PlistBuddy -c "Add :CFBuildDate $builddate" ${infoplist} 
/usr/libexec/PlistBuddy -c "Set :CFBuildDate $builddate" ${infoplist} 
fi 

Schließlich verwendet den folgenden Code den Build-Datum aus der plist-Datei zu erhalten:

NSString *build_date = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBuildDate"]; 

Dies zeigt das Erstellungsdatum in Simulator (obwohl dies gelegentlich nicht der Fall ist), aber bei der Bereitstellung der App über TestFlight wird das Erstellungsdatum nicht angezeigt. Irgendwelche Ideen ?

Vielen Dank im Voraus.

+1

Versuchen Sie das Skript als * Build-Schritt ausgeführt wird * so ist es die ganze Zeit laufen, unabhängig von der Art des Build Sie produzieren. – trojanfoe

+0

Warum benötigen Sie das Erstellungsdatum? – AppHandwerker

+0

@trojanfoe - Also habe ich das gleiche Skript wie ein neues Run Script in Build Phases hinzugefügt. Werde versuchen, das mit den Ergebnissen zurück zu bekommen. – Myxtic

Antwort

7

Versuchen Sie das Skript als BUILD-Phase Schritt ausgeführt wird, sondern als ein Schema vorgeHandlungsSchritt, so dass es die ganze Zeit laufen, unabhängig von der Art der bauen Sie produzieren.

25

Sie könnten die integrierten __DATE__ und __TIME__ Makros in Erwägung ziehen, die eine Stringdarstellung des Datums und der Uhrzeit zurückgeben, zu der die App erstellt wurde. Vielleicht werden sie von mehr Hilfe sein:

NSString *dateStr = [NSString stringWithUTF8String:__DATE__]; 
NSString *timeStr = [NSString stringWithUTF8String:__TIME__]; 
+0

+1 Habe das nicht versucht, aber sieht wie eine elegante Lösung aus. Vielen Dank ! – Myxtic

+0

Das ist eine gute Lösung, aber Datum und Uhrzeit sind nicht in der 'Info.plist' Datei und daher nicht von außen sichtbar. – trojanfoe

+0

Was ist "von außen sichtbar"? Auf die Variable build_date kann zugegriffen werden. – Jeremy

11

bekommen Bis heute mit Format ‚jjmmtthhmm‘ bauen könnte man dies versuchen:

+ (NSString *)GetBuildDate { 
    NSString *buildDate; 

    // Get build date and time, format to 'yyMMddHHmm' 
    NSString *dateStr = [NSString stringWithFormat:@"%@ %@", [NSString stringWithUTF8String:__DATE__], [NSString stringWithUTF8String:__TIME__]]; 

    // Convert to date 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"LLL d yyyy HH:mm:ss"]; 
    NSDate *date = [dateFormat dateFromString:dateStr]; 

    // Set output format and convert to string 
    [dateFormat setDateFormat:@"yyMMddHHmm"]; 
    buildDate = [dateFormat stringFromDate:date]; 

    [dateFormat release]; 

    return buildDate; 
} 
+2

Nizza :) aber nicht vergessen Stellen Sie das Gebietsschema ein oder es wird nicht überall funktionieren. \t [dateFormatter setLocale: [NSLocale localeWithLocaleIdentifier: @ "en_US"]]; –

5

Wenn Sie neu definieren __DATE__ und __TIME__ es wird die Zeit Update jedes Mal, wenn Sie Ihre App bauen machen. Sie müssen nicht putzen oder archivieren, um die Zeit zu aktualisieren, sondern müssen nur das Projekt ausführen.

#define DATE [NSString stringWithUTF8String:__DATE__] 
    #define TIME [NSString stringWithUTF8String:__TIME__] 


- (NSString *)getBuildDate { 
    NSString *buildDate; 

    // Get build date and time, format to 'yyMMddHHmm' 
    NSString *dateStr = [NSString stringWithFormat:@"%@ %@", DATE , TIME ]; 

    // Convert to date 
    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"LLL d yyyy HH:mm:ss"]; 
    NSLocale *usLocale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    [dateFormat setLocale:usLocale]; 
    NSDate *date = [dateFormat dateFromString:dateStr]; 

    // Set output format and convert to string 
    [dateFormat setDateFormat:@"dd/MM/yyyy-HH:mm"]; 
    buildDate = [dateFormat stringFromDate:date]; 

    return buildDate; 
} 
+0

Beste Antwort, tnx – vinidog

5

swift3

static var buildDate: Date? { 
    guard let infoPath = Bundle.main.path(forResource: "Info.plist", ofType: nil) else { 
     return nil 
    } 
    guard let infoAttr = try? FileManager.default.attributesOfItem(atPath: infoPath) else { 
     return nil 
    } 
    let key = FileAttributeKey(rawValue: "NSFileCreationDate") 
    guard let infoDate = infoAttr[key] as? Date else { 
     return nil 
    } 
    return infoDate 
} 

static var prettyBuildDate: String { 
    guard let date = buildDate else { 
     return "Unknown" 
    } 
    let formatter = DateFormatter() 
    formatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ" 
    formatter.timeZone = TimeZone(abbreviation: "UTC") 
    return formatter.string(from: date) 
} 
+0

Dies ergibt kein konsistentes Ergebnis mit '__DATE__', da, wenn Sie Ihre App aktualisieren, info.plist gleich bleibt, während' __DATE__' zum Zeitpunkt des Updates korrekt aktualisiert wird. –

Verwandte Themen