Метка времени препроцессора - PullRequest
1 голос
/ 11 октября 2010

Можно ли сгенерировать встроенную метку времени Unix с помощью макроса препроцессора?

Например: #define VERSION_EXPIRE __TIMESTAMP__

Причина этого в том, что у меня есть бета-версии, и я хочу сгенерировать метку времени истечения во время компиляции (в специальной конфигурации сборки).

Ответы [ 3 ]

6 голосов
/ 11 октября 2010

Я решил это следующим образом:

#define VERSION_TIMESTAMP __DATE__" "__TIME__"\x0"

В каком-то другом классе

+ (NSDate *)versionExpiresInDays:(NSUInteger)days {
    NSString *dateString = [NSString stringWithUTF8String:VERSION_TIMESTAMP];   
    NSLocale *enLocale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
    NSDate *compiledOn = [NSDate dateWithNaturalLanguageString:dateString locale:enLocale];

    return [compiledOn dateByAddingTimeInterval:days*24*60*60];
}
2 голосов
/ 11 октября 2010

Если вы используете программное обеспечение для управления версиями, например svn или git, вы можете автоматически заменить строки, такие как $Id: $ или $Date: $, на идентификатор или дату конкретной версии файла (svn) илирелиз "HEAD" (git).

Редактировать: Для git вы можете извлечь источники

git archive --format=zip -9 -o project.zip HEAD file1 file2...

Для замены определенных строк в ходе этого процесса у вас естьчтобы сказать git в .gitattributes, что вы хотите заменить вещи:

file*   export-subst

Синтаксис терминов "что ..." и "как" между "$ ... $" приведен в форматах на странице mangit-log.В качестве примеров я привожу в своем коде

#define P99_VERSION_DATE "$Format:%cd$"
#define P99_VERSION_ID "$Format:%H$"

Который в дистрибутивной версии файла:

#define P99_VERSION_DATE "Thu Oct 7 23:38:43 2010 +0200"
#define P99_VERSION_ID "6f9740a6808ff50f42d24bb7b5234a904f84e6fe"
0 голосов
/ 11 октября 2010

Добавьте пользовательский шаг сборки перед предварительной обработкой, который использует sed для замены __TIMESTAMP__ на date.Самый простой способ сделать это - указать Xcode использовать make-файл .

...