„Zbyt wiele plików symboli” po pomyślnym przesłaniu moich aplikacji


198

Pobrałem Xcode 6 GM i przesłałem dziś dwie aplikacje Swift do App Store. Obaj przeszli wszystkie weryfikacje przed przesłaniem i wszystkie inne rzeczy, które musieli przejść i pomyślnie przesłano. Ale potem dostałem dwa e-maile od Apple ... jeden dla każdego programu i obaj powiedzieli tak:

Drogi deweloperze,

Wykryliśmy co najmniej jeden problem z Twoją ostatnią dostawą dla „xxxxxxxx” (nazwa mojej aplikacji została usunięta). Twoja dostawa zakończyła się powodzeniem, ale możesz chcieć rozwiązać następujące problemy przy następnej dostawie:

Zbyt wiele plików symboli - te symbole nie mają odpowiadającego wycinka w żadnym binarnym [1431D977-72BC-308F-AB71-71529F25400B.symbols, 158C72A7-98AC-3F07-B2BE-88427591B413.symbols, 44973EAC-563E-340C-B549-55A5014A68BA , 678BF06F-0C3D-3A09-BFBF-699C7079FECD.symbols, 90907DDB-0400-38ED-BB5F-0C12333C0624.symbol, 93B79949-5757-374A-97B9-825AE1A61B7D. -4422-32B8-8C40-CF9B45A2CCC6.symbols, B0CC9F7D-C542-3E18-A518-B28B7ECABE80.symbols, BF6A4C3B-6FA5-3C51-8404-19C2F132458D. Symbole -3845-BAD5-F6E51045D396.symbols, D4967AA3-8FB0-3712-B0DE-7F4144AF8F4B.symbols, D813B314-AD37-31D4-B675-442052994495.symbols, DF42A13F-B08-038 FF-B08-038 FF-B08-038 FF-08D8-350 FB B08 -8F7D-C49A36CD5C65.symbols]

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

Pozdrowienia,

Zespół App Store

Zgaduję, że to naprawdę nie ma nic wspólnego ze mną ani z moimi aplikacjami ... a to tylko dziwactwo pierwszego dnia składania aplikacji Swift? Obie aplikacje nadal siedzą w trybie „Oczekiwanie na zatwierdzenie”. Z pewnością nie mogę wymyślić niczego, co mógłbym zmienić, aby to, co powiedzieli, zniknęło! Czy ktoś jeszcze przesłał aplikację Swift i otrzymał tę odpowiedź? Myślisz, że powinienem to zignorować i poczekać, aby zobaczyć, co się stanie?


Mój powiedział, że i Invalid Swift Support. Masz pomysł, dlaczego mogę to dostać? Używam najnowszego Xcode.
Dehli,

ten sam problem tutaj, a moja aplikacja nie może przesłać do sprawdzenia. z powodu tego problemu. ktoś rozwiązany?
yudun1989,

1
ten sam problem tutaj. i tak przesłane do recenzji .. zobaczmy, co się stanie :)
dandoen

Obie moje aplikacje Swift zostały właśnie zatwierdzone do App Store ... więc chyba się nie martwiłem! Uff ... :)
Jim Barber

Odpowiedzi:


127

Dzieje się tak, jeśli dołączasz informacje o debugowaniu bibliotek do archiwum projektu, ale nie zawierasz plików binarnych.

  1. Otwórz okno Organizatora w Xcode
  2. Kliknij prawym przyciskiem myszy archiwum z tym problemem i wybierz „Pokaż w Finderze”.
  3. Kliknij plik archiwum prawym przyciskiem myszy i wybierz „Pokaż zawartość opakowania”
  4. W folderze „dSYMs” zobaczysz kilka plików. Jeśli uruchomisz dwarfdumppolecenie konsoli na tych plikach, otrzymasz listę ciągów UUID:

    dwarfdump -u MyFile.dSYM

Jestem pewien, że znajdziesz kilka pasujących UUID z e-maila Apple.

