如果查看project.pbxproj,您将看到项目中的每个文件都有一个哈希值
例如
1D60589F0D05DD5A006BFB54 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D30AB110D05D00D00671497 /* Foundation.framework */; };
Run Code Online (Sandbox Code Playgroud)
1D60589F0D05DD5A006BFB54是链接的基础框架的哈希.
我想知道这些是如何计算的,即使用了什么函数以及文件名之外的哪些元信息进入哈希的输入.
小智 5
Objective-C的:
uuid_t uuid;
uuid_generate(uuid);
NSString *UUID = @"";
for (int i = 0; i < 12; i++) UUID = [UUID stringByAppendingFormat:@"%02X", uuid[i]];
Run Code Online (Sandbox Code Playgroud)
蟒蛇:
def GenerateId(cls):
return ''.join(str(uuid.uuid4()).upper().split('-')[1:])
Run Code Online (Sandbox Code Playgroud)
Sergey 的解决方案(实际上非常)很好,但我认为它可能值得一些解释:XCode 使用这种不人道格式的唯一原因project.pbxproj可能是确保每个键都是唯一的。
事实上,我在阅读 Sergey 的解决方案之前做了一些测试,只要散列是唯一的并且文件是一致的(没有悬空的文件或类似的东西......),你可以把你想要的几乎所有的东西作为散列(如果 UUID 类似,至少,我没有尝试使用较短的字符串或非十六进制数字......)。
接受的答案也证实了这一点,因为 UUID4 是一个纯粹的随机标识符,如下所述:
这意味着 XCode 不可能用密钥交叉检查资源(例如,如果 MD5 散列的密钥可能会这样做)。
希望这会有所帮助
| 归档时间: |
|
| 查看次数: |
835 次 |
| 最近记录: |