iOS 6 beta 3 – oto wszystko co nowe + dziennik zmian (artykuł na bieżąco aktualizowany) x14

  Już ponad godzina Premiera Apple iOS beta 6 3 dla twórców aplikacji dla App Store i zawarto w nim szereg zmian, w większości subtelnych, niestety. W tym artykule zamieściliśmy najważniejsze nowości, ale także oficjalny dziennik zmian opublikowany przez firmę.

1. Ponownie nowe menu aplikacji Mapy w tym artykule masz szczegóły.

2. Ulepszono system ostrzegający, gdy aplikacja żąda dostępu do Twoich danych z Książki adresowej.

3. Rozwiązano wiele problemów, które Apple TV miał z aplikacją Netflix, pilotem, pokazami slajdów czy aplikacją YouTube.

4. Naprawiono problem polegający na tym, że przyciski Akceptuj/Odrzuć dla połączeń FaceTime nie były wyświetlane.

5. Na tablecie iPad menu Historia, Lista ulubionych i Czytanie w przeglądarce Safari są teraz dostępne na jednej karcie.

6. Sekcja Prywatność zawiera teraz ikony dla każdej osobnej kategorii.

7. Siri ma trudności z odpowiadaniem na pytania, ale głos został nieco zmodyfikowany przez Apple.

8. Użytkownicy mają możliwość rejestracji adresów e-mail w domenie @icloud.com.

9. Udostępniony strumień zdjęć dociera także do iPhone'a 3GS i iPoda Touch.

10. Funkcja e-maili VIP dostępna jest także dla iPoda Touch.

11. Siri może otworzyć menu AssistiveTouch.

12. Aplikacja Poczta posiada nowy przycisk służący do archiwizacji wiadomości e-mail.

13. Aplikacja Mapy dostarcza informacji o ruchu drogowym w niektórych krajach.

14. Kiedy aktualizujesz aplikację, przycisk Aktualizacje w App Store wyświetli wskaźnik dotyczący postępu instalacji aplikacji.

 

Uwagi i znane problemy

Poniższe problemy dotyczą używania zestawu SDK systemu iOS 6.0 do tworzenia kodu.

Książka adresowa

  • Gdy aplikacja znajduje się w nowym stanie prywatności i próbuje przedstawić plikKontroler ABNewPersonView, użytkownik nie może poprawnie zamknąć tego kontrolera widoku, nawet jeśli zezwala na dostęp do kontaktów. Użytkownik musi wymusić zamknięcie aplikacji i ponowne uruchomienie.
  • Prośba o dostęp do kontaktów:
    • Użytkownicy mogą przyznawać lub odmawiać dostępu do danych kontaktowych dla poszczególnych aplikacji. Aby zażądać dostępu do danych kontaktowych należy wywołać funkcję AAddressBookRequestAccessWithCompletion po wywołaniu funkcji ABAddressBookCreateWithOptions funkcjonować. Funkcja ABAddressBookRequestAccessWithCompletion nie blokuje aplikacji, gdy użytkownik jest proszony o udzielenie lub odmowę dostępu. Do czasu przyznania dostępu, plik ABAddressBookRefobiekt nie będzie zawierał żadnych kontaktów, a każda próba modyfikacji kontaktów zakończy się niepowodzeniem kABOperationNotPermittedByUserErrorbłąd. Użytkownik jest monitowany tylko przy pierwszym żądaniu dostępu; wszelkie kolejne wywołania AAddressBookCreateWithOptions będą korzystać z istniejących uprawnień. Procedura obsługi zakończenia jest wywoływana w dowolnej kolejce. Jeśli obiekt AAddressBookRef jest używany w całej aplikacji, całe użycie musi zostać skierowane do tej samej kolejki, aby można było używać obiektu AAddressBookRef w sposób bezpieczny dla wątków.
  • Sprawdzanie statusu uprawnień dostępu:
    • Aplikacja może skorzystać z interfejsu API stanu autoryzacji, aby sprawdzić, czy może uzyskać dostęp do kontaktów, kalendarzy, przypomnień lub biblioteki zdjęć. Ten interfejs API jest niezależny od interfejsu API żądania dostępu i nie będzie monitował użytkownika o udzielenie lub odmowę dostępu. Dzięki temu interfejsowi API aplikacja może dostosować wyświetlanie elementów interfejsu użytkownika, które będą miały dostęp do klasy danych. Na przykład, jeśli dostęp do kontaktów jest autoryzowany lub nie jest określony, może zostać wyświetlony przycisk interfejsu użytkownika umożliwiający wybranie kontaktu.
    • W przypadku książki adresowej wywołaj funkcję AAddressBookGetAuthorizationStatus. W przypadku zestawu zdarzeń wywołaj metodę klasyauthorizationStatusForEntityType:Sklep EKEvent. W przypadku Biblioteki zasobów wywołaj metodę klasyauthorizationStatus Biblioteka ALAssets. Znaczenie zwracanych wartości statusu jest następujące:
      • Status autoryzacji Nieokreślony - Użytkownik nie dokonał jeszcze wyboru, czy ta aplikacja może uzyskać dostęp do klasy danych.
      • Stan autoryzacji Ograniczony – Ta aplikacja nie ma uprawnień dostępu do klasy danych. Użytkownik nie może zmienić stanu tej aplikacji, prawdopodobnie z powodu aktywnych ograniczeń, takich jak kontrola rodzicielska.
      • Stan autoryzacji odrzucony - Użytkownik wyraźnie odmówił dostępu do klasy danych dla tej aplikacji.
      • Status autoryzacji Autoryzowany – Ta aplikacja ma uprawnienia dostępu do klasy danych.