Aby uniknąć tego ostrzeżenia, musisz dołączyć do archiwum tylko dSYMpliki aplikacji, a nie biblioteki. W tym celu należy zmienić konfigurację kompilacji bibliotek, aby nie generować dSYMpliku. Po prostu wyszukaj w konfiguracji „format informacji debugowania” i zmień go tylko z DWARF with dSYM Filena DWARF.

Na przykład na poniższym zrzucie ekranu znajdziesz szkielet Stripe iOS.

Zrzut ekranu ustawień projektu Xcode


13
dwarfdump -u *w folderze, aby zobaczyć wszystkie UUID
Jon

@ Jon ooooh, dlaczego widzę to po tym, jak zrobiłem jeden po drugim? :) w każdym razie dzięki!
Serj Rubens

6
Czy usunięcie plików dSYM oznacza, że ​​wszelkie awarie związane z osobami trzecimi nie będą już symbolizowane w Crashlytics (lub innym narzędziu do zgłaszania awarii)?
Eugenio

Jeśli jednak używasz firebase \ fabric, do wyświetlenia dzienników awarii w witrynie należy użyć plików dsym. Czy nadal działają z tą zmianą?
Mattia Lancieri

88

Jeśli napotkałeś ten problem podczas korzystania z CocoaPods, dodaj to do swojego Podfile:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['DEBUG_INFORMATION_FORMAT'] = 'dwarf'
        end
    end
end

Ustawi format informacji debugowania na DWARF tylko dla wszystkich celów Pod (nie główny cel aplikacji)


@wzbozon Tak, proszę tylko o podwójne sprawdzenie. Ponieważ po tym, Crashlyticts przestaje działać. Dzięki!
Cesar Rodriguez

Crashlytics powinien kontynuować pracę dla Twojej aplikacji, ponieważ ten skrypt zmienia ustawienia kompilacji tylko dla kapsuł.
Stan

1
Zgadzam się. Ale nie zobaczysz raportów dotyczących strąków. Można również ustawić DWARF z plikiem dSYM tylko dla niektórych strąków, na przykład strąków programistycznych.
Denis Kutlubaev,

@Stan, czy mówisz, że Crashlytics będzie nadal działać? Cesar Rodriguez wydaje się mówić, że to nie zadziała.
airowe

8
To rozwiązało dla mnie. Nie zapomnijpod install
firebear

17

Jeśli korzystasz z CocoaPods, a Twoja aplikacja jest skonfigurowana do korzystania tylko z arm64 (tzn. W info.plist twojego projektu jest tylko arm64)

<key>UIRequiredDeviceCapabilities</key>
<array>
    <string>arm64</string>
</array>

następnie możesz spróbować dodać następujący skrypt do pliku Podfile, aby rozwiązać ten problem.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
      config.build_settings['ARCHS'] = 'arm64'
    end
  end
end

I

ustaw wszystkie cele swoich projektów (nie cele w kapsułach) tylko na arm64

Ustawienia projektu Xcode

Referencje wydania CocoaPods Github


Prawdopodobnie powinieneś teraz dołączyć także arm64e, nie?
shim

Dołączę arm64s do symulatora. Zostanie automatycznie usunięty dla kompilacji wersji.
cybergen

13

Mam ten problem, ponieważ projekt ma poprawną architekturę arm64, w której cele CocoaPods mają prawidłową architekturę arm64, armv7 i armv7s .

Aby sprawdzić, który cel ma prawidłową architekturę, wykonaj następujące kroki

  1. W Xcode -> Okno -> Organizator
  2. Wybierz archiwum i ujawnij w Finderze
  3. W .xcarchive pliku pokaż zawartość pakietu
  4. Otwórz terminal i podaj ścieżkę do folderu dSYMs .

  5. Wpisz polecenie dwarfdump --uuid *, aby wyświetlić listę UUID z poprawnymi architekturami.

Identyfikator UUID będzie zgodny z e-mailem ostrzegawczym Apple

Główny projekt i cel strąków kakaowych mają mieć taką samą prawidłową architekturę. W ten sposób rozwiąże problem.


