Oto wszystko, co przyniesie nowy iOS 5 GM

     iOS 5 GM został wydany godzinę temu przez firmę Apple dla twórców aplikacji na iOS i zespołu deweloperskiego ogłosił już takie można jailbreakować za pomocą redsn0w. Jak dotąd widziałem na konferencji Apple niektóre nowości wdrożone przez Apple, ale z pewnością w iOS 5 pojawi się o wiele więcej nowości, które przedstawię Wam w kolejnych dniach, gdy będę miał okazję trochę pobawić się z nowy system operacyjny. Do tego czasu poniżej masz listę zmian nowego systemu operacyjnego, a więc wszystko, co Apple wdrożyło nowe.

UWAGI I ZNANE PROBLEMY

Poniższe problemy dotyczą używania zestawu SDK 5 do tworzenia kodu.

Konta

  • Tworząc konto iCloud, możesz używać dowolnego Apple ID, pod warunkiem, że jest to pełny adres e-mail, a nie konto MobileMe. Jeśli masz konto MobileMe, możesz przenieść je do iCloud. Więcej informacji znajdziesz na stronie: http://me.com/move

AirPlay

  • Począwszy od systemu iOS 5, funkcja AirPlay jest domyślnie włączona dla treści wideo w aplikacjach i witrynach internetowych.
  • W systemie iOS 5 AV Foundation dodaje obsługę odtwarzania wideo za pośrednictwem AirPlay.

Pszczoła

  • Połączenia NSNetService interfejsy API class i CFNetService nie obejmują domyślnie interfejsów P2P. Aby przeglądać, rejestrować lub rozpoznawać usługi za pośrednictwem interfejsów P2P, aplikacja musi korzystać z protokołu Bonjour DNSService*() Interfejsy API wymienione poniżej.
  • Ustawianie interfejsIndeks parametr kDNSServiceInterfaceIndexAny w poniższych interfejsach API domyślnie nie będzie zawierać interfejsów P2P. Aby uwzględnić interfejsy P2P, musisz teraz ustawićkDNSServiceFlagsIncludeP2P flaga podczas używania kDNSServiceInterfaceIndexAny lub ustaw interfejsIndex na kDNSServiceInterfaceIndexP2P. Interfejsy API, których to dotyczy, mają:
    • DNSServiceBrowse
    • DNSServiceRegister
    • DNSServiceResolve
    • DNSServiceRegisterRecord
    • DNSServiceQueryRecord

Walidacja API

  • W narzędziach programistycznych systemu iOS 5 można wyodrębnić interfejsy API używane przez aplikację i sprawdzić je pod kątem korzystania z prywatnych interfejsów API. Ta opcja jest dostępna podczas zatwierdzania wniosku o przesłanie aplikacji.

apple TV

  • Oprogramowanie Apple TV umożliwia użytkownikom wyświetlanie zawartości iPada 2 na Apple TV (2. generacji) za pomocą AirPlay. To oprogramowanie umożliwia także strumieniowanie zdjęć na Apple TV, dzięki czemu użytkownicy mogą uzyskać dostęp do zdjęć przechowywanych w iCloud. Udostępniana jest wersja beta oprogramowania Apple TV, która pozwala przetestować najnowszą funkcjonalność AirPlay w aplikacjach i witrynach internetowych na iOS 5. Jeśli chcesz zainstalować wersję beta oprogramowania Apple TV na swoim urządzeniu, musisz najpierw zarejestrować identyfikator UDID swojego urządzenia w portalu programu dla programistów iOS.

Automatyczne liczenie referencji

  • W Xcode, jeśli konfiguracja jest ustawiona na Urządzenie i jest spacja w ścieżce jednego z plików źródłowych (częściej projekt znajduje się w katalogu ze spacjami), krok „Konwertuj na automatyczne zliczanie odwołań” (po wstępnym sprawdzeniu ) zakończy się niepowodzeniem z powodu błędu: Error in format of file: <path>.W przypadku napotkania użytkownik powinien przełączyć się do Symulatora i ponowić próbę migracji.

