Apple выпустила iOS 6 beta 3 для разработчиков

Спустя три недели после выпуска iOS 6 beta 2, Apple выпустила третью бета-версию следующего поколения iOS для разработчиков. Новая бета-версия в настоящее время доступна как обновление «по воздуху» для пользователей iOS 6 beta 2, а новая версия должна вскоре появиться в Центре разработчиков Apple iOS.

Неясно, какие изменения включает эта новая бета-версия, но они, скорее всего, связаны с исправлением ошибок и улучшением производительности. Мы изучим эту новую бета-версию и сообщим о любых обнаруженных нами новинках. Если вы обнаружите что-то новое, вы можете сообщить нам по адресу tips@9to5mac.com. 

iOS 6 будет выпущен для широкой публики этой осенью, и это крупное обновление с более чем 200 новыми функциями. Среди новых функций — совершенно новое приложение «Карты» с бэкэндом Apple и функцией 3D Flyover, интеграция с Facebook, улучшенный Siri, расширенные функции «Телефон», улучшенный Safari, улучшенный Mail и улучшения iCloud, такие как общие фотопотоки.

Размеры загрузки: 323 МБ/347 МБ (дельты) для iPhone 4S, 424 МБ (дельты) для iPad третьего поколения.

Вот наша статья со всеми изменениями, обнаруженными на данный момент в бета-версии 3. 

Xcode Preview 3 теперь также выпущен:

Примечания к выпуску после разрыва: 

— В «Настройках» появился новый раздел «Карты» для управления метками единиц измерения (мили или километры), размерами меток и языком меток. Пользователи также могут управлять громкостью пошаговой навигации.

— В Safari теперь вместо текстовых меток используются глифы для закладок, списка для чтения и истории.

— Значок синхронизации списка для чтения в панели меню Safari на iPad

Примечания к выпуску: 

Введение

iOS SDK 6.0 обеспечивает поддержку разработки приложений для iOS и включает полный набор инструментов Xcode, компиляторов и фреймворков для создания приложений для iOS и OS X. Эти инструменты включают среду разработки Xcode и инструмент анализа Instruments, среди многих других.

С помощью этого программного обеспечения вы можете разрабатывать приложения, которые работают на iPhone, iPad или iPod touch под управлением iOS 6. Вы также можете тестировать свои приложения с помощью включенного симулятора iOS, который поддерживает iOS 6. iOS SDK 6.0 требует компьютера Mac под управлением OS X 10.7.4 или выше (Lion).

Эта версия iOS предназначена только для установки на устройства, зарегистрированные в программе разработчиков Apple. Попытка установить эту версию iOS несанкционированным образом может привести к непригодности вашего устройства.

Для получения дополнительной информации и ресурсов поддержки посетите:

http://developer.apple.com/programs/ios/

Сообщения об ошибках

