App Store是否禁止performSelector和respondsToSelector?

时间:2017-03-08 02:43:52

标签: ios app-store respondstoselector

我的最新版本已被Apple应用商店接受,但我在几天后收到了下面引用的通知。

我的应用也使用Rollout.io,我明确询问这是否是问题所在。暂无回应。

如果禁止使用respondsToSelector或performSelector,是否有替换?

  

亲爱的开发者,

     

您的应用,扩展程序和/或链接框架似乎包含明确设计的代码,可以在App Review批准后更改应用的行为或功能,但这不符合Apple开发人员计划许可的第3.3.2节协议和App Store审查指南2.5.2。与最初针对App Store进行审核时相比,此代码与远程资源相结合,可以促进应用程序行为的重大更改。虽然您当前可能没有使用此功能,但它有可能加载私有框架,私有方法并启用将来的功能更改。

     

这包括将任意参数传递给动态方法的任何代码,例如dlopen(),dlsym(), respondsToSelector:,performSelector :,method_exchangeImplementations(),以及运行远程脚本以更改应用程序行为或调用SPI,基于下载脚本的内容。即使远程资源不是故意恶意的,它也很容易被中间人(MiTM)攻击劫持,这可能给你的应用用户带来严重的安全漏洞。

     

在为您的应用提交下一个更新以供审核之前,请对您的应用进行深入审核并删除符合上述功能的所有代码,框架或SDK。

修改:  Apple论坛提到:https://forums.developer.apple.com/thread/73640

4 个答案:

答案 0 :(得分:6)

它不是respondsToSelector:,performSelector:被禁止的。禁令是将动态内容作为此方法的参数。例如,这不是禁止的:

if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
   [self.delegate performSelector: @selector(myDelegateMethod)];
}

但是,此代码可能会被禁止:

NSString *remotelyLoadedString = .... (download from your backend)
[self performSelector: NSSelectorFromString(remotelyLoadedString)];

答案 1 :(得分:2)

2017年3月8日,Apple警告JS注入的所有开发者。这包括像:

这样的图书馆
  • JSPatch
  • Rollout.io
  • AMapFoundation 因为它包含了JSPatch [编辑:他们现在提供没有它的新版本]
  • Bugly 因为它包含了JSPatch [编辑:他们现在提供没有它的新版本]
  • GTSDK 因为它包含了JSPatch [编辑:他们现在提供没有它的新版本]
  • ...

如果您直接使用JSPatch或Rollout.io等服务,则应停止使用它。

如果您使用的是间接依赖JSPatch的第三方,则应该请求不再包含JSPatch的第三方更新版本。

答案 2 :(得分:0)

应用程序商店通知告诉您具体情况。

有关功能未被禁止。禁止使用这些功能来规避应用商店审核流程,并执行调用私有API或下载和执行代码等操作。应用程序商店应用程序需要将它们运行的​​所有代码编译到其中。它们也不允许使用iOS的私有API。如果未记录API,则不受限制。

我的猜测是,你确切地知道他们在谈论什么,而你 试图绕过这些规则。

如果您没有调用私有API,下载脚本并使用performSelector来调用它们,那么您应该向应用审核委员会提交申诉,详细说明 做什么,以及如何它不违反应用商店指南。如果你真的没有违反规则,并且有正当理由知道你正在做什么,那么你很可能会推翻你的拒绝,但你需要提供完整的披露和令人信服的论据,为什么你正在做的不是打破Apple的规则。

他们的领域,他们的球,他们的规则。如果您不愿意遵守Apple的规则,那么您唯一真正的选择就是尝试为越狱设备分发您的应用程序,但这可能会让您失去开发者计划会员资格。

编辑:

根据你在下面的评论,听起来问题是你正在使用的框架Rollout.io正在进行js注入,Apple现在禁止它。我建议搜索“Rollout.io iOS app store ban”或类似内容。

答案 3 :(得分:0)

的dlopen

对dlsym

respondsToSelector

performSelector

method_exchangeImplementations

有时人们常常认为上述所有方法都被禁止,但确切的问题是,这些方法仅限于使用在运行时生成的参数。例如,

当我们使用时,

SEL selector = NSSelectorFromString(@"stopProgress");

允许,但

当我们使用时,

SEL selector = NSSelectorFromString(@"%@", runtimeFunction);

不允许!