apple TV

  • W niektórych przypadkach ekran może wyświetlać niewłaściwą rozdzielczość. Uruchom ponownie Apple TV, aby przywrócić prawidłową rozdzielczość.
  • NAPRAWIONO: Filmy z serwisu Netflix mogą nie zostać wznowione od miejsca, w którym je przerwałeś.
  • NAPRAWIONO: Lista historii w aplikacji YouTube jest czyszczona po wyjściu i ponownym wejściu do aplikacji.
  • Gdy w tle trwa pobieranie, Apple TV może reagować wolno.
  • Apple TV może zostać ponownie uruchomiony podczas korzystania z aplikacji Remote.
  • Apple TV może zostać ponownie uruchomiony w przypadku zmiany języka systemu.
  • Strumień zdjęć nie ładuje się przy drugim logowaniu. Uruchom ponownie Apple TV, aby rozwiązać problem.
  • Podczas pokazu slajdów nie jest odtwarzana muzyka.
  • Nowe zachowania:
    • Wybierz głośniki zdalne w Ustawieniach > AirPlay.
    • Ustaw kod ekranowy dla AirPlay w Ustawieniach > AirPlay.
    • Zapisz wiele kont iTunes Store w Ustawieniach > iTunes Store.
    • Naciśnij i przytrzymaj przycisk Wybierz, aby zmienić układ ikon w menu głównym.
    • Ukryj ikony menu głównego w Ustawienia > Ogólne > Kontrola rodzicielska.

Halo

  • Połączenia Usługa NSNet 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 wymienionych poniżej interfejsów API Bonjour DNSService*().
  • Ustawienie parametru interfejsIndex na kDNSServiceInterfaceIndexAny w poniższych interfejsach API nie będzie domyślnie uwzględniać interfejsów P2P. Aby uwzględnić interfejsy P2P, należy teraz ustawić flagę kDNSServiceFlagsIncludeP2P podczas korzystania z kDNSServiceInterfaceIndexAny lub ustawić interfejsIndex na kDNSServiceInterfaceIndexP2P. Interfejsy API, których to dotyczy, mają:
    • Przeglądanie usługi DNS
    • Rejestr usługi DNS
    • Usługa DNSResolve
    • Rekord rejestru usługi DNS
    • Rekord zapytania usługi DNS

Słownik

  • Znany jest problem ze słownikami podczas próby zdefiniowania słowa w jakimkolwiek języku innym niż angielski lub japoński. Po wyświetleniu biblioteki podręcznej użytkownik ma możliwość pobrania słownika – pobieranie może się nie rozpocząć. Użytkownik może dotknąć poza wyskakującym okienkiem na iPadzie lub kliknąć przycisk „Gotowe” na iPhonie lub iPodzie touch, aby odrzucić żądanie pobrania.

Zestaw wydarzeń

  • Prośba o dostęp do kalendarzy lub przypomnień:
    • Użytkownicy mogą przyznawać lub odmawiać dostępu do danych wydarzeń i przypomnień dla poszczególnych aplikacji. Aby zażądać dostępu do danych zdarzeń i/lub przypomnień, wywołaj metodę requestAccessToEntityType:completion: Sklep EKEvent. Nie spowoduje to zablokowania aplikacji, gdy użytkownik zostanie poproszony o udzielenie lub odmowę dostępu. Do czasu przyznania dostępu dla typu encji magazyn zdarzeń nie będzie zawierał żadnych kalendarzy dla tego typu encji, a każda próba zapisania danych zakończy się niepowodzeniem.
    • Użytkownik zostanie zapytany tylko przy pierwszym żądaniu dostępu; wszelkie kolejne wystąpienia EKEventStore będą korzystać z istniejących uprawnień. Procedura obsługi zakończenia jest wywoływana w dowolnej kolejce.

Game Center

  • Podczas tworzenia nowego konta Game Center w aplikacji na iPadzie pojawia się wyskakujące okienko umożliwiające wybranie miesiąca daty urodzenia, bez treści do wyboru.
  • Metoda uwierzytelniania GKLocalPlayer zostało usunięte. Uwierzytelnianie rozpocznie się automatycznie po ustawieniu procedury obsługi uzupełniania.

