Xcode 8 „Brak uprawnienia środowiska aps w podpisie aplikacji” podczas przesyłania

118

Mam aplikację, do której przesłaliśmy dziesiątki wersji w ciągu ostatnich 6 miesięcy i używamy APNS. Otrzymałem następujący e-mail od Apple po uaktualnieniu do Xcode 8

Szanowny Twórco,

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

Brak uprawnienia do powiadomienia push - Twoja aplikacja zawiera interfejs API dla usługi powiadomień push firmy Apple, ale w podpisie aplikacji brakuje uprawnienia aps-environment. Aby rozwiązać ten problem, upewnij się, że identyfikator aplikacji obsługuje powiadomienia wypychane w portalu obsługi administracyjnej. Następnie podpisz swoją aplikację za pomocą dystrybucyjnego profilu aprowizacji, który zawiera uprawnienie aps-environment. Spowoduje to utworzenie prawidłowego podpisu i będzie można ponownie przesłać aplikację. Aby uzyskać więcej informacji, zobacz „Provisioning and Development” w Przewodniku programowania lokalnych i powiadomień wypychanych. Jeśli Twoja aplikacja nie korzysta z usługi Apple Push Notification, nie jest wymagane żadne działanie. Możesz usunąć interfejs API z przyszłych zgłoszeń, aby zatrzymać to ostrzeżenie. Jeśli korzystasz z platformy zewnętrznej,

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

Pozdrowienia,

Zespół App Store

Dziwne jest to, że wszedłem na developer.apple.com -> Certyfikaty, identyfikatory i profile, a mój AppId nadal ma włączone powiadomienia push. Nie robię nic innego, niż kiedykolwiek na tym robiłem, więc jestem ciekawy, czy aktualizacja Xcode 8 coś zepsuła. Jakieś pomysły?

BTW: Link, który umieścili do Przewodnika programowania powiadomień push, był uszkodzony w e-mailu, więc to nie jest dobry znak.

Unome
źródło

Odpowiedzi:

156

Właściwie bardzo łatwe. Z jakiegoś powodu został wyłączony w Xcode 8, ale przejdź do Cele -> Możliwości i sprawdź, czy Powiadomienia push są poprawne w tym widoku. Dla mnie miał "Fix Me", musiałem kliknąć i voila.

Unome
źródło
4
Dziwną rzeczą w tym problemie nie było rozwiązanie, był to fakt, że w Xcode 7 było to włączone, a po aktualizacji zostało wyłączone.
Unome
2
Musiałem również przejść do pliku uprawnień i zmienić wartość środowiska APS na „produkcja”, ponieważ podczas tworzenia była ona domyślnie ustawiona na „programowanie”.
Bek
61
W Apple pewnie ostatnio zatrudniono kilku bezmyślnych ludzi. Dlaczego tracą czas deweloperów, domyślnie wyłączając pewne elementy i domyślnie ustawiając nieodpowiednie wartości bez żadnego ostrzeżenia. Straciłem jeden dzień na tworzeniu profili, certyfikatów, debugowaniu i innych irytujących rzeczach ..
Hristo Atanasov
3
Wreszcie! To śmieszne, że tak trudno było sprawić, by działało. Od prawie 5 godzin usuwam i odtwarzam certyfikaty / profile. Dobrze, że mogę powiedzieć, że teraz w pełni rozumiem, czym są te certyfikaty / profile / identyfikatory :) Dziękuję za tę wskazówkę.
Kamil Rykowski
4
@bek zauważ, że prawdopodobnie powinieneś zostawić to jako rozwój. Po przesłaniu do iTunes Connect zostaje automatycznie zmieniony na wersję produkcyjną.
Montdidier
84

Mam też ten sam problem i jestem pewien, że powiadomienia push są domyślnie wyłączone w Xcode8. Nie zauważyłem tego. Uważaj na to.

zdolność

Bruce Tsai
źródło
Czy możesz mi powiedzieć, dlaczego nie mam sekcji powiadomień push na moim koncie?
Anuj,
28

