Nieoczekiwany klucz CFBundleExecutable


98

Po jakimś czasie googlowania coś mi mówi, że problem jest nowy.

Mieliśmy w pełni funkcjonalny projekt wspierający iOS7-8. Oczywiście został on wielokrotnie pomyślnie przesłany do AppStore.

Używamy podów, wielu śledzenia i monitorowania, takich jak GA i Instabug.

Teraz zdecydowaliśmy się przesłać do TestFlight wersję aplikacji opartą na Xcode 7 na iOS 9.

Wyłączyliśmy kod bitcode, ponieważ wiele podów, takich jak Flurry i inne wstępnie zbudowane biblioteki, nie zawiera go.

Kompilacja przebiegła pomyślnie, po przesłaniu do iTunesConnect otrzymujemy to: wprowadź opis obrazu tutaj

Mieliśmy to samo dla biblioteki GoogleAppIndexing (również w podach), ale usunęliśmy ją, aby działała. Teraz - Instabug. To idzie za daleko, więc staram się zrozumieć, co się dzieje w iOS 9 i jakie zmiany sprawiły, że w pełni działający projekt zaczął rzucać takie błędy.

Wszelkie myśli i pomysły są mile widziane! Podziel się proszę swoimi doświadczeniami, a jeśli coś przeoczyłem, chętnie podzielę się swoimi krokami.


2
Czy rozwiązałeś ten problem? Ja też mam do czynienia z tym problemem, ale to GoogleMaps.bundle ...
Johnny

1
Nie, jeszcze nie. Wygląda na to, że to ogólny problem.
Dumoko

