Showing App's Build Date

匿名 (未验证) 提交于 2019-12-03 02:56:01

问题:

I am able to display the build date for my app in the simulator, but whenever I archive the app, and upload it to TestFlight, and then install it on a device, the build date doesn't show.

Here is what I'm doing to display the build date.

First, I added CFBuildDate as a string to myproject-info.plist

Next, I added the following script to Edit Scheme -> Build -> Pre-Actions -> Run Script Action :

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 

Finally, used the following code to get the build date from the plist file :

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

This displays the build date in simulator (though occasionally it doesn't), but when deploying the app through TestFlight, the build date never displays. Any ideas ?

Thanks in advance.

回答1:

Try running the script as a build phase step, rather than a scheme pre-action step, so it's run all the time, regardless of the type of build you are producing.



回答2:

You might consider using the built-in __DATE__ and __TIME__ macros which will return a string representation of the date and time the app was built. Perhaps they will be of more help to you:

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


回答3:

To get build date with format 'yyMMddHHmm' you could try this:

+ (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; } 


回答4:

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) } 


回答5:

If you redefine __DATE__ and __TIME__

  #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; } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!