2015-02-27 9 views
5

Stworzyłem niestandardową strukturę Objective-C. Chciałbym zaimportować go do dowolnego projektu iOS i użyć jego funkcji zarówno na symulatorze systemu iOS, jak i na rzeczywistym urządzeniu. Aby zaimportować szkielet, łączę go za pomocą ustawienia Fazy kompilacji> Łącz binarne z bibliotekami w aplikacji docelowej. Jestem wtedy w stanie zaimportować go do jednej z moich klas z tym stwierdzeniem:Błąd Xcode 6 - "Brakująca wymagana architektura i386" podczas tworzenia symulatora systemu iOS

#import <CustomFramework/CustomFramework.h> 

mogę instancję klasy mojego ramowa za dobrze, ale gdy próbuję uruchomić mój projekt na urządzeniu, pojawia się następujący błąd komunikat:

dyld: Library not loaded: @rpath/CustomFramework.framework/CustomFramework 
Referenced from: /var/mobile/Applications/A61E882D-481A-4C0B-B4FD-69F5D24968BF/TestApp.app/TestApp 
Reason: image not found 

a jeśli próbuję uruchomić go na symulatorze, mam inny komunikat o błędzie:

ld: warning: ignoring file /Users/user/Desktop/CustomFramework.framework/CustomFramework, missing required architecture i386 in file /Users/user/Desktop/CustomFramework.framework/CustomFramework (2 slices) 
Undefined symbols for architecture i386: 
    "_OBJC_CLASS_$_CustomFramework", referenced from: 
     objc-class-ref in AppDelegate.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

Dzieje się tak, gdy wystąpienia klasy z ram. Jeśli zaimportuję strukturę, ale w rzeczywistości jej nie używam, moja aplikacja zostanie pomyślnie zbudowana. To po prostu błędy, gdy z jakiegoś powodu tworzę instancję klasy z frameworka.

Aby zainstalować aplikację na urządzeniu, podążyłem za odpowiedzią this SO. Zamiast łączyć framework, dodałem nową fazę Copy Files w ustawieniu docelowym: Build Phases, ustaw Destination to Framework i dodałem moją frameworku.

To działa świetnie; jednak chciałbym przetestować również moją aplikację na Symulator iOS. Kiedy próbuję uruchomić moją aplikację na symulatorze, nadal pojawia się błąd "brakuje wymaganej architektury i386". Próbowałem rozwiązania zaproponowane w prawie każdym tematem SO można znaleźć, i nic nie pomógł mi rozwiązać ten problem.

Proszę zauważyć, że próbuję użyć mojego niestandardowego frameworka w nowym projekcie Xcode, więc żadne ustawienia aplikacji/kompilacji nie zostały zmienione z domyślnych.

Jak mogę naprawić ten błąd, aby uruchomić aplikację na Symulator iOS i urządzenie z ramą dołączoną do projektu? Każdy wgląd byłby bardzo doceniony!

Odpowiedz

5

Problem polegał na tym, że framework nie został skompilowany dla architektury Symulatora iOS, która jest i386. Xcode kompiluje tylko framework architektury docelowej, więc jeśli zbudowałem framework dla Symulatora iOS, nie działałby on na urządzeniu, a jeśli zbudowałem framework dla urządzenia, nie działałby on na symulatorze systemu iOS.

tworzę ramy od podstaw z pomocą tego poradnika: http://www.raywenderlich.com/65964/create-a-framework-for-ios

multi-architektura skrypt kompilacji jest co pozwoliło moja ramy uruchomić zarówno na iOS Simulator a urządzeniem.

+2

Dziękuję za odpowiedź! Nadal niedorzeczne jest to, że aż do 2015 roku nadal musimy uciekać się do ręcznego budowania, aby uzyskać przyzwoite ramy (samouczek jest podobny, 10 stron ?!). Wstydź się, Apple! – Rick77

+1

@ Rick77 Cieszę się, że mogę Ci pomóc! Całkowicie się zgadzam.Rozwijam także aplikacje dla Windows i Windows Phone, i nawet nie musiałem o tym myśleć na tych platformach. – Alexander

+0

@Alexander Mój framework nie został skompilowany dla architektury Symulatora iOS. Obsługuje tylko urządzenie, Jak sprawić, aby moja struktura działała w Symulatorze. Korzystam z Ramy . – Arun

0

Napotkałem ten sam problem z Xcode 7.1 podczas próby zbudowania symulatora. Ktoś inny powiedział, że zadziałało dla nich pod Xcode 8.2.1, więc próbowałem budować/biegać tam i działało. Nie musiałem zmieniać celów ani niczego w moim projekcie.

Więc spróbuj uaktualnić swój kod Xcode, jeśli możesz, prawdopodobnie otrzymasz również dodatkowe poprawki błędów.

Powiązane problemy