Jak zarządzać zależnościami między projektami w przestrzeni roboczej Xcode?

Pracuję nad projektem aplikacji na iOS i dodaję projekt JSON-framework do obszaru roboczego. Nawigator projektu po lewej stronie pokazuje oba projekty, a selektor schematu budowania pokazuje również schematy z obu projektów. Teraz chcę dodać libjson.cel z projektu JSON-framework jako zależność od celu aplikacji iOS w innym projekcie. Oczekiwanym rezultatem jest to, że gdy obiekt docelowy aplikacji jest zbudowany, buduje (jeśli to konieczne) obiekt docelowy biblioteki i łączy obiekt docelowy aplikacji z nim. Oto sposoby, w jakie próbowałem to zrobić:

  • Zbuduj oba w ramach tego samego schematu. Sposób, w jaki próbuję to zrobić, to edytować schemat dla mojej aplikacji, dodając ' libjson.a 'do części' Build ' schematu, a przy okazji sprawdzane jest "Find Implicit Dependencies". Następnie idę do edytora docelowego dla mojej aplikacji docelowej, a w "Fazy budowania" - >"Link Binary With Libraries", wybieram ' libjson.a ' z listy bibliotek workspace. Kiedy później próbuję zbudować schemat, widzę, że buduje on obiekt docelowy biblioteki, ale budowanie obiektu docelowego aplikacji nie powiodło się z błędem linkera "Library not found for-ljson" - sugerującym, że biblioteka została zbudowana. Rzeczywiście w Nawigatorze projektu wpis w projekcie aplikacji dla biblioteki jest nadal czerwony, co wskazuje, że plik nie istnieje.

  • Dodaj obiekt docelowy json jako wyraźną zależność. Aby tego spróbować, Nie modyfikuję schematu budowania, ale idę do edytora docelowego dla mojej aplikacji i klikam przycisk Dodaj w sekcji "zależności docelowe". Nie pojawiają się żadne cele z innych projektów w obszarze roboczym, więc nie jest to starter.

  • Przeciągnij projekt JSON do innego projektu, a następnie dodaj obiekt docelowy jako zależność. To jest to, co bym zrobił w Xcode 3. W Nawigatorze projektu chwytam projekt biblioteki i przeciągam go po projekcie aplikacji. Spowoduje to wyświetlenie zwykłego okienka "Dodaj pliki", które po prostu odrzucam, klikając "Zakończ". Są teraz dwa wpisy do projektu Biblioteka w Nawigator projektu: jeden na najwyższym poziomie, a jeden pod projektem aplikacji. Mogę teraz dodać obiekt docelowy biblioteki jako zależność obiektu docelowego aplikacji za pomocą edytora docelowego i mogę połączyć się z nim bez błędu w fazie bibliotek linków. Ale wygląda na zepsuty: w nawigatorze jest wiele wpisów dla tego samego projektu. Czy jest inny sposób, aby to zrobić?

Co należy uznać za "Xcode 4-owski" sposób łączenia tych celów w różnych projektach w tym samym miejsce pracy? Wydaje się, że brakuje, Jeśli wiele projektów w tym samym obszarze roboczym nie może faktycznie współdziałać ze sobą. Dzięki., Graham.

Author: creednmd, 2011-03-30

6 answers

Właśnie ustawiłem projekt testowy, tak jak opisałeś w wersji 3, tworząc nowy obszar roboczy i przeciągając do niego dwa projekty Xcode, zagnieżdżone jak pokazano.

Możesz usunąć projekt rodzeństwa, jeśli już go masz.

Uderzając build na tym i to po prostu DZIAŁA, o ile widzę.

Ustawienia ProgramuUkład Projektu

Wyobrażam sobie, że istnieje wewnętrzna ścieżka-zamieszanie, jeśli masz dwa projekty, i byłbym skłonny majstrować z ustawieniami lokalizacji w "Widok"->"narzędzia" - > " plik Inspektorze" i zobacz jaki to ma efekt.

Tutaj wpisz opis obrazkaTutaj wpisz opis obrazka

Kolejną rzeczą do wypróbowania jest ustawienie ścieżek w Xcode "Preferences..." - >" Source Trees "i odwoływanie się do nich w ten sposób, jak opisano tutaj: łatwe, Modułowe współdzielenie kodu między aplikacjami iPhone' a: statyczne Biblioteki i odniesienia do projektów

HTH. Andy W.

 23
Author: creednmd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 12:26:36

Udało mi się uzyskać zależności między projektami w przestrzeni roboczej, aby działały tak, jak opisałem tutaj: http://blog.carbonfive.com/2011/04/04/using-open-source-static-libraries-in-xcode-4/.

