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?
ios
xcode
app-store-connect
Mikrofon
źródło
źródło
Odpowiedzi:
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ć:
a na rozszerzenie:
Xcode 8 i 9
Wygląda na to, że
Always Embed Swift Standard Libraries
w Xcode 8 i 9 zmieniono nazwę na . Tak więc w przypadku aplikacji:a na rozszerzenie:
źródło
@executable_path/../../Frameworks
Jedynym rozwiązaniem, które zadziałało, było dodanie tego skryptu uruchamiania do celu rozszerzenia aplikacji:
Źródło: https://github.com/CocoaPods/CocoaPods/issues/4203
źródło
dyld: Library not loaded: ... Image not found
ktoś może mi pomóc?Więc 3 kroki, aby to naprawić z ustawień kompilacji
Embedded Content Contains Swift Code: YES
Embedded Content Contains Swift Code: NO
@executable_path/../../Frameworks
źródło
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ść ...
źródło
1.1.0.rc.2
rozwiązać problem za mnie.Usuń każdą fazę budowy dla twojego rozszerzenia, które ma
embed
słowo w tytule.Do tego:
Yes
na cel rozszerzenia.źródło
Ż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
.xcarchive
pliku.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:
Wtedy
Frameworks/MyLib.framework
prawdopodobnie będzie widoczny: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ę:
Pamiętaj, że po rozwiązaniu tego problemu aplikacja może nadal zostać odrzucona z e-mailem z wyjaśnieniem ze sklepu iTunes Store:
To znowu wraca do
EMBEDDED_CONTENT_CONTAINS_SWIFT
flagi. Upewnij się, że tylko aplikacja nadrzędna ma to ustawienieYES
. Zarówno aplikacja WatchKit, jak i rozszerzenie muszą mieć tę flagę ustawioną naNO
. Jest to szczegółowo opisane w odpowiedzi @ Mike'a powyżej.źródło
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.
źródło
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).
źródło
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ą.
źródło
Nie mogłem znaleźć żadnych ustawień dla,
Embedded Content Contains Swift Code
ale udało mi się znaleźć ustawienieAlways Embed Swift Standard Libraries
i ustawienie go na NIE dla mojej platformy rozwiązało ten problem.źródło
cd "$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /" if [[-d "Frameworks"]]; następnie rm -fr Frameworks fi
źródło
Jeśli używasz CocoaPods, rozważyłbym usunięcie fazy budowania frameworków osadzania w problematycznym celu (rozszerzenie), to rozwiązało problem.
źródło
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.
źródło
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.
źródło
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.źródło
Otrzymałem ten sam błąd wraz z rozszerzeniem
Mój problem dotyczył
SquareReaderSDK.framework
konkretnie, ale musiałem dodać nowy skrypt uruchamiania zgodnie z ich instrukcjami:źródło
Ż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.
źródło