Myślę, że to najlepiej wyjaśnia, co się dzieje. Mam te ostrzeżenia tylko o bibliotekach z architekturą armv7, ponieważ mój projekt jest zbudowany tylko dla arm64. Pozostaje pytanie, czy powinienem dodać armv7 do projektu, czy usunąć go z kapsuł.
Ariel Bogdziewicz

6

Pracowałem dla mnie, włączając kod bitowy - wcześniej był wyłączony

Włącz kod bitowy - tak

wprowadź opis zdjęcia tutaj


1

Powyższe pomogło rozwiązać problemy, ale nie udało się rozwiązać. Mieliśmy projekt na iOS 12, ale strąki 10 - doprowadziły do ​​wielu plików armv7. Aktualizacja kapsuły do ​​iOS 12 rozwiązana natychmiast.


0

Gdyby ten sam problem został naprawiony, posiadając takie same „Ogólne” => „Informacje o wdrożeniu” => „Cel wdrożenia” dla wszystkich moich celów.


0

W Xcode poszukaj w Ustawieniach kompilacji „Strip Debug Symbole podczas kopiowania” (COPY_PHASE_STRIP). Po włączeniu symbole debugowania są pomijane w aplikacji .app i umieszczane w pliku .dSYM. W przeciwnym razie .app zawiera te symbole. (Domyślnie symbole debugowania są usuwane z kompilacji wersji z powodu zaciemnienia. Prawdopodobnie nie należy zmieniać tego ustawienia w konfiguracji wersji).

Upewnij się, że zaznaczyłeś tę opcję w Ustawieniach kompilacji projektu

https://possiblemobile.com/2015/03/symbolicating-your-ios-crash-reports/


0

Problemem była linia w moim build.xcconfigpliku. Musiałem usunąć

IPHONEOS_DEPLOYMENT_TARGET = 11.0

który ustawiał projekt do budowania tylko dla arm64 (a nie arm7). Podążając za krokami @miOS, zauważyłem, że projekt strąków buduje się dla obu.


1
stackoverflow.com/a/49063850/3293172 iOS 11 zrezygnował z obsługi armv7 i armv7s, więc jest potrzebny tylko arm64, jeśli masz cel wdrożenia> = iOS 11.0.
Ariel Bogdziewicz

-2

Dla mnie wszystko było bardzo proste. Miałem ten sam problem i nie wiedziałem, co robić przez tydzień.

Po przesłaniu zarchiwizowanej aplikacji zobaczysz certyfikat do dystrybucji w małym wyskakującym oknie. Po nim znajduje się pole wyboru, które należy odznaczyć. Następnie prześlesz go i otrzymasz e-mail o plikach symboli. Ale to nie jest problem. To tylko ostrzeżenie; nie błąd! Jeśli usuniesz zaznaczenie tego pola wyboru, aplikacja zostanie wysłana poprawnie. Mam nadzieję, że może ci to pomóc.

Zrzut ekranu pola wyboru i wyskakującego okienka:

Zrzut ekranu pola wyboru i wyskakującego okienka


Naprawdę mam nadzieję, że byłbyś bardziej szczegółowy .... Nie mam pojęcia o jakim polu wyboru lub wyskakującym okienku mówisz. Może zrzut ekranu?
Louis Hong


5
Tak, ale spowoduje to usunięcie wszystkich symboli z paczki i dlatego nie będziesz otrzymywać symbolicznych raportów o awariach? (Czy dostarczają teraz symboliczne raporty o awariach w aplikacjach App Store teraz z TestFlight?)
Markus Rautopuro,

30
To nie jest poprawne rozwiązanie problemu. Pozwala to uniknąć symptomu, nie rozwiązując problemu. Zobacz odpowiedź Michaiła, aby uzyskać opis przesyłania niepotrzebnych symboli. Ta odpowiedź zapobiega przesyłaniu jakichkolwiek symboli, a tym samym przerywa symbolikę awarii przez iTunesConnect
JConway,

2
NIE rób tego, jeśli to zrobisz, nie będziesz mógł analizować swojej aplikacji w App Store pod kątem błędów awarii
user924
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.