Мое приложение было просто отклонено за использование платформы поддержки рекламы. Какая библиотека отвечает за это?


Это было просто обновление, которое не изменило ничего общего с причиной отказа. Вот ответ из центра разрешения:

причины Лицензионное Соглашение На Программу PLA 3.3.12

мы обнаружили, что ваше приложение использует идентификатор рекламы iOS, но не включает функциональность рекламы. Это не соответствует условиям лицензионного соглашения на программу для разработчиков iOS, как того требует руководство по обзору App Store.

в частности, в разделе 3.3.12 Лицензионного соглашения на программу для разработчиков iOS говорится:

" вы и ваши приложения (а также любая третья сторона, с которой вы заключили контракт на обслуживание рекламы) можете использовать идентификатор рекламы и любую информацию, полученную с помощью идентификатора рекламы, только в целях обслуживания рекламы. Если пользователь сбрасывает рекламный идентификатор, то вы соглашаетесь не комбинировать, коррелировать, связывать или иным образом связывать, либо прямо или косвенно, предшествующий рекламный идентификатор и любая производная информация со сброшенным рекламным идентификатором."

пожалуйста, проверьте ваш код, включая сторонние библиотеки - убрать любые случаи:

класс: ASIdentifierManager
селектор: advertisingIdentifier
рамки:AdSupport.рамки

Если вы планируете включить рекламу в будущем версия, пожалуйста, удалите идентификатор рекламы из вашего приложения, пока вы не включили функциональность рекламы.

чтобы помочь найти рекламный идентификатор, используйте инструмент "nm". Для получения информации об инструменте " nm "откройте окно терминала и введите" man nm."

Если у вас нет доступа к источнику библиотек, вы можете найти скомпилированный двоичный файл с помощью инструментов командной строки "strings" или "otool". Инструмент "строки" содержит список методов, вызываемых библиотекой, и "otool-ov" перечислит структуры класса Objective-C и их определенные методы. Эти методы могут помочь вам сузить область нахождения проблемного кода.

сторонние библиотеки, которые я использую, - это последняя версия parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight. Кто-нибудь знает, какая библиотека является проблемой? Спасибо

9 80

9 ответов:

В Терминала:

  1. перейдите в корневую папку вашего проекта
  2. тип: grep -r advertisingIdentifier .(точка в конце критическая)

Это будет рекурсивно проверять каждый файл, и дать вам имя нарушителя библиотека.

(в моем случае, это был шквал)

обновление

Google выпустила Google Analytics Services iOS SDK v3.03c, который удаляет AdSupport.зависимость от фреймворка по умолчанию.

полная запись в журнале изменений для версии 3.03 c (февраль 19, 2014): https://developers.google.com/analytics/devguides/collection/ios/changelog

Старые Ошибки

моя проблема была с Google Analytics и TestFlight.

для тестового полета я просто обновить библиотеку до версии 2.2.1 (https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/).

но для обновления Google Analytics мне пришлось удалить флаг-ObjC. Но поскольку я использую Cocoapods для управления некоторыми третьими библиотеками, я не мог просто удалить его. Поэтому я сделал следующее:

1-начато обновление libGoogleAnalytics.A до версии 3.03 a (5 февраля 2014 г.)

2-затем a удалил также AdSupport.рамки

3 - добавлено "- force_load\ "${PROJECT_DIR} / Source / Library/GoogleAnalyticsServicesiOS_3. 03a "" под " Target --> Build Settings --> другие флаги компоновщика" (Обратите внимание, что в моем проекте GoogleAnalytics находится внутри/Source/ Library / folder, и вы должны настроить свой собственный)

но поскольку я не мог удалить флаг-ObjC, я искал, как использовать флаг-force_load с Cocoapods, то я нашел две полезные ссылки:

1 - https://github.com/CocoaPods/CocoaPods/issues/712

2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

подводя итог, я изменил флаг-ObjC на " - force_load $(TARGET_BUILD_DIR)/libPods.a "также под" Target -- > Build Settings --> другие флаги компоновщика"

но опять же, когда я попытался опубликовать свое приложение, я получил сообщение об ошибке, сообщающее мне, что компилятор не нашел libPods.a, поэтому я пошел в " Target --> Build Настройки --> другие флаги компоновщика -- > Release " и измените эту строку $(TARGET_BUILD_DIR) на ${BUILT_PRODUCTS_DIR}.

Так что мои другие флаги компоновщика стали похожи на изображение ниже. Other Linker Flags

надеюсь кому-нибудь помочь.

извините за мой английский. =]

для меня Flurry Analytics и TestFlight были проблемой.

для TestFlight, это так же просто, как обновить его. Версия 2.2.1 не вызовет никаких проблем (я проверил с помощью строк, как предлагает Apple)

