6

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

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

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

亲爱的开发者,

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

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

请对您的应用进行深入审查,并删除任何符合上述功能的代码、框架或 SDK,然后再提交下一个更新供您的应用进行审查。

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

4

4 回答 4

7

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

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

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

NSString *remotelyLoadedString = .... (download from your backend)
[self performSelector: NSSelectorFromString(remotelyLoadedString)];
于 2017-03-08T02:54:37.190 回答
2

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

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

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

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

于 2017-03-08T07:32:01.517 回答
0

打开

dlsym

响应选择器

执行选择器

method_exchange 实现

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

当我们使用时,

SEL selector = NSSelectorFromString(@"stopProgress");

它允许,但是

当我们使用时,

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

这不被允许!

于 2017-08-01T06:41:20.670 回答
0

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

有问题的功能没有被禁止。被禁止的是使用这些功能来规避应用商店审查流程,并执行诸如调用私有 API 或下载和执行代码之类的事情。应用商店应用程序需要将它们运行的​​所有代码编译到其中。他们也不允许使用来自 iOS 的私有 API。如果一个 API 没有被记录在案,那么它是不受限制的。

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

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

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

编辑:

根据您在下面的评论,听起来问题在于您正在使用的框架 Rollout.io 正在执行 js 注入,而 Apple 现在禁止这样做。我建议搜索“Rollout.io iOS 应用商店禁令”或类似内容。

于 2017-03-08T03:06:12.807 回答