Nastąpiła zmiana w Xcode 8, gdzie Twoje uprawnienia nie pochodzą już z identyfikatorów aplikacji, ale z możliwości wybranych w celu aplikacji. Tak więc, jak powiedział Unome (OP), musisz sprawdzić, czy powiadomienia push są włączone.

Dla mnie nie był to przycisk „Napraw mnie”, ale miałem dwa pliki z uprawnieniami (jeden do programowania i jeden do dystrybucji). Przełączenie funkcji powiadomień wypychanych spowoduje dodanie aps-environmentklucza - z wartością development- do pliku uprawnień programistycznych, ale nie spowoduje dodania go do pliku uprawnień do dystrybucji. Skopiowanie tego samego klucza do dystrybucji pozwoliło pozbyć się wiadomości e-mail z ostrzeżeniem podczas przesyłania do iTunes Connect.

W przypadku większości projektów powinno wystarczyć włączenie powiadomień push lub, jeśli jest już włączone, ale klucza nie ma w uprawnieniach, spróbuj go wyłączyć i włączyć ponownie.

timgcarlson
źródło
To jest łódź, w której się znajduję, z wyjątkiem tego, że bez względu na to, co określę w moim .entitlementspliku dla bieżącej konfiguracji / schematu, zawsze używa productionjako aps-environment.
Albert Bori,
przełączanie powiadomień push w Możliwościach powoduje awarię mojego Xcode 8 !!
djay
2
@AlbertBori Dziwne, mogłem tylko pokazać programowanie, co było w porządku, ponieważ po zarchiwizowaniu wyglądało na production.
timgcarlson
6
@meteors Powinno być w porządku, jeśli wartość to development. Zostanie to zmienione w ipa po zarchiwizowaniu projektu.
timgcarlson
2
@timgcarlson To właściwie nie dzieje się podczas archiwizacji. Dzieje się to podczas przesyłania lub podczas eksportu. Również kilka przydatnych informacji, aby sprawdzić, czy jest poprawnie ustawiany tutaj: developer.apple.com/library/content/qa/qa1798/_index.html
Mark Leonard
27

Z uwag do wydania Xcode :

Xcode 8 nie kopiuje automatycznie uprawnienia aps-environment z profili aprowizacji w czasie kompilacji. To zachowanie jest zamierzone. Aby skorzystać z tego uprawnienia, włącz powiadomienia wypychane w panelu Możliwości edytora projektu lub ręcznie dodaj uprawnienia do pliku uprawnień. (28076333)

To wielka zmiana, ponieważ zawsze było dość dziwne, że uprawnienie aps-environment nie wymagało plist, ale wiele innych tak było.

Dla tych z Was, którzy nie chcą po prostu ślepo naciskać „Napraw mnie” i nie mają obecnie pliku uprawnień, jest to po prostu plik plist, do którego odwołanie znajduje się w ustawieniach kompilacji projektu w sekcji „Uprawnienia do podpisywania kodu”

mattyohe
źródło
1
Nie mogłem znaleźć tego cytatu w połączonych notatkach!
Iulian Onofrei
Nie wiem, kto zagłosował za moim komentarzem i co było nie tak, ale teraz też mogę to znaleźć.
Iulian Onofrei
13

Po dniu zmagań z Xcode 8 nie mogliśmy zrozumieć, dlaczego aps-environmentrozwój NIE został dodany do naszych kompilacji debugowania. Brakowało go w sekcji uprawnień w zbudowanej aplikacji do testowania debugowania ... mimo że WŁĄCZONO nową zdolność i istnieje plik uprawnień. Problem polega na tym, że plik uprawnień musi być ustawiony dla DOWOLNEGO zestawu SDK w ustawieniach kompilacji Xcode dla uprawnień do debugowania.

zrzut ekranu