To naprawdę irytujące :(, zapytałem na forum programistów Apple, zobacz, czy ktoś inny ma ten problem. Forums.developer.apple.com/message/42851#42851
Johnny

Widzimy to również w nowej integracji ze Startapp. Również iOS 9 i Xcode 7 beta 5.
Trey Bean

2
Moataz z Instabug tutaj. Czy możesz zamienić pakiet Instabug.bundle na ten dropbox.com/s/37zwhaqzatfnz3n/Instabug.bundle.zip?dl=0 , daj mi znać, jak to idzie
Moataz Soliman

Odpowiedzi:


112

Napotkałem dziś ten sam problem z tym samym dokładnym komunikatem o błędzie podczas próby przesłania naszej aplikacji (przy użyciu Xcode 7 beta 5), ​​ale zamiast instabug.bundletego był to dla mnie TencentOpenApi_IOS_Bundle.bundle.

Rozwiązałem problem, znajdując nazwany pakiet w projekcie, a następnie - tak jak sugeruje komunikat o błędzie - edytowałem ten, Info.plistktóry jest w pakiecie, usuwając CFBundleExecutableklucz. CFBundlePackageTypeKlucz został już ustawiony BNDL, więc nie dotykać.

Po tych zmianach zrobiłem Produkt> Wyczyść i nie miałem problemu z przesłaniem aplikacji do App Store.

Mam nadzieję, że to pomoże.


2
Dziękuję za podzielenie się swoimi doświadczeniami! Więc to jest problem autora biblioteki. Ale my, programiści, nie powinniśmy robić tych sztuczek ... Na przykład używam strąków i systemu CI. Nie mogę przejść do CI i za każdym razem po instalacji poda wykonaj tę ręczną zmianę. Ale przynajmniej sprawimy, że będzie działać. Na razie szukam generycznego rozwiązania. Jeśli to nie nadejdzie szybko, zaznaczę twoją odpowiedź jako tę, która pomoże. Jeszcze raz dziękuję!
Dumoko

Nie mogę tego zrobić. Jeśli próbuję otworzyć info.plist wewnątrz poda w Xcode, powiedział mi, że plik jest zablokowany i zmiany nie zostaną zapisane (i tak się nie dzieje). Jeśli używam zewnętrznego edytora tekstu, widzę, że zawartość pliku plist jest w jakiś sposób zakodowana, nie jest to zwykły tekst.
Mike Keskinov

@MikeKeskinov, czy ten link może być pomocny: [ apple.stackexchange.com/questions/68646/… ? Sugeruje znalezienie info.plist w Finderze i edycję uprawnień pliku, aby umożliwić edycję go w Xcode.
Sleiman

Ja też miałem podobny problem i zgłosiłem się do Apple. Twoje kroki są absolutnie poprawne, zgodnie z sugestią Apple. bugreport.apple.com/problem/viewproblem
Avinash,

Napisałem skrypt powłoki, aby usunąć to jako obejście. Dodajesz
Ying

52

Napotkałem to AviarySDKna Xcode 7 GM podczas przesyłania do App Store.

Najpierw sprawdzę, czy korzystasz z najnowszej wersji swojej biblioteki - sprzedawca mógł już to naprawić. Jeśli jednak nadal masz ten problem, jak opisuje Sleiman, musisz usunąć CFBundleExecutableklucz z pliku plist dla problematycznej biblioteki.

Cmd + Shift + O i wpisz „Info.plist”, wtedy możesz znaleźć odpowiedni plik:

wprowadź opis obrazu tutaj

Po edycji CFBundleExecutablepliku plist możesz zobaczyć opisowe nazwy (zamiast i innych kluczy. Nie mogłem edytować tego pliku w zewnętrznym edytorze, więc musiałem przełączyć się na wyświetlanie surowych kluczy / wartości, klikając prawym przyciskiem myszy listę):

wprowadź opis obrazu tutaj

Teraz możesz zobaczyć CFBundleExecutableklucz (z opisem „Plik wykonywalny”), który możesz usunąć.

W przypadku AviarySDK zrobiłem to dwukrotnie, raz dla każdego Info.plistwidocznego na powyższym obrazku, a następnie udało mi się pomyślnie przesłać.


Czy wiesz, jakie są tego skutki uboczne? Mam ten sam problem z pakietem Polljoy. Czy uważasz, że wpis jest błędnie umieszczony w plistie?
Stoff81

1
„Xcode automatycznie dodaje ten klucz do pliku listy właściwości informacji odpowiednich projektów”. Przykro mi, że nie mogę powiedzieć Ci efektów ubocznych, ale podejrzewam, że jest to spowodowane użyciem starszej biblioteki, która nie była dystrybuowana z obsługą Frameworks, a następnie Xcode próbuje traktować to tak samo, jak tę, która ma wsparcie dla ram.
Adam S

Niestety w przypadku niektórych bibliotek (np. AppIndexing itp.) Zawartość pliku plist wydaje się być zaszyfrowana. Umożliwia przeglądanie, ale nie zapisuje żadnych zmian. Podczas próby otwarcia pliku poza XCode jasne jest, że plik jest zaszyfrowany (bez zwykłego tekstu).
Mike Keskinov

zadziałało to przy logowaniu się do Google i pozwoliło mi przesłać do App Store
James

2
Właśnie napotkałem ten sam problem z Aviary i Cocoapods 0.39. Twoja sugerowana poprawka wydaje się działać. Wygląda na to, że nadszedł czas, aby ugryźć kulę i przejść na AdobeCreativeSDK :(
Keab42

11

Rozwiązuję ten problem w następujący sposób: Musimy usunąć wszystkie „pliki wykonywalne” z następujących pakietów:

  • GooglePlus.bundle
  • GPPCommonSharedResources.bundle
  • GPPShareboxSharedResources.bundle

Upewnij się, że „Kod typu pakietu” jest równy BNDL

Ważne: nie edytuj niczego w głównym projekcie info.plist.

Załączone ekrany, jak powinny być jego "info.plist" wymienione powyżej każdego pakietu.

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj

wprowadź opis obrazu tutaj



5

Jeśli kompilacja zostanie przesłana za pomocą Less than (<) Xcode 7.0 , zostanie przesłana, a także rozwiązałem to w następujący sposób dla Xcode 7 :

Wyszukane info.plistw projektach Project Navigator jak na poniższym obrazku:

wprowadź opis obrazu tutaj

Teraz otworzył te info.plistpliki jeden po drugim i usunął BundleExecutableklucz Z WYJĄTKIEM celuinfo.plist

Teraz wyczyszczono projekt, osiągnięto go i przesłano go bez problemu.


4

Miałem ten sam problem w bibliotece Map Google i usunąłem CFBundleExecutableklucz wewnątrz GMSCoreResources.bundle( Info.plist), który jest czystym projektem pakietu SDK info.plist i załaduj go do Appstore.

Miłego programowania.

wprowadź opis obrazu tutaj


1

Po prostu sprawdź Ustawienia kompilacji => Włącz Bitcode i ustaw NIE


0

Jedna dodatkowa uwaga: czasami, jeśli masz dodatkowe cele, będą dostępne właściwości celu, które mogą również zawierać klucz (w sekcji „Informacje”), więc upewnij się, że je sprawdziłeś i stamtąd też go usuń. Odkryłem to w jednym z pakietów, które próbowałem dołączyć. Usunąłem informacje z plist, ale nadal otrzymywałem błąd.


0

Jeśli widzisz ten błąd w bibliotece zainstalowanej za pośrednictwem CocoaPods, wypróbuj plik pod update <OFFENDING POD NAME>

To rozwiązało problem.


0

Właśnie dodałem słowo "BNDL" w odpowiednim miejscu w plist"Kodzie typu systemu operacyjnego twórcy pakietu".

To był problem


0

W moim przypadku po prostu przeciągam i upuszczam plik dołączony do SDKfolderu In info.plist, który nie jest używany. To tworzy dla mnie problem. Znajdź nieużywany info.plistplik i usuń go z kodu źródłowego.

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.