2012-03-04 10 views
12

Używam statycznej biblioteki, która daje mi ostrzeżenie podczas przesyłania mojego pliku binarnego do recenzji przez Apple.Usuwanie wywołania metody z wnętrza statycznej biblioteki (.a) bez ponownej kompilacji

Metoda w statycznej bibliotece, która powoduje ostrzeżenie (selektory niepubliczne), nigdy nie jest wywoływana przeze mnie, jej odpowiednik .h jest usuwany z mojego proj, ale ostrzeżenie nadal występuje.

Biorąc pod uwagę, że znam nazwę metody powodującej problem, czy istnieje sposób, aby otworzyć/edytować to. A i skomentować/usunąć nieprzyjemny fragment kodu, a następnie użyć zmodyfikowanego .a w moim projekcie.

Nie mam dostępu do źródła .a, aby go zrekompilować, a jego bardzo stary i twórca nie ma żadnych danych kontaktowych do odnalezienia.

Wielkie dzięki, -Cake

+2

Co to jest biblioteka?Z jakiego prywatnego API korzysta? –

+1

Nie użyto prywatnego api. Stworzył metodę o nazwie urlEncodedString, która ma tę samą nazwę, co prywatny interfejs API, co daje fałszywy alarm. Ta metoda w ogóle nie jest używana przez aplikację, więc chcę ją usunąć. –

+0

Nie będziesz w stanie dotknąć niczego w już skompilowanej bibliotece. Usuń całą rzecz, znajdź źródło i zmodyfikuj lub odrzuć Apple od odrzucenia. –

Odpowiedz

6

Szybkie i brudne rozwiązanie: Otwórz plik .a w edytorze szesnastkowym i zmień wszystkie wystąpienia nazwy. Pozostaw nazwę funkcji o tej samej długości, tak aby przesunięcia w pliku nie uległy zmianie, po prostu zmień literę lub coś w tym stylu. Zrobiłem szybki test, dodając funkcję fikcyjną do podprojektu, który budujemy jako bibliotekę statyczną, a następnie szykując nazwę funkcji w pliku .a (było pięć instancji, bo to było warte) i wszystko dobrze zbudowane. Nie widzę żadnego powodu, dla którego nie przejdzie kontroli App Store po tym.

Naprawdę jestem zaskoczony, że funkcja była nadal dostępna w ostatecznej wersji - myślałem, że Dead Code Stripping miał wyczyścić nieużywany kod. Huh.

+0

Jeśli jest używany wewnętrznie przez bibliotekę, nie jest uważany za "martwy kod". –

+1

W moim przypadku testowym, stworzyłem nową funkcję, która nie była używana nigdzie. Zwalnianie z martwego kodu zostało włączone, ale funkcja nie została usunięta. Więc. – davehayden

+0

Oooh clevers Podoba mi się – QED

0

Nie trzeba hakować plików binarnych. Po prostu wyłącz "nieużywane selektory" kompilatora: - nieużywane selektory.

0

Istnieje kilka rozwiązań, w zależności od Twojej biblioteki i projektu.

W ustawieniach produkcji:

  1. Enable "martwy kod stripping" jeśli to możliwe: Jeśli metoda nie jest używany (nawet wewnętrznie), symbol zostanie usunięty.

  2. Use „Unexported plik symbol”: Wystarczy dodać symbol do pliku, a zostanie ona usunięta z binarnym. To zadziała, nawet jeśli symbol zostanie użyty wewnętrznie.

  3. Enable "Deployment Postprocessing" i "Strip połączonego produktu" z "Strip Style" ustawiony na "Wszystko symbol"

  4. (nie jestem pewien) Użyj "Symbole ukryte Domyślnie ". Jest to związane z generowaniem kodu i nie powinno wpływać na łączenie, ale na wszelki wypadek wszystko powyżej nie powiodło się ...

Powiązane problemy