James L Harris
źródło
Myślę, że nie ma żadnej różnicy między ustawieniem wartości dla Debugklucza a ustawieniem go dla Debug> Any SDKjeden, ponieważ ten drugi służy do zastępowania wartości dla określonego zestawu SDK.
Iulian Onofrei
To jest rozwiązanie dla mnie
Himanth
Po całym poranku zmagałem się z tym problemem, który też miałem. Przełączanie możliwości, generowanie profili aprowizacji, nic z tego nie działało. To zrobił.
Dave S
jest to nadal poprawne rozwiązanie w niektórych przypadkach na Xcode 8.3.3
dan
Chciałbym móc głosować milion razy. Walczyłem od tygodnia i to było rozwiązanie. Samo wpisanie ścieżki do pliku w polu Code Signing Entitlements na górze nie wystarczyło, musiało być również zrobione w części „Any SDK”. To był klucz do rozwiązania tego za mnie.
Robert Bentley,
7

Otrzymałem tę samą wiadomość e-mail od Apple przy użyciu XCode 7.3.1. To, co zrobiłem, aby rozwiązać problem, to:

  1. W obszarze Możliwości> Włącz powiadomienie PUSH zgodnie z odpowiedzią @Bruce Tsai.
  2. W obszarze Ustawienia kompilacji> Podpisywanie kodu> Tożsamość podpisywania kodu ustaw certyfikat dewelopera do debugowania i certyfikat dystrybucji do wydania, jak pokazano na obrazku:

wprowadź opis obrazu tutaj wprowadź opis obrazu tutaj

Ruben
źródło
Cześć, w Możliwościach nie dostaję Możliwości> Ustaw powiadomienie PUSH
Anuj
@Anuj, dodałem zrzut ekranu, który powinien znajdować się w twoim Xcode.
Ruben,
5

Jeśli korzystasz ze struktur Firebase i nie korzystasz z powiadomień push, istnieją dwa rozwiązania: 1. po prostu pogódź się z komunikatem „problem”, który jest wysyłany do całego zespołu za każdym razem, gdy przesyłasz plik binarny. Aplikacja będzie nadal akceptowana jako zgłoszenie, o ile w rzeczywistości nie używasz powiadomień, możesz zignorować ostrzeżenie. lub 2. zrób to: https://stackoverflow.com/a/46802075/7529450 . Spowoduje to usunięcie irytującego powiadomienia e-mail, a także zostanie zaakceptowane jako zgłoszenie.

Aaron Halvorsen
źródło
4

Automatyczne zarządzanie podpisywaniem było dla mnie wyłączone

Automatyczne zarządzanie podpisywaniem było dla mnie wyłączone, sprawdziłem i działa dobrze.

Shemeer M Ali
źródło
3

Włączono korzystanie z powiadomień push Xcode 9.

Próbowałem wyłączyć / ponownie włączyć funkcje powiadomień push . (nie działało)

Próbowałem wyłączyć / ponownie włączyć Automatycznie zarządzaj podpisywaniem . (nie działało)

Okazuje się, że musiałem usunąć i ponownie dodać moje profile obsługi administracyjnej. ( zobacz tutaj, jak to zrobić ) Może być konieczne wyłączenie / ponowne włączenie Automatycznie zarządzaj podpisywaniem po oddziałach.

Aldracor
źródło
2

U mnie problem polegał na tym, że były dwa pliki uprawnień: Entitlements-Debug.plisti Entitlements-Release.plist. I tylko jeden z nich (Debug) ma potrzebne ustawienia.

Zmiana wielu wartości opcji Ustawienia kompilacji> Podpisywanie> Uprawnienia do podpisywania kodu na jeden, MyAppName/MyAppName.entitlementsa następnie ponowne włączenie możliwości> Przełącznik powiadomień push załatwił sprawę .

Mam nadzieję, że to pomoże.

Alexander Zinchuk
źródło
0

Jeszcze jedna opcja, która zadziałała: kopiowanie i wklejanie źródła AppName/Entitlements-Debug.plistdo AppName/Entitlements-Release.plist.

Alexander Zinchuk
źródło