Bluetooth на OS X

Поскольку Apple предоставляет высокоуровневым менеджерам и абстракциям, прозрачно выполняющим Bluetooth задачи с установлением соединения для многих типов приложений, Вы никогда, возможно, не должны использовать API, который описывает эта глава. Существуют некоторые исключения к этому, однако, такие как:

В этих приложениях необходимо будет использовать API, который обеспечивают платформы Bluetooth. Для подготовки основы к обсуждению API эта глава сначала описывает реализацию OS X стека протоколов Bluetooth. Затем это описывает различные объекты, методы и функции, доступные в платформах Bluetooth. Для соображений проектирования приложений и основ того, как использовать Bluetooth API для выполнения определенных задач, посмотрите Разработку Приложения Bluetooth.

OS X стек протоколов Bluetooth

Основа OS X поддержка Bluetooth является реализацией Apple стека протоколов Bluetooth. Для ссылки стек протоколов Bluetooth, как определено Bluetooth SIG, описан в Стеке протоколов Bluetooth. Рисунок 2-1 показывает стек протоколов Bluetooth, это встроено в версию 10.2 OS X и позже.

Рисунок 2-1  OS X стек протоколов Bluetooth
The OS X Bluetooth protocol stack

Реализация OS X стека протоколов Bluetooth включает и части в ядре и части пользовательского уровня. Рисунок 2-1 показывает уровни штабеля, существующие в ядре и соответствующие уровни пользовательского уровня, к которым может получить доступ приложение.

Модуль Bluetooth у основания штабеля является аппаратным компонентом, реализующим радио Bluetooth, основную полосу и менеджера по ссылке протоколы. Ни приложение, ни даже узел не имеют доступ к этому уровню штабеля.

Как описано в Стеке протоколов Bluetooth, уровень HCI передает данные и команды от уровней выше к модулю Bluetooth ниже. С другой стороны уровень HCI получает события от модуля Bluetooth и передает их к верхним уровням.

