2013-05-07 46 views
45

今天我們收到了關於我們提交的反饋,並且我們不理解報告的問題:「應用程序不被允許訪問UDID,並且不能使用UIDevice的uniqueIdentifier方法。更新您的應用程序和服務器,將用戶與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使用唯一標識符?這個決議是什麼?

+6

您是否在使用可能包含UDID的第三方庫或類? – sangony 2013-05-07 02:15:04

+0

您是否將任何東西,可能是您正在構建的東西從應用程序傳遞到識別iPhone的服務器? – GoZoner 2013-05-07 02:40:51

+1

也許有些分析庫? – Undo 2013-05-07 03:45:54

回答

2

今天我有同樣的問題。我將AdMob SDK升級到6.4.1,然後再次提交但沒有用處。 但是,在我禁用AdMob代碼並且未鏈接到其庫之後,它通過了上傳檢查。

根據Google的聲明,AdMob SDK 6.4及更高版本不再訪問UDID。顯然,蘋果公司並不這麼認爲。

+0

升級AdMob SDK爲我解決了這個問題。我想你可能有另一個使用uniqueIdentifier的第三部分庫。 – 2013-05-07 17:21:27

+0

我今天提交了前幾天被拒絕的相同二進制文件,但未被拒絕。我想這個問題是在iTunes連接端,而不是在admob庫中。 – hectr 2013-05-14 07:25:35

+0

我用相同的AdMob SDK提交了一個新版本,iTunes連接沒有抱怨。我認爲問題出在iTunes連接上,他們已經像其他人所說的那樣解決了問題。 – 2013-05-23 03:00:05

2

通常用於分析和beta測試的第三方庫使用uniqueIdentifier來跟蹤用戶(例如測試飛行或GA的舊版本),檢查您使用的任何第三方庫是否使用此功能。如果不是這種情況,您可以在http://itunesconnect.apple.com處要求澄清。

0

今天我面臨同樣的問題。 openssl中有一個名爲uniqueIdentifier的變量。也許它會導致問題。

+0

你有沒有機會使用libspotify?我發現它是我今天提交的罪魁禍首。 – Igor 2013-05-07 15:05:11

+0

感謝您的所有答案。 – Tiago 2013-05-08 18:13:28

5

檢查二進制您的strings命令生成,並查找uniqueIdentifier

$ strings YOUR_BINARY | grep uniqueIdentifier 

很可能你會發現它在那裏。

我發現OpenSSL在頭文件中聲明瞭一個字符串uniqueIdentifier,所以很可能你的應用程序(或者你的應用程序提供的任何靜態庫)包含了它。

在我的情況下,罪魁禍首是libspotify

+0

如何使用String命令?我有一個xyz.app然後?我使用$ strings xyz.app | grep uniqueIdentifier並獲取不能映射文件:xyz.app(無效參數)。謝謝 – Mangesh 2013-05-09 06:59:45

+0

在「.app」目錄中搜索與您的應用名稱相同的文件。假設我的應用程序名爲「Foo.app」,請運行「find Foo.app -type f -name Foo」,然後針對它運行字符串。 – Igor 2013-05-10 20:43:11

+0

@Igor - 我似乎有與libspotify相同的問題。它不在我的源代碼中的任何地方使用明文,所以它似乎在libspotify二進制文件中。你找到解決方案嗎? – Grav 2013-05-10 22:07:02

3

在我的情況下,這個問題是負責BugSense SDK(我用過時的版本)。升級到最新版本(3.1.3)後,一切正常。

+0

感謝Tomasz的澄清,實際上最新版本的插件是3.3.1你可以下載它並閱讀發佈說明http://www.bugsense.com/releases/ios/3.3.1 – PanosJee 2013-05-08 07:41:56

+0

謝謝 – Krish 2013-06-11 15:12:00

7

解決了它: 問題是您的項目仍然參考舊的SDK,並且它會使用舊的sdk方法(包括蘋果拒絕的UDID)編譯代碼。

修復它在搜索路徑 框架搜索路徑 庫搜索路徑的你構建屬性

去除如舊SDK路徑不必要的價值觀,並把在那裏,你目前的SDK路徑

