2011-08-26 5 views
6

Przesyłam moją aplikację do sklepu z aplikacjami, a po sprawdzeniu została ona odrzucona. Powód Apple było:mylić o: (2.5) Aplikacje korzystające z niepublicznych interfejsów API zostaną odrzucone.


2,5: Aplikacje, które używają API niepubliczne zostaną odrzucone

* Okazało się, że aplikacja korzysta z jednego lub więcej interfejsów API niepublicznym, która nie jest zgodność z wytycznymi przeglądu App Store. Używanie niepublicznych interfejsów API jest niedozwolone, ponieważ w przypadku zmiany tych interfejsów może to spowodować słabe wrażenia użytkownika. Znaleźliśmy następujące API niepublicznych w swojej aplikacji:

dateWithCalendarFormat: Strefa czasowa:

hourOfDay

minuteOfHour

secondOfMinute

setNavigationBar:

Jeśli zdefiniowano metody w kodzie źródłowym o takich samych nazwach jak wyżej wymienione interfejsy API sugerujemy zmianę nazw metod, aby nie kolidowały one już z prywatnymi interfejsami API Apple, aby uniknąć zgłaszania aplikacji w przyszłych zgłoszeniach.

Ponadto jeden lub kilka wyżej wymienionych interfejsów API może znajdować się w bibliotece statycznej dołączonej do aplikacji. Jeśli nie masz dostępu do źródła biblioteki, możesz przeszukać skompilowany plik binarny za pomocą narzędzi wiersza poleceń "ciągi" lub "otool". Narzędzie "łańcuchy" może wyprowadzać listę metod, które biblioteka wywołuje, a "otool -ov" wyprowadza struktury klasy Objective-C i ich określone metody. Techniki te mogą pomóc w zawężeniu gdzie kod problematyczne przebywa. *


Ale problemem jest to, że nie deklarują lub zdefiniować dowolną metodą z nazwiskami jak wyżej wymienione API. I nie użyłem żadnej niestandardowej biblioteki. Jest to dość prosta aplikacja (planer) i użyłem tylko: UIKit, CoreData, AVFoundation, Foundation i EventKit.

Wysyłam wczoraj wiadomość do Apple, ale nadal nie ma odpowiedzi.

Wszelkie pomysły?

+0

Szybko grep kodu źródłowego dla wystąpień jednego z nich (np. 'SecondOfMinute'). Czy pojawiają się gdziekolwiek? –

+0

Jeśli nie wywołasz żadnego kodu Apple używającego prywatnego interfejsu API i skontaktujesz się z nim, poczekaj na odpowiedź. – Moshe

+0

Metody dateWithCalendarFormat: timeZone :, hourOfDay, minuteOfHour i secondOfMinute Użyłem tylko jeden raz w moim kodzie: int hour = [[[data date date] dateWithCalendarFormat: zero timeZone: nil] hourOfDay]; int min = [[[datePicker date] dateWithCalendarFormat: zero timeZone: nil] minuteOfHour]; int sec = [[[datePicker date] dateWithCalendarFormat: zero timeZone: nil] secondOfMinute]; gdzie datePicker jest obiektem z klasy UIDatePicker: @property (nonatomic, retain) IBOutlet UIDatePicker * datePicker; To samo dotyczy metody setNavigationBar. Nie zadeklarowałem ani nie zdefiniowałem tych metod. –

Odpowiedz

4

Mówiłeś w komentarzach powyżej użyłeś

[[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] hourOfDay] 

Teraz [datePicker date] zwraca NSDate, którego documentation pokazuje tam żadne metody publiczne nazwane dateWithCalendarFormat:timezone: ani hourOfDay itp

więc nie można po prostu Użyj ich.

Jeśli chodzi o setNavigationBar:, właściwość navigationBar z UINavigationController jest własnością tylko do odczytu, zgodnie z dokumentacją. Dlatego nie możesz tego ustawić.

Podczas kompilacji aplikacji kompilator powinien był wydać wiele ostrzeżeń, mówiąc, że nie znaleziono selektora itp. Powinieneś zawsze traktować te ostrzeżenia jako błędy i je eliminować. W ten sposób unikniesz odrzucenia po przesłaniu.

+0

Tak, tak, widziałem to kilka minut wcześniej i zmieniłem to. Ale co z metodą setNavigationBar ??? –

+0

dateWithCalendarFormat: strefa czasowa: nie jest już zalecana ... , ale jaki jest problem z setNavigationBar: UINavigationBar * bar = [[UINavigationBar alloc] init]; bar.barStyle = UIBarStyleBlackOpaque; [opla setNavigationBar: bar]; [opla.navigationBar setTintColor: self.navigationController.navigationBar.tintColor]; [opla.navigationBar setBarStyle: self.navigationController.navigationBar.barStyle]; –

+0

Dobra, zobacz moją aktualizację. – Yuji

Powiązane problemy