iCloud

  • Tworząc konto iCloud, możesz użyć dowolnego Apple ID opartego na e-mailu lub możesz skorzystać z istniejącego konta iCloud. Jeśli masz konto MobileMe, którego nie przeniosłeś jeszcze do iCloud, musisz je najpierw przenieść, odwiedzając tę ​​stronęhttp://me.com. Przejście do iCloud jest dostępne tylko przez ograniczony czas. Logowanie do konta MobileMe nie jest obsługiwane w systemie iOS 6. Profile udostępniania muszą być włączone dla usługi iCloud w portalu udostępniania systemu iOS. Aby włączyć profil informacyjny dla iCloud, przejdź do sekcji Identyfikator aplikacji w portalu obsługi iOS i skonfiguruj swój identyfikator aplikacji dla iCloud. Po włączeniu identyfikatora aplikacji dla iCloud wygeneruj ponownie profile udostępniania, aby włączyć je dla iCloud.
    • Adresy e-mail w witrynie icloud.com są teraz dostępne dla użytkowników poczty iCloud. Użytkownicy rejestrujący się w celu uzyskania nowych identyfikatorów Apple ID lub włączający Mail na swoim koncie iCloud po raz pierwszy automatycznie otrzymają adres e-mail @icloud.com zamiast adresu e-mail me.com. Użytkownicy iCloud z adresami @me.com, które były używane w iOS 6 beta 3, otrzymają adres e-mail @icloud.com odpowiadający ich adresowi @me.com.
    • Nie można wysyłać wiadomości e-mail z witryny icloud.com www.icloud.com. Użytkownicy powinni używać http://beta.icloud.com w tej chwili, jeśli chcą wysyłać wiadomości e-mail ze swojego adresu icloud.com za pomocą przeglądarki internetowej.
  • Połączenia setSortDescriptors: metoda NSMetadataQuery nie jest obsługiwana.
  • W systemie iOS 6 plików chronionych za pomocą funkcji Data Protection nie można używać za pomocą interfejsów API iCloud Storage.
  • W nazwach plików wielkość liter nie jest rozróżniana w systemie OS X, ale wielkość liter w systemie iOS jest uwzględniana. Może to prowadzić do problemów podczas udostępniania plików między dwiema platformami za pomocą iCloud. Powinieneś podjąć kroki w systemie iOS, aby uniknąć tworzenia plików, których nazwy różnią się tylko wielkością liter.
  • Zmieniło się zachowanie skoordynowanych operacji odczytu dokumentów iCloud. W poprzednich wersjach systemu iOS, gdy aplikacja wykonywała skoordynowaną operację odczytu pliku lub pakietu, a demon iCloud zauważył, że dostępna jest nowsza wersja elementu, skoordynowana operacja odczytu była blokowana do czasu pobrania nowszej wersji elementu i zapisane na dysku.
    Począwszy od systemu iOS 6 beta 3, gdy rozpoczniesz skoordynowaną operację odczytu pliku lub pakietu, dla którego masz już wersję lokalną, skoordynowany odczyt zostanie przyznany tak szybko, jak to możliwe, a nowa wersja, jeśli taka istnieje, zostanie pobrana tło. To wywołanie zostanie zablokowane z powodów pobierania tylko wtedy, gdy nie masz żadnej wersji pliku dostępnej lokalnie.
    Ponadto, gdy plik jest w konflikcie, demon iCloud nie będzie czekać, aż wszystkie pliki, które utraciły konflikt, będą dostępne, aby udostępnić plik Twojej aplikacji. Udostępni różne wersje pliku będącego w konflikcie tak szybko, jak to możliwe. Twoja aplikacja może korzystać z istniejącej koordynacji plików i Dokument UIDwywołania zwrotne, które mają być powiadamiane, gdy przegrane konflikty zostaną pobrane i będą dostępne.

iMessage i FaceTime

  • NAPRAWIONO: Brakuje przycisków Odbierz i Odrzuć podczas odbierania połączeń w orientacji poziomej.

iTunes

  • Do zestawu iOS SDK 10.6.3 wymagana jest aplikacja iTunes 6.0.
  • NAPRAWIONO: Podczas przywracania z kopii zapasowej iTunes urządzenie sporadycznie pojawia się jako nowe po ponownym uruchomieniu. Jeśli tak się stanie, skonfiguruj urządzenie jako „nowe urządzenie”, gdy pojawi się monit o przywrócenie danych po raz drugi. Wszystkie dane powinny zostać poprawnie przywrócone, ale ustawienia synchronizacji, w tym rozmieszczenie aplikacji w iTunes, zostaną utracone.

Mapy

  • W systemie iOS 6 i nowszych wersjach Map Kit opiera się na nowej infrastrukturze hostowanej przez firmę Apple. Wcześniejsze wersje systemu iOS będą nadal korzystać z usług Google.NAPRAWIONO: Jeśli Mapy nie działają w tle, po uruchomieniu z aplikacji innej firmy wyświetlany jest błąd „Mapy nie mogą połączyć się z Internetem”.
    • Zgodność API zostanie zachowana (zobacz znane problemy poniżej).
    • Mapy są teraz obsługiwane w symulatorze.
    • Dane map będą nadal ewoluować – obecnie dostępna jest tylko ograniczona liczba zdjęć satelitarnych o wysokiej rozdzielczości.
  • NAPRAWIONO: Jeśli Mapy nie zostały jeszcze uruchomione, bieżąca lokalizacja nie pojawia się po uruchomieniu z aplikacji innej firmy.
  • Aplikacje wyznaczające trasę, które podczas opracowywania nie określiły pliku zasięgu, będą zawsze wyświetlane w wynikach wyszukiwania wyznaczania tras w Mapach Google.
  • Testowanie i debugowanie plików pokrycia dla aplikacji routingu jest obsługiwane tylko podczas programowania za pomocą przepływu pracy „Uruchom” Xcode. (Możesz określić plik pokrycia dla danego schematu Uruchom, korzystając z panelu Opcje w sekcji Uruchom w edytorze schematów.) Aplikacje archiwizowane i dystrybuowane (poza App Store) na urządzeniach nie będą miały dostępu do plików pokrycia aplikacji .
  • Mapy nie powiększają bieżącej lokalizacji po uruchomieniu z aplikacji innej firmy.

