【问题标题】:App Store - Method Swizzling Legality [closed]App Store - Method Swizzling Legality [关闭]
【发布时间】:2012-01-12 11:26:40
【问题描述】:

App Store 上是否有任何关于方法调配是否合法/非法的最新信息?

我能找到的唯一数据点是不久前的Three20 framework shakeup,它是从这个通知开始的:

您当前发布到 App Store 的应用程序 xxx 正在使用 method_exchangeImplementations 交换苹果的实现 提供了具有您自己的实现的 API。因为即将到来 更改,您的应用程序中的这种行为可能会导致崩溃或导致 iPhone OS 4.0 上的用户数据丢失。

xxx 使用 method_exchangeImplementations 来交换实现 使用您的方法 ttdealloc 解除分配。它还交换 popViewControllerAnimated: 方法的实现 方法popViewControllerAnimated2:。

请立即解决此问题并将您的新二进制文件上传到 iTunes 连接。如果我们认为,我们可能会删除您的申请 这样做是谨慎的或必要的。


当我四处搜索时,我能找到的关于 swizzling 和应用商店的每一次对话似乎都引用了相同的 Three20 事件。该通知似乎非常具体,我想知道问题是否是 Three20 所做更改的特定更改问题,或者 method_exchangeImplementations 是否被普遍禁止。

是否还有其他关于是否允许这种做法的数据点?商店中是否有使用 swizzling 的应用开发者?

谢谢!

【问题讨论】:

  • 您真正想要做什么?在大多数情况下,方法调配是一种技巧,可以通过更好的设计来避免。
  • 我投票决定将此问题作为题外话结束,因为它与 Apple 的拒绝政策有关。另请参阅:Why we're not customer support for your favorite company.

标签: objective-c ios app-store swizzling


【解决方案1】:

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

所以这样做似乎是合法的。

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

【讨论】:

  • 我在 AFNetworking 中对“method_exchangeImplementations”进行了工作区搜索,但找不到任何引用。 AFNetworking 仅对某些视图的类别使用运行时库,并使用 objc_setAssociatedObject 方法进行键值绑定。我不认为这是方法混乱。
  • AFNetworking 进行了重大改造,也许 2.0 版可以正常工作。但是,在 1.3.4 版之前(包括 1.3.4 版),它之前在 AFHTTPRequestOperation 中使用了 class_replaceMethod。
  • 那么请更新您的答案。
【解决方案2】:

通常 swizzling 用于调试以查看何时调用特定方法,或者在您无法子类化某些内容或为其使用类别的情况下。如果您在将应用程序放到应用商店时没有紧迫的时间表,我想您可以尝试使用方法 swizzling 发送您的应用程序,看看它是否被接受。并非所有申请都以相同的方式进行审核,有时这完全取决于审核者。

【讨论】:

  • 有人试过吗?还是我会第一个发现?
  • @ShayanRC 是合法的,你可以使用 swizzling。
猜你喜欢
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多