2012-04-16 26 views
5

Mam więc aplikację, która dwukrotnie została odrzucona ze sklepu z aplikacjami i naprawdę mógłbym skorzystać z pomocy!Odrzucona aplikacja, licznik Watchdog lub brakujące uprawnienia

Został odrzucony dla Zegarmistrza, zmuszając go do zamknięcia po pierwszym otwarciu. Jednak nie udało mi się odtworzyć tego na żadnym z moich urządzeń. Zbudowanie urządzenia przy użyciu xcode zajmuje dużo czasu (wiem, że po zbudowaniu z kodu xcode watchdog jest odłączony). Ale mam kilka pytań, które mogą mi pomóc rozwiązać ten problem.

  1. Czy watchdog uwzględniać tylko didFinishLaunchingWithOptions: lub są ich inne metody, które wywołuje?

  2. Czy liczba frameworków używanych przez program ma z tym coś wspólnego? a jeśli tak, to 11 frameworków to zbyt wiele?

  3. Gdy aplikacja zostanie zainstalowana na urządzeniu, a ja odłączę to urządzenie, czy włącznik czasomierza zostanie ponownie włączony?

  4. Co jeszcze można dodać do licznika watchdoga?

Apple powiedział, że inna możliwość może być Another possibility could be a missing entitlement. Może ktoś proszę wyjaśnić, co to znaczy, ja hav'nt widziałem tego wcześniej z moich innych aplikacji, ale pomyślałem, że może to było coś nowego? I czy musi być zainstalowany na wszystkich aplikacjach dla sklepu?

Czas profilu dla pierwszych sekund

enter image description here

+1

AFAIK Zegar watchdog jest aktywny nie tylko podczas uruchamiania aplikacji, ale także przez całe jej życie. Wszystko, co blokuje główny wątek zbyt długo, spowoduje, że twoja aplikacja zostanie zabita -> użyj wątku! Liczba używanych frameworków nie stanowi problemu. – Till

+0

Czy mógłbyś mi wyjaśnić, czym jest wątkowanie? Staram się tak mało uruchomić podczas uruchamiania aplikacji, jak to możliwe. A co powiesz na dużą liczbę plików graficznych? –

Odpowiedz

4

Blokujesz wątek interfejsu użytkownika przez zbyt długi czas. Aby rozwiązać ten problem, najpierw musisz dowiedzieć się, jaki kod trwał tak długo. Warto profilować swoją aplikację. Zauważ, że symulator nie emuluje urządzenia, tylko emuluje API. Może działać znacznie szybciej niż rzeczywiste urządzenie, ponieważ komputer jest silniejszy niż iPhone. Spróbuj kliknij i przytrzymaj Run w lewym górnym rogu Xcode i wybierz Profile. Wybierz Time Profiler i uruchom na kilka sekund. Zatrzymaj profiler, aby przeanalizować czas w wywołaniach funkcji. Pamiętaj, że możesz potrzebować dokładniejszego wyszukiwania, znaleźć kilka samouczków lub książek, aby naprawdę zrozumieć profilowanie.

Kiedy wiesz, które części działają wolno. Możesz umieścić je w wątku. Łatwym sposobem byłoby użycie Grand Central Dispatch. Aby rozpocząć, odwiedź stronę this tutorial. Możesz pominąć pierwszą połowę i skupić się na faktycznych blokach nici. Interfejsy API to dispatch_queue_create, dispatch_async i dispatch_release.

Spowoduje to odblokowanie interfejsu użytkownika.

+0

Dodałem zdjęcie mojego Profilera czasu po kilku sekundach. Czy widzisz, że czegoś tu brakuje? –

+0

Spróbuj sprawdzić "Ukryj biblioteki systemowe" po lewej i ponownie załaduj obraz. Natychmiast zobaczysz problemy samodzielnie. –

+0

OK, więc myślę, że mogłem dowiedzieć się, gdzie wiele danych zostało zużyte. Użyto 229,0ms, aby uruchomić sprawdzanie słownika w AppDelegate.m 'didFinishLaunchingWithOptions:' Teraz przeniosłem to do mojego pierwszego 'viewcontroller' i dodałem do metody' viewDidLoad: '. Czy to powinno zwolnić trochę miejsca na start, czy nadal go brakuje? –

3

zrobić wiele przetwarzania robisz w

application:didFinishLaunchingWithOptions, 
applicationDidBecomeActive, 
applicationDidEnterBackground, 
applicationWillResignActive or 
applicationWillTerminate? 

Rzeczy takie jak stwardnienie dostępu do plików, danych Ładowanie/Zapisywanie, synchroniczny dostępowego sieci CAN spowodują, że aplikacja zawiesi się podczas uruchamiania lub po wyjściu użytkownika i może spowodować, że strażnik zabije twoją aplikację.

Ta notatka techniczna firmy Apple sugeruje, że organ nadzorujący patrzy tylko na uruchamianie, zawieszanie, wznawianie i kończenie zdarzeń interfejsu użytkownika, więc powiedziałbym, że powinieneś najpierw zapoznać się z tymi informacjami, a może poprosić o więcej szczegółów na temat swojej aplikacji ma w metodach wymienionych powyżej. http://developer.apple.com/library/ios/#qa/qa1693/_index.html

11 ramek jest w porządku. Użyłem 11 w aplikacji bez problemu.

Jeśli uruchomisz aplikację, dotykając ikony na ekranie głównym, zegary watchdog będą aktywne i monitorują Twoją aplikację. Jeśli uruchomisz aplikację, naciskając "run" lub "debug" w Xcode, watchdog nie będzie monitorował twojej aplikacji.

Powiązane problemy