Мою програму просто відхилили за використання системи підтримки реклами. Яка бібліотека відповідає?


81

Це було просто оновлення, яке не змінило нічого спільного з причиною відхилення. Ось відповідь від центру дозволу:

Причини Ліцензійна угода програми PLA 3.3.12

Ми виявили, що ваш додаток використовує рекламний ідентифікатор iOS, але не включає функціональність реклами. Це не відповідає умовам ліцензійної угоди програми розробника iOS, як того вимагають Правила перегляду App Store.

Зокрема, у розділі 3.3.12 Ліцензійної угоди програми розробника iOS зазначено:

"Ви та Ваші додатки (і будь-яка третя сторона, з якою ви уклали договір на розміщення реклами), можете використовувати Рекламний ідентифікатор та будь-яку інформацію, отриману завдяки використанню Рекламного ідентифікатора, лише з метою розміщення реклами. Якщо користувач скидає Рекламний ідентифікатор, тоді Ви погоджуєтесь не поєднувати, не співвідносити, не пов’язувати та не пов’язувати будь-яким іншим способом, прямо чи опосередковано, попередній рекламний ідентифікатор та будь-яку отриману інформацію із скинутим рекламним ідентифікатором. "

Перевірте свій код - включаючи сторонні бібліотеки - щоб видалити будь-які екземпляри:

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

Якщо ви плануєте включити рекламу в майбутній версії, вилучіть із свого додатка рекламний ідентифікатор, доки ви не включите функціонал реклами.

Щоб допомогти знайти рекламний ідентифікатор, використовуйте інструмент «нм». Для отримання інформації про інструмент “nm” відкрийте вікно терміналу та введіть “man nm”.

Якщо у вас немає доступу до джерела бібліотек, можливо, ви зможете шукати скомпільований двійковий файл за допомогою інструментів командного рядка "strings" або "otool". Інструмент "рядки" перелічує методи, які викликає бібліотека, а "otool -ov" - структури класу Objective-C та їх визначені методи. Ці методи можуть допомогти вам звузити область проблемного коду.

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


ІМО вони надали багато підказок, щоб самостійно здійснити цей пошук ... ви намагалися і не знайшли?
Адріано Репетті

10
Я бачив людей, що мають цю проблему з Google Analytics
jcesarmobile

1
Однак найбільшою причиною, яку ви б позначили, є TestFlight, для якого цей ідентифікатор важливий: testflightapp.com/sdk/ios/doc/2.0.0 - "AdSupport.framework необхідна для iOS 6.0+ для того, щоб однозначно ідентифікувати користувачів, щоб ми могли оцінити кількість користувачів у вашому додатку (за допомогою ASIdentifierManager). Ви можете слабко зв’язати фреймворк у вашому додатку. Якщо ваш додаток не пов’язаний з AdSupport.framework, TestFlight SDK автоматично завантажить його для програм, що працюють на iOS 6.0+ ".
Луї Сент-Амур

5
Виявляється, у конфлікті виникла версія Testflight v2.2.0. З тих пір вони виправили це відповідно до свого журналу змін: консолідуйте обидві версії SDK в одну, яка видаляє весь доступ до ASIdentifierManager
user2844801

5
Якщо AdSupport.framework зв’язано необов’язково, чи може це вирішити проблему з App Store?
Legoless

Відповіді:


114

У терміналі:

  1. Перейдіть до кореневої папки вашого проекту
  2. Тип: grep -r advertisingIdentifier . (крапка в кінці є критичною)

Це буде рекурсивно перевіряти кожен файл і давати вам назву бібліотеки, що порушує.

(у моєму випадку це був Шквал)


1
Мені теж вдарили те саме. libFlurry_4.3.1.a та libGoogleAnalyticsServices.a мають і рекламний ідентифікатор. Не знаю, коли вони будуть оновлені, чи не буде роботи навколо.
Vidal Graupera

2
що ми робимо з цим? ми не можемо просто повністю видалити нашу аналітику ...
Нір Голан,

@RedYeti - дякую за виправлення моєї помилки! Вибачте за це - помилка копіювання / вставлення :(.
Адам

1
@LouWeed - коли це станеться, вам доведеться видалити Flurry зі своїх додатків, і припустити, що Flurry панікує і надасть нове оновлення ДУЖЕ скоро. Недоліком використання безкоштовної аналітики третьої сторони є те, що іноді вони псуються так. Раніше я мав подібне з Flurry, TestFlight, Facebook, Parse та кількома іншими. Буває. Але якщо ви не платите за послугу, ви не можете сильно скаржитися :)
Адам

2
Може підтвердити, що Flurry 4.3.2 не відповідає AdvertisingIdentifier під час використання команди вище.
крафтерм

17

Оновлення

Google випустив Google Analytics Services iOS SDK v3.03c, який за замовчуванням видаляє залежність AdSupport.framework.

Повний запис журналу змін для версії 3.03c (19 лютого 2014 р.): Https://developers.google.com/analytics/devguides/collection/ios/changelog

Старий Аунсер

Моя проблема була з 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 "" під "Ціль -> Налаштування збірки -> Інші прапори зв'язування" (Зверніть увагу, що в моєму проекті GoogleAnalytics знаходиться всередині / Джерело / Бібліотека / папка, і вам потрібно налаштувати власну)

Але оскільки я не міг видалити прапор -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" також у розділі "Ціль -> Налаштування збірки -> Інші прапори зв'язування"

Але знову ж таки, коли я спробував опублікувати свій додаток, я отримав повідомлення про те, що компілятор не знайшов libPods.a, тому я перейшов до "Ціль -> Налаштування збірки -> Інші прапори посилань -> Випуск" і змінити цей рядок $ (TARGET_BUILD_DIR) на $ {BUILT_PRODUCTS_DIR}.

