2015-01-26 10 views
13

Robiłem dzisiaj rozszerzenie, które pobiera artykuły z kanału i wyświetla najnowsze. Cała operacja sprawdziła się na iOS 8, nadal działała na iOS 8.1, a potem pojawił się iOS 8.1.2 i zaczęliśmy się skarżyć na to, że dzisiejsze rozszerzenie nie działa. Próbowałem debugowanie na iOS 8.1.2 urządzeń, a przed rozszerzeniem nawet uruchomić, to wywala z tego błędu:Dzisiejsze awarie rozszerzeń przed uruchomieniem na iOS 8.1.2

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <__NSConcreteUUID 0x174027280> 5AFB07AB-5DCD-46FE-8D07-44DE0F3789F2)' 

przeczytałem ten post o częstych błędów dzieje przy opracowywaniu rozszerzenie dzisiaj: http://www.atomicbird.com/blog/ios-app-extension-tip

w swoim stanowisku, Tom Harrington mówi:

w iOS 8 (i innych nowszych wersjach), umożliwiając w ustawieniach kompilacji modułów Xcode oznacza, że ​​nie trzeba jawnie wymienić wszystkie ramy, których chcesz używać. Zostaną znalezione automatycznie.

Ale tak nie jest w przypadku NotificationCenter.framework, którego używają dzisiejsze rozszerzenia. Jeśli usuniesz to z ustawień kompilacji, nie otrzymasz żadnych ostrzeżeń lub błędów kompilacji. Ale gdy spróbujesz załadować rozszerzenie, dostaniesz wyjątek od libextension.dylib, a twoje rozszerzenie się nie załaduje. Komunikat wyjątek nie jest pouczające:

2014-08-16 12: 06: 53,793 TodayTestExtension [41313: 6111763] * Zakończenie aplikacji ze względu nieprzechwyconego wyjątku 'NSInvalidArgumentException' przyczyny: „* setObjectForKey: obiekt nie może be nil (klucz: < __NSConcreteUUID 0x7fd729422390> ED3B42F8-66CD-4CB0-BCD5-F3DBA6F34DB5) ' Jeśli robisz dzisiaj rozszerzenie, po prostu zostaw to środowisko w ustawieniach kompilacji. Nie powinno tam być, ale robi to.

Moje rozszerzenie zawiera NotificationCenter.framework w ustawieniach kompilacji, ale podejrzewam, że mój problem może być w pewien sposób podobny.

Ktoś zmierzył się z podobnym problemem? Każdy pomysł, jak go rozwiązać?

+0

Wow, to zniechęca. Wygląda dokładnie tak samo, ale to jedyna rzecz, jaką wiem, która spowodowałaby ten problem. –

+0

Czy te skargi od użytkowników "w terenie", czy od osób, które korzystają z testowych wersji Twojej aplikacji? Po pierwsze byłby to błąd 8.1.2 i nie byłoby zbyt wiele możliwości. W drugim może to być problem Xcode, który można naprawić. –

Odpowiedz

0

W końcu próbowałem usunąć NotificationCenter.framework z mojego celu i umieścić go z powrotem, wyczyścić projekt, a teraz działa. Domyślam się, że framework nie był właściwie połączony, chociaż mogłem go zobaczyć na moim celu przy pomocy xcode. Ponadto, nie mogę zrozumieć, dlaczego to zadziałało, a następnie przestał działać z nadejściem 8.1.2.

0

Po prostu doświadczyłem tego samego problemu. Dla mnie była to właściwość "Główny interfejs" w "Ustawieniach ogólnych" celu Klawiatury. Był pusty i ustawiłem go na mój plik scenorysu, a teraz działa jak urok. Screenshot

32

Ten błąd występuje również, jeśli używasz NSExtensionPrincipalClass wewnątrz "Info.plist" w celu zdefiniowania klasy bazowej (zamiast korzystania z storyboardu) z nazwą kontrolera ViewController, który nie istnieje.

Używając Swift, pamiętaj, aby poprzedzić klasę nazwą modułu (zwykle nazwą celu), np. "Module.MyViewController".

+3

Awesome, that worked! Następnie zmieniłem go na '$ (PRODUCT_NAME).", Aby uzyskać dodatkową elastyczność. – user2565077

+0

Ratujesz moje życie! – Hilen

+0

To rozwiązanie dotyczy typu rozszerzenia _any_. A część "Kiedy używasz Swift" jest ** ważna **. Nie zapomnij nazwy tego modułu. –

Powiązane problemy