Kiosk

  • Z Kioskiem będą działać tylko proste pliki do pobrania za pośrednictwem protokołu HTTP.

Książeczka bankowa

  • NAPRAWIONO: Ikona samolotu pojawia się pomiędzy miejscem początkowym i docelowym dla wszystkich rodzajów transportu.
  • Pole „Opis” jest teraz polem wymaganym dla przepustki. Wszystkie przepustki utworzone bez niego nie zostaną zweryfikowane i nie zostaną wykorzystane.
  • NAPRAWIONO: Baza danych Passbook została zresetowana. Konieczne będzie ponowne dodanie karnetów.
  • Passbook w symulatorze nie wymaga już protokołu https/ssl w przypadku korzystania z adresu URL usługi webServiceURL podczas pozyskiwania przepustki.
  • Nie można wyświetlić kart pokładowych na ekranie blokady.

Przypomnienia

  • NAPRAWIONO: Występują problemy podczas dodawania i edytowania przypomnień w aplikacji Przypomnienia na urządzeniach iPhone:
    • Podczas dodawania nowego przypomnienia brakuje przycisku Gotowe.
    • Aplikacja ulega awarii po dotknięciu przycisku Edytuj w celu edycji przypomnienia.

Bezpieczeństwo

  • W systemie iOS 5 podpisywanie certyfikatów podpisem MD5 nie jest obsługiwane. Upewnij się, że certyfikaty korzystają z algorytmów podpisu opartych na SHA1 lub SHA2.
  • W systemie iOS 6 poprawiono kontrolę prywatności Kalendarzy, Przypomnień, Kontaktów i Zdjęć.
    • Użytkownicy zobaczą okna dialogowe dostępu, gdy aplikacja spróbuje uzyskać dostęp do dowolnego z tych typów danych. Użytkownik może włączać i wyłączać dostęp w Ustawieniach > Prywatność.
    • Programiści mogą ustawić ciąg „celu” dla każdej klasy izolowanych danych. iOS wyświetla ten ciąg użytkownikom, aby pomóc im zrozumieć, dlaczego żądano ich danych. Te ciągi można dodać za pomocą edytora projektów Xcode na karcie Informacje. Odpowiednie nazwy kluczy zaczynają się od ciągu „Prywatność -”.
    • Wprowadzono zmiany w frameworkach Event Kit i Address Book, aby pomóc programistom w korzystaniu z tej funkcji.

Symulator

  • Pojawienie się panelu powiadomień z potwierdzeniem usunięcia aplikacji w symulatorze iOS może zająć trochę czasu.
  • NAPRAWIONO: Dotknięcie przycisku kupna w widoku plikuKontroler SKStoreProductView obiekt w symulatorze iOS powoduje awarię aplikacji.
  • W symulatorze systemu iOS nie są wyświetlane żadne alerty dotyczące prywatności dla aplikacji uzyskujących dostęp do zdjęć, kontaktów, kalendarza i przypomnień.
  • Pobieranie treści hostowanych w ramach zakupów w aplikacji w symulatorze iOS nie jest obsługiwane.
  • Podczas próby odtworzenia dźwięku MP3 w symulatorze zamiast tego usłyszysz trzaskający dźwięk.
  • NAPRAWIONO: Używanie zestawu SDK systemu iOS 5.1 z profilem iPada (Retina) spowoduje awarię SpringBoard. Zestaw SDK dla systemu iOS 5.1 współpracuje ze wszystkimi innymi profilami, a zestaw SDK dla iPada (Retina) współpracuje z zestawem SDK dla systemu iOS 6.0.
  • NAPRAWIONO: Reklamy typu ADadTypeMediumRectangle nie pojawiają się w symulatorze iPada.

Udostępniony strumień zdjęć

  • Użytkownik musi przejść do opcji Ustawienia > iCloud, aby mieć pewność, że otrzyma powiadomienia o udostępnionym strumieniu zdjęć.
  • Aby udostępnić strumień zdjęć w wersji beta systemu iOS 6, musisz zaprosić kogoś przy użyciu jego adresu e-mail iCloud, w przeciwnym razie osoba ta nie otrzyma zaproszenia.
  • Aktualizacja z iOS 6 beta 1 do beta 2 spowoduje, że Twoje urządzenie ponownie pobierze wszystkie udostępnione strumienie zdjęć.
  • Funkcja udostępnianego strumienia zdjęć jest wyłączona podczas aktualizacji systemu iOS 6 beta 1 do nowszej wersji. Domyślne ustawienie powinno być włączone.
  • Wyłączenie udostępnianych strumieni zdjęć może spowodować, że aparat przestanie odpowiadać. Wymuszenie zamknięcia aparatu rozwiąże ten problem.

