![](/img/trans.png)
[英]Error Appstore connect : Missing Purpose String in Info.plist File (NSBluetoothPeripheralUsageDescription)
[英]Error Appstore connect : Missing Purpose String in Info.plist File
我已將我的應用程序提交到 App Store Connect 進行審核。 盡管該應用程序仍在審核中,但我已收到一封電子郵件,通知我必須修復錯誤。 以下是消息的內容:
親愛的開發者,
我們在您的應用 XXXXX 的最近一次交付中發現了一個或多個問題。 您的交付已成功,但您可能希望在下次交付時更正以下問題:
“Info.plist 文件中缺少目的字符串。您的應用程序的代碼引用了一個或多個訪問敏感用戶數據的 API。應用程序的 Info.plist 文件應包含一個 NSLocationAlwaysUsageDescription 鍵,以及一個面向用戶的目的字符串,清楚而完整地解釋您的應用程序需要的原因數據。從 2019 年春季開始,所有提交到 App Store 的訪問用戶數據的應用都需要包含目的字符串。如果您使用外部庫或 SDK,它們可能會引用需要目的字符串的 API。而您的應用可能不使用這些 API,仍然需要一個目的字符串。您可以聯系庫或 SDK 的開發人員,並請求他們發布不包含 API 的代碼版本。
更正問題后,您可以使用 Xcode 或 Application Loader 將新的二進制文件上傳到 iTunes Connect。
最好的祝福,
App Store 團隊
我的應用程序是完全用 Expo 構建的,我不知道如何訪問和修改 Info.plist。
任何的想法?
2019 年 4 月編輯:您現在必須添加這兩個鍵,因為 2019 年春季已經開始。 請注意NSLocationAlwaysUsageDescription
現已棄用(自 iOS 11 起)並已替換為NSLocationAlwaysAndWhenInUseUsageDescription
和NSLocationWhenInUseUsageDescription
。 如果要支持低於 iOS 11 的版本,則必須使用這三個值。
總而言之,您必須:
NSLocationAlwaysAndWhenInUseUsageDescription
和NSLocationWhenInUseUsageDescription
NSLocationAlwaysUsageDescription
NSLocationUsageDescription
。我昨天剛遇到同樣的問題,即使應用程序沒有使用定位功能。 它可能與項目中包含的具有此可選功能的某些框架有關。
即使info.plist
中沒有NSLocationAlwaysUsageDescription
和NSLocationWhenInUseUsageDescription
鍵,我也可以確認我的應用程序已獲得批准
事實上,正如 Apple 在郵件中所說:
從 2019 年春季開始,所有提交到 App Store 的訪問用戶數據的應用程序都需要包含一個目的字符串。
所以唯一要做的就是在你的項目中添加這個密鑰(現在更好,這樣你就不會忘記),這樣它就會包含在你的下一次更新中。
只需在您的info.plist
中添加兩個新條目,將NSLocationAlwaysUsageDescription
和NSLocationWhenInUseUsageDescription
作為鍵,並簡要說明為什么將它們用作值(即使您沒有真正使用它們......)。
如果您使用的是 Expo,則可以通過將 infoPlist 添加到 app.json 來添加解決方案,如下所示:
"expo": {
"ios": {
"bundleIdentifier": "com.app.myapp",
"infoPlist": {
"NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
},
},
}
我在商店里有一些應用程序,我試圖分發一個用於 QA 的版本,但同樣的事情發生在兩個不同的應用程序中。 我認為這是接受構建上傳到 Appstore connect 的新標准。
解決方法很簡單,在.plist文件中添加如下幾行。
<key>NSLocationAlwaysUsageDescription</key>
<string>custom message</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>custom message</string>
PS:在我的例子中沒有使用任何位置功能,但我添加了這些行以符合 Appstore 連接指南。 順便說一句,在收到那封電子郵件后,即使他們說構建它有一些問題,我也可以測試該應用程序。
我希望這對你們有用。
為了更加簡化,您可以在 info.plist 中添加這些行。 這些錯誤的出現是因為從 2019 年春季開始,所有提交到 App Store 的訪問用戶數據的應用程序都需要包含一個目的字符串。
在您的 plist 中添加以下幾行
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string> <key>NSLocationWhenInUseUsageDescription</key> <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string> <key>NSLocationAlwaysUsageDescription</key> <string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
NSLocationAlwaysUsageDescription xyz 福利需要您的位置 NSLocationWhenInUseUsageDescription 您的 xyz 福利需要您的位置
“Info.plist 文件中缺少目的字符串。您的應用程序的代碼引用了一個或多個訪問敏感用戶數據的 API。應用程序的 Info.plist 文件應包含一個 NSLocationAlwaysUsageDescription 鍵,以及一個面向用戶的目的字符串,清楚而完整地解釋您的應用程序需要的原因數據。從 2019 年春季開始,所有提交到 App Store 的訪問用戶數據的應用都需要包含目的字符串。如果您使用外部庫或 SDK,它們可能會引用需要目的字符串的 API。而您的應用可能不使用這些 API,仍然需要一個目的字符串。您可以聯系庫或 SDK 的開發人員,並請求他們發布不包含 API 的代碼版本。
打開Info.plist
作為源代碼。
在您的 plist 中添加以下幾行
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>$(PRODUCT_NAME) needs Location access for "some reason"!</string>
我們確實收到了相同的電子郵件,但我們根本沒有使用 CoreLocation。 經過快速搜索,我們發現 Parse SDK 可以使用 CoreLocation。 在 Apple 的電子郵件中,他們明確表示:
如果您使用外部庫或 SDK,它們可能會引用需要目的字符串的 API。
這意味着您的代碼或任何其他庫或 SDK 可以使用 CoreLocation 的那一刻,即使您不使用它,您也需要提供“使用時”和“始終使用”的隱私說明。
這也是 Apple 的新功能,目前它只是一個警告,但從 2019 年春季開始,新提交將需要它。
有以下幾種情況:
NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription (iOS>11)
NSLocationAlwaysUsageDescription (iOS<=10)
NSLocationUsageDescription (seems very old, iOS8?)
Apple 聲明:
將
NSLocationWhenInUseUsageDescription
鍵和NSLocationAlwaysAndWhenInUseUsageDescription
鍵添加到您的Info.plist文件中。
和:
如果您的應用支持 iOS 10 及更早版本,請添加
NSLocationAlwaysUsage
NSLocationUsageDescription
似乎已死,ADC 站點中唯一的引用是: https ://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf
所以可以肯定的是,使用第一個 3。
出現此問題是因為您沒有包括
<NSLocationAlwaysUsageDescription>
為您的應用程序。 當我嘗試在 AppStore 上提交我的應用程序時,我遇到了同樣的問題。 應用程序處理后,我收到了相同的郵件。 我剛剛添加了說明,現在已解決。
希望這可以幫助。
這些答案都告訴你如何遵守 App Store 規則以避免警告,但真正的解決方法是 Expo 允許你禁用他們對定位服務的 SDK 要求,除非你實際使用它們 - 我不確定這是否是可能的。
2 月 19 日出現同樣的問題,收到一封電子郵件,其中包含我未使用的一系列權限,我認為它們來自插件。 Apple 在 3 月 19 日表示這是一項要求,因此我將這些添加到 info.plst 中並再次上傳。
這確實很愚蠢。
我有<key>NSLocationWhenInUseUsageDescription </key>
而不是<key>NSLocationWhenInUseUsageDescription</key>
一定要刪除尾隨空格
我也面臨同樣的問題,但 27 小時后,我收到了關於批准的電子郵件,即使我什么也沒做。 因此,等待大約 24 小時,而不是再次執行所有這些過程。
使用 Xcode 11 復制密鑰NSLocationAlwaysUsageDescription
並將其添加到Info
-> Custom iOS Target Properties
-> 單擊此選項卡左下角的+
並作為值插入某種描述,例如This app requires location access to function properly.
.
我的應用程序也得到了,我什么也沒做,但它可以運行良好,下次我認為應該在 plist 中添加這樣的密鑰,只是做一些描述
對上述問題的簡短回答 -
NSLocationAlwaysUsageDescription
必須使用 Info.plist 文件中的以下描述進行更新
{Your App Name} 需要訪問該位置以建議登革熱爆發區。
在我們的例子中,我們在我們的應用程序中使用了NSLocationWhenInUseUsageDescription
,但沒有使用NSLocationAlwaysUsageDescription
。
從此處的評論(感謝 matt-oakes)閱讀,我們使用的依賴框架之一似乎正在使用NSLocationAlwaysUsageDescription
。
運行我們的應用程序,它不會顯示實際的 NSLocationAlwaysUsageDescription 權限模式,因此它看起來只是在后台處理它。
所以總而言之,將NSLocationAlwaysUsageDescription
添加到 Info.plist 修復了警告電子郵件,並且沒有更改應用程序中的任何行為
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.