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.
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ę.
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.
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.
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.
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.
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
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.
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."
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