App Store - Method Swizzling 的合法性

25

有关方法替换在App Store上是否合法的最新信息是什么?

我能找到的唯一数据点是一段时间以前Three20框架的调整,其始于以下通知:

您的应用程序xxx目前已发布到App Store,正在使用method_exchangeImplementations来交换Apple提供的API的实现和您自己的实现。由于即将推出的更改,您的应用程序中的此行为可能会导致iPhone OS 4.0上的崩溃或导致用户数据丢失。

xxx使用method_exchangeImplementations将dealloc的实现与您的方法ttdealloc进行交换。它还将popViewControllerAnimated:方法的实现与您的popViewControllerAnimated2:方法进行交换。

请立即解决此问题并上传您的新二进制文件到iTunes Connect。如果我们认为这样做是明智或必要的,我们可能会删除您的应用程序。


当我搜索时,我能找到的所有关于方法替换和app store的最近对话似乎都引用了同样的Three20事件。通知似乎非常具体,我想知道该问题是否是Three20所做的特定更改问题,还是method_exchangeImplementations被普遍禁止。

还有其他关于该做法是否允许的数据点吗?App Store中是否有使用方法替换的开发人员?

谢谢!


1
你究竟想做什么?在大多数情况下,方法混淆是一种可以通过更好的设计来避免的技巧。 - JeremyP
4
我正在投票关闭此问题,因为它涉及苹果公司的拒绝政策。请参阅:为什么我们不是您最喜爱公司的客户支持 - FelixSFD
2个回答

8

AFNetworking是一个被广泛使用于网络请求的库,在至少1.3.4版本中使用了swizzling来支持类方法中的其他可接受状态码和内容类型。

所以这似乎是合理的。

注意:他们使用的是class_replaceMethod而不是method_exchangeImplementations。


我在AFNetworking中进行了“method_exchangeImplementations”的工作区搜索,但没有找到任何相关引用。AFNetworking仅针对某些视图类别使用运行时库,并使用objc_setAssociatedObject方法进行键值绑定。我不认为这是方法交换。 - Kunal Balani
AFNetworking 经历了一次重大的改版,也许 2.0 版本可以在不使用 swizzling 的情况下工作。然而,在 1.3.4 版本及之前的版本中,它在 AFHTTPRequestOperation 中使用了 class_replaceMethod。 - patric.schenke
请更新您的回答。 - Kunal Balani

2
通常交换方法是用于调试,以查看何时调用特定方法,或者在您无法对其进行子类化或使用类别的情况下使用。如果您没有严格的时间表要将应用程序放在应用商店中,我猜您可以尝试使用方法交换发送应用程序并查看是否被接受。并不是所有应用程序都以相同的方式进行审查,有时这完全取决于审阅人员。

有人尝试过这个吗?还是我会成为第一个发现的人? - Shayan RC
1
@ShayanRC 这是真的,你可以使用 swizzling。 - Rui Peres

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