2013-03-11 12 views
101

Mam istniejącą aplikację na iOS i chcę dodać duży fragment kodu, który opracowałem jako inny projekt, po prostu dla łatwości testowania. Nowy fragment w zasadzie zajmuje się zapisywaniem obrazu do różnych usług udostępniania itd. Ponieważ ten kod udostępniania wymaga wielu testów i przyszłych aktualizacji, zastanawiałem się, jaki najlepszy sposób na włączenie tego fragmentu kodu do mojej istniejącej aplikacji.Biblioteka? Statyczny? Dynamiczny? Lub Framework? Projekt wewnątrz innego projektu

Nie wiem, czy powinna to być biblioteka statyczna, biblioteka dynamiczna czy framework, i szczerze mówiąc, nie jestem do końca pewna, na czym polega różnica, jak mam to zrobić i ustawić ją w Xcode.

Wiem tylko, że potrzebuję/chcę zachować oddzielną aplikację do testowania i aktualizowania kodu udostępniania, a aplikacja główna powinna go używać.

Jeśli nie możesz już powiedzieć, nie jestem kretynem git. Jestem tylko prostym programistą.

Każda pomoc lub kierunek będą mile widziane. Dzięki!

+0

Można utworzyć strukturę parasola, która jest podobna do 'framework in framework' http://stackoverflow.com/a/27638841/1582217 –

+0

możliwym duplikatem [Jak utworzyć framework parasolowy w iOS sdk?] (Http: // /stackoverflow.com/questions/27484997/how-to-create-an-umbrella-framework-in-ios-sdk) –

Odpowiedz

150

Po pierwsze, niektóre ogólne definicje (specyficzne dla systemu iOS):

biblioteka statyczna - jednostka powiązana kodu w czasie kompilacji, która nie ulega zmianie.

Jednak biblioteki statyczne iOS to , a nie mogą zawierać obrazy/zasoby (tylko kod). Możesz obejść to wyzwanie, korzystając z zestawu Media Bundle.

Lepszą, bardziej formalną definicję można znaleźć na Wikipedii here.

biblioteki dynamicznej - jednostka kodu i/lub aktywów związany w czasie wykonywania, że ​​może zmian.

Jednak tylko Apple może tworzyć dynamiczne biblioteki dla iOS. Nie możesz ich tworzyć, ponieważ spowoduje to odrzucenie Twojej aplikacji. (Zobacz this inne stanowisko SO dla potwierdzenia i uzasadnienia na takich).

Software Framework - skompilowany zestaw kodu, który realizuje zadania ... stąd, można rzeczywiście mieć statycznej ram lub dynamiczne ramy, które są zwykle tylko skompilowane wersje powyższych.

Aby uzyskać więcej informacji, zobacz numer Wiki on Software Framework. Dlatego w systemie iOS jedyną opcją jest użycie statycznej biblioteki lub statycznego frameworka (główną różnicą jest to, że statyczna struktura jest najczęściej rozprowadzana jako skompilowany plik .a, podczas gdy statyczna biblioteka może być po prostu włączona jako Podprojekt - możesz zobaczyć cały kod - który jest skompilowany jako pierwszy, a jego wynikowy plik .a jest używany jako zależność od projektu).

Po uzyskaniu jasności na tych warunkach konfigurowanie biblioteki statycznej i obsługiwanie pakietu multimedialnego dla systemu iOS nie jest zbyt trudne, a istnieje wiele tutoriali, jak to zrobić.Ja osobiście polecam ten:

https://github.com/jverkoey/iOS-Framework

Jest to dość prosta przewodnikiem i nie mają tę wadę, że do czynienia z „fałszywych statycznych bibliotek” ... to sprawdzić, aby uzyskać więcej informacji ..

Po utworzeniu biblioteki statycznej, jest ona tak łatwa, jak włączenie jej jako modułu submodule w Git do użytku w różnych projektach.

Powodzenia.

EDIT

dotycząca podprojektu ramach projektu, o ile mi wiadomo, aby uzyskać to do pracy/skompilować poprawnie, mają zasadniczo założyć łańcuch kompilacji gdzie podprojektem jest skompilowany pierwszy , który tworzy statyczny plik struktury .a, który jest używany jako zależność projektu.

Oto kolejny użyteczny poradnik, który mówi o tym:

http://www.cocoanetics.com/2011/12/sub-projects-in-xcode/

EDIT 2

Jako iOS 8, Apple pozwala teraz deweloperom tworzenie ram dynamiczne! (Uwaga: Twoja aplikacja musi mieć minimalny cel systemu iOS 8, aby zawierała dynamiczną strukturę ... cofanie wstecz jest niedozwolone.)

Zostało to dodane jako nowy szablon projektu. W Xcode 6.1, można znaleźć na stronie:

New Project -> iOS -> Framework & Library -> Cocoa Touch Framework 
+0

Do tej pory wydaje się, że podprojekt jest tym, czego chcę i ten artykuł był doskonały. Zauważyłem jeden dziwny efekt uboczny: Podprojekt, który przeciągnąłem wewnątrz mojego głównego projektu, ma również mój kod testowy (kontroler widoku i nib, appdelegate, itp.) I upewniłem się, że tylko klasy, których chcę użyć w główny projekt jest sprawdzany do użycia w bibliotece statycznej. Ale z jakiegoś powodu, kiedy poszedłem do załączników do pliku głównego nib mojego projektu, pokazywałem również oddziały i działania z mojego podprojektu. To z pewnością może doprowadzić do zamieszania. Wszelkie wskazówki, aby się ich pozbyć? Dzięki! – pizzafilms

+0

Czy projekt dynamiczny może zostać przeciągnięty i upuszczony do statycznego projektu, czyniąc go projektem statycznym? Jestem bardzo zdezorientowany, niektóre wyjaśnienia byłyby naprawdę świetne! Z góry dziękuję :-) –

+1

@ JRG-Developer Wsteczne przenoszenie dynamicznych ram jest dozwolone, jeśli przestrzegasz pewnych zasad: https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/ExtensibilityPG/ExtensionScenarios.html # // apple_ref/doc/uid/TP40014214-CH21-SW3 – klefevre

Powiązane problemy