2012-07-17 21 views
14

Pracuję nad serią aplikacji na iOS, które będą udostępniać wspólną bazę kodów. Opracowałem wspólną bazę kodów jako bibliotekę statyczną i chcę, aby jej symbole debugowania były zawarte w pliku .dSYM głównej aplikacji. Rozumiem, że jest to możliwe, ale jeszcze go nie osiągnąłem.Symbole debugowania statycznego biblioteki iOS nie są uwzględnione w dSYM

Wspólna baza kodów we własnym projekcie, w którym jako cel znajduje się biblioteka statyczna. Ten projekt został przeciągnięty do projektu głównej aplikacji. W fazach budowania celu głównego aplikacji dodałem bibliotekę statyczną jako zależność docelową i pod Link Binary z bibliotekami. Projekt jest budowany i uruchamiany zgodnie z oczekiwaniami.

Teraz, jeśli wygeneruję archiwum z głównego projektu, mogę wyświetlić to archiwum w Finderze i zawierać plik .dSYM, który może być użyty do oznaczenia dzienników awarii. Jednak .dSYM zawiera tylko symbole dla aplikacji podstawowej, a nie dla biblioteki statycznej. Aby to potwierdzić, ponad-pobiegłem co następuje:

dwarfdump /path/to/app.dSYM

a wyjście (w większości) nie zawiera żadnych symboli z biblioteki statycznej. Jedyny wyjątek, jaki znalazłem, to to, że AppDelegate mojego głównego projektu jest podklasą obiektu w bibliotece statycznej i istnieją wpisy dla tej super klasy w .dSYM. Jednak żadna z pozostałych klas nie jest obecna.

W ustawieniach Build Project statycznej biblioteki w celu, mam ustawić:

  • Strip debugowania symbole podczas kopiowania: NIE
  • Strip połączonego produktu: NIE
  • Generowanie debugowania symbole: TAK
  • Symbole ukryte domyślnie: NIE

Jeśli ktokolwiek może zaoferować jakieś wskazówki, byłbym bardzo wdzięczny to.

+0

Jakiej wersji XCode używasz? – misnomer

+0

czy udało Ci się rozwiązać ten problem? Mam ten sam problem, wciąż nie mogę zrozumieć, co się dzieje. – Vincent

Odpowiedz

1

Nie jestem pewien, czy znalazłeś odpowiedź, ale miałem ten sam problem kilka dni temu. Mam go do pracy, wykonując następujące czynności:

  1. Utwórz obszar roboczy do przechowywania podstawowego projektu i wspólnej podstawy kodu (biblioteki statycznej). Upewnij się, że projekty są rodzeństwem, a nie rodzicem/dzieckiem.
  2. Dodaj zależność docelowej i łączą wspólne codebase
  3. Upewnij się, aby zawierać symbole debugowania w swoim wspólnym kodzie
  4. skonfigurować ustawienia obszaru roboczego, aby zbudować wszystkie projekty w udostępnionym katalogu (wierzę, że to jest klucz)
  5. Jeśli otrzymasz skargi na brak możliwości znalezienia nagłówków, być może będziesz musiał zmodyfikować ścieżkę wyszukiwania nagłówka użytkownika w ustawieniach kompilacji lub użyć funkcji drzewa źródłowego.
+2

To może być naprawdę dobra odpowiedź. W kilku przypadkach jednak brakuje. Przez "włącz symbole debugowania" rozumiesz domyślnie ustawienie budowania GCC_GENERATE_DEBUGGING_SYMBOLS (Generowanie symboli debugowania)? Katalog współdzielony również nie jest jasny. Domyślnie każdy projekt w twoim obszarze roboczym będzie budowany we własnym katalogu w danych pochodnych. Czy w jakiś sposób udało ci się przekonać xcode do zbudowania każdego projektu w tym samym katalogu? – Onato

3

Statyczne symbole lib do pojawiają się w pliku dSYM aplikacji, a dwarfdump to ujawni.

dwarfdump -a path/to/app.dSYM >dsymAsText.txt 

To powinno pokazać symbole lib.

Jednakże, jeśli jesteś (jak ja niedawno) szukałem tabeli symboli, która ma zostać wygenerowana, aby pasowała do twojej statycznej biblioteki, doszedłem do wniosku, że będzie ona dość bezużyteczna; kiedy zostanie skompilowany do nowej aplikacji, wszystkie symbole i adresy będą się zmieniać, a Ty będziesz miał zupełnie inny offset dla wszystkiego (proszę, popraw mnie, jeśli się mylę).

Nie jestem do końca pewien, czy istnieje sposób na obejście tej części.

Powiązane problemy