Błąd połączenia z Appstore: brak ciągu celu w pliku Info.plist


153

Przesłałem moją aplikację do sprawdzenia w App Store Connect. Chociaż aplikacja jest nadal w trakcie sprawdzania, otrzymałem wiadomość e-mail z informacją, że muszę naprawić błąd. Oto treść wiadomości:

Szanowny Twórco,

Zidentyfikowaliśmy co najmniej jeden problem z niedawną dostawą Twojej aplikacji XXXXX. Twoja dostawa się powiodła, ale możesz chcieć poprawić następujące problemy podczas następnej dostawy:

„Brak ciągu celu w pliku Info.plist. Kod Twojej aplikacji odwołuje się do co najmniej jednego interfejsu API, który uzyskuje dostęp do poufnych danych użytkownika. Plik Info.plist aplikacji powinien zawierać klucz NSLocationAlwaysUsageDescription z ciągiem znaków celu widocznym dla użytkownika, wyjaśniającym jasno i całkowicie, dlaczego aplikacja potrzebuje danych. Od wiosny 2019 r. wszystkie aplikacje przesłane do App Store, które uzyskują dostęp do danych użytkownika, będą musiały zawierać ciąg celu.Jeśli korzystasz z bibliotek zewnętrznych lub SDK, mogą one odwoływać się do interfejsów API, które wymagają ciągu celu. Twoja aplikacja może nie korzystać z tych interfejsów API, ciąg znaków celu jest nadal wymagany. Możesz skontaktować się z programistą biblioteki lub zestawu SDK i poprosić o wydanie wersji swojego kodu, która nie zawiera interfejsów API.

Po rozwiązaniu problemów możesz użyć Xcode lub Application Loader, aby przesłać nowy plik binarny do iTunes Connect.

Z poważaniem,

Zespół App Store

Moja aplikacja jest w pełni zbudowana za pomocą Expo i nie wiem, jak uzyskać dostęp i zmodyfikować Info.plist.

Dowolny pomysł?


3
Mam ten sam problem z najnowszą kompilacją, biorąc pod uwagę, że nawet nie używam usług lokalizacyjnych w mojej aplikacji. Apple nie ma oficjalnego dokumentu na temat tej zmiany.
huong

3
+1 Wydano tę samą aplikację 2 dni temu i wszystko jest w porządku. 2 dni później po prostu zmieniłem kilka linii kodu, aby zrobić nowe wydanie (nie dodałem więcej Podów ani czegoś podobnego) i dostałem tę wiadomość
Tiago Ornelas

2
Doświadczyliśmy tego samego problemu. Podejrzewam, że to błąd w procesie zatwierdzania (miejmy nadzieję). Zamierzam zignorować na weekend i mam nadzieję, że w poniedziałek zostanie naprawiony.
AMB

2
Właśnie teraz napotkałem ten sam problem, chociaż nasza aplikacja tak naprawdę nie potrzebuje usług lokalizacyjnych zawsze. Potrzebuje tylko NSLocationWhenInUseUsageDescription, dla którego mamy już napis celu. Prawdopodobnie to tylko usterka po stronie Apple'a?
ilight

3
I na sposób Apple łącze, które podają w e-mailu, aby to naprawić, jest zepsute.
gwalshington

Odpowiedzi:


45

Jeśli używasz Expo, możesz dodać rozwiązanie, dodając infoPlist do app.json w następujący sposób:

  "expo": {
     "ios": {
       "bundleIdentifier": "com.app.myapp",
       "infoPlist": {
         "NSLocationAlwaysUsageDescription": "Some message to appease Apple.",
       },
     },
   }

Expo Docs


25
Właściwie NIE jest to „jakaś wiadomość, aby uspokoić Apple”, ale poinformowanie użytkownika, CO w tym przypadku robisz z danymi (lokalizacją) wygenerowanymi przez użytkownika. To kwestia obaw związanych z prywatnością i uważam, że dobrze jest być uczciwym wobec użytkowników aplikacji.
Lookaji

