Apple и другие, такие как Google, LinkedIn и Path, теперь знают, что конфиденциальность синонимична пользовательской информации, и производитель iDevice наконец пытается исправить свои ошибки, требуя в iOS 6 разрешения пользователя, прежде чем приложения смогут получить доступ к каким-либо конфиденциальным данным.
Конгресс, регулирующие органы и защитники прав потребителей в этом году узнали, что приложения загружали данные — такие как полные списки контактов — на свои серверы без уведомления или даже запроса разрешения у пользователей. Apple отреагировала на переполох в феврале, когда представитель заявил, что будущие релизы программного обеспечения будут требовать явного одобрения пользователя.
Вскоре после этого Apple выпустила бета-версию OSX Mountain Lion, и — о чудо — она требовала от приложений запрашивать разрешение и уведомлять пользователей перед обрезкой данных. Теперь iOS 6 делает то же самое.
Согласно разделу «Безопасность» в примечаниях к выпуску:
В iOS 6 система теперь защищает календари, напоминания, контакты и фотографии в рамках инициативы Apple по конфиденциальности данных.
Пользователи увидят диалоговые окна доступа, когда приложение попытается получить доступ к любому из этих типов данных. Пользователь может включать и выключать доступ в «Настройки» > «Конфиденциальность».
Существуют API, позволяющие разработчикам устанавливать строку «цель», которая отображается пользователям, чтобы помочь им понять, почему запрашиваются их данные.
Внесены изменения в фреймворки EventKit и Address Book, чтобы помочь разработчикам с этой функцией.
Предварительная версия iOS 6 от Apple была выпущена во время вступительной речи Worldwide Developers Conference. Сейчас она доступна в бета-версии для разработчиков, но будет выпущена для общественности этой осенью.
Полные примечания к выпуску ниже.
Связанные статьи
- Path удаляет сохраненные данные адресной книги пользователей, выпущено обновление с возможностью отказа. Генеральный директор приносит извинения
- Apple в суде: сбор данных iPhone, дело о патентах Samsung/iPad и двойное выставление счетов iTunes
- Получит ли ваше iOS-устройство все новые функции iOS 6? Вот официальный ответ
Примечания к выпуску SDK для iOS 6
Примечания и известные проблемы
Следующие проблемы относятся к использованию SDK 6.0 для разработки кода. Apple TV
В некоторых случаях на экране может отображаться неправильное разрешение. Перезагрузите Apple TV, чтобы вернуть его к правильному разрешению.
Видео Netflix могут не возобновляться с того места, где вы остановились.
Некоторые видео могут не возобновляться после перемотки вперед или назад. Нажмите кнопку «Меню» на пульте, чтобы вернуться и воспроизвести видео снова.
Кнопка «Воспроизведение/Пауза» может не ставить на паузу музыку, воспроизводимую в фоновом режиме. Перейдите на экран «Сейчас играет», чтобы поставить музыку на паузу.
Список истории в приложении YouTube очищается при выходе и повторном входе в приложение.
Bonjour
Класс NSNetService и API CFNetService по умолчанию не включают P2P-интерфейсы. Для поиска, регистрации или разрешения служб через P2P-интерфейсы приложение должно использовать API Bonjour DNSService*() , указанные ниже.
Установка параметра interfaceIndex в значение kDNSServiceInterfaceIndexAny в следующих API по умолчанию не будет включать P2P-интерфейсы. Чтобы включить P2P-интерфейсы, теперь необходимо установить флаг kDNSServiceFlagsIncludeP2P при использовании kDNSServiceInterfaceIndexAny или установить interfaceIndex в kDNSServiceInterfaceIndexP2P. Затронутые API:
DNSServiceBrowse
DNSServiceRegister
DNSServiceResolve
DNSServiceRegisterRecord
DNSServiceQueryRecord
Game Center
Соединение peer-to-peer не будет работать при определенных сетевых условиях, включая устройства, находящиеся за топологиями double-NAT, подключение между сетями AT&T и Verizon или подключение к международному оператору.
Пользовательский интерфейс запросов друзей в Game Center может зависать до 10 секунд и становиться неотзывчивым. Завершение работы и повторный запуск приложения решают эту проблему.
Просмотр приглашения в игру или пользовательского интерфейса автоматического подбора игроков в вашем приложении может привести к его сбою, если оно не находится в песочнице Game Center. Игры, использующие песочницу, не будут затронуты.
Тайм-ауты ходов в пошаговых играх будут составлять 1/1000 от того, что указано при вызове метода endTurnWithNextParticipants:turnTimeout:matchData: completionHandler: класса GKTurnBasedMatch. Это будет исправлено в следующем релизе.
При запуске приложений с поддержкой Game Center в симуляторе iOS разработчики, входящие в Game Center, взаимодействуют с реальным сервером и данными.
Для решения этой проблемы разработчики, работающие над новыми проектами, а также над проектами, требующими метаданных iTunes Connect, должны работать на реальных устройствах, а не на симуляторе. Разработчики, которые уже выпустили приложения в App Store и хотят разрабатывать с использованием симулятора, могут использовать новые функции iOS 6; однако они должны помнить, что взаимодействуют с реальными игроками, результатами и достижениями.
iCloud
При создании учетной записи iCloud вы можете использовать любой Apple ID, если это полный адрес электронной почты, а не учетная запись MobileMe. Если у вас есть учетная запись MobileMe, вы должны перенести ее в iCloud. Хотя MobileMe будет доступен до 30 июня 2012 года, вход с учетной записью MobileMe не поддерживается в iOS 6. Дополнительную информацию можно найти здесь: http://me.com/move
Профили подготовки должны быть включены для 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, чтобы избежать создания файлов, имена которых отличаются только регистром.
Мастер настройки завершится сбоем, если новая учетная запись будет создана во время первоначальной настройки. Учетная запись будет фактически создана, и пользователь сможет войти и использовать ее позже. Сбой не происходит с существующими учетными записями.
iMessage & FaceTime
Если вы сотрете и восстановите свое устройство, вам потребуется перезагрузить устройство, чтобы отправлять вложения через iMessage.
Если вы измените свой пароль для iMessage или FaceTime, вам придется выключить и включить эти службы в настройках.
Для iMessage переключите переключатель «Настройки» > «Сообщения» > «iMessage».
Для FaceTime переключите переключатель «Настройки» > «FaceTime» > «FaceTime».
IOKit
SpringBoard/BackBoard может аварийно завершить работу во время телефонного звонка, если экран гаснет при использовании громкой связи или наушников.
iTunes
Для iOS SDK 6.0 требуется iTunes 10.6.3.
Wi-Fi Sync с iOS 6 и iTunes 10.6.3 не работает, когда устройство заблокировано и не подключено к питанию. Иногда это может не работать даже при подключении к питанию. В этом случае перезагрузка устройства может решить проблему.
Карты
В iOS 6 и более поздних версиях Map Kit основан на новой инфраструктуре, размещенной Apple. Более ранние версии iOS продолжат использовать службу Google.
Совместимость API будет поддерживаться (см. известные проблемы ниже).
Карты теперь поддерживаются в симуляторе.
Данные карт будут продолжать развиваться — в настоящее время доступно только ограниченное количество спутниковых снимков высокого разрешения.
Если Карты не работают в фоновом режиме, при запуске из стороннего приложения отображается ошибка «Карты не могут подключиться к Интернету».
Если Карты еще не были запущены, текущее местоположение не отображается при запуске из стороннего приложения.
Приложения для построения маршрутов, которые не указывают файл покрытия во время разработки, всегда будут отображаться в результатах поиска маршрутов Карт.
Тестирование и отладка файлов покрытия для приложений построения маршрутов поддерживаются только во время разработки через рабочий процесс «Запуск» Xcode. (Вы можете указать файл покрытия для заданной схемы запуска, используя панель «Параметры» в разделе «Запуск» редактора схем.) Приложения, которые архивируются и распространяются (вне App Store) на устройства, не будут иметь доступа к файлам покрытия приложения.
Карты не увеличивают масштаб до текущего местоположения при запуске из стороннего приложения.
Movie Player
После восстановления видео из резервной копии iCloud миниатюры видео для всех названий отображают одно и то же изображение обложки (полученное из одного из названий в списке), а не каждое свое собственное изображение обложки.
Безопасность
В iOS 5 подписание сертификата с использованием подписи MD5 не поддерживается. Убедитесь, что сертификаты используют алгоритмы подписи на основе SHA1 или SHA2.
В iOS 6 система теперь защищает календари, напоминания, контакты и фотографии в рамках инициативы Apple по конфиденциальности данных.
Пользователи увидят диалоговые окна доступа, когда приложение попытается получить доступ к любому из этих типов данных. Пользователь может включать и выключать доступ в «Настройки» > «Конфиденциальность».
Существуют API, позволяющие разработчикам устанавливать строку «цель», которая отображается пользователям, чтобы помочь им понять, почему запрашиваются их данные.
Внесены изменения в фреймворки EventKit и Address Book, чтобы помочь разработчикам с этой функцией.
Симулятор
Кнопка «Назад» для контроллеров навигации в симуляторах iOS Retina не отображается должным образом.
Панель подтверждения удаления приложения появляется с задержкой в симуляторе iOS.
Нажатие кнопки «Купить» в представлении объекта SKStoreProductViewController в симуляторе iOS приводит к сбою приложения.
В симуляторе iOS не отображаются уведомления о конфиденциальности для приложений, которые получают доступ к фотографиям, контактам, календарям и напоминаниям.
Загрузка контента, размещенного в приложении для покупок, в симуляторе iOS не поддерживается.
При попытке воспроизвести звук MP3 в симуляторе вместо него слышен щелчок.
Общий Фотопоток
Пользователь должен перейти в «Настройки» > «iCloud», чтобы убедиться, что он получает уведомления Общего Фотопотока.
Чтобы поделиться Фотопотоком с бета-версией iOS 6, вы должны пригласить кого-либо, используя их адрес электронной почты iCloud, иначе они не получат приглашение.
Социальные сети
Weibo отображается в приложении «Настройки» только при включенной китайской клавиатуре.
Чтобы получить доступ к учетным записям Facebook через фреймворк «Учетные записи» в вашем приложении, вам необходимо включить ключ ACFacebookClientAccessInfo в файле Info.plist вашего приложения. Содержимое этого ключа представляет собой словарь дополнительных ключей, пример которого приведен здесь:
ACFacebookClientAccessInfoACFacebookAppIdKey
Ваш идентификатор приложения Facebook
ACFacebookAppVersionKey
1.0
ACFacebookPermissionGroupKey
read_write
ACFacebookPermissionsKeyКлючи разрешений FacebookЗначения, которые вы указываете для ключа ACFacebookPermissionGroupKey, являются разрешениями (определенными службой Facebook), которые вы запрашиваете. Значениями ключа ACFacebookPermissionGroupKey могут быть read, write или read_write.
Passbook
Значок самолета появляется между пунктом отправления и назначения для всех видов общественного транспорта.
SpringBoard иногда приостанавливает ShoeboxUIService во время приема пропусков. Обходное решение — повторить попытку приема пропуска.
UIKIT
В 5.1 класс UISplitViewController принимает стиль представления в виде слайда при отображении левого представления (ранее встречался только в Mail). Этот стиль используется, когда представление инициируется либо существующим элементом кнопки панели, предоставляемым методами делегата, либо жестом свайпа внутри правого представления. Для получения такого поведения не требуется дополнительного использования API, и все существующие API, включая экземпляр UIPopoverController, предоставляемый делегатом, будут продолжать работать как прежде. Если жест будет неприемлем в вашем приложении, установка свойства presentsWithGesture вашего контроллера разделения в NO отключит жест. Однако отключение жеста не рекомендуется, поскольку его использование сохраняет единообразный пользовательский опыт во всех приложениях.
В iOS 6 были внесены изменения, чтобы вам больше не нужно было устанавливать делегат и реализовывать метод для распознавателей жестов одиночного пальца и одиночного касания, чтобы они хорошо работали с объектами UIControl.
В iOS 6 и более поздних версиях класс UIWebView асинхронно отрисовывает свое содержимое.
Разработчики, тестирующие Auto Layout с объектами UIScrollView, могут заметить дрожание индикаторов прокрутки на устройствах с Retina-дисплеями.
В iOS 6 метод shouldAutorotateToInterfaceOrientation: класса UIViewController устарел. Вместо него следует использовать метод supportedInterfaceOrientations.
Если контроллер представления не переопределяет метод supportedInterfaceOrientations, UIKit получает данные о поворотах по умолчанию из файла delegate приложения или Info.plist приложения.
Если вы реализуете только метод shouldAutorotateToInterfaceOrientation: в своем контроллере представления, UIKit будет вызывать этот метод несколько раз подряд, чтобы получить эквивалентную информацию, которая была бы предоставлена методом supportedInterfaceOrientations. Это делается исключительно для совместимости. Приложениям рекомендуется перейти на новый API и воспользоваться многочисленными внутренними улучшениями.
Это новое поведение отключено по умолчанию. Чтобы приложение могло протестировать новый API, вам нужно указать аргумент запуска UIApplicationSupportedInterfaceOrientationsIsEnabled со значением YES при запуске вашего приложения. Это можно сделать в редакторе схемы проекта Xcode.
В определенных ситуациях система Auto Layout может автоматически не активироваться для представления. Для решения этой проблемы переопределите метод класса requiresConstraintBasedLayout в вашем представлении и верните YES из вашей реализации.
Методы willRotateToInterfaceOrientation:duration:, willAnimateRotationToInterfaceOrientation:duration: и didRotateFromInterfaceOrientation: больше не вызываются для любого контроллера представления, который отображает представление на полный экран поверх себя — например, путем вызова presentViewController:animated:completion:.
Вы должны убедиться, что ваши приложения не используют эти методы для управления макетом любых подпредставлений. Вместо этого они должны использовать метод viewWillLayoutSubviews контроллера представления и настраивать макет, используя прямоугольник границ представления.
В iOS 6 методы viewWillUnload и viewDidUnload класса UIViewController теперь устарели. Если вы использовали эти методы для освобождения данных, вместо них используйте метод didReceiveMemoryWarning. Вы также можете использовать этот метод для освобождения ссылок на представление контроллера представления, если оно не используется. Вам нужно будет проверить, что представление не находится в окне, прежде чем делать это.
Вызов любого из методов рисования NSString без указания значения для атрибута NSFontAttributeName, скорее всего, приведет к исключению. Обходное решение — установить значение для ключа NSFontAttributeName перед рисованием или определением размера объекта NSAttributedString.
Установка значений для свойств shadowOffset или shadowColor объекта UILabel, свойство attributedText которого содержит допустимую строку атрибутов, не поддерживается. Вместо этого используйте атрибут NSShadowAttributeName строки атрибутов для установки тени.
Значение NSTextAlignmentNatural не поддерживается и будет удалено в следующем релизе.
Safari & WebKit
WebKit в iOS теперь поддерживает методы requestAnimationFrame и cancelAnimationFrame в JavaScript, как описано здесь: Управление временем для анимации на основе скриптов.
Обратите внимание, что поскольку спецификация все еще находится на стадии рабочего черновика, эти методы имеют префикс webkit, поэтому они являются window.webkitRequestAnimationFrame, window.webkitCancelAnimationFrame.
Квота кэша приложений по умолчанию была увеличена с 5 МБ до 25 МБ.
Порог субдискретизации JPEG был увеличен с 2 МП (мегапикселей) до 5 МП на всем поддерживаемом оборудовании, кроме iPhone 3GS и iPod touch (4-го поколения).
Добавлена поддержка тегов в веб-формах. Пользователи могут загружать существующие фотографии и видео из своей фотобиблиотеки или делать снимки или видео с помощью камеры. Ранее этот элемент управления формой всегда был отключен.
С Safari 6.0 на OS X разработчики теперь могут использовать Web Inspector (инструмент веб-разработки) с подключенными устройствами iOS и симулятором iOS. Разработчики могут использовать Web Inspector для отладки Safari и класса UIWebView в своих приложениях, созданных и запущенных из Xcode. Это заменяет баннер консоли отладки в Safari.
В iOS 6 и более поздних версиях веб-данные (SQL Web Storage и LocalStorage) из объекта UIWebView могут храниться в каталоге, который будет резервно копироваться. Чтобы включить резервное копирование этих данных, установите ключ WebKitStoreWebDataForBackup в значение YES в пользовательских настройках вашего приложения. Это следует делать только в том случае, если ваше приложение полагается на данные веб-контента, которые не могут быть перезагружены. Если ваш объект UIWebView открывает ссылки на произвольный веб-контент, этот ключ следует установить в NO. Переключение значения этого ключа не сохранит существующие данные веб-представления.
В iOS 6 и более поздних версиях Safari больше не регистрируется для общей схемы RSS/ATOM feed:. Приложениям, которые могут просматривать такие типы лент, рекомендуется зарегистрировать эту схему URL-адресов.
В бета-версии iOS 6 beta 1 Smart App Banners в Safari отображают информацию App Store о приложении над веб-контентом. В этом релизе интерфейс запуска приложений и функциональность Smart App Banners недоступны.
Пользовательский опыт
Пользователи могут заметить, что звуки нажатия клавиш пропускаются при быстрой печати.
Отображение клавиатуры в ландшафтном режиме, а затем поворот устройства в портретный режим приведет к неправильному расположению клавиатуры. Закрытие клавиатуры, а затем ее повторное открытие в портретном режиме должно решить проблему. Проблема затрагивает только iOS 6 beta 1 и будет исправлена в последующих релизах.
