project.pbxproj文件散列 - 使用什么散列以及如何使用?

时间:2014-03-25 23:18:34

标签: ios xcode hash

如果您查看 project.pbxproj ,您会看到项目中的每个文件都有一个哈希

例如

1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };

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

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

2 个答案:

答案 0 :(得分:5)

目标-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:])

答案 1 :(得分:3)

谢尔盖的解决方案(实际上非​​常)很好,但我认为它可能值得一些解释:XCode使用project.pbxproj的非人格式的唯一原因可能是确保每个键都是唯一的

事实上,我在阅读谢尔盖的解决方案之前做了一些测试,只要哈希是唯一的并且文件是一致的(没有悬空文件或类似......),你可以把作为哈希几乎你想要的(如果像UUID一样,至少,我没有尝试使用较短的字符串或非HEX数字......)。

接受的答案也证实了这一点,因为UUID4是纯随机标识符,如下所述:

UUID4 explanation on Wikipedia

这意味着XCode不可能使用密钥交叉检查资源(例如,如果MD5散列的密钥可以执行此操作)。

希望这会有所帮助