4
Mam cię! Myślałem o nowicjuszach, którzy mogą pokusić się o to, żeby tak zostawić! Nie chciałem brzmieć zrzędliwie :) Pozdrawiam!
Lookaji

@gwalshington Nie mam żadnego obiektu wystawowego w app.json
Heemanshu Bhalla

@HeemanshuBhalla hmm, nie jestem pewien, dlaczego. W moim pliku app.json znajduje się na górze i jest pierwszym zadeklarowanym obiektem. Tutaj deklarujesz numer wersji, identyfikator pakietu itp. Jeśli wyrzuciłeś aplikację, może wygląda ona nieco inaczej?
gwalshington

2
Jaki tekst wpisać, jeśli nie zbieramy i danych lokalizacji? Musimy wymyślić kłamstwo: S
Primož Kralj

62

EDYCJA Kwiecień 2019 : Musisz teraz dodać te dwa klucze, ponieważ zaczęła się wiosna 2019. Zauważ, że NSLocationAlwaysUsageDescriptionjest teraz przestarzały (od iOS 11) i został zastąpiony przez NSLocationAlwaysAndWhenInUseUsageDescriptioniNSLocationWhenInUseUsageDescription . Jeśli chcesz obsługiwać niższą niż iOS 11, musisz użyć trzech wartości.

Podsumowując musisz:

  • Dodaj NSLocationAlwaysAndWhenInUseUsageDescriptionAND NSLocationWhenInUseUsageDescriptionna iOS 11 i więcej
  • Dodaj, NSLocationAlwaysUsageDescriptionjeśli chcesz obsługiwać iOS 10 i mniej
  • I na koniec możesz dodać, NSLocationUsageDescriptionjeśli chcesz obsługiwać iOS 8 i mniej.


Możesz przesłać swoją aplikację, nawet jeśli otrzymałeś tę wiadomość!

Właśnie wczoraj napotkałem ten sam problem, nawet jeśli aplikacja nie korzysta z funkcji lokalizacji. Może to być związane z niektórymi strukturami zawartymi w projekcie, które mają tę opcjonalną funkcję.

Mogę potwierdzić, że moja aplikacja została zatwierdzona nawet bez wpisania NSLocationAlwaysUsageDescriptioniNSLocationWhenInUseUsageDescriptioninfo.plist

Rzeczywiście, jak podał Apple w mailu:

Począwszy od wiosny 2019 r. Wszystkie aplikacje przesłane do App Store, które mają dostęp do danych użytkownika, będą musiały zawierać ciąg celu.

Więc jedyne, co musisz zrobić, to dodać ten klucz (teraz jest lepszy, żebyś nie zapomniał) w swoim projekcie, aby został uwzględniony w następnej aktualizacji .

Po prostu dodaj dwa nowe wpisy do swojego info.plist, z kluczami NSLocationAlwaysUsageDescriptioni NSLocationWhenInUseUsageDescriptionjako oraz krótki opis, dlaczego używasz ich jako wartości (nawet jeśli tak naprawdę ich nie używasz ...).


2
Czy w swojej edycji z kwietnia 2019 r. Na pewno nie cofnięto wycofania? Z tego, co widzę, NSLocationUsageDescription to ten, który jest przestarzały. Patrząc tutaj: developer.apple.com/library/archive/documentation/General/…
apricity

E-mail, który otrzymałem od Apple, wspomina o NSLocationAlwaysUsageDescription, więc myślę, że on to odwrócił.
Dror Bar,

@apricity @DrorBar Przepraszam, rzeczywiście popełniłem błąd. Nie było to odwrócone, ale nadal był błąd, NSLocationAlwaysUsageDescriptionnależy go zastąpić NSLocationAlwaysAndWhenInUseUsageDescriptioni NSLocationWhenInUseUsageDescription , a nie NSLocationUsageDescription(jak już pisałem, przepraszam…). Zaktualizowałem moją odpowiedź, aby dodać podsumowanie procesu.
AnthoPak