清理所有項目的文件: 窗口 - >管理器 - >項目 - 刪除您的項目 產品 - >清潔

現在重建它,並重新提交給蘋果。

享受:)

4

我有同樣的問題,但能夠針點在終端使用以下命令包含uniqueIdentifier的文件,我的項目文件夾中。

grep -Rnis 'uniqueIdentifier' *

這回顯了一堆線在我的終端窗口中,罪魁禍首是libGoogleAdModAds.a - 即使在我的代碼我並沒有真正使用它,它仍然引用在我的項目中,因此添加到構建。

我的來源是:http://www.commandlinefu.com/commands/view/3573/search-for-a-string-inside-all-files-in-the-current-directory

86

在我的情況下,它是ibGoogleAnalytics_debug.a庫。

要找出哪個庫使用的唯一標識符的方法,去你的項目文件夾,然後鍵入:

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

我得到這個: 的二進制文件./My_Project/libGoogleAnalytics_debug.a匹配

+2

這應該是被接受的答案,它貫穿始終,並且指定了違規代碼。 – MobileVet 2013-05-09 18:14:32

+0

是否存在誤報的空間?Millennial SDK(v5.0.1)正在被拋出,即使在他們聲稱已不再使用 – Emanuel 2013-05-14 03:15:16

+2

某些第三方庫不使用「.a」擴展名,而是不使用擴展名。該命令還會在這些文件中查找API使用情況: 'grep -lr「uniqueIdentifier」* | grep -v .svn | grep -v .md' – CornPuff 2013-06-25 22:01:45

1

我昨天更新我的應用程序相同的問題。
使用UDID搜索第三方庫後,我意識到我正在使用Conversion Tracking for iOS。此庫使用UDID,但4月10日發佈了修復此問題的更新:

iOS轉換跟蹤SDK v1.2.0不再訪問UDID(2013年4月10日發佈)。

我希望它有幫助。

1

我一整天都試過,我的應用程序總是被拒絕。

首先,我試過找。 | grep -v .svn | grep「.a」| grep -v「.app」| xargs grep uniqueIdentifier在我的項目文件夾中。

Google Analytics,AdMob和Wikitude SDK似乎使用uniqueIdentifier。所以我刪除了GA,並更新了AdMob和Wikitude。現在,不再有對uniqueIdentifier方法的調用。當我做grep時,結果是什麼都沒有。我清理了我的項目中的所有內容,但我的應用程序始終被拒絕!

我現在能做什麼?任何幫助將不勝感激 ...

編輯:我發現這行:

IDEWorkspaceWindowController***UniqueIdentifier***_IDEActiveWorkspaceTabController_IDE 

在這個文件中:

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

你認爲這個問題可能來自這一行嗎?

1

我不認爲Facebook IOS SDK本身使用已棄用的'uniqueIdentifier'。我查看了https://github.com/facebook/facebook-ios-sdk的來源。

但是當Facebook SDK由此源生成時,創建的二進制文件包含該字符串。 SDK使用的唯一庫是 - > Accounts.framework < - 來自IOS本身!

所以看起來像蘋果已經開始自己的腳了!

編輯: Eric給出了正確的答案。 UIDevice用於facebook-ios-sdk/src/FBSession.m。 Accounts.framework不是問題。

3

我申請的錯誤與Facebook,但這裏是一個解決辦法:

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

在SDK中,編輯Facebook的IOS-SDK/src目錄/ FBSession.m

註釋掉

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

從IOS 4.0以來就不需要它了。

,去除參考,並重新建立。一

1

這是所有的蘋果呢,你需要做的是:

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

App.app是你解壓縮後的應用程序。 Ipa,它將在有效載荷目錄內。

只需在有效載荷目錄內運行該命令即可。您可以通過使用已知的方法進行測試。

,如果你想尋找它是爲所有的內置架構可以替代的ARMv7所有

0

我有同樣的問題。原來是RevMob sdk。最新的5.9.0(2013年5月30日)接縫來解決這個問題。

+0

嗨!這不是一個答案,請將其轉換爲評論。 – vav 2014-12-23 14:21:02

相關問題