Obserwuj Nas

  • Weibo pojawia się w aplikacji Ustawienia tylko wtedy, gdy włączona jest chińska klawiatura.
  • Połączenia requestAccessToAccountsWithType: withCompletionHandler: Metoda ACAccountStore jest teraz przestarzała. Aby uzyskać dostęp do kont użytkowników, skorzystaj zrequestAccessToAccountsWithType:opcje:ukończenie: metoda. W parametrze opcji tej nowej metody podaj zero, aby uzyskać dostęp do kont na Twitterze i Weibo. Aby uzyskać dostęp do kont na Facebooku, przekaż słownik z następującymi kluczami (które są udokumentowane w ACAccountStore.h): Nie powinieneś już dodawać tego słownika do pliku Info.plist swojej aplikacji, jak było to wymagane w wersji beta 1.
    • ACFacebookAppIdKey
    • ACFacebookPermissionsKey
    • ACFacebookPermissionGroupKey

Trampolina

  • NAPRAWIONO: Po przywróceniu urządzenia w iTunes lub wykonaniu operacji „Wymaż całą zawartość i ustawienia” bieżąca tapeta może nie pojawić się do czasu jednorazowego ponownego uruchomienia urządzenia.

Pasek stanu

  • Można teraz ustawić parametry odcienia paska stanu w pliku Info.plist aplikacji. Można to zrobić, aby podczas uruchamiania mieć pewność, że kolor paska stanu odpowiada kolorowi paska nawigacji aplikacji. Aby ustawić odcień paska stanu, dodaj klucz UIStatusBarTintParameters do pliku Info.plist. Wartością tego klucza jest słownik z odpowiednimi wartościami opisującymi pasek nawigacyjny, jaki posiada Twoja aplikacja w momencie uruchamiania. Wewnątrz słownika powinien znajdować się klucz UINavigationBar, którego wartość jest jednocześnie słownikiem. Słownik ten zawiera informacje o stylu początkowego paska nawigacji (za pomocą klawisza Styl) oraz o tym, czy jest on półprzezroczysty (za pomocą klawisza Półprzezroczysty). Jeśli Twój pasek nawigacyjny ich używa, możesz także określić jego kolor odcienia (za pomocą klawisza TintColor) lub nazwę niestandardowego obrazu tła (za pomocą klawisza BackgroundImage).