48

Mam w sklepie kilka aplikacji i próbowałem rozpowszechniać wersję do kontroli jakości i to samo stało się w dwóch różnych aplikacjach. Myślę, że to nowe kryterium akceptowania przesyłania kompilacji do Appstore connect.

Rozwiązanie jest proste, dodaj następujące wiersze w pliku .plist.

<key>NSLocationAlwaysUsageDescription</key>

<string>custom message</string>

<key>NSLocationWhenInUseUsageDescription</key>

<string>custom message</string>

PS: W moim przypadku nie korzystałem z żadnej funkcji lokalizacji, ale dodałem te linie, aby spełnić wytyczne Appstore connect. Po otrzymaniu tego e-maila mogłem przetestować aplikację, nawet jeśli powiedzieli, że kompilacja ma pewne problemy.

Mam nadzieję, że to zadziała dla was.


5
Wow, właśnie to zrozumiałem, zdałem sobie sprawę, że wszyscy też to rozumieją!
Cameron A. Ellis

pierwszy klucz został zmieniony na teraz<key>NSLocationUsageDescription</key>
Hudi Ilfeld

1
Czy po aktualizacji info.plist musimy ponownie archiwizować?
Bishoy Hanna

Czy muszę zwiększyć wersję pakietu lub numer wersji, aby załadować nowy plik binarny?
Dror Bar,

20

To nowe wymaganie od Apple, nawet jeśli nie korzystasz z lokalizacji. Jeśli chcesz dodać uprawnienia w Xcode, poszukaj opcji „Prywatność - Opis użycia lokalizacji” i „Prywatność - Lokalizacja podczas używania Opis użycia” i wpisz niestandardowy ciąg dla każdego z nich.

wprowadź opis obrazu tutaj


1
W przypadku innej aktualizacji aplikacji Apple również poprosiło o to pozwolenie: „Prywatność - Lokalizacja zawsze Opis użytkowania”
Juan José Ramírez

2
Więc jeśli nie korzystam z tych funkcji, co mam tam napisać, kłamstwo, coś w rodzaju „zebrać lokalizację do wykorzystania w przyszłości, może”?
Ruslan Shashkov

tak, Apple skontaktuje się z Tobą, jeśli będą mieć pytania
Juan José Ramírez

Nie jestem w stanie znaleźć listy właściwości informacji w moim xcode 10.1, powinieneś wspomnieć, gdzie ją znaleźć, szukałem ustawień kompilacji zarówno dla celów, jak i projektu
Awais Nasir

1
Okay So Targets-> Info-> Custom ios Target Properties to the dokładna lokalizacja
Awais Nasir

15

Dla uproszczenia możesz dodać te linie do swojej listy info.plist. Te błędy pojawiają się, ponieważ począwszy od wiosny 2019 r. Wszystkie aplikacje przesłane do App Store, które uzyskują dostęp do danych użytkownika, będą musiały zawierać ciąg celu.

  1. Otwórz info.plist jako kod źródłowy.
  2. Dodaj następujące wiersze do swojej listy

    <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>

2
Musiałem usunąć dodatkowe spacje w tagach <key> i wtedy zadziałało.
innich

@innich dziękuję za wskazanie tego, zmieniłem odpowiedź.
Sachin Nautiyal

8
## Użyj tego klucza w pliku info.plist

NSLocationAlwaysUsageDescription Twoja lokalizacja jest wymagana do uzyskania świadczeń xyz dla Ciebie NSLocationWhenInUseUsageDescription Twoja lokalizacja jest wymagana do uzyskania świadczeń xyz dla Ciebie


8

