gpt4 book ai didi

ios - 修改 NSObjects 的内部属性(特别是 SKPaymentTransaction)

转载 作者:可可西里 更新时间:2023-11-01 05:44:18 25 4
gpt4 key购买 nike

我正在尝试对我们的收据验证服务器进行单元测试,虽然我可以更改内部 API 来避免这个问题,但这意味着我们没有完全测试客户端 API,所以我想避免这种情况。

作为我们 API 的一部分,我们通过 SKPaymentTransaction,然后将 Transaction.transactionReceipt 传递到我们的服务器。

为了正确测试,我想创建一个 SKPaymentTransaction 实例,其中包含我选择的 transactionReceipt(有效值和无效值)。

不幸的是,SKPaymentTransaction 将 transactionReceipt 属性定义为只读,由于 this,我无法声明将其定义为读写的扩展/子类。 .

我似乎也无法将 SKPaymentTransaction 指针转换为 char* 以手动将值注入(inject)内存,因为 Xcode 在 ARC 下不允许这样做。

有没有人知道我如何才能实现我正在寻找的东西?

谢谢李

最佳答案

原来我可以调整 transactionReceipt getter 以将我自己的数据注入(inject)到调用中。

所以我最终得到了类似的东西

-(void)test_function
{
SKPaymentTransaction* invalidTransaction = [[SKPaymentTransaction alloc] init];

Method swizzledMethod = class_getInstanceMethod([self class], @selector(replaced_getTransactionReceipt));
Method originalMethod = class_getInstanceMethod([invalidTransaction class], @selector(transactionReceipt));

method_exchangeImplementations(originalMethod, swizzledMethod);

// Call to receipt verification server
}

- (NSData*)replaced_getTransactionReceipt
{
return [@"blah" dataUsingEncoding:NSUTF8StringEncoding];
}

我写了一篇博文展示我的过程,并在此处提供更多细节。
http://engineering-game-dev.com/2014/07/23/injecting-data-into-obj-c-readonly-properties/

关于ios - 修改 NSObjects 的内部属性(特别是 SKPaymentTransaction),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24733223/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com