被App Store禁止的performSelector和respondsToSelector?

我最新的版本被苹果应用程序商店接受,但几天后我收到了通知。

我的应用程序也使用Rollout.io,我明确地问是否这是问题。 没有回应。

如果respondsToSelector或performSelector被禁止,有没有替代?

亲爱的开发者

您的应用程序,扩展程序和/或链接的框架似乎包含代码显式devise的应用程序审查批准后,更改您的应用程序的行为或function的能力,这是不符合苹果开发者计划许可协议和应用程序的第3.3.2节商店评论指南2.5.2。 此代码与远程资源相结合,可以促进应用程序行为的重大变化,与最初为App Store进行审查时相比。 虽然目前您可能没有使用此function,但它有可能加载私有框架,私有方法以及启用将来的function更改。

这包括将任意parameter passing给dlopen(),dlsym(), respondsToSelector:,performSelector :,method_exchangeImplementations()以及运行远程脚本以便更改应用程序行为或调用SPI的任何代码。下载的脚本。 即使远程资源不是有意的恶意攻击,也可以通过中间人攻击(MiTM)轻易被劫持,这可能会给应用的用户带来严重的安全漏洞。

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

编辑 :苹果论坛提到这个: https : //forums.developer.apple.com/thread/73640

它不是respondsToSelector:,performSelector:被禁止。 禁令是将dynamic内容作为parameter passing给此方法。 例如,这不是被禁止的:

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

但是,这个代码可能被禁止:

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

2017年3月8日,苹果公司警告所有JS注入开发商。 这包括像这样的库:

  • JSPatch
  • Rollout.io
  • AMapFoundation,因为它包含了JSPatch [编辑:他们现在提供一个没有它的新版本]
  • Bugly,因为它包括JSPatch [编辑:他们现在提供一个没有它的新版本]
  • GTSDK,因为它包括JSPatch [编辑:他们现在提供了一个没有它的新版本]

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

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

的dlopen

对dlsym

respondsToSelector

performSelector

method_exchangeImplementations

有时候一些人以前认为上述所有方法都被禁止了,但确切的问题是,这些方法被限制使用在运行时生成的参数。 例如,

当我们使用时,

 SEL selector = NSSelectorFromString(@"stopProgress"); 

它允许,但是

当我们使用时,

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

这不被允许!

app store通知告诉你到底是什么情况。

有关function不被禁止。 被禁止的是使用这些函数来规避app store评论过程,并执行诸如调用私有API或下载和执行代码之类的事情。 App Store应用程序需要将所有运行的代码编译到其中。 他们也不允许使用iOS的私人API。 如果一个API没有logging,那就没有限制。

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

如果您不是调用私有API,下载脚本并使用performSelector调用它们,则应该向应用审阅委员会提交申诉,详细解释您正在执行的操作,以及如何不违反app store准则。 如果你真的没有违反规则,并且有正当的理由去做,那么你很可能会被拒绝,但是你需要提供充分的信息披露和有力的论据,正在做的并不是破坏苹果的规则。

他们的领域,他们的球,他们的规则。 如果你不愿意玩苹果的规则,唯一真正的select是尝试分发你的应用程序越狱设备,但这可能会花费你的开发者计划会员资格。

编辑:

根据下面的评论,这听起来像问题是你正在使用的框架Rollout.io是在做js注入,现在苹果禁止。 我build议search“Rollout.io iOSapp store禁令”或类似的内容。