Kompatybilność binarna

  • W aplikacjach połączonych z pakietem SDK systemu iOS 5 przesunięcia zawartości widoku przewijania nie będą już zaokrąglane do pełnych pikseli podczas gestu szczypania.

GameKit

  • Dane meczów w przypadku meczów turowych są ograniczone do 4 KB.
  • NAPRAWIONY: Automatyczne dopasowanie do kontrolera widoku turowego nie działa. Jako obejście można zastosować zaproszenia lub interfejs API automatycznego dopasowywania bezpośredniego.

iCloud kopii zapasowej

  • Kopie zapasowe utworzone przed 22 września nie są już dostępne. Zdecydowanie zaleca się aktualizację do tej wersji systemu iOS 5, aby móc kontynuować tworzenie kopii zapasowych urządzeń

iCloud Storage

  • W magazynie klucz-wartość iCloud maksymalna liczba kluczy została zwiększona do 256.
  • Wszystkie nowo wygenerowane profile udostępniania są teraz automatycznie włączane dla iCloud. Jeśli korzystasz z profilu Team Provisioning zarządzanego przez Xcode, kliknij Odśwież w Organizatorze Xcode, aby uzyskać nowy profil obsługujący usługę iCloud. Aby włączyć wszystkie inne profile udostępniania dla iCloud, po prostu wygeneruj je ponownie w portalu udostępniania systemu iOS.
  • Jeśli Twoja aplikacja korzysta z NSMetadataQuery class, musisz ustawić predykat, który zostanie teraz honorowany. Ale orzeczenie jest NSPredicate-style predykat, a nie predykat w stylu Spotlight. Przykładem różnicy jest to, że musisz użyć LIKE zamiast = do dopasowywania symboli wieloznacznych. Różnice zdefiniowano bardziej szczegółowo pod adresem:http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Predicates/Articles/pSpotlightComparison.html#//apple_ref/doc/uid/TP40002370-SW1.
  • Połączenia setSortDescriptors: metoda NSMetadataQuery nie jest wspierany.
  • Aby włączyć miejsce w iCloud w swoich aplikacjach w systemie iOS 5, kliknij pole wyboru Włącz uprawnienia w panelu Podsumowanie projektu. Xcode tworzy niestandardowy plik uprawnień dla Twojego projektu, który automatycznie zawiera identyfikator Twojego zespołu. Możesz dodać dodatkowe wartości kontenera iCloud zgodnie z wymaganiami swojej aplikacji. (Pamiętaj, że aby móc korzystać z magazynu iCloud, musisz ponownie wygenerować istniejące profile udostępniania za pomocą Xcode lub w portalu obsługi iOS).
  • Ciąg identyfikatora kontenera, który przekazujesz do URLForUbiquityContainerIdentifier: metoda NSFileManager musi umieść identyfikator zespołu na początku ciągu. Dla wygody możesz przejść nil aby pobrać pierwszy identyfikator kontenera dokumentów określony w uprawnieniach aplikacji.
  • W systemie iOS 5 plików chronionych za pomocą funkcji Data Protection nie można używać za pomocą interfejsów API iCloud Storage.
  • Prezenterzy plików — obiekty, które przyjmują format NSFilePresenter protokołu — nie odbierają niektórych komunikatów, które powinni otrzymać, w tym:

    W ramach obejścia zaimplementuj relinquishPresentedItemToWriter: metodę i sprawdź, czy autor faktycznie napisał, gdy prezenter pliku ponownie odbierze plik.

  • Jeśli zgłosisz błąd związany z interfejsami przechowywania iCloud, dołącz logi zebrane podczas sesji debugowania. Aby wygenerować te dzienniki, musisz zainstalować na swoim urządzeniu specjalny profil debugowania. Profil debugowania można uzyskać z http://connect.apple.com. Ten profil umożliwia generowanie dzienników debugowania potrzebnych do diagnozowania wszelkich problemów z pamięcią masową iCloud. Instrukcje dotyczące zbierania dzienników są następujące:
    1. Zainstaluj profil. (Najłatwiej to zrobić, wysyłając wiadomość do siebie i otwierając załącznik na swoim urządzeniu.)
    2. Odtwórz błąd.
    3. Zsynchronizuj z iTunes, aby pobrać dzienniki z urządzenia.
    4. Dołącz dzienniki do raportu o błędzie. Logi znajdziesz ~/Library/Logs/CrashReporter/MobileDevice/DeviceName/DiagnosticLogs.

    Dzienniki te mogą bardzo szybko powiększyć się, dlatego po odtworzeniu problemu i pobraniu dzienników urządzenia należy usunąć profil.

  • W nazwach plików wielkość liter nie jest uwzględniana w systemie Mac OS X, natomiast w systemie iOS wielkość liter jest uwzględniana. Może to prowadzić do problemów podczas udostępniania plików między nimi za pomocą iCloud. Powinieneś podjąć kroki w systemie iOS, aby uniknąć tworzenia plików, których nazwy różnią się tylko wielkością liter.

