Błąd walidacji: nieprawidłowy pakiet. Pakiet w… zawiera niedozwolony plik „Frameworks”

165

Próbuję przesłać aplikację za pomocą Xcode6 GM i otrzymuję ten błąd podczas weryfikacji. Aplikacja ma rozszerzenie akcji i dynamiczną strukturę współdzieloną przez rozszerzenie i samą aplikację.

Nigdzie w projekcie nie mam pliku o nazwie „Frameworks”, więc naprawdę nie jestem pewien, co to ma znaczyć. Czy ktoś wpadł na ten problem lub ma jakieś pomysły?oto jak wygląda błąd

Mikrofon
źródło
A co z folderem o nazwie Frameworks?
borrrden
W projekcie istnieje „grupa” o nazwie Frameworks, ale nie ma folderu. Usunąłem go, ponownie zarchiwizowałem i nadal pojawia się ten sam błąd.
Mike,

Odpowiedzi:

308

Okazuje się, że błąd jest związany z używaniem Swift (zarówno aplikacja, jak i rozszerzenie korzystają z Swift).

W przypadku aplikacji musiałem ustawić:

Embedded Content Contains Swift Code: YES

a na rozszerzenie:

Embedded Content Contains Swift Code: NO

Xcode 8 i 9

Wygląda na to, że Always Embed Swift Standard Librariesw Xcode 8 i 9 zmieniono nazwę na . Tak więc w przypadku aplikacji:

Always Embed Swift Standard Libraries: YES

a na rozszerzenie:

Always Embed Swift Standard Libraries: NO
Mikrofon
źródło
7
Jesteś moim zbawicielem. „Osadzony” oznacza rozszerzenie w pakiecie, a ponieważ rozszerzenie nie zawiera większej liczby rozszerzeń, nie zawiera szybkiego kodu.
Chris Truman
2
To nie rozwiązało problemu. Używam też CocoaPods. Czy ktoś widział problemy z tym związane? Jakieś inne pomysły?
timschmitz
8
Nie zapomnij o rozszerzeniach WatchKit, aby upewnić się, że ścieżka wyszukiwania Runpath ma@executable_path/../../Frameworks
Mr Rogers
1
@MrRogers To właśnie rozwiązało mój problem po wykonaniu odpowiedzi. Mam aplikację objC z szybkim zegarkiem. Działałby dobrze bez ustawiania osadzonej zawartości, jednak Apple został odrzucony. Prawidłowe ustawienie osadzonej treści spowodowało uszkodzenie aplikacji. Ta ścieżka wyszukiwania jest tym, co go naprawiło.
Beau Nouvelle
1
To nie zadziałało dla mnie, musiałem zrobić coś innego i byłem na rozszerzeniu Target, które ma problem. Skasowałem skrypt na "[CP * Embed Pods Frameworks" po tym Działa poprawnie !!
A. Trejo
122

Jedynym rozwiązaniem, które zadziałało, było dodanie tego skryptu uruchamiania do celu rozszerzenia aplikacji:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

wprowadź opis obrazu tutaj Źródło: https://github.com/CocoaPods/CocoaPods/issues/4203

rzymski
źródło
7
Moja aplikacja nie korzysta ze Swift, więc była to jedyna poprawka, która również zadziałała.
Dan Loughney
6
Warto wspomnieć, że należy to dodać tylko do rozszerzenia, a nie do głównego celu.
theDuncs
3
To rzeczywiście rozwiązuje problem, ale daje inny problem, który polega na tym, że nie mogę uruchomić mojej aplikacji na symulatorze ani na moim urządzeniu. Daje błąd: dyld: Library not loaded: ... Image not foundktoś może mi pomóc?
Subkhan Sarif,
4
Czy to tylko ja, czy to rodzaj szaleństwa?
bkbeachlabs
1
Naprawiono sprawdzanie poprawności .ipa, ale zawieszanie się podczas instalacji z komunikatem o błędzie: dyld: Biblioteka nie załadowana: @ rpath / AFNetworking.framework / AFNetworking Odniesienie z: / var / container / Bundle / Application / .... Powód: nie znaleziono obrazu
Aleem
45

Więc 3 kroki, aby to naprawić z ustawień kompilacji

  1. Aplikacja kontenera: Embedded Content Contains Swift Code: YES
  2. Rozbudowa: Embedded Content Contains Swift Code: NO
  3. Rozszerzenie: Runpath Search Path = @executable_path/../../Frameworks
Vincent Song
źródło
2
Kontener a rozszerzenie, jestem nowy w Xcode. gdzie to jest, są przedłużone strąki kakao? albo gdzie te dwie rzeczy się znajdują?
Serge Pedroza
16

W moim przypadku właśnie zaktualizowałem do CocoaPods 1.0.1 i wygląda na to, że jest to nowy błąd.

