Спустя три недели после выпуска 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 несанкционированным образом может привести к непригодности вашего устройства.
Для получения дополнительной информации и ресурсов поддержки посетите:
Сообщения об ошибках
Пожалуйста, сообщайте о любых ошибках, не упомянутых в разделе «Примечания и известные проблемы» (“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 BonjourDNSService*(), указанные ниже. - Установка параметра interfaceIndex в
kDNSServiceInterfaceIndexAnyв следующих API по умолчанию не будет включать P2P-интерфейсы. Для включения P2P-интерфейсов теперь необходимо установить флагkDNSServiceFlagsIncludeP2Pпри использованииkDNSServiceInterfaceIndexAnyили установить interfaceIndex вkDNSServiceInterfaceIndexP2P. Затронутые API:DNSServiceBrowseDNSServiceRegisterDNSServiceResolveDNSServiceRegisterRecordDNSServiceQueryRecord
Словарь
- Существует известная проблема со словарями при попытке определить слово на любом языке, кроме английского или японского. Когда представлена справочная библиотека, пользователю предоставляется возможность скачать словарь – этот загрузка может не начаться. Пользователь может нажать за пределами всплывающего окна на 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):ACFacebookAppIdKeyACFacebookPermissionsKeyACFacebookPermissionGroupKey
Вам больше не следует добавлять этот словарь в файл
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.
- Больше ответственности передается приложению и делегату приложения. Теперь контейнеры iOS (например,
- ИСПРАВЛЕНО: В некоторых ситуациях система 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не поддерживается и приведет к исключению при использовании со свойствомtextAlignmentUILabelили при передаче в качестве параметра выравнивания методу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области прокрутки с помощью автоположения, ограничения должны быть либо явно указаны относительно ширины и высоты области прокрутки, либо края области прокрутки должны быть связаны с представлениями *вне* ее поддерева. - Обратите внимание, что вы можете заставить подпредставление области прокрутки «плавать» (не прокручиваться) поверх другого содержимого прокрутки, создавая ограничения между представлением и представлением вне поддерева области прокрутки, таким как супервид области прокрутки.
- Вот несколько примеров настройки области прокрутки:
- Смешанный подход:
- Разместите и определите размер вашей области прокрутки с помощью ограничений, внешних по отношению к области прокрутки — то есть свойство
translatesAutoresizingMaskIntoConstraintsустановлено вNO. - Создайте обычное представление содержимого
UIViewдля вашей области прокрутки, которое будет иметь нужный вам размер содержимого. Сделайте его подпредставлением области прокрутки, но позвольте ему продолжать преобразовывать маску авторазмера в ограничения:UIView *contentView = [[UIView alloc]
initWithFrame:CGRectMake(0,0,contentWidth,contentHeight)];
[scrollView addSubview:contentView];
// DON'T change contentView's translatesAutoresizingMaskIntoConstraints,
// which defaults to YES;
- Установите размер содержимого области прокрутки, чтобы он соответствовал размеру представления содержимого:
[scrollView setContentSize:CGMakeSize(contentWidth,contentHeight)];
- Создайте представления, которые вы хотите поместить внутрь представления содержимого, и настройте их ограничения, чтобы разместить их внутри представления содержимого. В качестве альтернативы вы можете создать поддерево представлений для области прокрутки, настроить ограничения и вызвать метод
systemLayoutSizeFittingSize:(с опциейUILayoutFittingCompressedSize), чтобы найти нужный размер для размера вашего представления содержимого и свойствоcontentSizeобласти прокрутки.
- Разместите и определите размер вашей области прокрутки с помощью ограничений, внешних по отношению к области прокрутки — то есть свойство
- Полностью автоматический подход:
- В этом случае
translatesAutoresizingMaskIntoConstraintsдолжно быть установлено вNOдля всех задействованных представлений. - Разместите и определите размер вашей области прокрутки с помощью ограничений, внешних по отношению к области прокрутки.
- Используйте ограничения для размещения подпредставлений внутри области прокрутки, убедившись, что ограничения привязаны ко всем четырем краям области прокрутки и не полагаются на область прокрутки для получения своего размера. Простым примером может быть большое представление изображения, которое имеет внутренний размер содержимого, полученный из размера изображения. В методе
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.webkitRequestAnimationFrame,window.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, вызов JavaScriptfocus()для элемента формы сфокусирует элемент и автоматически вызовет клавиатуру. - Начиная с iOS 6, вызов
focus()для элемента формы в веб-приложении сфокусирует этот элемент.