iTunes

  • Wersja iTunes dołączona do wersji GM nie umożliwia synchronizacji urządzeń z zainstalowanym oprogramowaniem beta 7. Aby uniknąć tego problemu, wykonaj następujące czynności:
    1. Zsynchronizuj wszystkie urządzenia z zainstalowaną wersją beta 7 z wersją iTunes dołączoną do wersji beta 7.
    2. Zaktualizuj iTunes do wersji dołączonej do wersji GM.
    3. Podłącz urządzenie i zainstaluj oprogramowanie GM. (Pamiętaj, że przy pierwszym podłączeniu urządzenia może pojawić się błąd synchronizacji.)
    4. Po zainstalowaniu oprogramowania GM przywróć dane z kopii zapasowej utworzonej w kroku 1.

Music Player

  • NAPRAWIONY: Podczas usuwania utworu lub wideo z Muzyki/Wideo na urządzeniu następuje awaria aplikacji Music Player.

Bezpieczeństwo

  • W systemie iOS 5 podpisywanie certyfikatów za pomocą podpisów MD5 nie jest obsługiwane. Upewnij się, że certyfikaty korzystają z algorytmów podpisu opartych na SHA1 lub SHA2.

trampolina

  • Powiadomienia push i lokalne dotyczące aplikacji pojawiają się w nowym Centrum powiadomień w systemie iOS 5. Centrum powiadomień wyświetla powiadomienia uznane za „nieprzeczytane”. Aby uwzględnić powiadomienia push i lokalne, które nie mają statusu nieprzeczytanych, ustaw liczbę identyfikatorów aplikacji na 0, aby usunąć powiadomienia tej aplikacji z Centrum powiadomień.

Automatyzacja interfejsu użytkownika

  • Podczas korzystania z performTaskWithPathArgumentsTimeout metoda UIAHost w skrypcie automatyzacji interfejsu użytkownika, w którym interfejs API generuje nadmiernie (powiedzmy tysiące linii tekstu) standardowe wyjście lub błąd standardowy, zadanie może się zablokować do momentu osiągnięcia limitu czasu, w którym to momencie wygeneruje wyjątek JavaScript.
  • Połączenia lock() i unlock() funkcje UIATarget zostały zastąpione lockForDuration() funkcja.
  • W systemie iOS 5 można teraz wyzwolić wykonanie skryptu automatyzacji interfejsu użytkownika na urządzeniu z systemem iOS z terminala hosta za pomocą narzędzia Instrumenty. Polecenie brzmi:
    • instruments -w <device id> -t <template> <application>
  • Korzystając z instrumentów CLI do automatyzacji interfejsu użytkownika, możesz teraz wybrać domyślny szablon automatyzacji i przekazać skrypt oraz ścieżkę wyników do narzędzia jako opcje zmiennych środowiskowych. Na przykład:
    • instruments -w <device id> -t /Developer/Platforms/iPhoneOS.platform/Developer/Library/Instruments/PlugIns/AutomationInstrument.bundle/Contents/Resources/Automation.tracetemplate <application> -e UIASCRIPT <script> -e UIARESULTSPATH <results path>

