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ł?
źródło
Odpowiedzi:
Jeśli używasz Expo, możesz dodać rozwiązanie, dodając infoPlist do app.json w następujący sposób:
Expo Docs
źródło
EDYCJA Kwiecień 2019 : Musisz teraz dodać te dwa klucze, ponieważ zaczęła się wiosna 2019. Zauważ, że
NSLocationAlwaysUsageDescription
jest teraz przestarzały (od iOS 11) i został zastąpiony przezNSLocationAlwaysAndWhenInUseUsageDescription
iNSLocationWhenInUseUsageDescription
. Jeśli chcesz obsługiwać niższą niż iOS 11, musisz użyć trzech wartości.Podsumowując musisz:
NSLocationAlwaysAndWhenInUseUsageDescription
ANDNSLocationWhenInUseUsageDescription
na iOS 11 i więcejNSLocationAlwaysUsageDescription
jeśli chcesz obsługiwać iOS 10 i mniejNSLocationUsageDescription
jeś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
NSLocationAlwaysUsageDescription
iNSLocationWhenInUseUsageDescription
info.plist
Rzeczywiście, jak podał Apple w mailu:
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 kluczamiNSLocationAlwaysUsageDescription
iNSLocationWhenInUseUsageDescription
jako oraz krótki opis, dlaczego używasz ich jako wartości (nawet jeśli tak naprawdę ich nie używasz ...).źródło
NSLocationAlwaysUsageDescription
należy go zastąpićNSLocationAlwaysAndWhenInUseUsageDescription
iNSLocationWhenInUseUsageDescription
, a nieNSLocationUsageDescription
(jak już pisałem, przepraszam…). Zaktualizowałem moją odpowiedź, aby dodać podsumowanie procesu.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.
źródło
<key>NSLocationUsageDescription</key>
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.
źródło
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.
Dodaj następujące wiersze do swojej listy
źródło
NSLocationAlwaysUsageDescription Twoja lokalizacja jest wymagana do uzyskania świadczeń xyz dla Ciebie NSLocationWhenInUseUsageDescription Twoja lokalizacja jest wymagana do uzyskania świadczeń xyz dla Ciebie
źródło
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ą:
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ń.
źródło
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.Ten problem występuje, ponieważ nie zostały uwzględnione
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.
źródło
<key>NSLocationAlwaysUsageDescription</key> <string>Always And In Use Permission</string>
Istnieją następujące przypadki:
Apple stwierdza:
i:
NSLocationUsageDescription
wydaje się martwy, jedynym odnośnikiem w witrynie ADC jest: https://developer.apple.com/ibeacon/Getting-Started-with-iBeacon.pdfWięc dla pewności użyj pierwszego 3.
źródło
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.
źródło
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.
źródło
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.
źródło
Miałem
<key>NSLocationWhenInUseUsageDescription </key>
zamiast<key>NSLocationWhenInUseUsageDescription</key>
pamiętaj, aby usunąć końcowe spacje
źródło
Przejrzyj wiadomość e-mail otrzymaną od ** App Store Connect **
Zidentyfikuj brakujący klucz
Instrukcje
Otwórz plik info.plist.
Dodaj i wyszukaj brakujący klucz z podanych opcji (np. Kontakty = Prywatność - Opis wykorzystania kontaktów)
Dodaj opis zastosowania:
Przykład:
źródło
Za pomocą Xcode 11 skopiuj klucz
NSLocationAlwaysUsageDescription
i dodaj go doInfo
->Custom iOS Target Properties
-> Kliknij+
w lewym dolnym rogu tej zakładki i jako wartość wstaw jakiś opis, npThis app requires location access to function properly.
.źródło
„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
źródło
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
źródło
Krótka odpowiedź na powyższy problem -
NSLocationAlwaysUsageDescription
należy zaktualizować o następujący opis w pliku Info.plistźródło
W naszym przypadku używaliśmy
NSLocationWhenInUseUsageDescription
w naszej aplikacji, ale nieNSLocationAlwaysUsageDescription
.Czytając z komentarzy tutaj (dzięki Matt-oakes) wygląda na to
NSLocationAlwaysUsageDescription
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
NSLocationAlwaysUsageDescription
do Info.plist naprawiło wiadomość e-mail z ostrzeżeniem i nie zmieniło żadnego zachowania w aplikacji 👍🏻źródło