2014-09-17 17 views
6

TL; DRCzy flaga -ObjC może być selektywnie stosowana do bibliotek statycznych?

Jak mogę dokonać łącznik flag -ObjC ukierunkowana na konkretną bibliotekę statyczną i nie wszystko statyczne biblioteki Jestem łączące przed, w celu uniknięcia niepotrzebnych plików z obiektów są połączone w moim app?


Zbyt długo; Czytałem

Tworzysz nową aplikację na iOS i dodajesz własną bibliotekę statyczną "objcutil", która zawiera wiele użytecznych klas Objective-C (nie zaimplementowanych jako kategorie) do robienia różnych rzeczy, które były przydatne w przeszłości. Do tej pory, tak dobrze, i tylko te pliki obiektów, które są przywoływane w bibliotece narzędzi, są połączone z aplikacją.

Potem zdecydujesz się zintegrować Google Maps SDK który chce, aby korzystać z -ObjCinne flagi Linker i nagle zależnościami w bibliotece użytkowego nie zostać rozwiązany, bo nie skonfigurowano Xcode do odwołują się do tych bibliotek .

OK Mogę łatwo rozwiązać brakujące zależności, ale teraz masz nieużywane pliki obiektów i zależności bibliotek, których nie potrzebujesz i chcesz być trochę bardziej porządny.

Jak uniknąć przeciążenia OCD?


Niektóre odniesienia z ld manpage:

-ObjC Obciążenia wszyscy członkowie statycznych bibliotek archiwalnych, które definiują sposób obiektywny klasy C lub kategorię. Ta opcja nie dotyczy bibliotek współużytkowanych .


  • Xcode Wersja: 5.1.1
  • OSX Wersja: 10.9.4

Odpowiedz

4

OK więc odpowiedź jest użycie -force_load zamiast -ObjC jak -force_load jest bardziej skoncentrowany.

Więc WRT do Google Maps SDK, jeśli postępujesz zgodnie z instrukcjami i kopiowane statycznej ram do katalogu app projektu, to ramy będą w głównym katalogu projektu i można usunąć-ObjC z Inne Linker flagi i zastąpić go

-force_load GoogleMaps.framework/Versions/Current/GoogleMaps:

enter image description here

Nic innego nie wymaga wymiany.

W przypadku innych bibliotek należy użyć pełnej ścieżki biblioteki statycznej jako argumentu dla -force_load.