UIKit

  • Wywołania zwrotne rotacji w systemie iOS 5 nie są stosowane do wyświetlania kontrolerów prezentowanych na pełnym ekranie. Oznacza to, że jeśli Twój kod przedstawia kontroler widoku nad innym kontrolerem widoku, a następnie użytkownik obróci urządzenie do innej orientacji, po zamknięciu kontroler bazowy (tj. kontroler prezentujący) nie otrzyma żadnych wywołań zwrotnych rotacji. Należy jednak pamiętać, że prezentujący kontroler otrzyma plik viewWillLayoutSubviews zadzwoń, gdy zostanie ponownie wyświetlony, i interfaceOrientation można zapytać za pomocą tej metody i użyć jej do prawidłowego rozmieszczenia kontrolera.
  • W iOS 5 UIPickerView klasa nie wysyła swojego pickerView:didSelectRow:inComponent: deleguj komunikat w odpowiedzi na programowy wybór elementu.
  • Powracający nil z tableView:viewForHeaderInSection: metoda (lub jej odpowiednik w stopce) nie jest już wystarczająca do ukrycia nagłówka. Musisz nadpisać tableView:heightForHeaderInSection: i wróć0.0 aby ukryć nagłówek.
  • W iOS 5 UITableView class ma dwie metody przenoszenia jednej komórki z jednego wiersza do drugiego przy użyciu zdefiniowanych parametrów. Te interfejsy API mają:
  • Korzystanie z UIWebView class w Konstruktorze interfejsów, w iOS 5 możliwe jest ustawienie przezroczystego koloru tła. Programiści kompilujący względem nowego SDK mogą sprawdzić swój XIB pod kątem UIWebView przejrzyste ustawienia.
  • W iOS 5 UINavigationBarUIToolbarUITabBar Implementacje uległy zmianie, tak że drawRect: metoda nie jest wywoływana, chyba że jest zaimplementowana w podklasie. Aplikacje, które zostały ponownie zaimplementowanedrawRect: w kategorii dowolnej z tych klas stwierdzi, że drawRect: metoda nie jest wywoływana. UIKit sprawdza łącza, aby zapobiec wywoływaniu tej metody w aplikacjach połączonych wcześniej niż iOS 5, ale nie obsługuje tego projektu w systemie iOS 5 lub nowszym. Aplikacje mogą:
    • Użyj interfejsu API dostosowywania dla pasków w systemie iOS 5 i nowszych wersjach, co jest preferowanym sposobem.
    • Podklasa UINavigationBar (lub inne klasy prętów) i zastąpić drawRect: w podklasie.
  • Połączenia indexPathForRow:inSection:sectionrow metody NSIndexPath teraz użyj NSInteger zamiast NSUInteger, tak aby te typy były zgodne z metodami zdefiniowanymi w UITableView.
  • Zachowanie się UITableView klasy scrollToRowAtIndexPath:atScrollPosition:animated: metoda uległa zmianie. Jeśli pozycja przewijania UITableViewScrollPositionTop orUITableViewScrollPositionBottom zostanie określony, metoda dostosowuje się teraz do górnej i dolnej części pliku contentInset własność.
  • W wersjach wcześniejszych niż iOS 5 plik UIPopoverController class bezwarunkowo ustawiłaby maski autoresizingu kontrolerów widoku, które dostarczały treść dla kontrolera popover. Ustawiłoby to również bezwarunkowo maski autoresize widoków kontrolerów widoku przesuniętych do a UINavigationController obiekt, który był kontrolerem widoku zawartości kontrolera popover UIPopoverController class nie robi już tego w przypadku aplikacji połączonych z systemem iOS 5 lub nowszym. Programiści powinni upewnić się, że maski widoków autoresize są ustawione prawidłowo, aby umożliwić dowolną zmianę rozmiaru w dowolnym kontenerze, a nie tylko w wyskakujących okienkach. Zdejmij maskę (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight) jest uzasadnione.
  • Procedura obsługi zakończenia dla saveToURL:forSaveOperation:completionHandler: jest wywoływany poza skoordynowanym blokiem zapisu.
  • Połączenia autosaveWithCompletionHandler: metoda jest obecnie wywoływana tylko w przypadku oszczędności okresowych, gdy można bezpiecznie wrócić bez zapisywania. Dokumenty należy jednak zapisać, jeślisaveToURL:forSaveOperation:completionHandler: metoda jest wywoływana.

