Ios 应用商店是否禁止performSelector和respondsToSelector?

Ios 应用商店是否禁止performSelector和respondsToSelector?,ios,app-store,respondstoselector,Ios,App Store,Respondstoselector,苹果应用商店接受了我的最新版本,但几天后我收到了下面引用的通知 我的应用程序也使用Rollout.io,我明确地问这是否是问题所在。还没有回应 如果respondsToSelector或performSelector被禁用,是否有替代品 尊敬的开发商: 您的应用程序、扩展和/或链接框架似乎包含明确设计的代码,能够在应用程序审查批准后更改应用程序的行为或功能,这不符合《苹果开发者计划许可协议》第3.3.2节和《应用商店审查指南》2.5.2。与最初为应用商店审查应用程序时相比,此代码与远程资源相结合

苹果应用商店接受了我的最新版本,但几天后我收到了下面引用的通知

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

如果respondsToSelector或performSelector被禁用,是否有替代品

尊敬的开发商:

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

这包括将任意参数传递给动态方法的任何代码,如dlopen()、dlsym()、respondsToSelector:、performSelector:、method_exchangeimplements(),以及运行远程脚本,以便根据下载脚本的内容更改应用程序行为或调用SPI。即使远程资源不是故意恶意的,它可以很容易地通过中间人(MITM)攻击来劫持,这会给应用程序的用户造成严重的安全漏洞。 在提交应用程序的下一次更新以供审查之前,请对应用程序执行深入审查,并删除符合上述功能的任何代码、框架或SDK

编辑
苹果论坛提到了这一点:

禁止的不是选择器:、性能选择器:。禁止将动态内容作为此方法的参数。例如,这不是禁止的:

if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
   [self.delegate performSelector: @selector(myDelegateMethod)];
}
但是,此代码可能会被禁止:

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

禁止的不是对选择器、性能选择器的响应。禁止将动态内容作为此方法的参数。例如,这不是禁止的:

if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
   [self.delegate performSelector: @selector(myDelegateMethod)];
}
但是,此代码可能会被禁止:

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

应用商店的通知告诉了你具体的情况

这些功能并没有被禁止。被禁止的是使用这些函数来绕过AppStore审查过程,并执行诸如调用私有API或下载并执行代码之类的操作。应用商店应用程序需要将运行的所有代码编译到其中。他们也不允许使用来自iOS的私有API。如果API没有文档化,那么它是禁止使用的


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

如果您没有调用私有API、下载脚本并使用PerformSelect调用它们,那么您应该向应用程序审查委员会提交上诉,详细解释您正在做什么,以及如何不违反应用程序商店指南。如果你真的没有违反规则,并且你所做的事情有合法的理由,那么你很可能会被拒绝,但你需要提供充分的信息和令人信服的理由,说明你所做的事情为什么没有违反苹果的规则

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

编辑:
根据您在下面的评论,问题似乎在于您使用的framework Rollout.io正在进行js注入,而苹果现在禁止使用js注入。我建议您在“Rollout.io iOS应用商店禁令”或类似网站上搜索。

应用商店通知会告诉您具体情况

这些功能并没有被禁止。被禁止的是使用这些函数来绕过AppStore审查过程,并执行诸如调用私有API或下载并执行代码之类的操作。应用商店应用程序需要将运行的所有代码编译到其中。他们也不允许使用来自iOS的私有API。如果API没有文档化,那么它是禁止使用的


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

如果您没有调用私有API、下载脚本并使用PerformSelect调用它们,那么您应该向应用程序审查委员会提交上诉,详细解释您正在做什么,以及如何不违反应用程序商店指南。如果你真的没有违反规则,并且你所做的事情有合法的理由,那么你很可能会被拒绝,但你需要提供充分的信息和令人信服的理由,说明你所做的事情为什么没有违反苹果的规则

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

编辑:
根据您在下面的评论,问题似乎在于您使用的framework Rollout.io正在进行js注入,而苹果现在禁止使用js注入。我建议搜索“Rollout.io iOS应用商店禁令”或类似内容。

2017年3月8日,苹果警告所有开发者使用JS注入。这包括以下库:

  • JSPatch
  • 卷展栏.io
  • 因为它包括JSPatch[编辑:他们现在提供了一个没有它的新版本]
  • 因为它包括JSPatch[编辑:他们现在提供了一个没有它的新版本]
  • 因为它包括JSPatch[编辑:他们现在提供了一个没有它的新版本]