Запрещены ли PerforSelector и responsesToSelector в App Store?
Моя последняя сборка была принята в магазин приложений Apple, но я получил уведомление, приведенное ниже пару дней спустя.
Мое приложение также использует Rollout.io, и я прямо спросил, не в этом ли проблема. Ответа пока нет.
Если отклики ToSelector или executeSelector запрещены, есть ли замены?
Уважаемый разработчик,
Похоже, что ваше приложение, расширение и / или связанная инфраструктура содержат код, специально разработанный для возможности изменить поведение или функциональность вашего приложения после одобрения обзора приложения, что не соответствует разделу 3.3.2 Лицензионного соглашения и приложения Apple Developer Program. Руководство по проверке магазина 2.5.2. Этот код в сочетании с удаленным ресурсом может способствовать существенным изменениям в поведении вашего приложения по сравнению с тем, которое было первоначально проверено для App Store. Хотя вы, возможно, не используете эту функцию в настоящее время, у нее есть потенциал для загрузки частных платформ, частных методов и включения будущих изменений функций.
Это включает в себя любой код, который передает произвольные параметры динамическим методам, таким как dlopen(), dlsym(), RespondsToSelector:, executeSelector :, method_exchangeImplementations (), и запускает удаленные сценарии для изменения поведения приложения или вызова SPI на основе содержимого скачанный скрипт Даже если удаленный ресурс не является преднамеренно вредоносным, его можно легко перехватить с помощью атаки Man In The Middle (MiTM), которая может стать серьезной уязвимостью для безопасности пользователей вашего приложения.
Перед отправкой следующего обновления для проверки вашего приложения выполните углубленный анализ вашего приложения и удалите все коды, платформы или SDK, которые соответствуют функциональности, описанной выше.
РЕДАКТИРОВАТЬ: Apple, форум упоминает это: https://forums.developer.apple.com/thread/73640
4 ответа
Это не отвечает ToSelector:, executeSelector: которые запрещены. Запрет на использование динамического контента в качестве параметра для этого метода. Например, это не запрещено:
if([self.delegate respondsToSelector: @selector(myDelegateMethod)]) {
[self.delegate performSelector: @selector(myDelegateMethod)];
}
Однако этот код может быть запрещен:
NSString *remotelyLoadedString = .... (download from your backend)
[self performSelector: NSSelectorFromString(remotelyLoadedString)];
8 марта 2017 года Apple предупредила всех разработчиков о внедрении JS. Это включает в себя библиотеки, такие как:
- JSPatch
- Rollout.io
- AMapFoundation, поскольку он включает JSPatch [править: теперь они предоставляют новую версию без него]
- Ошибка, поскольку она включает JSPatch [править: теперь они предоставляют новую версию без него]
- GTSDK, поскольку он включает JSPatch [править: теперь они предоставляют новую версию без него]
- ...
Если вы непосредственно используете сервис, такой как JSPatch или Rollout.io, вы должны прекратить его использование.
Если вы используете стороннюю систему, которая косвенно зависела от JSPatch, вам следует запросить обновленную версию вашей третьей стороны, которая больше не включает JSPatch.
Уведомление из магазина приложений сообщило вам, в какой именно ситуации.
Рассматриваемые функции не запрещены. Запрещено использовать эти функции, чтобы обойти процесс проверки магазина приложений и выполнять такие действия, как вызов частных API или загрузка и выполнение кода. В приложениях магазина приложений должен быть собран весь код, который они запускают. Им также не разрешено использовать частные API из iOS. Если API не документирован, это запрещено.
Я предполагаю, что вы точно знаете, о чем они говорят, и пытаетесь обойти правила.
Если вы не вызываете частные API, не загружаете скрипты и не используете их для выполнения executeSelector, то вам следует подать апелляцию на доску обзора приложений, подробно объяснив, что вы делаете, и как это не является нарушением правил магазина приложений., Если вы действительно не нарушаете правила и имеете законную причину того, что вы делаете, то, скорее всего, вы сможете отменить отклонение, но вам нужно будет предоставить полное раскрытие и убедительные аргументы относительно того, почему вы делают не нарушая правила Apple.
Их поле, их мяч, их правила. Если вы не готовы играть по правилам Apple, ваша единственная реальная альтернатива - попытаться распространить ваше приложение на взломанные устройства, но это, вероятно, будет стоить вам членства в программе для разработчиков.
РЕДАКТИРОВАТЬ:
Исходя из вашего комментария ниже, кажется, что проблема в том, что используемый вами Rollout.io фреймворк делает инъекцию js, которую Apple теперь запрещает. Я предлагаю поискать по ссылке "Rollout.io iOS App Store Ban" или аналогичный.
dlopen
dlsym
respondsToSelector
performSelector
method_exchangeImplementations
Иногда некоторые люди думали, что все вышеперечисленные методы запрещены, но суть в том, что эти методы ограничены использованием параметров, которые генерируются во время выполнения. Например,
когда мы используем,
SEL selector = NSSelectorFromString(@"stopProgress");
Это разрешено, но
когда мы используем,
SEL selector = NSSelectorFromString(@"%@", runtimeFunction);
Это не разрешено!