2011-07-13 14 views
10

Pracuję nad utworzeniem statycznej biblioteki iOS, którą chcę sprzedawać. Poszedłem przez kolejne etapy początkowych kompilacji i wygenerowałem wyjście .a/.h.Ukryj kod w bibliotece statycznej (iOS Obj-C)

Po uwzględnieniu tych plików w osobnym projekcie nie widzę sposobu na przeglądanie zawartości pliku .a.

JEDNAK, kiedy linia kodu w mojej bibliotece powoduje awarię aplikacji (tak jak powiedziałem, to wciąż jest w fazie rozwoju), debugger pokazuje mi cały plik klasy (.m). Co z tym?

Nie bardzo rozumiem, co się dzieje w statycznych bibliotekach i nie jestem pewien, czy skompilowałem tę wersję zarówno dla symulatora, jak i urządzenia. Czy to może mieć z tym coś wspólnego? Jeśli tak, czy ktoś mógłby wyjaśnić, dlaczego?

Dzięki!

+0

Usuń katalog dSYM skojarzony z biblioteką, uruchom awarię aplikacji, brak źródeł. To znaczy. dSYM - tabela symboli - zapewnia mapę między biblioteką a źródłem. – bbum

+0

Debugger pokazuje plik w twoim projekcie Xcode. Kod źródłowy nie jest przechowywany w pliku .a. (W tym celu spowodowałoby to masowe "nadpisywanie kodu", a zatem jest oczywiście niepożądane, nawet pomijając problem bezpieczeństwa.) –

Odpowiedz

18

Nie martw się, twój kod źródłowy nie jest zawarty w pliku archiwum (.a).

Xcode jest wystarczająco inteligentny, aby znaleźć plik kodu źródłowego na komputerze, na podstawie informacji o debugowaniu zawartych w pliku. Jeśli zbudujesz bibliotekę przy użyciu konfiguracji "Release" (lub w inny sposób zmodyfikuj ustawienia kompilacji, aby usunąć symbole debugowania) i nie masz ich w dowolnym miejscu na komputerze, deweloper będzie musiał uciec się do swojej wiedzy o x86 lub ARM montaż, aby dowiedzieć się, jak działa twój kod.

Przy okazji:

  • Ponieważ wiele z Objective-C jest obsługiwane przy starcie, wiele nazw klas i nazwy selektora będą widoczne w bibliotece. Tak po prostu działa. Możesz spróbować to zaciemnić, ale myślę, że lepiej poświęcić czas na napisanie bardziej przydatnego kodu do sprzedania.

  • Jeśli chcesz udostępnić użytkownikom bibliotekę statyczną do programowania iOS, musisz utworzyć wersje symulatora systemu iOS (x86) i urządzenia iOS (ramię), a następnie użyć lipo, aby połączyć je w pojedynczy dysk biblioteka statyczna. Szukaj w poszukiwaniu "biblioteki statycznej tłuszczu lipo xcode" na różne sposoby, aby to zrobić. Niektóre rozwiązania są bardziej zawiłe niż inne.

+1

Cel c czyni to łatwo, ponieważ ładuje informacje o dzwoniącym bezpośrednio do rejestrów :) –

+0

OK, więc mówisz, że XCode faktycznie przeszukuje mój komputer pod kątem kodu źródłowego JUST TO FREAK ME OUT ??!?! @ !? Rozejrzałem się i zobaczyłem "zbuduj grubą bibliotekę", ale wciąż jestem dość wcześnie i głównie wciąż testuję swoją bibliotekę. Zasadniczo 1. Zbuduj tryb zwolnienia (dla symulatora i urządzenia), 2. Zaimportuj bibliotekę do oddzielnego projektu, 3. Upewnij się, że źródło nie znajduje się na komputerze i 4. Nie będę mógł przeglądać klasy, jeśli Wystąpiła awaria? Chłodny! Dzięki! – mbm29414

+0

Jeśli wystąpi błąd, pojawi się błąd, ale nie w określonym miejscu, najprawdopodobniej poda adres błędu i może dane, które spowodowały błąd (nieprawidłowy adres lub coś takiego) –

0

Jeśli masz projekt biblioteki statycznych ze wszystkimi .M plików na komputerze, to każdy egzemplarz tej biblioteki (.a plik) będzie symbolicated ze swojego pliku .m podczas debugowania w Xcode.

xCode nie wyszukuje odpowiedniego pliku .m na całym dysku. Zna miejsce oryginalnego projektu. Więc jeśli dystrybuujesz tylko bibliotekę, to w pełni ukrywasz swój początkowy kod.

Aby upewnić się, że możesz skopiować swoją bibliotekę w nowym projekcie, wyczyść plik .m w projekcie bibliotecznym. Od tego momentu każda próba debugowania metod biblioteki spowoduje wyświetlenie pustego pliku na ekranie.

enter image description here

3

miałem ten sam problem. @benzado ma rację co do tego, o czym wspomniał. Ale musiałem usunąć symbole debugowania, aby rozwiązać problem. Aby to zrobić, musiałem zmienić Ustawienia kompilacji biblioteki projektu przed kompilacją, jak wspomniano poniżej.

Wybierz swój cel i przejdź do Ustawienia kompilacji.Ustaw

  1. 'Strip Symbole debugowania podczas kopiowania' to TAK
  2. 'Debug Informacja Format' do 'Krasnal z dSYM File'
  3. "Generowanie Symbole debugowania 'do' N O '
  4. ' Symbole domyślnie ukryte 'do' TAK '

Aby zobaczyć co to jest za, patrz Apple Build Setting Reference

i zbudować bibliotekę przy użyciu "zwolnienie" konfiguracja. To działało dla mnie.

Powiązane problemy