2013-05-07 5 views
45

Сегодня мы получили обратную связь о нашем представлении, и мы не понимаем сообщенную проблему: «Приложениям не разрешен доступ к UDID и не должен использовать метод uniqueIdentifier UIDevice. обновите свои приложения и серверы, чтобы связать пользователей с идентификаторами поставщика или рекламы, представленными в iOS 6. ».Приложение отклонено, но я не использую UDID

Мы знаем об отклонениях относительно udid, но наше приложение не использует это! После ознакомления с этим наша команда переоценила приложение, и мы не обнаружили вхождения из «UIDevice uniqueIdentifier». Мы также пересмотрели все используемые библиотеки, и действительно, мы не находим никакого вызова из UDID.

У кого-то есть идеи?

После исследования, я выполнил команду "greap" и я подозревая о FacebookSDK:

my-app-directory $ grep -Rnis 'uniqueIdentifier' * 
Binary file MyApp/FacebookSDK.framework/FacebookSDK matches 
Binary file MyApp/FacebookSDK.framework/Versions/A/FacebookSDK matches 
Binary file MyApp/FacebookSDK.framework/Versions/Current/FacebookSDK matches 
Binary file MyApp/MyApp.xcodeproj/project.xcworkspace/xcuserdata/myuser.xcuserdatad/UserInterfaceState.xcuserstate matches 

FacebookSDK использует UniqueIdentifier ?? Какая резолюция?

+6

Вы используете сторонние библиотеки или классы, которые могут содержать UDID? – sangony

+0

Вы передаете что-нибудь, может быть, что-то, что вы строите, из своего приложения на свои серверы, которые идентифицируют iPhone? – GoZoner

+1

Возможно, некоторые библиотеки аналитики? – Undo

ответ

2

У меня сегодня такая же проблема. Я обновляю SDK AdMob до 6.4.1 и отправляю снова, но не использую. Но он прошел проверку загрузки после того, как я отключил код AdMob и не ссылаюсь на его библиотеку.

Согласно объявлению Google, AdMob SDK 6.4 и выше больше не имеют доступа к UDID. Очевидно, Apple так не думает.

+0

Обновление SDK AdMob решило проблему для меня. Я думаю, у вас может быть другая библиотека thrid part, в которой используется uniqueIdentifier. –

+0

Я представил сегодня тот же самый бинарный файл, который был отклонен несколько дней назад, и он не был отклонен. Я думаю, проблема была в стороне соединения itunes, а не в admob lib. – hectr

+0

Я отправил новую версию с тем же SDK AdMob, и iTunes connect не пожаловался на это. Я думаю, проблема была в iTunes connect, и они уже исправили это, как говорили другие. –

2

Обычно сторонние библиотеки для аналитики и бета-тестирования используют uniqueIdentifier для отслеживания пользователей (например, тестовый полет или старые версии GA), проверьте, использует ли это какая-либо из сторонней библиотеки, которую вы используете. Если это не так, вы можете попросить разъяснения по телефону http://itunesconnect.apple.com.

0

У меня сегодня та же проблема. В openssl есть переменная с именем uniqueIdentifier. Возможно, это вызывает проблему.

+0

Вы случайно используете libspotify? Я нашел его виновным в моем представлении сегодня. – Igor

+0

Спасибо за все ответы .. – Tiago

5

Проверьте бинарная вы сгенерировали с командой strings, и искать uniqueIdentifier:

$ strings YOUR_BINARY | grep uniqueIdentifier 

Вполне вероятно, что вы собираетесь найти его там.

Я обнаружил, что OpenSSL имеет строку uniqueIdentifier, указанную в их заголовках, поэтому, вероятно, ваше приложение (или любая статическая библиотека, предоставляемая вашим приложением) включило его.

В моем случае виновником был libspotify.

+0

Как я могу использовать команду String? У меня есть xyz.app, тогда? Я использую $ strings xyz.app | grep uniqueIdentifier и получение невозможно сопоставить файл: xyz.app (недопустимый аргумент). Спасибо – Mangesh

+0

Найдите файл с тем же именем вашего приложения в каталоге «.app». Предполагая, что мое приложение называется «Foo.app», запустите «find Foo.app -type f -name Foo», а затем запустите строки против него. – Igor

+0

@Igor - Кажется, у меня такая же проблема с libspotify. Это не в обычном тексте в моем исходном коде, поэтому он, кажется, находится внутри двоичного файла libspotify. Вы нашли решение? – Grav

3

В моем случае для этой проблемы был ответственен пакет BugSense SDK (я использовал устаревшую версию). После обновления до последней версии (3.1.3) все в порядке.

+0

Спасибо Tomasz за разъяснение. Фактически последняя версия плагина - 3.3.1. Вы можете скачать его и прочитать заметки о выпуске здесь. http://www.bugsense.com/releases/ios/3.3.1 – PanosJee

+0

Thank You – Krish

7

Решено: Проблема в том, что ваш проект по-прежнему относится к старому SDK, и он скомпилирует код с помощью ваших старых методов sdk, включая UDID, который отклоняет яблоко.