Aktualizacja Pod dodaje skrypt uruchamiania do celu mojego rozszerzenia, który tworzy folder Frameworks. Znalazłem go, gdy zamierzałem dodać skrypt uruchamiania @ Roman, aby go usunąć.

Rozwiązaniem było usunięcie tego skryptu z fazy kompilacji mojego rozszerzenia. Oto ten, który musiał iść ...

wprowadź opis obrazu tutaj

Dan Loughney
źródło
7
Rozwiązałem to za mnie! Po raz kolejny to CocoaPods kosztuje mnie ponad godzinę, próbując dowiedzieć się, co jest nie tak. Mam poważny stosunek miłości i nienawiści do tego produktu.
fguchelaar
2
Uaktualnienie Cocoapods, aby 1.1.0.rc.2rozwiązać problem za mnie.
Otávio
1
Usunięcie struktur Embed Pods w ramach faz budowania rozszerzenia klawiatury zadziałało! Używam Xcode 8 i CocoaPods v1.0.1. Dzięki!
Storm Factory,
13

Usuń każdą fazę budowy dla twojego rozszerzenia, które ma embedsłowo w tytule.

Do tego:

  • Osadzona zawartość zawierająca kod Swift musi być ustawiona Yesna cel rozszerzenia.
Bartłomiej Semańczyk
źródło
11

Żadna z powyższych odpowiedzi nie zadziałała dla mnie. To dlatego, że błąd nie został spowodowany przez aplikację nadrzędną ani jej rozszerzenie. Raczej jedna z powiązanych bibliotek była winna.

Aby potwierdzić, najpierw zarchiwizuj za pomocą Xcode, a następnie za pomocą Organizatora wybierz wpis i zlokalizuj za pomocą Pokaż w Finderze. Spowoduje to wyświetlenie .xcarchivepliku.

Wybierz ten plik i wybierz „Pokaż zawartość pakietu”.

Wybierz .app w folderze Produkty / Aplikacje i ponownie wybierz „Pokaż zawartość pakietu”.

Zlokalizuj nieprawidłowy moduł w folderze Frameworks. Na przykład, jeśli błąd to:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

Wtedy Frameworks/MyLib.frameworkprawdopodobnie będzie widoczny:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

Są one obecne, ponieważ połączona biblioteka - lub moduł - który zawiera aplikacja nadrzędna ma rozszerzenie EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

Zlokalizuj moduł zależny w Xcode i zaktualizuj flagę:

wprowadź opis obrazu tutaj

Pamiętaj, że po rozwiązaniu tego problemu aplikacja może nadal zostać odrzucona z e-mailem z wyjaśnieniem ze sklepu iTunes Store:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

To znowu wraca do EMBEDDED_CONTENT_CONTAINS_SWIFTflagi. Upewnij się, że tylko aplikacja nadrzędna ma to ustawienie YES. Zarówno aplikacja WatchKit, jak i rozszerzenie muszą mieć tę flagę ustawioną na NO. Jest to szczegółowo opisane w odpowiedzi @ Mike'a powyżej.

Max MacLeod
źródło
10

W moim przypadku była jedna biblioteka CocoaPod „Blockly”, która określała wartość Yes dla „Always Embed Swift Standard Libraries”. Po zrobieniu NIE dla opcji zadziałało.wprowadź opis obrazu tutaj

suztomo
źródło
9

W moim przypadku rozwiązaniem było usunięcie mojego frameworka z wbudowanych plików binarnych mojego rozszerzenia i dodanie go do połączonych struktur i bibliotek mojego rozszerzenia. (Oba można znaleźć na karcie Ogólne rozszerzenia).

Pim
źródło
7

Jeśli skrypt Embed Pods Frameworks i skrypt Romana istnieją w tym samym miejscu docelowym.

Sprawdź, czy ramy Embed Pods znajdują się przed innymi. Jeśli nie, po prostu przenieś skrypt Romana na ostatnią.

Reeonce Zeng
źródło
jesteś niesamowity @Reeonce Zeng, ocal mój dzień!
mgyky
Powinienem zachować tam oba skrypty, czy tylko ostatnią część? "$ {SRCROOT} / Pods / Target Support Files / Pods-Orsys WatchKit Extension / Pods-Orsys WatchKit Extension-frameworks.sh" cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if "[[-d" Framework] ]; następnie rm -fr Frameworks fi
@stack, należy dodać nową fazę skryptu uruchamiania i wypełnić: `cd" $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} / "if [[-d" Frameworks "]]; następnie rm -fr Frameworks fi `
Reeonce Zeng
co masz na myśli, mówiąc o uruchomieniu nowego skryptu? mamy już tam skrypt. dobrze ? zastępując stary skrypt, powinienem raz uruchomić projekt z zamianą tekstu. CZY muszę tam wybrać opcję „uruchom skrypt podczas instalowania programu”?
proszę, pomóż mi trochę więcej. Wystąpił błąd dotyczący rozszerzenia wathckit. W moim projekcie rozszerzenia Watchkit nie ma opcji / menu / zakładki „napraw appex zawiera niedozwolone ...” w moich projektach. gdzie mogę to znaleźć? Mam tylko „Embed pod framework” i „copy pod framework”. Proszę pomóż.
6

