Affichage de la date de création de l'application

Je suis en mesure d'afficher la date de génération de mon application dans le simulateur, mais chaque fois que j'archive l'application et la télécharge sur TestFlight, puis l'installe sur un périphérique, la date de génération ne s'affiche pas.

Voici ce que je fais pour afficher la date de construction.

D'abord, j'ai ajouté CFBuildDate en tant que string à myproject-info.plist

Ensuite, j'ai ajouté le script suivant à Edit Scheme -> Build -> Pre-Actions -> Exécuter une action de script:

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 

Enfin, utilisez le code suivant pour get la date de génération à partir du file plist:

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

Cela affiche la date de construction dans le simulateur (bien que ce ne soit pas le cas), mais lors du deployment de l'application via TestFlight, la date de génération ne s'affiche jamais. Des idées ?

Merci d'avance.

Essayez d'exécuter le script en tant qu'étape de phase de construction , plutôt qu'en tant qu'étape de pré-action du schéma, afin qu'il s'exécute tout le time, quel que soit le type de construction que vous produisez.

Vous pouvez envisager d'utiliser les macros __TIME__ __DATE__ et __TIME__ qui __TIME__ une représentation sous forme de string de la date et l'heure de construction de l'application. Peut-être qu'ils vous seront plus utiles:

 NSSsortingng *dateStr = [NSSsortingng ssortingngWithUTF8Ssortingng:__DATE__]; NSSsortingng *timeStr = [NSSsortingng ssortingngWithUTF8Ssortingng:__TIME__]; 

Pour get la date de construction avec le format 'yyMMddHHmm', vous pouvez essayer ceci:

 + (NSSsortingng *)GetBuildDate { NSSsortingng *buildDate; // Get build date and time, format to 'yyMMddHHmm' NSSsortingng *dateStr = [NSSsortingng ssortingngWithFormat:@"%@ %@", [NSSsortingng ssortingngWithUTF8Ssortingng:__DATE__], [NSSsortingng ssortingngWithUTF8Ssortingng:__TIME__]]; // Convert to date NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"LLL d yyyy HH:mm:ss"]; NSDate *date = [dateFormat dateFromSsortingng:dateStr]; // Set output format and convert to ssortingng [dateFormat setDateFormat:@"yyMMddHHmm"]; buildDate = [dateFormat ssortingngFromDate:date]; [dateFormat release]; return buildDate; } 

Si vous redéfinissez __DATE__ et __TIME__ , l'heure sera mise à jour chaque fois que vous __TIME__ votre application. vous n'avez pas besoin de nettoyer ou d'archiver pour mettre à jour le time, juste besoin d'exécuter le projet.

  #define DATE [NSSsortingng ssortingngWithUTF8Ssortingng:__DATE__] #define TIME [NSSsortingng ssortingngWithUTF8Ssortingng:__TIME__] - (NSSsortingng *)getBuildDate { NSSsortingng *buildDate; // Get build date and time, format to 'yyMMddHHmm' NSSsortingng *dateStr = [NSSsortingng ssortingngWithFormat:@"%@ %@", 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 dateFromSsortingng:dateStr]; // Set output format and convert to ssortingng [dateFormat setDateFormat:@"dd/MM/yyyy-HH:mm"]; buildDate = [dateFormat ssortingngFromDate:date]; return buildDate; } 

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.atsortingbutesOfItem(atPath: infoPath) else { return nil } let key = FileAtsortingbuteKey(rawValue: "NSFileCreationDate") guard let infoDate = infoAttr[key] as? Date else { return nil } return infoDate } static var prettyBuildDate: Ssortingng { 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.ssortingng(from: date) }