UIKit

    • W iOS 5.1 Kontroler UISplitView class przyjmuje styl prezentacji przesuwanej podczas prezentowania widoku z lewej strony (poprzednio widoczny tylko w Mail). Ten styl jest używany, gdy prezentacja jest inicjowana albo przez istniejący element przycisku na pasku dostarczony przez metody delegowania, albo przez gest machnięcia w prawym widoku. Aby uzyskać to zachowanie, nie jest wymagane żadne dodatkowe przyjęcie interfejsu API, a cały istniejący interfejs API, w tym instancja UIPopoverController dostarczona przez delegata, będzie nadal działać jak poprzednio. Jeśli gest nie byłby obsługiwany w Twojej aplikacji, ustaw opcję prezentujeGestem właściwość kontrolera widoku podzielonego na NIE wyłącza ten gest. Jednak odradza się wyłączanie tego gestu, ponieważ jego użycie zapewnia spójne doświadczenie użytkownika we wszystkich aplikacjach.
    • NAPRAWIONO: W iOS 6 wprowadzono zmiany, dzięki którym nie trzeba już ustawiać delegata i implementować metody rozpoznawania gestów jednym palcem i pojedynczym dotknięciem, aby zapewnić ich dobrą współpracę z UIControl obiekty.
    • W systemie iOS 6 i nowszych wersjach plik UIWebView class maluje swoją zawartość asynchronicznie.
    • NAPRAWIONO: Programiści wypróbowują Auto Layout za pomocą UIScrollViewobiekty mogą zauważyć drgania wskaźników przewijania na urządzeniach z wyświetlaczami Retina.
    • Autorotacja zmienia się w iOS 6. W iOS 6powinienAutoobracaćToInterfaceOrientation: metoda UIViewController jest przestarzała. Zamiast tego powinieneś użyćobsługiwane orientacje interfejsu i powinnyAutorotate metody NAPRAWIONO: W niektórych sytuacjach system automatycznego układu może nie włączać się automatycznie w celu wyświetlenia widoku. Aby obejść ten problem, zastąp plik wymaga układu opartego na ograniczeniach class w swoim widoku i zwróć TAK ze swojej implementacji.
      • Większa odpowiedzialność przechodzi na aplikację i delegata aplikacji. Teraz kontenery iOS (takie jakKontroler UINavigation) nie konsultuj się ze swoimi dziećmi, aby ustalić, czy powinny wykonać autorotację. Domyślnie orientacje interfejsu obsługiwane przez aplikację i kontroler widoku są ustawione na UIInterfaceOrientationMaskAll dla idiomu iPada iUIInterfaceOrientationMaskAllButUpsideDowndla idiomu iPhone'a.
      • Orientacje interfejsu obsługiwane przez kontroler widoku mogą zmieniać się w czasie. Nawet obsługiwane orientacje interfejsu aplikacji mogą z czasem się zmieniać. System pyta najwyższy kontroler widoku pełnoekranowego (zwykle kontroler widoku głównego) o obsługiwane orientacje interfejsu za każdym razem, gdy urządzenie się obraca lub gdy kontroler widoku jest prezentowany w modalnym stylu prezentacji pełnoekranowej. Co więcej, obsługiwane orientacje są pobierane tylko wtedy, gdy ten kontroler widoku zwróci TAK ze swojej metody powinnoAutorotate. System krzyżuje obsługiwane orientacje kontrolera widoku z obsługiwanymi orientacjami aplikacji (określonymi w pliku Info.plist lub delegacie aplikacjiaplikacja:obsługiwaneInterfejsOrientacjeForWindow:metoda), aby określić, czy obrócić.
      • System określa, czy orientacja jest obsługiwana, przecinając wartość zwróconą przez aplikacjęobsługiwaneInterfejsOrientacjeForWindow:metodę z wartością zwróconą przezobsługiwane orientacje interfejsu metoda najwyższego kontrolera pełnoekranowego.
      • Połączenia setStatusBarOrientation:animowany:metoda nie jest od razu przestarzała. Jednak teraz działa tylko wtedy, gdyobsługiwane orientacje interfejsu metoda najwyższego kontrolera widoku pełnoekranowego zwraca 0. To nakłada odpowiedzialność za zapewnienie, że orientacja paska stanu jest spójna, w rękach osoby dzwoniącej.
      • Aby zapewnić zgodność, przejrzyj kontrolery, które nadal implementująpowinienAutoobracaćToInterfaceOrientation: metoda nie powoduje uzyskania nowych zachowań związanych z autorotacją. (Innymi słowy, nie wracają do korzystania z aplikacji, delegata aplikacji lub pliku Info.plist w celu określenia obsługiwanych orientacji). Zamiast tego metoda powinnaAutorotateToInterfaceOrientation: używana do syntezy informacji, które zostaną zwrócone przez metodęobsługiwane orientacje interfejsu Metoda.
    • Połączenia willRotateToInterfaceOrientation:czas trwania:,willAnimateRotationToInterfaceOrientation:czas trwania:,didRotateFromInterfaceOrientacja: metody nie są już wywoływane w żadnym kontrolerze widoku, który tworzy prezentację pełnoekranową na sobie — na przykład przez wywołaniepresentViewController:animowany:ukończenie:.W systemie iOS 6 plik zobaczWillUnload i zobaczDidUnload metody UIViewController są teraz przestarzałe. Jeśli korzystałeś z tych metod w celu zwolnienia danych, użyj metody didReceiveMemoryWarningzamiast tego metoda. Możesz także użyć tej metody, aby zwolnić odniesienia do widoku kontrolera widoku, jeśli nie jest on używany. Zanim to zrobisz, musisz sprawdzić, czy widok nie znajduje się w oknie.
      • Powinieneś upewnić się, że Twoje aplikacje nie używają tych metod do zarządzania układem jakichkolwiek widoków podrzędnych. Zamiast tego powinni używać kontrolera widoku viewWillLayoutSubviewsmetodę i dostosuj układ za pomocą prostokąta granic widoku.
    • NAPRAWIONO: Wywoływanie dowolnej metody rysowania ciągów z atrybutami bez określenia wartości dla Nazwa atrybutu NSFont atrybut prawdopodobnie zgłosi wyjątek. Rozwiązaniem jest ustawienie wartości klucza NSFontAttributeName przed narysowaniem lub zmianą rozmiaruNSAttributedString obiekt.
    • Ustawianie wartości dla przesunięcie cienia or kolor cienia właściwości obiektu UILabel, którego przypisanyTekst zawiera prawidłowy ciąg z atrybutem, nie jest obsługiwana. UżyjNazwa atrybutu NSShadow atrybut przypisanego ciągu, aby zamiast tego ustawić cień.
    • Ze względu na problemy związane ze zgodnością, plikNazwa atrybutu NSBaselineOffset atrybut nie jest już obsługiwany w systemie iOS 6.
    • Połączenia NSTextAlignmentNaturalne wartość jest nieobsługiwana i zgłosi wyjątek, gdy zostanie użyta z wyrównanie tekstu właściwość UILabel lub podana jako parametr wyrównania do plikuDrawInRect: withFont:lineBreakMode:alignment: metoda NSString.
    • Metoda setContentStretch: Widok UI zostało uznane za przestarzałe w tej wersji beta. Aby uzyskać ten sam efekt, użyj opcji resizableImageWithCapInsets: metodę UIImage i wyświetl obraz za pomocą UIImageView.
    • Połączenia resizableImageWithCapInsets: metoda UIImage skutecznie zmienia rozmiar obrazów poprzez kafelkowanie. W celu optymalizacji wydajności wykorzystuje rozciąganie zamiast kafelkowania, gdy użytkownik nie byłby w stanie dostrzec różnicy, na przykład podczas rozciągania pojedynczej kolumny lub wiersza. Jednak w pewnych okolicznościach można faktycznie rozciągnąć jakiś obszar obrazu. W systemie iOS 6 metoda resizableImageWithCapInsets:resizingMode: umożliwia wywołującemu określenie trybu zmiany rozmiaru sąsiadującego lub rozciągającego.
    • Połączenia Układ UICollectionViewLayout class uległa zmianie: NAPRAWIONO: W iOS 6 naprawiono błąd, który powodował, że UIWebView.isLoading było ustawione na NIE przed zakończeniem ładowania głównej ramki. Teraz UIWebView.isLoading jest ustawione na NO po zakończeniu ładowania głównej ramki.
      • Klasa obsługuje teraz dostosowywanie animacji tworzonych podczas rotacji. Nazwy metod dostosowywania animacji wstawiania i usuwania również uległy zmianie, dzięki czemu tych samych haków można używać do obracania, a także do wstawiania i usuwania.
      • Klasa zmieniła nazwy niektórych metod. W szczególności widoki dekoracji nie są już określane za pomocą „identyfikatora ponownego użycia”, ale raczej „rodzaju elementu”. Aplikacje korzystające z widoków dekoracyjnych będą musiały zmodyfikować swój kod i przebudować, aby to uwzględnić.
    • Dolna krawędź A UILabel widok różni się teraz od linii bazowej. Poprzednio układ automatyczny interpretował dół etykiety UILabel jako taki sam jak linia bazowa. Choć w wielu przypadkach było to wygodne, powodowało problemy, jeśli górna krawędź jednej etykiety miała przylegać do dolnej krawędzi drugiej. W takim scenariuszu dolna etykieta nakładałaby się na górną, a zjazdy z górnej etykiety mogłyby zderzyć się z wznoszącymi się z dolnej etykiety. Teraz układ automatyczny interpretuje UILayoutAttributeBottom jako dół pola tekstowego (zakładając, że etykieta nie jest większa niż jej wewnętrzny rozmiar zawartości), a UILayoutAttributeBaseline jako linię bazową tekstu. Jeśli masz już kod do układania etykiet według punktu dolnego lub środkowego, tekst będzie się trochę przesuwał i konieczne będzie dostosowanie ograniczeń.
    • Aplikacje z widokami tabel w plikach końcówki lub scenorysu, które zostały utworzone przy użyciu poprzednich wersji beta systemu iOS 6, będą wymagały czystej kompilacji w wersji beta 3 i nowszych.
    • Oto kilka uwag dotyczących obsługi automatycznego układu dlaUIScrollView:
      • Ogólnie rzecz biorąc, układ automatyczny traktuje górną, lewą, dolną i prawą krawędź widoku jako widoczne krawędzie. Oznacza to, że jeśli przypinasz widok do lewej krawędzi jego podglądu, tak naprawdę przypinasz go do minimalnej wartości x granic podglądu. Zmiana początku obwiedni podglądu nie powoduje zmiany położenia widoku.
      • Klasa UIScrollView przewija swoją zawartość, zmieniając pochodzenie jej granic. Aby to działało w przypadku układu automatycznego, znaczenie górnej, lewej, dolnej i prawej krawędzi w widoku przewijania oznacza teraz krawędzie widoku zawartości.
      • Ograniczenia widoków podrzędnych widoku przewijania muszą skutkować rozmiarem do wypełnienia, który jest następnie interpretowany jako rozmiar zawartości widoku przewijania. (Nie należy tego mylić zwewnętrzny rozmiar zawartości metoda używana do automatycznego układu.) Aby dopasować rozmiar ramki widoku przewijania przy automatycznym układzie, ograniczenia muszą być albo wyraźne dotyczące szerokości i wysokości widoku przewijanego, albo krawędzie widoku przewijanego muszą być powiązane z widokami spoza jego poddrzewa.
      • Pamiętaj, że możesz sprawić, że widok podrzędny widoku przewijania będzie sprawiał wrażenie unoszącego się (a nie przewijanego) nad inną przewijaną treścią, tworząc ograniczenia między widokiem a widokiem poza poddrzewem widoku przewijania, takim jak podgląd widoku przewijania.
      • Oto kilka przykładów konfiguracji widoku przewijania:
        • Podejście mieszane:
          1. Ustaw położenie i rozmiar widoku przewijania za pomocą ograniczeń zewnętrznych względem widoku przewijania — tjtłumaczyAutoresizingMaskIntoConstraintswłaściwość jest ustawiona na NIE.
          2. Utwórz równinę Widok UIwidok zawartości dla widoku przewijania, który będzie miał rozmiar, jaki ma mieć Twoja treść. Ustaw go jako widok podrzędny widoku przewijania, ale pozwól mu nadal tłumaczyć maskę automatycznego zmieniania rozmiaru na ograniczenia:
  • UIView *contentView = [[przydział UIView]
  •     initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
  • [scrollView addSubview:contentView];
  • // NIE zmieniaj tłumaczenia contentViewAutoresizingMaskIntoConstraints,
  • // domyślnie TAK;
      1. Ustaw rozmiar zawartości widoku przewijania, aby odpowiadał rozmiarowi widoku treści:
  • [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
      1. Utwórz widoki, które chcesz umieścić w widoku treści i skonfiguruj ich ograniczenia tak, aby umieścić je w widoku treści. Alternatywnie możesz utworzyć poddrzewo widoku, aby przejść do widoku przewijania, skonfigurować ograniczenia i wywołać funkcjęsystemUkładRozmiarRozmiar dopasowania:metoda (zUILayoutFittingSkompresowany rozmiaropcję), aby znaleźć rozmiar, którego chcesz użyć dla rozmiaru widoku zawartości izawartośćRozmiarwłaściwość widoku przewijania.
    • Podejście oparte wyłącznie na automatycznym układzie:
      1. W tym przypadkutłumaczyAutoresizingMaskIntoConstraintsmusi być ustawione na NIE we wszystkich zaangażowanych widokach.
      2. Ustaw położenie i rozmiar widoku przewijania za pomocą ograniczeń zewnętrznych względem widoku przewijania.
      3. Użyj ograniczeń, aby rozmieścić podwidoki w widoku przewijania, upewniając się, że ograniczenia są powiązane ze wszystkimi czterema krawędziami widoku przewijania i nie polegają na widoku przewijania w celu określenia ich rozmiaru.Prostym przykładem może być widok dużego obrazu, który ma wewnętrzny rozmiar zawartości wywodzący się z rozmiaru obrazu. wzobaczDidLoadmetodę kontrolera widoku, należy dołączyć kod podobny do poniższego:
      1. Dałoby to widok przewijania, którego rozmiar zmieniałby się wraz ze zmianą rozmiaru widoku kontrolera widoku (na przykład przy obrocie urządzenia), a widok obrazu byłby przewijanym widokiem podrzędnym. Nie musisz ustawiać rozmiaru zawartości widoku przewijania.

Safari i WebKit

  • WebKit na iOS obsługuje teraz metody requestAnimationFrame i cancelAnimationFrame w JavaScript, jak opisano tutajhttp://www.w3.org/TR/animation-timing/.Domyślny limit pamięci podręcznej aplikacji został zwiększony z 5 MB do 25 MB.
    • Należy zauważyć, że ponieważ specyfikacja jest nadal w wersji roboczej, metody te mają przedrostek webkit, więc są to window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
  • Próg podpróbkowania JPEG został zwiększony z 2 MP (megapikseli) do 5 MP na wszystkich obsługiwanych urządzeniach z wyjątkiem iPhone'a 3GS i iPoda touch (4. generacji).
  • Dodano wsparcie dla tagi w formularzach internetowych. Użytkownicy mogą przesyłać istniejące zdjęcia i filmy ze swojej biblioteki zdjęć lub robić zdjęcia lub nagrywać filmy za pomocą aparatu. Poprzednio ta kontrola formularza była zawsze wyłączona.
  • W przeglądarce Safari 6.0 w systemie OS X programiści mogą teraz korzystać z narzędzia Web Inspector (narzędzia do tworzenia stron internetowych) na podłączonych urządzeniach iOS i symulatorze iOS. Programiści mogą używać Inspektora sieciowego do debugowania przeglądarki Safari i UIWebView class we własnych aplikacjach zbudowanych i uruchamianych z Xcode. Zastępuje to baner konsoli debugowania w przeglądarce Safari.
  • W systemie iOS 6 i nowszych wersjach dane sieciowe (SQL Web Storage i LocalStorage) z pliku aUIWebView obiekt można zapisać w katalogu, którego kopia zapasowa zostanie utworzona. Aby włączyć tworzenie kopii zapasowych tych danych, ustaw klucz WebKitStoreWebDataForBackup na TAK w ustawieniach domyślnych użytkownika aplikacji. Należy to zrobić tylko wtedy, gdy aplikacja korzysta z danych treści internetowych, których nie można ponownie załadować. Jeśli obiekt UIWebView otwiera łącza do dowolnej treści internetowej, ten klucz powinien być ustawiony na NIE. Przełączenie wartości tego klucza nie spowoduje zachowania istniejących danych widoku internetowego.
  • W systemie iOS 6 i nowszych wersjach Safari nie rejestruje się już w typowym kanale RSS/ATOM. Aplikacje, które mogą wyświetlać tego typu kanały, zachęcamy do zarejestrowania się w tym schemacie adresów URL.
  • WebKit nie tworzy już zawsze przyspieszanych sprzętowo warstw dla elementów z opcją -webkit-transform: zachowaj-3d. Autorzy powinni zaprzestać używania tej opcji jako sposobu na uzyskanie przyspieszenia sprzętowego.
  • Eksperymentalna obsługa CSS3 Flexbox zostanie wyłączona. Proszę przejść z używania -webkit-flexbox i -webkit-inline-flexbox na -webkit-box i -webkit-inline-box.
  • Od wersji iOS 6 osadzone adresy URL YouTube w postaci http://www.youtube.com/watch?v=oHg5SJYRHA0 nie będą już działać. Te adresy URL służą do oglądania filmów w witrynie YouTube, a nie do umieszczania ich na stronach internetowych. Zamiast tego format, który należy zastosować, opisano whttps://developers.google.com/youtube/player_parameters.
  • W systemie iOS 6 do klasy UIWebView dodano właściwość klawiaturaDisplayRequiresUserAction. Właściwość domyślnie ma wartość TAK, co oznacza, że ​​wywołanie metody focus() na elemencie formularza nie spowoduje wyświetlenia klawiatury. Zmieniając właściwość na NO, wywołanie funkcji focus() w języku JavaScript na elemencie formularza spowoduje skupienie elementu i automatyczne wyświetlenie klawiatury.
  • Począwszy od iOS 6, wywołanie metody focus() na elemencie formularza w aplikacji internetowej spowoduje skupienie tego elementu.