被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禁令”或类似的内容。