├── CHANGELOG.md ├── CODEOWNERS ├── LICENSE ├── PRIVACY.md ├── Package.resolved ├── Package.swift ├── PrivacyInfo.xcprivacy ├── Project-Meta └── Warnings.xcconfig ├── README.md ├── RVS_BlueThoth.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ ├── RVS_BlueThoth.xcscheme │ ├── RVS_BlueThoth_Test_Harness_MacOS.xcscheme │ ├── RVS_BlueThoth_Test_Harness_WatchOS.xcscheme │ └── RVS_BlueThoth_Test_Harness_iOS.xcscheme ├── RVS_BlueThoth.xcworkspace ├── .xcodesamplecode.plist ├── contents.xcworkspacedata └── xcshareddata │ ├── IDEWorkspaceChecks.plist │ └── swiftpm │ └── Package.resolved ├── Sources ├── Meta │ ├── MacOS-Info.plist │ ├── TVOS-Info.plist │ ├── WatchOS-Info.plist │ └── iOS-Info.plist ├── README-PUBLIC.md ├── RVS_BlueThoth │ ├── Implementation │ │ ├── Characteristics │ │ │ ├── CGA_Bluetooth_Characteristic.swift │ │ │ ├── CGA_Bluetooth_Characteristic_BatteryLevel.swift │ │ │ ├── CGA_Bluetooth_Characteristic_CurrentTime.swift │ │ │ ├── CGA_Bluetooth_Characteristic_FirmwareRevision.swift │ │ │ ├── CGA_Bluetooth_Characteristic_HardwareRevision.swift │ │ │ ├── CGA_Bluetooth_Characteristic_LocalTimeInformation.swift │ │ │ ├── CGA_Bluetooth_Characteristic_ManufacturerName.swift │ │ │ ├── CGA_Bluetooth_Characteristic_ModelNumber.swift │ │ │ ├── CGA_Bluetooth_Characteristic_SerialNumber.swift │ │ │ ├── CGA_Bluetooth_Characteristic_SoftwareRevision.swift │ │ │ └── CGA_Bluetooth_Characteristic_SystemID.swift │ │ ├── Descriptors │ │ │ ├── CGA_Bluetooth_Descriptor.swift │ │ │ ├── CGA_Bluetooth_Descriptor_AggregateFormat.swift │ │ │ ├── CGA_Bluetooth_Descriptor_CBUUIDL2CAPPSMCharacteristic.swift │ │ │ ├── CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.swift │ │ │ ├── CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.swift │ │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat.swift │ │ │ ├── CGA_Bluetooth_Descriptor_ServerCharacteristicConfiguration.swift │ │ │ └── CGA_Bluetooth_Descriptor_UserDescription.swift │ │ ├── Peripherals │ │ │ ├── CGA_Bluetooth_Peripheral.swift │ │ │ └── CGA_Bluetooth_Peripheral_Callbacks.swift │ │ └── Services │ │ │ ├── CGA_Bluetooth_Service.swift │ │ │ ├── CGA_Bluetooth_Service_Battery.swift │ │ │ ├── CGA_Bluetooth_Service_CurrentTime.swift │ │ │ └── CGA_Bluetooth_Service_DeviceInfo.swift │ ├── Protocols │ │ ├── internal │ │ │ ├── CGA_Bluetooth_Characteristic_Protocol_Internal.swift │ │ │ ├── CGA_Bluetooth_Descriptor_Protocol_Internal.swift │ │ │ └── CGA_Bluetooth_Service_Protocol_Internal.swift │ │ └── public │ │ │ ├── CGA_Array_Extensions.swift │ │ │ ├── CGA_Bluetooth_Characteristic_Protocol.swift │ │ │ ├── CGA_Bluetooth_Descriptor_Protocol.swift │ │ │ ├── CGA_Bluetooth_Protocols.swift │ │ │ ├── CGA_Bluetooth_Service_Protocol.swift │ │ │ └── CGA_Errors.swift │ ├── RVS_BlueThoth.docc │ │ ├── RVS_BlueThoth.md │ │ └── Resources │ │ │ ├── AddFramework.png │ │ │ ├── CheckoutsDir.png │ │ │ ├── InFrameworksDir.png │ │ │ ├── IncludeProjectFile.png │ │ │ ├── SelectTarget.png │ │ │ └── icon.png │ ├── RVS_BlueThoth.swift │ └── RVS_BlueThoth_Callbacks.swift └── img │ └── icon.png ├── Tests ├── RVS_BlueThoth_Test_Harness_MacOS │ ├── Meta │ │ ├── Info.plist │ │ └── RVS_BlueThoth_Test_Harness_MacOS.entitlements │ └── Source │ │ ├── Main │ │ └── RVS_BlueThoth_Test_Harness_MacOS_AppDelegate.swift │ │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── MacOS-AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_128x128.png │ │ │ │ ├── icon_128x128@2x.png │ │ │ │ ├── icon_16x16.png │ │ │ │ ├── icon_16x16@2x.png │ │ │ │ ├── icon_256x256.png │ │ │ │ ├── icon_256x256@2x.png │ │ │ │ ├── icon_32x32.png │ │ │ │ ├── icon_32x32@2x.png │ │ │ │ ├── icon_512x512.png │ │ │ │ └── icon_512x512@2x.png │ │ │ ├── MacOS-Framework-AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon_128x128.png │ │ │ │ ├── icon_128x128@2x.png │ │ │ │ ├── icon_16x16.png │ │ │ │ ├── icon_16x16@2x.png │ │ │ │ ├── icon_256x256.png │ │ │ │ ├── icon_256x256@2x.png │ │ │ │ ├── icon_32x32.png │ │ │ │ ├── icon_32x32@2x.png │ │ │ │ ├── icon_512x512.png │ │ │ │ └── icon_512x512@2x.png │ │ │ └── reload-icon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── reload-icon~universal@1x.png │ │ │ │ ├── reload-icon~universal@2x.png │ │ │ │ └── reload-icon~universal@3x.png │ │ └── Base.lproj │ │ │ └── Main.storyboard │ │ ├── View Controllers │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_AboutViewController.swift │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_Base_ViewController.swift │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_CharacteristicViewController.swift │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_DiscoveryViewController.swift │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_PeripheralViewController.swift │ │ ├── RVS_BlueThoth_Test_Harness_MacOS_PreferencesViewController.swift │ │ └── RVS_BlueThoth_Test_Harness_MacOS_SplitViewController.swift │ │ └── Window Controllers │ │ └── RVS_BlueThoth_MacOS_Test_Harness_Base_WindowController.swift ├── RVS_BlueThoth_Test_Harness_WatchOS │ ├── RVS_BlueThoth_Test_Harness_WatchOS_App │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-launcher@2x.png │ │ │ │ ├── icon-quicklook38mm@2x.png │ │ │ │ ├── icon-quicklook42mm@2x.png │ │ │ │ ├── icon-quicklook44mm@2x.png │ │ │ │ ├── icon-settings@2x.png │ │ │ │ ├── icon-settings@3x.png │ │ │ │ ├── icon38mm@2x.png │ │ │ │ ├── icon40mm@2x.png │ │ │ │ ├── icon42mm@2x.png │ │ │ │ ├── icon44mm@2x.png │ │ │ │ └── watch-marketing.png │ │ │ └── Contents.json │ │ ├── Base.lproj │ │ │ └── Interface.storyboard │ │ └── Info.plist │ └── RVS_BlueThoth_Test_Harness_WatchOS_Extension │ │ ├── Info.plist │ │ ├── Interface Controllers │ │ ├── Modal │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_AboutInterfaceController.swift │ │ │ └── RVS_BlueThoth_Test_Harness_WatchOS_PrefsInterfaceController.swift │ │ ├── Push │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_CharacteristicInterfaceController.swift │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_DescriptorInterfaceController.swift │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_DeviceInterfaceController.swift │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_DiscoveryInterfaceController.swift │ │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_MainInterfaceController.swift │ │ │ └── RVS_BlueThoth_Test_Harness_WatchOS_ServiceInterfaceController.swift │ │ └── RVS_BlueThoth_Test_Harness_WatchOS_BaseInterfaceController.swift │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_ExtensionDelegate.swift │ │ └── Table Controllers │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_CharacteristicTableController.swift │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_CharacteristicTables.swift │ │ ├── RVS_BlueThoth_Test_Harness_WatchOS_DiscoveryTableController.swift │ │ └── RVS_BlueThoth_Test_Harness_WatchOS_ServiceTableController.swift ├── RVS_BlueThoth_Test_Harness_iOS │ ├── Meta │ │ └── Info.plist │ └── Source │ │ ├── Main │ │ ├── CGA_AppDelegate.swift │ │ └── CGA_Extensions.swift │ │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ ├── iOS-AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-40.png │ │ │ │ ├── icon-40@2x.png │ │ │ │ ├── icon-40@3x.png │ │ │ │ ├── icon-60@2x.png │ │ │ │ ├── icon-60@3x.png │ │ │ │ ├── icon-72.png │ │ │ │ ├── icon-72@2x.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-76@2x.png │ │ │ │ ├── icon-83.5@2x.png │ │ │ │ ├── icon-small-50.png │ │ │ │ ├── icon-small-50@2x.png │ │ │ │ ├── icon-small.png │ │ │ │ ├── icon-small@2x.png │ │ │ │ ├── icon-small@3x.png │ │ │ │ ├── icon.png │ │ │ │ ├── icon@2x.png │ │ │ │ ├── ios-marketing.png │ │ │ │ ├── notification-icon@2x.png │ │ │ │ ├── notification-icon@3x.png │ │ │ │ ├── notification-icon~ipad.png │ │ │ │ └── notification-icon~ipad@2x.png │ │ │ └── iOS-Framework-AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── icon-40.png │ │ │ │ ├── icon-40@2x.png │ │ │ │ ├── icon-40@3x.png │ │ │ │ ├── icon-60@2x.png │ │ │ │ ├── icon-60@3x.png │ │ │ │ ├── icon-72.png │ │ │ │ ├── icon-72@2x.png │ │ │ │ ├── icon-76.png │ │ │ │ ├── icon-76@2x.png │ │ │ │ ├── icon-83.5@2x.png │ │ │ │ ├── icon-small-50.png │ │ │ │ ├── icon-small-50@2x.png │ │ │ │ ├── icon-small.png │ │ │ │ ├── icon-small@2x.png │ │ │ │ ├── icon-small@3x.png │ │ │ │ ├── icon.png │ │ │ │ ├── icon@2x.png │ │ │ │ ├── ios-marketing.png │ │ │ │ ├── notification-icon@2x.png │ │ │ │ ├── notification-icon@3x.png │ │ │ │ ├── notification-icon~ipad.png │ │ │ │ └── notification-icon~ipad@2x.png │ │ └── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ └── View Controllers │ │ ├── Modal Screens │ │ ├── CGA_InfoViewController.swift │ │ └── CGA_SettingsViewController.swift │ │ └── Navigation Screens │ │ ├── CGA_CharacteristicInteractionViewController.swift │ │ ├── CGA_CharacteristicViewController.swift │ │ ├── CGA_DescriptorInteractionViewController.swift │ │ ├── CGA_InitialViewController.swift │ │ ├── CGA_PeripheralViewController.swift │ │ └── CGA_ServiceViewController.swift ├── RVS_BlueThoth_Test_Harness_tvOS │ ├── Meta │ │ └── Info.plist │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── App Icon & Top Shelf Image.brandassets │ │ │ │ ├── App Icon - App Store.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── BottomLayer2.png │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ └── TopLayer2.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── MiddleLayer2.png │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── App Icon.imagestack │ │ │ │ │ ├── Back.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── BottomLayer.png │ │ │ │ │ │ │ └── Contents.json │ │ │ │ │ │ └── Contents.json │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── Front.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ │ └── TopLayer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ │ └── Middle.imagestacklayer │ │ │ │ │ │ ├── Content.imageset │ │ │ │ │ │ ├── Contents.json │ │ │ │ │ │ └── MiddleLayer.png │ │ │ │ │ │ └── Contents.json │ │ │ │ ├── Contents.json │ │ │ │ ├── Top Shelf Image Wide.imageset │ │ │ │ │ ├── AppIcon-1.png │ │ │ │ │ ├── AppIcon-2.png │ │ │ │ │ └── Contents.json │ │ │ │ └── Top Shelf Image.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── TopShelf-1.png │ │ │ │ │ └── TopShelf.png │ │ │ └── Contents.json │ │ └── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ └── Source │ │ ├── Main │ │ └── CGA_AppDelegate.swift │ │ └── View Controllers │ │ ├── Modal │ │ ├── CGA_InfoViewController.swift │ │ └── CGA_SettingsViewController.swift │ │ └── Navigation │ │ ├── CGA_CharacteristicViewController.swift │ │ ├── CGA_ConnectedViewController.swift │ │ ├── CGA_DiscoveryDetailsViewController.swift │ │ ├── CGA_InitialViewController.swift │ │ └── CGA_ServiceViewController.swift └── Shared │ ├── Resources │ ├── Assets.xcassets │ │ ├── BlueThothLogo.imageset │ │ │ ├── AppIcon~universal@1x.png │ │ │ ├── AppIcon~universal@2x.png │ │ │ ├── AppIcon~universal@3x.png │ │ │ └── Contents.json │ │ ├── Gear.imageset │ │ │ ├── Contents.json │ │ │ ├── Gear~universal@1x.png │ │ │ ├── Gear~universal@2x.png │ │ │ └── Gear~universal@3x.png │ │ ├── NoBT.imageset │ │ │ ├── Contents.json │ │ │ ├── NoBT~universal@1x.png │ │ │ ├── NoBT~universal@2x.png │ │ │ └── NoBT~universal@3x.png │ │ └── background-gradient.imageset │ │ │ ├── Contents.json │ │ │ ├── background-gradient~universal@1x.png │ │ │ ├── background-gradient~universal@2x.png │ │ │ └── background-gradient~universal@3x.png │ └── Base.lproj │ │ ├── InfoPlist.strings │ │ └── Localizable.strings │ └── Sources │ ├── CGA_PersistentPrefs.swift │ └── TViOS │ └── CGA_BaseViewController.swift ├── docs ├── framework-internal │ ├── Classes.html │ ├── Classes │ │ ├── CGA_Bluetooth_Characteristic.html │ │ ├── CGA_Bluetooth_Characteristic_BatteryLevel.html │ │ ├── CGA_Bluetooth_Characteristic_CurrentTime.html │ │ ├── CGA_Bluetooth_Characteristic_FirmwareRevision.html │ │ ├── CGA_Bluetooth_Characteristic_HardwareRevision.html │ │ ├── CGA_Bluetooth_Characteristic_LocalTimeInformation.html │ │ ├── CGA_Bluetooth_Characteristic_ManufacturerName.html │ │ ├── CGA_Bluetooth_Characteristic_ModelNumber.html │ │ ├── CGA_Bluetooth_Characteristic_SerialNumber.html │ │ ├── CGA_Bluetooth_Characteristic_SoftwareRevision.html │ │ ├── CGA_Bluetooth_Characteristic_SystemID.html │ │ ├── CGA_Bluetooth_Descriptor.html │ │ ├── CGA_Bluetooth_Descriptor_AggregateFormat.html │ │ ├── CGA_Bluetooth_Descriptor_CBUUIDL2CAPPSMCharacteristic.html │ │ ├── CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.html │ │ ├── CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.html │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat.html │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat │ │ │ └── FormatMasks.html │ │ ├── CGA_Bluetooth_Descriptor_ServerCharacteristicConfiguration.html │ │ ├── CGA_Bluetooth_Descriptor_UserDescription.html │ │ ├── CGA_Bluetooth_Peripheral.html │ │ ├── CGA_Bluetooth_Service.html │ │ ├── CGA_Bluetooth_Service_Battery.html │ │ ├── CGA_Bluetooth_Service_CurrentTime.html │ │ ├── CGA_Bluetooth_Service_DeviceInfo.html │ │ ├── RVS_BlueThoth.html │ │ └── RVS_BlueThoth │ │ │ ├── AdvertisementData.html │ │ │ ├── DiscoveryData.html │ │ │ └── ScanCriteria.html │ ├── Enums.html │ ├── Enums │ │ └── CGA_Errors.html │ ├── Extensions.html │ ├── Extensions │ │ ├── Array.html │ │ └── Data.html │ ├── Global Variables.html │ ├── Protocols.html │ ├── Protocols │ │ ├── CGA_BlueThoth_Delegate.html │ │ ├── CGA_Bluetooth_Characteristic_Protocol.html │ │ ├── CGA_Bluetooth_Characteristic_Protocol_Internal.html │ │ ├── CGA_Bluetooth_Descriptor_Protocol.html │ │ ├── CGA_Bluetooth_Descriptor_Protocol_Internal.html │ │ ├── CGA_Bluetooth_Service_Protocol.html │ │ ├── CGA_Bluetooth_Service_Protocol_Internal.html │ │ ├── CGA_Bluetooth_Writable.html │ │ ├── CGA_CharacteristicFactory.html │ │ ├── CGA_Class_Protocol.html │ │ ├── CGA_Class_Protocol_UpdateCharacteristic.html │ │ ├── CGA_Class_Protocol_UpdateDescriptor.html │ │ ├── CGA_Class_Protocol_UpdateService.html │ │ ├── CGA_DescriptorFactory.html │ │ └── CGA_ServiceFactory.html │ ├── badge.svg │ ├── css │ │ ├── highlight.css │ │ └── jazzy.css │ ├── docsets │ │ ├── .docset │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ └── Resources │ │ │ │ ├── Documents │ │ │ │ ├── Classes.html │ │ │ │ ├── Classes │ │ │ │ │ ├── CGA_Bluetooth_Characteristic.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_BatteryLevel.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_CurrentTime.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_FirmwareRevision.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_HardwareRevision.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_LocalTimeInformation.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_ManufacturerName.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_ModelNumber.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SerialNumber.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SoftwareRevision.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SystemID.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_AggregateFormat.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_CBUUIDL2CAPPSMCharacteristic.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat │ │ │ │ │ │ └── FormatMasks.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_ServerCharacteristicConfiguration.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_UserDescription.html │ │ │ │ │ ├── CGA_Bluetooth_Peripheral.html │ │ │ │ │ ├── CGA_Bluetooth_Service.html │ │ │ │ │ ├── CGA_Bluetooth_Service_Battery.html │ │ │ │ │ ├── CGA_Bluetooth_Service_CurrentTime.html │ │ │ │ │ ├── CGA_Bluetooth_Service_DeviceInfo.html │ │ │ │ │ ├── RVS_BlueThoth.html │ │ │ │ │ └── RVS_BlueThoth │ │ │ │ │ │ ├── AdvertisementData.html │ │ │ │ │ │ ├── DiscoveryData.html │ │ │ │ │ │ └── ScanCriteria.html │ │ │ │ ├── Enums.html │ │ │ │ ├── Enums │ │ │ │ │ └── CGA_Errors.html │ │ │ │ ├── Extensions.html │ │ │ │ ├── Extensions │ │ │ │ │ ├── Array.html │ │ │ │ │ └── Data.html │ │ │ │ ├── Global Variables.html │ │ │ │ ├── Protocols.html │ │ │ │ ├── Protocols │ │ │ │ │ ├── CGA_BlueThoth_Delegate.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_Protocol_Internal.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_Protocol_Internal.html │ │ │ │ │ ├── CGA_Bluetooth_Service_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Service_Protocol_Internal.html │ │ │ │ │ ├── CGA_Bluetooth_Writable.html │ │ │ │ │ ├── CGA_CharacteristicFactory.html │ │ │ │ │ ├── CGA_Class_Protocol.html │ │ │ │ │ ├── CGA_Class_Protocol_UpdateCharacteristic.html │ │ │ │ │ ├── CGA_Class_Protocol_UpdateDescriptor.html │ │ │ │ │ ├── CGA_Class_Protocol_UpdateService.html │ │ │ │ │ ├── CGA_DescriptorFactory.html │ │ │ │ │ └── CGA_ServiceFactory.html │ │ │ │ ├── css │ │ │ │ │ ├── highlight.css │ │ │ │ │ └── jazzy.css │ │ │ │ ├── img │ │ │ │ │ ├── carat.png │ │ │ │ │ ├── dash.png │ │ │ │ │ ├── gh.png │ │ │ │ │ └── spinner.gif │ │ │ │ ├── index.html │ │ │ │ ├── js │ │ │ │ │ ├── jazzy.js │ │ │ │ │ ├── jazzy.search.js │ │ │ │ │ ├── jquery.min.js │ │ │ │ │ ├── lunr.min.js │ │ │ │ │ └── typeahead.jquery.js │ │ │ │ └── search.json │ │ │ │ └── docSet.dsidx │ │ └── .tgz │ ├── icon.png │ ├── img │ │ ├── AddFramework.png │ │ ├── CheckoutsDir.png │ │ ├── InFrameworksDir.png │ │ ├── IncludeProjectFile.png │ │ ├── SelectTarget.png │ │ ├── carat.png │ │ ├── dash.png │ │ ├── gh.png │ │ ├── icon.png │ │ └── spinner.gif │ ├── index.html │ ├── js │ │ ├── jazzy.js │ │ ├── jazzy.search.js │ │ ├── jquery.min.js │ │ ├── lunr.min.js │ │ └── typeahead.jquery.js │ ├── search.json │ └── undocumented.json ├── framework-public │ ├── Classes.html │ ├── Classes │ │ ├── CGA_Bluetooth_Characteristic.html │ │ ├── CGA_Bluetooth_Characteristic_BatteryLevel.html │ │ ├── CGA_Bluetooth_Characteristic_CurrentTime.html │ │ ├── CGA_Bluetooth_Characteristic_FirmwareRevision.html │ │ ├── CGA_Bluetooth_Characteristic_LocalTimeInformation.html │ │ ├── CGA_Bluetooth_Characteristic_ManufacturerName.html │ │ ├── CGA_Bluetooth_Characteristic_ModelNumber.html │ │ ├── CGA_Bluetooth_Characteristic_SerialNumber.html │ │ ├── CGA_Bluetooth_Characteristic_SoftwareRevision.html │ │ ├── CGA_Bluetooth_Characteristic_SystemID.html │ │ ├── CGA_Bluetooth_Descriptor.html │ │ ├── CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.html │ │ ├── CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.html │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat.html │ │ ├── CGA_Bluetooth_Peripheral.html │ │ ├── CGA_Bluetooth_Service.html │ │ ├── CGA_Bluetooth_Service_Battery.html │ │ ├── CGA_Bluetooth_Service_CurrentTime.html │ │ ├── CGA_Bluetooth_Service_DeviceInfo.html │ │ ├── RVS_BlueThoth.html │ │ └── RVS_BlueThoth │ │ │ ├── AdvertisementData.html │ │ │ ├── DiscoveryData.html │ │ │ └── ScanCriteria.html │ ├── Enums.html │ ├── Enums │ │ └── CGA_Errors.html │ ├── Extensions.html │ ├── Extensions │ │ ├── Array.html │ │ └── Data.html │ ├── Protocols.html │ ├── Protocols │ │ ├── CGA_BlueThoth_Delegate.html │ │ ├── CGA_Bluetooth_Characteristic_Protocol.html │ │ ├── CGA_Bluetooth_Descriptor_Protocol.html │ │ ├── CGA_Bluetooth_Service_Protocol.html │ │ ├── CGA_Bluetooth_Writable.html │ │ ├── CGA_Class_Protocol.html │ │ ├── CGA_Class_Protocol_UpdateCharacteristic.html │ │ ├── CGA_Class_Protocol_UpdateDescriptor.html │ │ └── CGA_Class_Protocol_UpdateService.html │ ├── badge.svg │ ├── css │ │ ├── highlight.css │ │ └── jazzy.css │ ├── docsets │ │ ├── .docset │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ └── Resources │ │ │ │ ├── Documents │ │ │ │ ├── Classes.html │ │ │ │ ├── Classes │ │ │ │ │ ├── CGA_Bluetooth_Characteristic.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_BatteryLevel.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_CurrentTime.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_FirmwareRevision.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_LocalTimeInformation.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_ManufacturerName.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_ModelNumber.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SerialNumber.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SoftwareRevision.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_SystemID.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_PresentationFormat.html │ │ │ │ │ ├── CGA_Bluetooth_Peripheral.html │ │ │ │ │ ├── CGA_Bluetooth_Service.html │ │ │ │ │ ├── CGA_Bluetooth_Service_Battery.html │ │ │ │ │ ├── CGA_Bluetooth_Service_CurrentTime.html │ │ │ │ │ ├── CGA_Bluetooth_Service_DeviceInfo.html │ │ │ │ │ ├── RVS_BlueThoth.html │ │ │ │ │ └── RVS_BlueThoth │ │ │ │ │ │ ├── AdvertisementData.html │ │ │ │ │ │ ├── DiscoveryData.html │ │ │ │ │ │ └── ScanCriteria.html │ │ │ │ ├── Enums.html │ │ │ │ ├── Enums │ │ │ │ │ └── CGA_Errors.html │ │ │ │ ├── Extensions.html │ │ │ │ ├── Extensions │ │ │ │ │ ├── Array.html │ │ │ │ │ └── Data.html │ │ │ │ ├── Protocols.html │ │ │ │ ├── Protocols │ │ │ │ │ ├── CGA_BlueThoth_Delegate.html │ │ │ │ │ ├── CGA_Bluetooth_Characteristic_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Descriptor_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Service_Protocol.html │ │ │ │ │ ├── CGA_Bluetooth_Writable.html │ │ │ │ │ ├── CGA_Class_Protocol.html │ │ │ │ │ ├── CGA_Class_Protocol_UpdateCharacteristic.html │ │ │ │ │ ├── CGA_Class_Protocol_UpdateDescriptor.html │ │ │ │ │ └── CGA_Class_Protocol_UpdateService.html │ │ │ │ ├── css │ │ │ │ │ ├── highlight.css │ │ │ │ │ └── jazzy.css │ │ │ │ ├── img │ │ │ │ │ ├── carat.png │ │ │ │ │ ├── dash.png │ │ │ │ │ ├── gh.png │ │ │ │ │ └── spinner.gif │ │ │ │ ├── index.html │ │ │ │ ├── js │ │ │ │ │ ├── jazzy.js │ │ │ │ │ ├── jazzy.search.js │ │ │ │ │ ├── jquery.min.js │ │ │ │ │ ├── lunr.min.js │ │ │ │ │ └── typeahead.jquery.js │ │ │ │ └── search.json │ │ │ │ └── docSet.dsidx │ │ └── .tgz │ ├── icon.png │ ├── img │ │ ├── AddFramework.png │ │ ├── CheckoutsDir.png │ │ ├── InFrameworksDir.png │ │ ├── IncludeProjectFile.png │ │ ├── SelectTarget.png │ │ ├── carat.png │ │ ├── dash.png │ │ ├── gh.png │ │ ├── icon.png │ │ └── spinner.gif │ ├── index.html │ ├── js │ │ ├── jazzy.js │ │ ├── jazzy.search.js │ │ ├── jquery.min.js │ │ ├── lunr.min.js │ │ └── typeahead.jquery.js │ ├── search.json │ └── undocumented.json └── index.html ├── icon.png ├── jazzy.command └── spec ├── AppIcon.pdf ├── GATT_Specification_Supplement_v1.1.pdf └── SocialPreview.pdf /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @ChrisMarshallNY -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Rift Valley Software, Inc. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /PRIVACY.md: -------------------------------------------------------------------------------- 1 | # Privacy Declaration 2 | 3 | This project collects **absolutely no information at all**, from anyone, at any time. 4 | 5 | It is hosted on GitHub, so users of the library may need to understand [GitHub's Privacy Policy](https://docs.github.com/en/site-policy/privacy-policies/github-privacy-statement). 6 | -------------------------------------------------------------------------------- /Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "RVS_Generic_Swift_Toolbox", 6 | "repositoryURL": "git@github.com:RiftValleySoftware/RVS_Generic_Swift_Toolbox.git", 7 | "state": { 8 | "branch": null, 9 | "revision": "fd0869254d3772ae13c5209f527f4f763c6f170a", 10 | "version": "1.8.1" 11 | } 12 | } 13 | ] 14 | }, 15 | "version": 1 16 | } 17 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.5 2 | 3 | /* 4 | © Copyright 2020-2022, The Great Rift Valley Software Company 5 | 6 | LICENSE: 7 | 8 | MIT License 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 11 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 12 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 13 | Software is furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 16 | 17 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 18 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 20 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | 22 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 23 | */ 24 | 25 | import PackageDescription 26 | 27 | let package = Package( 28 | name: "RVS_BlueThoth", 29 | platforms: [ 30 | .iOS(.v13), 31 | .tvOS(.v11), 32 | .macOS(.v10_14), 33 | .watchOS(.v5) 34 | ], 35 | products: [ 36 | .library(name: "RVS_BlueThoth", 37 | targets: [ 38 | "RVS_BlueThoth" 39 | ] 40 | ) 41 | ], 42 | dependencies: [ 43 | .package(name: "RVS_Generic_Swift_Toolbox", url: "git@github.com:RiftValleySoftware/RVS_Generic_Swift_Toolbox.git", from: "1.13.1") 44 | ], 45 | targets: [ 46 | .target( 47 | name: "RVS_BlueThoth", 48 | dependencies: [.product(name: "RVS_Generic_Swift_Toolbox", package: "RVS_Generic_Swift_Toolbox")] 49 | ) 50 | ] 51 | ) 52 | -------------------------------------------------------------------------------- /PrivacyInfo.xcprivacy: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSPrivacyCollectedDataTypes 6 | 7 | NSPrivacyAccessedAPITypes 8 | 9 | NSPrivacyTrackingDomains 10 | 11 | NSPrivacyTracking 12 | 13 | 14 | -------------------------------------------------------------------------------- /Project-Meta/Warnings.xcconfig: -------------------------------------------------------------------------------- 1 | // This is free software: you can redistribute it and/or modify 2 | // it under the terms of the GNU General Public License as published by 3 | // the Free Software Foundation, either version 2 of the License, or 4 | // (at your option) any later version. 5 | // 6 | // This Software is distributed in the hope that it will be useful, 7 | // but WITHOUT ANY WARRANTY; without even the implied warranty of 8 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 | // GNU General Public License for more details. 10 | // 11 | // You should have received a copy of the GNU General Public License 12 | // along with this code. If not, see . 13 | // 14 | // The Great Rift Valley Software Company: https://riftvalleysoftware.com 15 | 16 | CLANG_ANALYZER_NONNULL = YES 17 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE 18 | CLANG_CXX_LANGUAGE_STANDARD = gnu++14 19 | CLANG_CXX_LIBRARY = libc++ 20 | CLANG_ENABLE_MODULES = YES 21 | CLANG_ENABLE_OBJC_ARC = YES 22 | CLANG_ENABLE_OBJC_WEAK = YES 23 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES 24 | CLANG_WARN_BOOL_CONVERSION = YES 25 | CLANG_WARN_COMMA = YES 26 | CLANG_WARN_CONSTANT_CONVERSION = YES 27 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES 28 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR 29 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES 30 | CLANG_WARN_EMPTY_BODY = YES 31 | CLANG_WARN_ENUM_CONVERSION = YES 32 | CLANG_WARN_FLOAT_CONVERSION = YES_ERROR 33 | CLANG_WARN_INFINITE_RECURSION = YES 34 | CLANG_WARN_INT_CONVERSION = YES 35 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES 36 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES 37 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES 38 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR 39 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES 40 | CLANG_WARN_STRICT_PROTOTYPES = YES 41 | CLANG_WARN_SUSPICIOUS_MOVE = YES 42 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE 43 | CLANG_WARN_UNREACHABLE_CODE = YES 44 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES 45 | GCC3_VERSION = 3.3 46 | GCC_C_LANGUAGE_STANDARD = gnu11 47 | GCC_INLINES_ARE_PRIVATE_EXTERN = YES 48 | GCC_NO_COMMON_BLOCKS = YES 49 | GCC_PFE_FILE_C_DIALECTS = c objective-c c++ objective-c++ 50 | GCC_SYMBOLS_PRIVATE_EXTERN = YES 51 | GCC_THUMB_SUPPORT = YES 52 | GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES 53 | GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES 54 | GCC_TREAT_WARNINGS_AS_ERRORS = YES 55 | GCC_VERSION = com.apple.compilers.llvm.clang.1_0 56 | GCC_VERSION_IDENTIFIER = com_apple_compilers_llvm_clang_1_0 57 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES 58 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR 59 | GCC_WARN_UNDECLARED_SELECTOR = YES 60 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE 61 | GCC_WARN_UNUSED_FUNCTION = YES 62 | GCC_WARN_UNUSED_VARIABLE = YES 63 | SWIFT_COMPILATION_MODE = wholemodule 64 | SWIFT_OPTIMIZATION_LEVEL = -O 65 | SWIFT_TREAT_WARNINGS_AS_ERRORS = YES 66 | SWIFT_VERSION = 5.0 67 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcodeproj/xcshareddata/xcschemes/RVS_BlueThoth.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcodeproj/xcshareddata/xcschemes/RVS_BlueThoth_Test_Harness_MacOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcodeproj/xcshareddata/xcschemes/RVS_BlueThoth_Test_Harness_iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 45 | 51 | 52 | 53 | 54 | 60 | 62 | 68 | 69 | 70 | 71 | 73 | 74 | 77 | 78 | 79 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcworkspace/.xcodesamplecode.plist: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 9 | 10 | 12 | 13 | 15 | 16 | 18 | 19 | 21 | 22 | 23 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /RVS_BlueThoth.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "pins" : [ 3 | { 4 | "identity" : "rvs_generic_swift_toolbox", 5 | "kind" : "remoteSourceControl", 6 | "location" : "git@github.com:RiftValleySoftware/RVS_Generic_Swift_Toolbox.git", 7 | "state" : { 8 | "revision" : "e85e1e83cdd2f57aacda13b13d75b9edb3252546", 9 | "version" : "1.13.1" 10 | } 11 | }, 12 | { 13 | "identity" : "rvs_persistentprefs", 14 | "kind" : "remoteSourceControl", 15 | "location" : "git@github.com:RiftValleySoftware/RVS_PersistentPrefs.git", 16 | "state" : { 17 | "revision" : "c6885ac24b20563507a52e6fc4638733af7f5dea", 18 | "version" : "1.3.7" 19 | } 20 | } 21 | ], 22 | "version" : 2 23 | } 24 | -------------------------------------------------------------------------------- /Sources/Meta/MacOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Sources/Meta/TVOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Sources/Meta/WatchOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Sources/Meta/iOS-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | NSHumanReadableCopyright 22 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 23 | 24 | 25 | -------------------------------------------------------------------------------- /Sources/README-PUBLIC.md: -------------------------------------------------------------------------------- 1 | ![Icon](icon.png) 2 | 3 | RVS_BlueThoth (Public SDK Documentation) 4 | = 5 | 6 | This is a Bluetooth SDK for "Central" (Client) Core Bluetooth (BLE) implementation. 7 | 8 | It abstracts some of the more "tedious" aspects of using Core Bluetooth; allowing the app to easily implement a Bluetooth Client functionality. 9 | 10 | [This is the GitHub repo for this project.](https://github.com/RiftValleySoftware/RVS_BlueThoth) It is 100% open-source, MIT-licensed code. 11 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_BatteryLevel.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Battery Level Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Battery Level Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_BatteryLevel: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | - returns: 0-100 (percentage of battery), or nil. 35 | */ 36 | public var batteryLevel: Int? { 37 | guard let intValue = intValue else { return nil } 38 | return Int(truncatingIfNeeded: intValue) 39 | } 40 | 41 | /* ################################################################## */ 42 | /** 43 | - returns: the battery level, as a String. 44 | */ 45 | public override var stringValue: String? { 46 | guard let intValue = batteryLevel else { return nil } 47 | return String(intValue) 48 | } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This returns a unique GATT UUID String for the Characteristic. 53 | */ 54 | public class override var uuid: String { "2A19" } 55 | } 56 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_FirmwareRevision.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Firmware Revision Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Firmware Revision Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_FirmwareRevision: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | public class override var uuid: String { "2A26" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_HardwareRevision.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Hardware Revision Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Hardware Revision Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_HardwareRevision: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | internal class override var uuid: String { "2A27" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_ManufacturerName.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Manufacturer Name Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Manufacturer Name Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_ManufacturerName: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | public class override var uuid: String { "2A29" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_ModelNumber.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Model Number Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Model Number Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_ModelNumber: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | public class override var uuid: String { "2A24" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_SerialNumber.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Serial Number Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Serial Number Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_SerialNumber: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | public class override var uuid: String { "2A25" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_SoftwareRevision.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Software Revision Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the Software Revision Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_SoftwareRevision: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique GATT UUID String for the Characteristic. 35 | */ 36 | public class override var uuid: String { "2A28" } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Characteristics/CGA_Bluetooth_Characteristic_SystemID.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - System ID Characteristic Wrapper Class - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds a specialized accessor to the System ID Characteristic. 30 | */ 31 | public class CGA_Bluetooth_Characteristic_SystemID: CGA_Bluetooth_Characteristic { 32 | /* ################################################################## */ 33 | /** 34 | - returns: The 40-bit Manufacturer ID 35 | */ 36 | public var manufacturerID: UInt64? { 37 | var id = UInt64(0) 38 | guard var data = value else { return nil } 39 | data.castInto(&id) 40 | 41 | id &= 0xFFFFFFFFFF000000 42 | 43 | return id >> 24 44 | } 45 | 46 | /* ################################################################## */ 47 | /** 48 | - returns: The 24-bit Organizationally Unique ID 49 | */ 50 | public var ouID: UInt32? { 51 | var id = UInt64(0) 52 | guard var data = value else { return nil } 53 | data.castInto(&id) 54 | 55 | id &= 0x0000000000FFFFFF 56 | 57 | return UInt32(id) 58 | } 59 | 60 | /* ################################################################## */ 61 | /** 62 | - returns: the ID as a String. 63 | */ 64 | public override var stringValue: String? { 65 | guard let intValue = intValue else { return nil } 66 | return String(format: "%016X", UInt64(intValue)) 67 | } 68 | 69 | /* ################################################################## */ 70 | /** 71 | This returns a unique GATT UUID String for the Characteristic. 72 | */ 73 | public class override var uuid: String { "2A23" } 74 | } 75 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_AggregateFormat.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the Characteristic Aggregate Format Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The Characteristic Aggregate Format CBDescriptor. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_AggregateFormat: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the Characteristic Aggregate Format Descriptor. 35 | */ 36 | internal class override var uuid: String { CBUUIDCharacteristicAggregateFormatString } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_CBUUIDL2CAPPSMCharacteristic.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the L2CAP Channel PSM Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The L2CAP Channel PSM CBDescriptor. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_CBUUIDL2CAPPSMCharacteristic: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the L2CAP Channel PSM Descriptor. 35 | */ 36 | internal class override var uuid: String { CBUUIDL2CAPPSMCharacteristicString } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the Client Characteristic Configuration Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The Characteristic Extended Properties CBDescriptor, adding some functionality, and linking the hierarchy. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_Characteristic_Extended_Properties: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | - returns: True, if the Characteristic has Reliable Write Enabled. 35 | */ 36 | public var isReliableWriteEnabled: Bool { 37 | guard let value = cbElementInstance?.value as? Int8 else { return false } 38 | return 1 == value & 0x01 39 | } 40 | 41 | /* ################################################################## */ 42 | /** 43 | - returns: True, if the Characteristic has Writable Auxiliaries enabled. 44 | */ 45 | public var isWritableAuxiliariesEnabled: Bool { 46 | guard let value = cbElementInstance?.value as? Int8 else { return false } 47 | return 2 == value & 0x02 48 | } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This is the UUID for the Client Characteristic Configuration Descriptor. 53 | */ 54 | internal class override var uuid: String { CBUUIDCharacteristicExtendedPropertiesString } 55 | } 56 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the Client Characteristic Configuration Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The Client Characteristic Configuration CBDescriptor, adding some functionality, and linking the hierarchy. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_ClientCharacteristicConfiguration: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | - returns: True, if the Characteristic is currently notifying. 35 | */ 36 | public var isNotifying: Bool { 37 | guard let value = intValue else { return false } 38 | return 1 == value & 0x01 39 | } 40 | 41 | /* ################################################################## */ 42 | /** 43 | - returns: True, if the Characteristic is currently indicating. 44 | */ 45 | public var isIndicating: Bool { 46 | guard let value = intValue else { return false } 47 | return 2 == value & 0x02 48 | } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This is the UUID for the Client Characteristic Configuration Descriptor. 53 | */ 54 | internal class override var uuid: String { CBUUIDClientCharacteristicConfigurationString } 55 | } 56 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_ServerCharacteristicConfiguration.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the Server Characteristic Configuration Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The Server Characteristic Configuration CBDescriptor. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_ServerCharacteristicConfiguration: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the Server Characteristic Configuration Descriptor. 35 | */ 36 | internal class override var uuid: String { CBUUIDServerCharacteristicConfigurationString } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Descriptors/CGA_Bluetooth_Descriptor_UserDescription.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Wrapper Class for the Client Characteristic Configuration Descriptor - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of The User Description CBDescriptor. 30 | */ 31 | public class CGA_Bluetooth_Descriptor_UserDescription: CGA_Bluetooth_Descriptor { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the User Description Descriptor. 35 | */ 36 | internal class override var uuid: String { CBUUIDCharacteristicUserDescriptionString } 37 | } 38 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Services/CGA_Bluetooth_Service_Battery.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Service Specialization for Battery Service - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds some specialized accessors. 30 | */ 31 | public class CGA_Bluetooth_Service_Battery: CGA_Bluetooth_Service { 32 | /* ################################################################## */ 33 | /** 34 | - returns: 0-100 (percentage of battery), or nil. 35 | */ 36 | public var batteryLevel: Int? { (sequence_contents[CBUUID(string: CGA_Bluetooth_Characteristic_BatteryLevel.cbUUIDString)] as? CGA_Bluetooth_Characteristic_BatteryLevel)?.batteryLevel } 37 | 38 | /* ################################################################## */ 39 | /** 40 | This returns a unique GATT UUID String for the Service. 41 | */ 42 | public class override var uuid: String { "180F" } 43 | } 44 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Implementation/Services/CGA_Bluetooth_Service_DeviceInfo.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - Service Specialization for Device Info - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This adds some specialized accessors. 30 | */ 31 | public class CGA_Bluetooth_Service_DeviceInfo: CGA_Bluetooth_Service { 32 | /* ################################################################## */ 33 | /** 34 | This returns The manufacturer name for the Service (if provided). 35 | */ 36 | public var manufacturerName: String? { (sequence_contents[CBUUID(string: CGA_Bluetooth_Characteristic_ManufacturerName.cbUUIDString)] as? CGA_Bluetooth_Characteristic_ManufacturerName)?.stringValue } 37 | 38 | /* ################################################################## */ 39 | /** 40 | This returns The model number for the Service (if provided). 41 | */ 42 | public var modelNumber: String? { (sequence_contents[CBUUID(string: CGA_Bluetooth_Characteristic_ModelNumber.cbUUIDString)] as? CGA_Bluetooth_Characteristic_ModelNumber)?.stringValue } 43 | 44 | /* ################################################################## */ 45 | /** 46 | This returns a unique GATT UUID String for the Service. 47 | */ 48 | internal class override var uuid: String { "180A" } 49 | } 50 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Protocols/internal/CGA_Bluetooth_Characteristic_Protocol_Internal.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Internal Face of Characteristics - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This protocol publishes an internal interface for our Characteristic wrapper classes. 30 | */ 31 | internal protocol CGA_Bluetooth_Characteristic_Protocol_Internal: CGA_Bluetooth_Characteristic_Protocol { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the Characteristic type. It is not used for external purposes. 35 | */ 36 | static var uuid: String { get } 37 | 38 | /* ################################################################## */ 39 | /** 40 | This will contain any required scan criteria. It simply passes on the Central criteria. 41 | */ 42 | var scanCriteria: RVS_BlueThoth.ScanCriteria? { get } 43 | 44 | /* ################################################################## */ 45 | /** 46 | This casts the parent as a Service Wrapper. 47 | */ 48 | var service: CGA_Bluetooth_Service? { get } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This is a convenience init that should always be used. 53 | 54 | - parameter parent: The Service instance that "owns" this instance. 55 | - parameter cbElementInstance: This is the actual CBharacteristic instance to be associated with this instance. 56 | */ 57 | init(parent: CGA_Bluetooth_Service, cbElementInstance: CBCharacteristic) 58 | 59 | /* ################################################################## */ 60 | /** 61 | Called to add a Descriptor to our main Array. 62 | 63 | - parameter inDescriptor: The Descriptor to add. 64 | */ 65 | func addDescriptor(_ inDescriptor: CGA_Bluetooth_Descriptor) 66 | } 67 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Protocols/internal/CGA_Bluetooth_Descriptor_Protocol_Internal.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Main Wrapper Class for the Descriptors - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This class "wraps" instances of CBDescriptor, adding some functionality, and linking the hierarchy. 30 | */ 31 | internal protocol CGA_Bluetooth_Descriptor_Protocol_Internal: CGA_Bluetooth_Descriptor_Protocol { 32 | /* ################################################################## */ 33 | /** 34 | This is the UUID for the Descriptor type. It is not used for external purposes. 35 | */ 36 | static var uuid: String { get } 37 | 38 | /* ################################################################## */ 39 | /** 40 | This is used to reference an "owning instance" of this instance, and it should be a CGA_Bluetooth_Characteristic 41 | */ 42 | var parent: CGA_Class_Protocol? { get } 43 | 44 | /* ################################################################## */ 45 | /** 46 | This will contain any required scan criteria. It simply passes on the Central criteria. 47 | */ 48 | var scanCriteria: RVS_BlueThoth.ScanCriteria? { get } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This returns the parent Central Manager 53 | */ 54 | var central: RVS_BlueThoth? { get } 55 | } 56 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Protocols/public/CGA_Bluetooth_Descriptor_Protocol.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | 25 | /* ###################################################################################################################################### */ 26 | // MARK: - The Public Face of Descriptors - 27 | /* ###################################################################################################################################### */ 28 | /** 29 | This protocol publishes a public interface for our Descriptor wrapper classes. 30 | */ 31 | public protocol CGA_Bluetooth_Descriptor_Protocol: CGA_Class_Protocol { 32 | /* ################################################################## */ 33 | /** 34 | This returns a unique UUID String for the instance. 35 | */ 36 | var id: String { get } 37 | 38 | /* ################################################################## */ 39 | /** 40 | If the Descriptor has a value, it is returned here. It is completely untyped, as each descriptor has its own types. 41 | */ 42 | var value: Any? { get } 43 | 44 | /* ################################################################## */ 45 | /** 46 | This holds the instance of CBDescriptor that is used by this instance. 47 | */ 48 | var cbElementInstance: CBDescriptor? { get } 49 | 50 | /* ################################################################## */ 51 | /** 52 | This casts the parent as a Characteristic Wrapper. 53 | */ 54 | var characteristic: CGA_Bluetooth_Characteristic? { get } 55 | 56 | /* ################################################################## */ 57 | /** 58 | The Peripheral is asked to read our value. 59 | */ 60 | func readValue() 61 | } 62 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/Protocols/public/CGA_Bluetooth_Service_Protocol.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import CoreBluetooth 24 | import RVS_Generic_Swift_Toolbox 25 | 26 | /* ###################################################################################################################################### */ 27 | // MARK: - The Public Face of Services - 28 | /* ###################################################################################################################################### */ 29 | /** 30 | This protocol publishes a public interface for our Service wrapper classes. 31 | */ 32 | public protocol CGA_Bluetooth_Service_Protocol: AnyObject, RVS_SequenceProtocol { 33 | /* ################################################################## */ 34 | /** 35 | This is used to reference an "owning instance" of this instance, and it should be a CGA_Bluetooth_Peripheral 36 | */ 37 | var parent: CGA_Class_Protocol? { get } 38 | 39 | /* ################################################################## */ 40 | /** 41 | This returns a unique UUID String for the instance. 42 | */ 43 | var id: String { get } 44 | 45 | /* ################################################################## */ 46 | /** 47 | This returns the parent Central Manager 48 | */ 49 | var central: RVS_BlueThoth? { get } 50 | 51 | /* ################################################################## */ 52 | /** 53 | This casts the parent as a Peripheral Wrapper. 54 | */ 55 | var peripheral: CGA_Bluetooth_Peripheral? { get } 56 | 57 | // MARK: Public Methods 58 | 59 | /* ################################################################## */ 60 | /** 61 | The required init, with a "primed" sequence. 62 | 63 | - parameter sequence_contents: The initial value of the Array cache. 64 | */ 65 | init(sequence_contents: [Element]) 66 | } 67 | -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/AddFramework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/AddFramework.png -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/CheckoutsDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/CheckoutsDir.png -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/InFrameworksDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/InFrameworksDir.png -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/IncludeProjectFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/IncludeProjectFile.png -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/SelectTarget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/SelectTarget.png -------------------------------------------------------------------------------- /Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/icon.png -------------------------------------------------------------------------------- /Sources/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Sources/img/icon.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Meta/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | LSApplicationCategoryType 24 | public.app-category.developer-tools 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSBluetoothAlwaysUsageDescription 28 | The App Needs to Discover and Connect to Bluetooth Devices. 29 | NSHumanReadableCopyright 30 | Copyright © 2020 The Great Rift Valley Software Company. All rights reserved. 31 | NSMainStoryboardFile 32 | Main 33 | NSPrincipalClass 34 | NSApplication 35 | NSSupportsAutomaticTermination 36 | 37 | NSSupportsSuddenTermination 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Meta/RVS_BlueThoth_Test_Harness_MacOS.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.device.bluetooth 8 | 9 | com.apple.security.files.user-selected.read-only 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_16x16.png", 5 | "scale" : "1x", 6 | "idiom" : "mac", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "scale" : "2x", 12 | "filename" : "icon_16x16@2x.png", 13 | "idiom" : "mac" 14 | }, 15 | { 16 | "idiom" : "mac", 17 | "size" : "32x32", 18 | "filename" : "icon_32x32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "idiom" : "mac", 23 | "filename" : "icon_32x32@2x.png", 24 | "scale" : "2x", 25 | "size" : "32x32" 26 | }, 27 | { 28 | "scale" : "1x", 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "filename" : "icon_128x128.png" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "filename" : "icon_128x128@2x.png", 36 | "scale" : "2x", 37 | "size" : "128x128" 38 | }, 39 | { 40 | "filename" : "icon_256x256.png", 41 | "idiom" : "mac", 42 | "size" : "256x256", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "scale" : "2x", 48 | "filename" : "icon_256x256@2x.png", 49 | "idiom" : "mac" 50 | }, 51 | { 52 | "idiom" : "mac", 53 | "size" : "512x512", 54 | "scale" : "1x", 55 | "filename" : "icon_512x512.png" 56 | }, 57 | { 58 | "idiom" : "mac", 59 | "filename" : "icon_512x512@2x.png", 60 | "scale" : "2x", 61 | "size" : "512x512" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-AppIcon.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "icon_16x16.png", 5 | "idiom" : "mac", 6 | "scale" : "1x", 7 | "size" : "16x16" 8 | }, 9 | { 10 | "scale" : "2x", 11 | "filename" : "icon_16x16@2x.png", 12 | "idiom" : "mac", 13 | "size" : "16x16" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "scale" : "1x", 18 | "filename" : "icon_32x32.png", 19 | "idiom" : "mac" 20 | }, 21 | { 22 | "scale" : "2x", 23 | "filename" : "icon_32x32@2x.png", 24 | "size" : "32x32", 25 | "idiom" : "mac" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "filename" : "icon_128x128.png", 30 | "scale" : "1x", 31 | "idiom" : "mac" 32 | }, 33 | { 34 | "filename" : "icon_128x128@2x.png", 35 | "size" : "128x128", 36 | "idiom" : "mac", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "filename" : "icon_256x256.png", 41 | "idiom" : "mac", 42 | "scale" : "1x", 43 | "size" : "256x256" 44 | }, 45 | { 46 | "scale" : "2x", 47 | "filename" : "icon_256x256@2x.png", 48 | "idiom" : "mac", 49 | "size" : "256x256" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "filename" : "icon_512x512.png", 54 | "idiom" : "mac", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "scale" : "2x", 61 | "filename" : "icon_512x512@2x.png" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_128x128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_128x128.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_128x128@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_128x128@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_16x16.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_16x16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_16x16@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_256x256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_256x256.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_256x256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_256x256@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_32x32.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_32x32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_32x32@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_512x512.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_512x512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/MacOS-Framework-AppIcon.appiconset/icon_512x512@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "reload-icon~universal@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "reload-icon~universal@2x.png", 10 | "idiom" : "universal", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "filename" : "reload-icon~universal@3x.png", 15 | "idiom" : "universal", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "author" : "xcode", 21 | "version" : 1 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@1x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Resources/Assets.xcassets/reload-icon.imageset/reload-icon~universal@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_MacOS/Source/Window Controllers/RVS_BlueThoth_MacOS_Test_Harness_Base_WindowController.swift: -------------------------------------------------------------------------------- 1 | /** 2 | © Copyright 2019, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import Cocoa 24 | import RVS_Generic_Swift_Toolbox 25 | 26 | /* ################################################################################################################################## */ 27 | // MARK: - Basic Window Controller Class 28 | /* ################################################################################################################################## */ 29 | /** 30 | The main reason for creating this class was to allow us to interpret settings, and to fix an issue with Interface Builder. 31 | */ 32 | class RVS_BlueThoth_MacOS_Test_Harness_Base_WindowController: NSWindowController { 33 | /* ################################################################## */ 34 | /** 35 | This accounts for a bug in Xcode, where the [`restorable`](https://developer.apple.com/documentation/appkit/nswindow/1526255-restorable) flag is ignored. If you set the name here, it will restore. 36 | */ 37 | override func windowDidLoad() { 38 | super.windowDidLoad() 39 | window?.title = window?.title.localizedVariant ?? "ERROR" 40 | self.windowFrameAutosaveName = window?.title ?? "ERROR" // This is because there seems to be a bug (maybe in IB), where the auto-restore setting is not saved unless we do this. 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "images" : [ 7 | { 8 | "role" : "notificationCenter", 9 | "size" : "24x24", 10 | "filename" : "icon38mm@2x.png", 11 | "subtype" : "38mm", 12 | "scale" : "2x", 13 | "idiom" : "watch" 14 | }, 15 | { 16 | "scale" : "2x", 17 | "role" : "notificationCenter", 18 | "size" : "27.5x27.5", 19 | "filename" : "icon42mm@2x.png", 20 | "subtype" : "42mm", 21 | "idiom" : "watch" 22 | }, 23 | { 24 | "filename" : "icon-settings@2x.png", 25 | "idiom" : "watch", 26 | "role" : "companionSettings", 27 | "scale" : "2x", 28 | "size" : "29x29" 29 | }, 30 | { 31 | "idiom" : "watch", 32 | "role" : "companionSettings", 33 | "size" : "29x29", 34 | "filename" : "icon-settings@3x.png", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "filename" : "icon-launcher@2x.png", 39 | "scale" : "2x", 40 | "idiom" : "watch", 41 | "role" : "appLauncher", 42 | "subtype" : "38mm", 43 | "size" : "40x40" 44 | }, 45 | { 46 | "filename" : "icon-quicklook38mm@2x.png", 47 | "idiom" : "watch", 48 | "role" : "quickLook", 49 | "subtype" : "38mm", 50 | "scale" : "2x", 51 | "size" : "86x86" 52 | }, 53 | { 54 | "idiom" : "watch", 55 | "size" : "98x98", 56 | "scale" : "2x", 57 | "filename" : "icon-quicklook42mm@2x.png", 58 | "subtype" : "42mm", 59 | "role" : "quickLook" 60 | }, 61 | { 62 | "idiom" : "watch-marketing", 63 | "scale" : "1x", 64 | "size" : "1024x1024", 65 | "filename" : "watch-marketing.png" 66 | }, 67 | { 68 | "scale" : "2x", 69 | "filename" : "icon40mm@2x.png", 70 | "role" : "appLauncher", 71 | "size" : "44x44", 72 | "idiom" : "watch", 73 | "subtype" : "40mm" 74 | }, 75 | { 76 | "filename" : "icon44mm@2x.png", 77 | "idiom" : "watch", 78 | "subtype" : "44mm", 79 | "size" : "50x50", 80 | "scale" : "2x", 81 | "role" : "appLauncher" 82 | }, 83 | { 84 | "idiom" : "watch", 85 | "scale" : "2x", 86 | "subtype" : "44mm", 87 | "filename" : "icon-quicklook44mm@2x.png", 88 | "size" : "108x108", 89 | "role" : "quickLook" 90 | } 91 | ] 92 | } -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-launcher@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-launcher@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook38mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook38mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook42mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook42mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook44mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-quicklook44mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-settings@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-settings@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-settings@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon-settings@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon38mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon38mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon40mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon40mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon42mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon42mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon44mm@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/icon44mm@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/watch-marketing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/AppIcon.appiconset/watch-marketing.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_App/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | $(PRODUCT_NAME) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSBluetoothAlwaysUsageDescription 24 | The App Needs to Discover and Connect to Bluetooth Devices. 25 | NSBluetoothPeripheralUsageDescription 26 | The App Needs to Discover and Connect to Bluetooth Devices. 27 | NSHumanReadableCopyright 28 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationPortraitUpsideDown 33 | 34 | WKWatchKitApp 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_Extension/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | $(PRODUCT_NAME) 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | $(MARKETING_VERSION) 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSBluetoothAlwaysUsageDescription 24 | The App Needs to Discover and Connect to Bluetooth Devices. 25 | NSBluetoothPeripheralUsageDescription 26 | The App Needs to Discover and Connect to Bluetooth Devices. 27 | NSExtension 28 | 29 | NSExtensionAttributes 30 | 31 | WKAppBundleIdentifier 32 | com.littlegreenviper.RVS-BlueToth-WatchOS-Test-Harness.watchkitapp 33 | 34 | NSExtensionPointIdentifier 35 | com.apple.watchkit 36 | 37 | NSHumanReadableCopyright 38 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 39 | WKExtensionDelegateClassName 40 | $(PRODUCT_MODULE_NAME).RVS_BlueThoth_Test_Harness_WatchOS_ExtensionDelegate 41 | WKWatchOnly 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_Extension/Table Controllers/RVS_BlueThoth_Test_Harness_WatchOS_CharacteristicTableController.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import WatchKit 24 | import Foundation 25 | import RVS_BlueThoth 26 | 27 | /* ###################################################################################################################################### */ 28 | // MARK: - Main Watch App Characteristic Table Controller - 29 | /* ###################################################################################################################################### */ 30 | class RVS_BlueThoth_Test_Harness_WatchOS_CharacteristicTableController: NSObject { 31 | /* ################################################################## */ 32 | /** 33 | Each table item has an associated Service. 34 | */ 35 | var characteristicInstance: CGA_Bluetooth_Characteristic? { 36 | didSet { 37 | if let characteristicInstance = characteristicInstance { 38 | characteristicLabel?.setText(characteristicInstance.id.localizedVariant) 39 | } 40 | } 41 | } 42 | 43 | /* ################################################################## */ 44 | /** 45 | This displays the Characteristic ID. 46 | */ 47 | @IBOutlet weak var characteristicLabel: WKInterfaceLabel! 48 | } 49 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_Extension/Table Controllers/RVS_BlueThoth_Test_Harness_WatchOS_DiscoveryTableController.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import WatchKit 24 | import Foundation 25 | import RVS_BlueThoth 26 | 27 | /* ###################################################################################################################################### */ 28 | // MARK: - Main Watch App Discovery Peripheral Table Controller - 29 | /* ###################################################################################################################################### */ 30 | class RVS_BlueThoth_Test_Harness_WatchOS_DiscoveryTableController: NSObject { 31 | /* ################################################################## */ 32 | /** 33 | Each table item has an associated Peripheral, denoted by discovery data. 34 | */ 35 | var deviceDiscoveryData: RVS_BlueThoth.DiscoveryData! { 36 | didSet { 37 | var name = deviceDiscoveryData.preferredName 38 | 39 | if name.isEmpty { 40 | name = "SLUG-NO-DEVICE-NAME".localizedVariant 41 | } 42 | 43 | deviceLabel?.setText(name) 44 | } 45 | } 46 | 47 | /* ################################################################## */ 48 | /** 49 | This displays the Peripheral name. 50 | */ 51 | @IBOutlet weak var deviceLabel: WKInterfaceLabel! 52 | } 53 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_WatchOS/RVS_BlueThoth_Test_Harness_WatchOS_Extension/Table Controllers/RVS_BlueThoth_Test_Harness_WatchOS_ServiceTableController.swift: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | import WatchKit 24 | import Foundation 25 | import RVS_BlueThoth 26 | 27 | /* ###################################################################################################################################### */ 28 | // MARK: - Main Watch App Service Table Controller - 29 | /* ###################################################################################################################################### */ 30 | class RVS_BlueThoth_Test_Harness_WatchOS_ServiceTableController: NSObject { 31 | /* ################################################################## */ 32 | /** 33 | Each table item has an associated Service. 34 | */ 35 | var serviceInstance: CGA_Bluetooth_Service? { 36 | didSet { 37 | serviceLabel?.setText(serviceInstance?.id) 38 | } 39 | } 40 | 41 | /* ################################################################## */ 42 | /** 43 | This displays the Service ID. 44 | */ 45 | @IBOutlet weak var serviceLabel: WKInterfaceLabel! 46 | } 47 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Meta/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | InfoScreenCopyrightSiteURL 22 | https://riftvalleysoftware.com 23 | InfoScreenHelpSiteURL 24 | https://riftvalleysoftware.com 25 | LSRequiresIPhoneOS 26 | 27 | NSBluetoothAlwaysUsageDescription 28 | The App Needs to Discover and Connect to Bluetooth Devices. 29 | NSBluetoothPeripheralUsageDescription 30 | The App Needs to Discover and Connect to Bluetooth Devices. 31 | NSHumanReadableCopyright 32 | Copyright © 2020 Rift Valley Software, Inc. All rights reserved. 33 | UILaunchStoryboardName 34 | LaunchScreen 35 | UIMainStoryboardFile 36 | Main 37 | UIRequiredDeviceCapabilities 38 | 39 | armv7 40 | 41 | UISupportedInterfaceOrientations 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | UISupportedInterfaceOrientations~ipad 48 | 49 | UIInterfaceOrientationPortrait 50 | UIInterfaceOrientationPortraitUpsideDown 51 | UIInterfaceOrientationLandscapeLeft 52 | UIInterfaceOrientationLandscapeRight 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small-50.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small-50@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon-small@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/icon@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/ios-marketing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/ios-marketing.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon~ipad.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-AppIcon.appiconset/notification-icon~ipad@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-40@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-60@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-60@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-72.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-72@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-72@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-76.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-76@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-83.5@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small-50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small-50.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small-50@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small-50@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon-small@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/icon@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/ios-marketing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/ios-marketing.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon@3x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon~ipad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon~ipad.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon~ipad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_iOS/Source/Resources/Assets.xcassets/iOS-Framework-AppIcon.appiconset/notification-icon~ipad@2x.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Meta/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | arm64 30 | 31 | UIUserInterfaceStyle 32 | Automatic 33 | 34 | 35 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/BottomLayer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/BottomLayer2.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "BottomLayer2.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "TopLayer2.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/TopLayer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Content.imageset/TopLayer2.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "MiddleLayer2.png", 5 | "idiom" : "tv" 6 | } 7 | ], 8 | "info" : { 9 | "author" : "xcode", 10 | "version" : 1 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/MiddleLayer2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Content.imageset/MiddleLayer2.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon - App Store.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/BottomLayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/BottomLayer.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "BottomLayer.png", 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "author" : "xcode", 15 | "version" : 1 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Back.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "layers" : [ 7 | { 8 | "filename" : "Front.imagestacklayer" 9 | }, 10 | { 11 | "filename" : "Middle.imagestacklayer" 12 | }, 13 | { 14 | "filename" : "Back.imagestacklayer" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "TopLayer.png", 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "author" : "xcode", 15 | "version" : 1 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/TopLayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Content.imageset/TopLayer.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Front.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "MiddleLayer.png", 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | } 12 | ], 13 | "info" : { 14 | "author" : "xcode", 15 | "version" : 1 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/MiddleLayer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Content.imageset/MiddleLayer.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/App Icon.imagestack/Middle.imagestacklayer/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets" : [ 3 | { 4 | "filename" : "App Icon - App Store.imagestack", 5 | "idiom" : "tv", 6 | "role" : "primary-app-icon", 7 | "size" : "1280x768" 8 | }, 9 | { 10 | "filename" : "App Icon.imagestack", 11 | "idiom" : "tv", 12 | "role" : "primary-app-icon", 13 | "size" : "400x240" 14 | }, 15 | { 16 | "filename" : "Top Shelf Image Wide.imageset", 17 | "idiom" : "tv", 18 | "role" : "top-shelf-image-wide", 19 | "size" : "2320x720" 20 | }, 21 | { 22 | "filename" : "Top Shelf Image.imageset", 23 | "idiom" : "tv", 24 | "role" : "top-shelf-image", 25 | "size" : "1920x720" 26 | } 27 | ], 28 | "info" : { 29 | "author" : "xcode", 30 | "version" : 1 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/AppIcon-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/AppIcon-1.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/AppIcon-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/AppIcon-2.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image Wide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "AppIcon-2.png", 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "tv-marketing", 14 | "scale" : "1x" 15 | }, 16 | { 17 | "filename" : "AppIcon-1.png", 18 | "idiom" : "tv-marketing", 19 | "scale" : "2x" 20 | } 21 | ], 22 | "info" : { 23 | "author" : "xcode", 24 | "version" : 1 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "tv", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "filename" : "TopShelf.png", 9 | "idiom" : "tv", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "tv-marketing", 14 | "scale" : "1x" 15 | }, 16 | { 17 | "filename" : "TopShelf-1.png", 18 | "idiom" : "tv-marketing", 19 | "scale" : "2x" 20 | } 21 | ], 22 | "info" : { 23 | "author" : "xcode", 24 | "version" : 1 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/TopShelf-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/TopShelf-1.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/TopShelf.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/App Icon & Top Shelf Image.brandassets/Top Shelf Image.imageset/TopShelf.png -------------------------------------------------------------------------------- /Tests/RVS_BlueThoth_Test_Harness_tvOS/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@1x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@2x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/AppIcon~universal@3x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/BlueThothLogo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "AppIcon~universal@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "filename" : "AppIcon~universal@2x.png", 10 | "scale" : "2x", 11 | "idiom" : "universal" 12 | }, 13 | { 14 | "scale" : "3x", 15 | "idiom" : "universal", 16 | "filename" : "AppIcon~universal@3x.png" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Gear~universal@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Gear~universal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Gear~universal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@1x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@2x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/Gear.imageset/Gear~universal@3x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "NoBT~universal@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "NoBT~universal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "NoBT~universal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@1x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@2x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/NoBT.imageset/NoBT~universal@3x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "background-gradient~universal@1x.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "background-gradient~universal@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "background-gradient~universal@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@1x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@2x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/Tests/Shared/Resources/Assets.xcassets/background-gradient.imageset/background-gradient~universal@3x.png -------------------------------------------------------------------------------- /Tests/Shared/Resources/Base.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* 2 | © Copyright 2020-2022, The Great Rift Valley Software Company 3 | 4 | LICENSE: 5 | 6 | MIT License 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation 9 | files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, 10 | modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the 11 | Software is furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 16 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 18 | CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | 20 | The Great Rift Valley Software Company: https://riftvalleysoftware.com 21 | */ 22 | 23 | /* [Details here](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html#//apple_ref/doc/uid/TP40009251-SW20) */ 24 | "NSBluetoothAlwaysUsageDescription" = "The App Needs to Discover and Connect to Bluetooth Devices."; 25 | "NSBluetoothPeripheralUsageDescription" = "The App Needs to Discover and Connect to Bluetooth Devices."; 26 | "NSHumanReadableCopyright" = "©2020 The Great Rift Valley Software Company"; 27 | "InfoScreenCopyrightSiteURL" = "https://riftvalleysoftware.com/"; 28 | "InfoScreenHelpSiteURL" = "https://riftvalleysoftware.com/"; 29 | -------------------------------------------------------------------------------- /docs/framework-internal/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/framework-internal/css/highlight.css: -------------------------------------------------------------------------------- 1 | /*! Jazzy - https://github.com/realm/jazzy 2 | * Copyright Realm Inc. 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | /* Credit to https://gist.github.com/wataru420/2048287 */ 6 | .highlight .c { 7 | color: #999988; 8 | font-style: italic; } 9 | 10 | .highlight .err { 11 | color: #a61717; 12 | background-color: #e3d2d2; } 13 | 14 | .highlight .k { 15 | color: #000000; 16 | font-weight: bold; } 17 | 18 | .highlight .o { 19 | color: #000000; 20 | font-weight: bold; } 21 | 22 | .highlight .cm { 23 | color: #999988; 24 | font-style: italic; } 25 | 26 | .highlight .cp { 27 | color: #999999; 28 | font-weight: bold; } 29 | 30 | .highlight .c1 { 31 | color: #999988; 32 | font-style: italic; } 33 | 34 | .highlight .cs { 35 | color: #999999; 36 | font-weight: bold; 37 | font-style: italic; } 38 | 39 | .highlight .gd { 40 | color: #000000; 41 | background-color: #ffdddd; } 42 | 43 | .highlight .gd .x { 44 | color: #000000; 45 | background-color: #ffaaaa; } 46 | 47 | .highlight .ge { 48 | color: #000000; 49 | font-style: italic; } 50 | 51 | .highlight .gr { 52 | color: #aa0000; } 53 | 54 | .highlight .gh { 55 | color: #999999; } 56 | 57 | .highlight .gi { 58 | color: #000000; 59 | background-color: #ddffdd; } 60 | 61 | .highlight .gi .x { 62 | color: #000000; 63 | background-color: #aaffaa; } 64 | 65 | .highlight .go { 66 | color: #888888; } 67 | 68 | .highlight .gp { 69 | color: #555555; } 70 | 71 | .highlight .gs { 72 | font-weight: bold; } 73 | 74 | .highlight .gu { 75 | color: #aaaaaa; } 76 | 77 | .highlight .gt { 78 | color: #aa0000; } 79 | 80 | .highlight .kc { 81 | color: #000000; 82 | font-weight: bold; } 83 | 84 | .highlight .kd { 85 | color: #000000; 86 | font-weight: bold; } 87 | 88 | .highlight .kp { 89 | color: #000000; 90 | font-weight: bold; } 91 | 92 | .highlight .kr { 93 | color: #000000; 94 | font-weight: bold; } 95 | 96 | .highlight .kt { 97 | color: #445588; } 98 | 99 | .highlight .m { 100 | color: #009999; } 101 | 102 | .highlight .s { 103 | color: #d14; } 104 | 105 | .highlight .na { 106 | color: #008080; } 107 | 108 | .highlight .nb { 109 | color: #0086B3; } 110 | 111 | .highlight .nc { 112 | color: #445588; 113 | font-weight: bold; } 114 | 115 | .highlight .no { 116 | color: #008080; } 117 | 118 | .highlight .ni { 119 | color: #800080; } 120 | 121 | .highlight .ne { 122 | color: #990000; 123 | font-weight: bold; } 124 | 125 | .highlight .nf { 126 | color: #990000; } 127 | 128 | .highlight .nn { 129 | color: #555555; } 130 | 131 | .highlight .nt { 132 | color: #000080; } 133 | 134 | .highlight .nv { 135 | color: #008080; } 136 | 137 | .highlight .ow { 138 | color: #000000; 139 | font-weight: bold; } 140 | 141 | .highlight .w { 142 | color: #bbbbbb; } 143 | 144 | .highlight .mf { 145 | color: #009999; } 146 | 147 | .highlight .mh { 148 | color: #009999; } 149 | 150 | .highlight .mi { 151 | color: #009999; } 152 | 153 | .highlight .mo { 154 | color: #009999; } 155 | 156 | .highlight .sb { 157 | color: #d14; } 158 | 159 | .highlight .sc { 160 | color: #d14; } 161 | 162 | .highlight .sd { 163 | color: #d14; } 164 | 165 | .highlight .s2 { 166 | color: #d14; } 167 | 168 | .highlight .se { 169 | color: #d14; } 170 | 171 | .highlight .sh { 172 | color: #d14; } 173 | 174 | .highlight .si { 175 | color: #d14; } 176 | 177 | .highlight .sx { 178 | color: #d14; } 179 | 180 | .highlight .sr { 181 | color: #009926; } 182 | 183 | .highlight .s1 { 184 | color: #d14; } 185 | 186 | .highlight .ss { 187 | color: #990073; } 188 | 189 | .highlight .bp { 190 | color: #999999; } 191 | 192 | .highlight .vc { 193 | color: #008080; } 194 | 195 | .highlight .vg { 196 | color: #008080; } 197 | 198 | .highlight .vi { 199 | color: #008080; } 200 | 201 | .highlight .il { 202 | color: #009999; } 203 | -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy. 7 | CFBundleName 8 | 9 | DocSetPlatformFamily 10 | 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /*! Jazzy - https://github.com/realm/jazzy 2 | * Copyright Realm Inc. 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | /* Credit to https://gist.github.com/wataru420/2048287 */ 6 | .highlight .c { 7 | color: #999988; 8 | font-style: italic; } 9 | 10 | .highlight .err { 11 | color: #a61717; 12 | background-color: #e3d2d2; } 13 | 14 | .highlight .k { 15 | color: #000000; 16 | font-weight: bold; } 17 | 18 | .highlight .o { 19 | color: #000000; 20 | font-weight: bold; } 21 | 22 | .highlight .cm { 23 | color: #999988; 24 | font-style: italic; } 25 | 26 | .highlight .cp { 27 | color: #999999; 28 | font-weight: bold; } 29 | 30 | .highlight .c1 { 31 | color: #999988; 32 | font-style: italic; } 33 | 34 | .highlight .cs { 35 | color: #999999; 36 | font-weight: bold; 37 | font-style: italic; } 38 | 39 | .highlight .gd { 40 | color: #000000; 41 | background-color: #ffdddd; } 42 | 43 | .highlight .gd .x { 44 | color: #000000; 45 | background-color: #ffaaaa; } 46 | 47 | .highlight .ge { 48 | color: #000000; 49 | font-style: italic; } 50 | 51 | .highlight .gr { 52 | color: #aa0000; } 53 | 54 | .highlight .gh { 55 | color: #999999; } 56 | 57 | .highlight .gi { 58 | color: #000000; 59 | background-color: #ddffdd; } 60 | 61 | .highlight .gi .x { 62 | color: #000000; 63 | background-color: #aaffaa; } 64 | 65 | .highlight .go { 66 | color: #888888; } 67 | 68 | .highlight .gp { 69 | color: #555555; } 70 | 71 | .highlight .gs { 72 | font-weight: bold; } 73 | 74 | .highlight .gu { 75 | color: #aaaaaa; } 76 | 77 | .highlight .gt { 78 | color: #aa0000; } 79 | 80 | .highlight .kc { 81 | color: #000000; 82 | font-weight: bold; } 83 | 84 | .highlight .kd { 85 | color: #000000; 86 | font-weight: bold; } 87 | 88 | .highlight .kp { 89 | color: #000000; 90 | font-weight: bold; } 91 | 92 | .highlight .kr { 93 | color: #000000; 94 | font-weight: bold; } 95 | 96 | .highlight .kt { 97 | color: #445588; } 98 | 99 | .highlight .m { 100 | color: #009999; } 101 | 102 | .highlight .s { 103 | color: #d14; } 104 | 105 | .highlight .na { 106 | color: #008080; } 107 | 108 | .highlight .nb { 109 | color: #0086B3; } 110 | 111 | .highlight .nc { 112 | color: #445588; 113 | font-weight: bold; } 114 | 115 | .highlight .no { 116 | color: #008080; } 117 | 118 | .highlight .ni { 119 | color: #800080; } 120 | 121 | .highlight .ne { 122 | color: #990000; 123 | font-weight: bold; } 124 | 125 | .highlight .nf { 126 | color: #990000; } 127 | 128 | .highlight .nn { 129 | color: #555555; } 130 | 131 | .highlight .nt { 132 | color: #000080; } 133 | 134 | .highlight .nv { 135 | color: #008080; } 136 | 137 | .highlight .ow { 138 | color: #000000; 139 | font-weight: bold; } 140 | 141 | .highlight .w { 142 | color: #bbbbbb; } 143 | 144 | .highlight .mf { 145 | color: #009999; } 146 | 147 | .highlight .mh { 148 | color: #009999; } 149 | 150 | .highlight .mi { 151 | color: #009999; } 152 | 153 | .highlight .mo { 154 | color: #009999; } 155 | 156 | .highlight .sb { 157 | color: #d14; } 158 | 159 | .highlight .sc { 160 | color: #d14; } 161 | 162 | .highlight .sd { 163 | color: #d14; } 164 | 165 | .highlight .s2 { 166 | color: #d14; } 167 | 168 | .highlight .se { 169 | color: #d14; } 170 | 171 | .highlight .sh { 172 | color: #d14; } 173 | 174 | .highlight .si { 175 | color: #d14; } 176 | 177 | .highlight .sx { 178 | color: #d14; } 179 | 180 | .highlight .sr { 181 | color: #009926; } 182 | 183 | .highlight .s1 { 184 | color: #d14; } 185 | 186 | .highlight .ss { 187 | color: #990073; } 188 | 189 | .highlight .bp { 190 | color: #999999; } 191 | 192 | .highlight .vc { 193 | color: #008080; } 194 | 195 | .highlight .vg { 196 | color: #008080; } 197 | 198 | .highlight .vi { 199 | color: #008080; } 200 | 201 | .highlight .il { 202 | color: #009999; } 203 | -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.docset/Contents/Resources/Documents/img/spinner.gif -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | window.jazzy = {'docset': false} 6 | if (typeof window.dash != 'undefined') { 7 | document.documentElement.className += ' dash' 8 | window.jazzy.docset = true 9 | } 10 | if (navigator.userAgent.match(/xcode/i)) { 11 | document.documentElement.className += ' xcode' 12 | window.jazzy.docset = true 13 | } 14 | 15 | function toggleItem($link, $content) { 16 | var animationDuration = 300; 17 | $link.toggleClass('token-open'); 18 | $content.slideToggle(animationDuration); 19 | } 20 | 21 | function itemLinkToContent($link) { 22 | return $link.parent().parent().next(); 23 | } 24 | 25 | // On doc load + hash-change, open any targetted item 26 | function openCurrentItemIfClosed() { 27 | if (window.jazzy.docset) { 28 | return; 29 | } 30 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 31 | $content = itemLinkToContent($link); 32 | if ($content.is(':hidden')) { 33 | toggleItem($link, $content); 34 | } 35 | } 36 | 37 | $(openCurrentItemIfClosed); 38 | $(window).on('hashchange', openCurrentItemIfClosed); 39 | 40 | // On item link ('token') click, toggle its discussion 41 | $('.token').on('click', function(event) { 42 | if (window.jazzy.docset) { 43 | return; 44 | } 45 | var $link = $(this); 46 | toggleItem($link, itemLinkToContent($link)); 47 | 48 | // Keeps the document from jumping to the hash. 49 | var href = $link.attr('href'); 50 | if (history.pushState) { 51 | history.pushState({}, '', href); 52 | } else { 53 | location.hash = href; 54 | } 55 | event.preventDefault(); 56 | }); 57 | 58 | // Clicks on links to the current, closed, item need to open the item 59 | $("a:not('.token')").on('click', function() { 60 | if (location == this.href) { 61 | openCurrentItemIfClosed(); 62 | } 63 | }); 64 | 65 | // KaTeX rendering 66 | if ("katex" in window) { 67 | $($('.math').each( (_, element) => { 68 | katex.render(element.textContent, element, { 69 | displayMode: $(element).hasClass('m-block'), 70 | throwOnError: false, 71 | trust: true 72 | }); 73 | })) 74 | } 75 | -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | $(function(){ 6 | var $typeahead = $('[data-typeahead]'); 7 | var $form = $typeahead.parents('form'); 8 | var searchURL = $form.attr('action'); 9 | 10 | function displayTemplate(result) { 11 | return result.name; 12 | } 13 | 14 | function suggestionTemplate(result) { 15 | var t = '
'; 16 | t += '' + result.name + ''; 17 | if (result.parent_name) { 18 | t += '' + result.parent_name + ''; 19 | } 20 | t += '
'; 21 | return t; 22 | } 23 | 24 | $typeahead.one('focus', function() { 25 | $form.addClass('loading'); 26 | 27 | $.getJSON(searchURL).then(function(searchData) { 28 | const searchIndex = lunr(function() { 29 | this.ref('url'); 30 | this.field('name'); 31 | this.field('abstract'); 32 | for (const [url, doc] of Object.entries(searchData)) { 33 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 34 | } 35 | }); 36 | 37 | $typeahead.typeahead( 38 | { 39 | highlight: true, 40 | minLength: 3, 41 | autoselect: true 42 | }, 43 | { 44 | limit: 10, 45 | display: displayTemplate, 46 | templates: { suggestion: suggestionTemplate }, 47 | source: function(query, sync) { 48 | const lcSearch = query.toLowerCase(); 49 | const results = searchIndex.query(function(q) { 50 | q.term(lcSearch, { boost: 100 }); 51 | q.term(lcSearch, { 52 | boost: 10, 53 | wildcard: lunr.Query.wildcard.TRAILING 54 | }); 55 | }).map(function(result) { 56 | var doc = searchData[result.ref]; 57 | doc.url = result.ref; 58 | return doc; 59 | }); 60 | sync(results); 61 | } 62 | } 63 | ); 64 | $form.removeClass('loading'); 65 | $typeahead.trigger('focus'); 66 | }); 67 | }); 68 | 69 | var baseURL = searchURL.slice(0, -"search.json".length); 70 | 71 | $typeahead.on('typeahead:select', function(e, result) { 72 | window.location = baseURL + result.url; 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/framework-internal/docsets/.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/docsets/.tgz -------------------------------------------------------------------------------- /docs/framework-internal/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/icon.png -------------------------------------------------------------------------------- /docs/framework-internal/img/AddFramework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/AddFramework.png -------------------------------------------------------------------------------- /docs/framework-internal/img/CheckoutsDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/CheckoutsDir.png -------------------------------------------------------------------------------- /docs/framework-internal/img/InFrameworksDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/InFrameworksDir.png -------------------------------------------------------------------------------- /docs/framework-internal/img/IncludeProjectFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/IncludeProjectFile.png -------------------------------------------------------------------------------- /docs/framework-internal/img/SelectTarget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/SelectTarget.png -------------------------------------------------------------------------------- /docs/framework-internal/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/carat.png -------------------------------------------------------------------------------- /docs/framework-internal/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/dash.png -------------------------------------------------------------------------------- /docs/framework-internal/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/gh.png -------------------------------------------------------------------------------- /docs/framework-internal/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/icon.png -------------------------------------------------------------------------------- /docs/framework-internal/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-internal/img/spinner.gif -------------------------------------------------------------------------------- /docs/framework-internal/js/jazzy.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | window.jazzy = {'docset': false} 6 | if (typeof window.dash != 'undefined') { 7 | document.documentElement.className += ' dash' 8 | window.jazzy.docset = true 9 | } 10 | if (navigator.userAgent.match(/xcode/i)) { 11 | document.documentElement.className += ' xcode' 12 | window.jazzy.docset = true 13 | } 14 | 15 | function toggleItem($link, $content) { 16 | var animationDuration = 300; 17 | $link.toggleClass('token-open'); 18 | $content.slideToggle(animationDuration); 19 | } 20 | 21 | function itemLinkToContent($link) { 22 | return $link.parent().parent().next(); 23 | } 24 | 25 | // On doc load + hash-change, open any targetted item 26 | function openCurrentItemIfClosed() { 27 | if (window.jazzy.docset) { 28 | return; 29 | } 30 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 31 | $content = itemLinkToContent($link); 32 | if ($content.is(':hidden')) { 33 | toggleItem($link, $content); 34 | } 35 | } 36 | 37 | $(openCurrentItemIfClosed); 38 | $(window).on('hashchange', openCurrentItemIfClosed); 39 | 40 | // On item link ('token') click, toggle its discussion 41 | $('.token').on('click', function(event) { 42 | if (window.jazzy.docset) { 43 | return; 44 | } 45 | var $link = $(this); 46 | toggleItem($link, itemLinkToContent($link)); 47 | 48 | // Keeps the document from jumping to the hash. 49 | var href = $link.attr('href'); 50 | if (history.pushState) { 51 | history.pushState({}, '', href); 52 | } else { 53 | location.hash = href; 54 | } 55 | event.preventDefault(); 56 | }); 57 | 58 | // Clicks on links to the current, closed, item need to open the item 59 | $("a:not('.token')").on('click', function() { 60 | if (location == this.href) { 61 | openCurrentItemIfClosed(); 62 | } 63 | }); 64 | 65 | // KaTeX rendering 66 | if ("katex" in window) { 67 | $($('.math').each( (_, element) => { 68 | katex.render(element.textContent, element, { 69 | displayMode: $(element).hasClass('m-block'), 70 | throwOnError: false, 71 | trust: true 72 | }); 73 | })) 74 | } 75 | -------------------------------------------------------------------------------- /docs/framework-internal/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | $(function(){ 6 | var $typeahead = $('[data-typeahead]'); 7 | var $form = $typeahead.parents('form'); 8 | var searchURL = $form.attr('action'); 9 | 10 | function displayTemplate(result) { 11 | return result.name; 12 | } 13 | 14 | function suggestionTemplate(result) { 15 | var t = '
'; 16 | t += '' + result.name + ''; 17 | if (result.parent_name) { 18 | t += '' + result.parent_name + ''; 19 | } 20 | t += '
'; 21 | return t; 22 | } 23 | 24 | $typeahead.one('focus', function() { 25 | $form.addClass('loading'); 26 | 27 | $.getJSON(searchURL).then(function(searchData) { 28 | const searchIndex = lunr(function() { 29 | this.ref('url'); 30 | this.field('name'); 31 | this.field('abstract'); 32 | for (const [url, doc] of Object.entries(searchData)) { 33 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 34 | } 35 | }); 36 | 37 | $typeahead.typeahead( 38 | { 39 | highlight: true, 40 | minLength: 3, 41 | autoselect: true 42 | }, 43 | { 44 | limit: 10, 45 | display: displayTemplate, 46 | templates: { suggestion: suggestionTemplate }, 47 | source: function(query, sync) { 48 | const lcSearch = query.toLowerCase(); 49 | const results = searchIndex.query(function(q) { 50 | q.term(lcSearch, { boost: 100 }); 51 | q.term(lcSearch, { 52 | boost: 10, 53 | wildcard: lunr.Query.wildcard.TRAILING 54 | }); 55 | }).map(function(result) { 56 | var doc = searchData[result.ref]; 57 | doc.url = result.ref; 58 | return doc; 59 | }); 60 | sync(results); 61 | } 62 | } 63 | ); 64 | $form.removeClass('loading'); 65 | $typeahead.trigger('focus'); 66 | }); 67 | }); 68 | 69 | var baseURL = searchURL.slice(0, -"search.json".length); 70 | 71 | $typeahead.on('typeahead:select', function(e, result) { 72 | window.location = baseURL + result.url; 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /docs/framework-internal/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/chrismarshall/Development/RiftValley/RVS_BlueThoth" 6 | } -------------------------------------------------------------------------------- /docs/framework-public/badge.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | documentation 17 | 18 | 19 | documentation 20 | 21 | 22 | 100% 23 | 24 | 25 | 100% 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/framework-public/css/highlight.css: -------------------------------------------------------------------------------- 1 | /*! Jazzy - https://github.com/realm/jazzy 2 | * Copyright Realm Inc. 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | /* Credit to https://gist.github.com/wataru420/2048287 */ 6 | .highlight .c { 7 | color: #999988; 8 | font-style: italic; } 9 | 10 | .highlight .err { 11 | color: #a61717; 12 | background-color: #e3d2d2; } 13 | 14 | .highlight .k { 15 | color: #000000; 16 | font-weight: bold; } 17 | 18 | .highlight .o { 19 | color: #000000; 20 | font-weight: bold; } 21 | 22 | .highlight .cm { 23 | color: #999988; 24 | font-style: italic; } 25 | 26 | .highlight .cp { 27 | color: #999999; 28 | font-weight: bold; } 29 | 30 | .highlight .c1 { 31 | color: #999988; 32 | font-style: italic; } 33 | 34 | .highlight .cs { 35 | color: #999999; 36 | font-weight: bold; 37 | font-style: italic; } 38 | 39 | .highlight .gd { 40 | color: #000000; 41 | background-color: #ffdddd; } 42 | 43 | .highlight .gd .x { 44 | color: #000000; 45 | background-color: #ffaaaa; } 46 | 47 | .highlight .ge { 48 | color: #000000; 49 | font-style: italic; } 50 | 51 | .highlight .gr { 52 | color: #aa0000; } 53 | 54 | .highlight .gh { 55 | color: #999999; } 56 | 57 | .highlight .gi { 58 | color: #000000; 59 | background-color: #ddffdd; } 60 | 61 | .highlight .gi .x { 62 | color: #000000; 63 | background-color: #aaffaa; } 64 | 65 | .highlight .go { 66 | color: #888888; } 67 | 68 | .highlight .gp { 69 | color: #555555; } 70 | 71 | .highlight .gs { 72 | font-weight: bold; } 73 | 74 | .highlight .gu { 75 | color: #aaaaaa; } 76 | 77 | .highlight .gt { 78 | color: #aa0000; } 79 | 80 | .highlight .kc { 81 | color: #000000; 82 | font-weight: bold; } 83 | 84 | .highlight .kd { 85 | color: #000000; 86 | font-weight: bold; } 87 | 88 | .highlight .kp { 89 | color: #000000; 90 | font-weight: bold; } 91 | 92 | .highlight .kr { 93 | color: #000000; 94 | font-weight: bold; } 95 | 96 | .highlight .kt { 97 | color: #445588; } 98 | 99 | .highlight .m { 100 | color: #009999; } 101 | 102 | .highlight .s { 103 | color: #d14; } 104 | 105 | .highlight .na { 106 | color: #008080; } 107 | 108 | .highlight .nb { 109 | color: #0086B3; } 110 | 111 | .highlight .nc { 112 | color: #445588; 113 | font-weight: bold; } 114 | 115 | .highlight .no { 116 | color: #008080; } 117 | 118 | .highlight .ni { 119 | color: #800080; } 120 | 121 | .highlight .ne { 122 | color: #990000; 123 | font-weight: bold; } 124 | 125 | .highlight .nf { 126 | color: #990000; } 127 | 128 | .highlight .nn { 129 | color: #555555; } 130 | 131 | .highlight .nt { 132 | color: #000080; } 133 | 134 | .highlight .nv { 135 | color: #008080; } 136 | 137 | .highlight .ow { 138 | color: #000000; 139 | font-weight: bold; } 140 | 141 | .highlight .w { 142 | color: #bbbbbb; } 143 | 144 | .highlight .mf { 145 | color: #009999; } 146 | 147 | .highlight .mh { 148 | color: #009999; } 149 | 150 | .highlight .mi { 151 | color: #009999; } 152 | 153 | .highlight .mo { 154 | color: #009999; } 155 | 156 | .highlight .sb { 157 | color: #d14; } 158 | 159 | .highlight .sc { 160 | color: #d14; } 161 | 162 | .highlight .sd { 163 | color: #d14; } 164 | 165 | .highlight .s2 { 166 | color: #d14; } 167 | 168 | .highlight .se { 169 | color: #d14; } 170 | 171 | .highlight .sh { 172 | color: #d14; } 173 | 174 | .highlight .si { 175 | color: #d14; } 176 | 177 | .highlight .sx { 178 | color: #d14; } 179 | 180 | .highlight .sr { 181 | color: #009926; } 182 | 183 | .highlight .s1 { 184 | color: #d14; } 185 | 186 | .highlight .ss { 187 | color: #990073; } 188 | 189 | .highlight .bp { 190 | color: #999999; } 191 | 192 | .highlight .vc { 193 | color: #008080; } 194 | 195 | .highlight .vg { 196 | color: #008080; } 197 | 198 | .highlight .vi { 199 | color: #008080; } 200 | 201 | .highlight .il { 202 | color: #009999; } 203 | -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleIdentifier 6 | com.jazzy. 7 | CFBundleName 8 | 9 | DocSetPlatformFamily 10 | 11 | isDashDocset 12 | 13 | dashIndexFilePath 14 | index.html 15 | isJavaScriptEnabled 16 | 17 | DashDocSetFamily 18 | dashtoc 19 | 20 | 21 | -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/css/highlight.css: -------------------------------------------------------------------------------- 1 | /*! Jazzy - https://github.com/realm/jazzy 2 | * Copyright Realm Inc. 3 | * SPDX-License-Identifier: MIT 4 | */ 5 | /* Credit to https://gist.github.com/wataru420/2048287 */ 6 | .highlight .c { 7 | color: #999988; 8 | font-style: italic; } 9 | 10 | .highlight .err { 11 | color: #a61717; 12 | background-color: #e3d2d2; } 13 | 14 | .highlight .k { 15 | color: #000000; 16 | font-weight: bold; } 17 | 18 | .highlight .o { 19 | color: #000000; 20 | font-weight: bold; } 21 | 22 | .highlight .cm { 23 | color: #999988; 24 | font-style: italic; } 25 | 26 | .highlight .cp { 27 | color: #999999; 28 | font-weight: bold; } 29 | 30 | .highlight .c1 { 31 | color: #999988; 32 | font-style: italic; } 33 | 34 | .highlight .cs { 35 | color: #999999; 36 | font-weight: bold; 37 | font-style: italic; } 38 | 39 | .highlight .gd { 40 | color: #000000; 41 | background-color: #ffdddd; } 42 | 43 | .highlight .gd .x { 44 | color: #000000; 45 | background-color: #ffaaaa; } 46 | 47 | .highlight .ge { 48 | color: #000000; 49 | font-style: italic; } 50 | 51 | .highlight .gr { 52 | color: #aa0000; } 53 | 54 | .highlight .gh { 55 | color: #999999; } 56 | 57 | .highlight .gi { 58 | color: #000000; 59 | background-color: #ddffdd; } 60 | 61 | .highlight .gi .x { 62 | color: #000000; 63 | background-color: #aaffaa; } 64 | 65 | .highlight .go { 66 | color: #888888; } 67 | 68 | .highlight .gp { 69 | color: #555555; } 70 | 71 | .highlight .gs { 72 | font-weight: bold; } 73 | 74 | .highlight .gu { 75 | color: #aaaaaa; } 76 | 77 | .highlight .gt { 78 | color: #aa0000; } 79 | 80 | .highlight .kc { 81 | color: #000000; 82 | font-weight: bold; } 83 | 84 | .highlight .kd { 85 | color: #000000; 86 | font-weight: bold; } 87 | 88 | .highlight .kp { 89 | color: #000000; 90 | font-weight: bold; } 91 | 92 | .highlight .kr { 93 | color: #000000; 94 | font-weight: bold; } 95 | 96 | .highlight .kt { 97 | color: #445588; } 98 | 99 | .highlight .m { 100 | color: #009999; } 101 | 102 | .highlight .s { 103 | color: #d14; } 104 | 105 | .highlight .na { 106 | color: #008080; } 107 | 108 | .highlight .nb { 109 | color: #0086B3; } 110 | 111 | .highlight .nc { 112 | color: #445588; 113 | font-weight: bold; } 114 | 115 | .highlight .no { 116 | color: #008080; } 117 | 118 | .highlight .ni { 119 | color: #800080; } 120 | 121 | .highlight .ne { 122 | color: #990000; 123 | font-weight: bold; } 124 | 125 | .highlight .nf { 126 | color: #990000; } 127 | 128 | .highlight .nn { 129 | color: #555555; } 130 | 131 | .highlight .nt { 132 | color: #000080; } 133 | 134 | .highlight .nv { 135 | color: #008080; } 136 | 137 | .highlight .ow { 138 | color: #000000; 139 | font-weight: bold; } 140 | 141 | .highlight .w { 142 | color: #bbbbbb; } 143 | 144 | .highlight .mf { 145 | color: #009999; } 146 | 147 | .highlight .mh { 148 | color: #009999; } 149 | 150 | .highlight .mi { 151 | color: #009999; } 152 | 153 | .highlight .mo { 154 | color: #009999; } 155 | 156 | .highlight .sb { 157 | color: #d14; } 158 | 159 | .highlight .sc { 160 | color: #d14; } 161 | 162 | .highlight .sd { 163 | color: #d14; } 164 | 165 | .highlight .s2 { 166 | color: #d14; } 167 | 168 | .highlight .se { 169 | color: #d14; } 170 | 171 | .highlight .sh { 172 | color: #d14; } 173 | 174 | .highlight .si { 175 | color: #d14; } 176 | 177 | .highlight .sx { 178 | color: #d14; } 179 | 180 | .highlight .sr { 181 | color: #009926; } 182 | 183 | .highlight .s1 { 184 | color: #d14; } 185 | 186 | .highlight .ss { 187 | color: #990073; } 188 | 189 | .highlight .bp { 190 | color: #999999; } 191 | 192 | .highlight .vc { 193 | color: #008080; } 194 | 195 | .highlight .vg { 196 | color: #008080; } 197 | 198 | .highlight .vi { 199 | color: #008080; } 200 | 201 | .highlight .il { 202 | color: #009999; } 203 | -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/carat.png -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/dash.png -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/gh.png -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.docset/Contents/Resources/Documents/img/spinner.gif -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/js/jazzy.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | window.jazzy = {'docset': false} 6 | if (typeof window.dash != 'undefined') { 7 | document.documentElement.className += ' dash' 8 | window.jazzy.docset = true 9 | } 10 | if (navigator.userAgent.match(/xcode/i)) { 11 | document.documentElement.className += ' xcode' 12 | window.jazzy.docset = true 13 | } 14 | 15 | function toggleItem($link, $content) { 16 | var animationDuration = 300; 17 | $link.toggleClass('token-open'); 18 | $content.slideToggle(animationDuration); 19 | } 20 | 21 | function itemLinkToContent($link) { 22 | return $link.parent().parent().next(); 23 | } 24 | 25 | // On doc load + hash-change, open any targetted item 26 | function openCurrentItemIfClosed() { 27 | if (window.jazzy.docset) { 28 | return; 29 | } 30 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 31 | $content = itemLinkToContent($link); 32 | if ($content.is(':hidden')) { 33 | toggleItem($link, $content); 34 | } 35 | } 36 | 37 | $(openCurrentItemIfClosed); 38 | $(window).on('hashchange', openCurrentItemIfClosed); 39 | 40 | // On item link ('token') click, toggle its discussion 41 | $('.token').on('click', function(event) { 42 | if (window.jazzy.docset) { 43 | return; 44 | } 45 | var $link = $(this); 46 | toggleItem($link, itemLinkToContent($link)); 47 | 48 | // Keeps the document from jumping to the hash. 49 | var href = $link.attr('href'); 50 | if (history.pushState) { 51 | history.pushState({}, '', href); 52 | } else { 53 | location.hash = href; 54 | } 55 | event.preventDefault(); 56 | }); 57 | 58 | // Clicks on links to the current, closed, item need to open the item 59 | $("a:not('.token')").on('click', function() { 60 | if (location == this.href) { 61 | openCurrentItemIfClosed(); 62 | } 63 | }); 64 | 65 | // KaTeX rendering 66 | if ("katex" in window) { 67 | $($('.math').each( (_, element) => { 68 | katex.render(element.textContent, element, { 69 | displayMode: $(element).hasClass('m-block'), 70 | throwOnError: false, 71 | trust: true 72 | }); 73 | })) 74 | } 75 | -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/Documents/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | $(function(){ 6 | var $typeahead = $('[data-typeahead]'); 7 | var $form = $typeahead.parents('form'); 8 | var searchURL = $form.attr('action'); 9 | 10 | function displayTemplate(result) { 11 | return result.name; 12 | } 13 | 14 | function suggestionTemplate(result) { 15 | var t = '
'; 16 | t += '' + result.name + ''; 17 | if (result.parent_name) { 18 | t += '' + result.parent_name + ''; 19 | } 20 | t += '
'; 21 | return t; 22 | } 23 | 24 | $typeahead.one('focus', function() { 25 | $form.addClass('loading'); 26 | 27 | $.getJSON(searchURL).then(function(searchData) { 28 | const searchIndex = lunr(function() { 29 | this.ref('url'); 30 | this.field('name'); 31 | this.field('abstract'); 32 | for (const [url, doc] of Object.entries(searchData)) { 33 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 34 | } 35 | }); 36 | 37 | $typeahead.typeahead( 38 | { 39 | highlight: true, 40 | minLength: 3, 41 | autoselect: true 42 | }, 43 | { 44 | limit: 10, 45 | display: displayTemplate, 46 | templates: { suggestion: suggestionTemplate }, 47 | source: function(query, sync) { 48 | const lcSearch = query.toLowerCase(); 49 | const results = searchIndex.query(function(q) { 50 | q.term(lcSearch, { boost: 100 }); 51 | q.term(lcSearch, { 52 | boost: 10, 53 | wildcard: lunr.Query.wildcard.TRAILING 54 | }); 55 | }).map(function(result) { 56 | var doc = searchData[result.ref]; 57 | doc.url = result.ref; 58 | return doc; 59 | }); 60 | sync(results); 61 | } 62 | } 63 | ); 64 | $form.removeClass('loading'); 65 | $typeahead.trigger('focus'); 66 | }); 67 | }); 68 | 69 | var baseURL = searchURL.slice(0, -"search.json".length); 70 | 71 | $typeahead.on('typeahead:select', function(e, result) { 72 | window.location = baseURL + result.url; 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /docs/framework-public/docsets/.docset/Contents/Resources/docSet.dsidx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.docset/Contents/Resources/docSet.dsidx -------------------------------------------------------------------------------- /docs/framework-public/docsets/.tgz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/docsets/.tgz -------------------------------------------------------------------------------- /docs/framework-public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/icon.png -------------------------------------------------------------------------------- /docs/framework-public/img/AddFramework.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/AddFramework.png -------------------------------------------------------------------------------- /docs/framework-public/img/CheckoutsDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/CheckoutsDir.png -------------------------------------------------------------------------------- /docs/framework-public/img/InFrameworksDir.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/InFrameworksDir.png -------------------------------------------------------------------------------- /docs/framework-public/img/IncludeProjectFile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/IncludeProjectFile.png -------------------------------------------------------------------------------- /docs/framework-public/img/SelectTarget.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/SelectTarget.png -------------------------------------------------------------------------------- /docs/framework-public/img/carat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/carat.png -------------------------------------------------------------------------------- /docs/framework-public/img/dash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/dash.png -------------------------------------------------------------------------------- /docs/framework-public/img/gh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/gh.png -------------------------------------------------------------------------------- /docs/framework-public/img/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/icon.png -------------------------------------------------------------------------------- /docs/framework-public/img/spinner.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/docs/framework-public/img/spinner.gif -------------------------------------------------------------------------------- /docs/framework-public/js/jazzy.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | window.jazzy = {'docset': false} 6 | if (typeof window.dash != 'undefined') { 7 | document.documentElement.className += ' dash' 8 | window.jazzy.docset = true 9 | } 10 | if (navigator.userAgent.match(/xcode/i)) { 11 | document.documentElement.className += ' xcode' 12 | window.jazzy.docset = true 13 | } 14 | 15 | function toggleItem($link, $content) { 16 | var animationDuration = 300; 17 | $link.toggleClass('token-open'); 18 | $content.slideToggle(animationDuration); 19 | } 20 | 21 | function itemLinkToContent($link) { 22 | return $link.parent().parent().next(); 23 | } 24 | 25 | // On doc load + hash-change, open any targetted item 26 | function openCurrentItemIfClosed() { 27 | if (window.jazzy.docset) { 28 | return; 29 | } 30 | var $link = $(`a[name="${location.hash.substring(1)}"]`).nextAll('.token'); 31 | $content = itemLinkToContent($link); 32 | if ($content.is(':hidden')) { 33 | toggleItem($link, $content); 34 | } 35 | } 36 | 37 | $(openCurrentItemIfClosed); 38 | $(window).on('hashchange', openCurrentItemIfClosed); 39 | 40 | // On item link ('token') click, toggle its discussion 41 | $('.token').on('click', function(event) { 42 | if (window.jazzy.docset) { 43 | return; 44 | } 45 | var $link = $(this); 46 | toggleItem($link, itemLinkToContent($link)); 47 | 48 | // Keeps the document from jumping to the hash. 49 | var href = $link.attr('href'); 50 | if (history.pushState) { 51 | history.pushState({}, '', href); 52 | } else { 53 | location.hash = href; 54 | } 55 | event.preventDefault(); 56 | }); 57 | 58 | // Clicks on links to the current, closed, item need to open the item 59 | $("a:not('.token')").on('click', function() { 60 | if (location == this.href) { 61 | openCurrentItemIfClosed(); 62 | } 63 | }); 64 | 65 | // KaTeX rendering 66 | if ("katex" in window) { 67 | $($('.math').each( (_, element) => { 68 | katex.render(element.textContent, element, { 69 | displayMode: $(element).hasClass('m-block'), 70 | throwOnError: false, 71 | trust: true 72 | }); 73 | })) 74 | } 75 | -------------------------------------------------------------------------------- /docs/framework-public/js/jazzy.search.js: -------------------------------------------------------------------------------- 1 | // Jazzy - https://github.com/realm/jazzy 2 | // Copyright Realm Inc. 3 | // SPDX-License-Identifier: MIT 4 | 5 | $(function(){ 6 | var $typeahead = $('[data-typeahead]'); 7 | var $form = $typeahead.parents('form'); 8 | var searchURL = $form.attr('action'); 9 | 10 | function displayTemplate(result) { 11 | return result.name; 12 | } 13 | 14 | function suggestionTemplate(result) { 15 | var t = '
'; 16 | t += '' + result.name + ''; 17 | if (result.parent_name) { 18 | t += '' + result.parent_name + ''; 19 | } 20 | t += '
'; 21 | return t; 22 | } 23 | 24 | $typeahead.one('focus', function() { 25 | $form.addClass('loading'); 26 | 27 | $.getJSON(searchURL).then(function(searchData) { 28 | const searchIndex = lunr(function() { 29 | this.ref('url'); 30 | this.field('name'); 31 | this.field('abstract'); 32 | for (const [url, doc] of Object.entries(searchData)) { 33 | this.add({url: url, name: doc.name, abstract: doc.abstract}); 34 | } 35 | }); 36 | 37 | $typeahead.typeahead( 38 | { 39 | highlight: true, 40 | minLength: 3, 41 | autoselect: true 42 | }, 43 | { 44 | limit: 10, 45 | display: displayTemplate, 46 | templates: { suggestion: suggestionTemplate }, 47 | source: function(query, sync) { 48 | const lcSearch = query.toLowerCase(); 49 | const results = searchIndex.query(function(q) { 50 | q.term(lcSearch, { boost: 100 }); 51 | q.term(lcSearch, { 52 | boost: 10, 53 | wildcard: lunr.Query.wildcard.TRAILING 54 | }); 55 | }).map(function(result) { 56 | var doc = searchData[result.ref]; 57 | doc.url = result.ref; 58 | return doc; 59 | }); 60 | sync(results); 61 | } 62 | } 63 | ); 64 | $form.removeClass('loading'); 65 | $typeahead.trigger('focus'); 66 | }); 67 | }); 68 | 69 | var baseURL = searchURL.slice(0, -"search.json".length); 70 | 71 | $typeahead.on('typeahead:select', function(e, result) { 72 | window.location = baseURL + result.url; 73 | }); 74 | }); 75 | -------------------------------------------------------------------------------- /docs/framework-public/undocumented.json: -------------------------------------------------------------------------------- 1 | { 2 | "warnings": [ 3 | 4 | ], 5 | "source_directory": "/Users/chrismarshall/Development/RiftValley/RVS_BlueThoth" 6 | } -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | RVS_BlueThoth Documentation 6 | 7 | 8 | 9 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/icon.png -------------------------------------------------------------------------------- /jazzy.command: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | CWD="$(pwd)" 3 | MY_SCRIPT_PATH=`dirname "${BASH_SOURCE[0]}"` 4 | cd "${MY_SCRIPT_PATH}" 5 | 6 | rm -drf docs/framework-public/* 7 | rm -drf docs/framework-internal/* 8 | 9 | mkdir -p docs/framework-public/img 10 | mkdir -p docs/framework-internal/img 11 | 12 | echo "Creating Public API Docs for the iOS Framework\n" 13 | 14 | jazzy --readme ./Sources/RVS_BlueThoth/README-PUBLIC.md \ 15 | --github_url https://github.com/RiftValleySoftware/RVS_BlueThoth \ 16 | --title RVS_BlueThoth\ Doumentation \ 17 | --min_acl public \ 18 | --theme fullwidth \ 19 | --exclude ./Sources/RVS_BlueThoth/Implementation/Peripherals/CGA_Bluetooth_Peripheral_Callbacks.swift,./Sources/RVS_BlueThoth/RVS_BlueThoth_Callbacks.swift \ 20 | --output docs/framework-public \ 21 | --build-tool-arguments -scheme,"RVS_BlueThoth" 22 | cp ./Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/* docs/framework-public/img 23 | cp ./icon.png docs/framework-public/icon.png 24 | 25 | echo "\nCreating Internal API Docs for the iOS Framework\n" 26 | 27 | jazzy --readme ./README.md \ 28 | --github_url https://github.com/RiftValleySoftware/RVS_BlueThoth/ \ 29 | --title RVS_BlueThoth\ Doumentation \ 30 | --min_acl private \ 31 | --theme fullwidth \ 32 | --output docs/framework-internal \ 33 | --build-tool-arguments -scheme,"RVS_BlueThoth" 34 | cp ./Sources/RVS_BlueThoth/RVS_BlueThoth.docc/Resources/* docs/framework-internal/img 35 | cp ./icon.png docs/framework-internal/icon.png 36 | 37 | cd "${CWD}" 38 | -------------------------------------------------------------------------------- /spec/AppIcon.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/spec/AppIcon.pdf -------------------------------------------------------------------------------- /spec/GATT_Specification_Supplement_v1.1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/spec/GATT_Specification_Supplement_v1.1.pdf -------------------------------------------------------------------------------- /spec/SocialPreview.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RiftValleySoftware/RVS_BlueThoth/fd3ba2073293f89a56d6d759c9aa04b3b9d4abc5/spec/SocialPreview.pdf --------------------------------------------------------------------------------