Otrzymaliśmy ten sam e-mail i wcale nie używamy CoreLocation. Po szybkim wyszukiwaniu stwierdziliśmy, że Parse SDK może używać CoreLocation. W e-mailu Apple wyraźnie mówią:

Jeśli korzystasz z bibliotek zewnętrznych lub zestawów SDK, mogą one odwoływać się do interfejsów API, które wymagają ciągu celu.

Oznacza to, że w chwili, gdy Twój kod lub jakakolwiek inna biblioteka lub zestawy SDK mogą korzystać z CoreLocation, nawet jeśli go nie używasz, musisz podać opis prywatności dla „Kiedy w użyciu” i „Zawsze używaj”.

To także coś nowego od Apple i na razie jest to tylko ostrzeżenie, ale będzie wymagane od wiosny 2019 roku w przypadku nowych zgłoszeń.


To po prostu głupie ... Jeśli go nie używam, może to spowodować, że ludzie nie będą pobierać mojej aplikacji tylko z tego powodu. -_-
Mayoul

3
Nie całkiem. Alert z prośbą o użycie lokalizacji nie zostanie wyświetlony, chyba że gdzieś w kodzie CLLocationManager.requestWhenInUseAuthorization()zostanie wywołany. Firma Apple przeanalizowała każdy kod aplikacji, aby sprawdzić, czy można wywołać taką funkcję. Jeśli nigdy nie zostanie wywołany, alert się nie pojawi.
sebleclerc

6

Ten problem występuje, ponieważ nie zostały uwzględnione

 <NSLocationAlwaysUsageDescription>

dla Twojej aplikacji. Napotkałem ten sam problem, gdy próbowałem przesłać moją aplikację do AppStore. Po przetworzeniu aplikacji otrzymałem tę samą wiadomość. Właśnie dodałem opis i teraz jest rozwiązany.

Mam nadzieję że to pomoże.


To mi pomogło. Jeśli używasz Lokalizacji w swojej aplikacji (a może po prostu zawsze), musisz dodać tę linię i ciąg poniżej. <key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
MaylorTaylor

6

Istnieją następujące przypadki:

NSLocationAlwaysAndWhenInUseUsageDescription (iOS>11)
NSLocationWhenInUseUsageDescription          (iOS>11)
NSLocationAlwaysUsageDescription             (iOS<=10)
NSLocationUsageDescription                   (seems very old, iOS8?)

Apple stwierdza:

Dodaj NSLocationWhenInUseUsageDescriptionklucz i NSLocationAlwaysAndWhenInUseUsageDescriptionklucz do pliku Info.plist .

i:

Jeśli Twoja aplikacja obsługuje system iOS 10 i starsze, dodaj rozszerzenie NSLocationAlwaysUsage

NSLocationUsageDescription wydaje się martwy, jedynym odnośnikiem w witrynie ADC jest: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdf

Więc dla pewności użyj pierwszego 3.


3

Wszystkie te odpowiedzi mówią ci, jak przestrzegać reguł App Store, aby uniknąć ostrzeżenia, ale prawdziwą poprawką byłoby, gdyby Expo pozwolił ci wyłączyć ich wymagania SDK dla usług lokalizacyjnych, chyba że faktycznie ich używasz - nie jestem pewien, czy tak jest możliwy.


3

ten sam problem w lutym 19, dostałem e-mail z kilkoma uprawnieniami, których nie używam, zakładam, że pochodzą one z wtyczek. Apple mówi 19 marca, że ​​jest to wymóg, więc dodaję je w info.plst i ponownie przesyłam.

To naprawdę bardzo głupie.


2
Więcej komentarza, naprawdę ...?
Steve

3

Ja też mam ten sam problem, ale po 27 godzinach otrzymałem wiadomość e-mail o zatwierdzeniu, mimo że nic nie zrobiłem. Więc poczekaj około 24 godzin, zamiast wykonywać cały ten proces ponownie.


1
Tak, to błąd!
Danh Huynh

2