Фикса его в ваших строительных свойствах пути поиска Framework Путь поиска Библиотеки Поиска Контуры

удалить ненужные значения, такие как старый путь SDk и поместить туда текущий путь SDK

чистых файлов все проекта: Окно-> Организатор-> Проект - удалить проект Продукт-> Очистить

Теперь перестройте его и повторно отправьте его на яблоко.

Наслаждайтесь :)

4

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

grep -Rnis 'uniqueIdentifier' *

Это echo'd связку линий в моем окне терминала, с виновником будучи libGoogleAdModAds.a - хотя я не был на самом деле использовать его в своем коде, он по-прежнему ссылаются в моем проекте и поэтому добавлен в сборку.

мой источник был: http://www.commandlinefu.com/commands/view/3573/search-for-a-string-inside-all-files-in-the-current-directory

86

В моем случае это была библиотека ibGoogleAnalytics_debug.a.

Чтобы узнать, какие библиотеки использует UniqueIdentifier метод, перейдите в папку проекта и введите:

$ find . | grep -v .svn | grep "\.a" | grep -v "\.app" | xargs grep uniqueIdentifier 

Я получил это: двоичный файл ./My_Project/libGoogleAnalytics_debug.a соответствует

+2

Это должен быть принятый ответ, он пробивает и гвоздирует оскорбительный код. – MobileVet

+0

Есть ли место для ложных срабатываний? Millennial SDK (v5.0.1) бросается, даже когда они заявляют, что больше не используются. – Emanuel

+2

Некоторые сторонние библиотеки не используют расширение «.a» и вместо этого не используют расширение. Эта команда также найдет использование API в этих файлах: 'grep -lr" uniqueIdentifier "* | grep -v .svn | grep -v .md' – CornPuff

1

Я имел эта же проблема вчера обновляла мои приложения.
После поиска сторонних библиотек, использующих UDID, я понял, что использовал Conversion Tracking for iOS. Эта библиотека использовала UDID, но 10 апреля выпустила обновление, исправляющее эту проблему:

Отслеживание конверсий iOS SDK v1.2.0 больше не обращается к UDID (выпущено 10 апреля 2013 г.).

Надеюсь, это поможет.

1

Я пробовал весь день, мое приложение всегда отклонено.

Во-первых, я попытался найти. | grep -v .svn | grep ".a" | grep -v ".app" | xargs grep uniqueIdentifier в моей папке проекта.

Похоже, что Google Analytics, AdMob и Wikitude SDK использовали uniqueIdentifier. Поэтому я удалил GA, и я обновил AdMob и Wikitude. Теперь больше нет вызовов метода uniqueIdentifier. Когда я делаю grep, результат ничего. Я очистил все в своем проекте, но мое приложение всегда отвергается!

Что теперь делать? Любая помощь будет оценена ...

EDIT: Я нашел эту строку:

IDEWorkspaceWindowController***UniqueIdentifier***_IDEActiveWorkspaceTabController_IDE 

В этом файле:

MYPROJECT.xcodeproj/project.xcworkspace/xcuserdata/MYUSERNAME.xcuserdatad/UserInterfaceState.xcuserstate

Считаете ли вы, что проблема может исходить из этой строки?

1

Я не думаю, что сам IOS SDK для Facebook использует устаревший «uniqueIdentifier». Я просмотрел источники в https://github.com/facebook/facebook-ios-sdk.

Но когда из этих источников создается SDK Facebook, созданный двоичный файл содержит строку. Единственной библиотекой, которая используется SDK, является -> Accounts.framework < - от самого IOS!

Похоже, что Apple застрелила собственную ногу!

Редактировать: Eric дал правильный ответ. UIDevice используется в facebook-ios-sdk/src/FBSession.m. Счётная счёт не была проблемой.

3

Я подал ошибку с Facebook, но здесь обходной путь:

https://developers.facebook.com/bugs/193119420841692

В SDK, редактировать Facebook-КСН-SDK/SRC/FBSession.m

Закомментируйте

- (BOOL)isMultitaskingSupported { 
/* 
UIDevice *device = [UIDevice currentDevice]; 
return [device respondsToSelector:@selector(isMultitaskingSupported)] && 
[device isMultitaskingSupported];*/ 
return TRUE; 
} 

Его не нужно с IOS 4.0 в любом случае.

, который удаляет ссылку, и вновь построить .a

1

Это все Apple, делает все, что вам нужно сделать, это:

strings - -a -arch armv7 "App.app/App" | grep uniqueIdentifier 

App.app после распаковки приложение. ipa, то он будет находиться внутри каталога полезной нагрузки.

Просто запустите эту команду внутри каталога полезной нагрузки. Вы можете выполнить тест, используя greping известный метод, который вы используете.

Вы можете заменить ARMv7 к все, если вы хотите искать для всех архитектур она построена для.

0

У меня была та же проблема. Это оказалось RevMob sdk. Последние 5.9.0 (2013/05/30) швы, чтобы решить проблему.

+0

Привет! это не ответ, конвертируйте его в комментарий, пожалуйста. – vav