Niestety nie mogę znaleźć sposobu, aby Xcode odkrył Ukryte zależności lub indeksować wszystko w kompilacji zgodnie z reklamą. Znalazłem obejście dla obu, ale mam nadzieję, że mniej ręczna konfiguracja będzie potrzebna, jak Xcode 4 dojrzewa.

 9
Author: Jonah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-04 19:31:31

Zamierzałem zadać to samo pytanie, myśląc, że moje własne rozwiązanie nie może być właściwe. Ale nie widzę tego tutaj, i wydaje się, że działa. Oczywiście XCode 4 jest w toku. :)

Mam przestrzeń roboczą z dwoma projektami: biblioteką statyczną i aplikacją, która korzysta z biblioteki. Projekty są rodzeństwem. Każdy projekt ma swój własny schemat, a każdy schemat jest ustawiony na zbudowanie tylko jednego celu. Innymi słowy, dodałem dwa projekty do przestrzeni roboczej i to wszystko.

To dodaj bibliotekę statyczną jako zależność aplikacji, po prostu przeciągam libsomething.produkt z projektu biblioteki (Nawigator projektu) do listy "Link Binary with Libraries" dla aplikacji docelowej. To wszystko. Teraz, gdy buduję aplikację, najpierw buduje się projekt biblioteki, a następnie łączy. Co ciekawe, kiedy modyfikuję schemat aplikacji, aby użyć innej konfiguracji (np. Release zamiast Debug), Biblioteka jest zbudowana przy użyciu tej samej konfiguracji.

Więc to działa, i jest wyraźnie automatyczne sprawdzanie zależności. Ale czuję się źle. Z drugiej strony, podobnie jak edytor/menedżer schematów modalnych i brak obiektu obszaru roboczego w Nawigatorze projektu... Nigdy nie myślałem, że to powiem, ale interfejs Visual Studio (bleh) jest o wiele wyraźniejszy.

 1
Author: Tyler Daniel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-21 07:25:13

Moje kuloodporne rozwiązanie do tego:

Utwórz Ustawienia" Per Debug-Release / Per Architecture " w Ustawieniach budowania w głównym projekcie (nie w lib), aby uwzględnić albo ../ MyLibProject / build/Debug-iphoneos lub ../ MyLibProject / build/Release-iphonesimulator lub itd..
w zależności od konfiguracji (możesz utworzyć tego rodzaju konfigurację, klikając + obok opcji Debug lub Release i wybierz "Any iOS Simulator SDK "lub"any iOS SDK". Musisz to zrobić dla obu "Ścieżka wyszukiwania nagłówków" (w przypadku, gdy biblioteka skopiuje niektóre pliki nagłówków, co jest bardziej niż prawdopodobne) i "ścieżki wyszukiwania bibliotek". Oznacza to, że dla każdego ustawienia prawdopodobnie otrzymasz 4 różne ścieżki (debug sim , debug iOS, release sim, release ios). To upewniłoby się, że konfiguracja obu projektów jest zgodna.

Teraz, aby automatycznie skompilować lib, czyli utworzyć zależność, możesz użyć " Build Phase - > Link to Binary With Libraries - > + - > select the .plik " porady podane powyżej.

Tylko w ten sposób udało mi się mieć coś, co poprawnie buduje i linkuje dla każdego środowiska na xcode 4.5

Uwaga: dodałem nawet flagę-lmyLib w "innych flagach linkera", ale nie jestem pewien, czy jest to naprawdę konieczne

 1
Author: Ben G,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-22 18:56:05

Udało mi się stworzyć biblioteki statyczne podobne do frameworka, choć nie jest to idealne rozwiązanie.

 0
Author: amrox,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-25 00:59:54

Zobacz Xcode user guide: Xcode Concepts - > Xcode workspace pod 'Projects in a Workspace Share a Build Directory'.

Wszystkie projekty w jednym obszarze roboczym współdzielą katalog budowania. Zależności są wykrywane automatycznie i budowane w razie potrzeby:

" Xcode bada pliki w katalogu budowania, aby odkryć ukryte zależności. Na przykład, jeśli jeden projekt zawarty w przestrzeni roboczej tworzy bibliotekę, która jest powiązana z innym projektem w tej samej przestrzeni roboczej, Xcode automatycznie buduje bibliotekę przed zbudowaniem innego projektu, nawet jeśli konfiguracja budowania nie czyni tej zależności jawną. W razie potrzeby możesz zastąpić takie niejawne zależności jawnymi ustawieniami budowania. W przypadku jawnych zależności, musisz utworzyć referencje projektu."

 -1
Author: Joris Kluivers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-30 12:07:55