Для реализации функций уровня HCI в ядре Apple определяет абстрактный класс IOBluetoothHCIController. IOBluetoothHCIController является суперклассом другого в объекте ядра, AppleBluetoothUSBHCIController, предоставляющего поддержку для Bluetooth по USB. Поэтому любые аппаратные средства, поддерживающие USB спецификация HCI, должны работать с реализацией Bluetooth на версии 10.2 OS X и позже. Это возможно, несмотря на то, что, конечно, не тривиальный, для разделения на подклассы IOBluetoothHCIController возражают, чтобы обеспечить специфичную для поставщика функциональность или поддерживать Bluetooth по транспорту кроме USB. Если необходимо сделать это, необходимо связаться с Технической поддержкой Разработчика Apple (в http://developer .apple.com/technicalsupport) для помощи.

Apple реализует уровни L2CAP и RFCOMM в ядре. Приложения могут использовать объекты в уровнях пользовательского уровня L2CAP and RFCOMM для доступа к соответствию, в объектах ядра, несмотря на то, что много приложений не должны будут делать так непосредственно.

Вспомните, что обеспечивает L2CAP (протокол адаптации управления логическим каналом):

Уровень L2CAP в ядре обеспечивает транспорт для протоколов более высокого уровня и профилей. Как основной коммуникационный шлюз между двумя устройствами с поддержкой Bluetooth, уровень OS X L2CAP реализует возможность зарегистрироваться как клиент канала L2CAP и данных записи к каналу. Используя функцию мультиплексирования уровня L2CAP, возможно отправить и получить данные к и от уровня RFCOMM и уровня SDP одновременно.

Выше уровня L2CAP в ядре на рисунке 2-1 протокольный уровень RFCOMM. Протокольный уровень RFCOMM в ядре является протоколом эмуляции последовательного порта. Его основная миссия состоит в том, чтобы заставить канал передачи данных появиться как последовательный порт. Это также реализует возможность создать и уничтожить каналы RFCOMM и управлять скоростью канала, как будто это был физический кабель последовательного порта.

Часть штабеля, показанного выше границы пользовательского ядра на рисунке 2-1, доступна для приложений. Уровни L2CAP и RFCOMM в пространстве пользователя не являются копиями уровней L2CAP и RFCOMM в ядре. Вместо этого они представляют пользовательский уровень APIs, который приложение использует для передачи с соответствующими уровнями в ядре.

SDP (протокол обнаружения службы) уровень является большим количеством службы, чем протокол, но это - часть встроенного OS X стек протоколов Bluetooth. Это показано подключенное к уровню пользовательского уровня L2CAP, потому что это использует канал L2CAP для передачи с удаленными bluetooth-устройствами для обнаружения их доступных служб. Apple обеспечивает API SDP, который можно использовать для обнаружения, какие службы устройство поддерживает.

Выше пользовательского уровня уровень RFCOMM является OBEX (объектный обмен) протокольный уровень. Протокол OBEX является подобным ПРОТОКОЛУ HTTP, поддерживающим передачу простых объектов, как файлы, между устройствами. Протокол OBEX использует канал RFCOMM для транспорта из-за общих черт между IrDA (который определяет протокол OBEX), и коммуникация последовательного порта.

В версиях OS X до 10,4, API OBEX обеспечивает примитивные команды, такой как CONNECT, PUT, и GET. Начинаясь в версии 10.4 OS X, Apple представил API, упрощающий общие операции OBEX, найденные в объектных профилях нажатия и передачи файлов, таких как получение и помещение объектов файла на удаленных устройствах. Этот API упрощает для разработчика создавать приложение, придерживающееся требований этих профилей. Обратите внимание на то, что, если Вы захотите использовать OBEX для других профилей, однако, то, вероятно, необходимо будет все еще полагаться на примитивные команды, предоставленные API OBEX. Для получения дополнительной информации о новом API посмотрите Класс OBEXFileTransferServices и Объекты в Соединениях OBEX.

Профили Bluetooth OS X и приложения

В дополнение к протоколам, показанным на рисунке 2-1, OS X реализует несколько профилей Bluetooth. В целом профиль определяет определенное использование протоколов. Рисунок 2-2 показывает, как каждый профиль создается поверх определенных протоколов в OS X стек протоколов Bluetooth.

  Профили Bluetooth OS X рисунка 2-2
OS X Bluetooth profiles

В версии 10.2.8 OS X и позже, доступные профили:

С версией 1.5 программного обеспечения Bluetooth два новых профиля стали доступными:

OS X также обеспечивает много специфичных для Bluetooth приложений. Эти приложения направляют пользователей через различные процедуры установки, такие как конфигурирование новых bluetooth-устройств и коммуникации последовательного порта установки.

В версиях OS X до 10,4, приложения Bluetooth:

В OS X, версии 10.4, Apple представил два новых приложения Bluetooth:

Эти инструменты доступны как часть Аппаратных средств пакет Инструментов IO, который разработчики могут загрузить путем движения в XCode>, Открывают Developer Tool> More Developer Tools … меню в XCode.

Наконец, можно использовать предпочтительную панель Bluetooth в Установках системы для размещения выбранных bluetooth-устройств в категории, такие как избранное. Обратите внимание на то, что предпочтительная панель Bluetooth появляется в Установках системы, только если bluetooth-устройство находится в диапазоне.

OS X Bluetooth обзор API — две платформы

API Bluetooth OS X состоит из двух платформ, обеспечивающих все методы и функции, необходимо получить доступ к специфичной для Bluetooth функциональности в приложении:

Обе платформы находятся в /System/Library/Frameworks и у каждого есть определенная цель.

Платформа Bluetooth

Платформа Bluetooth содержит API, который Вы используете для выполнения специфичных для Bluetooth задач. С методами и функциями в платформе Bluetooth, Вы можете:

  • Создайте и уничтожьте соединения с удаленными устройствами

  • Узнайте службы на удаленное устройство

  • Выполните передачу данных по различным каналам

  • Получите специфичные для Bluetooth коды состояния или сообщения

Bluetooth платформа UI

Платформа UI Bluetooth содержит API, который Вы используете для обеспечения непротиворечивого пользовательского интерфейса в приложениях. Этот API обеспечивает Совместимые водой панели, которые Ваше приложение может представить пользователю. Эти панели помогают пользователю выполнить задачи, такие как создание соединений, соединение с удаленными устройствами и обнаружение служб.

Для максимальной гибкости Bluetooth и Bluetooth платформа UI APIs доступен и в C и в Objective C. Для подчеркивания четности между этими двумя версиями APIs следует соглашению о присвоении имен, упрощающему видеть корреспонденцию между объектами. Например, методы в Objective C API относятся к объекту, представляющему bluetooth-устройство как IOBluetoothDevice. Функции в API C относятся к тому же объекту с IOBluetoothDeviceRef переменная.

Классы Bluetooth

Выбираете ли Вы C или Objective-C для разработки приложения, важно стать довольным объектно-ориентированной перспективой подключений Bluetooth. Платформа Bluetooth определяет объектно-ориентированные абстракции, инкапсулирующие все компоненты в подключении Bluetooth. Каналы, соединения и удаленные устройства все представлены объектами. Даже если Вы принимаете решение разработать приложение Bluetooth в C, это помогает просмотреть различные объекты в соединении как объекты с определенными, четко определенными возможностями и ответственностью. Это помогает Вам визуализировать подключение Bluetooth и отслеживать объем каждого объекта работы.

Этот раздел исследует Objective C классы Bluetooth, описывая их отношения наследования и часть их функциональности и выводя на экран, как они вписываются в стек протоколов. Следующий раздел, Объекты в подключениях Bluetooth, исследует объекты, которые инстанцируют от этих классов, и описывает их динамические отношения в определенном подключении Bluetooth.

Платформа Bluetooth содержит несколько классов, несколько из которых никогда не будут обрабатываться непосредственно никаким приложением. Некоторые классы являются базовыми классами, предоставляющими Вам полезные подклассы. Другие доступны только через экземпляры, создающиеся промежуточными объектами. Тем не менее, понимание иерархии классов даст Вам понимание архитектуры подключения Bluetooth в OS X.

Рисунок 2-3 показывает отношения наследования классов платформы Bluetooth.

Рисунок 2-3  OS X иерархия классов Bluetooth
The OS X Bluetooth class hierarchy

Как Вы видите на рисунке 2-3, отношения наследования среди этих классов несложны. Все классы в платформе Bluetooth наследовались прямо или косвенно от NSObject, который является корневым классом большинства иерархий классов Objective C. NSObject предоставляет своим подклассам возможность вести себя как объекты и с основным интерфейсом к системе во время выполнения для языка Objective C.

Класс IOBluetoothObject

Классы IOBluetoothDevice, IOBluetoothL2CAPChannel и IOBluetoothRFCOMMChannel наследовались от класса IOBluetoothObject. Класс IOBluetoothObject передает возможность реагировать на специфичные для Bluetooth события. Класс IOBluetoothDevice обеспечивает методы экземпляра открыть и закрыть основополосные соединения с удаленным устройством и получить информацию о том соединении.

Версия 10.2.5 OS X включает полностью асинхронные версии методов IOBluetoothDevice, чтобы открыть и закрыть каналы RFCOMM и L2CAP. В Objective C эти методы полагаются на инстанцирование объекта делегата получить уведомления о входящих данных и других обратных вызовах. Объект делегата является просто объектом, выполняющим задачу от имени другого объекта. Например, если приложение Objective C хочет получить уведомления о состоянии канала L2CAP (такой столь же открытый завершенный, или закрытый) это может зарегистрировать свой объект как делегат связанного объекта IOBluetoothL2CAPChannel. Приложение тогда принимает решение реализовать методы делегата что релейная информация о состоянии канала. Когда состояние изменений канала L2CAP, надлежащий метод делегата вызывают, уведомляя приложение.

Поскольку C или приложение C++ не имеют доступа к делегатам Objective C, это регистрирует функции обратного вызова для получения уведомлений о событиях, которыми это интересуется. Платформа Bluetooth следует соглашению о присвоении имен, подчеркивающему функциональное подобие методов делегата и событий. Например, метод делегата Objective C l2capChannelOpenComplete:status: эквивалентно типу события C kIOBluetoothL2CAPChannelEventTypeOpenComplete.

Класс IOBluetoothL2CAPChannel и класс IOBluetoothRFCOMMChannel обеспечивают методы, чтобы записать данные в каналы и зарегистрироваться для различных открытых и близких уведомлений. Эти два класса могут также использовать делегата в качестве цели для данных и событий. Знайте, что для использования в своих интересах делегатов преимуществ обеспечивают, Вы должны:

  • Работайте на версии 10.2.5 OS X или позже

  • Создайте объект делегата и зарегистрируйте его как клиент канала

  • Реализуйте, по крайней мере, входящий метод обратного вызова данных в своем делегате

Для получения дополнительной информации о том, как использовать новые асинхронные методы, посмотрите Используя Делегатов для Получения Асинхронных сообщений.

Класс OBEXSession

Класс OBEXSession (который убывает непосредственно от NSObject) обеспечивает методы, требуемые управлять сеансом OBEX. Класс OBEXSession не наследовался от IOBluetoothObject, потому что определенный транспорт, на котором установлено соединение, является несущественным к реализации протокола OBEX. С некоторой работой Вы могли использовать методы класса OBEXSession для реализации сеанса OBEX по транспорту не-Bluetooth, такому как Ethernet. Класс OBEXSession строго касается подробных данных передачи использования протокола OBEX, независимо от базовой передачи.

Иерархия платформы Bluetooth включает один подкласс класса OBEXSession, класса IOBluetoothOBEXSession. Этот класс обеспечивает методы для управления сеансом OBEX с Bluetooth канал RFCOMM как транспорт.

Класс OBEXFileTransferServices

В версии 10.4 OS X Apple представил класс OBEXFileTransferServices. Наследовавшись от NSObject, новый класс OBEXFileTransferServices поддерживает операции передачи файлов вне PUT и GET примитивы в API OBEX. Используя допустимый объект IOBluetoothOBEXSession, Вы создаете объект OBEXFileTransferServices, который можно использовать для выполнения FTP или объектных операций нажатия.

OBEXFileTransferServices API включает методы делегата, соответствующие соединению класса, разъединению и методам экземпляра манипулирования папкой.

Класс IOBluetoothUserNotification

Класс IOBluetoothUserNotification инкапсулирует пользовательское уведомление, зарегистрированное в системе OS X. Когда Ваше приложение регистрируется для определенных уведомлений (таких как уведомления входящего канала), оно получает объект IOBluetoothUserNotification. Отдельный метод, который обеспечивает класс IOBluetoothUserNotification, позволяет Вам не регистрироваться из этих уведомлений.

Оставление классами

В версии 10.4 OS X Apple представил класс IOBluetoothDeviceInquiry. Подкласс NSObject, класс IOBluetoothDeviceInquiry предназначается для маленького подмножества приложений, которые не могут использовать основанное на GUI обнаружение устройств API, предоставленный в Bluetooth платформа UI. Несмотря на то, что спецификация Bluetooth описывает процесс запроса, существуют серьезные основания не реализовать ее без ограничений (для получения дополнительной информации об этом, посмотрите Запрос и Разбивку на страницы). Класс IOBluetoothDeviceInquiry обеспечивает методы, позволяющие приложениям выполнять запросы Bluetooth при осуществлении ограничений, гарантирующих самый лучший пользовательский опыт.

Остающиеся классы, показанные на рисунке 2-3, касаются реализации протокола обнаружения службы. Вспомните, что информация об услугах, которые предлагает bluetooth-устройство, содержится в базе данных SDP того устройства. База данных SDP включает ряд записей, каждая из которых использует атрибуты службы для описания службы. Класс IOBluetoothSDPServiceRecord обеспечивает методы экземпляра получить информацию об отдельных служебных книжках SDP. Как его имя предполагает, класс IOBluetoothSDPServiceAttribute обеспечивает методы, чтобы создать, инициализировать, и получить информацию об атрибутах служебных книжек SDP.

Информацией, содержавшейся в каждом атрибуте службы, является значение определенного типа (такого как булево значение или текстовая строка) с определенным размером. Устройство должно быть подготовлено к типу и размеру информации, которую это получает в атрибуте службы, таким образом, атрибуты отправляются в элементах данных SDP. Элемент данных SDP является дескриптором типа детали и дескриптором размера части. Класс IOBluetoothSDPDataElement отображает типы данных, описанные в спецификации Bluetooth на различные Фундаментальные классы. Эти классы включают NSNumber, NSString, и NSArray, а также подкласс NSData, IOBluetoothSDPUUID, обеспечивающий методы, чтобы представлять и управлять UUIDs. Кроме того, класс IOBluetoothSDPDataElement обеспечивает методы, чтобы создать, инициализировать, и получить информацию об элементе данных каждого атрибута службы. (NSNumber, NSArray и NSData являются подклассами NSObject; для получения дополнительной информации об этих и других Фундаментальных классах посмотрите Основу ссылка API в Документации Какао.)

Классы Bluetooth в OS X стек протоколов Bluetooth

Отношения наследования, изображенные на рисунке 2-3, выводят на экран иерархическую структуру классов платформы Bluetooth. Это помогает описать их сферы влияния. Рисунок 2-4 показывает классы, что приложения могут использовать (в дополнение к классу IOBluetoothHCIController, который можно разделить на подклассы для поддержки Bluetooth по альтернативному транспорту), и как они вписываются в стек протоколов.

Рисунок 2-4  классы Bluetooth в стеке протоколов Bluetooth
Bluetooth classes in the Bluetooth protocol stack

Следующий раздел описывает объекты, которые инстанцируют от этих классов (за исключением класса IOBluetoothHCIController) и как они сотрудничают для представления соединения с удаленным bluetooth-устройством.

Объекты в подключениях Bluetooth

Можно думать о соединении с удаленным bluetooth-устройством как вертикальная часть через стек протоколов Bluetooth (показанный на рисунке 2-1). В зависимости от точно, какие протоколы включаются, соединение создается из частей от надлежащих уровней. Просмотрите эти части как объекты, и Вы видите, как могло бы быть смоделировано подключение Bluetooth.

В этом разделе описываются роли объектов платформы Bluetooth в подключениях Bluetooth. Примите во внимание, что многие из этих объектов автоматически создаются другими объектами. Когда устройство с поддержкой Bluetooth обнаружено, низкоуровневые драйверы и высокоуровневые менеджеры создают объекты представлять его. Большинство приложений, поэтому, никогда не должно создавать непосредственно многие из этих объектов выполнить их функции.

Для получения дополнительной информации о том, как использовать эти объекты в приложении Bluetooth, посмотрите Разработку Приложения Bluetooth.

Корневой объект

Объект IOBluetoothDevice является корневым объектом каждого подключения Bluetooth. Вы используете этот корневой объект для создания соединений с устройством, включая начальное основополосное соединение. Например, можно открыть L2CAP и методы использования каналов RFCOMM объекта IOBluetoothDevice. Можно также использовать его методы для выполнения поисков службы SDP.

Объект IOBluetoothDevice является единственным объектом в штабеле Bluetooth, который может быть создан без конкретного соединения позади него. Другими словами, это может существовать даже перед созданием основополосного соединения с устройством. Вы могли бы, например, знать адрес устройства от более раннего поиска устройств. Используя этот адрес устройства, можно инстанцировать объекта IOBluetoothDevice представлять устройство. Можно тогда получить доступ к кэшируемой информации об устройстве, таком как имя устройства и атрибуты SDP, при задержке создания основополосного соединения, пока пользователь не выбирает то устройство.

В версии 10.2.4 OS X и позже, объект IOBluetoothDevice включает API для поддержки классификации устройства на основе выбранных пользователями критериев. Новые методы и функции позволяют Вам, «отмечают» устройство как устройство, к которому недавно получают доступ, или как определяемого пользователями фаворита. Ваше приложение может использовать эти новые атрибуты устройств для отображения пользователю только тех устройств в определенной категории. Для получения дополнительной информации об использовании этих атрибутов посмотрите Фильтрацию и Проверку.

Объекты как кабелепроводы данных

Объект IOBluetoothL2CAPChannel представляет кабелепровод данных между локальной переменной и удаленным устройством и является требуемым компонентом в каждом подключении Bluetooth. Это вызвано тем, что уровень L2CAP обеспечивает, протоколы верхнего уровня средств должны связаться через ссылку Bluetooth. Объект IOBluetoothL2CAPChannel обеспечивает методы, чтобы читать из и записать в канал. Это также обеспечивает a setDelegate: метод, позволяющий клиенту регистрировать себя как клиент канала L2CAP.

Объект IOBluetoothL2CAPChannel может также существовать в отсутствие конкретного канала. В отличие от объекта IOBluetoothDevice, однако, это может быть создано только, когда объект IOBluetoothDevice открывает канал L2CAP. Объект IOBluetoothL2CAPChannel может сохраниться после закрытия его связанного канала L2CAP, но это возвратит ошибки для любых вызовов, которые это получает.

Объект IOBluetoothRFCOMMChannel представляет канал RFCOMM. Как объект IOBluetoothL2CAPChannel, объект IOBluetoothRFCOMMChannel обеспечивает API, чтобы открыть и закрыть канал и читать из и записать в канал. Кроме того, объект RFCOMMChannel делает доступным методы для получения уведомлений о событии.

Объекты в соединениях OBEX

Объект OBEXSession представляет соединение OBEX с удаленным устройством. Поскольку это обрабатывает команды, типичные для сеанса OBEX, сам объект является агностиком о типе транспорта, лежащего в основе соединения. Полноценность объекта находится в методах, она обеспечивает объект транспортно-специфичного подкласса, такого как основанный на RFCOMM класс IOBluetoothOBEXSession. Таким образом Ваше приложение Bluetooth никогда не будет создавать или получать доступ к необработанному объекту OBEXSession. Вместо этого это получит объект подкласса OBEXSession, как объект IOBluetoothOBEXSession. С этим объектом это может переопределить некоторые методы класса OBEXSession для управления сеансом OBEX.

Объект IOBluetoothOBEXSession представляет сеанс OBEX с помощью Bluetooth канал RFCOMM в качестве транспорта. Если Ваше приложение действует как сервер OBEX или клиент по каналу RFCOMM, Вы сначала создаете объект IOBluetoothOBEXSession. Затем Вы используете его методы (и часть его суперкласса), чтобы открыть и закрыть транспортное соединение и отправить и получить данные.

При начале в версии 10.4 OS X, если приложение должно выполнить FTP или объектные операции нажатия по OBEX, можно использовать допустимый объект IOBluetoothOBEXSession создать объект OBEXFileTransferServices. Обратите внимание на то, что IOBluetoothOBEXSession не должен быть подключен к удаленному серверу для успешного создания объекта OBEXFileTransferServices. Соединение может быть сделано явно, с помощью одного из методов соединения OBEXFileTransferServices или неявно при вызове любого из его методов передачи файлов.

Объект обнаружения устройств

Несмотря на то, что большинство приложений может выполнить открытие устройств в диапазоне с помощью APIs в Bluetooth платформа UI, некоторые должны выполнить запросы не-GUI. Если Ваше приложение работает в версии 10.4 OS X или позже, можно использовать объект IOBluetoothDeviceInquiry найти устройства в близости к компьютеру и, дополнительно, получить информацию об имени от них.

Важно понять, что процесс запроса устройства, несмотря на то, что это поддерживается спецификацией Bluetooth, может негативно влиять на другие устройства в близости. Поэтому Вы призваны использовать основанные на GUI методы обнаружения устройств Bluetooth, который обеспечивает платформа UI. Для получения дополнительной информации о проблемах, которые могут явиться результатом запросов устройства и страниц, посмотрите Запрос и Разбивку на страницы.

Если Ваше приложение не может использовать основанные на GUI методы обнаружения устройств, можно использовать методы объекта IOBluetoothDeviceInquiry. Перед использованием этого объекта, однако, важно, что Вы знаете и о его встроенных ограничениях и о пределах, которые Ваше приложение должно наблюдать при использовании его. Дополнительные сведения об использовании объекта IOBluetoothDeviceInquiry см. в Запросах Устройства Выполнения.

Объекты, связанные с открытием службы

Существует четыре объекта, поддерживающие SDP-связанные задачи:

  • IOBluetoothSDPServiceRecord

  • IOBluetoothSDPServiceAttribute

  • IOBluetoothSDPDataElement

  • IOBluetoothSDPUUID

Объект IOBluetoothSDPServiceRecord представляет услугу, предложенную bluetooth-устройством. Bluetooth-устройство может сделать несколько служб доступными; каждый описан экземпляром IOBluetoothSDPServiceRecord в его базе данных SDP. Каждый объект IOBluetoothSDPServiceRecord содержит два элемента, вместе, описывающие службу:

  • Ссылка на устройство, предлагающее услугу.

  • NSDictionary атрибутов службы.

Когда клиент SDP (устройство, ищущее определенную службу) выполняет запрос SDP, это ищет служебную книжку, содержащую один или несколько определенные атрибуты.

Объект IOBluetoothSDPServiceAttribute представляет единственный атрибут службы SDP. Объект IOBluetoothSDPServiceRecord может содержать несколько объектов IOBluetoothSDPServiceAttribute в своем экземпляре NSDictionary. Каждый объект IOBluetoothSDPServiceAttribute содержит атрибут ID (16-разрядное целое число без знака) и экземпляр IOBluetoothSDPDataElement, описывающего один из атрибутов службы. Спецификация Bluetooth определяет большое количество атрибутов, которые профиль может использовать для описания службы, в дополнение к тем, профиль определяет. Примерами атрибутов является имя службы, список поддерживаемых профилей Bluetooth и служба ID.

Объект IOBluetoothSDPDataElement представляет единственный элемент данных SDP. Для предупреждения устройства к тому, какой тип и размер данных это собирается получить в элементе данных объект IOBluetoothSDPDataElement предоставляет эту информацию вместе с самими данными. Объект IOBluetoothSDPDataElement содержит:

  • Дескриптор типа элемента данных

  • Дескриптор размера элемента данных (вычисленный от фактического размера элемента данных)

  • Размер элемента данных

  • Само значение элемента данных

Спецификация Bluetooth определяет девять типов элементов данных, включая целое без знака, URL и текстовую строку. Apple отобразил эти типы на надлежащие Фундаментальные классы, такие как NSNumber и NSString. Кроме того, Apple определил класс IOBluetoothSDPUUID для описания UUID (универсально уникальный идентификатор) тип элемента данных. Объект IOBluetoothSDPUUID может представлять UUID любого допустимого размера (16, 32, или 128 битов) и содержит методы, чтобы сравнить UUIDs и преобразовать меньший UUID в больший.

Поскольку OS X автоматически создает объекты IOBluetoothSDPDataElement для большинства операций клиента и сервера, Ваше приложение никогда не должно должно быть явно создавать их. Исключение к этому - то, если Вы планируете определить новую службу SDP и сделать ее доступной для системы. В этом случае Вы будете ценить решение Apple использовать Фундаментальные классы для представления и набора атрибутов службы и типов элементов данных.

Вместо того, чтобы писать много кода для роста служебной книжки можно определить новую службу с помощью набора пар ключ/значение в списке свойств (plist) файл. Можно тогда импортировать этот файл в приложение, с помощью IOBluetoothAddServiceDict функция для создания нового объекта IOBluetoothSDPServiceRecord. IOBluetoothAddServiceDict функционируйте использует свойства в Вашем plist файл для заполнения NSDictionary IOBluetoothSDPServiceRecord атрибутов службы. Для получения дополнительной информации о том, как сделать это, посмотрите Предоставление Новой Услуги.

Bluetooth классы UI

Bluetooth платформа UI обеспечивает объекты, методы, и функционирует, Ваше приложение может использовать для выполнения задач пользовательского интерфейса. Как с API платформы Bluetooth, Bluetooth платформа UI содержит Objective C и версии C его API. Основные объекты в API являются подклассами NSWindowController, поддерживающего загрузку, отображение и закрытие окон, среди прочего.

При помощи объектов пользовательского интерфейса, определенных в Bluetooth UI API, можно получить непротиворечивый стиль через все приложения Bluetooth — не имея необходимость писать код для реализации стандартных задач пользовательского интерфейса, таких как поиск устройств или служб и создания отношений спаренного устройства.

Характерный и для C и для версий Objective C API следующие три объекта:

Фильтрация и проверка

В версии 10.2.4 OS X Bluetooth платформа UI включает поддержку фильтрации и проверки в ее объектах пользовательского интерфейса. Контроллер браузера службы, контроллер селектора устройства и соединяющиеся объекты контроллера позволяют пользователю фильтровать список доступных устройств и служб следующими категориями:

  • Тип устройства

  • Любимые устройства

  • Устройства, к которым недавно получают доступ,

Мало того, что фильтрация сужает список доступных устройств и служб, представленных пользователю, это также упрощает для пользователя соединяться с определенными устройствами. Например, если пользователь отмечает устройство как фаворита, оно перечислено как таковое на всех панелях интерфейса пользователя Bluetooth, который обеспечивает платформа UI. Пользователь может тогда выбрать это любимое устройство, обычно одним щелчком, обойдя процесс обнаружения устройств. Это особенно полезно в среде, заполненной bluetooth-устройствами.

Фильтрация является инициируемым пользователями процессом, разработанным, чтобы упростить для пользователей находить и соединяться с bluetooth-устройствами. Проверка, с другой стороны, инициируется в приложение. Это разработано, чтобы гарантировать, что пользователь может выбрать только те устройства, которые определяют услуги по поддержке приложение. Чтобы выполнить проверку, объекты пользовательского интерфейса, доступные в версии 10.2.4 OS X и позже выполнить запрос SDP на устройстве, пользователь выбирает. Прежде, чем завершить выбор пользователя, объект пользовательского интерфейса проверяет, что устройство действительно предлагает услугу желания приложения. Если это сделает, то приложение, как гарантируют, будет иметь доступ к надлежащей службе. Если это не делает, пользователю предлагают сделать альтернативный выбор.

С проверкой службы часть процесса выбора улучшен пользовательский опыт. Если выбранное устройство является надлежащим или нет, в то время как все еще в контексте процесса выбора, Ваше приложение может быстро сообщить пользователю. Иначе, если выбор недопустим, Ваше приложение должно принять выбор пользователя, выполнить проверку и повторить процесс выбора.

Параметры экрана для панелей интерфейса пользователя

Также представленный в версии 10.2.4 OS X опция выполнить панель интерфейса пользователя как лист на целевом окне или в модальном сеансе.

Лист является диалоговой панелью, это присоединено к ее связанному окну так, чтобы пользователь никогда не терял след, которого окна диалоговое окно принадлежит. В то время как лист открыт, пользователю препятствуют делать что-либо еще в окне, которому принадлежит лист, пока не отклонен лист. Когда лист отклонен, определенный с помощью приложения объект делегата получает результаты действия пользователя.

Путем выполнения панели в модальном сеансе приложение может выполнить длинные операции при тихой отправке событий в панель. Если Вы примете решение выполнить панель интерфейса пользователя в модальном сеансе, то объект пользовательского интерфейса проверит выбор пользователя перед возвратами метода.

Кроме того, весь текст на панели интерфейса пользователя может быть настроен и локализован, независимо от режима отображения.