Safari i WebKit

  • W iOS 5 nowa dziedziczona właściwość CSS, -webkit-overflow-scrolling, jest dostępny. Wartość touch umożliwia twórcy stron internetowych włączenie przewijania w stylu natywnym w pliku overflow:scroll elementy. Domyślna wartość tej właściwości to auto, który umożliwia przewijanie jednym palcem bez pędu.
  • Struktura WebKit została zaktualizowana do wersji ściśle odpowiadającej silnikowi używanemu w przeglądarce Safari 5.1 na komputerze stacjonarnym. Istnieje kilka obszarów, o których należy pamiętać w przypadku nowej struktury WebKit w systemie iOS 5. W szczególności w przypadku witryn internetowych i aplikacji natywnych korzystających z UIWebView:
    • Dostępny jest nowy parser zgodny z HTML5.
    • Szerokość układu tekstu może się nieznacznie zmienić, ponieważ zachowanie zaokrąglania wyrazów ma teraz precyzję zmiennoprzecinkową.
    • Poprawiono weryfikację <input type=number> pole formularza, które obejmuje usuwanie zer wiodących i formatowanie liczb.
    • Zdarzenia dotykowe są teraz obsługiwane w polach wejściowych.
    • <input type=range> jest teraz obsługiwany.
    • window.onerror jest teraz obsługiwany.
    • Istnieje nowy agent użytkownika, który nie zawiera informacji o ustawieniach regionalnych w ciągu agenta użytkownika.
    • Adresy URL są teraz kanonizowane poprzez zmianę schematu na małe litery. Jeśli fałszywy adres URL jest używany do przekazywania informacji z UIWebView wracając do kodu natywnego, upewnij się, że schemat jest zawsze pisany małymi literami lub że kod natywny porównuje schemat w sposób nieuwzględniający wielkości liter.

Synchronizacja Wi-Fi

  • Obsługa synchronizacji bezprzewodowej wymaga systemu Mac OS X 10.6.8 lub Lion. Po podłączeniu urządzenia do iTunes za pomocą kabla USB zobaczysz opcję włączenia synchronizacji bezprzewodowej. Zaleca się wykonanie wstępnej synchronizacji za pomocą kabla po przywróceniu urządzenia.
    • Synchronizacja bezprzewodowa uruchamia się automatycznie, gdy urządzenie jest podłączone do zasilania i znajduje się w tej samej sieci, co sparowany komputer. Możesz też ręcznie uruchomić synchronizację z iTunes lub z Ustawienia > Ogólne > Synchronizacja z iTunes (wymagana jest ta sama sieć, co sparowany komputer).
    • Jeśli zauważysz problemy z aplikacjami, multimediami i/lub zdjęciami zsynchronizowanymi z Twoim urządzeniem, możesz zresetować je, a następnie przeprowadzić ponowną synchronizację. Wybierz opcję Ustawienia > Ogólne > Resetuj i wybierz opcję Usuń całą zawartość i ustawienia. Następnie ponownie połącz się z iTunes i zsynchronizuj ponownie.

Narzędzia Xcode

Aby uzyskać informacje na temat zmian w Xcode, Konstruktorze interfejsów, instrumentach i symulatorze iOS, zobacz Informacje o wydaniu Xcode.