Пожалуйста, сообщайте о любых ошибках, не упомянутых в разделе «Примечания и известные проблемы» (“Notes and Known Issues”), с помощью Apple Bug Reporter на веб-сайте Apple Developer (http://developer.apple.com/bugreporter/). Кроме того, вы можете обсудить эти вопросы и iOS SDK 6 на форумах разработчиков Apple: http://devforums.apple.com. Вы можете получить больше информации об iCloud для разработчиков на: http://developer.apple.com/icloud

Примечания и известные проблемы

Следующие проблемы касаются использования iOS SDK 6.0 для разработки кода.

Адресная книга

  • Когда приложение находится в новом состоянии конфиденциальности и пытается представить ABNewPersonViewController, пользователь не может корректно закрыть этот контроллер представления, даже если он разрешает доступ к контактам. Пользователю необходимо принудительно закрыть приложение и перезапустить его.
  • Запрос доступа к контактам:
    • Пользователи могут предоставлять или запрещать доступ к данным контактов на уровне отдельного приложения. Чтобы запросить доступ к данным контактов, вызовите функцию ABAddressBookRequestAccessWithCompletion после вызова функции ABAddressBookCreateWithOptions. Функция ABAddressBookRequestAccessWithCompletion не блокирует приложение, пока пользователю предлагается предоставить или запретить доступ. До предоставления доступа объект ABAddressBookRef не будет содержать никаких контактов, и любая попытка изменить контакты завершится с ошибкой kABOperationNotPermittedByUserError. Пользователю будет предложено сделать выбор только при первом запросе доступа; последующие вызовы ABAddressBookCreateWithOptions будут использовать существующие разрешения. Обратный вызов вызывается в произвольной очереди. Если объект ABAddressBookRef используется во всем приложении, то все использования должны быть отправлены в ту же очередь, чтобы использовать ABAddressBookRef потокобезопасным способом.
  • Проверка статуса авторизации доступа:
    • Приложение может использовать API статуса авторизации для проверки, может ли оно получить доступ к контактам, календарям, напоминаниям или библиотеке фотографий. Этот API независим от API запроса доступа и не будет запрашивать у пользователя разрешение или запрет доступа. С помощью этого API приложение может настраивать отображение своих элементов пользовательского интерфейса, которые будут получать доступ к классу данных. Например, если доступ к контактам авторизован или не определен, может быть отображена кнопка пользовательского интерфейса для выбора контакта.
    • Для адресной книги вызовите функцию ABAddressBookGetAuthorizationStatus. Для Event Kit вызовите метод класса authorizationStatusForEntityType: класса EKEventStore. Для Assets Library вызовите метод класса authorizationStatus класса ALAssetsLibrary. Значения статусов, которые возвращаются, означают следующее:
      • Статус авторизации не определен – Пользователь еще не принял решение о том, может ли данное приложение получить доступ к классу данных.
      • Статус авторизации ограничен – Данное приложение не авторизовано для доступа к классу данных. Пользователь не может изменить статус данного приложения, возможно, из-за действующих ограничений, таких как родительский контроль.
      • Статус авторизации отклонен – Пользователь явно запретил доступ к классу данных для данного приложения.
      • Статус авторизации авторизован – Данное приложение авторизовано для доступа к классу данных.

Apple TV

  • В некоторых случаях на экране может отображаться неправильное разрешение. Перезапустите Apple TV, чтобы вернуть правильное разрешение.
  • ИСПРАВЛЕНО: Видео Netflix могут не возобновляться с того места, где вы остановились.
  • ИСПРАВЛЕНО: Список истории в приложении YouTube очищается при выходе из приложения и повторном входе.
  • Apple TV может медленно реагировать во время загрузки в фоновом режиме.
  • Apple TV может перезагрузиться при использовании приложения Remote.
  • Apple TV может перезагрузиться при изменении системного языка.
  • Photo Stream не загружается при повторном входе. Перезапустите Apple TV для решения проблемы.
  • Музыка не воспроизводится во время слайд-шоу фотографий.
  • Новые возможности:
    • Выбирайте удаленные динамики в «Настройки» > «AirPlay».
    • Установите экранный код для AirPlay в «Настройки» > «AirPlay».
    • Сохраняйте несколько учетных записей iTunes Store в «Настройки» > «iTunes Store».
    • Нажмите и удерживайте кнопку «Выбрать», чтобы изменить порядок значков в главном меню.
    • Скройте значки главного меню в «Настройки» > «Основные» > «Родительский контроль».

Bonjour

  • Класс NSNetService и API CFNetService по умолчанию не включают P2P-интерфейсы. Для поиска, регистрации или разрешения служб через P2P-интерфейсы приложению необходимо использовать API Bonjour DNSService*(), указанные ниже.
  • Установка параметра interfaceIndex в kDNSServiceInterfaceIndexAny в следующих API по умолчанию не будет включать P2P-интерфейсы. Для включения P2P-интерфейсов теперь необходимо установить флаг kDNSServiceFlagsIncludeP2P при использовании kDNSServiceInterfaceIndexAny или установить interfaceIndex в kDNSServiceInterfaceIndexP2P. Затронутые API:
    • DNSServiceBrowse
    • DNSServiceRegister
    • DNSServiceResolve
    • DNSServiceRegisterRecord
    • DNSServiceQueryRecord

Словарь

  • Существует известная проблема со словарями при попытке определить слово на любом языке, кроме английского или японского. Когда представлена справочная библиотека, пользователю предоставляется возможность скачать словарь – этот загрузка может не начаться. Пользователь может нажать за пределами всплывающего окна на iPad или нажать кнопку «Готово» на iPhone или iPod touch, чтобы закрыть запрос на загрузку.

Event Kit

  • Запрос доступа к календарям или напоминаниям:
    • Пользователи могут предоставлять или запрещать доступ к данным событий и напоминаний на уровне отдельного приложения. Чтобы запросить доступ к данным событий и/или напоминаний, вызовите метод requestAccessToEntityType:completion: класса EKEventStore. Это не заблокирует приложение, пока пользователю предлагается предоставить или запретить доступ. До предоставления доступа для типа сущности магазин событий не будет содержать никаких календарей для этого типа сущности, и любая попытка сохранить данные завершится ошибкой.
    • Пользователю будет предложено сделать выбор только при первом запросе доступа; последующие экземпляры EKEventStore будут использовать существующие разрешения. Обратный вызов вызывается в произвольной очереди.

Game Center

  • При создании новой учетной записи Game Center в приложении на iPad всплывающее окно для выбора месяца рождения отображается без содержимого для выбора.
  • Метод authenticate класса GKLocalPlayer был удален. Аутентификация будет автоматически начинаться при установке обработчика завершения.

iCloud

  • При создании учетной записи iCloud вы можете использовать любой адрес электронной почты Apple ID или существующую учетную запись iCloud. Если у вас была учетная запись MobileMe, которую вы еще не перенесли в iCloud, вы должны сначала перенести ее, посетив http://me.com. Перенос в iCloud доступен только в течение ограниченного времени. Вход в учетную запись MobileMe не поддерживается в iOS 6.
    • Адреса электронной почты icloud.com теперь доступны для пользователей iCloud Mail. Пользователи, регистрирующие новые Apple ID или впервые активирующие Mail в своей учетной записи iCloud, автоматически получат адрес электронной почты @icloud.com вместо адреса электронной почты me.com. Пользователи iCloud с адресами @me.com, которые использовались с iOS 6 beta 3, получат адрес электронной почты @icloud.com, соответствующий их адресу @me.com.
    • Электронная почта icloud.com не может быть отправлена с www.icloud.com. Пользователям следует использовать http://beta.icloud.com в это время, если они хотят отправлять электронную почту со своих адресов icloud.com через веб-браузер.
  • Профили подготовки должны быть включены для iCloud на портале подготовки iOS. Чтобы включить профиль подготовки для iCloud, перейдите в раздел App ID портала подготовки iOS и настройте свой App ID для iCloud. После включения App ID для iCloud перегенерируйте профили подготовки, чтобы включить их для iCloud.
  • Метод setSortDescriptors: класса NSMetadataQuery не поддерживается.
  • В iOS 6 файлы, защищенные Data Protection, не могут использоваться с API iCloud Storage.
  • Имена файлов не чувствительны к регистру в OS X, но чувствительны к регистру в iOS. Это может привести к проблемам при обмене файлами между двумя платформами с использованием iCloud. Вам следует предпринять шаги в iOS, чтобы избежать создания файлов, имена которых различаются только по регистру.
  • Поведение координированных операций чтения в iCloud Documents изменилось. В предыдущих выпусках iOS, когда ваше приложение выполняло координированную операцию чтения файла или пакета, и демон iCloud обнаруживал, что доступна новая версия элемента, координированная операция чтения блокировалась до тех пор, пока новая версия элемента не была загружена и записана на диск.

    Начиная с iOS 6 beta 3, когда вы начинаете координированную операцию чтения файла или пакета, для которого у вас уже есть локальная версия, координированное чтение будет предоставлено как можно скорее, а новая версия, если таковая имеется, будет загружена в фоновом режиме. Этот вызов будет блокироваться по причинам загрузки только в том случае, если у вас нет локальной версии файла.

    Кроме того, когда файл конфликтует, демон iCloud не будет ждать, пока у него будут все проигравшие в конфликте версии файла, чтобы сделать файл доступным для вашего приложения. Он сделает разные версии конфликтующего файла доступными как можно скорее. Ваше приложение может использовать существующую координацию файлов и обратные вызовы UIDocument, чтобы получать уведомления о загрузке и доступности проигравших в конфликте.

iMessage & FaceTime

  • ИСПРАВЛЕНО: Кнопки «Ответить» и «Отклонить» отсутствуют при приеме вызовов в ландшафтной ориентации.

iTunes

  • Для iOS SDK 6.0 требуется iTunes 10.6.3.
  • ИСПРАВЛЕНО: При восстановлении из резервной копии iTunes устройство периодически отображается как новое устройство после перезагрузки. Если это произойдет, настройте устройство как «новое устройство» при запросе восстановления во второй раз. Все данные должны быть восстановлены корректно, но настройки синхронизации, включая расположение приложений в iTunes, будут потеряны.

Карты

  • В iOS 6 и более поздних версиях Map Kit построен на новой инфраструктуре, размещенной Apple. Более ранние выпуски iOS продолжат использовать службу Google.
    • Совместимость API будет поддерживаться (см. ниже известные проблемы).
    • Карты теперь поддерживаются в симуляторе.
    • Картографические данные будут продолжать развиваться — в настоящее время доступно только ограниченное количество спутниковых снимков высокого разрешения.
  • ИСПРАВЛЕНО: Если Карты не работают в фоновом режиме, при запуске из стороннего приложения отображается ошибка «Карты не могут подключиться к Интернету».
  • ИСПРАВЛЕНО: Если Карты еще не были запущены, текущее местоположение не отображается при запуске из стороннего приложения.
  • Приложения маршрутизации, не указывающие файл покрытия во время разработки, всегда будут отображаться в результатах поиска маршрутов Карт.
  • Тестирование и отладка файлов покрытия для приложений маршрутизации поддерживаются только во время разработки через рабочий процесс «Выполнить» Xcode. (Вы можете указать файл покрытия для заданной схемы выполнения, используя панель «Параметры» раздела «Выполнить» редактора схем.) Приложения, которые архивированы и распространены (вне App Store) на устройства, не будут иметь доступа к файлам покрытия приложения.
  • Карты не масштабируются до текущего местоположения при запуске из стороннего приложения.

Newsstand

  • С Newsstand будут работать только простые HTTP-загрузки.

Passbook

  • ИСПРАВЛЕНО: Значок самолета появляется между пунктом отправления и пунктом назначения для всех видов транспорта.
  • Поле «Описание» теперь является обязательным полем для пропуска. Все пропуски, созданные без него, не пройдут проверку и не будут приняты.
  • ИСПРАВЛЕНО: База данных Passbook была сброшена. Вам нужно будет добавить свои пропуска заново.
  • Passbook в симуляторе больше не требует https/ssl при использовании webServiceURL при приеме пропуска.
  • Не удается показать посадочные талоны на экране блокировки.

Напоминания

  • ИСПРАВЛЕНО: Возникают проблемы при добавлении и редактировании напоминаний в приложении «Напоминания» на устройствах iPhone:
    • Кнопка «Готово» отсутствует при добавлении нового напоминания.
    • Приложение аварийно завершает работу при нажатии кнопки «Редактировать» для редактирования напоминания.

Безопасность

  • В iOS 5 не поддерживается подписание сертификата с помощью MD5-подписи. Убедитесь, что сертификаты используют алгоритмы подписи на основе SHA1 или SHA2.
  • В iOS 6 улучшены средства управления конфиденциальностью для календарей, напоминаний, контактов и фотографий.
    • Пользователи будут видеть диалоговые окна доступа, когда приложение пытается получить доступ к любому из этих типов данных. Пользователь может включать и выключать доступ в «Настройки» > «Конфиденциальность».
    • Разработчики могут установить строку «цель» для каждого класса изолированных данных. iOS отображает эту строку пользователям, чтобы помочь им понять, почему запрашиваются их данные. Эти строки можно добавить с помощью редактора проектов Xcode на вкладке «Информация». Соответствующие имена ключей начинаются со строки «Privacy -».
    • Внесены изменения в фреймворки Event Kit и Address Book, чтобы помочь разработчикам с этой функцией.

Симулятор

  • Панель подтверждения удаления приложения в Симуляторе iOS появляется с задержкой.
  • ИСПРАВЛЕНО: Нажатие кнопки покупки в представлении объекта SKStoreProductViewController в Симуляторе iOS приводит к аварийному завершению работы приложения.
  • В Симуляторе iOS не отображаются уведомления о конфиденциальности для приложений, получающих доступ к фотографиям, контактам, календарям и напоминаниям.
  • Загрузка контента, размещенного в рамках внутриигровых покупок, в Симуляторе iOS не поддерживается.
  • При попытке воспроизвести MP3-звук в Симуляторе вы услышите щелчок.
  • ИСПРАВЛЕНО: Использование SDK iOS 5.1 с профилем iPad (Retina) приведет к сбою SpringBoard. SDK iOS 5.1 работает со всеми другими профилями, а SDK iPad (Retina) работает с SDK iOS 6.0.
  • ИСПРАВЛЕНО: Реклама типа ADAdTypeMediumRectangle не отображается в Симуляторе iPad.

Общий фотопоток

  • Пользователь должен перейти в «Настройки» > «iCloud», чтобы убедиться, что он получает уведомления общего фотопотока.
  • Чтобы поделиться фотопотоком с iOS 6 beta, вы должны пригласить кого-либо, используя его адрес электронной почты iCloud, иначе он не получит приглашение.
  • Обновление с iOS 6 beta 1 до beta 2 приведет к повторной загрузке всех ваших общих фотопотоков на устройстве.
  • Функция общего фотопотока установлена в OFF при обновлении с iOS 6 beta 1 до более позднего выпуска. Настройка по умолчанию должна быть ON.
  • Отключение общих фотопотоков может привести к тому, что камера станет неотзывчивой; принудительное закрытие камеры решит эту проблему.

Социальные сети

  • Weibo отображается в приложении «Настройки» только при включенной китайской клавиатуре.
  • Метод requestAccessToAccountsWithType:withCompletionHandler: класса ACAccountStore теперь устарел. Для доступа к учетным записям пользователей используйте метод requestAccessToAccountsWithType:options:completion:. В параметре options этого нового метода передайте nil для доступа к учетным записям Twitter и Weibo. Для доступа к учетным записям Facebook передайте словарь со следующими ключами (которые документированы в ACAccountStore.h):
    • ACFacebookAppIdKey
    • ACFacebookPermissionsKey
    • ACFacebookPermissionGroupKey

    Вам больше не следует добавлять этот словарь в файл Info.plist вашего приложения, как это требовалось в beta 1.

SpringBoard

  • ИСПРАВЛЕНО: После восстановления устройства в iTunes или выполнения «Стереть все содержимое и настройки» текущие обои могут не отображаться до первой перезагрузки устройства.

Строка состояния

  • Теперь можно задавать параметры оттенка строки состояния в файле Info.plist вашего приложения. Вы можете сделать это, чтобы гарантировать, что цвет строки состояния соответствует цвету навигационной панели вашего приложения во время запуска. Чтобы задать оттенок строки состояния, добавьте ключ UIStatusBarTintParameters в ваш файл Info.plist. Значением этого ключа является словарь с соответствующими значениями, описывающими навигационную панель, которую ваше приложение имеет во время запуска. Внутри словаря должен находиться ключ UINavigationBar, значением которого также является словарь. Этот словарь содержит стиль начальной навигационной панели (с ключом Style) и является ли она полупрозрачной (с ключом Translucent). Если ваша навигационная панель использует их, вы также можете указать ее цветовой оттенок (с ключом TintColor) или имя пользовательского фонового изображения (с ключом BackgroundImage).

UIKit

  • В iOS 5.1 класс UISplitViewController использует стиль скользящего представления при представлении левой части (ранее встречался только в Mail). Этот стиль используется, когда представление инициируется либо существующим элементом кнопки панели, предоставляемым методами делегата, либо жестом смахивания в правой части. Для получения этого поведения не требуется дополнительное внедрение API, и все существующие API, включая экземпляр UIPopoverController, предоставляемый делегатом, будут продолжать работать как прежде. Если жест будет неприемлем в вашем приложении, установка свойства presentsWithGesture вашего контроллера разделения на NO отключит жест. Однако отключение жеста не рекомендуется, поскольку его использование поддерживает единообразный пользовательский опыт во всех приложениях.
  • ИСПРАВЛЕНО: В iOS 6 были внесены изменения, чтобы вам больше не нужно было устанавливать делегат и реализовывать метод для распознавателей жестов одним пальцем и одиночных касаний, чтобы они хорошо работали с объектами UIControl.
  • В iOS 6 и более поздних версиях класс UIWebView рисует свое содержимое асинхронно.
  • ИСПРАВЛЕНО: Разработчики, тестирующие Auto Layout с объектами UIScrollView, могут заметить дрожание индикаторов прокрутки на устройствах с дисплеями Retina.
  • Автоповорот изменяется в iOS 6. В iOS 6 метод shouldAutorotateToInterfaceOrientation: класса UIViewController устарел. Вместо него следует использовать методы supportedInterfaceOrientations и shouldAutorotate.
    • Больше ответственности передается приложению и делегату приложения. Теперь контейнеры iOS (например, UINavigationController) не обращаются к своим дочерним элементам, чтобы определить, следует ли им автоматически поворачиваться. По умолчанию поддерживаемые ориентации интерфейса приложения и контроллера представления устанавливаются в UIInterfaceOrientationMaskAll для iPad и UIInterfaceOrientationMaskAllButUpsideDown для iPhone.
    • Поддерживаемые ориентации интерфейса контроллера представления могут меняться со временем. Даже поддерживаемые ориентации интерфейса приложения могут меняться со временем. Система запрашивает у самого верхнего контроллера представления, занимающего весь экран (обычно корневого контроллера представления), его поддерживаемые ориентации интерфейса всякий раз, когда устройство поворачивается или когда контроллер представления представляется в полноэкранном режиме с модальным стилем представления. Кроме того, поддерживаемые ориентации извлекаются только в том случае, если этот контроллер представления возвращает YES из своего метода shouldAutorotate. Система пересекает поддерживаемые ориентации контроллера представления с поддерживаемыми ориентациями приложения (как определено в файле Info.plist или методом делегата приложения application:supportedInterfaceOrientationsForWindow:), чтобы определить, следует ли поворачивать.
    • Система определяет, поддерживается ли ориентация, путем пересечения значения, возвращаемого методом приложения supportedInterfaceOrientationsForWindow:, со значением, возвращаемым методом supportedInterfaceOrientations самого верхнего полноэкранного контроллера.
    • Метод setStatusBarOrientation:animated: не устарел полностью. Однако теперь он работает только в том случае, если метод supportedInterfaceOrientations самого верхнего полноэкранного контроллера представления возвращает 0. Это возлагает ответственность за обеспечение согласованности ориентации строки состояния на вызывающую сторону.
    • Для совместимости контроллеры представления, которые по-прежнему реализуют метод shouldAutorotateToInterfaceOrientation:, не получают новых поведений автоповорота. (Другими словами, они не используют приложение, делегат приложения или файл Info.plist для определения поддерживаемых ориентаций.) Вместо этого метод shouldAutorotateToInterfaceOrientation: используется для синтеза информации, которая была бы возвращена методом supportedInterfaceOrientations.
  • ИСПРАВЛЕНО: В некоторых ситуациях система Auto Layout может автоматически не активироваться для представления. Чтобы обойти эту проблему, переопределите метод класса requiresConstraintBasedLayout в вашем представлении и верните YES из вашей реализации.
  • Методы willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration: и didRotateFromInterfaceOrientation: больше не вызываются для любого контроллера представления, который представляет собой полноэкранное представление поверх себя — например, путем вызова presentViewController:animated:completion:.
    • Вы должны убедиться, что ваши приложения не используют эти методы для управления макетом любых подпредставлений. Вместо этого они должны использовать метод viewWillLayoutSubviews контроллера представления и настраивать макет, используя прямоугольник границ представления.
  • В iOS 6 методы viewWillUnload и viewDidUnload класса UIViewController теперь устарели. Если вы использовали эти методы для освобождения данных, используйте вместо них метод didReceiveMemoryWarning. Вы также можете использовать этот метод для освобождения ссылок на представление контроллера представления, если оно не используется. Вам потребуется проверить, что представление не находится в окне, прежде чем делать это.
  • ИСПРАВЛЕНО: Вызов любого из методов отрисовки атрибутированных строк без указания значения для атрибута NSFontAttributeName, скорее всего, приведет к исключению. Обходное решение заключается в том, чтобы установить значение для ключа NSFontAttributeName перед рисованием или определением размера объекта NSAttributedString.
  • Установка значений свойств shadowOffset или shadowColor объекта UILabel, чье свойство attributedText содержит действительную атрибутированную строку, не поддерживается. Вместо этого используйте атрибут NSShadowAttributeName атрибутированной строки для установки тени.
  • Из-за проблем совместимости атрибут NSBaselineOffsetAttributeName больше не поддерживается в iOS 6.
  • Значение NSTextAlignmentNatural не поддерживается и приведет к исключению при использовании со свойством textAlignment UILabel или при передаче в качестве параметра выравнивания методу drawInRect:withFont:lineBreakMode:alignment: класса NSString.
  • Метод setContentStretch: класса UIView устарел в этом бета-релизе. Для достижения того же эффекта используйте метод resizableImageWithCapInsets: класса UIImage и отображайте изображение с UIImageView.
  • Метод resizableImageWithCapInsets: класса UIImage фактически изменяет размер изображений путем мозаики. В качестве оптимизации производительности он использует растяжение, а не мозаику, когда пользователь не сможет заметить разницу, например, когда растягивается одна колонка или строка. Но в определенных обстоятельствах можно захотеть фактически растянуть некоторую область изображения. В iOS 6 метод resizableImageWithCapInsets:resizingMode: позволяет вызывающему объекту указать режим изменения размера мозаикой или растяжением.
  • Класс UICollectionViewLayout изменился:
    • Класс теперь поддерживает настройку анимаций, создаваемых во время поворота. Названия методов для настройки анимаций вставки и удаления также изменились, чтобы те же точки подключения могли использоваться для поворотов, а также для вставок и удалений.
    • Класс изменил названия некоторых методов. В частности, представления декораций теперь называются не «идентификатор повторного использования», а «тип элемента». Приложения, использующие представления декораций, должны будут изменить свой код и перекомпилировать его, чтобы адаптироваться к этому.
  • ИСПРАВЛЕНО: В iOS 6 была исправлена ошибка, когда UIWebView.isLoading устанавливался в NO до завершения загрузки основного фрейма. Теперь UIWebView.isLoading устанавливается в NO, когда основной фрейм закончил загрузку.
  • Нижняя граница представления UILabel теперь отличается от его базовой линии. Ранее автоположение интерпретировало нижнюю часть UILabel как совпадающую с его базовой линией. Хотя это было удобно во многих случаях, это создавало проблемы, если вы хотели поместить верхнюю границу одной метки против нижней границы другой. В таком сценарии нижняя метка перекрывала верхнюю, а верхние элементы верхней метки могли столкнуться с нижними элементами нижней метки. Теперь автоположение интерпретирует UILayoutAttributeBottom как нижнюю часть текстового поля (предполагая, что метка не больше своего внутреннего размера содержимого), а UILayoutAttributeBaseline как базовую линию текста. Если вы уже создали код для размещения меток в соответствии с нижней или центральной точкой, ваш текст немного сместится, и вам нужно будет скорректировать свои ограничения.
  • Приложения с табличными представлениями в файлах nib или storyboard, созданные с использованием предыдущих версий iOS 6 beta, потребуют чистой сборки с beta 3 и новее.
  • Вот несколько заметок относительно поддержки автоположения для UIScrollView:
    • В целом, автоположение рассматривает верхний, левый, нижний и правый края представления как *видимые* края. То есть, если вы привязываете представление к левому краю его супервида, вы фактически привязываете его к минимальному x-значению границ супервида. Изменение происхождения границ супервида *не* изменяет положение представления.
    • Класс UIScrollView прокручивает свое содержимое, изменяя происхождение своих границ. Чтобы это работало с автоположением, значение верхнего, левого, нижнего и правого краев *внутри* области прокрутки теперь означает края ее содержимого.
    • Ограничения подпредставлений области прокрутки должны приводить к размеру, заполняющему ее, который затем интерпретируется как размер содержимого области прокрутки. (Это не следует путать с методом intrinsicContentSize, используемым для автоположения.) Для определения размера frame области прокрутки с помощью автоположения, ограничения должны быть либо явно указаны относительно ширины и высоты области прокрутки, либо края области прокрутки должны быть связаны с представлениями *вне* ее поддерева.
    • Обратите внимание, что вы можете заставить подпредставление области прокрутки «плавать» (не прокручиваться) поверх другого содержимого прокрутки, создавая ограничения между представлением и представлением вне поддерева области прокрутки, таким как супервид области прокрутки.
    • Вот несколько примеров настройки области прокрутки:
      • Смешанный подход:
        1. Разместите и определите размер вашей области прокрутки с помощью ограничений, внешних по отношению к области прокрутки — то есть свойство translatesAutoresizingMaskIntoConstraints установлено в NO.
        2. Создайте обычное представление содержимого UIView для вашей области прокрутки, которое будет иметь нужный вам размер содержимого. Сделайте его подпредставлением области прокрутки, но позвольте ему продолжать преобразовывать маску авторазмера в ограничения:
          UIView *contentView = [[UIView alloc]
              initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
          [scrollView addSubview:contentView];
          // DON'T change contentView's translatesAutoresizingMaskIntoConstraints,
          // which defaults to YES;
        3. Установите размер содержимого области прокрутки, чтобы он соответствовал размеру представления содержимого:
          [scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
        4. Создайте представления, которые вы хотите поместить внутрь представления содержимого, и настройте их ограничения, чтобы разместить их внутри представления содержимого. В качестве альтернативы вы можете создать поддерево представлений для области прокрутки, настроить ограничения и вызвать метод systemLayoutSizeFittingSize: (с опцией UILayoutFittingCompressedSize), чтобы найти нужный размер для размера вашего представления содержимого и свойство contentSize области прокрутки.
      • Полностью автоматический подход:
        1. В этом случае translatesAutoresizingMaskIntoConstraints должно быть установлено в NO для всех задействованных представлений.
        2. Разместите и определите размер вашей области прокрутки с помощью ограничений, внешних по отношению к области прокрутки.
        3. Используйте ограничения для размещения подпредставлений внутри области прокрутки, убедившись, что ограничения привязаны ко всем четырем краям области прокрутки и не полагаются на область прокрутки для получения своего размера. Простым примером может быть большое представление изображения, которое имеет внутренний размер содержимого, полученный из размера изображения. В методе viewDidLoad вашего контроллера представления вы должны включить код, подобный следующему:
          UIScrollView *scrollView = [[UIScrollView alloc] init];
          UIImageView *imageView = [[UIImageView alloc] init];
          [imageView setImage:[UIImage imageNamed:"MyReallyBigImage"]];
          [self.view addSubview:scrollView];
          [scrollView addSubview:imageView];
          scrollView.translatesAutoresizingMaskIntoConstraints = NO;
          imageView.translatesAutoresizingMaskIntoConstraints = NO;
          NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(scrollView,imageView);
          [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
          [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[scrollView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
          [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];
          [scrollView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[imageView]|" options:0 metrics: 0 viewsDictionary:viewsDictionary]];

          Это даст вам область прокрутки, которая изменяет размер вместе с изменением размера представления контроллера представления (например, при повороте устройства), а представление изображения будет прокручиваемым подпредставлением. Вам не нужно устанавливать размер содержимого области прокрутки.

Safari & WebKit

  • WebKit в iOS теперь поддерживает методы requestAnimationFrame и cancelAnimationFrame в JavaScript, как описано здесь http://www.w3.org/TR/animation-timing/.
    • Обратите внимание, что поскольку спецификация все еще находится в состоянии рабочего черновика, эти методы имеют префикс webkit, поэтому они window.webkitRequestAnimationFramewindow.webkitCancelAnimationFrame.
  • Квота кеша приложений по умолчанию увеличена с 5 МБ до 25 МБ.
  • Порог субдискретизации JPEG увеличен с 2 МП (мегапикселей) до 5 МП на всем поддерживаемом оборудовании, кроме iPhone 3GS и iPod touch (4-го поколения).
  • Добавлена поддержка тегов  в веб-формах. Пользователи могут загружать существующие фотографии и видео из своей фототеки или делать снимки или видео с помощью камеры. Ранее этот элемент управления формой всегда был отключен.
  • С Safari 6.0 в OS X разработчики теперь могут использовать Web Inspector (инструмент веб-разработки) с подключенными устройствами iOS и iOS Simulator. Разработчики могут использовать Web Inspector для отладки Safari и класса UIWebView в своих собственных приложениях, созданных и запускаемых из Xcode. Это заменяет баннер Debug Console в Safari.
  • В iOS 6 и более поздних версиях веб-данные (SQL Web Storage и LocalStorage) из объекта UIWebView могут храниться в каталоге, который будет резервироваться. Чтобы включить резервное копирование этих данных, установите ключ WebKitStoreWebDataForBackup в значение YES в пользовательских настройках вашего приложения. Это следует делать только в том случае, если ваше приложение полагается на данные веб-контента, которые не могут быть перезагружены. Если ваш объект UIWebView открывает ссылки на произвольный веб-контент, этот ключ следует установить в NO. Изменение значения этого ключа не сохранит существующие данные веб-представления.
  • В iOS 6 и более поздних версиях Safari больше не регистрируется для общей схемы feed: RSS/ATOM. Приложениям, которые могут просматривать такие типы лент, рекомендуется зарегистрироваться для этой схемы URL.
  • WebKit больше не создает аппаратные ускоренные слои для элементов с опцией -webkit-transform: preserve-3d. Авторам следует прекратить использование этой опции как способа получения аппаратного ускорения.
  • Экспериментальная поддержка CSS3 Flexbox будет отключена. Пожалуйста, переключитесь с использования -webkit-flexbox и -webkit-inline-flexbox на -webkit-box и -webkit-inline-box.
  • Начиная с iOS 6, встроенные URL YouTube в виде http://www.youtube.com/watch?v=oHg5SJYRHA0 больше не будут работать. Эти URL предназначены для просмотра видео на сайте YouTube, а не для встраивания на веб-страницы. Вместо этого формат, который следует использовать, описан здесь https://developers.google.com/youtube/player_parameters.
  • В iOS 6 свойство keyboardDisplayRequiresUserAction было добавлено в класс UIWebView. Свойство по умолчанию равно YES, что означает, что вызов focus() для элемента формы не вызовет клавиатуру. Изменив свойство на NO, вызов JavaScript focus() для элемента формы сфокусирует элемент и автоматически вызовет клавиатуру.
  • Начиная с iOS 6, вызов focus() для элемента формы в веб-приложении сфокусирует этот элемент.