Macos Mac应用商店收据-哈希不匹配。为什么?

Macos Mac应用商店收据-哈希不匹配。为什么?,macos,app-store,receipt-validation,Macos,App Store,Receipt Validation,我正在尝试创建一个Mac应用程序,请对我温柔一点,因为这是我的第一次尝试!基本上,我在iOS上所做的一切都转移到了Mac上,它几乎准备好了剩下的一部分——应用商店验证,以防止人们复制它 我在我的几个iOS应用程序中运行了收据验证码,它们为我工作(用于应用内购买)。有了Mac,我只想核实一下收据,希望足够了。以下是我创建的代码的基础: char buf[512] = ""; get_platform_uuid(buf, sizeof(buf)); NSString *uuidString = [

我正在尝试创建一个Mac应用程序,请对我温柔一点,因为这是我的第一次尝试!基本上,我在iOS上所做的一切都转移到了Mac上,它几乎准备好了剩下的一部分——应用商店验证,以防止人们复制它

我在我的几个iOS应用程序中运行了收据验证码,它们为我工作(用于应用内购买)。有了Mac,我只想核实一下收据,希望足够了。以下是我创建的代码的基础:

char buf[512] = "";
get_platform_uuid(buf, sizeof(buf));

NSString *uuidString = [NSString stringWithUTF8String:buf];
NSUUID *myUUID = [[NSUUID UUID] initWithUUIDString:uuidString];

unsigned char uuidBytes[16];
[myUUID getUUIDBytes:uuidBytes];

NSMutableData *input = [NSMutableData data];
[input appendBytes:uuidBytes length:16];
[input appendData:[receipt objectForKey:kReceiptOpaqueValue]];
[input appendData:[receipt objectForKey:kReceiptBundleIdentifierData]];

NSMutableData *hash = [NSMutableData dataWithLength:SHA_DIGEST_LENGTH];
SHA1([input bytes], [input length], [hash mutableBytes]);

NSLog(@"kReceiptHash: %@", [receipt objectForKey:kReceiptHash]);
NSLog(@"hash: %@", hash);
最后两个NSLog命令只是为了在调试期间记录这一点,但是会比较散列值。这就是我知道这两种说法不正确的地方。“get_platform_uuid”是我发现的一个为Mac获取uuid的函数,它似乎工作得很好

我已经获取了整个“输入”变量,将信息插入其中,并在iOS上运行,我在iOS设备上也做了同样的操作,并在Mac上运行。在这两种情况下,计算的哈希值相同;我认为计算是正确的

但在Mac上,它仍然与收据哈希不同。iOS计算和接收哈希与该应用程序匹配

我在iTunes Connect上安装了该应用程序,它似乎选择了正确的捆绑包标识符。我已在Mac上注销应用程序商店。我将应用程序从Xcode构建应用程序的位置复制到另一个目录以运行它。然后它要求我登录,我使用测试帐户登录。然后反复尝试重新运行应用程序并退出(我将其复制回debug文件夹,这打破了重新运行周期)

我已经在苹果开发者网站上为Mac的开发和发布设置了证书,但我确信这是我在应用程序权限或运行应用程序的方式方面没有掌握的。但我就是不明白(我已经找了很久了!)

我相信这是很愚蠢的,但是作为一个单独的开发人员,我唯一的希望就是问你我做错了什么


谢谢。

经过多次搜索,我找到了另一种方法来构建和比较哈希值。但这也需要修改才能在Mac上运行,因为它是非常旧的代码。我现在看到的是这种方法和它的混合

我无法解释的是,为什么旧代码可以在iOS上运行,但不能在Mac上运行,而我又不是一个优秀的程序员,不知道为什么。我所知道的是这种混合方法似乎是有效的