预处理器时间戳

时间:2010-10-11 11:10:27

标签: objective-c c cocoa xcode

是否可以通过预处理器宏生成嵌入式Unix时间戳?

例如:#define VERSION_EXPIRE __TIMESTAMP__

原因是,我有测试版,我想在编译时生成一个过期时间戳(在特殊的构建配置中)。

3 个答案:

答案 0 :(得分:6)

我已经解决了以下问题:

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

答案 1 :(得分:2)

如果您使用svngit等版本控制软件,则可以按特定版本的ID或日期自动替换$Id: $$Date: $等字符串文件(svn)或“HEAD”版本(git)。

修改:对于git,您可以提取来源

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

要在该过程中替换某些字符串,您必须告诉.gitattributes中的git您想要替换它们:

file*   export-subst

有关“$ ... $”之间的内容和方式的语法,请参阅git-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"

答案 2 :(得分:0)

在使用sed将__TIMESTAMP__替换为date的预处理之前添加自定义构建步骤。最简单的方法是tell Xcode to use a makefile