项目文件project.pbxproj中的文件哈希 - 使用哪种哈希算法以及如何使用?

9
如果你查看 project.pbxproj,你会发现项目中的每个文件都有一个哈希值。
例如:
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };

1D60589F0D05DD5A006BFB54是链接基础框架的哈希值。

我想知道这些哈希值是如何计算的,即使用了什么函数以及除文件名之外还有哪些元信息作为输入。

2个回答

12
参考事实上并不是一个哈希值,而是一个唯一标识符。
Objective-C:
uuid_t uuid;
uuid_generate(uuid);
NSString *UUID = @"";
    for (int i = 0; i < 12; i++) UUID = [UUID stringByAppendingFormat:@"%02X", uuid[i]];

Python:

def GenerateId(cls):
        return ''.join(str(uuid.uuid4()).upper().split('-')[1:])

我不确定我理解你的回答。在Python代码中,输入(cls)似乎根本没有被用来生成返回值。你能编辑你的回答以添加更多的解释吗? - inteist
抱歉,我不是Python开发者,但有时我会用一些脚本。这个字符串来自https://github.com/kronenthaler/mod-pbxproj/blob/master/mod_pbxproj.py - 您可以检查整个文件并找到更多信息。 - Sergei Nikitin
不完全是我想要的,但这是我得到的最多的信息。谢谢! - inteist
Javascript:uuidv4()。toUpperCase()。split(' - ')。slice(1).join('') - abumalick

6

Sergey的解决方案(实际上非常)好,但我认为它可能需要一些解释:XCode使用那种不人性化的project.pbxproj格式的唯一原因是确保每个键都是唯一的。

事实上,在阅读Sergey的解决方案之前,我进行了一些测试,并且只要哈希值是唯一的并且文件是一致的(没有悬挂的文件或类似的东西...),你可以将几乎任何想要的内容作为哈希值(如果是像UUID一样的字符串,至少我没有尝试过更短的字符串或非十六进制数字...)。

被接受的答案也证实了这一点,因为UUID4是一个纯随机标识符,如此声明:

Wikipedia上的UUID4解释

这意味着XCode不可能用资源交叉检查密钥(例如,如果密钥是MD5散列,则可以这样做)。

希望这会有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接