Тож мої Інші прапори Linker стали такими, як на малюнку нижче. Інші прапори Linker

Сподіваюся комусь допомогти.

Перепрошую за мою англійську. =]


Я все ще не можу змусити свій додаток будувати без фреймворку AdSupport. Я отримую невизначений символ ASIIdentifierManager
andygeers

Ви використовуєте Менеджер тегів Google? Тому що якщо ви є, то це рішення не буде працювати.
Глауко Невес

Не те, що я знаю (що взагалі робить Менеджер тегів?) Це комбінований файл бібліотеки GA / Менеджер тегів
andygeers

Ви також можете вручну редагувати Pods / Pods.xcconfig OTHER_LDFLAGS.
Rivera

Сьогодні компанія Google випустила сервіси Google Analytics iOS SDK v3.03c. Я оновив свою відповідь. =]
Глауко Невес

13

Для мене проблемою були 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, яка конкретно вирішує цю проблему.


4

Виявляється, у конфлікті виникла версія Testflight v2.2.0. З тих пір вони виправили це відповідно до свого журналу змін:Consolidate both SDK versions into one which removes all access to ASIdentifierManager


4

Проблемою була аварійність. Через це було відхилено кілька додатків. Але я вже говорив із Crashlytics, і сьогодні вони випустили нове оновлення (версія 2.1.6), яке вирішило цю проблему.

Деякі бібліотеки мають AdSupport.framework, але вони не використовують його, якщо це спеціально не викликано. Crashlytics викликав фреймворк, оскільки він мав перевірити, чи додаток підтримує рекламу. І ця зміна була реалізована у версії 2.1.5

Отже, якщо ви використовуєте крашлітики, це найбільш вірогідна причина. Щоб виправити це, просто заархівуйте свій додаток, щоб crashlytics могли використовувати нову версію з цим виправленням.

Відповідь команди Crashlytics: "Ми щойно висунули оновлення для цього - чи можете ви створити та запустити програму знову, відкривши програму Mac, щоб вона могла оновити ваш SDK? Після цього вам все буде добре! Тримайте мене в курсі після ви подаєте повторно :) "

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


3

Раніше я писав наступне в коментарях, направляючи людей до команд терміналу "strings" або "otool". Однак мені дуже подобається запропонована відповідь використання grep. Тож ви можете спробувати спочатку. Я пропоную додати команду "git", оскільки це набагато швидше:

git grep advertisingIdentifier

Якщо це не спрацює, спробуйте (як розміщено раніше):

grep -r advertisingIdentifier . 

Далі йде те, що я раніше писав у коментарі вище, як інструкції для команд терміналу:

Ви можете шукати у файлах свого проекту в Xcode або спробувати видалити структуру AdSupport, щоб побачити, що не вдається під час збірки / запуску.

Щоб скористатися терміналом, натисніть Spotlight (пошук) і введіть Terminal. Зачекайте, поки він з’явиться як додаток у результатах пошуку.

Опинившись у терміналі, введіть "cd", після чого пробіл, а потім перетягніть папку збірки Xcode із Finder у термінал. Це повинно автоматично ввести цю назву папки. Натисніть Enter, і це змінить каталоги (cd) на цю папку.

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


1

Мою програму також відхилено з тією ж помилкою! Я виявив, що AdvertisingIdentifier зустрічається в останньому Facebook SDK (3.12). Можливо, ви можете перевірити наявність бібліотеки за допомогою наведеного нижче способу:

Я відкрив FacebookSDK.framework як бібліотеку в терміналі і набрав таку команду

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

Але я не знаю, що робити. Чи було відхилено мою програму через це посилання? Якщо так, що робити, якщо я хочу використовувати у своєму додатку функціональні можливості facebook?


1
Тут це має допомогти - stackoverflow.com/questions/21574680/…
Ендрю

Дякую за відповідь! Я вніс зміни та повторно подав свій додаток, сподіваюся, його більше не буде відхилено :)
bolonn

@bolonn - чи було ваш додаток схвалено Apple після внесення вищезазначених змін?
RoHaN

Так, це було затверджено!
bolonn

1

Це дещо складніше, ніж здається на поверхні. Після деяких експериментів я виявив, що AdSupport Framework пов’язаний, навіть якщо він безпосередньо отримує доступ до класів, на які посилаються в AdSupport Framework. За іронією долі, [AsIdentifierManager class]що використовується у багатьох сторонніх бібліотеках, щоб перевірити, чи зв’язано AdSupport Framework, насправді призведе до зв’язку AdSupport Framework. Заплутування класу за допомогою NSClassFromString(@"AsIdentfierManager")не призведе до автоматичного зв’язування середовища AdSupport. Звичайно, більшу частину часу цей код буде знаходитися в сторонніх бібліотеках, тому ви не матимете над ним великого контролю, однак, саме це відбувається.

Я створив прикладний проект на GitHub, який ілюструє цю поведінку, використовуючи фреймворк Segment.io. https://github.com/distefam/AdSupportDemo


Дякую за корисний допис. Отже, коли ми слабко пов'язуємо (необов'язково) фреймворк із проектом (у моєму випадку це фреймворк Google, який називається "GoogleInteractiveMediaAds"), який містить AdSupport.framework всередині нього, коли я надсилаю свій додаток, хоча в моєму додатку немає реклами (є платна версія, яка взагалі не відображає жодної реклами), чи буде вона відхилена Apple ??
C0D3,

0

Flurry Analytics також використовує цей API.
Вихід терміналу:

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

Шквал каже, що селектор не викликається, якщо платформа AdSupport не пов'язана.
Тож я видалив фреймворк і спробував подати ще раз.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.