Miałem <key>NSLocationWhenInUseUsageDescription </key> zamiast <key>NSLocationWhenInUseUsageDescription</key>

pamiętaj, aby usunąć końcowe spacje


2

Przejrzyj wiadomość e-mail otrzymaną od ** App Store Connect **

Zidentyfikuj brakujący klucz wprowadź opis obrazu tutaj

Instrukcje

  1. Otwórz plik info.plist.

  2. Dodaj i wyszukaj brakujący klucz z podanych opcji (np. Kontakty = Prywatność - Opis wykorzystania kontaktów)

  3. Dodaj opis zastosowania:

$ (PRODUCT_NAME) potrzebuje dostępu Kontaktów do „Podaj powód tutaj”.

Przykład:


1
sir, mam ten sam błąd, ale dlaczego dodać do info.plist w rzeczywistości nie używam funkcji kontaktu w mojej aplikacji, więc dlaczego musimy to dodać?
Kapil soni

@Kapilsoni Upewnij się, że nie uzyskujesz dostępu do jednego lub więcej interfejsów API, które mają dostęp do poufnych danych użytkownika
Zeus

1
: sir W mojej aplikacji użyłem tylko aparatu i lokalizacji?
Kapil soni

2

Za pomocą Xcode 11 skopiuj klucz NSLocationAlwaysUsageDescriptioni dodaj go do Info-> Custom iOS Target Properties-> Kliknij +w lewym dolnym rogu tej zakładki i jako wartość wstaw jakiś opis, np This app requires location access to function properly..


2

„Brak ciągu celu w pliku Info.plist. Kod Twojej aplikacji odwołuje się do co najmniej jednego interfejsu API, który uzyskuje dostęp do poufnych danych użytkownika. Plik Info.plist aplikacji powinien zawierać klucz NSLocationAlwaysUsageDescription z ciągiem celu widocznym dla użytkownika, wyjaśniającym jasno i całkowicie, dlaczego aplikacja potrzebuje danych. Od wiosny 2019 r. wszystkie aplikacje przesłane do App Store, które mają dostęp do danych użytkownika, będą musiały zawierać ciąg celu.Jeśli korzystasz z bibliotek zewnętrznych lub SDK, mogą one odwoływać się do interfejsów API, które wymagają ciągu celu. Podczas gdy Twoja aplikacja może nie korzystać z tych interfejsów API, ciąg znaków celu jest nadal wymagany. Możesz skontaktować się z programistą biblioteki lub pakietu SDK i poprosić o wydanie wersji swojego kodu, która nie zawiera interfejsów API.

Otwórz info.plist jako kod źródłowy.
Dodaj następujące wiersze do swojej listy

<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>

1

Moja aplikacja też to dostała , i nic z tym nie robię, ale może działać dobrze, następnym razem myślę, że powinienem dodać taki klucz do plist, po prostu zrób jakiś opis


1

Krótka odpowiedź na powyższy problem -

NSLocationAlwaysUsageDescription należy zaktualizować o następujący opis w pliku Info.plist

Aplikacja {Your App Name} wymaga dostępu do lokalizacji, aby zasugerować strefy epidemii dengi.


0

W naszym przypadku używaliśmy NSLocationWhenInUseUsageDescriptionw naszej aplikacji, ale nie NSLocationAlwaysUsageDescription.

Czytając z komentarzy tutaj (dzięki Matt-oakes) wygląda na toNSLocationAlwaysUsageDescription jest używany przez jeden z frameworków zależności, których używamy.

Uruchamianie naszej aplikacji nie pokazuje aktualnego trybu uprawnień NSLocationAlwaysUsageDescription, więc wygląda na to, że obsługuje to tylko w tle.

Podsumowując, dodanie NSLocationAlwaysUsageDescriptiondo Info.plist naprawiło wiadomość e-mail z ostrzeżeniem i nie zmieniło żadnego zachowania w aplikacji 👍🏻

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.