2012-09-28 7 views
9

Mam aplikację ARC (), która buduje bibliotekę statyczną (również ARC). Aplikacja uruchomi w porządku, ale gdy wykonywana jest operacja, którą odczytuje lub zapisuje do @property w bibliotece statyczne aplikacja awarii z tego błędu:Aplikacja ARC Występuje awarie podczas uzyskiwania dostępu do usługi @ formate ARC static lib

dyld: lazy symbol binding failed: Symbol not found: _objc_setProperty_nonatomic 
 Referenced from: /var/mobile/Applications/0E7ADBB4-FFE5-4CEB-B418-8A35A92E99D4/MyApp.app/MyApp 
 Expected in: /usr/lib/libobjc.A.dylib 

dyld: Symbol not found: _objc_setProperty_nonatomic 
 Referenced from: /var/mobile/Applications/0E7ADBB4-FFE5-4CEB-B418-8A35A92E99D4/MyApp.app/MyApp 
 Expected in: /usr/lib/libobjc.A.dylib 

Wszelkie porady chodziło o łączenie bibliotek non-ARC do aplikacji ARC (lub odwrotnie). Ale są to zarówno ARC.

Odpowiedz

32

Aplikacja na Base SDK został ustawiony na iOS 6 i iOS Deployment Target został ustawiony na iOS 5.0 jednak dla biblioteki statycznej zarówno Base SDK & iOS Deployment Target były ustawione na iOS 6.

Making czy Base SDK & iOS Deployment Target dopasowane w aplikacji i biblioteka rozwiązała ten problem.

+1

Dobra uwaga dotycząca dopasowania wszystkich części. Jeśli nie planujesz obsługiwać funkcji iOS 6, gdy są dostępne (i musisz wziąć na siebie duże bóle testowe oraz wymagany dodatkowy kod wykrywania obiektów), zalecam również ustawienie Base SDK i iOS Deployment Target na to samo (w tym przypadku iOS 5). Pomimo oficjalnego oświadczenia Apple, że zawsze powinieneś łączyć się z najnowszym SDK, zespół Xcode na WWDC zgodził się, że to podejście jest bardzo delikatne, ponieważ kompilator nie daje ostrzeżeń, gdy używasz nieobsługiwanych funkcji niepoprawnie. –

+0

super - jeden z moich wielu statycznych bibliotek miał ten problem - naprawił to teraz - dziękuję. – Ramesh

+0

Jak zmienić "Bazowy SDK" i "Cel wdrożenia iOS" dla biblioteki statycznej? – fredley