Jestem całkiem nowy w xcode i objective-c. Chcę zadać bardzo podstawowe pytanie.
Widziałem, że podczas „łączenia plików binarnych z bibliotekami” w ustawieniach projektu występują różnice dotyczące frameworka i bibliotek, importowanych z innych projektów w obszarze roboczym.
Pierwsze pytanie, dlaczego istnieje framework? A dlaczego jest biblioteka? Czy moja biblioteka nie może być frameworkiem?
A potem, z pliku .h , jak mogę wywołać klasy z mojej zaimportowanej biblioteki statycznej?
Przypuszczam, że musi istnieć przedrostek, ale nie mogłem go znaleźć. Ani „ProjName / Myclass.h” nie działa.
Proszę, bądź tak konkretny, jak tylko potrafisz.
Dzięki
objective-c
xcode4
static-libraries
Leonardo
źródło
źródło
Odpowiedzi:
Największą zaletą frameworka w porównaniu z bibliotekami statycznymi jest to, że działają one jako zgrabny sposób pakowania skompilowanej biblioteki binarnej i wszelkich powiązanych nagłówków. Można je wrzucić do projektu (podobnie jak wbudowane frameworki SDK, takie jak Foundation i UIKit) i powinny po prostu działać (przez większość czasu).
Większość frameworków zawiera biblioteki dynamiczne; frameworki utworzone w Xcode przy użyciu szablonu Mac Framework utworzą bibliotekę dynamiczną. IPhone nie obsługuje struktur dynamicznych, dlatego często biblioteki wielokrotnego użytku kodu iOS są dystrybuowane jako biblioteki statyczne.
Biblioteki statyczne są w porządku, ale wymagają trochę dodatkowej pracy ze strony użytkownika. Musisz połączyć swój projekt z biblioteką i skopiować pliki nagłówkowe do projektu lub gdzieś się do nich odwołać, ustawiając odpowiednie ścieżki wyszukiwania nagłówków w ustawieniach kompilacji.
A więc: podsumowując, moim zdaniem najlepszym sposobem dystrybucji twojej biblioteki jest użycie frameworka. Aby stworzyć „statyczną” strukturę dla systemu iOS, można w zasadzie wziąć normalną strukturę i zastąpić plik binarny skompilowaną biblioteką statyczną. W ten sposób rozprowadzam jedną z moich bibliotek, Resty, i w ten sposób zamierzam rozprowadzać moje biblioteki w przyszłości.
Możesz spojrzeć na dostarczony plik Rakefile w tym projekcie (jeśli nie jesteś tego świadomy, Rake jest odpowiednikiem Make w Rubim). Mam kilka zadań do skompilowania mojego projektu (użycie
xcodebuild
) i spakowania ich jako statycznej struktury dla iOS. Powinieneś uznać to za przydatne.Alternatywnie możesz użyć tych szablonów Xcode 4 do tworzenia struktury iOS.
Aktualizacja z 9 grudnia 2013 r . : to popularna odpowiedź, więc pomyślałem, że poprawię, aby powiedzieć, że zmienił się mój pierwszy wybór dystrybucji biblioteki. Moim pierwszym wyborem dla dowolnej biblioteki zewnętrznej jako konsumenta lub producenta jest CocoaPods. Dystrybuuję swoje biblioteki za pomocą CocoaPods i oferuję wstępnie skompilowaną bibliotekę statyczną z nagłówkami jako opcją rezerwową.
źródło
zasadniczo frameworki SĄ bibliotekami i zapewniają wygodny mechanizm do pracy z nimi. Jeśli zajrzysz „do” frameworka, to jest to po prostu katalog zawierający bibliotekę statyczną i pliki nagłówkowe (w jakiejś strukturze folderów z metadanymi).
Jeśli chcesz stworzyć własny framework, musisz stworzyć „bibliotekę statyczną” i spakować ją w określony sposób. zobacz to pytanie
Ogólnie rzecz biorąc, framworks na platformach są używane do zachowania wielokrotnego użytku, w którym dodajesz własny kod „do istniejącej struktury”. jeśli chcesz mieć określoną funkcjonalność, możesz użyć biblioteki (np. three20) i spakować ją do swojej aplikacji do dystrybucji
źródło