Это было просто обновление, которое не изменило ничего общего с причиной отказа. Вот ответ из центра разрешения проблем:
Причины лицензионного соглашения программы PLA 3.3.12
Мы обнаружили, что ваше приложение использует рекламный идентификатор iOS, но не включает функцию рекламы. Это не соответствует условиям Лицензионного соглашения для программы разработчика iOS, как того требует Руководство по обзору App Store.
В частности, в разделе 3.3.12 Лицензионного соглашения программы разработчика iOS говорится:
«Вы и ваши приложения (и любая третья сторона, с которой вы заключили контракт на обслуживание рекламы) можете использовать Рекламный идентификатор и любую информацию, полученную с помощью Рекламного идентификатора, только в целях обслуживания рекламы. Если пользователь сбрасывает Рекламный идентификатор, то вы соглашаетесь не объединять, не соотносить, не связывать или иным образом не связывать, прямо или косвенно, предыдущий Рекламный идентификатор и любую производную информацию со сбросом Рекламного идентификатора ".
Проверьте свой код, включая сторонние библиотеки, чтобы удалить все экземпляры:
Класс: ASIdentifierManager
селектор: advertisingIdentifier
рамки: AdSupport.frameworkЕсли вы планируете включать рекламу в будущую версию, удалите рекламный идентификатор из своего приложения, пока вы не включите функцию рекламы.
Чтобы найти рекламный идентификатор, используйте инструмент «nm». Для получения информации об инструменте «nm» откройте окно терминала и введите «man nm».
Если у вас нет доступа к исходному тексту библиотеки, вы можете выполнить поиск в скомпилированном двоичном файле с помощью инструментов командной строки «strings» или «otool». Инструмент «strings» перечисляет методы, которые вызывает библиотека, а «otool -ov» перечисляет структуры классов Objective-C и их определенные методы. Эти методы могут помочь вам сузить круг проблем, связанных с кодом.
Я использую сторонние библиотеки последней версии parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight
. Кто-нибудь знает, в какой библиотеке проблема? благодаря
источник
Ответы:
В Терминале:
grep -r advertisingIdentifier .
(точка в конце важна)Это рекурсивно проверит каждый файл и даст вам имя библиотеки-нарушителя.
(в моем случае это был Flurry)
источник
Обновить
Google выпустил SDK Google Analytics Services для iOS v3.03c, который по умолчанию удаляет зависимость AdSupport.framework.
Полная запись в журнале изменений версии 3.03c (19 февраля 2014 г.): https://developers.google.com/analytics/devguides/collection/ios/changelog
Old Awnser
Моя проблема была в Google Analytics и TestFlight.
Для TestFlight я просто обновляю библиотеку до версии 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ).
Но для обновления Google Analytics мне пришлось удалить флаг -ObjC. Но поскольку я использую Cocoapods для управления некоторыми третьими библиотеками, я не мог просто удалить его. Итак, я сделал следующее:
1 - начато обновление libGoogleAnalytics.a до версии 3.03a (5 февраля 2014 г.)
2 - затем удалили также AdSupport.framework
3 - добавлен "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" в "Target -> Build Settings -> Other Linker Flags" (обратите внимание, что в моем проекте GoogleAnalytics находится внутри / Source / Библиотека / папка, а надо настроить свою)
Но поскольку я не мог удалить флаг -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 -> Other Linker Flags»
Но опять же, когда я попытался опубликовать свое приложение, я получил сообщение об ошибке, сообщающее мне, что компилятор не нашел libPods.a, поэтому я перешел в «Target -> Build Settings -> Other Linker Flags -> Release» и измените эту строку $ (TARGET_BUILD_DIR) на $ {BUILT_PRODUCTS_DIR}.
Итак, мои другие флаги компоновщика стали такими, как на изображении ниже.
Надеюсь помочь кому-нибудь.
Извините за мой английский. знак равно
источник
OTHER_LDFLAGS
напрямую.Для меня проблемой были и Flurry Analytics, и TestFlight.
Для TestFlight это так же просто, как обновить его. Версия 2.2.1 не вызовет никаких проблем (я проверял, используя строки, как предлагает Apple)
Для Flurry в настоящее время нет исправления, кроме удаления Flurry, и вопреки предложению Лу Вида, даже если AdSupport.framework не связан, ваше приложение будет отклонено.Вот ответ службы поддержки Flurry:
"Спасибо, что обратились к Flurry. Недавно мы узнали, что Apple отклонила некоторые приложения, которые, по ее мнению, используют Идентификатор для рекламы (IDFA), без включения функции рекламы. Обратите внимание, что Flurry не собирает IDFA, если приложение не включает поддержку AdSupport. .framework для рекламных функций. Мы ищем разъяснений у Apple и будем информировать наших клиентов, которых затронула проблема, по мере того, как узнаем больше в течение следующих нескольких дней ".Flurry только что выпустила версию 4.3.2 своего SDK, которая специально решает эту проблему.
источник
Оказалось, что Testflight v2.2.0 был конфликтом. С тех пор они исправили это в соответствии со своим списком изменений:
Consolidate both SDK versions into one which removes all access to ASIdentifierManager
источник
Проблема была в Crashlytics. Из-за этого у нас было отклонено несколько приложений. Но я уже разговаривал с Crashlytics, и сегодня они выпустили новое обновление (версия 2.1.6), которое исправляет эту проблему.
В нескольких библиотеках есть AdSupport.framework, но они не используют его, если специально не вызываются. Crashlytics вызывала фреймворк, потому что он должен был проверить, поддерживает ли приложение рекламу. И это изменение было реализовано в версии 2.1.5.
Так что, если вы используете крашлитику, это наиболее вероятная причина. Чтобы исправить это, просто повторно заархивируйте свое приложение, чтобы crashlytics могла использовать новую версию с этим исправлением.
Ответ от Crashlytics Team: «Мы только что выпустили обновление для этого. Можете ли вы создать и снова запустить приложение с открытым приложением Mac, чтобы оно могло обновить ваш SDK? После этого все будет в порядке! Держите меня в курсе после вы отправляете повторно :) "
PS: Это начинает происходить, потому что Apple, похоже, изменила свою политику использования ADSupport.
источник
Ранее я писал в комментариях следующее, направляя людей к командам терминала "strings" или "otool". Однако мне очень нравится предлагаемый ответ об использовании grep. Так что вы можете сначала попробовать. Я предлагаю добавить к этой команде "git", потому что это намного быстрее:
git grep advertisingIdentifier
Если это не сработает, попробуйте (как указано ранее):
grep -r advertisingIdentifier .
Далее следует то, что я ранее писал в комментариях выше в качестве инструкции для команд терминала:
Вы можете выполнить поиск в файлах своего проекта в Xcode или попробовать удалить платформу AdSupport, чтобы увидеть, что не удается во время сборки / выполнения.
Чтобы использовать терминал, нажмите «В центре внимания» (поиск) и введите «Терминал». Подождите, пока он не появится в результатах поиска как приложение.
Оказавшись в Терминале, введите «cd», а затем пробел, затем перетащите папку сборки Xcode из Finder в Терминал. Это должно автоматически ввести это имя папки. Нажмите Enter, и он изменит каталоги (cd) на эту папку.
strings
Затем введите пробел, затем имя файла для вашей библиотеки илиotool
пробел и имя файла для библиотеки. Вы должны иметь возможность нажимать TAB для автозаполнения имен файлов.источник
Мое приложение также было отклонено с той же ошибкой! Я обнаружил появление AdvertisingIdentifier в последней версии SDK Facebook (3.12). Возможно, вы можете проверить свою библиотеку на наличие с помощью следующего метода:
Я открыл FacebookSDK.framework как библиотеку в терминале и набрал следующую команду
otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier
Но я не знаю, что мне делать. Было ли мое приложение отклонено из-за этой ссылки? Если да, что делать, если я хочу использовать функции facebook в своем приложении?
источник
Это немного сложнее, чем кажется на первый взгляд. После некоторых экспериментов я обнаружил, что AdSupport Framework связан, даже если осуществляется прямой доступ только к классам, на которые есть ссылки в AdSupport Framework. По иронии судьбы,
[AsIdentifierManager class]
который используется во многих сторонних библиотеках для проверки того, был ли связан AdSupport Framework, на самом деле приводит к связыванию AdSupport Framework. Обфускация класса с помощьюNSClassFromString(@"AsIdentfierManager")
не приведет к автоматическому связыванию платформы AdSupport. Конечно, большую часть времени этот код будет находиться в сторонних библиотеках, поэтому у вас не будет особого контроля над ним, однако это то, что происходит.Я создал пример проекта на GitHub, который иллюстрирует это поведение с использованием инфраструктуры Segment.io. https://github.com/distefam/AdSupportDemo
источник
Flurry Analytics также использует этот API.
Вывод терминала:
Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches
Flurry сообщает, что селектор не вызывается, если платформа AdSupport не связана.
Поэтому я удалил фреймворк и снова попытался отправить.
источник