Nie mogłem znaleźć żadnych ustawień dla, Embedded Content Contains Swift Codeale udało mi się znaleźć ustawienie Always Embed Swift Standard Librariesi ustawienie go na NIE dla mojej platformy rozwiązało ten problem.

Gujamin
źródło
4
  1. Aplikacja kontenera: Ustawienie kompilacji -> Osadzona treść zawiera kod Swift: TAK
  2. Rozszerzenie: ustawienie kompilacji -> Osadzona zawartość zawiera kod Swift: NIE
  3. Rozszerzenie: Faza kompilacji -> dodano następujący skrypt uruchamiania w programie

cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; następnie rm -fr Frameworks fi

  1. (ważne) Rozszerzenie: Faza kompilacji -> przenieś skrypt uruchamiania na koniec (po skrypcie Embed Pods Frameworks)
Yongxiang Ruan
źródło
„To the Last” było dla mnie ważnym utworem, dzięki.
Andy Obusek
3

Jeśli używasz CocoaPods, rozważyłbym usunięcie fazy budowania frameworków osadzania w problematycznym celu (rozszerzenie), to rozwiązało problem.

Kurt J
źródło
2

Otrzymywałem ten sam błąd, ponieważ kopiowałem framework do pakietu rozszerzeń. Jak się okazuje, frameworki używane przez rozszerzenie powinny zostać skopiowane do pakietu aplikacji głównej i połączone tylko w ustawieniach kompilacji rozszerzenia (nie kopiowane). Upewnij się, że w kompilacji rozszerzenia znajduje się ścieżka wyszukiwania „@executable_path /../../ Frameworks”. Myślę, że ta ścieżka została dodana automatycznie przez XCode 10.

Zatman
źródło
1

Znalazłem wiele takich pytań i żadne nie pomogło mi rozwiązać mojego problemu, więc mam nadzieję, że może to komuś pomóc.

Tworzę aplikację, która ma rozszerzenie Intent (dla skrótów Siri) i używam struktury dla kodu współdzielonego między rozszerzeniem a moją aplikacją, zgodnie z zaleceniami Apple.

Dodałem mój framework do mojego rozszerzenia w sekcji „Struktury i biblioteki” w ustawieniach „Ogólne” celu. Kiedy dodajesz tutaj strukturę, są dwie kolumny. Jeden podaje nazwę frameworka, a drugi nosi tytuł „Osadź”. Nic nie pojawiało się w kolumnie „Umieść”, więc pomyślałem, że to w porządku, ale musiałem wyraźnie wybrać opcję „Nie umieszczaj” dla tej kolumny dla mojego frameworka. Kiedy to zrobiłem i zarchiwizowałem w Xcode, mogłem zobaczyć podczas walidacji, że framework nie był już wymieniony w mojej zawartości ipa pod każdym celem, ale tylko raz, i walidacja ostatecznie się powiodła.

Belle B. Cooper
źródło
0

Miałem ten problem po raz pierwszy z XCode 7.1.1 dla mojej aplikacji, która ma rozszerzenie Today (w moim projekcie nie ma Swift). Skrypt ( https://github.com/CocoaPods/CocoaPods/issues/4203 ) nie działał dla mnie.

Obniżenie cocoapods do wersji 0.39.0.beta.3, uruchomienie pod install, a następnie ponowna archiwizacja rozwiązało problem.

andreacipriani
źródło
0

Otrzymałem ten sam błąd wraz z rozszerzeniem

Niedozwolony błąd zagnieżdżonych pakietów

Mój problem dotyczył SquareReaderSDK.frameworkkonkretnie, ale musiałem dodać nowy skrypt uruchamiania zgodnie z ich instrukcjami:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"
Szczery
źródło
0

Żadne z wymienionych tutaj ustawień kompilacji nie rozwiązało tego problemu. Jednak udało mi się to zadziałać po przeniesieniu niektórych frameworków z „wbudowanych plików binarnych” do „połączonych struktur i bibliotek”.

Wygląda na to, że moja główna aplikacja i jedna z moich niestandardowych platform miały tę samą zależność w obu platformach i wydaje się, że jest to odpowiedź Nie, ale przeniesienie jej w mojej głównej aplikacji z obszaru osadzonego do obszaru połączonego umożliwiło mi pomyślne przesłanie aplikacji za pomocą bez błędów.

Travis M.
źródło