для Flurry в настоящее время нет исправления, кроме удаления Flurry, и вопреки предложению Lou Weed, даже если AdSupport.фреймворк не связан, ваше приложение будет отклонено.

вот шквал поддержки ответ :

"Спасибо, что обратились к Flurry. Недавно мы узнали, что Apple отклонила некоторые приложения, которые, по ее мнению, используют идентификатор для рекламы (IDFA), не включая функциональность рекламы. Обратите внимание, что Flurry не собирает IDFA, если приложение не включает в себя AdSupport.рамки для функциональности рекламы. Мы ищем разъяснения с Apple, и мы будем обновлять наших пострадавших клиентов, как мы узнаем больше в течение следующих нескольких дней."

шквал только что выпустили версия 4.3.2 их SDK, которая специально решает эту проблему.

оказывается, тестовый полет v2.2.0 был конфликтом. С тех пор они исправили его в соответствии с их списком изменений: Consolidate both SDK versions into one which removes all access to ASIdentifierManager

Crashlytics была проблема. У нас было несколько приложений, отклоненных из-за этого. Но я уже говорил с Crashlytics, и сегодня они выпустили новое обновление (версия 2.1.6), которое устраняет эту проблему.

несколько библиотек имеют AdSupport.рамки, но они не используют его, если специально не вызваны. Crashlytics вызывал фреймворк, потому что ему нужно было проверить, поддерживает ли приложение рекламу. И это изменение было реализовано на версии 2.1.5

Так что если вы используете приложений, это наиболее вероятная причина. Чтобы исправить это, просто повторно архивируйте свое приложение, чтобы crashlytics мог использовать новую версию с этим исправлением.

ответ от команды Crashlytics: "Мы только что выпустили обновление для этого - можете ли вы снова создать и запустить свое приложение с открытым приложением Mac, чтобы оно могло обновить ваш SDK? Вы будете хорошо идти после этого! Держите меня в курсе после повторной отправки :)"

PS: Это начинает происходить, потому что Apple, похоже, изменила свою политику для ADSupport использование.

Я ранее писал следующее в комментариях, направляя людей к командам терминала" strings "или" otool". Тем не менее, мне очень нравится предлагаемый ответ на использование grep. Так что вы можете попробовать его в первую очередь. Мое предложение-добавить " git " к этой команде, потому что это намного быстрее:

git grep advertisingIdentifier

если это не работает, то попробуйте (как было опубликовано ранее):

grep -r advertisingIdentifier . 

ниже следует то, что я ранее писал в комментарии выше, как практическое руководство для терминала команды:

вы можете искать файлы вашего проекта в Xcode или вы можете попробовать удалить adsupport framework, чтобы увидеть, что не удается во время сборки/выполнения.

чтобы использовать терминал, щелкните Spotlight (поиск) и введите Terminal. Подождите, пока он появится в качестве приложения в результатах поиска.

после того, как в терминале, введите "cd", а затем пробел, а затем перетащите папку сборки Xcode из Finder в терминал. Это должно автоматически ввести имя этой папки. Удар Введите, и он изменит каталоги (cd) в эту папку.

оттуда, типа strings затем пробел, затем имя файла для вашей библиотеки или otool, пробел и имя файла для библиотеки. Вы должны иметь возможность нажать TAB для автоматического заполнения имен файлов.

мое приложение также было отклонено с той же ошибкой! Я нашел появление advertisingIdentifier в последнем Facebook SDK (3.12). Возможно, вы можете проверить свою библиотеку на случай возникновения с помощью метода ниже:

Я открыл FacebookSDK.фреймворк как библиотека в терминале и набрал следующую команду

otool-v-s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

но я не знаю, что делать. Мое приложение было отклонено из-за эта ссылка? Если да, то что делать, если я хочу использовать функции facebook в своем приложении?

Это немного сложнее, чем кажется на поверхности. После некоторых экспериментов я обнаружил, что структура AdSupport связана, даже если только напрямую обращается к классам, на которые ссылаются в структуре AdSupport. Как ни странно,[AsIdentifierManager class], который используется во многих сторонних библиотеках, чтобы проверить, был ли связан фреймворк AdSupport, будет на самом деле причина структура AdSupport, которая будет связана. Запутывание класса с помощью NSClassFromString(@"AsIdentfierManager") не приведет платформа AdSupport будет автоматически связана. Конечно, большую часть времени этот код будет находиться в сторонних библиотеках, поэтому у вас не будет большого контроля над ним, однако, это то, что происходит.

Я построил пример проекта на GitHub, который иллюстрирует это поведение с помощью Segment.io ' s рамки. https://github.com/distefam/AdSupportDemo

Flurry Analytics также использует этот API.
Терминальный выход:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Flurry говорит, что селектор не вызывается, если adsupport framework не связан.
Поэтому я удалил фреймворк и снова попытался отправить его.