2013-05-20 11 views
5

Opracowuję pakiet SDK dla systemu iOS, który integruje inne pakiety SDK (na przykład Facebook SDK 3.5). Aby zapobiec kolizjom i umożliwić moim klientom importowanie tych zestawów SDK, chcę zmienić nazwę wszystkich klas/wyliczeń w moim kodzie (na przykład zmienić nazwę FBSession na RDFBSession itp.).Pakiety iOS SDK: Zmiana nazwy wielu klas

Czy istnieje prosty sposób, aby to zrobić zamiast iść do klasy po klasie i używając funkcji zmiany nazwy Xcode?

+0

Xcode ma funkcję Refactor, która ułatwi to. – trojanfoe

+0

@trojanfoe Jestem tego świadomy, istnieje wiele klas i innych symboli, które można zmienić. Nadal byłby to długotrwały, bolesny proces. –

+2

Lepiej zacznij od tego, bo nigdy się nie skończysz. Kod źródłowy jest zbyt skomplikowany, by istniało jedno kliknięcie, które pozwoliłoby na wykonanie tego, co chcesz. Zasadniczo musisz to zrobić sam. – trojanfoe

Odpowiedz

3

Xcode oferuje również tekstowe wyszukiwanie i zamienianie. Będzie to szybsze niż poszczególne reaktory, ale ostatecznie jest mniej zautomatyzowane. Możesz krok po kroku dokonać szybszej refaktoryzacji, najpierw minimalizując projekt do odpowiednich zależności/źródeł (jeśli to możliwe).

Jednak zmiana nazwy deklaracji w bibliotece nie zmieni nazw symboli skojarzonych plików binarnych. Jeśli jest dystrybuowany za pomocą pliku binarnego, zmiana nazwy spowoduje tylko błędy łącznika lub (w niektórych przypadkach) błędy środowiska wykonawczego.

Najlepszym pomysłem, jeśli musisz skorzystać z biblioteki innej firmy, z której mogą korzystać twoi klienci, jest po prostu powiadomienie ich, że muszą połączyć bibliotekę z aplikacją, a następnie opublikuj wersję (wersje), którą obsługuje obecna wersja. wiedzą, że mają dodatkowe testy, jeśli posuną się zbyt daleko w niektórych bibliotekach.

+0

Postanowiłem zastosować metodę opisaną w ostatnim akapicie. To wydaje się być najczystszym podejściem do tego problemu. Dzięki! –

+0

@RanDahan serdecznie zapraszamy :) – justin

-1

Myślę, że lepszym rozwiązaniem niż zwykłe zmienianie nazw klas będzie pobranie kodu open source Facebooka, zmiana nazw tamtejszych klas i kompilacja nowej biblioteki statycznej z zestawem plików nagłówkowych o zmienionej nazwie. Wtedy możesz być pewien, że nie występują kolizje i że używasz symboli, które sam nazwałeś.

Muszę Cię jednak ostrzec - praca w ten sposób może spowodować, że aktualizacja SDK będzie koszmarem, niezależnie od tego, jak poradzisz sobie z tym konkretnym problemem.

+1

To jest zły pomysł, ponieważ może być konieczne zaktualizowanie FB SDK w przyszłości. Jeśli tak, musiałby przejść przez dzieło nazywania wszystkiego od FB. Lepiej przejść przez ciężką pracę nad przemianowaniem jego klas. Czasami najlepsze podejście nie jest łatwe. – stevekohls

+0

Jeśli zmieni swoją klasę lokalnie, nadal będzie musiał to robić od nowa po każdej aktualizacji FB SDK. – Stavash

3

Jabłko dostarczenie narzędzia wiersza polecenia o nazwie tops(1), który jest przeznaczony dla kodu skryptowego dużą skalę refaktoringu (zmiana nazwy funkcji w języku C, metody Objective-C, klasy i inne znaki):

tops -verbose replace "FBSession" with "RDFBSession" Sources/*.[hm] 

Jeśli masz wielu zamienników można umieścić wszystkie polecenia replace... w pliku przekazywanym za pomocą opcji -scriptfile. Numer man page zawiera więcej informacji na temat bardziej złożonych poleceń/opcji (i przykładów).