summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShinichi Watanabe <swatanabe@xevo.com>2020-08-20 10:25:10 +0900
committerShinichi Watanabe <swatanabe@xevo.com>2020-08-20 10:25:10 +0900
commit70f5f24591d95921c3a64664b07fd1db80a0b54c (patch)
treeb3d1fbec70a1a61a776db3dd4c262b77c8d8f7c1
parenteb38eb3da2652593d2d14fc2502def1aa078bb89 (diff)
parentc34b89ecf0461a702271961c36c9e69235c6c4fb (diff)
downloadsdl_ios-70f5f24591d95921c3a64664b07fd1db80a0b54c.tar.gz
Merge remote-tracking branch 'upstream/develop' into feature/issue-1553
-rw-r--r--.github/workflows/test.yml79
-rw-r--r--.gitignore7
-rw-r--r--.gitmodules4
-rw-r--r--.travis.yml28
-rw-r--r--CHANGELOG.md91
-rw-r--r--Cartfile.resolved2
-rw-r--r--Example Apps/Example ObjC/MenuManager.m2
-rw-r--r--Example Apps/Example ObjC/ProxyManager.m62
-rw-r--r--Example Apps/Example ObjC/RPCPermissionsManager.m47
-rw-r--r--Example Apps/Example ObjC/VehicleDataManager.m13
-rw-r--r--Example Apps/Example Swift/MenuManager.swift2
-rw-r--r--Example Apps/Example Swift/ProxyManager.swift85
-rw-r--r--Example Apps/Example Swift/RPCPermissionsManager.swift64
-rw-r--r--Example Apps/Example Swift/VehicleDataManager.swift2
-rw-r--r--Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/alert.imageset/alert.pngbin1287 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/alert.imageset/iconmonstr-warning-7-240.pngbin0 -> 1499 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/car.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-240.pngbin0 -> 2702 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.pngbin1381 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-menu-1-240.pngbin0 -> 137 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.pngbin224 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/microphone.imageset/iconmonstr-microphone-4-240.pngbin0 -> 2523 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.pngbin2608 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/phone.imageset/iconmonstr-phone-4-240.pngbin0 -> 4343 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/phone.imageset/phone.pngbin3434 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-3-240.pngbin0 -> 3364 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.pngbin1502 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_off.imageset/iconmonstr-battery-3-240.pngbin0 -> 404 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.pngbin1495 -> 0 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json8
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_on.imageset/iconmonstr-battery-7-240.pngbin0 -> 411 bytes
-rw-r--r--Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.pngbin1869 -> 0 bytes
-rw-r--r--README.md168
-rw-r--r--SmartDeviceLink-iOS.podspec32
-rw-r--r--SmartDeviceLink-iOS.xcodeproj/project.pbxproj466
-rw-r--r--SmartDeviceLink.podspec10
-rw-r--r--SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard38
-rw-r--r--SmartDeviceLink/SDLAddSubMenu.h65
-rw-r--r--SmartDeviceLink/SDLAddSubMenu.m62
-rw-r--r--SmartDeviceLink/SDLAppHMIType.h8
-rw-r--r--SmartDeviceLink/SDLAppHMIType.m1
-rw-r--r--SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h6
-rw-r--r--SmartDeviceLink/SDLAppInterfaceUnregisteredReason.m1
-rw-r--r--SmartDeviceLink/SDLAppServiceManifest.h2
-rw-r--r--SmartDeviceLink/SDLAppServiceManifest.m4
-rwxr-xr-xSmartDeviceLink/SDLAudioStreamManager.h12
-rwxr-xr-xSmartDeviceLink/SDLAudioStreamManager.m7
-rw-r--r--SmartDeviceLink/SDLBackgroundTaskManager.h15
-rw-r--r--SmartDeviceLink/SDLBackgroundTaskManager.m32
-rw-r--r--SmartDeviceLink/SDLButtonPress.h16
-rw-r--r--SmartDeviceLink/SDLButtonPress.m14
-rw-r--r--SmartDeviceLink/SDLCacheFileManager.h29
-rw-r--r--SmartDeviceLink/SDLCacheFileManager.m292
-rw-r--r--SmartDeviceLink/SDLCapacityUnit.h48
-rw-r--r--SmartDeviceLink/SDLCapacityUnit.m37
-rw-r--r--SmartDeviceLink/SDLCarWindow.m13
-rw-r--r--SmartDeviceLink/SDLCharacterSet.h89
-rw-r--r--SmartDeviceLink/SDLCharacterSet.m53
-rw-r--r--SmartDeviceLink/SDLChoiceSetManager.m153
-rw-r--r--SmartDeviceLink/SDLConfiguration.h55
-rw-r--r--SmartDeviceLink/SDLConfiguration.m28
-rw-r--r--SmartDeviceLink/SDLConnectionManagerType.h15
-rw-r--r--SmartDeviceLink/SDLDiagnosticMessage.h2
-rw-r--r--SmartDeviceLink/SDLDiagnosticMessage.m4
-rw-r--r--SmartDeviceLink/SDLDiagnosticMessageResponse.h2
-rw-r--r--SmartDeviceLink/SDLDiagnosticMessageResponse.m4
-rw-r--r--SmartDeviceLink/SDLDriverDistractionCapability.h63
-rw-r--r--SmartDeviceLink/SDLDriverDistractionCapability.m69
-rw-r--r--SmartDeviceLink/SDLEncodedSyncPData.h1
-rw-r--r--SmartDeviceLink/SDLEncodedSyncPData.m3
-rw-r--r--SmartDeviceLink/SDLEncodedSyncPDataResponse.h1
-rw-r--r--SmartDeviceLink/SDLEncodedSyncPDataResponse.m3
-rw-r--r--SmartDeviceLink/SDLEncryptionConfiguration.h2
-rw-r--r--SmartDeviceLink/SDLEncryptionLifecycleManager.h8
-rw-r--r--SmartDeviceLink/SDLEncryptionLifecycleManager.m119
-rw-r--r--SmartDeviceLink/SDLError.h27
-rw-r--r--SmartDeviceLink/SDLError.m212
-rw-r--r--SmartDeviceLink/SDLErrorConstants.h31
-rw-r--r--SmartDeviceLink/SDLFocusableItemLocator.m23
-rw-r--r--SmartDeviceLink/SDLFocusableItemLocatorType.h6
-rw-r--r--SmartDeviceLink/SDLFuelRange.h37
-rw-r--r--SmartDeviceLink/SDLFuelRange.m49
-rw-r--r--SmartDeviceLink/SDLFunctionID.m3
-rw-r--r--SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.h4
-rw-r--r--SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.m4
-rw-r--r--SmartDeviceLink/SDLGetVehicleData.h51
-rw-r--r--SmartDeviceLink/SDLGetVehicleData.m109
-rw-r--r--SmartDeviceLink/SDLGetVehicleDataResponse.h46
-rw-r--r--SmartDeviceLink/SDLGetVehicleDataResponse.m50
-rw-r--r--SmartDeviceLink/SDLGlobals.h5
-rw-r--r--SmartDeviceLink/SDLGlobals.m11
-rw-r--r--SmartDeviceLink/SDLH264VideoEncoder.h2
-rw-r--r--SmartDeviceLink/SDLH264VideoEncoder.m228
-rw-r--r--SmartDeviceLink/SDLHMICapabilities.h54
-rw-r--r--SmartDeviceLink/SDLHMICapabilities.m58
-rw-r--r--SmartDeviceLink/SDLIAPControlSession.m118
-rw-r--r--SmartDeviceLink/SDLIAPDataSession.m140
-rw-r--r--SmartDeviceLink/SDLIAPSession.h7
-rw-r--r--SmartDeviceLink/SDLIAPSession.m2
-rw-r--r--SmartDeviceLink/SDLIAPTransport.m73
-rw-r--r--SmartDeviceLink/SDLIconArchiveFile.h29
-rw-r--r--SmartDeviceLink/SDLIconArchiveFile.m75
-rw-r--r--SmartDeviceLink/SDLImageField+ScreenManagerExtensions.h19
-rw-r--r--SmartDeviceLink/SDLImageField+ScreenManagerExtensions.m30
-rw-r--r--SmartDeviceLink/SDLImageField.h2
-rw-r--r--SmartDeviceLink/SDLImageField.m2
-rw-r--r--SmartDeviceLink/SDLLifecycleConfigurationUpdate.m4
-rw-r--r--SmartDeviceLink/SDLLifecycleManager.h6
-rw-r--r--SmartDeviceLink/SDLLifecycleManager.m375
-rw-r--r--SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.h28
-rw-r--r--SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.m94
-rw-r--r--SmartDeviceLink/SDLLifecycleProtocolHandler.h38
-rw-r--r--SmartDeviceLink/SDLLifecycleProtocolHandler.m215
-rw-r--r--SmartDeviceLink/SDLLifecycleRPCAdapter.h29
-rw-r--r--SmartDeviceLink/SDLLifecycleRPCAdapter.m164
-rw-r--r--SmartDeviceLink/SDLLifecycleSyncPDataHandler.h29
-rw-r--r--SmartDeviceLink/SDLLifecycleSyncPDataHandler.m153
-rw-r--r--SmartDeviceLink/SDLLifecycleSystemRequestHandler.h29
-rw-r--r--SmartDeviceLink/SDLLifecycleSystemRequestHandler.m336
-rw-r--r--SmartDeviceLink/SDLLockScreenManager.h4
-rw-r--r--SmartDeviceLink/SDLLockScreenManager.m49
-rw-r--r--SmartDeviceLink/SDLLockScreenPresenter.m18
-rw-r--r--SmartDeviceLink/SDLLockScreenStatus.h8
-rw-r--r--SmartDeviceLink/SDLLockScreenStatusManager.h6
-rw-r--r--SmartDeviceLink/SDLLockScreenStatusManager.m75
-rw-r--r--SmartDeviceLink/SDLLogFileModuleMap.m41
-rw-r--r--SmartDeviceLink/SDLManager.h9
-rw-r--r--SmartDeviceLink/SDLManager.m9
-rw-r--r--SmartDeviceLink/SDLManagerDelegate.h11
-rw-r--r--SmartDeviceLink/SDLMenuManager.h7
-rw-r--r--SmartDeviceLink/SDLMenuManager.m23
-rw-r--r--SmartDeviceLink/SDLMenuParams.m4
-rw-r--r--SmartDeviceLink/SDLNotificationConstants.h33
-rw-r--r--SmartDeviceLink/SDLNotificationConstants.m308
-rw-r--r--SmartDeviceLink/SDLNotificationDispatcher.h4
-rw-r--r--SmartDeviceLink/SDLNotificationDispatcher.m635
-rw-r--r--SmartDeviceLink/SDLOnEncodedSyncPData.h1
-rw-r--r--SmartDeviceLink/SDLOnEncodedSyncPData.m3
-rw-r--r--SmartDeviceLink/SDLOnSyncPData.h1
-rw-r--r--SmartDeviceLink/SDLOnSyncPData.m3
-rw-r--r--SmartDeviceLink/SDLOnVehicleData.h49
-rw-r--r--SmartDeviceLink/SDLOnVehicleData.m50
-rwxr-xr-xSmartDeviceLink/SDLPCMAudioConverter.m4
-rw-r--r--SmartDeviceLink/SDLPerformInteraction.h2
-rw-r--r--SmartDeviceLink/SDLPerformInteraction.m4
-rw-r--r--SmartDeviceLink/SDLPermissionConstants.h19
-rw-r--r--SmartDeviceLink/SDLPermissionElement.h42
-rw-r--r--SmartDeviceLink/SDLPermissionElement.m41
-rw-r--r--SmartDeviceLink/SDLPermissionFilter.h40
-rw-r--r--SmartDeviceLink/SDLPermissionFilter.m41
-rw-r--r--SmartDeviceLink/SDLPermissionManager.h67
-rw-r--r--SmartDeviceLink/SDLPermissionManager.m158
-rw-r--r--SmartDeviceLink/SDLPolicyDataParser.h35
-rw-r--r--SmartDeviceLink/SDLPolicyDataParser.m143
-rw-r--r--SmartDeviceLink/SDLPredefinedLayout.h9
-rw-r--r--SmartDeviceLink/SDLPredefinedLayout.m1
-rw-r--r--SmartDeviceLink/SDLPreloadChoicesOperation.m23
-rw-r--r--SmartDeviceLink/SDLProtocol.h39
-rw-r--r--SmartDeviceLink/SDLProtocol.m281
-rw-r--r--SmartDeviceLink/SDLProtocolDelegate.h98
-rw-r--r--SmartDeviceLink/SDLProtocolListener.h97
-rw-r--r--SmartDeviceLink/SDLProtocolReceivedMessageRouter.h6
-rw-r--r--SmartDeviceLink/SDLProtocolReceivedMessageRouter.m48
-rw-r--r--SmartDeviceLink/SDLProxy.h138
-rw-r--r--SmartDeviceLink/SDLProxy.m1074
-rw-r--r--SmartDeviceLink/SDLProxyListener.h1243
-rw-r--r--SmartDeviceLink/SDLPutFile.h9
-rw-r--r--SmartDeviceLink/SDLPutFile.m11
-rw-r--r--SmartDeviceLink/SDLRPCFunctionNames.h8
-rw-r--r--SmartDeviceLink/SDLRPCMessageType.h14
-rw-r--r--SmartDeviceLink/SDLRPCMessageType.m13
-rw-r--r--SmartDeviceLink/SDLRPCParameterNames.h44
-rw-r--r--SmartDeviceLink/SDLRPCParameterNames.m42
-rw-r--r--SmartDeviceLink/SDLRPCPermissionStatus.h48
-rw-r--r--SmartDeviceLink/SDLRPCPermissionStatus.m34
-rw-r--r--SmartDeviceLink/SDLReadDID.h4
-rw-r--r--SmartDeviceLink/SDLReadDID.m4
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterfaceResponse.h2
-rw-r--r--SmartDeviceLink/SDLRegisterAppInterfaceResponse.m4
-rw-r--r--SmartDeviceLink/SDLResponseDispatcher.m24
-rw-r--r--SmartDeviceLink/SDLScreenManager.h56
-rw-r--r--SmartDeviceLink/SDLScreenManager.m30
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportManager.h47
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportManager.m409
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h46
-rw-r--r--SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m76
-rw-r--r--SmartDeviceLink/SDLSoftButtonReplaceOperation.m127
-rw-r--r--SmartDeviceLink/SDLStreamingAudioLifecycleManager.h21
-rw-r--r--SmartDeviceLink/SDLStreamingAudioLifecycleManager.m103
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManager.h36
-rw-r--r--SmartDeviceLink/SDLStreamingMediaManager.m179
-rw-r--r--SmartDeviceLink/SDLStreamingProtocolDelegate.h35
-rw-r--r--SmartDeviceLink/SDLStreamingVideoLifecycleManager.h21
-rw-r--r--SmartDeviceLink/SDLStreamingVideoLifecycleManager.m192
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonManager.h75
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonManager.m298
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonObserver.h42
-rw-r--r--SmartDeviceLink/SDLSubscribeButtonObserver.m45
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleData.h54
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleData.m107
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleDataResponse.h46
-rw-r--r--SmartDeviceLink/SDLSubscribeVehicleDataResponse.m49
-rw-r--r--SmartDeviceLink/SDLSyncPData.h1
-rw-r--r--SmartDeviceLink/SDLSyncPData.m3
-rw-r--r--SmartDeviceLink/SDLSyncPDataResponse.h1
-rw-r--r--SmartDeviceLink/SDLSyncPDataResponse.m3
-rwxr-xr-xSmartDeviceLink/SDLSystemCapability.h57
-rwxr-xr-xSmartDeviceLink/SDLSystemCapability.m67
-rw-r--r--SmartDeviceLink/SDLSystemCapabilityManager.h27
-rw-r--r--SmartDeviceLink/SDLSystemCapabilityManager.m310
-rwxr-xr-xSmartDeviceLink/SDLSystemCapabilityType.h43
-rwxr-xr-xSmartDeviceLink/SDLSystemCapabilityType.m1
-rw-r--r--SmartDeviceLink/SDLTCPTransport.m129
-rw-r--r--SmartDeviceLink/SDLTextAndGraphicManager.m57
-rw-r--r--SmartDeviceLink/SDLTextField+ScreenManagerExtensions.h19
-rw-r--r--SmartDeviceLink/SDLTextField+ScreenManagerExtensions.m26
-rw-r--r--SmartDeviceLink/SDLTextField.h6
-rw-r--r--SmartDeviceLink/SDLTimer.h34
-rw-r--r--SmartDeviceLink/SDLTimer.m39
-rw-r--r--SmartDeviceLink/SDLTouch.h4
-rw-r--r--SmartDeviceLink/SDLTouchEvent.h2
-rw-r--r--SmartDeviceLink/SDLTouchEvent.m4
-rw-r--r--SmartDeviceLink/SDLTouchManager.h37
-rw-r--r--SmartDeviceLink/SDLTouchManager.m23
-rw-r--r--SmartDeviceLink/SDLTransportType.h2
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleData.h54
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleData.m104
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h46
-rw-r--r--SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m49
-rw-r--r--SmartDeviceLink/SDLVehicleDataType.h10
-rw-r--r--SmartDeviceLink/SDLVehicleDataType.m2
-rw-r--r--SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.h (renamed from SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.h)2
-rw-r--r--SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.m (renamed from SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.m)4
-rw-r--r--SmartDeviceLink/SDLWindowCapability.h4
-rw-r--r--SmartDeviceLink/SmartDeviceLink.h3
-rw-r--r--SmartDeviceLink/TestSubscribeButtonObserver.h34
-rw-r--r--SmartDeviceLink/TestSubscribeButtonObserver.m70
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLAudioStreamManagerSpec.m25
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m93
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m6
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLFakeSecurityManager.m2
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.h2
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m8
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m323
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleMobileHMIStateHandlerSpec.m88
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleProtocolHandlerSpec.m233
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleRPCAdapterSpec.m306
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSyncPDataHandlerSpec.m78
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSystemRequestHandlerSpec.m235
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m186
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m8
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLPermissionFilterSpec.m176
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLPermissionsManagerSpec.m877
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLSequentialRPCRequestOperationSpec.m6
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m1
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonStateSpec.m2
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m155
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m245
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m62
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m2
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.h19
-rw-r--r--SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.m24
-rw-r--r--SmartDeviceLinkTests/Notifications/SDLNotificationDispatcherSpec.m140
-rw-r--r--SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m19
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m297
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m10
-rw-r--r--SmartDeviceLinkTests/ProtocolSpecs/SDLProtocolReceivedMessageRouterSpec.m223
-rw-r--r--SmartDeviceLinkTests/ProxySpecs/SDLHapticManagerSpec.m65
-rw-r--r--SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m193
-rw-r--r--SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m867
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppHMITypeSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppInterfaceUnregisteredReasonSpec.m1
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCapacityUnitSpec.m21
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCharacterSetSpec.m6
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m3
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPredefinedLayoutSpec.m1
-rwxr-xr-xSmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSystemCapabilityTypeSpec.m3
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m4
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m22
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m13
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m20
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m68
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m276
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m45
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLButtonPressSpec.m22
-rwxr-xr-xSmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m18
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m420
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m64
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m6
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m319
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m355
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetInteriorVehicleDataConsentResponseSpec.m2
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m334
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m74
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m76
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDriverDistractionCapabilitySpec.m60
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m76
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMICapabilitiesSpec.m69
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMenuParamsSpec.m4
-rwxr-xr-xSmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSystemCapabilitySpec.m45
-rw-r--r--SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m2
-rw-r--r--SmartDeviceLinkTests/SDLCacheFileManagerSpec.m317
-rw-r--r--SmartDeviceLinkTests/SDLEncryptionLifecycleManagerSpec.m76
-rw-r--r--SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m14
-rw-r--r--SmartDeviceLinkTests/SDLPermissionElementSpec.m59
-rw-r--r--SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m12
-rw-r--r--SmartDeviceLinkTests/SDLRPCPermissionStatusSpec.m43
-rw-r--r--SmartDeviceLinkTests/SDLSoftButtonReplaceOperationSpec.m246
-rw-r--r--SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m342
-rw-r--r--SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m787
-rw-r--r--SmartDeviceLinkTests/SDLSubscribeButtonObserverSpec.m64
-rw-r--r--SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m79
-rw-r--r--SmartDeviceLinkTests/TestMultipleFilesConnectionManager.m2
-rw-r--r--SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.h19
-rw-r--r--SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.m21
-rw-r--r--SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m4
-rw-r--r--SmartDeviceLinkTests/TransportSpecs/TCP/SDLTCPTransportSpec.m98
-rw-r--r--SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPDataSessionSpec.m2
-rw-r--r--SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPTransportSpec.m42
-rw-r--r--SmartDeviceLink_Example/SubscribeButtonManager.h25
-rw-r--r--SmartDeviceLink_Example/SubscribeButtonManager.m69
-rw-r--r--SmartDeviceLink_Example/SubscribeButtonManager.swift53
m---------bson_c_lib0
-rw-r--r--codecov.yml3
-rw-r--r--docs/Classes.html60
-rw-r--r--docs/Classes/SDLAddCommand.html12
-rw-r--r--docs/Classes/SDLAddSubMenu.html10
-rw-r--r--docs/Classes/SDLAirbagStatus.html24
-rw-r--r--docs/Classes/SDLAlert.html23
-rw-r--r--docs/Classes/SDLAlertManeuver.html6
-rw-r--r--docs/Classes/SDLAlertResponse.html3
-rw-r--r--docs/Classes/SDLAppInfo.html6
-rw-r--r--docs/Classes/SDLAppServiceCapability.html6
-rw-r--r--docs/Classes/SDLAppServiceData.html13
-rw-r--r--docs/Classes/SDLAppServiceManifest.html29
-rw-r--r--docs/Classes/SDLAppServiceRecord.html11
-rw-r--r--docs/Classes/SDLAppServicesCapabilities.html3
-rw-r--r--docs/Classes/SDLArtwork.html4
-rw-r--r--docs/Classes/SDLAudioControlCapabilities.html19
-rw-r--r--docs/Classes/SDLAudioControlData.html10
-rw-r--r--docs/Classes/SDLAudioFile.html10
-rw-r--r--docs/Classes/SDLAudioPassThruCapabilities.html6
-rw-r--r--docs/Classes/SDLAudioStreamManager.html7
-rw-r--r--docs/Classes/SDLBeltStatus.html45
-rw-r--r--docs/Classes/SDLBodyInformation.html21
-rw-r--r--docs/Classes/SDLButtonCapabilities.html13
-rw-r--r--docs/Classes/SDLButtonPress.html47
-rw-r--r--docs/Classes/SDLCancelInteraction.html4
-rw-r--r--docs/Classes/SDLCarWindowViewController.html3
-rw-r--r--docs/Classes/SDLChangeRegistration.html12
-rw-r--r--docs/Classes/SDLChoice.html15
-rw-r--r--docs/Classes/SDLChoiceCell.html13
-rw-r--r--docs/Classes/SDLChoiceSet.html27
-rw-r--r--docs/Classes/SDLClimateControlCapabilities.html52
-rw-r--r--docs/Classes/SDLClimateControlData.html42
-rw-r--r--docs/Classes/SDLCloudAppProperties.html16
-rw-r--r--docs/Classes/SDLClusterModeStatus.html11
-rw-r--r--docs/Classes/SDLConfiguration.html206
-rw-r--r--docs/Classes/SDLCreateInteractionChoiceSet.html6
-rw-r--r--docs/Classes/SDLCreateWindow.html12
-rw-r--r--docs/Classes/SDLDIDResult.html7
-rw-r--r--docs/Classes/SDLDateTime.html20
-rw-r--r--docs/Classes/SDLDeleteCommand.html2
-rw-r--r--docs/Classes/SDLDeleteFile.html2
-rw-r--r--docs/Classes/SDLDeleteFileResponse.html3
-rw-r--r--docs/Classes/SDLDeleteInteractionChoiceSet.html3
-rw-r--r--docs/Classes/SDLDeleteSubMenu.html2
-rw-r--r--docs/Classes/SDLDeleteWindow.html2
-rw-r--r--docs/Classes/SDLDeviceInfo.html13
-rw-r--r--docs/Classes/SDLDeviceStatus.html30
-rw-r--r--docs/Classes/SDLDiagnosticMessage.html10
-rw-r--r--docs/Classes/SDLDiagnosticMessageResponse.html5
-rw-r--r--docs/Classes/SDLDialNumber.html2
-rw-r--r--docs/Classes/SDLDisplayCapabilities.html24
-rw-r--r--docs/Classes/SDLDisplayCapability.html38
-rw-r--r--docs/Classes/SDLECallInfo.html9
-rw-r--r--docs/Classes/SDLEmergencyEvent.html15
-rw-r--r--docs/Classes/SDLEncodedSyncPData.html2
-rw-r--r--docs/Classes/SDLEncryptionConfiguration.html8
-rw-r--r--docs/Classes/SDLEqualizerSettings.html7
-rw-r--r--docs/Classes/SDLFile.html18
-rw-r--r--docs/Classes/SDLFileManager.html12
-rw-r--r--docs/Classes/SDLFileManagerConfiguration.html4
-rw-r--r--docs/Classes/SDLFuelRange.html4
-rw-r--r--docs/Classes/SDLGPSData.html41
-rw-r--r--docs/Classes/SDLGetAppServiceData.html4
-rw-r--r--docs/Classes/SDLGetAppServiceDataResponse.html3
-rw-r--r--docs/Classes/SDLGetCloudAppProperties.html2
-rw-r--r--docs/Classes/SDLGetCloudAppPropertiesResponse.html3
-rw-r--r--docs/Classes/SDLGetDTCs.html4
-rw-r--r--docs/Classes/SDLGetDTCsResponse.html4
-rw-r--r--docs/Classes/SDLGetFile.html10
-rw-r--r--docs/Classes/SDLGetFileResponse.html8
-rw-r--r--docs/Classes/SDLGetInteriorVehicleData.html6
-rw-r--r--docs/Classes/SDLGetInteriorVehicleDataConsent.html4
-rw-r--r--docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html7
-rw-r--r--docs/Classes/SDLGetInteriorVehicleDataResponse.html5
-rw-r--r--docs/Classes/SDLGetSystemCapability.html5
-rw-r--r--docs/Classes/SDLGetSystemCapabilityResponse.html3
-rw-r--r--docs/Classes/SDLGetVehicleData.html78
-rw-r--r--docs/Classes/SDLGetVehicleDataResponse.html74
-rw-r--r--docs/Classes/SDLGetWaypoints.html2
-rw-r--r--docs/Classes/SDLGetWaypointsResponse.html3
-rw-r--r--docs/Classes/SDLGrid.html12
-rw-r--r--docs/Classes/SDLHMICapabilities.html16
-rw-r--r--docs/Classes/SDLHMIPermissions.html5
-rw-r--r--docs/Classes/SDLHMISettingsControlCapabilities.html13
-rw-r--r--docs/Classes/SDLHMISettingsControlData.html7
-rw-r--r--docs/Classes/SDLHapticRect.html4
-rw-r--r--docs/Classes/SDLHeadLampStatus.html7
-rw-r--r--docs/Classes/SDLImage.html6
-rw-r--r--docs/Classes/SDLImageField.html39
-rw-r--r--docs/Classes/SDLImageResolution.html6
-rw-r--r--docs/Classes/SDLKeyboardProperties.html15
-rw-r--r--docs/Classes/SDLLifecycleConfiguration.html50
-rw-r--r--docs/Classes/SDLLifecycleConfigurationUpdate.html9
-rw-r--r--docs/Classes/SDLLightCapabilities.html11
-rw-r--r--docs/Classes/SDLLightControlCapabilities.html7
-rw-r--r--docs/Classes/SDLLightControlData.html3
-rw-r--r--docs/Classes/SDLLightState.html8
-rw-r--r--docs/Classes/SDLListFilesResponse.html6
-rw-r--r--docs/Classes/SDLLocationCoordinate.html6
-rw-r--r--docs/Classes/SDLLocationDetails.html17
-rw-r--r--docs/Classes/SDLLockScreenConfiguration.html18
-rw-r--r--docs/Classes/SDLLockScreenViewController.html8
-rw-r--r--docs/Classes/SDLLogConfiguration.html23
-rw-r--r--docs/Classes/SDLLogFileModule.html6
-rw-r--r--docs/Classes/SDLLogFilter.html2
-rw-r--r--docs/Classes/SDLLogManager.html27
-rw-r--r--docs/Classes/SDLManager.html52
-rw-r--r--docs/Classes/SDLMassageCushionFirmness.html4
-rw-r--r--docs/Classes/SDLMassageModeData.html4
-rw-r--r--docs/Classes/SDLMediaServiceData.html32
-rw-r--r--docs/Classes/SDLMenuCell.html14
-rw-r--r--docs/Classes/SDLMenuConfiguration.html5
-rw-r--r--docs/Classes/SDLMenuParams.html6
-rw-r--r--docs/Classes/SDLMetadataTags.html12
-rw-r--r--docs/Classes/SDLModuleData.html22
-rw-r--r--docs/Classes/SDLModuleInfo.html9
-rw-r--r--docs/Classes/SDLMsgVersion.html7
-rw-r--r--docs/Classes/SDLMyKey.html3
-rw-r--r--docs/Classes/SDLNavigationCapability.html4
-rw-r--r--docs/Classes/SDLNavigationInstruction.html18
-rw-r--r--docs/Classes/SDLNavigationServiceData.html23
-rw-r--r--docs/Classes/SDLNavigationServiceManifest.html3
-rw-r--r--docs/Classes/SDLOasisAddress.html18
-rw-r--r--docs/Classes/SDLOnAppInterfaceUnregistered.html3
-rw-r--r--docs/Classes/SDLOnAppServiceData.html2
-rw-r--r--docs/Classes/SDLOnButtonEvent.html8
-rw-r--r--docs/Classes/SDLOnButtonPress.html8
-rw-r--r--docs/Classes/SDLOnCommand.html4
-rw-r--r--docs/Classes/SDLOnDriverDistraction.html9
-rw-r--r--docs/Classes/SDLOnEncodedSyncPData.html6
-rw-r--r--docs/Classes/SDLOnHMIStatus.html49
-rw-r--r--docs/Classes/SDLOnHashChange.html2
-rw-r--r--docs/Classes/SDLOnInteriorVehicleData.html2
-rw-r--r--docs/Classes/SDLOnKeyboardInput.html4
-rw-r--r--docs/Classes/SDLOnLanguageChange.html4
-rw-r--r--docs/Classes/SDLOnLockScreenStatus.html11
-rw-r--r--docs/Classes/SDLOnPermissionsChange.html6
-rw-r--r--docs/Classes/SDLOnRCStatus.html8
-rw-r--r--docs/Classes/SDLOnSyncPData.html4
-rw-r--r--docs/Classes/SDLOnSystemCapabilityUpdated.html3
-rw-r--r--docs/Classes/SDLOnSystemRequest.html14
-rw-r--r--docs/Classes/SDLOnTBTClientState.html2
-rw-r--r--docs/Classes/SDLOnTouchEvent.html5
-rw-r--r--docs/Classes/SDLOnVehicleData.html74
-rw-r--r--docs/Classes/SDLOnWaypointChange.html3
-rw-r--r--docs/Classes/SDLParameterPermissions.html5
-rw-r--r--docs/Classes/SDLPerformAppServiceInteraction.html9
-rw-r--r--docs/Classes/SDLPerformAppServiceInteractionResponse.html3
-rw-r--r--docs/Classes/SDLPerformAudioPassThru.html22
-rw-r--r--docs/Classes/SDLPerformInteraction.html29
-rw-r--r--docs/Classes/SDLPerformInteractionResponse.html7
-rw-r--r--docs/Classes/SDLPermissionElement.html85
-rw-r--r--docs/Classes/SDLPermissionItem.html11
-rw-r--r--docs/Classes/SDLPermissionManager.html181
-rw-r--r--docs/Classes/SDLPhoneCapability.html2
-rw-r--r--docs/Classes/SDLPinchGesture.html10
-rw-r--r--docs/Classes/SDLPresetBankCapabilities.html3
-rw-r--r--docs/Classes/SDLPublishAppService.html3
-rw-r--r--docs/Classes/SDLPublishAppServiceResponse.html3
-rw-r--r--docs/Classes/SDLPutFile.html36
-rw-r--r--docs/Classes/SDLPutFileResponse.html3
-rw-r--r--docs/Classes/SDLRDSData.html19
-rw-r--r--docs/Classes/SDLRGBColor.html6
-rw-r--r--docs/Classes/SDLRPCMessage.html9
-rw-r--r--docs/Classes/SDLRPCNotificationNotification.html3
-rw-r--r--docs/Classes/SDLRPCPermissionStatus.html109
-rw-r--r--docs/Classes/SDLRPCRequest.html3
-rw-r--r--docs/Classes/SDLRPCRequestNotification.html2
-rw-r--r--docs/Classes/SDLRPCResponse.html9
-rw-r--r--docs/Classes/SDLRPCResponseNotification.html2
-rw-r--r--docs/Classes/SDLRPCStruct.html7
-rw-r--r--docs/Classes/SDLRadioControlCapabilities.html43
-rw-r--r--docs/Classes/SDLRadioControlData.html130
-rw-r--r--docs/Classes/SDLReadDID.html25
-rw-r--r--docs/Classes/SDLReadDIDResponse.html3
-rw-r--r--docs/Classes/SDLRectangle.html8
-rw-r--r--docs/Classes/SDLRegisterAppInterface.html43
-rw-r--r--docs/Classes/SDLRegisterAppInterfaceResponse.html58
-rw-r--r--docs/Classes/SDLReleaseInteriorVehicleDataModule.html4
-rw-r--r--docs/Classes/SDLRemoteControlCapabilities.html22
-rw-r--r--docs/Classes/SDLResetGlobalProperties.html3
-rw-r--r--docs/Classes/SDLSISData.html11
-rw-r--r--docs/Classes/SDLScreenManager.html151
-rw-r--r--docs/Classes/SDLScreenParams.html5
-rw-r--r--docs/Classes/SDLScrollableMessage.html10
-rw-r--r--docs/Classes/SDLSeatControlCapabilities.html49
-rw-r--r--docs/Classes/SDLSeatControlData.html46
-rw-r--r--docs/Classes/SDLSeatLocation.html2
-rw-r--r--docs/Classes/SDLSeatLocationCapability.html9
-rw-r--r--docs/Classes/SDLSeatMemoryAction.html6
-rw-r--r--docs/Classes/SDLSendHapticData.html3
-rw-r--r--docs/Classes/SDLSendLocation.html23
-rw-r--r--docs/Classes/SDLSetAppIcon.html2
-rw-r--r--docs/Classes/SDLSetCloudAppProperties.html3
-rw-r--r--docs/Classes/SDLSetDisplayLayout.html8
-rw-r--r--docs/Classes/SDLSetDisplayLayoutResponse.html12
-rw-r--r--docs/Classes/SDLSetGlobalProperties.html22
-rw-r--r--docs/Classes/SDLSetInteriorVehicleData.html2
-rw-r--r--docs/Classes/SDLSetInteriorVehicleDataResponse.html2
-rw-r--r--docs/Classes/SDLSetMediaClockTimer.html9
-rw-r--r--docs/Classes/SDLShow.html35
-rw-r--r--docs/Classes/SDLShowAppMenu.html2
-rw-r--r--docs/Classes/SDLShowConstantTBT.html26
-rw-r--r--docs/Classes/SDLSingleTireStatus.html8
-rw-r--r--docs/Classes/SDLSlider.html13
-rw-r--r--docs/Classes/SDLSliderResponse.html3
-rw-r--r--docs/Classes/SDLSoftButton.html16
-rw-r--r--docs/Classes/SDLSoftButtonCapabilities.html15
-rw-r--r--docs/Classes/SDLSoftButtonObject.html13
-rw-r--r--docs/Classes/SDLSoftButtonState.html12
-rw-r--r--docs/Classes/SDLSpeak.html3
-rw-r--r--docs/Classes/SDLStartTime.html6
-rw-r--r--docs/Classes/SDLStationIDNumber.html5
-rw-r--r--docs/Classes/SDLStreamingMediaConfiguration.html23
-rw-r--r--docs/Classes/SDLStreamingMediaManager.html155
-rw-r--r--docs/Classes/SDLStreamingVideoScaleManager.html6
-rw-r--r--docs/Classes/SDLSubscribeButton.html5
-rw-r--r--docs/Classes/SDLSubscribeVehicleData.html76
-rw-r--r--docs/Classes/SDLSubscribeVehicleDataResponse.html82
-rw-r--r--docs/Classes/SDLSyncMsgVersion.html7
-rw-r--r--docs/Classes/SDLSystemCapability.html24
-rw-r--r--docs/Classes/SDLSystemCapabilityManager.html249
-rw-r--r--docs/Classes/SDLSystemRequest.html6
-rw-r--r--docs/Classes/SDLTTSChunk.html4
-rw-r--r--docs/Classes/SDLTemperature.html4
-rw-r--r--docs/Classes/SDLTemplateColorScheme.html6
-rw-r--r--docs/Classes/SDLTemplateConfiguration.html8
-rw-r--r--docs/Classes/SDLTextField.html41
-rw-r--r--docs/Classes/SDLTireStatus.html18
-rw-r--r--docs/Classes/SDLTouch.html10
-rw-r--r--docs/Classes/SDLTouchCoord.html4
-rw-r--r--docs/Classes/SDLTouchEvent.html10
-rw-r--r--docs/Classes/SDLTouchEventCapabilities.html9
-rw-r--r--docs/Classes/SDLTouchManager.html63
-rw-r--r--docs/Classes/SDLTurn.html4
-rw-r--r--docs/Classes/SDLUnpublishAppService.html2
-rw-r--r--docs/Classes/SDLUnsubscribeButton.html2
-rw-r--r--docs/Classes/SDLUnsubscribeVehicleData.html76
-rw-r--r--docs/Classes/SDLUnsubscribeVehicleDataResponse.html82
-rw-r--r--docs/Classes/SDLUpdateTurnList.html5
-rw-r--r--docs/Classes/SDLVRHelpItem.html6
-rw-r--r--docs/Classes/SDLVehicleDataResult.html7
-rw-r--r--docs/Classes/SDLVehicleType.html8
-rw-r--r--docs/Classes/SDLVersion.html8
-rw-r--r--docs/Classes/SDLVideoStreamingCapability.html19
-rw-r--r--docs/Classes/SDLVideoStreamingFormat.html5
-rw-r--r--docs/Classes/SDLVoiceCommand.html6
-rw-r--r--docs/Classes/SDLWeatherAlert.html12
-rw-r--r--docs/Classes/SDLWeatherData.html57
-rw-r--r--docs/Classes/SDLWeatherServiceData.html17
-rw-r--r--docs/Classes/SDLWeatherServiceManifest.html15
-rw-r--r--docs/Classes/SDLWindowCapability.html26
-rw-r--r--docs/Classes/SDLWindowTypeCapabilities.html5
-rw-r--r--docs/Constants.html226
-rw-r--r--docs/Enums.html122
-rw-r--r--docs/Enums/SDLAudioStreamManagerError.html2
-rw-r--r--docs/Enums/SDLCacheFileManagerError.html33
-rw-r--r--docs/Enums/SDLSoftButtonManagerError.html2
-rw-r--r--docs/Enums/SDLSubscribeButtonManagerError.html33
-rw-r--r--docs/Enums/SDLSystemCapabilityManagerError.html71
-rw-r--r--docs/Enums/SDLTouchIdentifier.html (renamed from docs/Type Definitions/SDLTouchIdentifier/.html)8
-rw-r--r--docs/Protocols/SDLManagerDelegate.html61
-rw-r--r--docs/Protocols/SDLSecurityType.html2
-rw-r--r--docs/Protocols/SDLStreamingAudioManagerType.html4
-rw-r--r--docs/Type Definitions.html131
-rw-r--r--docs/Type Definitions/SDLTouchIdentifier.html34
-rw-r--r--docs/badge.svg16
-rw-r--r--docs/index.html40
-rw-r--r--docs/search.json2
-rw-r--r--docs/undocumented.json10
-rw-r--r--generator/README.md858
-rw-r--r--generator/__init__.py0
-rw-r--r--generator/generator.py489
-rw-r--r--generator/paths.ini7
-rw-r--r--generator/requirements.txt5
m---------generator/rpc_spec0
-rw-r--r--generator/templates/SDLRPCFunctionNames.h.jinja228
-rw-r--r--generator/templates/SDLRPCFunctionNames.m.jinja27
-rw-r--r--generator/templates/SDLRPCParameterNames.h.jinja214
-rw-r--r--generator/templates/SDLRPCParameterNames.m.jinja212
-rw-r--r--generator/templates/base_struct_function.h.jinja257
-rw-r--r--generator/templates/base_struct_function.m.jinja271
-rw-r--r--generator/templates/copyright.jinja231
-rw-r--r--generator/templates/description.jinja224
-rw-r--r--generator/templates/description_param.jinja221
-rw-r--r--generator/templates/enums/template.h.jinja228
-rw-r--r--generator/templates/enums/template.m.jinja225
-rw-r--r--generator/templates/functions/template.h.jinja22
-rw-r--r--generator/templates/functions/template.m.jinja221
-rw-r--r--generator/templates/structs/template.h.jinja22
-rw-r--r--generator/templates/structs/template.m.jinja27
-rw-r--r--generator/test/__init__.py0
-rw-r--r--generator/test/runner.py67
-rwxr-xr-xgenerator/test/test_CodeFormatAndQuality.py32
-rw-r--r--generator/test/test_enums.py83
-rw-r--r--generator/test/test_functions.py456
-rw-r--r--generator/test/test_structs.py106
-rw-r--r--generator/transformers/__init__.py0
-rw-r--r--generator/transformers/common_producer.py393
-rw-r--r--generator/transformers/enums_producer.py81
-rw-r--r--generator/transformers/functions_producer.py116
-rw-r--r--generator/transformers/structs_producer.py48
631 files changed, 21882 insertions, 10773 deletions
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
new file mode 100644
index 000000000..d30dcd7e5
--- /dev/null
+++ b/.github/workflows/test.yml
@@ -0,0 +1,79 @@
+name: SmartDeviceLink Tests
+
+# This workflow is triggered on a push or pull request.
+on: [push, pull_request]
+
+env:
+ PROJECT: 'SmartDeviceLink-iOS.xcodeproj'
+ DESTINATION: 'platform=iOS Simulator,name=iPhone 11,OS=13.5'
+
+jobs:
+ build:
+ name: Build Example Apps
+ runs-on: macOS-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: ['SmartDeviceLink-Example-ObjC', 'SmartDeviceLink-Example-Swift']
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2.3.1
+ with:
+ submodules: true
+
+ # Print the available Xcode versions
+ - name: Get available Xcode versions on the server
+ run: ls /Applications | grep Xcode
+
+ # Select the Xcode version (the platform/simulator/OS available for testing depend on the Xcode version)
+ - name: Select Xcode version
+ run: sudo xcode-select -switch /Applications/Xcode_11.5.app
+
+ - name: Build
+ run: set -o pipefail && xcodebuild -scheme "${{ matrix.scheme }}" -destination "$DESTINATION" build | xcpretty --color --simple
+
+ test:
+ name: SmartDeviceLinkTests
+ runs-on: macOS-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ scheme: ['SmartDeviceLink']
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v2.3.1
+ with:
+ submodules: true
+
+ - name: Checking for cached dependencies
+ uses: actions/cache@v2
+ id: carthage-cache
+ with:
+ path: Carthage
+ key: ${{ runner.os }}-carthage-${{ hashFiles('**/Cartfile.resolved') }}
+ restore-keys: ${{ runner.os }}-carthage-
+
+ - name: Installing dependencies
+ if: steps.carthage-cache.outputs.cache-hit != 'true'
+ run: carthage bootstrap --no-use-binaries --platform iOS --cache-builds
+
+ # Print the available Xcode versions
+ - name: Get available Xcode versions on the server
+ run: ls /Applications | grep Xcode
+
+ # Select the Xcode version (the platform/simulator/OS available for testing depend on the Xcode version)
+ - name: Select Xcode version
+ run: sudo xcode-select -switch /Applications/Xcode_11.5.app
+
+ # Split build into build-only and test-only as it is faster than building and running in one step
+ - name: Building unit tests
+ run: xcodebuild build-for-testing -project "$PROJECT" -destination "$DESTINATION" -scheme "${{ matrix.scheme }}"
+
+ - name: Running unit tests
+ run: set -o pipefail && xcodebuild test-without-building -project "$PROJECT" -destination "$DESTINATION" -scheme "${{ matrix.scheme }}" -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ENABLE_TESTABILITY=YES | xcpretty --color --simple
+
+ # Upload coverage reports to Codecov
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v1.0.10
+ with:
+ yml: ./codecov.yml
diff --git a/.gitignore b/.gitignore
index 58a919ead..cd964170f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -44,3 +44,10 @@ infer-out
Carthage/Build
docs/docsets/
+.idea
+*venv*
+*__pycache__
+*.pytest_cache
+**htmlcov
+**.coverage
+_debug*
diff --git a/.gitmodules b/.gitmodules
index 684da2889..413022928 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +1,7 @@
[submodule "bson_c_lib"]
path = bson_c_lib
url = https://github.com/smartdevicelink/bson_c_lib.git
+[submodule "generator/rpc_spec"]
+ path = generator/rpc_spec
+ url = https://github.com/smartdevicelink/rpc_spec.git
+ branch = master
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index b05a77162..000000000
--- a/.travis.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-language: objective-c
-osx_image: xcode11.2
-xcode_project: SmartDeviceLink-iOS.xcodeproj
-xcode_scheme: SmartDeviceLink
-xcode_sdk: iphonesimulator13.2
-env:
- global:
- - FRAMEWORK_NAME=SmartDeviceLink
-
-cache:
- directories:
- - Carthage
-
-notifications:
- email: false
-
-before_install:
-- brew update
-- brew outdated carthage || brew upgrade carthage
-- carthage bootstrap --verbose --no-use-binaries --platform iOS --cache-builds
-
-script:
-- set -o pipefail && xcodebuild -project "SmartDeviceLink-iOS.xcodeproj" -scheme "SmartDeviceLink-Example-ObjC" -destination "platform=iOS Simulator,OS=13.2.2,name=iPhone 11" -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO build | xcpretty -c;
-- set -o pipefail && xcodebuild -project "SmartDeviceLink-iOS.xcodeproj" -scheme "SmartDeviceLink-Example-Swift" -destination "platform=iOS Simulator,OS=13.2.2,name=iPhone 11" -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO build | xcpretty -c;
-- set -o pipefail && xcodebuild -project "SmartDeviceLink-iOS.xcodeproj" -scheme "SmartDeviceLink" -destination "platform=iOS Simulator,OS=13.2.2,name=iPhone 11" -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ENABLE_TESTABILITY=YES test | xcpretty -c;
-
-after_success:
-- bash <(curl -s https://codecov.io/bash) -J 'SmartDeviceLink'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 96fecab90..f56e58b27 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,95 @@
# Changelog
+## 6.7.0
+### Versions
+* Supports [SDL RPC Spec 6.0.0](https://github.com/smartdevicelink/rpc_spec/releases/tag/6.0.0) and [SDL Protocol Spec 5.2.0](https://github.com/smartdevicelink/protocol_spec/releases/tag/5.2.0).
+
+### Testing
+* Tested with Xcode 11.6
+* iOS 13.5 and 13.6
+* Core:
+ * Manticore (Core v6.1.1, Generic HMI v0.8.1)
+ * Ford Sync 3.4 (19353_DEVTEST)
+ * Ford Sync 3.0 (17276_DEVTEST)
+ * Ford Sync 4.0 (20016_DEVTEST)
+ * Core v5.1.0 with sdl_hmi v5.2.0
+ * Core v6.1.1
+
+### Enhancements
+* Added subscribe button features to the screen manager (https://github.com/smartdevicelink/sdl_ios/issues/1563).
+* Added a new `SDLManager` delegate method for updating the HMI and VR language separately (https://github.com/smartdevicelink/sdl_ios/issues/1593).
+* Added a new initializer to `SDLButtonPress` because the existing ones were missing a mandatory parameter (https://github.com/smartdevicelink/sdl_ios/issues/1635).
+* Aligned `SDLPermissionManager` methods with Java Suite and JavaScript Suite libraries, adding methods for parameter permissions and more (https://github.com/smartdevicelink/sdl_ios/issues/1661, https://github.com/smartdevicelink/sdl_ios/issues/1667, https://github.com/smartdevicelink/sdl_ios/issues/1682).
+
+### Bug Fixes
+* Fix the video background when the app goes into the background not always showing when it should (https://github.com/smartdevicelink/sdl_ios/issues/1620).
+* Improved `SDLAudioStreamManager` error messages (https://github.com/smartdevicelink/sdl_ios/issues/1622).
+* Better handling of head units sending a `nil` `displayCapabilities` in the `SystemCapabilityManager` (https://github.com/smartdevicelink/sdl_ios/issues/1623).
+* Fixed a deadlock that could happen on the lock screen due to some calls being asynchronous but handled synchronously (https://github.com/smartdevicelink/sdl_ios/issues/1629).
+* Stop and start `SDLFocusableItemLocator` when the video stream starts and stops (https://github.com/smartdevicelink/sdl_ios/issues/1631).
+* Fixed turning wifi off and back on causing secondary transport to fail (https://github.com/smartdevicelink/sdl_ios/issues/1631, https://github.com/smartdevicelink/sdl_ios/issues/1639).
+* Fixed using the permission manager in Swift would sometimes crash (https://github.com/smartdevicelink/sdl_ios/issues/1636).
+* Fixed Travis tests failing and moved to Github Actions CI (https://github.com/smartdevicelink/sdl_ios/issues/1640, https://github.com/smartdevicelink/sdl_ios/issues/1642, https://github.com/smartdevicelink/sdl_ios/issues/1678).
+* Fixed sending an empty VR array in an `SDLMenuCell` would fail (https://github.com/smartdevicelink/sdl_ios/issues/1648).
+* Fix a launch app should only happen on the main thread (https://github.com/smartdevicelink/sdl_ios/issues/1662).
+* Fixed some documentation for a permission manager method to be more specific (https://github.com/smartdevicelink/sdl_ios/issues/1665).
+* Fix the encryption manager not being shut down correctly after a disconnect / reconnect (https://github.com/smartdevicelink/sdl_ios/issues/1675).
+* Refactor the protocol layer and merge the proxy and lifecycle layers (https://github.com/smartdevicelink/sdl_ios/issues/1680).
+* Fix video session properties not being re-set upon reconnection (https://github.com/smartdevicelink/sdl_ios/issues/1683).
+* Fix soft button image uploads failing if the first state has no images but other states do (https://github.com/smartdevicelink/sdl_ios/issues/1698).
+* Fix a potential race condition in `SystemCapabilityManager` (https://github.com/smartdevicelink/sdl_ios/issues/1709).
+* Fix a deadlock that would occur when restarting the `SDLManager` in the `managerDidDisconnect` callback (https://github.com/smartdevicelink/sdl_ios/issues/1710).
+* Fix a crash that would occur when receiving an unknown RPC (https://github.com/smartdevicelink/sdl_ios/issues/1713).
+* Fix the secondary transport timer starting when a primary transport connects (https://github.com/smartdevicelink/sdl_ios/issues/1716).
+* Fix protocol delegates not always receiving an `EndServiceNAK` (https://github.com/smartdevicelink/sdl_ios/issues/1718).
+
+### Other
+* Use an `NSTimer` wrapper everywhere internally instead of the raw `NSTimer` (https://github.com/smartdevicelink/sdl_ios/issues/1611).
+* Add security manager tests to secondary transport unit tests (https://github.com/smartdevicelink/sdl_ios/issues/1653).
+* Fixed documentation for permission manager subscribe callbacks (https://github.com/smartdevicelink/sdl_ios/issues/1724).
+
+### Example Apps
+* Add icons to example app vehicle data menus (https://github.com/smartdevicelink/sdl_ios/issues/1580).
+* Fixed some small icons and replaced a few icons (https://github.com/smartdevicelink/sdl_ios/issues/1581).
+
+## 6.6.0
+### Versions
+* Supports [SDL RPC Spec 6.0.0](https://github.com/smartdevicelink/rpc_spec/releases/tag/6.0.0) and [SDL Protocol Spec 5.2.0](https://github.com/smartdevicelink/protocol_spec/releases/tag/5.2.0).
+
+### Enhancements
+* The secondary transport now starts only when the app has been brought to HMI Full (https://www.github.com/smartdevicelink/sdl_ios/issues/1145).
+* Added RPC generator script – though it is not currently used (https://www.github.com/smartdevicelink/sdl_ios/issues/1298).
+* Added helpful convenience initializers to `SDLRadioControlData` (https://www.github.com/smartdevicelink/sdl_ios/issues/1206).
+* `SDLSystemCapabilityManager` enhancements and alignment with Java Suite ((https://www.github.com/smartdevicelink/sdl_ios/issues/1535).
+* The `SDLManagerDelegate` now has a `videoStreamingState` callback (https://www.github.com/smartdevicelink/sdl_ios/issues/1546).
+* The secondary transport will no longer be immediately shut down when the app goes to the background (https://www.github.com/smartdevicelink/sdl_ios/issues/1560).
+* Deprecated `SyncPData` and `EncodedSyncPData` RPCs (https://www.github.com/smartdevicelink/sdl_ios/issues/1599).
+* Deprecated `OnLockScreenStatus` and `LockScreenStatus` fake RPCs (https://www.github.com/smartdevicelink/sdl_ios/issues/1601).
+
+### Bug Fixes
+* Fix video streaming timeout when app goes from background to foreground (https://www.github.com/smartdevicelink/sdl_ios/issues/1471).
+* Many lock screen fixes (https://www.github.com/smartdevicelink/sdl_ios/issues/1504, https://www.github.com/smartdevicelink/sdl_ios/issues/1523, https://www.github.com/smartdevicelink/sdl_ios/issues/1545, https://www.github.com/smartdevicelink/sdl_ios/issues/1565).
+* Threading fixes around the response handler map (https://www.github.com/smartdevicelink/sdl_ios/issues/1515).
+* Fixed some warnings emitted from the lock screen storyboard (https://www.github.com/smartdevicelink/sdl_ios/issues/1521).
+* Fix potential race condition in shutting down and starting up `SDLProxy` (https://www.github.com/smartdevicelink/sdl_ios/issues/1532).
+* Fix `SDLTouch` to better handle `NSNull` (https://www.github.com/smartdevicelink/sdl_ios/issues/1534).
+* Fix empty `SetDisplayLayout.displayCapabilities` breaks the screen manager (https://www.github.com/smartdevicelink/sdl_ios/issues/1536).
+* Many secondary transport fixes (https://www.github.com/smartdevicelink/sdl_ios/issues/1551, https://www.github.com/smartdevicelink/sdl_ios/issues/1561).
+* Revert deprecations in RPCs relating to `NSDictionary` (https://www.github.com/smartdevicelink/sdl_ios/issues/1557).
+* Change how the audio pass thru handler is called to allow sending a new one in the response handler (https://www.github.com/smartdevicelink/sdl_ios/issues/1559).
+* Threading fixes around the lifecycle manager `correlationId` (https://www.github.com/smartdevicelink/sdl_ios/issues/1564).
+* Fix `SDLStreamingMediaManager` returning an incorrect value for `isStreamingSupported` (https://www.github.com/smartdevicelink/sdl_ios/issues/1569).
+* Fix using incorrect MTU sizes for non-RPC services (https://www.github.com/smartdevicelink/sdl_ios/issues/1577).
+* Fix IAP crash when the output stream closes (https://www.github.com/smartdevicelink/sdl_ios/issues/1583).
+* Fix potential threading crash in `SDLChoiceSetManager` (https://www.github.com/smartdevicelink/sdl_ios/issues/1584).
+* Adding some documentation (https://www.github.com/smartdevicelink/sdl_ios/issues/1587).
+* Fix a potential race condition crash in the text and graphic manager (https://www.github.com/smartdevicelink/sdl_ios/issues/1595).
+* Fix `SDLImageField` initializer (https://www.github.com/smartdevicelink/sdl_ios/issues/1625).
+
+### Example Apps
+* They now show a warning message if the slider or scrollable message time out (https://www.github.com/smartdevicelink/sdl_ios/issues/1526).
+* Remove example app logic for checking first HMI FULL (https://www.github.com/smartdevicelink/sdl_ios/issues/1554).
+* Example app no longer uses deprecated `SDLConfiguration` (https://www.github.com/smartdevicelink/sdl_ios/issues/1607).
+
## 6.5.0 (Since RC 1)
### Bug Fixes
* Update testing dependencies and fix a few tests that fail after updating OCMock to 3.5.0 due to mocks not being used properly in a test (https://www.github.com/smartdevicelink/sdl_ios/issues/1517).
diff --git a/Cartfile.resolved b/Cartfile.resolved
index 28fec15c4..f42579d07 100644
--- a/Cartfile.resolved
+++ b/Cartfile.resolved
@@ -1,4 +1,4 @@
github "Quick/Nimble" "v8.0.5"
github "Quick/Quick" "v2.2.0"
-github "erikdoe/ocmock" "v3.5"
+github "erikdoe/ocmock" "v3.6"
github "uber/ios-snapshot-test-case" "6.2.0"
diff --git a/Example Apps/Example ObjC/MenuManager.m b/Example Apps/Example ObjC/MenuManager.m
index 8e68d91b6..00a05b377 100644
--- a/Example Apps/Example ObjC/MenuManager.m
+++ b/Example Apps/Example ObjC/MenuManager.m
@@ -52,7 +52,7 @@ NS_ASSUME_NONNULL_BEGIN
NSMutableArray *submenuItems = [[NSMutableArray alloc] init];
NSArray<NSString *> *allVehicleDataTypes = [self sdlex_allVehicleDataTypes];
for (NSString *vehicleDataType in allVehicleDataTypes) {
- SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:vehicleDataType icon:nil voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {
+ SDLMenuCell *cell = [[SDLMenuCell alloc] initWithTitle:vehicleDataType icon:[SDLArtwork artworkWithStaticIcon:SDLStaticIconNameSettings] voiceCommands:nil handler:^(SDLTriggerSource _Nonnull triggerSource) {
[VehicleDataManager getAllVehicleDataWithManager:manager triggerSource:triggerSource vehicleDataType:vehicleDataType];
}];
[submenuItems addObject:cell];
diff --git a/Example Apps/Example ObjC/ProxyManager.m b/Example Apps/Example ObjC/ProxyManager.m
index 35e28c9b0..68e27ee2f 100644
--- a/Example Apps/Example ObjC/ProxyManager.m
+++ b/Example Apps/Example ObjC/ProxyManager.m
@@ -11,6 +11,7 @@
#import "ProxyManager.h"
#import "RPCPermissionsManager.h"
#import "SmartDeviceLink.h"
+#import "SubscribeButtonManager.h"
#import "VehicleDataManager.h"
NS_ASSUME_NONNULL_BEGIN
@@ -24,6 +25,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) VehicleDataManager *vehicleDataManager;
@property (strong, nonatomic) PerformInteractionManager *performManager;
@property (strong, nonatomic) ButtonManager *buttonManager;
+@property (strong, nonatomic) SubscribeButtonManager *subscribeButtonManager;
@property (nonatomic, copy, nullable) RefreshUIHandler refreshUIHandler;
@end
@@ -66,6 +68,7 @@ NS_ASSUME_NONNULL_BEGIN
self.vehicleDataManager = [[VehicleDataManager alloc] initWithManager:self.sdlManager refreshUIHandler:self.refreshUIHandler];
self.performManager = [[PerformInteractionManager alloc] initWithManager:self.sdlManager];
self.buttonManager = [[ButtonManager alloc] initWithManager:self.sdlManager refreshUIHandler:self.refreshUIHandler];
+ self.subscribeButtonManager = [[SubscribeButtonManager alloc] initWithManager:self.sdlManager];
[weakSelf sdlex_updateProxyState:ProxyStateConnected];
[RPCPermissionsManager setupPermissionsCallbacksWithManager:weakSelf.sdlManager];
@@ -114,7 +117,9 @@ NS_ASSUME_NONNULL_BEGIN
[self sdlex_startManager];
return;
}
- SDLConfiguration *config = [SDLConfiguration configurationWithLifecycle:lifecycleConfiguration lockScreen:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil] logging:[self.class sdlex_logConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]];
+
+ SDLLockScreenConfiguration *lockScreenConfiguration = [SDLLockScreenConfiguration enabledConfigurationWithAppIcon:[UIImage imageNamed:ExampleAppLogoName] backgroundColor:nil];
+ SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfiguration lockScreen:lockScreenConfiguration logging:[self.class sdlex_logConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration] encryption:[SDLEncryptionConfiguration defaultConfiguration]];
self.sdlManager = [[SDLManager alloc] initWithConfiguration:config delegate:self];
[self sdlex_startManager];
}
@@ -143,7 +148,7 @@ NS_ASSUME_NONNULL_BEGIN
+ (SDLLogConfiguration *)sdlex_logConfiguration {
SDLLogConfiguration *logConfig = [SDLLogConfiguration debugConfiguration];
- SDLLogFileModule *sdlExampleModule = [SDLLogFileModule moduleWithName:@"SDL Obj-C Example App" files:[NSSet setWithArray:@[@"ProxyManager", @"AlertManager", @"AudioManager", @"ButtonManager", @"MenuManager", @"PerformInteractionManager", @"RPCPermissionsManager", @"VehicleDataManager"]]];
+ SDLLogFileModule *sdlExampleModule = [SDLLogFileModule moduleWithName:@"SDL Obj-C Example App" files:[NSSet setWithArray:@[@"ProxyManager", @"AlertManager", @"AudioManager", @"ButtonManager", @"SubscribeButtonManager", @"MenuManager", @"PerformInteractionManager", @"RPCPermissionsManager", @"VehicleDataManager"]]];
logConfig.modules = [logConfig.modules setByAddingObject:sdlExampleModule];
logConfig.targets = [logConfig.targets setByAddingObject:[SDLLogTargetFile logger]];
logConfig.globalLogLevel = SDLLogLevelDebug;
@@ -223,6 +228,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - SDLManagerDelegate
+/// Called when the connection beween this app and the module has closed.
- (void)managerDidDisconnect {
if (self.state != ProxyStateStopped) {
[self sdlex_updateProxyState:ProxyStateSearchingForConnection];
@@ -231,77 +237,83 @@ NS_ASSUME_NONNULL_BEGIN
self.firstHMILevel = SDLHMILevelNone;
}
+/// Called when the state of the SDL app has changed. The state limits the type of RPC that can be sent. Refer to the class documentation for each RPC to determine what state(s) the RPC can be sent.
+/// @param oldLevel The old HMI Level
+/// @param newLevel The new HMI Level
- (void)hmiLevel:(SDLHMILevel)oldLevel didChangeToLevel:(SDLHMILevel)newLevel {
if (![newLevel isEqualToEnum:SDLHMILevelNone] && ([self.firstHMILevel isEqualToEnum:SDLHMILevelNone])) {
// This is our first time in a non-NONE state
self.firstHMILevel = newLevel;
- // Send AddCommands
+ // Send static menu items.
[self sdlex_createMenus];
+
+ // Subscribe to vehicle data.
[self.vehicleDataManager subscribeToVehicleOdometer];
}
if ([newLevel isEqualToEnum:SDLHMILevelFull]) {
- // The SDL app is in the foreground
- SDLLogD(@"The HMI level is full");
+ // The SDL app is in the foreground. Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core.
+ [self sdlex_showInitialData];
+ [self.subscribeButtonManager subscribeToAllPresetButtons];
} else if ([newLevel isEqualToEnum:SDLHMILevelLimited]) {
// An active NAV or MEDIA SDL app is in the background
- SDLLogD(@"The HMI level is limited");
} else if ([newLevel isEqualToEnum:SDLHMILevelBackground]) {
// The SDL app is not in the foreground
- SDLLogD(@"The HMI level is background");
} else if ([newLevel isEqualToEnum:SDLHMILevelNone]) {
// The SDL app is not yet running
- SDLLogD(@"The HMI level is none");
- }
-
- if ([newLevel isEqualToEnum:SDLHMILevelFull]) {
- // We're always going to try to show the initial state. because if we've already shown it, it won't be shown, and we need to guard against some possible weird states
- [self sdlex_showInitialData];
}
}
+/// Called when the SDL app's HMI context changes.
+/// @param oldContext The old HMI context
+/// @param newContext The new HMI context
- (void)systemContext:(nullable SDLSystemContext)oldContext didChangeToContext:(SDLSystemContext)newContext {
if ([newContext isEqualToEnum:SDLSystemContextAlert]) {
- SDLLogD(@"The System Context is Alert");
+ // The SDL app's screen is obscured by an alert
} else if ([newContext isEqualToEnum:SDLSystemContextHMIObscured]) {
- SDLLogD(@"The System Context is HMI Obscured");
+ // The SDL app's screen is obscured
} else if ([newContext isEqualToEnum:SDLSystemContextMain]) {
- SDLLogD(@"The System Context is Main");
+ // The SDL app's main screen is open
} else if ([newContext isEqualToEnum:SDLSystemContextMenu]) {
- SDLLogD(@"The System Context is Menu");
+ // The SDL app's menu is open
} else if ([newContext isEqualToEnum:SDLSystemContextVoiceRecognitionSession]) {
- SDLLogD(@"The System Context is Voice Recognition Session");
+ // A voice recognition session is in progress
}
}
+/// Called when the audio state of the SDL app has changed. The audio state only needs to be monitored if the app is streaming audio.
+/// @param oldState The old audio streaming state
+/// @param newState The new audio streaming state
- (void)audioStreamingState:(nullable SDLAudioStreamingState)oldState didChangeToState:(SDLAudioStreamingState)newState {
if ([newState isEqualToEnum:SDLAudioStreamingStateAudible]) {
// The SDL app's audio can be heard
- SDLLogD(@"The Audio Streaming State is Audible");
} else if ([newState isEqualToEnum:SDLAudioStreamingStateNotAudible]) {
// The SDL app's audio cannot be heard
- SDLLogD(@"The Audio Streaming State is Not Audible");
} else if ([newState isEqualToEnum:SDLAudioStreamingStateAttenuated]) {
// The SDL app's audio volume has been lowered to let the system speak over the audio. This usually happens with voice recognition commands.
- SDLLogD(@"The Audio Streaming State is Not Attenuated");
}
}
-- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language {
+/// Called when the car's head unit language is different from the default langage set in the SDLConfiguration AND the head unit language is supported by the app (as set in `languagesSupported` of SDLConfiguration). This method is only called when a connection to Core is first established. If desired, you can update the app's name and text-to-speech name to reflect the head unit's language.
+/// @param language The head unit's current VR+TTS language
+/// @param hmiLanguage The head unit's current HMI language
+/// @return A SDLLifecycleConfigurationUpdate object
+- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language hmiLanguage:(SDLLanguage)hmiLanguage {
SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] init];
- if ([language isEqualToEnum:SDLLanguageEnUs]) {
+ if ([hmiLanguage isEqualToEnum:SDLLanguageEnUs]) {
update.appName = ExampleAppName;
- } else if ([language isEqualToString:SDLLanguageEsMx]) {
+ } else if ([hmiLanguage isEqualToEnum:SDLLanguageEsMx]) {
update.appName = ExampleAppNameSpanish;
- } else if ([language isEqualToString:SDLLanguageFrCa]) {
+ } else if ([hmiLanguage isEqualToEnum:SDLLanguageFrCa]) {
update.appName = ExampleAppNameFrench;
} else {
return nil;
}
update.ttsName = [SDLTTSChunk textChunksFromString:update.appName];
+
return update;
}
diff --git a/Example Apps/Example ObjC/RPCPermissionsManager.m b/Example Apps/Example ObjC/RPCPermissionsManager.m
index dc5cf6dfc..93d2755e6 100644
--- a/Example Apps/Example ObjC/RPCPermissionsManager.m
+++ b/Example Apps/Example ObjC/RPCPermissionsManager.m
@@ -24,18 +24,23 @@ NS_ASSUME_NONNULL_BEGIN
[self sdlex_checkCurrentPermissionWithManager:manager rpcName:showRPCName];
// Checks if all the RPCs need to create menus are allowed right at this moment
- NSArray<NSString *> *menuRPCNames = @[@"AddCommand", @"CreateInteractionChoiceSet", @"PerformInteraction"];
- [self sdlex_checkCurrentGroupPermissionsWithManager:manager rpcNames:menuRPCNames];
-
- // Set up an observer for permissions changes to media template releated RPCs. Since the `groupType` is set to all allowed, this block is called when the group permissions changes from all allowed. This block is called immediately when created.
- NSArray<NSString *> *mediaTemplateRPCs = @[@"SetMediaClockTimer", @"SubscribeButton"];
- SDLPermissionObserverIdentifier allAllowedObserverId = [self sdlex_subscribeGroupPermissionsWithManager:manager rpcNames:mediaTemplateRPCs groupType:SDLPermissionGroupTypeAllAllowed];
+ SDLPermissionElement *addCommandPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:SDLRPCFunctionNameAddCommand parameterPermissions:nil];
+ SDLPermissionElement *createInteractionPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:SDLRPCFunctionNameCreateInteractionChoiceSet parameterPermissions:nil];
+ SDLPermissionElement *performInteractionPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:SDLRPCFunctionNamePerformInteraction parameterPermissions:nil];
+ NSArray<SDLPermissionElement *> *menuRPCPermissions = @[addCommandPermissionElement, createInteractionPermissionElement, performInteractionPermissionElement];
+ [self sdlex_checkCurrentGroupPermissionsWithManager:manager permissionElements:menuRPCPermissions];
+
+ // Set up an observer for permissions changes to media template releated RPCs. Since the `groupType` is set to all allowed, this block is called when the group permissions changes to all-allowed or from all-allowed to some-not-allowed.
+ SDLPermissionElement *setMediaClockPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:SDLRPCFunctionNameSetMediaClockTimer parameterPermissions:nil];
+ SDLPermissionElement *subscribeButtonPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:SDLRPCFunctionNameSubscribeButton parameterPermissions:nil];
+ NSArray<SDLPermissionElement *> *mediaTemplateRPCPermissions = @[setMediaClockPermissionElement, subscribeButtonPermissionElement];
+ SDLPermissionObserverIdentifier allAllowedObserverId = [self sdlex_subscribeGroupPermissionsWithManager:manager permissionElements:mediaTemplateRPCPermissions groupType:SDLPermissionGroupTypeAllAllowed];
// Stop observing permissions changes for the media template releated RPCs
[self sdlex_unsubscribeGroupPermissionsWithManager:manager observerId:allAllowedObserverId];
// Set up an observer for permissions changes to media template releated RPCs. Since the `groupType` is set to any, this block is called when the permission status changes for any of the RPCs being observed. This block is called immediately when created.
- [self sdlex_subscribeGroupPermissionsWithManager:manager rpcNames:mediaTemplateRPCs groupType:SDLPermissionGroupTypeAny];
+ [self sdlex_subscribeGroupPermissionsWithManager:manager permissionElements:mediaTemplateRPCPermissions groupType:SDLPermissionGroupTypeAny];
}
/**
@@ -46,7 +51,7 @@ NS_ASSUME_NONNULL_BEGIN
*/
+ (BOOL)isDialNumberRPCAllowedWithManager:(SDLManager *)manager {
SDLLogD(@"Checking if app has permission to dial a number");
- return [self sdlex_checkCurrentPermissionWithManager:manager rpcName:@"DialNumber"];
+ return [self sdlex_checkCurrentPermissionWithManager:manager rpcName:SDLRPCFunctionNameDialNumber];
}
#pragma mark - Check Permissions
@@ -60,8 +65,8 @@ NS_ASSUME_NONNULL_BEGIN
* @param rpcName The name of the RPC
* @return True if the RPC can be sent to Core right now, false if not
*/
-+ (BOOL)sdlex_checkCurrentPermissionWithManager:(SDLManager *)manager rpcName:(NSString *)rpcName {
- BOOL isRPCAllowed = [manager.permissionManager isRPCAllowed:rpcName];
++ (BOOL)sdlex_checkCurrentPermissionWithManager:(SDLManager *)manager rpcName:(SDLRPCFunctionName)rpcName {
+ BOOL isRPCAllowed = [manager.permissionManager isRPCNameAllowed:rpcName];
[self sdlex_logRPCPermission:rpcName isRPCAllowed:isRPCAllowed];
return isRPCAllowed;
}
@@ -73,26 +78,26 @@ NS_ASSUME_NONNULL_BEGIN
* @param rpcNames The names of the RPCs
* @return The current permission status for all the RPCs in the group
*/
-+ (SDLPermissionGroupStatus)sdlex_checkCurrentGroupPermissionsWithManager:(SDLManager *)manager rpcNames:(NSArray<NSString *> *)rpcNames {
- SDLPermissionGroupStatus groupPermissionStatus = [manager.permissionManager groupStatusOfRPCs:rpcNames];
- NSDictionary<NSString *, NSNumber *> *individualPermissionStatuses = [manager.permissionManager statusOfRPCs:rpcNames];
- [self sdlex_logRPCGroupPermissions:rpcNames groupPermissionStatus:groupPermissionStatus individualPermissionStatuses:individualPermissionStatuses];
++ (SDLPermissionGroupStatus)sdlex_checkCurrentGroupPermissionsWithManager:(SDLManager *)manager permissionElements:(NSArray<SDLPermissionElement *> *)permissionElements {
+ SDLPermissionGroupStatus groupPermissionStatus = [manager.permissionManager groupStatusOfRPCPermissions:permissionElements];
+ NSDictionary<NSString *, SDLRPCPermissionStatus *> *individualPermissionStatuses = [manager.permissionManager statusesOfRPCPermissions:permissionElements];
+ [self sdlex_logRPCGroupPermissions:permissionElements groupPermissionStatus:groupPermissionStatus individualPermissionStatuses:individualPermissionStatuses];
return groupPermissionStatus;
}
#pragma mark Subscribe Permissions
/**
- * Sets up a block for observing permission changes for a group of RPCs. This block is called immediately when created and when the permission status changes for the group of RPCs being observed.
+ * Sets up a block for observing permission changes for a group of RPCs. This block is called when the group permissions become all-allowed or from all-allowed to some-not-allowed.
*
* @param manager The SDL Manager
* @param rpcNames The names of the RPCs to be subscribed
* @param groupType The type of changes you want to be notified about for the group
* @return A unique identifier for the subscription. This can be used to later to unsubscribe from the notifications.
*/
-+ (SDLPermissionObserverIdentifier)sdlex_subscribeGroupPermissionsWithManager:(SDLManager *)manager rpcNames:(NSArray<NSString *> *)rpcNames groupType:(SDLPermissionGroupType)groupType {
- SDLPermissionObserverIdentifier observerId = [manager.permissionManager addObserverForRPCs:rpcNames groupType:groupType withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull change, SDLPermissionGroupStatus status) {
- [self sdlex_logRPCGroupPermissions:rpcNames groupPermissionStatus:status individualPermissionStatuses:change];
++ (SDLPermissionObserverIdentifier)sdlex_subscribeGroupPermissionsWithManager:(SDLManager *)manager permissionElements:(NSArray<SDLPermissionElement *> *)permissionElements groupType:(SDLPermissionGroupType)groupType {
+ SDLPermissionObserverIdentifier observerId = [manager.permissionManager subscribeToRPCPermissions:permissionElements groupType:groupType withHandler:^(NSDictionary<SDLPermissionRPCName,SDLRPCPermissionStatus *> * _Nonnull change, SDLPermissionGroupStatus status) {
+ [self sdlex_logRPCGroupPermissions:permissionElements groupPermissionStatus:status individualPermissionStatuses:change];
}];
return observerId;
}
@@ -126,10 +131,10 @@ NS_ASSUME_NONNULL_BEGIN
* @param groupPermissionStatus The permission status for all RPCs in the group
* @param individualPermissionStatuses The permission status for each of the RPCs in the group
*/
-+ (void)sdlex_logRPCGroupPermissions:(NSArray<NSString *> *)rpcNames groupPermissionStatus:(SDLPermissionGroupStatus)groupPermissionStatus individualPermissionStatuses:(NSDictionary<NSString *, NSNumber *> *)individualPermissionStatuses {
++ (void)sdlex_logRPCGroupPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupPermissionStatus:(SDLPermissionGroupStatus)groupPermissionStatus individualPermissionStatuses:(NSDictionary<NSString *, SDLRPCPermissionStatus *> *)individualPermissionStatuses {
SDLLogD(@"The group status for %@ has changed to: %lu", rpcNames, (unsigned long)groupPermissionStatus);
- [individualPermissionStatuses enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSNumber * _Nonnull obj, BOOL * _Nonnull stop) {
- [self sdlex_logRPCPermission:key isRPCAllowed:obj.boolValue];
+ [individualPermissionStatuses enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, SDLRPCPermissionStatus * _Nonnull obj, BOOL * _Nonnull stop) {
+ [self sdlex_logRPCPermission:key isRPCAllowed:obj.rpcAllowed];
}];
}
diff --git a/Example Apps/Example ObjC/VehicleDataManager.m b/Example Apps/Example ObjC/VehicleDataManager.m
index d4e9a1066..bcbf1f362 100644
--- a/Example Apps/Example ObjC/VehicleDataManager.m
+++ b/Example Apps/Example ObjC/VehicleDataManager.m
@@ -8,6 +8,7 @@
#import "AlertManager.h"
#import "AppConstants.h"
+#import "SDLRPCFunctionNames.h"
#import "SmartDeviceLink.h"
#import "TextValidator.h"
#import "VehicleDataManager.h"
@@ -136,16 +137,18 @@ NS_ASSUME_NONNULL_BEGIN
*/
+ (void)getAllVehicleDataWithManager:(SDLManager *)manager triggerSource:(SDLTriggerSource)triggerSource vehicleDataType:(NSString *)vehicleDataType {
SDLLogD(@"Checking if app has permission to access vehicle data...");
- if (![manager.permissionManager isRPCAllowed:@"GetVehicleData"]) {
+ if (![manager.permissionManager isRPCNameAllowed:SDLRPCFunctionNameGetVehicleData]) {
[manager sendRequest:[AlertManager alertWithMessageAndCloseButton:@"This app does not have the required permissions to access vehicle data" textField2:nil iconName:nil]];
return;
}
SDLLogD(@"App has permission to access vehicle data. Requesting vehicle data...");
+ SDLGetVehicleData *getAllVehicleData = [[SDLGetVehicleData alloc] initWithGps:@YES speed:@YES rpm:@YES instantFuelConsumption:@YES fuelRange:@YES externalTemperature:@YES turnSignal:@YES vin:@YES prndl:@YES tirePressure:@YES odometer:@YES beltStatus:@YES bodyInformation:@YES deviceStatus:@YES driverBraking:@YES wiperStatus:@YES headLampStatus:@YES engineTorque:@YES accPedalPosition:@YES steeringWheelAngle:@YES engineOilLife:@YES electronicParkBrakeStatus:@YES cloudAppVehicleID:@YES eCallInfo:@YES airbagStatus:@YES emergencyEvent:@YES clusterModeStatus:@YES myKey:@YES handsOffSteering:@YES];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLGetVehicleData *getAllVehicleData = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES vin:YES wiperStatus:YES];
+ getAllVehicleData.fuelLevel = @YES;
+ getAllVehicleData.fuelLevel_State = @YES;
#pragma clang diagnostic pop
[manager sendRequest:getAllVehicleData withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
@@ -218,9 +221,15 @@ NS_ASSUME_NONNULL_BEGIN
} else if ([vehicleDataType isEqualToString:ACExternalTemperatureMenuName]) {
vehicleDataDescription = vehicleData.externalTemperature.description;
} else if ([vehicleDataType isEqualToString:ACFuelLevelMenuName]) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
vehicleDataDescription = vehicleData.fuelLevel.description;
+#pragma clang diagnostic pop
} else if ([vehicleDataType isEqualToString:ACFuelLevelStateMenuName]) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
vehicleDataDescription = vehicleData.fuelLevel_State.description;
+#pragma clang diagnostic pop
} else if ([vehicleDataType isEqualToString:ACFuelRangeMenuName]) {
vehicleDataDescription = vehicleData.fuelRange.description;
} else if ([vehicleDataType isEqualToString:ACGPSMenuName]) {
diff --git a/Example Apps/Example Swift/MenuManager.swift b/Example Apps/Example Swift/MenuManager.swift
index 2f1b92ec5..cdf478149 100644
--- a/Example Apps/Example Swift/MenuManager.swift
+++ b/Example Apps/Example Swift/MenuManager.swift
@@ -62,7 +62,7 @@ private extension MenuManager {
/// - Returns: A SDLMenuCell object
class func menuCellGetAllVehicleData(with manager: SDLManager) -> SDLMenuCell {
let submenuItems = allVehicleDataTypes.map { submenuName in
- SDLMenuCell(title: submenuName, icon: nil, voiceCommands: nil, handler: { triggerSource in
+ SDLMenuCell(title: submenuName, icon: SDLArtwork(staticIcon: .settings), voiceCommands: nil, handler: { triggerSource in
VehicleDataManager.getAllVehicleData(with: manager, triggerSource: triggerSource, vehicleDataType: submenuName)
})
}
diff --git a/Example Apps/Example Swift/ProxyManager.swift b/Example Apps/Example Swift/ProxyManager.swift
index 7d4d58dbd..fdad60360 100644
--- a/Example Apps/Example Swift/ProxyManager.swift
+++ b/Example Apps/Example Swift/ProxyManager.swift
@@ -21,13 +21,15 @@ enum ProxyState {
}
class ProxyManager: NSObject {
- fileprivate var sdlManager: SDLManager!
- fileprivate var buttonManager: ButtonManager!
- fileprivate var vehicleDataManager: VehicleDataManager!
- fileprivate var performInteractionManager: PerformInteractionManager!
- fileprivate var firstHMILevelState: SDLHMILevel
+ private var sdlManager: SDLManager!
+ private var buttonManager: ButtonManager!
+ private var subscribeButtonManager: SubscribeButtonManager!
+ private var vehicleDataManager: VehicleDataManager!
+ private var performInteractionManager: PerformInteractionManager!
+ private var firstHMILevelState: SDLHMILevel
weak var delegate: ProxyManagerDelegate?
+
// Singleton
static let sharedManager = ProxyManager()
private override init() {
@@ -43,12 +45,6 @@ extension ProxyManager {
///
/// - Parameter connectionType: The type of transport layer to use.
func start(with proxyTransportType: ProxyTransportType) {
- guard sdlManager == nil else {
- // Manager already created, just start it again.
- startManager()
- return
- }
-
delegate?.didChangeProxyState(ProxyState.searching)
sdlManager = SDLManager(configuration: proxyTransportType == .iap ? ProxyManager.connectIAP() : ProxyManager.connectTCP(), delegate: self)
startManager()
@@ -109,7 +105,7 @@ private extension ProxyManager {
lifecycleConfiguration.nightColorScheme = SDLTemplateColorScheme(primaryRGBColor: green, secondaryRGBColor: grey, backgroundRGBColor: darkGrey)
let lockScreenConfiguration = appIcon != nil ? SDLLockScreenConfiguration.enabledConfiguration(withAppIcon: appIcon!, backgroundColor: nil) : SDLLockScreenConfiguration.enabled()
- return SDLConfiguration(lifecycle: lifecycleConfiguration, lockScreen: lockScreenConfiguration, logging: logConfiguration(), fileManager:.default())
+ return SDLConfiguration(lifecycle: lifecycleConfiguration, lockScreen: lockScreenConfiguration, logging: logConfiguration(), fileManager: .default(), encryption: .default())
}
/// Sets the type of SDL debug logs that are visible and where to port the logs. There are 4 levels of log filtering, verbose, debug, warning and error. Verbose prints all SDL logs; error prints only the error logs. Adding SDLLogTargetFile to the targest will log to a text file on the iOS device. This file can be accessed via: iTunes > Your Device Name > File Sharing > Your App Name. Make sure `UIFileSharingEnabled` has been added to the application's info.plist and is set to `true`.
@@ -117,7 +113,7 @@ private extension ProxyManager {
/// - Returns: A SDLLogConfiguration object
class func logConfiguration() -> SDLLogConfiguration {
let logConfig = SDLLogConfiguration.default()
- let exampleLogFileModule = SDLLogFileModule(name: "SDL Swift Example App", files: ["ProxyManager", "AlertManager", "AudioManager", "ButtonManager", "MenuManager", "PerformInteractionManager", "RPCPermissionsManager", "VehicleDataManager"])
+ let exampleLogFileModule = SDLLogFileModule(name: "SDL Swift Example App", files: ["ProxyManager", "AlertManager", "AudioManager", "ButtonManager", "SubscribeButtonManager", "MenuManager", "PerformInteractionManager", "RPCPermissionsManager", "VehicleDataManager"])
logConfig.modules.insert(exampleLogFileModule)
_ = logConfig.targets.insert(SDLLogTargetFile()) // Logs to file
logConfig.globalLogLevel = .debug // Filters the logs
@@ -136,6 +132,7 @@ private extension ProxyManager {
self.delegate?.didChangeProxyState(ProxyState.connected)
self.buttonManager = ButtonManager(sdlManager: self.sdlManager, updateScreenHandler: self.refreshUIHandler)
+ self.subscribeButtonManager = SubscribeButtonManager(sdlManager: self.sdlManager)
self.vehicleDataManager = VehicleDataManager(sdlManager: self.sdlManager, refreshUIHandler: self.refreshUIHandler)
self.performInteractionManager = PerformInteractionManager(sdlManager: self.sdlManager)
@@ -149,8 +146,8 @@ private extension ProxyManager {
// MARK: - SDLManagerDelegate
extension ProxyManager: SDLManagerDelegate {
- /// Called when the connection beween this app and SDL Core has closed.
- func managerDidDisconnect() {
+ /// Called when the connection beween this app and the module has closed.
+ func managerDidDisconnect() {
if delegate?.proxyState != .some(.stopped) {
delegate?.didChangeProxyState(ProxyState.searching)
}
@@ -161,36 +158,43 @@ extension ProxyManager: SDLManagerDelegate {
/// Called when the state of the SDL app has changed. The state limits the type of RPC that can be sent. Refer to the class documentation for each RPC to determine what state(s) the RPC can be sent.
///
/// - Parameters:
- /// - oldLevel: The old SDL HMI Level
- /// - newLevel: The new SDL HMI Level
+ /// - oldLevel: The old HMI Level
+ /// - newLevel: The new HMI Level
func hmiLevel(_ oldLevel: SDLHMILevel, didChangeToLevel newLevel: SDLHMILevel) {
if newLevel != .none && firstHMILevelState == .none {
// This is our first time in a non-NONE state
firstHMILevelState = newLevel
- // Send static menu items. Menu related RPCs can be sent at all `hmiLevel`s except `NONE`
+ // Send static menu items.
createMenuAndGlobalVoiceCommands()
+
+ // Subscribe to vehicle data.
vehicleDataManager.subscribeToVehicleOdometer()
}
switch newLevel {
- case .full: // The SDL app is in the foreground
- // Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core.
+ case .full:
+ // The SDL app is in the foreground. Always try to show the initial state to guard against some possible weird states. Duplicates will be ignored by Core.
showInitialData()
- case .limited: break // An active NAV or MEDIA SDL app is in the background
- case .background: break // The SDL app is not in the foreground
- case .none: break // The SDL app is not yet running
+ subscribeButtonManager.subscribeToPresetButtons()
+ case .limited: break // An active NAV or MEDIA SDL app is in the background
+ case .background: break // The SDL app is not in the foreground
+ case .none: break // The SDL app is not yet running
default: break
}
}
+ /// Called when the SDL app's HMI context changes.
+ /// - Parameters:
+ /// - oldContext: The old HMI context
+ /// - newContext: The new HMI context
func systemContext(_ oldContext: SDLSystemContext?, didChangeToContext newContext: SDLSystemContext) {
switch newContext {
- case SDLSystemContext.alert: break
- case SDLSystemContext.hmiObscured: break
- case SDLSystemContext.main: break
- case SDLSystemContext.menu: break
- case SDLSystemContext.voiceRecognitionSession: break
+ case SDLSystemContext.alert: break // The SDL app's screen is obscured by an alert
+ case SDLSystemContext.hmiObscured: break // The SDL app's screen is obscured
+ case SDLSystemContext.main: break // The SDL app's main screen is open
+ case SDLSystemContext.menu: break // The SDL app's menu is open
+ case SDLSystemContext.voiceRecognitionSession: break // A voice recognition session is in progress
default: break
}
}
@@ -198,8 +202,8 @@ extension ProxyManager: SDLManagerDelegate {
/// Called when the audio state of the SDL app has changed. The audio state only needs to be monitored if the app is streaming audio.
///
/// - Parameters:
- /// - oldState: The old SDL audio streaming state
- /// - newState: The new SDL audio streaming state
+ /// - oldState: The old audio streaming state
+ /// - newState: The new audio streaming state
func audioStreamingState(_ oldState: SDLAudioStreamingState?, didChangeToState newState: SDLAudioStreamingState) {
switch newState {
case .audible: break // The SDL app's audio can be heard
@@ -211,22 +215,25 @@ extension ProxyManager: SDLManagerDelegate {
/// Called when the car's head unit language is different from the default langage set in the SDLConfiguration AND the head unit language is supported by the app (as set in `languagesSupported` of SDLConfiguration). This method is only called when a connection to Core is first established. If desired, you can update the app's name and text-to-speech name to reflect the head unit's language.
///
- /// - Parameter language: The head unit's current language
+ /// - Parameter language: The head unit's current VR+TTS language
+ /// - Parameter hmiLanguage: The head unit's current HMI language
/// - Returns: A SDLLifecycleConfigurationUpdate object
- func managerShouldUpdateLifecycle(toLanguage language: SDLLanguage) -> SDLLifecycleConfigurationUpdate? {
- var appName = ""
- switch language {
+ func managerShouldUpdateLifecycle(toLanguage language: SDLLanguage, hmiLanguage: SDLLanguage) -> SDLLifecycleConfigurationUpdate? {
+ let update = SDLLifecycleConfigurationUpdate()
+ switch hmiLanguage {
case .enUs:
- appName = ExampleAppName
+ update.appName = ExampleAppName
case .esMx:
- appName = ExampleAppNameSpanish
+ update.appName = ExampleAppNameSpanish
case .frCa:
- appName = ExampleAppNameFrench
+ update.appName = ExampleAppNameFrench
default:
return nil
}
-
- return SDLLifecycleConfigurationUpdate(appName: appName, shortAppName: nil, ttsName: [SDLTTSChunk(text: appName, type: .text)], voiceRecognitionCommandNames: nil)
+
+ update.ttsName = [SDLTTSChunk(text: update.appName!, type: .text)]
+
+ return update
}
}
diff --git a/Example Apps/Example Swift/RPCPermissionsManager.swift b/Example Apps/Example Swift/RPCPermissionsManager.swift
index 72cdb8019..144a636f6 100644
--- a/Example Apps/Example Swift/RPCPermissionsManager.swift
+++ b/Example Apps/Example Swift/RPCPermissionsManager.swift
@@ -16,22 +16,27 @@ class RPCPermissionsManager {
/// - Parameter manager: The SDL Manager
class func setupPermissionsCallbacks(with manager: SDLManager) {
// Checks if the `SDLShow` RPC is allowed right at this moment
- let showRPCName = "Show"
+ let showRPCName = SDLRPCFunctionName.show
_ = checkCurrentPermission(with: manager, rpcName: showRPCName)
// Checks if all the RPCs need to create menus are allowed right at this moment
- let menuRPCNames = ["AddCommand", "CreateInteractionChoiceSet", "PerformInteraction"]
- _ = checkCurrentGroupPermissions(with: manager, rpcNames: menuRPCNames)
-
- // Set up an observer for permissions changes to media template releated RPCs. Since the `groupType` is set to all allowed, this block is called when the group permissions changes from all allowed. This block is called immediately when created.
- let mediaTemplateRPCs = ["SetMediaClockTimer", "SubscribeButton"]
- let allAllowedObserverId = subscribeGroupPermissions(with: manager, rpcNames: mediaTemplateRPCs, groupType: .allAllowed)
+ let addCommandPermissionElement = SDLPermissionElement(rpcName: SDLRPCFunctionName.addCommand, parameterPermissions: nil)
+ let createInteractionPermissionElement = SDLPermissionElement(rpcName: SDLRPCFunctionName.createInteractionChoiceSet, parameterPermissions: nil)
+ let performInteractionPermissionElement = SDLPermissionElement(rpcName: SDLRPCFunctionName.performInteraction, parameterPermissions: nil)
+ let menuRPCPermissions = [addCommandPermissionElement, createInteractionPermissionElement, performInteractionPermissionElement]
+ _ = checkCurrentGroupPermissions(with: manager, permissionElements: menuRPCPermissions)
+
+ // Set up an observer for permissions changes to media template releated RPCs. Since the `groupType` is set to all allowed, this block is called when the group permissions changes to all-allowed or from all-allowed to some-not-allowed.
+ let setMediaClockPermissionElement = SDLPermissionElement(rpcName: SDLRPCFunctionName.setMediaClockTimer, parameterPermissions: nil)
+ let subscribeButtonPermissionElement = SDLPermissionElement(rpcName: SDLRPCFunctionName.subscribeButton, parameterPermissions: nil)
+ let mediaTemplatePermissions = [setMediaClockPermissionElement, subscribeButtonPermissionElement]
+ let allAllowedObserverId = subscribeGroupPermissions(with: manager, permissionElements: mediaTemplatePermissions, groupType: .allAllowed)
// Stop observing permissions changes for the media template releated RPCs
unsubscribeGroupPermissions(with: manager, observerId: allAllowedObserverId)
// Sets up a block for observing permission changes for a group of RPCs. Since the `groupType` is set to any, this block is called when the permission status changes for any of the RPCs being observed. This block is called immediately when created.
- _ = subscribeGroupPermissions(with: manager, rpcNames: mediaTemplateRPCs, groupType: .any)
+ _ = subscribeGroupPermissions(with: manager, permissionElements: mediaTemplatePermissions, groupType: .any)
}
/// Checks if the `DialNumber` RPC is allowed
@@ -40,31 +45,33 @@ class RPCPermissionsManager {
/// - Returns: True if allowed, false if not
class func isDialNumberRPCAllowed(with manager: SDLManager) -> Bool {
SDLLog.d("Checking if app has permission to dial a number")
- return checkCurrentPermission(with: manager, rpcName: "DialNumber")
+ return checkCurrentPermission(with: manager, rpcName: SDLRPCFunctionName.dialNumber)
}
}
// MARK: - Check Permissions
private extension RPCPermissionsManager {
- /// Checks if the `Show` RPC is allowed right at this moment
+ /// Checks if the RPC is allowed at the time of the call
///
/// - Parameter manager: The SDL Manager
+ /// - Parameter rpcName: The name of the RPC to check
/// - Returns: true if allowed, false if not
- class func checkCurrentPermission(with manager: SDLManager, rpcName: String) -> Bool {
- let isRPCAllowed = manager.permissionManager.isRPCAllowed(rpcName)
- logRPCPermission(rpcName: rpcName, isRPCAllowed: isRPCAllowed)
+ class func checkCurrentPermission(with manager: SDLManager, rpcName: SDLRPCFunctionName) -> Bool {
+ let isRPCAllowed = manager.permissionManager.isRPCNameAllowed(rpcName)
+ SDLLog.d("\(rpcName.rawValue.rawValue) RPC can be sent to SDL Core? \(isRPCAllowed ? "YES" : "NO")")
return isRPCAllowed
}
- /// Checks if all the RPCs need to create menus are allowed right at this moment
+ /// Checks if all the given RPCs are allowed or not at the time of the call
///
/// - Parameter manager: The SDL Manager
- /// - Returns: The rpc names, the group permission status and the permission status for each rpc in the group
- class func checkCurrentGroupPermissions(with manager: SDLManager, rpcNames: [String]) -> SDLPermissionGroupStatus {
- let groupPermissionStatus = manager.permissionManager.groupStatus(ofRPCs: rpcNames)
- let individualPermissionStatuses = manager.permissionManager.status(ofRPCs: rpcNames)
- logRPCGroupPermissions(rpcNames: rpcNames, groupPermissionStatus: groupPermissionStatus, individualPermissionStatuses: individualPermissionStatuses)
+ /// - Parameter permissionElements: The RPCs and parameters to be checked
+ /// - Returns: The group permission status
+ class func checkCurrentGroupPermissions(with manager: SDLManager, permissionElements: [SDLPermissionElement]) -> SDLPermissionGroupStatus {
+ let groupPermissionStatus = manager.permissionManager.groupStatus(ofRPCPermissions: permissionElements)
+ let individualPermissionStatuses = manager.permissionManager.statuses(ofRPCPermissions: permissionElements)
+ logRPCGroupPermissions(permissionElements: permissionElements, groupPermissionStatus: groupPermissionStatus, individualPermissionStatuses: individualPermissionStatuses)
return groupPermissionStatus
}
@@ -73,10 +80,11 @@ private extension RPCPermissionsManager {
/// - Parameters:
/// - manager: The SDL Manager
/// - groupType: The type of changes to get notified about
+ /// - permissionElements: The RPCs and parameters to be checked
/// - Returns: A unique id assigned to observer. Use the id to unsubscribe to notifications
- class func subscribeGroupPermissions(with manager: SDLManager, rpcNames: [String], groupType: SDLPermissionGroupType) -> UUID {
- let permissionAllAllowedObserverId = manager.permissionManager.addObserver(forRPCs: rpcNames, groupType: groupType, withHandler: { (individualStatuses, groupStatus) in
- self.logRPCGroupPermissions(rpcNames: rpcNames, groupPermissionStatus: groupStatus, individualPermissionStatuses: individualStatuses)
+ class func subscribeGroupPermissions(with manager: SDLManager, permissionElements: [SDLPermissionElement], groupType: SDLPermissionGroupType) -> UUID {
+ let permissionAllAllowedObserverId = manager.permissionManager.subscribe(toRPCPermissions: permissionElements, groupType: groupType, withHandler: { (individualStatuses, groupStatus) in
+ self.logRPCGroupPermissions(permissionElements: permissionElements, groupPermissionStatus: groupStatus, individualPermissionStatuses: individualStatuses)
})
return permissionAllAllowedObserverId
@@ -100,8 +108,8 @@ private extension RPCPermissionsManager {
/// - Parameters:
/// - rpcName: The name of the RPC
/// - isRPCAllowed: The permission status for the RPC
- class func logRPCPermission(rpcName: String, isRPCAllowed: Bool) {
- SDLLog.d("\(rpcName) RPC can be sent to SDL Core? \(isRPCAllowed ? "yes" : "no")")
+ class func logRPCPermission(status: SDLRPCPermissionStatus) {
+ SDLLog.d("\(status.rpcName.rawValue.rawValue) RPC can be sent to SDL Core? \(status.isRPCAllowed ? "YES" : "NO"), parameters: \(status.rpcParameters ?? [:])")
}
/// Logs permissions for a group of RPCs
@@ -110,10 +118,10 @@ private extension RPCPermissionsManager {
/// - rpcNames: The names of the RPCs
/// - groupPermissionStatus: The permission status for all RPCs in the group
/// - individualPermissionStatuses: The permission status for each of the RPCs in the group
- class func logRPCGroupPermissions(rpcNames: [String], groupPermissionStatus: SDLPermissionGroupStatus, individualPermissionStatuses: [String:NSNumber]) {
- SDLLog.d("The group status for \(rpcNames) has changed to: \(groupPermissionStatus)")
- for (rpcName, rpcAllowed) in individualPermissionStatuses {
- logRPCPermission(rpcName: rpcName as String, isRPCAllowed: rpcAllowed.boolValue)
+ class func logRPCGroupPermissions(permissionElements: [SDLPermissionElement], groupPermissionStatus: SDLPermissionGroupStatus, individualPermissionStatuses: [SDLRPCFunctionName: SDLRPCPermissionStatus]) {
+ SDLLog.d("The group status for \(permissionElements.map { $0.rpcName.rawValue } ) has changed to: \(groupPermissionStatus.rawValue)")
+ for (_, status) in individualPermissionStatuses {
+ logRPCPermission(status: status)
}
}
}
diff --git a/Example Apps/Example Swift/VehicleDataManager.swift b/Example Apps/Example Swift/VehicleDataManager.swift
index 34ac4352c..c0f6e59dc 100644
--- a/Example Apps/Example Swift/VehicleDataManager.swift
+++ b/Example Apps/Example Swift/VehicleDataManager.swift
@@ -232,7 +232,7 @@ extension VehicleDataManager {
class func hasPermissionToAccessVehicleData(with manager: SDLManager) -> Bool {
SDLLog.d("Checking if app has permission to access vehicle data...")
- guard manager.permissionManager.isRPCAllowed("GetVehicleData") else {
+ guard manager.permissionManager.isRPCNameAllowed(SDLRPCFunctionName.getVehicleData) else {
let alert = AlertManager.alertWithMessageAndCloseButton("This app does not have the required permissions to access vehicle data")
manager.send(request: alert)
return false
diff --git a/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json
index 402889e26..4c34f2d18 100644
--- a/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/alert.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-warning-7-240.png",
"idiom" : "universal",
- "filename" : "alert.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png b/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png
deleted file mode 100644
index f7f732fcf..000000000
--- a/Example Apps/Shared/Images.xcassets/alert.imageset/alert.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/alert.imageset/iconmonstr-warning-7-240.png b/Example Apps/Shared/Images.xcassets/alert.imageset/iconmonstr-warning-7-240.png
new file mode 100644
index 000000000..59d690044
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/alert.imageset/iconmonstr-warning-7-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json
index da6fe9437..d3d587bfd 100644
--- a/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/car.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-car-1-240.png",
"idiom" : "universal",
- "filename" : "iconmonstr-car-1-64.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-240.png b/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-240.png
new file mode 100644
index 000000000..d67175b10
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png b/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png
deleted file mode 100644
index c95eaa035..000000000
--- a/Example Apps/Shared/Images.xcassets/car.imageset/iconmonstr-car-1-64.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json
index e784269b3..ff2359ae6 100644
--- a/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/choice_set.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-menu-1-240.png",
"idiom" : "universal",
- "filename" : "iconmonstr-text-23-64.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-menu-1-240.png b/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-menu-1-240.png
new file mode 100644
index 000000000..f22222fa3
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-menu-1-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png b/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png
deleted file mode 100644
index 23a0aa481..000000000
--- a/Example Apps/Shared/Images.xcassets/choice_set.imageset/iconmonstr-text-23-64.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json
index 4620dff89..8ce202e07 100644
--- a/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/microphone.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-microphone-4-240.png",
"idiom" : "universal",
- "filename" : "microphone.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/microphone.imageset/iconmonstr-microphone-4-240.png b/Example Apps/Shared/Images.xcassets/microphone.imageset/iconmonstr-microphone-4-240.png
new file mode 100644
index 000000000..010f62296
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/microphone.imageset/iconmonstr-microphone-4-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png b/Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png
deleted file mode 100644
index 8ccae2bcb..000000000
--- a/Example Apps/Shared/Images.xcassets/microphone.imageset/microphone.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json
index feb2dff17..c5ef757ea 100644
--- a/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/phone.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-phone-4-240.png",
"idiom" : "universal",
- "filename" : "phone.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/phone.imageset/iconmonstr-phone-4-240.png b/Example Apps/Shared/Images.xcassets/phone.imageset/iconmonstr-phone-4-240.png
new file mode 100644
index 000000000..ec0df5ca4
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/phone.imageset/iconmonstr-phone-4-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/phone.imageset/phone.png b/Example Apps/Shared/Images.xcassets/phone.imageset/phone.png
deleted file mode 100644
index 7c7eff383..000000000
--- a/Example Apps/Shared/Images.xcassets/phone.imageset/phone.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json
index 38dbeb7ed..ace79ad2b 100644
--- a/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/speak.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-speech-bubble-3-240.png",
"idiom" : "universal",
- "filename" : "iconmonstr-speech-bubble-5-64.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-3-240.png b/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-3-240.png
new file mode 100644
index 000000000..31ee625da
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-3-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png b/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png
deleted file mode 100644
index 9404acfe5..000000000
--- a/Example Apps/Shared/Images.xcassets/speak.imageset/iconmonstr-speech-bubble-5-64.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json
index 38e2b195b..5a4234246 100644
--- a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-battery-3-240.png",
"idiom" : "universal",
- "filename" : "toggle_off.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/iconmonstr-battery-3-240.png b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/iconmonstr-battery-3-240.png
new file mode 100644
index 000000000..c3427f347
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/iconmonstr-battery-3-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png b/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png
deleted file mode 100644
index 2e165a6fc..000000000
--- a/Example Apps/Shared/Images.xcassets/toggle_off.imageset/toggle_off.png
+++ /dev/null
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json
index 695bb6a56..6324d0c5b 100644
--- a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json
+++ b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/Contents.json
@@ -1,8 +1,8 @@
{
"images" : [
{
+ "filename" : "iconmonstr-battery-7-240.png",
"idiom" : "universal",
- "filename" : "toggle_on.png",
"scale" : "1x"
},
{
@@ -15,7 +15,7 @@
}
],
"info" : {
- "version" : 1,
- "author" : "xcode"
+ "author" : "xcode",
+ "version" : 1
}
-} \ No newline at end of file
+}
diff --git a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/iconmonstr-battery-7-240.png b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/iconmonstr-battery-7-240.png
new file mode 100644
index 000000000..d336be333
--- /dev/null
+++ b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/iconmonstr-battery-7-240.png
Binary files differ
diff --git a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png b/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png
deleted file mode 100644
index eb43d718b..000000000
--- a/Example Apps/Shared/Images.xcassets/toggle_on.imageset/toggle_on.png
+++ /dev/null
Binary files differ
diff --git a/README.md b/README.md
index d80965306..b8b66babe 100644
--- a/README.md
+++ b/README.md
@@ -2,149 +2,73 @@
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![Version](https://img.shields.io/cocoapods/v/SmartDeviceLink-iOS.svg?style=flat)](https://cocoapods.org/pods/SmartDeviceLink-iOS)
[![License](https://img.shields.io/cocoapods/l/SmartDeviceLink-iOS.svg?style=flat)](https://cocoapods.org/pods/SmartDeviceLink-iOS)
-[![Build Status](https://img.shields.io/travis/smartdevicelink/sdl_ios/master.svg?style=flat)](https://travis-ci.org/smartdevicelink/sdl_ios)
+![SmartDeviceLink Tests](https://github.com/smartdevicelink/sdl_ios/workflows/SmartDeviceLink%20Tests/badge.svg)
[![codecov](https://codecov.io/gh/smartdevicelink/sdl_ios/branch/master/graph/badge.svg)](https://codecov.io/gh/smartdevicelink/sdl_ios)
[![Documentation](docs/badge.svg)](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/)
[![Slack Status](http://sdlslack.herokuapp.com/badge.svg)](http://slack.smartdevicelink.com)
-# SmartDeviceLink (SDL)
+# What is SmartDeviceLink (SDL)
[SmartDeviceLink (SDL)](https://www.smartdevicelink.com) is a standard set of protocols and messages that connect applications on a smartphone to a vehicle head unit. This messaging enables a consumer to interact with their application using common in-vehicle interfaces such as a touch screen display, embedded voice recognition, steering wheel controls and various vehicle knobs and buttons. There are three main components that make up the SDL ecosystem.
* The [Core](https://github.com/smartdevicelink/sdl_core) component is the software which Vehicle Manufacturers (OEMs) implement in their vehicle head units. Integrating this component into their head unit and HMI based on a set of guidelines and templates enables access to various smartphone applications.
* The optional [SDL Server](https://github.com/smartdevicelink/sdl_server) can be used by Vehicle OEMs to update application policies and gather usage information for connected applications.
-* The [iOS](https://github.com/smartdevicelink/sdl_ios) and [Android](https://github.com/smartdevicelink/sdl_android) libraries are implemented by app developers into their applications to enable command and control via the connected head unit.
+* The [iOS](https://github.com/smartdevicelink/sdl_ios), [Android / Java Suite](https://github.com/smartdevicelink/sdl_android), and [JavaScript](https://github.com/smartdevicelink/sdl_javascript_suite) libraries are implemented by app developers into their applications to enable command and control via the connected head unit.
* To suggest new features to SDL, including the iOS library, go to the [SDL Evolution](https://github.com/smartdevicelink/sdl_evolution) github project.
* To understand if a contribution should be entered as an iOS Pull Request or Issue, or an SDL Evolution Proposal, please reference [this document](https://github.com/smartdevicelink/sdl_evolution/blob/master/proposals_versus_issues.md).
-<a href="http://www.youtube.com/watch?feature=player_embedded&v=AzdQdSCS24M" target="_blank"><img src="http://i.imgur.com/nm8UujD.png?1" alt="SmartDeviceLink" border="10" /></a>
+## SDL iOS App Library
+The mobile library component of SDL is meant to run on the end user’s smart-device from within SDL enabled apps. The library allows the apps to connect to SDL enabled head-units and hardware through Bluetooth, USB, and TCP. Once the library establishes a connection between the smart device and head-unit through the preferred method of transport, the two devices are able to communicate using the SDL defined protocol. The app integrating this library project is then able to expose its functionality to the head-unit through text, media, and other interactive elements.
-## Mobile Proxy
-
-The mobile library component of SDL is meant to run on the end user’s smart-device from within SDL enabled apps. The library allows the apps to connect to SDL enabled head-units and hardware through bluetooth, USB, and TCP. Once the library establishes a connection between the smart device and head-unit through the preferred method of transport, the two components are able to communicate using the SDL defined protocol. The app integrating this library project is then able to expose its functionality to the head-unit through text, media, and other interactive elements.
-
-
-## SDL iOS
-
-We're still working on creating documentation for each of these individual repositories, but in the meantime, you can find more information about SmartDeviceLink [on the website](https://www.smartdevicelink.com).
-
-See the [changelog](https://github.com/smartdevicelink/sdl_ios/blob/master/CHANGELOG.md) for release notes. This project uses [Semantic Versioning](http://semver.org/).
+You can find guides and documentation on how to use this library at the [SmartDeviceLink website](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/). You can find the upcoming releases roadmap at the [SDL Evolution Github](https://github.com/smartdevicelink/sdl_evolution#recent-and-upcoming-releases).
### Installing
+To install this library as a framework in your app, see the [Installation Guide](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/). There are instructions on how to install using the dependency managers CocoaPods, Carthage, and Accio, as well as how to install the library framework manually.
-#### Accio
-
-You can install this library using [Accio/SwiftPM](https://github.com/JamitLabs/Accio) documentation page. Please follow the steps to install and initialization Accio into a current or new application.
-
-In your Package.swift file , you want to add `.package(url: "https://github.com/smartdevicelink/sdl_ios.git", .from: "6.5.0"),` to the dependencies array. Then add `SmartDeviceLink` to the targets dependencies array.
-
-Please see [Mainifest format](https://github.com/apple/swift-package-manager/blob/master/Documentation/PackageDescriptionV4.md) to specify dependencies to a specific branch / version of SDL.
-
-###### Swift
-
-If you are building a Swift app, then add this instead `SmartDeviceLinkSwift` to the targets dependencies array.
-
-##### Cocoapods
-
-You can install this library using [Cocoapods](https://cocoapods.org/pods/SmartDeviceLink-iOS). You can get started with Cocoapods by [following their install guide](https://guides.cocoapods.org/using/getting-started.html#getting-started), and learn how to use Cocoapods to install dependencies [by following this guide](https://guides.cocoapods.org/using/using-cocoapods.html).
-
-In your podfile, you want to add `pod 'SmartDeviceLink', '~> 6.5'`. Then run `pod install` inside your terminal. With Cocoapods, we support iOS 8.0+.
-
-###### Swift
-If you are building a Swift app, then add this instead `pod 'SmartDeviceLink/Swift', '~> 6.5'`. Then run `pod install` in your terminal.
-
-##### Carthage
-
-SDL iOS supports Carthage! Install using Carthage by following [this guide](https://github.com/Carthage/Carthage#adding-frameworks-to-an-application). Carthage supports iOS 8+.
-
-###### Swift
-If you are building a Swift app, then include both packaged frameworks for expanded logging support.
-
-##### Dynamic Framework
-
+#### Adding a Dynamic Framework
Tagged to our releases is a dynamic framework file that can be drag-and-dropped into the application. Dynamic frameworks are supported on iOS 8+. **WARNING: You cannot submit your app to the app store with the framework as is. You MUST strip the simulator part of the framework first. Strip the x64 and i386 portions first like so:**
-```
-lipo -remove i386 -remove x86_64 -o SmartDeviceLink.framework/SmartDeviceLink SmartDeviceLink.framework/SmartDeviceLink`
+```bash
+lipo -remove i386 -remove x86_64 -o SmartDeviceLink.framework/SmartDeviceLink SmartDeviceLink.framework/SmartDeviceLink
```
You can check the current architectures like so:
-```
+```bash
lipo -info SmartDeviceLink.framework/SmartDeviceLink
```
-### Reference Documentation
+### Getting Help
+If you have questions, first view our guides on the [SmartDeviceLink website](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/).
-You can find the latest reference documentation on [SmartDeviceLink.com Documentation](https://smartdevicelink.com/en/docs/iOS/master/), and view guides on [SmartDeviceLink.com Guides](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/).
+If you see a bug, please post an issue on the appropriate repository. Please see the [contribution guidelines](https://github.com/smartdevicelink/sdl_ios/blob/master/.github/CONTRIBUTING.md) before proceeding. If you need general assistance, or have other questions, you can [sign up](http://slack.smartdevicelink.com) for the [SDL Slack](https://smartdevicelink.slack.com) and chat with other developers and the maintainers of the project.
-### Getting Help
+### Example Apps
+This library repository contains two example apps: one written in Objective-C and one in Swift. If you have CocoaPods installed, you can easily run one of the example apps by executing `pod try SmartDeviceLink` in your terminal. Alternatively, you can clone or download the project, but before attempting to build and run the example apps you must follow the [installation steps](#preparing-for-development).
-First, view our guides on [SmartDeviceLink.com](https://smartdevicelink.com/en/guides/iOS/getting-started/installation/).
-
-If you see a bug, please post an issue on the appropriate repository. Please see the [contribution guidelines](https://github.com/smartdevicelink/sdl_ios/blob/master/CONTRIBUTING.md) before proceeding. If you need general assistance, or have other questions, you can [sign up](http://slack.smartdevicelink.org) for the [SDL Slack](https://smartdevicelink.slack.com) and chat with other developers and the maintainers of the project.
-
-### SDL iOS Getting Started
-
-#### Example Apps
-To use the example apps, you can use `pod try SmartDeviceLink`, alternately, you can clone or download the project, but you must then also retrieve the submodules by running `git submodule init` and `git submodule update` in your terminal while in the main directory of the project.
-
-#### Other Installation Requirements
-You can connect your application with [manticore](https://smartdevicelink.com/resources/manticore/) while running in TCP debug mode in order to test. For more information, [see the guildes](https://smartdevicelink.com/en/guides/iOS/getting-started/connecting-to-an-infotainment-system/).
-
-#### Enabling Background Capabilities
-iOS 5 introduced the capability for an iOS application to maintain a connection to an external accessory while the application is in the background. This capability must be explicitly enabled for your application.
-
-To enable the feature for your application, select your application's build target, go to Capabilities, enable Background Modes, and select the External accessory communication mode.
-
-![Enable External Accessory Background Mode](http://i.imgur.com/zxn4lsb.png)
-
-#### SDL protocol strings
-Your application must support a set of smartdevicelink protocol strings in order to be connected to smartdevicelink enabled head units. Go to your application's .plist, look at the source, and add the following code under the top level `dict`. Note: This is not required if you're only testing by connected to a wifi enabled head unit, but is required for USB and Bluetooth enabled head units.
-
-```xml
-<key>UISupportedExternalAccessoryProtocols</key>
-<array>
-<string>com.smartdevicelink.prot29</string>
-<string>com.smartdevicelink.prot28</string>
-<string>com.smartdevicelink.prot27</string>
-<string>com.smartdevicelink.prot26</string>
-<string>com.smartdevicelink.prot25</string>
-<string>com.smartdevicelink.prot24</string>
-<string>com.smartdevicelink.prot23</string>
-<string>com.smartdevicelink.prot22</string>
-<string>com.smartdevicelink.prot21</string>
-<string>com.smartdevicelink.prot20</string>
-<string>com.smartdevicelink.prot19</string>
-<string>com.smartdevicelink.prot18</string>
-<string>com.smartdevicelink.prot17</string>
-<string>com.smartdevicelink.prot16</string>
-<string>com.smartdevicelink.prot15</string>
-<string>com.smartdevicelink.prot14</string>
-<string>com.smartdevicelink.prot13</string>
-<string>com.smartdevicelink.prot12</string>
-<string>com.smartdevicelink.prot11</string>
-<string>com.smartdevicelink.prot10</string>
-<string>com.smartdevicelink.prot9</string>
-<string>com.smartdevicelink.prot8</string>
-<string>com.smartdevicelink.prot7</string>
-<string>com.smartdevicelink.prot6</string>
-<string>com.smartdevicelink.prot5</string>
-<string>com.smartdevicelink.prot4</string>
-<string>com.smartdevicelink.prot3</string>
-<string>com.smartdevicelink.prot2</string>
-<string>com.smartdevicelink.prot1</string>
-<string>com.smartdevicelink.prot0</string>
-<string>com.ford.sync.prot0</string>
-<string>com.smartdevicelink.multisession</string>
-</array>
-```
+There are additional example apps available [in the example organization](https://github.com/smartdevicelink-examples/), these require CocoaPods to install dependencies.
+
+### Contributing to the Project
+We welcome contributors to the project, but it helps to know a few things about how the project is organized.
-#### Continue Integrating
-Go through the [guide documentation](https://smartdevicelink.com/en/guides/iOS/getting-started/integration-basics/) to get started setting up your app to work with SDL!
+1. All Pull Requests _must_ fix an issue. Before creating a PR for a bug or feature, ensure that there is an open issue for it. If there is not, open one!
+2. We recommend telling the project maintainers that you intend to contribute a PR for an issue. This allows us to internally track what PRs will be contributed and to plan time to review your PR. Furthermore, we may ask you not to work on a PR for that issue for various reasons (see below).
+3. We welcome PRs for bug fixes! If there's a confirmed issue for a bug, we would welcome a bug fix. The PR will require a review from a project maintainer before it can be merged.
+4. PRs for features require additional planning. Features must be approved by the SDLC using the [Evolution Process](https://github.com/smartdevicelink/sdl_evolution) before an issue can be opened. Furthermore, a feature must be approved to be developed for a release by the SDLC before a PR can be opened. Finally, a PR cannot be merged if the underlying feature requires or should have alignment across multiple projects until PRs for all those projects are ready for review.
-### Running Tests
+#### Preparing for Development
+To prepare the library for development, you will need to take a few steps:
+
+1. Clone this repository.
+1. Install submodules with `git submodule init` and `git submodule update`.
+1. Install [testing dependencies](#running-tests).
+1. Ensure that you can run the [Example test apps](#example-apps).
+
+#### Creating or Updating an RPC
+When creating or updating an RPC, you will need to install and use the [RPC generator](https://github.com/smartdevicelink/sdl_ios/tree/master/generator). The generator must be used to ensure that the content is correct. To use the generator, the RPC must be updated on the [RPC spec repository](https://github.com/smartdevicelink/rpc_spec).
+
+#### Running Tests
To run tests, you will need to bootstrap the Carthage testing libraries. To do so, first [install Carthage](https://github.com/Carthage/Carthage#installing-carthage).
Then, from the root project directory, run:
@@ -156,7 +80,23 @@ cd ../
At this point, you can run tests from Xcode, or, if you wish to run the tests exactly as they will be run on the CI server, run:
```bash
-xcodebuild -project "SmartDeviceLink-iOS.xcodeproj" -scheme "SmartDeviceLink" -sdk "iphonesimulator10.0" -destination "OS=10.0,name=iPhone 7" -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ENABLE_TESTABILITY=YES test
+xcodebuild build-for-testing -project SmartDeviceLink-iOS.xcodeproj -destination platform=iOS Simulator,name=iPhone 11,OS=13.5 -scheme SmartDeviceLink
+
+set -o pipefail && xcodebuild test-without-building -project SmartDeviceLink-iOS.xcodeproj -destination platform=iOS Simulator,name=iPhone 11,OS=13.5 -scheme SmartDeviceLink -configuration Debug ONLY_ACTIVE_ARCH=NO RUN_CLANG_STATIC_ANALYZER=NO GCC_INSTRUMENT_PROGRAM_FLOW_ARCS=YES GCC_GENERATE_TEST_COVERAGE_FILES=YES ENABLE_TESTABILITY=YES
+```
+
+##### Lock Screen Screenshot Tests
+We run some additional tests using [iOSSnapshotTestCase](https://github.com/uber/ios-snapshot-test-case). These tests generate the lock screen view controller and compare it to generated screenshots. By default, the generated screenshots use the iPhone 11 simulator and if you run the unit tests on that simulator, the tests should pass by default.
+
+###### Re-Generating Lock Screen Screenshots
+If you need to change which simulator is used to generate the screenshots, or if you need to re-generate the screenshots for another reason, you can. Go to `SDLLockScreenViewControllerSnapshotTests.m` and take the following steps:
+
+1. Uncomment the following line:
+
+```objc
+// self.recordMode = YES;
```
-You can optionally pipe the result to [xcpretty](https://github.com/supermarin/xcpretty).
+2. Run unit tests on the simulator that you want to use to generate the screenshots. Tests should fail because record mode is on.
+3. Re-comment out the line.
+4. Run unit tests again; they should pass this time.
diff --git a/SmartDeviceLink-iOS.podspec b/SmartDeviceLink-iOS.podspec
index 294917248..fd22008df 100644
--- a/SmartDeviceLink-iOS.podspec
+++ b/SmartDeviceLink-iOS.podspec
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "SmartDeviceLink-iOS"
-s.version = "6.5.0"
+s.version = "6.7.0"
s.summary = "Connect your app with cars!"
s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS"
s.license = { :type => "New BSD", :file => "LICENSE" }
@@ -12,12 +12,9 @@ s.source = { :git => "https://github.com/smartdevicelink/sdl_ios.git", :ta
s.requires_arc = true
s.resource_bundles = { 'SmartDeviceLink' => ['SmartDeviceLink/Assets/**/*'] }
-s.default_subspecs = 'Default'
+s.source_files = 'SmartDeviceLink/*.{h,m}'
-s.subspec 'Default' do |ss|
-ss.source_files = 'SmartDeviceLink/*.{h,m}'
-
-ss.public_header_files = [
+s.public_header_files = [
'SmartDeviceLink/NSNumber+NumberType.h',
'SmartDeviceLink/SDLAddCommand.h',
'SmartDeviceLink/SDLAddCommandResponse.h',
@@ -42,8 +39,8 @@ ss.public_header_files = [
'SmartDeviceLink/SDLArtwork.h',
'SmartDeviceLink/SDLAudioControlData.h',
'SmartDeviceLink/SDLAudioControlCapabilities.h',
-'SmartDeviceLink/SDLAudioFile.h',
'SmartDeviceLink/SDLAudioPassThruCapabilities.h',
+'SmartDeviceLink/SDLAudioFile.h',
'SmartDeviceLink/SDLAudioStreamingState.h',
'SmartDeviceLink/SDLAudioStreamingIndicator.h',
'SmartDeviceLink/SDLAudioStreamManager.h',
@@ -60,6 +57,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLButtonPressMode.h',
'SmartDeviceLink/SDLCancelInteraction.h',
'SmartDeviceLink/SDLCancelInteractionResponse.h',
+'SmartDeviceLink/SDLCapacityUnit.h',
'SmartDeviceLink/SDLCarModeStatus.h',
'SmartDeviceLink/SDLCarWindowViewController.h',
'SmartDeviceLink/SDLChangeRegistration.h',
@@ -104,12 +102,13 @@ ss.public_header_files = [
'SmartDeviceLink/SDLDialNumberResponse.h',
'SmartDeviceLink/SDLDIDResult.h',
'SmartDeviceLink/SDLDimension.h',
+'SmartDeviceLink/SDLDirection.h',
'SmartDeviceLink/SDLDisplayCapability.h',
'SmartDeviceLink/SDLDisplayCapabilities.h',
'SmartDeviceLink/SDLDisplayMode.h',
'SmartDeviceLink/SDLDisplayType.h',
'SmartDeviceLink/SDLDistanceUnit.h',
-'SmartDeviceLink/SDLDirection.h',
+'SmartDeviceLink/SDLDriverDistractionCapability.h',
'SmartDeviceLink/SDLDriverDistractionState.h',
'SmartDeviceLink/SDLECallConfirmationStatus.h',
'SmartDeviceLink/SDLECallInfo.h',
@@ -134,11 +133,11 @@ ss.public_header_files = [
'SmartDeviceLink/SDLFuelType.h',
'SmartDeviceLink/SDLFunctionID.h',
'SmartDeviceLink/SDLGenericResponse.h',
-'SmartDeviceLink/SDLGetCloudAppProperties.h',
-'SmartDeviceLink/SDLGetCloudAppPropertiesResponse.h',
'SmartDeviceLink/SDLGetAppServiceData.h',
'SmartDeviceLink/SDLGetAppServiceDataResponse.h',
'SmartDeviceLink/SDLGetDTCs.h',
+'SmartDeviceLink/SDLGetCloudAppProperties.h',
+'SmartDeviceLink/SDLGetCloudAppPropertiesResponse.h',
'SmartDeviceLink/SDLGetDTCsResponse.h',
'SmartDeviceLink/SDLGetFile.h',
'SmartDeviceLink/SDLGetFileResponse.h',
@@ -204,15 +203,15 @@ ss.public_header_files = [
'SmartDeviceLink/SDLLogTargetAppleSystemLog.h',
'SmartDeviceLink/SDLLogTargetFile.h',
'SmartDeviceLink/SDLLogTargetOSLog.h',
+'SmartDeviceLink/SDLMacros.h',
+'SmartDeviceLink/SDLMaintenanceModeStatus.h',
+'SmartDeviceLink/SDLManager.h',
+'SmartDeviceLink/SDLManagerDelegate.h',
'SmartDeviceLink/SDLMassageCushionFirmness.h',
'SmartDeviceLink/SDLMassageModeData.h',
'SmartDeviceLink/SDLMassageCushion.h',
'SmartDeviceLink/SDLMassageMode.h',
'SmartDeviceLink/SDLMassageZone.h',
-'SmartDeviceLink/SDLMacros.h',
-'SmartDeviceLink/SDLMaintenanceModeStatus.h',
-'SmartDeviceLink/SDLManager.h',
-'SmartDeviceLink/SDLManagerDelegate.h',
'SmartDeviceLink/SDLMediaClockFormat.h',
'SmartDeviceLink/SDLMediaServiceData.h',
'SmartDeviceLink/SDLMediaServiceManifest.h',
@@ -267,6 +266,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLPerformInteraction.h',
'SmartDeviceLink/SDLPerformInteractionResponse.h',
'SmartDeviceLink/SDLPermissionConstants.h',
+'SmartDeviceLink/SDLPermissionElement.h',
'SmartDeviceLink/SDLPermissionItem.h',
'SmartDeviceLink/SDLPermissionManager.h',
'SmartDeviceLink/SDLPermissionStatus.h',
@@ -309,6 +309,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLRPCMessageType.h',
'SmartDeviceLink/SDLRPCNotification.h',
'SmartDeviceLink/SDLRPCNotificationNotification.h',
+'SmartDeviceLink/SDLRPCPermissionStatus.h',
'SmartDeviceLink/SDLRPCRequest.h',
'SmartDeviceLink/SDLRPCRequestNotification.h',
'SmartDeviceLink/SDLRPCResponse.h',
@@ -325,7 +326,6 @@ ss.public_header_files = [
'SmartDeviceLink/SDLSeatLocationCapability.h',
'SmartDeviceLink/SDLSeatMemoryAction.h',
'SmartDeviceLink/SDLSeatMemoryActionType.h',
-'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSecurityType.h',
'SmartDeviceLink/SDLSendHapticData.h',
'SmartDeviceLink/SDLSendHapticDataResponse.h',
@@ -377,6 +377,7 @@ ss.public_header_files = [
'SmartDeviceLink/SDLSubscribeVehicleDataResponse.h',
'SmartDeviceLink/SDLSubscribeWaypoints.h',
'SmartDeviceLink/SDLSubscribeWaypointsResponse.h',
+'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSyncMsgVersion.h',
'SmartDeviceLink/SDLMsgVersion.h',
'SmartDeviceLink/SDLSyncPData.h',
@@ -452,6 +453,5 @@ ss.public_header_files = [
'SmartDeviceLink/SDLWindowTypeCapabilities.h',
'SmartDeviceLink/SmartDeviceLink.h',
]
-end
end
diff --git a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
index 80cdf1dba..1bae109fe 100644
--- a/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
+++ b/SmartDeviceLink-iOS.xcodeproj/project.pbxproj
@@ -38,6 +38,18 @@
00E22CED22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h in Headers */ = {isa = PBXBuildFile; fileRef = 00E22CEB22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h */; settings = {ATTRIBUTES = (Public, ); }; };
00EADD3322DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EADD3222DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m */; };
00EADD3522DFE5670088B608 /* SDLEncryptionConfigurationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 00EADD3422DFE5670088B608 /* SDLEncryptionConfigurationSpec.m */; };
+ 106187B924AA75540045C4EC /* SDLRPCPermissionStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 106187B824AA75540045C4EC /* SDLRPCPermissionStatusSpec.m */; };
+ 106187BA24AA76550045C4EC /* SDLRPCPermissionStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 106982A824AA3B4700B1F649 /* SDLRPCPermissionStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 106412C6249FB80B0069A97A /* SDLPermissionElement.h in Headers */ = {isa = PBXBuildFile; fileRef = 106412C4249FB80B0069A97A /* SDLPermissionElement.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 106412C7249FB80B0069A97A /* SDLPermissionElement.m in Sources */ = {isa = PBXBuildFile; fileRef = 106412C5249FB80B0069A97A /* SDLPermissionElement.m */; };
+ 106412C824A13F160069A97A /* SDLPermissionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8204241BCEA8A600D0A41B /* SDLPermissionManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 106982AB24AA3B4700B1F649 /* SDLRPCPermissionStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 106982A924AA3B4700B1F649 /* SDLRPCPermissionStatus.m */; };
+ 10893C162417D78300BA347E /* SDLIconArchiveFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 10893C142417D78300BA347E /* SDLIconArchiveFile.h */; };
+ 10893C172417D78300BA347E /* SDLIconArchiveFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 10893C152417D78300BA347E /* SDLIconArchiveFile.m */; };
+ 10893C1A2418188600BA347E /* SDLCacheFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 10893C182418188600BA347E /* SDLCacheFileManager.h */; };
+ 10893C1B2418188600BA347E /* SDLCacheFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 10893C192418188600BA347E /* SDLCacheFileManager.m */; };
+ 109566F6242986F300E24F66 /* SDLCacheFileManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */; };
+ 1098F03824A39699004F53CC /* SDLPermissionElementSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1098F03724A39699004F53CC /* SDLPermissionElementSpec.m */; };
162E82CA1A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */; };
162E82CB1A9BDE8A00906325 /* SDLAppHMITypeSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */; };
162E82CC1A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */; };
@@ -137,7 +149,6 @@
162E832C1A9BDE8B00906325 /* SDLDiagnosticMessageSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E82481A9BDE8A00906325 /* SDLDiagnosticMessageSpec.m */; };
162E832D1A9BDE8B00906325 /* SDLEncodedSyncPDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E82491A9BDE8A00906325 /* SDLEncodedSyncPDataSpec.m */; };
162E832E1A9BDE8B00906325 /* SDLEndAudioPassThruSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824A1A9BDE8A00906325 /* SDLEndAudioPassThruSpec.m */; };
- 162E83301A9BDE8B00906325 /* SDLGetVehicleDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824C1A9BDE8A00906325 /* SDLGetVehicleDataSpec.m */; };
162E83311A9BDE8B00906325 /* SDLListFilesSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824D1A9BDE8A00906325 /* SDLListFilesSpec.m */; };
162E83321A9BDE8B00906325 /* SDLPerformAudioPassThruSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824E1A9BDE8A00906325 /* SDLPerformAudioPassThruSpec.m */; };
162E83331A9BDE8B00906325 /* SDLPerformInteractionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824F1A9BDE8A00906325 /* SDLPerformInteractionSpec.m */; };
@@ -404,13 +415,38 @@
1FF7DABA1F75B2A800B46C30 /* SDLFocusableItemLocator.h in Headers */ = {isa = PBXBuildFile; fileRef = 1FF7DAB91F75B2A800B46C30 /* SDLFocusableItemLocator.h */; };
1FF7DABC1F75B2BF00B46C30 /* SDLFocusableItemLocator.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7DABB1F75B2BF00B46C30 /* SDLFocusableItemLocator.m */; };
1FF7DAC01F75CF6C00B46C30 /* SDLHapticManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */; };
- 2B233530232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.h */; };
- 2B233531232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.m */; };
+ 2B233530232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.h */; };
+ 2B233531232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.m */; };
2BF2F84F20ED004000A26EF2 /* SDLAudioStreamingIndicator.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BF2F84D20ED004000A26EF2 /* SDLAudioStreamingIndicator.h */; settings = {ATTRIBUTES = (Public, ); }; };
2BF2F85020ED004000A26EF2 /* SDLAudioStreamingIndicator.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF2F84E20ED004000A26EF2 /* SDLAudioStreamingIndicator.m */; };
2BF2F85220ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */; };
332A914F1CED9CC60043824C /* SDLAppInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 332A913D1CED87F80043824C /* SDLAppInfo.m */; };
332A91501CED9CF10043824C /* SDLAppInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 332A913C1CED87F80043824C /* SDLAppInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4A1B036C24CF43CD008C6B13 /* SDLDriverDistractionCapability.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1B036A24CF43CD008C6B13 /* SDLDriverDistractionCapability.m */; };
+ 4A1B036D24CF43CD008C6B13 /* SDLDriverDistractionCapability.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A1B036B24CF43CD008C6B13 /* SDLDriverDistractionCapability.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 4A1B036F24CF484E008C6B13 /* SDLDriverDistractionCapabilitySpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A1B036E24CF484E008C6B13 /* SDLDriverDistractionCapabilitySpec.m */; };
+ 4A26370C2493F0CF00278BE3 /* SDLRPCMessageType.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A26370B2493F0CE00278BE3 /* SDLRPCMessageType.m */; };
+ 4A3BA4DC248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3BA4DA248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.h */; };
+ 4A3BA4DD248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A3BA4DB248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.m */; };
+ 4A3BA4E1248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3BA4DF248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.h */; };
+ 4A3BA4E2248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A3BA4E0248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.m */; };
+ 4A3BA4E724901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3BA4E524901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.h */; };
+ 4A3BA4E824901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A3BA4E624901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.m */; };
+ 4A3BA4EC24914801003E56B8 /* SDLLifecycleProtocolHandler.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A3BA4EA24914801003E56B8 /* SDLLifecycleProtocolHandler.h */; };
+ 4A3BA4ED24914801003E56B8 /* SDLLifecycleProtocolHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A3BA4EB24914801003E56B8 /* SDLLifecycleProtocolHandler.m */; };
+ 4A457DC324A2933E00386CBA /* SDLLifecycleRPCAdapterSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A457DC224A2933E00386CBA /* SDLLifecycleRPCAdapterSpec.m */; };
+ 4A457DD324A3886700386CBA /* SDLLifecycleSyncPDataHandlerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A457DD224A3886700386CBA /* SDLLifecycleSyncPDataHandlerSpec.m */; };
+ 4A457DD524A3C16E00386CBA /* SDLLifecycleMobileHMIStateHandlerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A457DD424A3C16E00386CBA /* SDLLifecycleMobileHMIStateHandlerSpec.m */; };
+ 4A457DD724A3CCED00386CBA /* SDLLifecycleSystemRequestHandlerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A457DD624A3CCED00386CBA /* SDLLifecycleSystemRequestHandlerSpec.m */; };
+ 4A457DD924A5137100386CBA /* SDLLifecycleProtocolHandlerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A457DD824A5137100386CBA /* SDLLifecycleProtocolHandlerSpec.m */; };
+ 4A4AD8A424894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4AD8A324894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.m */; };
+ 4A4AD8A724894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A4AD8A624894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.m */; };
+ 4A99D00E247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A99D00C247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.h */; };
+ 4A99D00F247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A99D00D247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.m */; };
+ 4A99D0122475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A99D0102475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.h */; };
+ 4A99D0132475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A99D0112475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.m */; };
+ 4A9D02BE2497EED400FBE99B /* SDLLifecycleRPCAdapter.h in Headers */ = {isa = PBXBuildFile; fileRef = 4A9D02BC2497EED400FBE99B /* SDLLifecycleRPCAdapter.h */; };
+ 4A9D02BF2497EED400FBE99B /* SDLLifecycleRPCAdapter.m in Sources */ = {isa = PBXBuildFile; fileRef = 4A9D02BD2497EED400FBE99B /* SDLLifecycleRPCAdapter.m */; };
5D00AC671F140F0A004000D9 /* SDLSystemCapabilityType.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D00AC651F140F0A004000D9 /* SDLSystemCapabilityType.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D00AC681F140F0A004000D9 /* SDLSystemCapabilityType.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D00AC661F140F0A004000D9 /* SDLSystemCapabilityType.m */; };
5D00AC6B1F141339004000D9 /* SDLSystemCapability.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D00AC691F141339004000D9 /* SDLSystemCapability.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -755,7 +791,7 @@
5D61FCF91A84238C00846EE7 /* SDLMenuParams.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB0C1A84238A00846EE7 /* SDLMenuParams.m */; };
5D61FCFA1A84238C00846EE7 /* SDLMyKey.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB0D1A84238A00846EE7 /* SDLMyKey.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D61FCFB1A84238C00846EE7 /* SDLMyKey.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB0E1A84238A00846EE7 /* SDLMyKey.m */; };
- 5D61FCFC1A84238C00846EE7 /* SDLRPCParameterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB0F1A84238A00846EE7 /* SDLRPCParameterNames.h */; settings = {ATTRIBUTES = (Private, ); }; };
+ 5D61FCFC1A84238C00846EE7 /* SDLRPCParameterNames.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB0F1A84238A00846EE7 /* SDLRPCParameterNames.h */; };
5D61FCFD1A84238C00846EE7 /* SDLObjectWithPriority.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB101A84238A00846EE7 /* SDLObjectWithPriority.h */; };
5D61FCFE1A84238C00846EE7 /* SDLObjectWithPriority.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB111A84238A00846EE7 /* SDLObjectWithPriority.m */; };
5D61FCFF1A84238C00846EE7 /* SDLOnAppInterfaceUnregistered.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB121A84238B00846EE7 /* SDLOnAppInterfaceUnregistered.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -808,8 +844,6 @@
5D61FD2E1A84238C00846EE7 /* SDLPermissionItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB411A84238B00846EE7 /* SDLPermissionItem.m */; };
5D61FD2F1A84238C00846EE7 /* SDLPermissionStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB421A84238B00846EE7 /* SDLPermissionStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D61FD301A84238C00846EE7 /* SDLPermissionStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB431A84238B00846EE7 /* SDLPermissionStatus.m */; };
- 5D61FD311A84238C00846EE7 /* SDLPolicyDataParser.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB441A84238B00846EE7 /* SDLPolicyDataParser.h */; };
- 5D61FD321A84238C00846EE7 /* SDLPolicyDataParser.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB451A84238B00846EE7 /* SDLPolicyDataParser.m */; };
5D61FD331A84238C00846EE7 /* SDLPowerModeQualificationStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB461A84238B00846EE7 /* SDLPowerModeQualificationStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D61FD341A84238C00846EE7 /* SDLPowerModeQualificationStatus.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB471A84238B00846EE7 /* SDLPowerModeQualificationStatus.m */; };
5D61FD351A84238C00846EE7 /* SDLPowerModeStatus.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB481A84238B00846EE7 /* SDLPowerModeStatus.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -830,7 +864,7 @@
5D61FD441A84238C00846EE7 /* SDLProtocol.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB571A84238B00846EE7 /* SDLProtocol.m */; };
5D61FD451A84238C00846EE7 /* SDLProtocolHeader.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB581A84238B00846EE7 /* SDLProtocolHeader.h */; };
5D61FD461A84238C00846EE7 /* SDLProtocolHeader.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB591A84238B00846EE7 /* SDLProtocolHeader.m */; };
- 5D61FD471A84238C00846EE7 /* SDLProtocolListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB5A1A84238B00846EE7 /* SDLProtocolListener.h */; };
+ 5D61FD471A84238C00846EE7 /* SDLProtocolDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB5A1A84238B00846EE7 /* SDLProtocolDelegate.h */; };
5D61FD481A84238C00846EE7 /* SDLProtocolMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB5B1A84238B00846EE7 /* SDLProtocolMessage.h */; };
5D61FD491A84238C00846EE7 /* SDLProtocolMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB5C1A84238B00846EE7 /* SDLProtocolMessage.m */; };
5D61FD4A1A84238C00846EE7 /* SDLProtocolMessageAssembler.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB5D1A84238B00846EE7 /* SDLProtocolMessageAssembler.h */; };
@@ -839,9 +873,6 @@
5D61FD4D1A84238C00846EE7 /* SDLProtocolMessageDisassembler.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB601A84238B00846EE7 /* SDLProtocolMessageDisassembler.m */; };
5D61FD4E1A84238C00846EE7 /* SDLProtocolReceivedMessageRouter.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB611A84238B00846EE7 /* SDLProtocolReceivedMessageRouter.h */; };
5D61FD4F1A84238C00846EE7 /* SDLProtocolReceivedMessageRouter.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB621A84238B00846EE7 /* SDLProtocolReceivedMessageRouter.m */; };
- 5D61FD501A84238C00846EE7 /* SDLProxy.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB631A84238B00846EE7 /* SDLProxy.h */; };
- 5D61FD511A84238C00846EE7 /* SDLProxy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB641A84238B00846EE7 /* SDLProxy.m */; };
- 5D61FD541A84238C00846EE7 /* SDLProxyListener.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB671A84238B00846EE7 /* SDLProxyListener.h */; };
5D61FD551A84238C00846EE7 /* SDLPutFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB681A84238B00846EE7 /* SDLPutFile.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D61FD561A84238C00846EE7 /* SDLPutFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D61FB691A84238B00846EE7 /* SDLPutFile.m */; };
5D61FD571A84238C00846EE7 /* SDLPutFileResponse.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D61FB6A1A84238B00846EE7 /* SDLPutFileResponse.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -1062,7 +1093,6 @@
5D82041F1BCD8E6100D0A41B /* SDLConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D82041D1BCD8E6100D0A41B /* SDLConfiguration.m */; };
5D8204221BCEA89A00D0A41B /* SDLFileManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8204201BCEA89A00D0A41B /* SDLFileManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D8204231BCEA89A00D0A41B /* SDLFileManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8204211BCEA89A00D0A41B /* SDLFileManager.m */; };
- 5D8204261BCEA8A600D0A41B /* SDLPermissionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D8204241BCEA8A600D0A41B /* SDLPermissionManager.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D8204271BCEA8A600D0A41B /* SDLPermissionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D8204251BCEA8A600D0A41B /* SDLPermissionManager.m */; };
5D82042D1BCEC32F00D0A41B /* SDLFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 5D82042B1BCEC32F00D0A41B /* SDLFile.h */; settings = {ATTRIBUTES = (Public, ); }; };
5D82042E1BCEC32F00D0A41B /* SDLFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 5D82042C1BCEC32F00D0A41B /* SDLFile.m */; };
@@ -1395,6 +1425,13 @@
888DBAF022D528DE002A0AE2 /* SDLCloseApplicationResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 888DBAEE22D528DE002A0AE2 /* SDLCloseApplicationResponse.m */; };
888F86FE221DEE200052FE4C /* SDLAsynchronousRPCOperation.m in Sources */ = {isa = PBXBuildFile; fileRef = 888F86FD221DEE1F0052FE4C /* SDLAsynchronousRPCOperation.m */; };
888F8700221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 888F86FF221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m */; };
+ 889E7BAF249CEE07002E4BE1 /* SubscribeButtonManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 889E7BAD249CEDCF002E4BE1 /* SubscribeButtonManager.swift */; };
+ 889E7BB2249D0877002E4BE1 /* SubscribeButtonManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 889E7BB1249D0877002E4BE1 /* SubscribeButtonManager.m */; };
+ 88A098AE2476F0C200A50005 /* SDLSubscribeButtonManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A098AC2476F0C200A50005 /* SDLSubscribeButtonManager.h */; };
+ 88A098AF2476F0C200A50005 /* SDLSubscribeButtonManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A098AD2476F0C200A50005 /* SDLSubscribeButtonManager.m */; };
+ 88A098B224770E7100A50005 /* SDLSubscribeButtonObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = 88A098B024770E7100A50005 /* SDLSubscribeButtonObserver.h */; };
+ 88A098B324770E7100A50005 /* SDLSubscribeButtonObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A098B124770E7100A50005 /* SDLSubscribeButtonObserver.m */; };
+ 88A118272412ACAD00B45FB5 /* SDLStreamingMediaManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */; };
88A1CF1E21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */; };
88A4A0FA22242AB400C6F01D /* SDLNavigationServiceDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A4A0F922242AB400C6F01D /* SDLNavigationServiceDataSpec.m */; };
88A5E7F4220B57F900495E8A /* SDLOnSystemCapabilityUpdatedSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88A5E7F3220B57F900495E8A /* SDLOnSystemCapabilityUpdatedSpec.m */; };
@@ -1432,6 +1469,7 @@
88B58DC922204C9E0011B063 /* SDLNavigationActionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B58DC822204C9E0011B063 /* SDLNavigationActionSpec.m */; };
88B848C31F45E1A600DED768 /* TestResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B848C21F45E1A600DED768 /* TestResponse.m */; };
88B848C91F462E3600DED768 /* TestFileProgressResponse.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B848C81F462E3600DED768 /* TestFileProgressResponse.m */; };
+ 88B8657924A102AB003491AD /* TestSubscribeButtonObserver.m in Sources */ = {isa = PBXBuildFile; fileRef = 88B8657624A0FEB7003491AD /* TestSubscribeButtonObserver.m */; };
88BCEA922266250B00BB7E70 /* SDLIAPControlSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 88BCEA902266250B00BB7E70 /* SDLIAPControlSession.h */; };
88BCEA932266250B00BB7E70 /* SDLIAPControlSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 88BCEA912266250B00BB7E70 /* SDLIAPControlSession.m */; };
88BCEA952266592D00BB7E70 /* SDLIAPControlSessionSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88BCEA942266592D00BB7E70 /* SDLIAPControlSessionSpec.m */; };
@@ -1440,6 +1478,8 @@
88C282CA220CD17200D02F90 /* SDLGetFileResponseSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C282C9220CD17200D02F90 /* SDLGetFileResponseSpec.m */; };
88C37F632204EBF000901DC6 /* SDLAppServiceData.h in Headers */ = {isa = PBXBuildFile; fileRef = 88C37F612204EBF000901DC6 /* SDLAppServiceData.h */; settings = {ATTRIBUTES = (Public, ); }; };
88C37F642204EBF000901DC6 /* SDLAppServiceData.m in Sources */ = {isa = PBXBuildFile; fileRef = 88C37F622204EBF000901DC6 /* SDLAppServiceData.m */; };
+ 88D0E5D624786580009469AB /* SDLSubscribeButtonManagerSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D0E5D524786580009469AB /* SDLSubscribeButtonManagerSpec.m */; };
+ 88D0E5D824786770009469AB /* SDLSubscribeButtonObserverSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D0E5D724786770009469AB /* SDLSubscribeButtonObserverSpec.m */; };
88D2AAE41F682BB20078D5B2 /* SDLLogConstantsSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D2AAE31F682BB20078D5B2 /* SDLLogConstantsSpec.m */; };
88D3EBC92267949D00493C38 /* SDLIAPDataSession.h in Headers */ = {isa = PBXBuildFile; fileRef = 88D3EBC72267949D00493C38 /* SDLIAPDataSession.h */; };
88D3EBCA2267949D00493C38 /* SDLIAPDataSession.m in Sources */ = {isa = PBXBuildFile; fileRef = 88D3EBC82267949D00493C38 /* SDLIAPDataSession.m */; };
@@ -1531,6 +1571,10 @@
9FE2471522D77AD500F8D2FC /* SDLWindowType.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE2471322D77AD500F8D2FC /* SDLWindowType.h */; settings = {ATTRIBUTES = (Public, ); }; };
9FE2471622D77AD500F8D2FC /* SDLWindowType.m in Sources */ = {isa = PBXBuildFile; fileRef = 9FE2471422D77AD500F8D2FC /* SDLWindowType.m */; };
9FE2471922D77AED00F8D2FC /* SDLPredefinedWindows.h in Headers */ = {isa = PBXBuildFile; fileRef = 9FE2471722D77AED00F8D2FC /* SDLPredefinedWindows.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B38D8E61249FE28500B977D0 /* SDLCapacityUnit.h in Headers */ = {isa = PBXBuildFile; fileRef = B38D8E5F249FE28500B977D0 /* SDLCapacityUnit.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ B38D8E62249FE28500B977D0 /* SDLCapacityUnit.m in Sources */ = {isa = PBXBuildFile; fileRef = B38D8E60249FE28500B977D0 /* SDLCapacityUnit.m */; };
+ B38D8E8224A1F53500B977D0 /* SDLCapacityUnitSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = B38D8E8124A1F53500B977D0 /* SDLCapacityUnitSpec.m */; };
+ B3F7918324E062C200DB5CAF /* SDLGetVehicleDataSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = 162E824C1A9BDE8A00906325 /* SDLGetVehicleDataSpec.m */; };
DA0C46AD1DCD35080001F2A8 /* SDLRPCParameterNames.m in Sources */ = {isa = PBXBuildFile; fileRef = DA0C46AC1DCD35080001F2A8 /* SDLRPCParameterNames.m */; };
DA0C46AF1DCD41E30001F2A8 /* SDLMacros.h in Headers */ = {isa = PBXBuildFile; fileRef = DA0C46AE1DCD41E30001F2A8 /* SDLMacros.h */; settings = {ATTRIBUTES = (Public, ); }; };
DA318C1F1DD0F06C00C035AC /* NSMutableDictionary+Store.h in Headers */ = {isa = PBXBuildFile; fileRef = DA318C1D1DD0F06C00C035AC /* NSMutableDictionary+Store.h */; };
@@ -1606,7 +1650,6 @@
E9C32B9E1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h in Headers */ = {isa = PBXBuildFile; fileRef = E9C32B9A1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h */; };
E9C32B9F1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m in Sources */ = {isa = PBXBuildFile; fileRef = E9C32B9B1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m */; };
EE28F9E3209802A500B1B61D /* SDLStreamingProtocolDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = EE6CBF872064CAEE00EEE0CA /* SDLStreamingProtocolDelegate.h */; };
- EE38C0C3211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */; };
EE460E082066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */; };
EE460E0A2066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */; };
EE5D1B33208EBCA900D17216 /* SDLTCPTransportSpec.m in Sources */ = {isa = PBXBuildFile; fileRef = EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */; };
@@ -1744,6 +1787,17 @@
00E22CEB22C2F1B300BC6B08 /* SDLEncryptionConfiguration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLEncryptionConfiguration.h; sourceTree = "<group>"; };
00EADD3222DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEncryptionLifecycleManagerSpec.m; sourceTree = "<group>"; };
00EADD3422DFE5670088B608 /* SDLEncryptionConfigurationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLEncryptionConfigurationSpec.m; sourceTree = "<group>"; };
+ 106187B824AA75540045C4EC /* SDLRPCPermissionStatusSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLRPCPermissionStatusSpec.m; sourceTree = "<group>"; };
+ 106412C4249FB80B0069A97A /* SDLPermissionElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLPermissionElement.h; sourceTree = "<group>"; };
+ 106412C5249FB80B0069A97A /* SDLPermissionElement.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLPermissionElement.m; sourceTree = "<group>"; };
+ 106982A824AA3B4700B1F649 /* SDLRPCPermissionStatus.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLRPCPermissionStatus.h; sourceTree = "<group>"; };
+ 106982A924AA3B4700B1F649 /* SDLRPCPermissionStatus.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLRPCPermissionStatus.m; sourceTree = "<group>"; };
+ 10893C142417D78300BA347E /* SDLIconArchiveFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLIconArchiveFile.h; sourceTree = "<group>"; };
+ 10893C152417D78300BA347E /* SDLIconArchiveFile.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLIconArchiveFile.m; sourceTree = "<group>"; };
+ 10893C182418188600BA347E /* SDLCacheFileManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLCacheFileManager.h; sourceTree = "<group>"; };
+ 10893C192418188600BA347E /* SDLCacheFileManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCacheFileManager.m; sourceTree = "<group>"; };
+ 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCacheFileManagerSpec.m; sourceTree = "<group>"; };
+ 1098F03724A39699004F53CC /* SDLPermissionElementSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLPermissionElementSpec.m; sourceTree = "<group>"; };
162E81E21A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAmbientLightStatusSpec.m; sourceTree = "<group>"; };
162E81E31A9BDE8A00906325 /* SDLAppHMITypeSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppHMITypeSpec.m; sourceTree = "<group>"; };
162E81E41A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppInterfaceUnregisteredReasonSpec.m; sourceTree = "<group>"; };
@@ -2110,13 +2164,40 @@
1FF7DAB91F75B2A800B46C30 /* SDLFocusableItemLocator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLFocusableItemLocator.h; sourceTree = "<group>"; };
1FF7DABB1F75B2BF00B46C30 /* SDLFocusableItemLocator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLFocusableItemLocator.m; sourceTree = "<group>"; };
1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLHapticManagerSpec.m; path = ProxySpecs/SDLHapticManagerSpec.m; sourceTree = "<group>"; };
- 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDLWindowCapability+ShowManagerExtensions.h"; sourceTree = "<group>"; };
- 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDLWindowCapability+ShowManagerExtensions.m"; sourceTree = "<group>"; };
+ 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDLWindowCapability+ScreenManagerExtensions.h"; sourceTree = "<group>"; };
+ 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDLWindowCapability+ScreenManagerExtensions.m"; sourceTree = "<group>"; };
2BF2F84D20ED004000A26EF2 /* SDLAudioStreamingIndicator.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLAudioStreamingIndicator.h; sourceTree = "<group>"; };
2BF2F84E20ED004000A26EF2 /* SDLAudioStreamingIndicator.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioStreamingIndicator.m; sourceTree = "<group>"; };
2BF2F85120ED068200A26EF2 /* SDLAudioStreamingIndicatorSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAudioStreamingIndicatorSpec.m; sourceTree = "<group>"; };
332A913C1CED87F80043824C /* SDLAppInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLAppInfo.h; sourceTree = "<group>"; };
332A913D1CED87F80043824C /* SDLAppInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAppInfo.m; sourceTree = "<group>"; };
+ 4A1B036A24CF43CD008C6B13 /* SDLDriverDistractionCapability.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLDriverDistractionCapability.m; sourceTree = "<group>"; };
+ 4A1B036B24CF43CD008C6B13 /* SDLDriverDistractionCapability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLDriverDistractionCapability.h; sourceTree = "<group>"; };
+ 4A1B036E24CF484E008C6B13 /* SDLDriverDistractionCapabilitySpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLDriverDistractionCapabilitySpec.m; sourceTree = "<group>"; };
+ 4A26370B2493F0CE00278BE3 /* SDLRPCMessageType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLRPCMessageType.m; sourceTree = "<group>"; };
+ 4A3BA4DA248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleSystemRequestHandler.h; sourceTree = "<group>"; };
+ 4A3BA4DB248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleSystemRequestHandler.m; sourceTree = "<group>"; };
+ 4A3BA4DF248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleSyncPDataHandler.h; sourceTree = "<group>"; };
+ 4A3BA4E0248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleSyncPDataHandler.m; sourceTree = "<group>"; };
+ 4A3BA4E524901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleMobileHMIStateHandler.h; sourceTree = "<group>"; };
+ 4A3BA4E624901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleMobileHMIStateHandler.m; sourceTree = "<group>"; };
+ 4A3BA4EA24914801003E56B8 /* SDLLifecycleProtocolHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleProtocolHandler.h; sourceTree = "<group>"; };
+ 4A3BA4EB24914801003E56B8 /* SDLLifecycleProtocolHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleProtocolHandler.m; sourceTree = "<group>"; };
+ 4A457DC224A2933E00386CBA /* SDLLifecycleRPCAdapterSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleRPCAdapterSpec.m; path = DevAPISpecs/SDLLifecycleRPCAdapterSpec.m; sourceTree = "<group>"; };
+ 4A457DD224A3886700386CBA /* SDLLifecycleSyncPDataHandlerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleSyncPDataHandlerSpec.m; path = DevAPISpecs/SDLLifecycleSyncPDataHandlerSpec.m; sourceTree = "<group>"; };
+ 4A457DD424A3C16E00386CBA /* SDLLifecycleMobileHMIStateHandlerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleMobileHMIStateHandlerSpec.m; path = DevAPISpecs/SDLLifecycleMobileHMIStateHandlerSpec.m; sourceTree = "<group>"; };
+ 4A457DD624A3CCED00386CBA /* SDLLifecycleSystemRequestHandlerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleSystemRequestHandlerSpec.m; path = DevAPISpecs/SDLLifecycleSystemRequestHandlerSpec.m; sourceTree = "<group>"; };
+ 4A457DD824A5137100386CBA /* SDLLifecycleProtocolHandlerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLLifecycleProtocolHandlerSpec.m; path = DevAPISpecs/SDLLifecycleProtocolHandlerSpec.m; sourceTree = "<group>"; };
+ 4A4AD8A224894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TestOldConfigurationUpdateManagerDelegate.h; path = DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.h; sourceTree = "<group>"; };
+ 4A4AD8A324894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestOldConfigurationUpdateManagerDelegate.m; path = DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.m; sourceTree = "<group>"; };
+ 4A4AD8A524894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TestNewConfigurationUpdateManagerDelegate.h; sourceTree = "<group>"; };
+ 4A4AD8A624894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TestNewConfigurationUpdateManagerDelegate.m; sourceTree = "<group>"; };
+ 4A99D00C247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDLTextField+ScreenManagerExtensions.h"; sourceTree = "<group>"; };
+ 4A99D00D247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDLTextField+ScreenManagerExtensions.m"; sourceTree = "<group>"; };
+ 4A99D0102475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SDLImageField+ScreenManagerExtensions.h"; sourceTree = "<group>"; };
+ 4A99D0112475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = "SDLImageField+ScreenManagerExtensions.m"; sourceTree = "<group>"; };
+ 4A9D02BC2497EED400FBE99B /* SDLLifecycleRPCAdapter.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLLifecycleRPCAdapter.h; sourceTree = "<group>"; };
+ 4A9D02BD2497EED400FBE99B /* SDLLifecycleRPCAdapter.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleRPCAdapter.m; sourceTree = "<group>"; };
5D00AC651F140F0A004000D9 /* SDLSystemCapabilityType.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSystemCapabilityType.h; sourceTree = "<group>"; };
5D00AC661F140F0A004000D9 /* SDLSystemCapabilityType.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLSystemCapabilityType.m; sourceTree = "<group>"; };
5D00AC691F141339004000D9 /* SDLSystemCapability.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLSystemCapability.h; sourceTree = "<group>"; };
@@ -2554,8 +2635,6 @@
5D61FB411A84238B00846EE7 /* SDLPermissionItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPermissionItem.m; sourceTree = "<group>"; };
5D61FB421A84238B00846EE7 /* SDLPermissionStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPermissionStatus.h; sourceTree = "<group>"; };
5D61FB431A84238B00846EE7 /* SDLPermissionStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPermissionStatus.m; sourceTree = "<group>"; };
- 5D61FB441A84238B00846EE7 /* SDLPolicyDataParser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPolicyDataParser.h; sourceTree = "<group>"; };
- 5D61FB451A84238B00846EE7 /* SDLPolicyDataParser.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPolicyDataParser.m; sourceTree = "<group>"; };
5D61FB461A84238B00846EE7 /* SDLPowerModeQualificationStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPowerModeQualificationStatus.h; sourceTree = "<group>"; };
5D61FB471A84238B00846EE7 /* SDLPowerModeQualificationStatus.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPowerModeQualificationStatus.m; sourceTree = "<group>"; };
5D61FB481A84238B00846EE7 /* SDLPowerModeStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPowerModeStatus.h; sourceTree = "<group>"; };
@@ -2576,7 +2655,7 @@
5D61FB571A84238B00846EE7 /* SDLProtocol.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProtocol.m; sourceTree = "<group>"; };
5D61FB581A84238B00846EE7 /* SDLProtocolHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolHeader.h; sourceTree = "<group>"; };
5D61FB591A84238B00846EE7 /* SDLProtocolHeader.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProtocolHeader.m; sourceTree = "<group>"; };
- 5D61FB5A1A84238B00846EE7 /* SDLProtocolListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolListener.h; sourceTree = "<group>"; };
+ 5D61FB5A1A84238B00846EE7 /* SDLProtocolDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolDelegate.h; sourceTree = "<group>"; };
5D61FB5B1A84238B00846EE7 /* SDLProtocolMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolMessage.h; sourceTree = "<group>"; };
5D61FB5C1A84238B00846EE7 /* SDLProtocolMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProtocolMessage.m; sourceTree = "<group>"; };
5D61FB5D1A84238B00846EE7 /* SDLProtocolMessageAssembler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolMessageAssembler.h; sourceTree = "<group>"; };
@@ -2585,9 +2664,6 @@
5D61FB601A84238B00846EE7 /* SDLProtocolMessageDisassembler.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProtocolMessageDisassembler.m; sourceTree = "<group>"; };
5D61FB611A84238B00846EE7 /* SDLProtocolReceivedMessageRouter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProtocolReceivedMessageRouter.h; sourceTree = "<group>"; };
5D61FB621A84238B00846EE7 /* SDLProtocolReceivedMessageRouter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProtocolReceivedMessageRouter.m; sourceTree = "<group>"; };
- 5D61FB631A84238B00846EE7 /* SDLProxy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProxy.h; sourceTree = "<group>"; };
- 5D61FB641A84238B00846EE7 /* SDLProxy.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLProxy.m; sourceTree = "<group>"; };
- 5D61FB671A84238B00846EE7 /* SDLProxyListener.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLProxyListener.h; sourceTree = "<group>"; };
5D61FB681A84238B00846EE7 /* SDLPutFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPutFile.h; sourceTree = "<group>"; };
5D61FB691A84238B00846EE7 /* SDLPutFile.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLPutFile.m; sourceTree = "<group>"; };
5D61FB6A1A84238B00846EE7 /* SDLPutFileResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLPutFileResponse.h; sourceTree = "<group>"; };
@@ -3134,6 +3210,13 @@
888DBAEE22D528DE002A0AE2 /* SDLCloseApplicationResponse.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCloseApplicationResponse.m; sourceTree = "<group>"; };
888F86FD221DEE1F0052FE4C /* SDLAsynchronousRPCOperation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLAsynchronousRPCOperation.m; sourceTree = "<group>"; };
888F86FF221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAsynchronousRPCOperationSpec.m; sourceTree = "<group>"; };
+ 889E7BAD249CEDCF002E4BE1 /* SubscribeButtonManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeButtonManager.swift; sourceTree = "<group>"; };
+ 889E7BB0249D0877002E4BE1 /* SubscribeButtonManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SubscribeButtonManager.h; sourceTree = "<group>"; };
+ 889E7BB1249D0877002E4BE1 /* SubscribeButtonManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SubscribeButtonManager.m; sourceTree = "<group>"; };
+ 88A098AC2476F0C200A50005 /* SDLSubscribeButtonManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSubscribeButtonManager.h; sourceTree = "<group>"; };
+ 88A098AD2476F0C200A50005 /* SDLSubscribeButtonManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSubscribeButtonManager.m; sourceTree = "<group>"; };
+ 88A098B024770E7100A50005 /* SDLSubscribeButtonObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSubscribeButtonObserver.h; sourceTree = "<group>"; };
+ 88A098B124770E7100A50005 /* SDLSubscribeButtonObserver.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSubscribeButtonObserver.m; sourceTree = "<group>"; };
88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLLifecycleConfigurationUpdateSpec.m; sourceTree = "<group>"; };
88A4A0F922242AB400C6F01D /* SDLNavigationServiceDataSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLNavigationServiceDataSpec.m; sourceTree = "<group>"; };
88A5E7F3220B57F900495E8A /* SDLOnSystemCapabilityUpdatedSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLOnSystemCapabilityUpdatedSpec.m; sourceTree = "<group>"; };
@@ -3173,6 +3256,8 @@
88B848C21F45E1A600DED768 /* TestResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestResponse.m; sourceTree = "<group>"; };
88B848C71F462E3600DED768 /* TestFileProgressResponse.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFileProgressResponse.h; sourceTree = "<group>"; };
88B848C81F462E3600DED768 /* TestFileProgressResponse.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = TestFileProgressResponse.m; sourceTree = "<group>"; };
+ 88B8657524A0FEB7003491AD /* TestSubscribeButtonObserver.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = TestSubscribeButtonObserver.h; path = ../SmartDeviceLink/TestSubscribeButtonObserver.h; sourceTree = "<group>"; };
+ 88B8657624A0FEB7003491AD /* TestSubscribeButtonObserver.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = TestSubscribeButtonObserver.m; path = ../SmartDeviceLink/TestSubscribeButtonObserver.m; sourceTree = "<group>"; };
88BCEA902266250B00BB7E70 /* SDLIAPControlSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLIAPControlSession.h; sourceTree = "<group>"; };
88BCEA912266250B00BB7E70 /* SDLIAPControlSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLIAPControlSession.m; sourceTree = "<group>"; };
88BCEA942266592D00BB7E70 /* SDLIAPControlSessionSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLIAPControlSessionSpec.m; sourceTree = "<group>"; };
@@ -3182,6 +3267,8 @@
88C282C9220CD17200D02F90 /* SDLGetFileResponseSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLGetFileResponseSpec.m; sourceTree = "<group>"; };
88C37F612204EBF000901DC6 /* SDLAppServiceData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLAppServiceData.h; sourceTree = "<group>"; };
88C37F622204EBF000901DC6 /* SDLAppServiceData.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLAppServiceData.m; sourceTree = "<group>"; };
+ 88D0E5D524786580009469AB /* SDLSubscribeButtonManagerSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSubscribeButtonManagerSpec.m; sourceTree = "<group>"; };
+ 88D0E5D724786770009469AB /* SDLSubscribeButtonObserverSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSubscribeButtonObserverSpec.m; sourceTree = "<group>"; };
88D2AAE31F682BB20078D5B2 /* SDLLogConstantsSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLLogConstantsSpec.m; sourceTree = "<group>"; };
88D3EBC72267949D00493C38 /* SDLIAPDataSession.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLIAPDataSession.h; sourceTree = "<group>"; };
88D3EBC82267949D00493C38 /* SDLIAPDataSession.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLIAPDataSession.m; sourceTree = "<group>"; };
@@ -3275,6 +3362,9 @@
9FE2471322D77AD500F8D2FC /* SDLWindowType.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLWindowType.h; sourceTree = "<group>"; };
9FE2471422D77AD500F8D2FC /* SDLWindowType.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLWindowType.m; sourceTree = "<group>"; };
9FE2471722D77AED00F8D2FC /* SDLPredefinedWindows.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLPredefinedWindows.h; sourceTree = "<group>"; };
+ B38D8E5F249FE28500B977D0 /* SDLCapacityUnit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLCapacityUnit.h; sourceTree = "<group>"; };
+ B38D8E60249FE28500B977D0 /* SDLCapacityUnit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLCapacityUnit.m; sourceTree = "<group>"; };
+ B38D8E8124A1F53500B977D0 /* SDLCapacityUnitSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLCapacityUnitSpec.m; sourceTree = "<group>"; };
BB3C600D221AEF37007DD4CA /* NSMutableDictionary+StoreSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = "NSMutableDictionary+StoreSpec.m"; path = "DevAPISpecs/NSMutableDictionary+StoreSpec.m"; sourceTree = "<group>"; };
DA0C46AC1DCD35080001F2A8 /* SDLRPCParameterNames.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SDLRPCParameterNames.m; sourceTree = "<group>"; };
DA0C46AE1DCD41E30001F2A8 /* SDLMacros.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SDLMacros.h; sourceTree = "<group>"; };
@@ -3352,8 +3442,6 @@
E9C32B991AB20C5900F283AF /* EAAccessory+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessory+SDLProtocols.m"; sourceTree = "<group>"; };
E9C32B9A1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "EAAccessoryManager+SDLProtocols.h"; sourceTree = "<group>"; };
E9C32B9B1AB20C5900F283AF /* EAAccessoryManager+SDLProtocols.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "EAAccessoryManager+SDLProtocols.m"; sourceTree = "<group>"; };
- EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLSecondaryTransportPrimaryProtocolHandler.h; sourceTree = "<group>"; };
- EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLSecondaryTransportPrimaryProtocolHandler.m; sourceTree = "<group>"; };
EE460E072066B5F20006EDD3 /* SDLControlFramePayloadTransportEventUpdateSpec.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadTransportEventUpdateSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadTransportEventUpdateSpec.m; sourceTree = "<group>"; };
EE460E092066B6E40006EDD3 /* SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; name = SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; path = ControlFramePayloadSpecs/SDLControlFramePayloadRegisterSecondaryTransportNakSpec.m; sourceTree = "<group>"; };
EE5D1B32208EBCA900D17216 /* SDLTCPTransportSpec.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SDLTCPTransportSpec.m; sourceTree = "<group>"; };
@@ -3455,6 +3543,7 @@
00E22CE922C2F1A400BC6B08 /* Configuration */,
001A08B22321ACE90078A31E /* Delegates */,
005DF3BE22C590FB006E01A9 /* Lifecycle */,
+ 5D6CC8ED1C610E490027F60A /* Security */,
005DF3C722C62DDA006E01A9 /* Utilities */,
);
name = Encryption;
@@ -3477,6 +3566,25 @@
name = Encryption;
sourceTree = "<group>";
};
+ 10415106241BBB8B00F163CC /* Lock Screen Icon Cache */ = {
+ isa = PBXGroup;
+ children = (
+ 10893C142417D78300BA347E /* SDLIconArchiveFile.h */,
+ 10893C152417D78300BA347E /* SDLIconArchiveFile.m */,
+ 10893C182418188600BA347E /* SDLCacheFileManager.h */,
+ 10893C192418188600BA347E /* SDLCacheFileManager.m */,
+ );
+ name = "Lock Screen Icon Cache";
+ sourceTree = "<group>";
+ };
+ 109566F42429865500E24F66 /* Lock Screen Icon Cache */ = {
+ isa = PBXGroup;
+ children = (
+ 109566F5242986F300E24F66 /* SDLCacheFileManagerSpec.m */,
+ );
+ name = "Lock Screen Icon Cache";
+ sourceTree = "<group>";
+ };
162E81E01A9BDE8A00906325 /* RPCSpecs */ = {
isa = PBXGroup;
children = (
@@ -3505,6 +3613,7 @@
162E81E81A9BDE8A00906325 /* SDLButtonEventModeSpec.m */,
162E81E91A9BDE8A00906325 /* SDLButtonNameSpec.m */,
162E81EA1A9BDE8A00906325 /* SDLButtonPressModeSpec.m */,
+ B38D8E8124A1F53500B977D0 /* SDLCapacityUnitSpec.m */,
162E81EB1A9BDE8A00906325 /* SDLCarModeStatusSpec.m */,
162E81EC1A9BDE8A00906325 /* SDLCharacterSetSpec.m */,
162E81ED1A9BDE8A00906325 /* SDLCompassDirectionSpec.m */,
@@ -3807,6 +3916,7 @@
162E82981A9BDE8A00906325 /* SDLDIDResult.m */,
9FA0D00522DF06D3009CF344 /* SDLDisplayCapabilitySpec.m */,
162E82991A9BDE8A00906325 /* SDLDisplayCapabilitiesSpec.m */,
+ 4A1B036E24CF484E008C6B13 /* SDLDriverDistractionCapabilitySpec.m */,
162E829A1A9BDE8A00906325 /* SDLECallInfoSpec.m */,
162E829B1A9BDE8A00906325 /* SDLEmergencyEventSpec.m */,
88B3BFA120DA911E00943565 /* SDLFuelRangeSpec.m */,
@@ -3950,6 +4060,81 @@
path = MessageSpecs;
sourceTree = "<group>";
};
+ 4A3BA4D9248E8EBB003E56B8 /* SystemRequest Handler */ = {
+ isa = PBXGroup;
+ children = (
+ 4A3BA4DA248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.h */,
+ 4A3BA4DB248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.m */,
+ );
+ name = "SystemRequest Handler";
+ sourceTree = "<group>";
+ };
+ 4A3BA4DE248EB117003E56B8 /* SyncPData Handler */ = {
+ isa = PBXGroup;
+ children = (
+ 4A3BA4DF248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.h */,
+ 4A3BA4E0248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.m */,
+ );
+ name = "SyncPData Handler";
+ sourceTree = "<group>";
+ };
+ 4A3BA4E324900962003E56B8 /* Custom RPC Handlers */ = {
+ isa = PBXGroup;
+ children = (
+ 4A3BA4E42490177A003E56B8 /* Mobile HMI State Handler */,
+ 4A3BA4DE248EB117003E56B8 /* SyncPData Handler */,
+ 4A3BA4D9248E8EBB003E56B8 /* SystemRequest Handler */,
+ );
+ name = "Custom RPC Handlers";
+ sourceTree = "<group>";
+ };
+ 4A3BA4E42490177A003E56B8 /* Mobile HMI State Handler */ = {
+ isa = PBXGroup;
+ children = (
+ 4A3BA4E524901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.h */,
+ 4A3BA4E624901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.m */,
+ );
+ name = "Mobile HMI State Handler";
+ sourceTree = "<group>";
+ };
+ 4A3BA4E9249147E6003E56B8 /* Protocol Delegate Handler */ = {
+ isa = PBXGroup;
+ children = (
+ 4A3BA4EA24914801003E56B8 /* SDLLifecycleProtocolHandler.h */,
+ 4A3BA4EB24914801003E56B8 /* SDLLifecycleProtocolHandler.m */,
+ );
+ name = "Protocol Delegate Handler";
+ sourceTree = "<group>";
+ };
+ 4A4AD8A12489422F008FC414 /* Utilities */ = {
+ isa = PBXGroup;
+ children = (
+ 4A4AD8A224894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.h */,
+ 4A4AD8A324894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.m */,
+ 4A4AD8A524894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.h */,
+ 4A4AD8A624894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.m */,
+ );
+ name = Utilities;
+ sourceTree = "<group>";
+ };
+ 4A9D02BB2497EEB400FBE99B /* Custom RPC Adapters */ = {
+ isa = PBXGroup;
+ children = (
+ 4A9D02BC2497EED400FBE99B /* SDLLifecycleRPCAdapter.h */,
+ 4A9D02BD2497EED400FBE99B /* SDLLifecycleRPCAdapter.m */,
+ );
+ name = "Custom RPC Adapters";
+ sourceTree = "<group>";
+ };
+ 4A9D02C02497F9AA00FBE99B /* Status Manager */ = {
+ isa = PBXGroup;
+ children = (
+ 5D61FB031A84238A00846EE7 /* SDLLockScreenStatusManager.h */,
+ 5D61FB041A84238A00846EE7 /* SDLLockScreenStatusManager.m */,
+ );
+ name = "Status Manager";
+ sourceTree = "<group>";
+ };
5D0218EB1A8E795700D1BF62 /* UI */ = {
isa = PBXGroup;
children = (
@@ -3993,7 +4178,9 @@
5D92935720B33D3C00FCC775 /* Choice Set */,
5D339CE5207C0651000CC364 /* Menu */,
5D0A737F203F23D10001595D /* Soft Button */,
+ 88A098AB2476F08F00A50005 /* Subscribe Button */,
5D0A737D203F23B30001595D /* Text and Graphic */,
+ 5D1BF6AA2047429C00D36881 /* Utilities */,
5DAD5F7D204DEDEB0025624C /* SDLScreenManager.h */,
5DAD5F7E204DEDEB0025624C /* SDLScreenManager.m */,
);
@@ -4032,7 +4219,6 @@
5D0A737D203F23B30001595D /* Text and Graphic */ = {
isa = PBXGroup;
children = (
- 5D1BF6AA2047429C00D36881 /* Utilities */,
5D0A7372203F0C730001595D /* SDLTextAndGraphicManager.h */,
5D0A7373203F0C730001595D /* SDLTextAndGraphicManager.m */,
);
@@ -4053,11 +4239,17 @@
5D1654541D3E753100554D93 /* Lifecycle */ = {
isa = PBXGroup;
children = (
+ 4A4AD8A12489422F008FC414 /* Utilities */,
5D1654551D3E754F00554D93 /* SDLLifecycleManagerSpec.m */,
888F86FF221DF4880052FE4C /* SDLAsynchronousRPCOperationSpec.m */,
5D60DF23202B7A80001EDA01 /* SDLAsynchronousRPCRequestOperationSpec.m */,
5D60DF25202B7A97001EDA01 /* SDLSequentialRPCRequestOperationSpec.m */,
88A1CF1D21669AC7001ACC75 /* SDLLifecycleConfigurationUpdateSpec.m */,
+ 4A457DC224A2933E00386CBA /* SDLLifecycleRPCAdapterSpec.m */,
+ 4A457DD224A3886700386CBA /* SDLLifecycleSyncPDataHandlerSpec.m */,
+ 4A457DD424A3C16E00386CBA /* SDLLifecycleMobileHMIStateHandlerSpec.m */,
+ 4A457DD624A3CCED00386CBA /* SDLLifecycleSystemRequestHandlerSpec.m */,
+ 4A457DD824A5137100386CBA /* SDLLifecycleProtocolHandlerSpec.m */,
);
name = Lifecycle;
sourceTree = "<group>";
@@ -4065,8 +4257,11 @@
5D1654571D3E79CA00554D93 /* Lifecycle */ = {
isa = PBXGroup;
children = (
- 5D07C0342044AD1900D1ECDC /* Request Operations */,
5D0A7378203F0CB10001595D /* Configuration */,
+ 4A9D02BB2497EEB400FBE99B /* Custom RPC Adapters */,
+ 4A3BA4E324900962003E56B8 /* Custom RPC Handlers */,
+ 4A3BA4E9249147E6003E56B8 /* Protocol Delegate Handler */,
+ 5D07C0342044AD1900D1ECDC /* Request Operations */,
5D1654581D3E7A1600554D93 /* SDLLifecycleManager.h */,
5D1654591D3E7A1600554D93 /* SDLLifecycleManager.m */,
);
@@ -4076,8 +4271,12 @@
5D1BF6AA2047429C00D36881 /* Utilities */ = {
isa = PBXGroup;
children = (
- 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.h */,
- 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.m */,
+ 4A99D0102475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.h */,
+ 4A99D0112475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.m */,
+ 4A99D00C247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.h */,
+ 4A99D00D247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.m */,
+ 2B23352E232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.h */,
+ 2B23352F232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.m */,
);
name = Utilities;
sourceTree = "<group>";
@@ -4310,6 +4509,8 @@
5D1FF29621304514000EB9B4 /* ProxyManager.m */,
5D1FF29821304514000EB9B4 /* RPCPermissionsManager.h */,
5D1FF29221304513000EB9B4 /* RPCPermissionsManager.m */,
+ 889E7BB0249D0877002E4BE1 /* SubscribeButtonManager.h */,
+ 889E7BB1249D0877002E4BE1 /* SubscribeButtonManager.m */,
5D1FF29021304513000EB9B4 /* VehicleDataManager.h */,
5D1FF29921304514000EB9B4 /* VehicleDataManager.m */,
);
@@ -4327,22 +4528,6 @@
name = Transition;
sourceTree = "<group>";
};
- 5D5934ED1A85160400687FB9 /* Proxy */ = {
- isa = PBXGroup;
- children = (
- EE798CA2205611DC008EDE8E /* Secondary Transport */,
- 5D6CC8ED1C610E490027F60A /* Security */,
- 5D5934FE1A851B2500687FB9 /* @protocols */,
- 5D61FB031A84238A00846EE7 /* SDLLockScreenStatusManager.h */,
- 5D61FB041A84238A00846EE7 /* SDLLockScreenStatusManager.m */,
- 5D61FB441A84238B00846EE7 /* SDLPolicyDataParser.h */,
- 5D61FB451A84238B00846EE7 /* SDLPolicyDataParser.m */,
- 5D61FB631A84238B00846EE7 /* SDLProxy.h */,
- 5D61FB641A84238B00846EE7 /* SDLProxy.m */,
- );
- name = Proxy;
- sourceTree = "<group>";
- };
5D5934EE1A85160900687FB9 /* Protocol */ = {
isa = PBXGroup;
children = (
@@ -4370,12 +4555,12 @@
isa = PBXGroup;
children = (
5D5934FF1A851B8400687FB9 /* Superclasses */,
+ 5D5934F41A85165E00687FB9 /* Enums */,
+ 5D5934F81A8519C300687FB9 /* Notification */,
5D5935041A851E1A00687FB9 /* Payload */,
5D5934F11A85162800687FB9 /* Requests */,
5D5934F21A85163200687FB9 /* Responses */,
5D5934F31A85164500687FB9 /* Structs */,
- 5D5934F41A85165E00687FB9 /* Enums */,
- 5D5934F81A8519C300687FB9 /* Notification */,
);
name = RPCs;
sourceTree = "<group>";
@@ -4383,9 +4568,10 @@
5D5934F01A85161A00687FB9 /* Transport */ = {
isa = PBXGroup;
children = (
- 5DAB5F592098E8CB00A020C8 /* TCP */,
- 5DAB5F582098E8BC00A020C8 /* IAP */,
5D5935001A851D0B00687FB9 /* @protocols */,
+ 5DAB5F582098E8BC00A020C8 /* IAP */,
+ 5DAB5F592098E8CB00A020C8 /* TCP */,
+ EE798CA2205611DC008EDE8E /* Secondary Transport */,
);
name = Transport;
sourceTree = "<group>";
@@ -4709,6 +4895,8 @@
9F425AD922DD983500BE3245 /* SDLDisplayCapability.m */,
5D61FAA31A84238A00846EE7 /* SDLDisplayCapabilities.h */,
5D61FAA41A84238A00846EE7 /* SDLDisplayCapabilities.m */,
+ 4A1B036B24CF43CD008C6B13 /* SDLDriverDistractionCapability.h */,
+ 4A1B036A24CF43CD008C6B13 /* SDLDriverDistractionCapability.m */,
5D61FAAB1A84238A00846EE7 /* SDLECallInfo.h */,
5D61FAAC1A84238A00846EE7 /* SDLECallInfo.m */,
5D61FAAD1A84238A00846EE7 /* SDLEmergencyEvent.h */,
@@ -4902,6 +5090,8 @@
5D61FA691A84238A00846EE7 /* SDLButtonName.m */,
5D61FA6A1A84238A00846EE7 /* SDLButtonPressMode.h */,
5D61FA6B1A84238A00846EE7 /* SDLButtonPressMode.m */,
+ B38D8E5F249FE28500B977D0 /* SDLCapacityUnit.h */,
+ B38D8E60249FE28500B977D0 /* SDLCapacityUnit.m */,
5D61FA6C1A84238A00846EE7 /* SDLCarModeStatus.h */,
5D61FA6D1A84238A00846EE7 /* SDLCarModeStatus.m */,
5D61FA721A84238A00846EE7 /* SDLCharacterSet.h */,
@@ -5020,6 +5210,7 @@
5D61FB7A1A84238B00846EE7 /* SDLResult.h */,
5D61FB7B1A84238B00846EE7 /* SDLResult.m */,
5D61FB7E1A84238B00846EE7 /* SDLRPCMessageType.h */,
+ 4A26370B2493F0CE00278BE3 /* SDLRPCMessageType.m */,
5D61FB8A1A84238B00846EE7 /* SDLSamplingRate.h */,
5D61FB8B1A84238B00846EE7 /* SDLSamplingRate.m */,
1EB59CB1202D9B5F00343A61 /* SDLSeatMemoryActionType.h */,
@@ -5133,6 +5324,7 @@
E9C32B8E1AB20BA200F283AF /* SDLTimer.h */,
E9C32B8F1AB20BA200F283AF /* SDLTimer.m */,
DA0C46AE1DCD41E30001F2A8 /* SDLMacros.h */,
+ 10415106241BBB8B00F163CC /* Lock Screen Icon Cache */,
);
name = Utilities;
sourceTree = "<group>";
@@ -5204,15 +5396,7 @@
5D5934FA1A851AC900687FB9 /* @protocols */ = {
isa = PBXGroup;
children = (
- 5D61FB5A1A84238B00846EE7 /* SDLProtocolListener.h */,
- );
- name = "@protocols";
- sourceTree = "<group>";
- };
- 5D5934FE1A851B2500687FB9 /* @protocols */ = {
- isa = PBXGroup;
- children = (
- 5D61FB671A84238B00846EE7 /* SDLProxyListener.h */,
+ 5D61FB5A1A84238B00846EE7 /* SDLProtocolDelegate.h */,
);
name = "@protocols";
sourceTree = "<group>";
@@ -5281,17 +5465,6 @@
name = Payload;
sourceTree = "<group>";
};
- 5D59DD451B14FDD000BE744D /* ProxySpecs */ = {
- isa = PBXGroup;
- children = (
- 1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */,
- 5D59DD461B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m */,
- DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */,
- EEB2537D2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m */,
- );
- name = ProxySpecs;
- sourceTree = "<group>";
- };
5D6008871BE3ED470094A505 /* State Machine */ = {
isa = PBXGroup;
children = (
@@ -5331,10 +5504,9 @@
5DA3F3511BC4477B0026F2D0 /* Developer API */,
5D5934F61A85189500687FB9 /* Utilities */,
5D5934F51A8516C800687FB9 /* Logging */,
- 5D5934F01A85161A00687FB9 /* Transport */,
5D5934EF1A85160F00687FB9 /* RPCs */,
5D5934EE1A85160900687FB9 /* Protocol */,
- 5D5934ED1A85160400687FB9 /* Proxy */,
+ 5D5934F01A85161A00687FB9 /* Transport */,
5D61FA201A84237100846EE7 /* SmartDeviceLink.h */,
5D1665A01CF5D5DA00CC4CA1 /* .gitignore */,
5D1665A11CF5D5DA00CC4CA1 /* .travis.yml */,
@@ -5365,11 +5537,10 @@
167ED9231A9BB86300797BE5 /* Libraries */,
5DAE06711BDEC68700F9B498 /* Developer API Tests */,
5D4346431E6F0B5600B639C6 /* LoggingSpecs */,
- 5D59DD451B14FDD000BE744D /* ProxySpecs */,
- 5DB92D201AC47AC400C15BB0 /* UtilitiesSpecs */,
1680B1041A9CD7AD00DBD79E /* ProtocolSpecs */,
- EE5D1B31208EBC7100D17216 /* TransportSpecs */,
162E81E01A9BDE8A00906325 /* RPCSpecs */,
+ EE5D1B31208EBC7100D17216 /* TransportSpecs */,
+ 5DB92D201AC47AC400C15BB0 /* UtilitiesSpecs */,
5D61FA2D1A84237100846EE7 /* Supporting Files */,
167ED9451A9BCE5D00797BE5 /* SwiftSpec.swift */,
);
@@ -5455,6 +5626,7 @@
children = (
5D76E3261D3D0A4700647CFA /* Utilities */,
5D76E31B1D3805FF00647CFA /* SDLLockScreenManagerSpec.m */,
+ 5D59DD461B14FDEE00BE744D /* SDLLockScreenStatusManagerSpec.m */,
);
name = LockScreen;
sourceTree = "<group>";
@@ -5523,6 +5695,10 @@
5D1665C71CF8CA3D00CC4CA1 /* SDLPermissionFilter.m */,
5D8204241BCEA8A600D0A41B /* SDLPermissionManager.h */,
5D8204251BCEA8A600D0A41B /* SDLPermissionManager.m */,
+ 106412C4249FB80B0069A97A /* SDLPermissionElement.h */,
+ 106412C5249FB80B0069A97A /* SDLPermissionElement.m */,
+ 106982A824AA3B4700B1F649 /* SDLRPCPermissionStatus.h */,
+ 106982A924AA3B4700B1F649 /* SDLRPCPermissionStatus.m */,
);
name = Permissions;
sourceTree = "<group>";
@@ -5612,6 +5788,8 @@
children = (
5D9F50801BE7E6E300FEF399 /* SDLPermissionsManagerSpec.m */,
5DB1BCD71D243AA6002FFC37 /* SDLPermissionFilterSpec.m */,
+ 1098F03724A39699004F53CC /* SDLPermissionElementSpec.m */,
+ 106187B824AA75540045C4EC /* SDLRPCPermissionStatusSpec.m */,
);
name = Permissions;
sourceTree = "<group>";
@@ -5799,6 +5977,7 @@
5DAD5F8120507DE40025624C /* Screen */ = {
isa = PBXGroup;
children = (
+ 88D0E5D42478656B009469AB /* Subscribe Button */,
5DE35E4320CAFBEA0034BE5A /* Choice Set */,
5DF40B24208FA7C500DD6FDA /* Menu */,
5DAD5F8220507DED0025624C /* Soft Button */,
@@ -5898,6 +6077,7 @@
children = (
5DEE55BE1B8509A5004F0D0F /* HTTP Connection */,
5DB92D2B1AC4A32A00C15BB0 /* Prioritized Objects */,
+ 109566F42429865500E24F66 /* Lock Screen Icon Cache */,
5DB92D231AC47B2C00C15BB0 /* SDLHexUtilitySpec.m */,
5DC978251B7A38640012C2F1 /* SDLGlobalsSpec.m */,
);
@@ -5938,6 +6118,7 @@
children = (
5D0A7376203F0C8F0001595D /* Configuration */,
5D6F7A301BC5B7100070BF37 /* Lock Screen UI */,
+ 4A9D02C02497F9AA00FBE99B /* Status Manager */,
5D76E31F1D39731100647CFA /* Utilities */,
5D4D67B21D30161600468B4A /* SDLLockScreenManager.h */,
5D4D67B31D30161600468B4A /* SDLLockScreenManager.m */,
@@ -5949,18 +6130,18 @@
isa = PBXGroup;
children = (
00E22CE822C2F19700BC6B08 /* Encryption */,
- 5DA3F36E1BC4489A0026F2D0 /* SDLManager.h */,
- 5DA3F36F1BC4489A0026F2D0 /* SDLManager.m */,
- 5D82041C1BCD8E6100D0A41B /* SDLConfiguration.h */,
- 5D82041D1BCD8E6100D0A41B /* SDLConfiguration.m */,
- 5D2F58071D0717D5001085CE /* SDLManagerDelegate.h */,
5D82042A1BCEA91E00D0A41B /* Files */,
5D1654571D3E79CA00554D93 /* Lifecycle */,
5DBAE0A51D355EE700CE00BF /* Lock Screen */,
5D8204291BCEA91400D0A41B /* Permissions */,
- DA8966E71E56937100413EAB /* Streaming */,
5D0A736F203F0C450001595D /* Screen */,
+ DA8966E71E56937100413EAB /* Streaming */,
880E35B12088F73400181259 /* System Capabilities */,
+ 5DA3F36E1BC4489A0026F2D0 /* SDLManager.h */,
+ 5DA3F36F1BC4489A0026F2D0 /* SDLManager.m */,
+ 5D82041C1BCD8E6100D0A41B /* SDLConfiguration.h */,
+ 5D82041D1BCD8E6100D0A41B /* SDLConfiguration.m */,
+ 5D2F58071D0717D5001085CE /* SDLManagerDelegate.h */,
);
name = Managers;
sourceTree = "<group>";
@@ -5979,13 +6160,13 @@
isa = PBXGroup;
children = (
00EADD3122DFDF680088B608 /* Encryption */,
- 5DAD5F8120507DE40025624C /* Screen */,
- DA8966ED1E5693D100413EAB /* Streaming */,
- 880E35B62088F77C00181259 /* System Capabilities */,
+ 5D9F507E1BE7E46600FEF399 /* Files */,
5D1654541D3E753100554D93 /* Lifecycle */,
5D76E31A1D3805E600647CFA /* LockScreen */,
5D9F507F1BE7E6C900FEF399 /* Permissions */,
- 5D9F507E1BE7E46600FEF399 /* Files */,
+ 5DAD5F8120507DE40025624C /* Screen */,
+ DA8966ED1E5693D100413EAB /* Streaming */,
+ 880E35B62088F77C00181259 /* System Capabilities */,
5D5DBF0A1D48E5E600D4F914 /* SDLLockScreenViewControllerSnapshotTests.m */,
);
name = Managers;
@@ -6242,6 +6423,7 @@
5D1FF2D721304746000EB9B4 /* PerformInteractionManager.swift */,
5D1FF2D321304745000EB9B4 /* ProxyManager.swift */,
5D1FF2D521304746000EB9B4 /* RPCPermissionsManager.swift */,
+ 889E7BAD249CEDCF002E4BE1 /* SubscribeButtonManager.swift */,
5D1FF2D921304746000EB9B4 /* VehicleDataManager.swift */,
);
name = SDL;
@@ -6310,6 +6492,17 @@
name = "Data Session";
sourceTree = "<group>";
};
+ 88A098AB2476F08F00A50005 /* Subscribe Button */ = {
+ isa = PBXGroup;
+ children = (
+ 88A098AC2476F0C200A50005 /* SDLSubscribeButtonManager.h */,
+ 88A098AD2476F0C200A50005 /* SDLSubscribeButtonManager.m */,
+ 88A098B024770E7100A50005 /* SDLSubscribeButtonObserver.h */,
+ 88A098B124770E7100A50005 /* SDLSubscribeButtonObserver.m */,
+ );
+ name = "Subscribe Button";
+ sourceTree = "<group>";
+ };
88A0AA5F207CFEA60075132C /* Connection */ = {
isa = PBXGroup;
children = (
@@ -6361,6 +6554,17 @@
path = "DevAPISpecs/Notification Tests";
sourceTree = "<group>";
};
+ 88D0E5D42478656B009469AB /* Subscribe Button */ = {
+ isa = PBXGroup;
+ children = (
+ 88D0E5D524786580009469AB /* SDLSubscribeButtonManagerSpec.m */,
+ 88D0E5D724786770009469AB /* SDLSubscribeButtonObserverSpec.m */,
+ 88B8657524A0FEB7003491AD /* TestSubscribeButtonObserver.h */,
+ 88B8657624A0FEB7003491AD /* TestSubscribeButtonObserver.m */,
+ );
+ name = "Subscribe Button";
+ sourceTree = "<group>";
+ };
88DF998A22035CA400477AC1 /* TCP */ = {
isa = PBXGroup;
children = (
@@ -6397,6 +6601,7 @@
DA4353E71D2721680099B8C4 /* SDLTouchManagerSpec.m */,
DA4353E81D2721680099B8C4 /* SDLTouchSpec.m */,
DA4353DE1D271FD10099B8C4 /* CGPointUtilSpec.m */,
+ 1FF7DABF1F75CF6C00B46C30 /* SDLHapticManagerSpec.m */,
DA4353E21D2720A30099B8C4 /* SDLPinchGestureSpec.m */,
);
name = Touches;
@@ -6435,9 +6640,11 @@
DA8966ED1E5693D100413EAB /* Streaming */ = {
isa = PBXGroup;
children = (
- 5DEF69621FD6FEB6004B8C2F /* Video */,
5DEF69591FD5FE74004B8C2F /* Audio Manager */,
DA1166D71D14601C00438CEA /* Touches */,
+ 5DEF69621FD6FEB6004B8C2F /* Video */,
+ EEB2537D2067D3E80069584E /* SDLSecondaryTransportManagerSpec.m */,
+ DA661E2B1E553E7E001C1345 /* SDLStreamingMediaManagerSpec.m */,
);
name = Streaming;
sourceTree = "<group>";
@@ -6513,8 +6720,6 @@
children = (
EE798CA32056120F008EDE8E /* SDLSecondaryTransportManager.h */,
EE798CA520561217008EDE8E /* SDLSecondaryTransportManager.m */,
- EE38C0C1211C43E100E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.h */,
- EE38C0C2211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m */,
);
name = "Secondary Transport";
sourceTree = "<group>";
@@ -6526,6 +6731,8 @@
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
+ 106412C824A13F160069A97A /* SDLPermissionManager.h in Headers */,
+ 106412C6249FB80B0069A97A /* SDLPermissionElement.h in Headers */,
9F425AD222DD980200BE3245 /* SDLWindowCapability.h in Headers */,
9F425ADA22DD983500BE3245 /* SDLDisplayCapability.h in Headers */,
9F425ACE22DD97DE00BE3245 /* SDLTemplateConfiguration.h in Headers */,
@@ -6556,6 +6763,7 @@
0055412E22D759BD003194D3 /* SDLSeatLocation.h in Headers */,
1EAA475120356CD2000FE74B /* SDLDistanceUnit.h in Headers */,
1EAA4755203583BC000FE74B /* SDLHMISettingsControlData.h in Headers */,
+ 4A3BA4DC248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.h in Headers */,
1EAA4731203442C0000FE74B /* SDLLightName.h in Headers */,
1EAA472D20344108000FE74B /* SDLLightStatus.h in Headers */,
8831FA4222022AB300B8FFB7 /* SDLAppServiceCapability.h in Headers */,
@@ -6613,6 +6821,7 @@
5D61FD831A84238C00846EE7 /* SDLSetDisplayLayout.h in Headers */,
5D61FCC91A84238C00846EE7 /* SDLIgnitionStableStatus.h in Headers */,
884E701F21FB983F008D53BA /* SDLAppServiceManifest.h in Headers */,
+ 4A3BA4EC24914801003E56B8 /* SDLLifecycleProtocolHandler.h in Headers */,
DA9F7E6B1DCBFB0700ACAE48 /* SDLDeliveryMode.h in Headers */,
DA9F7E871DCC049900ACAE48 /* SDLSubscribeWayPoints.h in Headers */,
88D99DB52289C82F0039E047 /* SDLIAPControlSessionDelegate.h in Headers */,
@@ -6627,6 +6836,7 @@
5DB9965C1F268F97002D8795 /* SDLControlFramePayloadVideoStartService.h in Headers */,
5D1665C81CF8CA3D00CC4CA1 /* SDLPermissionFilter.h in Headers */,
E9C32B911AB20BA200F283AF /* SDLIAPSession.h in Headers */,
+ 10893C162417D78300BA347E /* SDLIconArchiveFile.h in Headers */,
5D61FCD71A84238C00846EE7 /* SDLInteractionMode.h in Headers */,
8881AFBE2225E9BB00EA870B /* SDLGetCloudAppPropertiesResponse.h in Headers */,
880FE6272267AE5300723732 /* SDLIAPConstants.h in Headers */,
@@ -6637,11 +6847,13 @@
5D61FCC71A84238C00846EE7 /* SDLIAPTransport.h in Headers */,
5D61FC6D1A84238C00846EE7 /* SDLCreateInteractionChoiceSetResponse.h in Headers */,
5D8204221BCEA89A00D0A41B /* SDLFileManager.h in Headers */,
+ 4A9D02BE2497EED400FBE99B /* SDLLifecycleRPCAdapter.h in Headers */,
5D4D67B41D30161600468B4A /* SDLLockScreenManager.h in Headers */,
5D00AC7B1F15287E004000D9 /* SDLPhoneCapability.h in Headers */,
5D61FE111A84238C00846EE7 /* SDLWarningLightStatus.h in Headers */,
008DB36922EA8261003F458C /* SDLReleaseInteriorVehicleDataModule.h in Headers */,
5D61FC7A1A84238C00846EE7 /* SDLDeleteInteractionChoiceSet.h in Headers */,
+ 10893C1A2418188600BA347E /* SDLCacheFileManager.h in Headers */,
5D61FC3B1A84238C00846EE7 /* SDLAlertManeuverResponse.h in Headers */,
5DB9964E1F26886C002D8795 /* SDLControlFramePayloadEndService.h in Headers */,
5D9FDA991F2A7D3F00A495C8 /* emhashmap.h in Headers */,
@@ -6756,6 +6968,7 @@
5D61FDF11A84238C00846EE7 /* SDLUpdateTurnList.h in Headers */,
5DB996571F268ECB002D8795 /* SDLControlFramePayloadAudioStartServiceAck.h in Headers */,
5D61FD671A84238C00846EE7 /* SDLResult.h in Headers */,
+ 88A098AE2476F0C200A50005 /* SDLSubscribeButtonManager.h in Headers */,
755F176222A00B7C0041B9CB /* SDLMenuManagerConstants.h in Headers */,
5D61FD351A84238C00846EE7 /* SDLPowerModeStatus.h in Headers */,
5D61FD971A84238C00846EE7 /* SDLSingleTireStatus.h in Headers */,
@@ -6836,6 +7049,7 @@
5D0A738A203F24320001595D /* SDLSoftButtonObject.h in Headers */,
5D61FDB31A84238C00846EE7 /* SDLSubscribeVehicleDataResponse.h in Headers */,
5D92935A20B33D4F00FCC775 /* SDLChoiceCell.h in Headers */,
+ B38D8E61249FE28500B977D0 /* SDLCapacityUnit.h in Headers */,
5D61FC961A84238C00846EE7 /* SDLECallConfirmationStatus.h in Headers */,
5D4D67AC1D2ED37A00468B4A /* SDLNotificationDispatcher.h in Headers */,
5D61FDA51A84238C00846EE7 /* SDLSpeak.h in Headers */,
@@ -6850,7 +7064,6 @@
5D61FCD31A84238C00846EE7 /* SDLImageResolution.h in Headers */,
8B7B319E1F2F7CF700BDC38D /* SDLVideoStreamingProtocol.h in Headers */,
88E6F1A7220E1588006156F9 /* SDLMediaType.h in Headers */,
- 5D61FD541A84238C00846EE7 /* SDLProxyListener.h in Headers */,
88A5E7FD220B642200495E8A /* SDLGetAppServiceDataResponse.h in Headers */,
5D61FC5D1A84238C00846EE7 /* SDLChangeRegistrationResponse.h in Headers */,
5D61FDCD1A84238C00846EE7 /* SDLTimerMode.h in Headers */,
@@ -6859,7 +7072,6 @@
1FF7DAB81F75B28E00B46C30 /* SDLFocusableItemHitTester.h in Headers */,
5D61FC3D1A84238C00846EE7 /* SDLAlertResponse.h in Headers */,
5D61FDAD1A84238C00846EE7 /* SDLSubscribeButton.h in Headers */,
- 5D8204261BCEA8A600D0A41B /* SDLPermissionManager.h in Headers */,
5D61FCF41A84238C00846EE7 /* SDLMaintenanceModeStatus.h in Headers */,
5D61FC571A84238C00846EE7 /* SDLButtonPressMode.h in Headers */,
5D3E487B1D6F888E0000BFEF /* SDLRPCResponseNotification.h in Headers */,
@@ -6870,6 +7082,7 @@
5D61FD2D1A84238C00846EE7 /* SDLPermissionItem.h in Headers */,
5D61FCD11A84238C00846EE7 /* SDLImageFieldName.h in Headers */,
88B3BF9820DA859800943565 /* SDLFuelType.h in Headers */,
+ 4A99D00E247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.h in Headers */,
5DBF062D1E64A93A00A5CF03 /* SDLLogFilter.h in Headers */,
5DCF76F91ACDD7CD00BB647B /* SDLSendLocationResponse.h in Headers */,
5D61FD391A84238C00846EE7 /* SDLPrerecordedSpeech.h in Headers */,
@@ -6904,6 +7117,7 @@
5D61FD0B1A84238C00846EE7 /* SDLOnEncodedSyncPData.h in Headers */,
5D61FC631A84238C00846EE7 /* SDLClusterModeStatus.h in Headers */,
5D61FD371A84238C00846EE7 /* SDLPredefinedLayout.h in Headers */,
+ 4A99D0122475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.h in Headers */,
008DB36D22EA83E4003F458C /* SDLReleaseInteriorVehicleDataModuleResponse.h in Headers */,
5D61FDE31A84238C00846EE7 /* SDLUnregisterAppInterface.h in Headers */,
5D61FD331A84238C00846EE7 /* SDLPowerModeQualificationStatus.h in Headers */,
@@ -6955,6 +7169,7 @@
1E5AD04C1F1F79640029B8AF /* SDLDefrostZone.h in Headers */,
1E5AD0601F207AB10029B8AF /* SDLRadioState.h in Headers */,
1E5AD0801F20B73E0029B8AF /* SDLButtonPress.h in Headers */,
+ 106187BA24AA76550045C4EC /* SDLRPCPermissionStatus.h in Headers */,
884554AC222453A800BAFB6C /* SDLNavigationServiceManifest.h in Headers */,
8816772C222097C3001FACFF /* SDLNavigationServiceData.h in Headers */,
1E5AD05C1F2064A80029B8AF /* SDLRDSData.h in Headers */,
@@ -6967,12 +7182,12 @@
5D61FD911A84238C00846EE7 /* SDLShowConstantTBT.h in Headers */,
5D92937C20B70A3E00FCC775 /* SDLPresentKeyboardOperation.h in Headers */,
5D61FC331A84238C00846EE7 /* SDLAddSubMenuResponse.h in Headers */,
+ 4A3BA4E724901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.h in Headers */,
5D61FD5D1A84238C00846EE7 /* SDLRegisterAppInterface.h in Headers */,
5D61FC9A1A84238C00846EE7 /* SDLEmergencyEvent.h in Headers */,
5D61FC651A84238C00846EE7 /* SDLCompassDirection.h in Headers */,
5D61FC8E1A84238C00846EE7 /* SDLDimension.h in Headers */,
5D61FD6B1A84238C00846EE7 /* SDLRPCMessageType.h in Headers */,
- 5D61FD501A84238C00846EE7 /* SDLProxy.h in Headers */,
5D61FC3F1A84238C00846EE7 /* SDLAmbientLightStatus.h in Headers */,
5DE372A11ACB2ED300849FAA /* SDLHMICapabilities.h in Headers */,
88B58DBA222040FF0011B063 /* SDLDirection.h in Headers */,
@@ -6989,7 +7204,8 @@
5D61FD951A84238C00846EE7 /* SDLShowResponse.h in Headers */,
5D61FCA31A84238C00846EE7 /* SDLEndAudioPassThru.h in Headers */,
88A795D22106787400056542 /* SDLStaticIconName.h in Headers */,
- 2B233530232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.h in Headers */,
+ 2B233530232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.h in Headers */,
+ 4A1B036D24CF43CD008C6B13 /* SDLDriverDistractionCapability.h in Headers */,
5D61FCB11A84238C00846EE7 /* SDLGetDTCs.h in Headers */,
5D61FDFF1A84238C00846EE7 /* SDLVehicleDataEventStatus.h in Headers */,
5D61FC5B1A84238C00846EE7 /* SDLChangeRegistration.h in Headers */,
@@ -7004,7 +7220,7 @@
5D61FC371A84238C00846EE7 /* SDLAlert.h in Headers */,
5D61FCC11A84238C00846EE7 /* SDLHMILevel.h in Headers */,
8B9376D71F3349FC009605C4 /* SDLMetadataTags.h in Headers */,
- 5D61FD471A84238C00846EE7 /* SDLProtocolListener.h in Headers */,
+ 5D61FD471A84238C00846EE7 /* SDLProtocolDelegate.h in Headers */,
EE28F9E3209802A500B1B61D /* SDLStreamingProtocolDelegate.h in Headers */,
88BCEA922266250B00BB7E70 /* SDLIAPControlSession.h in Headers */,
5D61FCA01A84238C00846EE7 /* SDLEncodedSyncPDataResponse.h in Headers */,
@@ -7014,6 +7230,7 @@
5D61FDA71A84238C00846EE7 /* SDLSpeakResponse.h in Headers */,
5D1665CB1CF8CA6700CC4CA1 /* NSNumber+NumberType.h in Headers */,
5D9FDA941F2A7D3400A495C8 /* bson_util.h in Headers */,
+ 88A098B224770E7100A50005 /* SDLSubscribeButtonObserver.h in Headers */,
5D61FD771A84238C00846EE7 /* SDLSamplingRate.h in Headers */,
5DF40B22208E761A00DD6FDA /* SDLVoiceCommandManager.h in Headers */,
001A08B52321ADD30078A31E /* SDLServiceEncryptionDelegate.h in Headers */,
@@ -7055,6 +7272,7 @@
5D61FCFC1A84238C00846EE7 /* SDLRPCParameterNames.h in Headers */,
DA9F7E8F1DCC04C000ACAE48 /* SDLUnsubscribeWayPointsResponse.h in Headers */,
5D61FCFD1A84238C00846EE7 /* SDLObjectWithPriority.h in Headers */,
+ 4A3BA4E1248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.h in Headers */,
88EF8EBD22D8FE5800CB06C2 /* SDLCancelInteractionResponse.h in Headers */,
888DBAEF22D528DE002A0AE2 /* SDLCloseApplicationResponse.h in Headers */,
DAC5726C1D11B4840004288B /* SDLTouchManagerDelegate.h in Headers */,
@@ -7069,7 +7287,6 @@
5D61FD6F1A84238C00846EE7 /* SDLRPCPayload.h in Headers */,
5D339CF3207C0ACE000CC364 /* SDLMenuManager.h in Headers */,
5D61FCF01A84238C00846EE7 /* SDLLockScreenStatusManager.h in Headers */,
- 5D61FD311A84238C00846EE7 /* SDLPolicyDataParser.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -7193,7 +7410,6 @@
TargetAttributes = {
5D4019AE1A76EC350006B0C2 = {
CreatedOnToolsVersion = 6.1.1;
- DevelopmentTeam = NCVC2MHU7M;
SystemCapabilities = {
com.apple.BackgroundModes = {
enabled = 1;
@@ -7205,7 +7421,7 @@
};
5D61FA1B1A84237100846EE7 = {
CreatedOnToolsVersion = 6.1.1;
- LastSwiftMigration = 1020;
+ LastSwiftMigration = 1150;
};
5D61FA251A84237100846EE7 = {
CreatedOnToolsVersion = 6.1.1;
@@ -7213,6 +7429,7 @@
};
8829567D207CF68800EF056C = {
LastSwiftMigration = 0930;
+ ProvisioningStyle = Automatic;
};
};
};
@@ -7321,6 +7538,7 @@
5D1FF2BF21304598000EB9B4 /* ConnectionAnimatedTransition.m in Sources */,
5D1FF2A721304531000EB9B4 /* Preferences.m in Sources */,
5D1FF2CC2130464E000EB9B4 /* main.m in Sources */,
+ 889E7BB2249D0877002E4BE1 /* SubscribeButtonManager.m in Sources */,
5D1FF2C021304598000EB9B4 /* ConnectionTransitionContext.m in Sources */,
5D1FF2A221304515000EB9B4 /* ButtonManager.m in Sources */,
5D1FF2A021304515000EB9B4 /* AudioManager.m in Sources */,
@@ -7425,6 +7643,7 @@
5D61FCC81A84238C00846EE7 /* SDLIAPTransport.m in Sources */,
5D61FE101A84238C00846EE7 /* SDLVrHelpItem.m in Sources */,
5D07C0322044AD0C00D1ECDC /* SDLAsynchronousRPCRequestOperation.m in Sources */,
+ 88A098AF2476F0C200A50005 /* SDLSubscribeButtonManager.m in Sources */,
8881AFBF2225E9BB00EA870B /* SDLGetCloudAppPropertiesResponse.m in Sources */,
1E5AD0691F2080B50029B8AF /* SDLRadioControlData.m in Sources */,
888F86FE221DEE200052FE4C /* SDLAsynchronousRPCOperation.m in Sources */,
@@ -7436,6 +7655,7 @@
5D61FDC81A84238C00846EE7 /* SDLTextAlignment.m in Sources */,
5D4631091F21261B0092EFDC /* SDLControlFramePayloadRPCStartServiceAck.m in Sources */,
5D82042E1BCEC32F00D0A41B /* SDLFile.m in Sources */,
+ 4A99D00F247576B7009B43E6 /* SDLTextField+ScreenManagerExtensions.m in Sources */,
5DA3F3601BC448590026F2D0 /* SDLNotificationConstants.m in Sources */,
5D61FD5A1A84238C00846EE7 /* SDLReadDID.m in Sources */,
1EAA472E20344108000FE74B /* SDLLightStatus.m in Sources */,
@@ -7445,6 +7665,7 @@
5D61FC9B1A84238C00846EE7 /* SDLEmergencyEvent.m in Sources */,
5D61FDFE1A84238C00846EE7 /* SDLVehicleDataActiveStatus.m in Sources */,
1E5AD0411F1F58480029B8AF /* SDLVentilationMode.m in Sources */,
+ 4A3BA4E2248EB133003E56B8 /* SDLLifecycleSyncPDataHandler.m in Sources */,
5D61FCD01A84238C00846EE7 /* SDLImageField.m in Sources */,
5D0A738B203F24320001595D /* SDLSoftButtonObject.m in Sources */,
5D61FC3C1A84238C00846EE7 /* SDLAlertManeuverResponse.m in Sources */,
@@ -7478,6 +7699,7 @@
5D61FDB21A84238C00846EE7 /* SDLSubscribeVehicleData.m in Sources */,
5D61FC991A84238C00846EE7 /* SDLECallInfo.m in Sources */,
5D61FD601A84238C00846EE7 /* SDLRegisterAppInterfaceResponse.m in Sources */,
+ 106982AB24AA3B4700B1F649 /* SDLRPCPermissionStatus.m in Sources */,
5DB996581F268ECB002D8795 /* SDLControlFramePayloadAudioStartServiceAck.m in Sources */,
DAC572621D10C5020004288B /* SDLPinchGesture.m in Sources */,
1EAA471A203406B2000FE74B /* SDLSISData.m in Sources */,
@@ -7506,6 +7728,7 @@
5D61FD8A1A84238C00846EE7 /* SDLSetGlobalPropertiesResponse.m in Sources */,
5D61FC4C1A84238C00846EE7 /* SDLBeltStatus.m in Sources */,
DA9F7E8C1DCC04B000ACAE48 /* SDLSubscribeWayPointsResponse.m in Sources */,
+ 4A3BA4ED24914801003E56B8 /* SDLLifecycleProtocolHandler.m in Sources */,
5D61FDA41A84238C00846EE7 /* SDLSoftButtonType.m in Sources */,
5D00AC6C1F141339004000D9 /* SDLSystemCapability.m in Sources */,
5D61FC521A84238C00846EE7 /* SDLButtonCapabilities.m in Sources */,
@@ -7536,6 +7759,7 @@
5D07C02E2044AC9100D1ECDC /* SDLSequentialRPCRequestOperation.m in Sources */,
5DD67CB91E661C4A009CD394 /* SDLLogTargetFile.m in Sources */,
5D61FCBE1A84238C00846EE7 /* SDLHeadLampStatus.m in Sources */,
+ 10893C1B2418188600BA347E /* SDLCacheFileManager.m in Sources */,
5D61FD921A84238C00846EE7 /* SDLShowConstantTBT.m in Sources */,
008DB36A22EA8261003F458C /* SDLReleaseInteriorVehicleDataModule.m in Sources */,
88E6F1A8220E1588006156F9 /* SDLMediaType.m in Sources */,
@@ -7554,15 +7778,18 @@
9FE2470A22D77A3600F8D2FC /* SDLDeleteWindow.m in Sources */,
5D0A7383203F23F30001595D /* SDLSoftButtonManager.m in Sources */,
5DCF76FA1ACDD7CD00BB647B /* SDLSendLocationResponse.m in Sources */,
+ 88A098B324770E7100A50005 /* SDLSubscribeButtonObserver.m in Sources */,
5D9FDA8F1F2A7D3400A495C8 /* bson_array.c in Sources */,
5D61FD661A84238C00846EE7 /* SDLResetGlobalPropertiesResponse.m in Sources */,
+ 4A99D0132475773C009B43E6 /* SDLImageField+ScreenManagerExtensions.m in Sources */,
5D61FCFE1A84238C00846EE7 /* SDLObjectWithPriority.m in Sources */,
+ B38D8E62249FE28500B977D0 /* SDLCapacityUnit.m in Sources */,
5D92937D20B70A3E00FCC775 /* SDLPresentKeyboardOperation.m in Sources */,
9FD334E122DC6E7500F62736 /* SDLCreateWindow.m in Sources */,
5DBF06241E64A83F00A5CF03 /* SDLLogManager.m in Sources */,
5D61FC401A84238C00846EE7 /* SDLAmbientLightStatus.m in Sources */,
9F425ADB22DD983500BE3245 /* SDLDisplayCapability.m in Sources */,
- 2B233531232BD8A5002118E5 /* SDLWindowCapability+ShowManagerExtensions.m in Sources */,
+ 2B233531232BD8A5002118E5 /* SDLWindowCapability+ScreenManagerExtensions.m in Sources */,
88EEC5BC220A327B005AA2F9 /* SDLPublishAppServiceResponse.m in Sources */,
5D61FC951A84238C00846EE7 /* SDLDriverDistractionState.m in Sources */,
5DB996611F28C6ED002D8795 /* SDLControlFramePayloadVideoStartServiceAck.m in Sources */,
@@ -7571,9 +7798,9 @@
5D61FD961A84238C00846EE7 /* SDLShowResponse.m in Sources */,
5D61FD981A84238C00846EE7 /* SDLSingleTireStatus.m in Sources */,
1EB59CA8202D946500343A61 /* SDLMassageModeData.m in Sources */,
+ 4A3BA4E824901794003E56B8 /* SDLLifecycleMobileHMIStateHandler.m in Sources */,
8881AFB32225DED900EA870B /* SDLSetCloudAppPropertiesResponse.m in Sources */,
5D9FDA931F2A7D3400A495C8 /* bson_util.c in Sources */,
- 5D61FD511A84238C00846EE7 /* SDLProxy.m in Sources */,
5D61FD461A84238C00846EE7 /* SDLProtocolHeader.m in Sources */,
5DD8406320FCD6C10082CE04 /* SDLElectronicParkBrakeStatus.m in Sources */,
88EF8EB822D8E02E00CB06C2 /* SDLCancelInteraction.m in Sources */,
@@ -7681,10 +7908,12 @@
1E5AD0511F1F7BF10029B8AF /* SDLRadioBand.m in Sources */,
88B3BF9D20DA8BBC00943565 /* SDLFuelRange.m in Sources */,
5D61FDDC1A84238C00846EE7 /* SDLTriggerSource.m in Sources */,
+ 106412C7249FB80B0069A97A /* SDLPermissionElement.m in Sources */,
5DADA7761F4DFED60084D17D /* SDLRectangle.m in Sources */,
88EED83F1F33C5A400E6C42E /* SDLSendHapticData.m in Sources */,
5D16545B1D3E7A1600554D93 /* SDLLifecycleManager.m in Sources */,
E9C32B971AB20BA200F283AF /* SDLTimer.m in Sources */,
+ 10893C172417D78300BA347E /* SDLIconArchiveFile.m in Sources */,
5D61FCB61A84238C00846EE7 /* SDLGetVehicleData.m in Sources */,
5DAB5F572098E5D100A020C8 /* SDLProtocolConstants.m in Sources */,
5D61FC9F1A84238C00846EE7 /* SDLEncodedSyncPData.m in Sources */,
@@ -7700,7 +7929,6 @@
EED5CA021F4D18EC00F04000 /* SDLRAWH264Packetizer.m in Sources */,
9FE2471622D77AD500F8D2FC /* SDLWindowType.m in Sources */,
5D61FC851A84238C00846EE7 /* SDLDeviceLevelStatus.m in Sources */,
- EE38C0C3211C440400E170AD /* SDLSecondaryTransportPrimaryProtocolHandler.m in Sources */,
5D9FDA981F2A7D3F00A495C8 /* emhashmap.c in Sources */,
5D61FD1E1A84238C00846EE7 /* SDLOnTBTClientState.m in Sources */,
5D0C29FD20D93D8C008B56CD /* SDLVideoStreamingState.m in Sources */,
@@ -7723,7 +7951,6 @@
5D61FD5C1A84238C00846EE7 /* SDLReadDIDResponse.m in Sources */,
884AF950220B488900E22928 /* SDLOnSystemCapabilityUpdated.m in Sources */,
1EB59CB4202D9B5F00343A61 /* SDLSeatMemoryActionType.m in Sources */,
- 5D61FD321A84238C00846EE7 /* SDLPolicyDataParser.m in Sources */,
5D61FC621A84238C00846EE7 /* SDLChoice.m in Sources */,
1E5AD0811F20B73E0029B8AF /* SDLButtonPress.m in Sources */,
5D92937520B5EEA200FCC775 /* SDLPreloadChoicesOperation.m in Sources */,
@@ -7790,14 +8017,17 @@
9FE2470E22D77A5A00F8D2FC /* SDLDeleteWindowResponse.m in Sources */,
5D82041F1BCD8E6100D0A41B /* SDLConfiguration.m in Sources */,
00E22CEC22C2F1B300BC6B08 /* SDLEncryptionConfiguration.m in Sources */,
+ 4A1B036C24CF43CD008C6B13 /* SDLDriverDistractionCapability.m in Sources */,
5D61FD381A84238C00846EE7 /* SDLPredefinedLayout.m in Sources */,
5D3E487C1D6F888E0000BFEF /* SDLRPCResponseNotification.m in Sources */,
5D61FD0E1A84238C00846EE7 /* SDLOnHashChange.m in Sources */,
5D4D67B51D30161600468B4A /* SDLLockScreenManager.m in Sources */,
+ 4A26370C2493F0CF00278BE3 /* SDLRPCMessageType.m in Sources */,
5D61FDE41A84238C00846EE7 /* SDLUnregisterAppInterface.m in Sources */,
88A5E7FE220B642200495E8A /* SDLGetAppServiceDataResponse.m in Sources */,
5D61FC361A84238C00846EE7 /* SDLAirbagStatus.m in Sources */,
5D61FD7E1A84238C00846EE7 /* SDLScrollableMessageResponse.m in Sources */,
+ 4A3BA4DD248E8F0F003E56B8 /* SDLLifecycleSystemRequestHandler.m in Sources */,
5D61FD3A1A84238C00846EE7 /* SDLPrerecordedSpeech.m in Sources */,
5D61FCA11A84238C00846EE7 /* SDLEncodedSyncPDataResponse.m in Sources */,
88B3BF9920DA859800943565 /* SDLFuelType.m in Sources */,
@@ -7835,6 +8065,7 @@
5D61FDCC1A84238C00846EE7 /* SDLTextFieldName.m in Sources */,
5D61FC751A84238C00846EE7 /* SDLDeleteCommandResponse.m in Sources */,
5DA3F3711BC4489A0026F2D0 /* SDLManager.m in Sources */,
+ 4A9D02BF2497EED400FBE99B /* SDLLifecycleRPCAdapter.m in Sources */,
5D61FD861A84238C00846EE7 /* SDLSetDisplayLayoutResponse.m in Sources */,
5D61FCB41A84238C00846EE7 /* SDLGetDTCsResponse.m in Sources */,
5D61FDFC1A84238C00846EE7 /* SDLV2ProtocolMessage.m in Sources */,
@@ -7864,6 +8095,7 @@
162E82EE1A9BDE8B00906325 /* SDLMediaClockFormatSpec.m in Sources */,
5D76751822D921CB00E8D71A /* SDLMenuLayoutSpec.m in Sources */,
5DA026901AD44EE700019F86 /* SDLDialNumberResponseSpec.m in Sources */,
+ 4A457DD324A3886700386CBA /* SDLLifecycleSyncPDataHandlerSpec.m in Sources */,
162E83901A9BDE8B00906325 /* SDLTireStatusSpec.m in Sources */,
000DD57622EF0971005AB7A7 /* SDLReleaseInteriorVehicleDataModuleResponseSpec.m in Sources */,
162E82E01A9BDE8B00906325 /* SDLHMILevelSpec.m in Sources */,
@@ -7884,8 +8116,10 @@
1EAA47722036AEF5000FE74B /* SDLLightNameSpec.m in Sources */,
5DB92D2F1AC59F0000C15BB0 /* SDLObjectWithPrioritySpec.m in Sources */,
88DF999122035D5A00477AC1 /* SDLIAPTransportSpec.m in Sources */,
+ 4A4AD8A424894260008FC414 /* TestOldConfigurationUpdateManagerDelegate.m in Sources */,
162E838A1A9BDE8B00906325 /* SDLSingleTireStatusSpec.m in Sources */,
5D6EB4CC1BF28DC600693731 /* NSMapTable+SubscriptingSpec.m in Sources */,
+ B3F7918324E062C200DB5CAF /* SDLGetVehicleDataSpec.m in Sources */,
88F37A4D226F84BE00DF119B /* SDLIAPDataSessionSpec.m in Sources */,
9FA0D00322DF06B9009CF344 /* SDLWindowTypeCapabilitiesSpec.m in Sources */,
162E83051A9BDE8B00906325 /* SDLVehicleDataActiveStatusSpec.m in Sources */,
@@ -7943,10 +8177,12 @@
162E837E1A9BDE8B00906325 /* SDLGPSDataSpec.m in Sources */,
5DAE06731BDEC6C000F9B498 /* SDLFileSpec.m in Sources */,
162E82E11A9BDE8B00906325 /* SDLHMIZoneCapabilitiesSpec.m in Sources */,
+ 88D0E5D624786580009469AB /* SDLSubscribeButtonManagerSpec.m in Sources */,
5D75960D22972F830013207C /* TestSystemCapabilityObserver.m in Sources */,
88B58DBD222042500011B063 /* SDLDirectionSpec.m in Sources */,
162E83721A9BDE8B00906325 /* SDLAudioPassThruCapabilitiesSpec.m in Sources */,
162E83681A9BDE8B00906325 /* SDLSpeakResponseSpec.m in Sources */,
+ B38D8E8224A1F53500B977D0 /* SDLCapacityUnitSpec.m in Sources */,
1EB59CD8202DCCD500343A61 /* SDLMassageCushionFirmnessSpec.m in Sources */,
162E83661A9BDE8B00906325 /* SDLShowResponseSpec.m in Sources */,
5D9F50831BEA5C6100FEF399 /* SDLFileManagerSpec.m in Sources */,
@@ -7972,6 +8208,7 @@
162E83281A9BDE8B00906325 /* SDLDeleteCommandSpec.m in Sources */,
88A81F6C2200FD4A00A691A9 /* SDLAppServiceRecordSpec.m in Sources */,
162E83531A9BDE8B00906325 /* SDLDiagnosticMessageResponseSpec.m in Sources */,
+ 106187B924AA75540045C4EC /* SDLRPCPermissionStatusSpec.m in Sources */,
8881AFB52225E37800EA870B /* SDLSetCloudAppPropertiesResponseSpec.m in Sources */,
162E83671A9BDE8B00906325 /* SDLSliderResponseSpec.m in Sources */,
8877F5F11F34AA2D00DC128A /* SDLSendHapticDataResponseSpec.m in Sources */,
@@ -7990,6 +8227,7 @@
5D6035D5202CE4A500A429C9 /* TestMultipleRequestsConnectionManager.m in Sources */,
162E83691A9BDE8B00906325 /* SDLSubscribeButtonResponseSpec.m in Sources */,
9FA0CFFA22DF064D009CF344 /* SDLPredefinedWindowsSpec.m in Sources */,
+ 88B8657924A102AB003491AD /* TestSubscribeButtonObserver.m in Sources */,
5DAE06751BDEC6D600F9B498 /* SDLArtworkSpec.m in Sources */,
5DA23FF01F2FA0FF009C0313 /* SDLControlFramePayloadEndServiceSpec.m in Sources */,
162E83591A9BDE8B00906325 /* SDLListFilesResponseSpec.m in Sources */,
@@ -8028,6 +8266,7 @@
162E82CE1A9BDE8A00906325 /* SDLAudioTypeSpec.m in Sources */,
162E831C1A9BDE8B00906325 /* SDLOnSyncPDataSpec.m in Sources */,
00EADD3322DFE54B0088B608 /* SDLEncryptionLifecycleManagerSpec.m in Sources */,
+ 4A1B036F24CF484E008C6B13 /* SDLDriverDistractionCapabilitySpec.m in Sources */,
5D9F50871BED412E00FEF399 /* TestConnectionManager.m in Sources */,
1EAA47802036C2C9000FE74B /* SDLStationIDNumberSpec.m in Sources */,
162E83341A9BDE8B00906325 /* SDLPutFileSpec.m in Sources */,
@@ -8053,6 +8292,7 @@
88B848C31F45E1A600DED768 /* TestResponse.m in Sources */,
DA4353DF1D271FD10099B8C4 /* CGPointUtilSpec.m in Sources */,
162E83291A9BDE8B00906325 /* SDLDeleteFileSpec.m in Sources */,
+ 109566F6242986F300E24F66 /* SDLCacheFileManagerSpec.m in Sources */,
1680B11D1A9CD7AD00DBD79E /* SDLProtocolMessageDisassemblerSpec.m in Sources */,
8BBEA6091F324832003EEA26 /* SDLMetadataTypeSpec.m in Sources */,
5DAD5F8B20508F140025624C /* SDLSoftButtonObjectSpec.m in Sources */,
@@ -8066,6 +8306,7 @@
162E82DE1A9BDE8B00906325 /* SDLFuelCutoffStatusSpec.m in Sources */,
162E83271A9BDE8B00906325 /* SDLCreateInteractionChoiceSetSpec.m in Sources */,
5DAD5F8920508F090025624C /* SDLSoftButtonStateSpec.m in Sources */,
+ 1098F03824A39699004F53CC /* SDLPermissionElementSpec.m in Sources */,
9FA0D01222DF0BAC009CF344 /* SDLDeleteWindowResponseSpec.m in Sources */,
162E83111A9BDE8B00906325 /* SDLOnButtonEventSpec.m in Sources */,
1FF7DAC01F75CF6C00B46C30 /* SDLHapticManagerSpec.m in Sources */,
@@ -8104,6 +8345,7 @@
162E83371A9BDE8B00906325 /* SDLResetGlobalPropertiesSpec.m in Sources */,
162E82DF1A9BDE8B00906325 /* SDLGlobalProperySpec.m in Sources */,
88DF998F22035D1700477AC1 /* SDLIAPSessionSpec.m in Sources */,
+ 88A118272412ACAD00B45FB5 /* SDLStreamingMediaManagerSpec.m in Sources */,
5DD8406520FCE21A0082CE04 /* SDLElectronicParkBrakeStatusSpec.m in Sources */,
162E82F61A9BDE8B00906325 /* SDLRequestTypeSpec.m in Sources */,
5DE35E4520CAFC5D0034BE5A /* SDLChoiceCellSpec.m in Sources */,
@@ -8163,14 +8405,17 @@
162E838F1A9BDE8B00906325 /* SDLTextFieldSpec.m in Sources */,
8818ADDD2100FE0C007D6F19 /* SDLTurnSignalSpec.m in Sources */,
162E82CA1A9BDE8A00906325 /* SDLAmbientLightStatusSpec.m in Sources */,
+ 4A4AD8A724894270008FC414 /* TestNewConfigurationUpdateManagerDelegate.m in Sources */,
162E83091A9BDE8B00906325 /* SDLVehicleDataStatusSpec.m in Sources */,
5DAD5F8D20508F220025624C /* SDLSoftButtonManagerSpec.m in Sources */,
162E83741A9BDE8B00906325 /* SDLBodyInformationSpec.m in Sources */,
1EAA477A2036BD46000FE74B /* SDLSISDataSpec.m in Sources */,
5D64FE6D20DA9CE600792F9F /* SDLVideoStreamingStateSpec.m in Sources */,
+ 88D0E5D824786770009469AB /* SDLSubscribeButtonObserverSpec.m in Sources */,
88665B6C220B796A00D9DA77 /* SDLPerformAppServiceInteractionResponseSpec.m in Sources */,
162E83641A9BDE8B00906325 /* SDLSetMediaClockTimerResponseSpec.m in Sources */,
162E839C1A9BDE8B00906325 /* SDLRPCRequestSpec.m in Sources */,
+ 4A457DD524A3C16E00386CBA /* SDLLifecycleMobileHMIStateHandlerSpec.m in Sources */,
DA4353E31D2720A30099B8C4 /* SDLPinchGestureSpec.m in Sources */,
5D8B17561AC9E399006A6E1C /* SDLDialNumberSpec.m in Sources */,
162E833D1A9BDE8B00906325 /* SDLShowConstantTBTSpec.m in Sources */,
@@ -8185,6 +8430,7 @@
162E82D61A9BDE8A00906325 /* SDLComponentVolumeStatusSpec.m in Sources */,
162E835C1A9BDE8B00906325 /* SDLPutFileResponseSpec.m in Sources */,
1EE8C43E1F347F0500FDC2CF /* SDLVentilationModeSpec.m in Sources */,
+ 4A457DD724A3CCED00386CBA /* SDLLifecycleSystemRequestHandlerSpec.m in Sources */,
88B58DC922204C9E0011B063 /* SDLNavigationActionSpec.m in Sources */,
5DB202271F5F2D030061D189 /* SDLImageResolutionSpec.m in Sources */,
DA9F7EAA1DCC061A00ACAE48 /* SDLSubscribeWaypointsResponseSpec.m in Sources */,
@@ -8205,7 +8451,6 @@
162E82E71A9BDE8B00906325 /* SDLKeyboardEventSpec.m in Sources */,
162E834E1A9BDE8B00906325 /* SDLCreateInteractionChoiceSetResponseSpec.m in Sources */,
DA9F7EB61DCC086A00ACAE48 /* SDLOasisAddressSpec.m in Sources */,
- 162E83301A9BDE8B00906325 /* SDLGetVehicleDataSpec.m in Sources */,
162E833F1A9BDE8B00906325 /* SDLSliderSpec.m in Sources */,
162E838C1A9BDE8B00906325 /* SDLSoftButtonSpec.m in Sources */,
5DA23FF81F2FAF2D009C0313 /* SDLControlFramePayloadRPCStartServiceAckSpec.m in Sources */,
@@ -8213,6 +8458,7 @@
5DE35E4E20CB1C2C0034BE5A /* SDLDeleteChoicesOperationSpec.m in Sources */,
5DE35E5220CB1C490034BE5A /* SDLPreloadChoicesOperationSpec.m in Sources */,
5DADA7781F4E059E0084D17D /* SDLRectangleSpec.m in Sources */,
+ 4A457DC324A2933E00386CBA /* SDLLifecycleRPCAdapterSpec.m in Sources */,
5DB1BCDD1D243DC3002FFC37 /* SDLLifecycleConfigurationSpec.m in Sources */,
EED5CA0A1F4D206800F04000 /* SDLRTPH264PacketizerSpec.m in Sources */,
1EB59CC8202DC86A00343A61 /* SDLModuleTypeSpec.m in Sources */,
@@ -8275,6 +8521,7 @@
1EE8C4611F38865B00FDC2CF /* SDLSetInteriorVehicleDataResponseSpec.m in Sources */,
162E82FC1A9BDE8B00906325 /* SDLSystemAction.m in Sources */,
162E82CC1A9BDE8A00906325 /* SDLAppInterfaceUnregisteredReasonSpec.m in Sources */,
+ 4A457DD924A5137100386CBA /* SDLLifecycleProtocolHandlerSpec.m in Sources */,
9FA0CFFD22DF0687009CF344 /* SDLTemplateConfigurationSpec.m in Sources */,
162E83321A9BDE8B00906325 /* SDLPerformAudioPassThruSpec.m in Sources */,
162E830B1A9BDE8B00906325 /* SDLVrCapabilitiesSpec.m in Sources */,
@@ -8356,6 +8603,7 @@
5DC49BDD237314B500B2B8F2 /* SceneDelegate.swift in Sources */,
5D1FF2DC21304746000EB9B4 /* AlertManager.swift in Sources */,
5D1FF2EB2130479C000EB9B4 /* ConnectionContainerViewController.swift in Sources */,
+ 889E7BAF249CEE07002E4BE1 /* SubscribeButtonManager.swift in Sources */,
5D1FF2E021304746000EB9B4 /* MenuManager.swift in Sources */,
5D1FF2DF21304746000EB9B4 /* PerformInteractionManager.swift in Sources */,
5D1FF2ED2130479C000EB9B4 /* ConnectionIAPTableViewController.swift in Sources */,
@@ -8573,7 +8821,7 @@
INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
PRODUCT_NAME = "SDL Example";
SWIFT_VERSION = 5.0;
@@ -8589,7 +8837,7 @@
INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example ObjC/SmartDeviceLink-Example-ObjC-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
PRODUCT_NAME = "SDL Example";
SWIFT_VERSION = 5.0;
@@ -8632,7 +8880,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.smartdevicelink;
PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = YES;
@@ -8677,7 +8925,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.7.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.smartdevicelink;
PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = YES;
@@ -8762,14 +9010,16 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = NCVC2MHU7M;
INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
PRODUCT_NAME = "SDL Example Swift";
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@@ -8782,14 +9032,16 @@
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "Apple Development";
+ CODE_SIGN_STYLE = Automatic;
DEVELOPMENT_TEAM = NCVC2MHU7M;
INFOPLIST_FILE = "$(SRCROOT)/Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Info.plist";
IPHONEOS_DEPLOYMENT_TARGET = 13.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SDLTestApp;
PRODUCT_NAME = "SDL Example Swift";
+ PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Example Apps/Example Swift/SmartDeviceLink-Example-Swift-Bridging-Header.h";
SWIFT_VERSION = 5.0;
};
@@ -8833,7 +9085,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SmartDeviceLinkSwift;
PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = YES;
@@ -8883,7 +9135,7 @@
IPHONEOS_DEPLOYMENT_TARGET = 8.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
LIBRARY_SEARCH_PATHS = "$(inherited)";
- MARKETING_VERSION = 6.5.0;
+ MARKETING_VERSION = 6.6.0;
PRODUCT_BUNDLE_IDENTIFIER = com.smartdevicelink.SmartDeviceLinkSwift;
PRODUCT_NAME = "$(TARGET_NAME)";
RUN_CLANG_STATIC_ANALYZER = YES;
diff --git a/SmartDeviceLink.podspec b/SmartDeviceLink.podspec
index 5aaf3d39e..7983acc58 100644
--- a/SmartDeviceLink.podspec
+++ b/SmartDeviceLink.podspec
@@ -1,7 +1,7 @@
Pod::Spec.new do |s|
s.name = "SmartDeviceLink"
-s.version = "6.5.0"
+s.version = "6.7.0"
s.summary = "Connect your app with cars!"
s.homepage = "https://github.com/smartdevicelink/SmartDeviceLink-iOS"
s.license = { :type => "New BSD", :file => "LICENSE" }
@@ -10,7 +10,7 @@ s.platform = :ios, "8.0"
s.dependency 'BiSON', '~> 1.2.0'
s.source = { :git => "https://github.com/smartdevicelink/sdl_ios.git", :tag => s.version.to_s }
s.requires_arc = true
-s.swift_version = '5.1'
+s.swift_version = '5.2'
s.default_subspec = 'Default'
@@ -61,6 +61,7 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLButtonPressMode.h',
'SmartDeviceLink/SDLCancelInteraction.h',
'SmartDeviceLink/SDLCancelInteractionResponse.h',
+'SmartDeviceLink/SDLCapacityUnit.h',
'SmartDeviceLink/SDLCarModeStatus.h',
'SmartDeviceLink/SDLCarWindowViewController.h',
'SmartDeviceLink/SDLChangeRegistration.h',
@@ -111,6 +112,7 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLDisplayMode.h',
'SmartDeviceLink/SDLDisplayType.h',
'SmartDeviceLink/SDLDistanceUnit.h',
+'SmartDeviceLink/SDLDriverDistractionCapability.h',
'SmartDeviceLink/SDLDriverDistractionState.h',
'SmartDeviceLink/SDLECallConfirmationStatus.h',
'SmartDeviceLink/SDLECallInfo.h',
@@ -268,6 +270,7 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLPerformInteraction.h',
'SmartDeviceLink/SDLPerformInteractionResponse.h',
'SmartDeviceLink/SDLPermissionConstants.h',
+'SmartDeviceLink/SDLPermissionElement.h',
'SmartDeviceLink/SDLPermissionItem.h',
'SmartDeviceLink/SDLPermissionManager.h',
'SmartDeviceLink/SDLPermissionStatus.h',
@@ -310,6 +313,7 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLRPCMessageType.h',
'SmartDeviceLink/SDLRPCNotification.h',
'SmartDeviceLink/SDLRPCNotificationNotification.h',
+'SmartDeviceLink/SDLRPCPermissionStatus.h',
'SmartDeviceLink/SDLRPCRequest.h',
'SmartDeviceLink/SDLRPCRequestNotification.h',
'SmartDeviceLink/SDLRPCResponse.h',
@@ -326,7 +330,6 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLSeatLocationCapability.h',
'SmartDeviceLink/SDLSeatMemoryAction.h',
'SmartDeviceLink/SDLSeatMemoryActionType.h',
-'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSecurityType.h',
'SmartDeviceLink/SDLSendHapticData.h',
'SmartDeviceLink/SDLSendHapticDataResponse.h',
@@ -378,6 +381,7 @@ sdefault.public_header_files = [
'SmartDeviceLink/SDLSubscribeVehicleDataResponse.h',
'SmartDeviceLink/SDLSubscribeWaypoints.h',
'SmartDeviceLink/SDLSubscribeWaypointsResponse.h',
+'SmartDeviceLink/SDLSupportedSeat.h',
'SmartDeviceLink/SDLSyncMsgVersion.h',
'SmartDeviceLink/SDLMsgVersion.h',
'SmartDeviceLink/SDLSyncPData.h',
diff --git a/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard b/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard
index bb41a9a2d..e18e4a98f 100644
--- a/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard
+++ b/SmartDeviceLink/Assets/Base.lproj/SDLLockScreen.storyboard
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="sao-xX-Ugl">
- <device id="retina5_5" orientation="landscape" appearance="light"/>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="16096" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES" initialViewController="sao-xX-Ugl">
+ <device id="retina5_5" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
- <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15510"/>
+ <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="16087"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<scenes>
@@ -16,18 +16,18 @@
<viewControllerLayoutGuide type="bottom" id="wh4-r5-yql"/>
</layoutGuides>
<view key="view" contentMode="scaleToFill" id="daa-1b-9se">
- <rect key="frame" x="0.0" y="0.0" width="736" height="414"/>
+ <rect key="frame" x="0.0" y="0.0" width="414" height="736"/>
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
<subviews>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="fyC-E0-YKF">
- <rect key="frame" x="308" y="341" width="120" height="36"/>
+ <rect key="frame" x="147" y="663" width="120" height="36"/>
<constraints>
<constraint firstAttribute="width" constant="120" id="Pm5-yr-PT3"/>
<constraint firstAttribute="height" constant="36" id="yVy-ww-yMp"/>
</constraints>
</imageView>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Locked for your safety" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2GC-iG-Bjq">
- <rect key="frame" x="20" y="389" width="696" height="17"/>
+ <rect key="frame" x="20" y="711" width="374" height="17"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="14"/>
<color key="textColor" red="0.0" green="0.0" blue="0.0" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<nil key="highlightedColor"/>
@@ -47,14 +47,14 @@
</constraints>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="b2o-8D-i9T">
- <rect key="frame" x="275.66666666666669" y="169" width="185" height="76"/>
+ <rect key="frame" x="114.66666666666669" y="330" width="185" height="76"/>
<constraints>
<constraint firstAttribute="width" constant="185" id="CE6-0z-Lmn"/>
<constraint firstAttribute="height" constant="76" id="emS-mJ-Ryy"/>
</constraints>
</imageView>
<view opaque="NO" alpha="0.0" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="yyo-mJ-82g" userLabel="Center Spacer View">
- <rect key="frame" x="367" y="206" width="2" height="2"/>
+ <rect key="frame" x="206" y="367" width="2" height="2"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstAttribute="height" constant="2" id="1D8-iN-cG4"/>
@@ -62,7 +62,7 @@
</constraints>
</view>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="M7Q-8D-weT">
- <rect key="frame" x="532" y="143" width="184" height="128"/>
+ <rect key="frame" x="87" y="418" width="240" height="128"/>
<constraints>
<constraint firstAttribute="height" constant="128" id="1Px-le-yzw"/>
<constraint firstAttribute="width" constant="240" id="eVl-bJ-3TM"/>
@@ -79,7 +79,7 @@
</variation>
</imageView>
<imageView userInteractionEnabled="NO" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="qlE-SZ-K9i">
- <rect key="frame" x="20" y="143" width="184" height="128"/>
+ <rect key="frame" x="87" y="190" width="240" height="128"/>
<constraints>
<constraint firstAttribute="width" constant="240" id="Bk8-YV-DHy"/>
<constraint firstAttribute="height" constant="128" id="boE-Tt-Ols"/>
@@ -168,14 +168,14 @@
<include reference="MKF-hz-tMZ"/>
</mask>
<mask key="constraints">
- <exclude reference="3M5-ke-rxH"/>
- <exclude reference="gwo-mS-ib9"/>
- <exclude reference="Bda-7E-hB1"/>
- <exclude reference="d7Z-Gl-Q0P"/>
<include reference="PAm-2N-EDL"/>
<include reference="WXE-1r-KaS"/>
<exclude reference="a80-NE-fUz"/>
<include reference="euB-xP-ET0"/>
+ <exclude reference="3M5-ke-rxH"/>
+ <exclude reference="gwo-mS-ib9"/>
+ <exclude reference="Bda-7E-hB1"/>
+ <exclude reference="d7Z-Gl-Q0P"/>
<include reference="6A2-Sa-iGG"/>
<include reference="SM4-aR-RUB"/>
<include reference="5Z9-0c-ZVz"/>
@@ -196,14 +196,14 @@
<include reference="MKF-hz-tMZ"/>
</mask>
<mask key="constraints">
- <exclude reference="3M5-ke-rxH"/>
- <exclude reference="gwo-mS-ib9"/>
- <exclude reference="Bda-7E-hB1"/>
- <exclude reference="d7Z-Gl-Q0P"/>
<include reference="PAm-2N-EDL"/>
<include reference="WXE-1r-KaS"/>
<exclude reference="a80-NE-fUz"/>
<include reference="euB-xP-ET0"/>
+ <exclude reference="3M5-ke-rxH"/>
+ <exclude reference="gwo-mS-ib9"/>
+ <exclude reference="Bda-7E-hB1"/>
+ <exclude reference="d7Z-Gl-Q0P"/>
<include reference="6A2-Sa-iGG"/>
<include reference="SM4-aR-RUB"/>
<include reference="5Z9-0c-ZVz"/>
@@ -231,7 +231,7 @@
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="Wfa-ZV-GKT" userLabel="First Responder" sceneMemberID="firstResponder"/>
</objects>
- <point key="canvasLocation" x="878.804347826087" y="886.95652173913049"/>
+ <point key="canvasLocation" x="501" y="885"/>
</scene>
</scenes>
<resources>
diff --git a/SmartDeviceLink/SDLAddSubMenu.h b/SmartDeviceLink/SDLAddSubMenu.h
index 6f289e811..fbd8d872c 100644
--- a/SmartDeviceLink/SDLAddSubMenu.h
+++ b/SmartDeviceLink/SDLAddSubMenu.h
@@ -1,4 +1,34 @@
-// SDLAddSubMenu.h
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLRPCRequest.h"
@@ -25,13 +55,30 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLAddSubMenu : SDLRPCRequest
+/**
+ * @param menuID - @(menuID)
+ * @param menuName - menuName
+ * @return A SDLAddSubMenu object
+ */
+- (instancetype)initWithMenuID:(UInt32)menuID menuName:(NSString *)menuName;
+
+/**
+ * @param menuID - @(menuID)
+ * @param menuName - menuName
+ * @param position - position
+ * @param menuIcon - menuIcon
+ * @param menuLayout - menuLayout
+ * @param parentID - parentID
+ * @return A SDLAddSubMenu object
+ */
+- (instancetype)initWithMenuID:(UInt32)menuID menuName:(NSString *)menuName position:(nullable NSNumber<SDLUInt> *)position menuIcon:(nullable SDLImage *)menuIcon menuLayout:(nullable SDLMenuLayout)menuLayout parentID:(nullable NSNumber<SDLUInt> *)parentID;
/// Convenience init for creating an add submenu
///
/// @param menuId A menu id
/// @param menuName The menu name
/// @return An SDLAddSubMenu object
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName;
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName __deprecated_msg("Use initWithMenuID:menuName: instead");
/// Convenience init for creating an add submenu
///
@@ -39,7 +86,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @param menuName The menu name
/// @param position The position within the menu to add
/// @return An SDLAddSubMenu object
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position __deprecated_msg("Use initWithId:menuName:menuLayout:menuIcon:position: instead");
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName position:(UInt8)position __deprecated_msg("Use initWithMenuID:menuName:position:menuIcon:menuLayout:parentID: instead");
/// Convenience init for creating an add submenu
///
@@ -48,7 +95,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @param icon The icon to show on the menu item
/// @param position The position within the menu to add
/// @return An SDLAddSubMenu object
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuIcon:(nullable SDLImage *)icon position:(UInt8)position __deprecated_msg("Use initWithId:menuName:menuLayout:menuIcon:position: instead");
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuIcon:(nullable SDLImage *)icon position:(UInt8)position __deprecated_msg("Use initWithMenuID:menuName:position:menuIcon:menuLayout:parentID: instead");
/// Convenience init for creating an add submenu with all properties.
///
@@ -58,7 +105,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @param icon The icon to show on the menu item
/// @param position The position within the menu to add
/// @return An SDLAddSubMenu object
-- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuLayout:(nullable SDLMenuLayout)menuLayout menuIcon:(nullable SDLImage *)icon position:(UInt8)position;
+- (instancetype)initWithId:(UInt32)menuId menuName:(NSString *)menuName menuLayout:(nullable SDLMenuLayout)menuLayout menuIcon:(nullable SDLImage *)icon position:(UInt8)position __deprecated_msg("Use initWithMenuID:menuName:position:menuIcon:menuLayout:parentID: instead");
/**
* a Menu ID that identifies a sub menu
@@ -104,6 +151,14 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (strong, nonatomic, nullable) SDLMenuLayout menuLayout;
+/**
+ * Unique ID of the sub menu the command will be added to. If not provided or 0, it will be provided to the top level of the in application menu.
+ * {"default_value": 0, "max_value": 2000000000, "min_value": 0}
+ *
+ * @since SDL 7.0.0
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *parentID;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAddSubMenu.m b/SmartDeviceLink/SDLAddSubMenu.m
index 649a10a31..91dbc11ba 100644
--- a/SmartDeviceLink/SDLAddSubMenu.m
+++ b/SmartDeviceLink/SDLAddSubMenu.m
@@ -1,4 +1,34 @@
-// SDLAddSubMenu.m
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLAddSubMenu.h"
@@ -51,6 +81,28 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithMenuID:(UInt32)menuID menuName:(NSString *)menuName {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.menuID = @(menuID);
+ self.menuName = menuName;
+ return self;
+}
+
+- (instancetype)initWithMenuID:(UInt32)menuID menuName:(NSString *)menuName position:(nullable NSNumber<SDLUInt> *)position menuIcon:(nullable SDLImage *)menuIcon menuLayout:(nullable SDLMenuLayout)menuLayout parentID:(nullable NSNumber<SDLUInt> *)parentID {
+ self = [self initWithMenuID:menuID menuName:menuName];
+ if (!self) {
+ return nil;
+ }
+ self.position = position;
+ self.menuIcon = menuIcon;
+ self.menuLayout = menuLayout;
+ self.parentID = parentID;
+ return self;
+}
+
- (void)setMenuID:(NSNumber<SDLInt> *)menuID {
[self.parameters sdl_setObject:menuID forName:SDLRPCParameterNameMenuId];
}
@@ -93,6 +145,14 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_enumForName:SDLRPCParameterNameMenuLayout error:nil];
}
+- (void)setParentID:(nullable NSNumber<SDLUInt> *)parentID {
+ [self.parameters sdl_setObject:parentID forName:SDLRPCParameterNameParentID];
+}
+
+- (nullable NSNumber<SDLUInt> *)parentID {
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameParentID ofClass:NSNumber.class error:nil];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLAppHMIType.h b/SmartDeviceLink/SDLAppHMIType.h
index 21ff96e61..6cd653cd2 100644
--- a/SmartDeviceLink/SDLAppHMIType.h
+++ b/SmartDeviceLink/SDLAppHMIType.h
@@ -69,3 +69,11 @@ extern SDLAppHMIType const SDLAppHMITypeSystem;
/**
* Remote control */
extern SDLAppHMIType const SDLAppHMITypeRemoteControl;
+
+
+/**
+ * WebEngine Projection mode
+ *
+ * @since 7.0
+ */
+extern SDLAppHMIType const SDLAppHMITypeWebView;
diff --git a/SmartDeviceLink/SDLAppHMIType.m b/SmartDeviceLink/SDLAppHMIType.m
index 070ad089b..7e24ef6d6 100644
--- a/SmartDeviceLink/SDLAppHMIType.m
+++ b/SmartDeviceLink/SDLAppHMIType.m
@@ -16,3 +16,4 @@ SDLAppHMIType const SDLAppHMITypeBackgroundProcess = @"BACKGROUND_PROCESS";
SDLAppHMIType const SDLAppHMITypeTesting = @"TESTING";
SDLAppHMIType const SDLAppHMITypeSystem = @"SYSTEM";
SDLAppHMIType const SDLAppHMITypeRemoteControl = @"REMOTE_CONTROL";
+SDLAppHMIType const SDLAppHMITypeWebView = @"WEB_VIEW";
diff --git a/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h b/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h
index 8b30c6438..e8093025d 100644
--- a/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h
+++ b/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.h
@@ -73,3 +73,9 @@ extern SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReason
///
/// @since RPC 4.1
extern SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource;
+
+
+/// The application is unregistered due to hardware resource constraints. The system will shortly close the application to free up hardware resources.
+///
+/// @since RPC 7.0
+extern SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonResourceConstraint;
diff --git a/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.m b/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.m
index 8bc3231cf..12b8ed1f5 100644
--- a/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.m
+++ b/SmartDeviceLink/SDLAppInterfaceUnregisteredReason.m
@@ -16,3 +16,4 @@ SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonFactory
SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonAppUnauthorized = @"APP_UNAUTHORIZED";
SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonProtocolViolation = @"PROTOCOL_VIOLATION";
SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource = @"UNSUPPORTED_HMI_RESOURCE";
+SDLAppInterfaceUnregisteredReason const SDLAppInterfaceUnregisteredReasonResourceConstraint = @"RESOURCE_CONSTRAINT";
diff --git a/SmartDeviceLink/SDLAppServiceManifest.h b/SmartDeviceLink/SDLAppServiceManifest.h
index 94069d104..1548181a1 100644
--- a/SmartDeviceLink/SDLAppServiceManifest.h
+++ b/SmartDeviceLink/SDLAppServiceManifest.h
@@ -191,7 +191,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* Array of Integers, See `SDLFunctionID`, Optional
*/
-@property (nullable, strong, nonatomic) NSArray<NSNumber<SDLInt> *> *handledRPCs;
+@property (nullable, strong, nonatomic) NSArray<NSNumber *> *handledRPCs;
/**
* A media service manifest.
diff --git a/SmartDeviceLink/SDLAppServiceManifest.m b/SmartDeviceLink/SDLAppServiceManifest.m
index 3a40c9cd0..fe5849145 100644
--- a/SmartDeviceLink/SDLAppServiceManifest.m
+++ b/SmartDeviceLink/SDLAppServiceManifest.m
@@ -168,11 +168,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectForName:SDLRPCParameterNameRPCSpecVersion ofClass:SDLMsgVersion.class error:nil];
}
-- (void)setHandledRPCs:(nullable NSArray<NSNumber<SDLInt> *> *)handledRPCs {
+- (void)setHandledRPCs:(nullable NSArray<NSNumber *> *)handledRPCs {
[self.store sdl_setObject:handledRPCs forName:SDLRPCParameterNameHandledRPCs];
}
-- (nullable NSArray<NSNumber<SDLInt> *> *)handledRPCs {
+- (nullable NSArray<NSNumber *> *)handledRPCs {
return [self.store sdl_objectsForName:SDLRPCParameterNameHandledRPCs ofClass:NSNumber.class error:nil];
}
diff --git a/SmartDeviceLink/SDLAudioStreamManager.h b/SmartDeviceLink/SDLAudioStreamManager.h
index 131f2df8b..7ec8a5918 100755
--- a/SmartDeviceLink/SDLAudioStreamManager.h
+++ b/SmartDeviceLink/SDLAudioStreamManager.h
@@ -16,18 +16,6 @@
NS_ASSUME_NONNULL_BEGIN
-/// Error relates to AudioStreamManager
-extern NSString *const SDLErrorDomainAudioStreamManager;
-
-/// AudioStreamManager errors
-typedef NS_ENUM(NSInteger, SDLAudioStreamManagerError) {
- /// The audio stream is not currently connected
- SDLAudioStreamManagerErrorNotConnected = -1,
-
- /// Attempted to play but there's no audio in the queue
- SDLAudioStreamManagerErrorNoQueuedAudio = -2
-};
-
/**
The manager to control the audio stream
*/
diff --git a/SmartDeviceLink/SDLAudioStreamManager.m b/SmartDeviceLink/SDLAudioStreamManager.m
index 11d39812a..f8486272a 100755
--- a/SmartDeviceLink/SDLAudioStreamManager.m
+++ b/SmartDeviceLink/SDLAudioStreamManager.m
@@ -9,18 +9,17 @@
#import "SDLAudioStreamManager.h"
#import "SDLAudioFile.h"
+#import "SDLAudioStreamManagerDelegate.h"
+#import "SDLError.h"
#import "SDLFile.h"
#import "SDLGlobals.h"
#import "SDLLogMacros.h"
#import "SDLManager.h"
#import "SDLPCMAudioConverter.h"
-#import "SDLAudioStreamManagerDelegate.h"
#import "SDLStreamingAudioManagerType.h"
NS_ASSUME_NONNULL_BEGIN
-NSString *const SDLErrorDomainAudioStreamManager = @"com.sdl.extension.pcmAudioStreamManager";
-
@interface SDLAudioStreamManager ()
@property (weak, nonatomic) id<SDLStreamingAudioManagerType> streamManager;
@@ -126,7 +125,7 @@ NSString *const SDLErrorDomainAudioStreamManager = @"com.sdl.extension.pcmAudioS
if (!self.streamManager.isAudioConnected) {
if (self.delegate != nil) {
- NSError *error = [NSError errorWithDomain:SDLErrorDomainAudioStreamManager code:SDLAudioStreamManagerErrorNotConnected userInfo:nil];
+ NSError *error = [NSError sdl_audioStreamManager_notConnected];
[self.delegate audioStreamManager:self errorDidOccurForFile:self.mutableQueue.firstObject.inputFileURL error:error];
}
return;
diff --git a/SmartDeviceLink/SDLBackgroundTaskManager.h b/SmartDeviceLink/SDLBackgroundTaskManager.h
index 0732b6fda..8d9f18ad1 100644
--- a/SmartDeviceLink/SDLBackgroundTaskManager.h
+++ b/SmartDeviceLink/SDLBackgroundTaskManager.h
@@ -16,6 +16,10 @@ NS_ASSUME_NONNULL_BEGIN
*/
@interface SDLBackgroundTaskManager : NSObject
+/// Handler called when the background task is about to expire. Use this handler to perform some cleanup before the background task is destroyed. When you have finished cleanup, you must call the `endBackgroundTask` function so the background task can be destroyed. If you do not call `endBackgroundTask`, the system may kill the app.
+/// @return Whether or not to wait for the subscriber to cleanup. If NO, the background task will be killed immediately. If YES, the background task will not be destroyed until the `endBackgroundTask` method is called by the subscriber.
+@property (copy, nonatomic, nullable) BOOL (^taskExpiringHandler)(void);
+
- (instancetype)init NS_UNAVAILABLE;
/**
@@ -26,17 +30,10 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (instancetype)initWithBackgroundTaskName:(NSString *)backgroundTaskName;
-/**
- * Starts a background task that allows the app to establish a session while app is backgrounded. If the app is not currently backgrounded, the background task will remain dormant until the app moves to the background.
- */
+/// Starts a background task. If the app is not currently backgrounded, the background task will remain dormant until the app moves to the background.
- (void)startBackgroundTask;
-/**
- * Cleans up a background task when it is stopped. This should be called when:
- *
- * 1. The app has established a session.
- * 2. The system has called the `expirationHandler` for the background task. The system may kill the app if the background task is not ended when `expirationHandler` is called.
- */
+/// Destroys the background task.
- (void)endBackgroundTask;
@end
diff --git a/SmartDeviceLink/SDLBackgroundTaskManager.m b/SmartDeviceLink/SDLBackgroundTaskManager.m
index 2109a40cd..7746008cf 100644
--- a/SmartDeviceLink/SDLBackgroundTaskManager.m
+++ b/SmartDeviceLink/SDLBackgroundTaskManager.m
@@ -22,7 +22,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLBackgroundTaskManager
- (instancetype)initWithBackgroundTaskName:(NSString *)backgroundTaskName {
- SDLLogV(@"SDLBackgroundTaskManager init with name %@", backgroundTaskName);
+ SDLLogV(@"Creating background task manager with name %@", backgroundTaskName);
self = [super init];
if (!self) {
return nil;
@@ -39,27 +39,47 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
- __weak typeof(self) weakself = self;
+ __weak typeof(self) weakSelf = self;
self.currentBackgroundTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithName:self.backgroundTaskName expirationHandler:^{
- SDLLogD(@"The %@ background task expired", self.backgroundTaskName);
- [weakself endBackgroundTask];
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ SDLLogD(@"The background task %@ is expiring.", strongSelf.backgroundTaskName);
+
+ // We have ~1 second to do cleanup before ending the background task. If we take too long, the system will kill the app.
+ if (strongSelf.taskExpiringHandler != nil) {
+ SDLLogD(@"Checking if subscriber wants to to perform some cleanup before ending the background task %@", strongSelf.backgroundTaskName);
+ BOOL waitForCleanupToFinish = strongSelf.taskExpiringHandler();
+ if (waitForCleanupToFinish) {
+ SDLLogD(@"The subscriber will end background task itself %@. Waiting...", self.backgroundTaskName);
+ } else {
+ SDLLogV(@"Subscriber does not want to perform cleanup. Ending the background task %@", strongSelf.backgroundTaskName);
+ [strongSelf endBackgroundTask];
+ }
+ } else {
+ // No subscriber. Just end the background task.
+ SDLLogV(@"Ending background task %@", strongSelf.backgroundTaskName);
+ [strongSelf endBackgroundTask];
+ }
}];
SDLLogD(@"The %@ background task started with id: %lu", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId);
}
- (void)endBackgroundTask {
+ SDLLogV(@"Attempting to end background task %@", self.backgroundTaskName);
+ self.taskExpiringHandler = nil;
+
if (self.currentBackgroundTaskId == UIBackgroundTaskInvalid) {
- SDLLogV(@"Background task already ended. Returning...");
+ SDLLogV(@"Background task %@ with id %lu already ended. Returning...", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId);
return;
}
- SDLLogD(@"Ending background task with id: %lu", (unsigned long)self.currentBackgroundTaskId);
+ SDLLogD(@"Ending background task %@ with id: %lu", self.backgroundTaskName, (unsigned long)self.currentBackgroundTaskId);
[[UIApplication sharedApplication] endBackgroundTask:self.currentBackgroundTaskId];
self.currentBackgroundTaskId = UIBackgroundTaskInvalid;
}
- (void)dealloc {
+ SDLLogV(@"Destroying the manager");
[self endBackgroundTask];
}
diff --git a/SmartDeviceLink/SDLButtonPress.h b/SmartDeviceLink/SDLButtonPress.h
index 56b9bcadd..c5769ca6d 100644
--- a/SmartDeviceLink/SDLButtonPress.h
+++ b/SmartDeviceLink/SDLButtonPress.h
@@ -24,7 +24,7 @@ Constructs a newly allocated SDLButtonPress object with the given parameters
@return An instance of the SDLButtonPress class.
*/
-- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType __deprecated_msg(("Use initWithButtonName:moduleType:moduleId: instead"));;
+- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType __deprecated_msg(("Use initWithButtonName:moduleType:moduleId:buttonPressMode: instead"));;
/**
Constructs a newly allocated SDLButtonPress object with the given parameters
@@ -35,7 +35,19 @@ Constructs a newly allocated SDLButtonPress object with the given parameters
@return An instance of the SDLButtonPress class.
*/
-- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType moduleId:(nullable NSString *)moduleId;
+- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType moduleId:(nullable NSString *)moduleId __deprecated_msg(("Use initWithButtonName:moduleType:moduleId:buttonPressMode: instead"));;
+
+/**
+Constructs a newly allocated SDLButtonPress object with the given parameters
+
+@param buttonName the name of the button
+@param moduleType the module where the button should be pressed
+@param moduleId the id of the module
+@param buttonPressMode indicates LONG or SHORT button press event
+
+@return An instance of the SDLButtonPress class.
+*/
+- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType moduleId:(nullable NSString *)moduleId buttonPressMode:(SDLButtonPressMode)buttonPressMode;
/**
* The module where the button should be pressed.
diff --git a/SmartDeviceLink/SDLButtonPress.m b/SmartDeviceLink/SDLButtonPress.m
index 4f215c206..419f0d7f6 100644
--- a/SmartDeviceLink/SDLButtonPress.m
+++ b/SmartDeviceLink/SDLButtonPress.m
@@ -37,10 +37,24 @@ NS_ASSUME_NONNULL_BEGIN
if (!self) {
return nil;
}
+
+ self.buttonName = buttonName;
+ self.moduleType = moduleType;
+ self.moduleId = moduleId;
+
+ return self;
+}
+
+- (instancetype)initWithButtonName:(SDLButtonName)buttonName moduleType:(SDLModuleType)moduleType moduleId:(nullable NSString *)moduleId buttonPressMode:(SDLButtonPressMode)buttonPressMode {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
self.buttonName = buttonName;
self.moduleType = moduleType;
self.moduleId = moduleId;
+ self.buttonPressMode = buttonPressMode;
return self;
}
diff --git a/SmartDeviceLink/SDLCacheFileManager.h b/SmartDeviceLink/SDLCacheFileManager.h
new file mode 100644
index 000000000..abdd957d1
--- /dev/null
+++ b/SmartDeviceLink/SDLCacheFileManager.h
@@ -0,0 +1,29 @@
+//
+// SDLCacheFileManager.h
+// SmartDeviceLink
+//
+// Created by James Lapinski on 3/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+@class SDLOnSystemRequest;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^ImageRetrievalCompletionHandler)(UIImage * _Nullable image, NSError * _Nullable error);
+
+@interface SDLCacheFileManager : NSObject
+
+/**
+ * Handles a system request from the head unit to use a lock screen icon from a URL.
+ *
+ * @param request The system request from the head unit for the icon specified in its URL.
+ * @param completion The handler called when the manager retrieves the icon or fails to do so with an error.
+*/
+- (void)retrieveImageForRequest:(SDLOnSystemRequest *)request withCompletionHandler:(ImageRetrievalCompletionHandler)completion;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLCacheFileManager.m b/SmartDeviceLink/SDLCacheFileManager.m
new file mode 100644
index 000000000..e5b1e23e9
--- /dev/null
+++ b/SmartDeviceLink/SDLCacheFileManager.m
@@ -0,0 +1,292 @@
+//
+// SDLCacheFileManager.m
+// SmartDeviceLink
+//
+// Created by James Lapinski on 3/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <CommonCrypto/CommonDigest.h>
+
+#import "SDLCacheFileManager.h"
+#import "SDLError.h"
+#import "SDLIconArchiveFile.h"
+#import "SDLLogMacros.h"
+#import "SDLOnSystemRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+static float DefaultConnectionTimeout = 45.0;
+NSString *const SDLErrorDomainCacheManager = @"com.sdl.cacheManager";
+
+@interface SDLCacheFileManager()
+
+@property (nonatomic, strong) NSURLSession *urlSession;
+@property (strong, nonatomic, readonly) NSString *cacheFileBaseDirectory;
+@property (strong, nonatomic, readonly) NSString *archiveFilePath;
+@property (strong, nonatomic, nullable) NSURLSessionDataTask *dataTask;
+@property (strong, nonatomic) NSFileManager *fileManager;
+
+@end
+
+@implementation SDLCacheFileManager
+
+- (instancetype)init {
+ self = [super init];
+ if (!self) { return nil; }
+
+ NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
+ configuration.timeoutIntervalForRequest = DefaultConnectionTimeout;
+ configuration.timeoutIntervalForResource = DefaultConnectionTimeout;
+ configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
+
+ _urlSession = [NSURLSession sessionWithConfiguration:configuration];
+ _fileManager = [NSFileManager defaultManager];
+
+ return self;
+}
+
+- (void)retrieveImageForRequest:(SDLOnSystemRequest *)request withCompletionHandler:(ImageRetrievalCompletionHandler)completion {
+ NSError *error = nil;
+ UIImage *icon = nil;
+
+ // Check if the directory already exists; if it does not, create it
+ if (![self.fileManager fileExistsAtPath:self.cacheFileBaseDirectory]) {
+ [self.fileManager createDirectoryAtPath:self.cacheFileBaseDirectory withIntermediateDirectories:YES attributes:nil error:&error];
+
+ if (error != nil) {
+ SDLLogE(@"Could not create directory at specified path: %@; we will attempt to download and return image anyway", error);
+ }
+ }
+
+ // Attempt to retrieve archive file from directory cache
+ SDLIconArchiveFile *iconArchiveFile = nil;
+ @try {
+ iconArchiveFile = [NSKeyedUnarchiver unarchiveObjectWithFile:self.archiveFilePath];
+ } @catch (NSException *exception) {
+ SDLLogE(@"Unable to retrieve archive file from file path: %@", exception);
+ }
+
+ // Check if there's no archive file in the directory. If there isn't clear the entire directory
+ if (iconArchiveFile == nil || iconArchiveFile.lockScreenIconCaches.count == 0) {
+ [self.class sdl_clearDirectoryWithPath:self.cacheFileBaseDirectory fileManager:self.fileManager];
+ iconArchiveFile = [[SDLIconArchiveFile alloc] init];
+ }
+
+ // Loop through the icons in the cache file copy and check if it's the file we're looking for
+ NSArray *iconCachesCopy = [iconArchiveFile.lockScreenIconCaches copy];
+ for (SDLLockScreenIconCache *iconCache in iconCachesCopy) {
+ // The icon isn't the one we're looking for
+ if (![iconCache.iconUrl isEqualToString:request.url]) { continue; }
+
+ // The icon we're looking for has expired
+ if ([self.class numberOfDaysFromDateCreated:iconCache.lastModifiedDate] >= 30) { break; }
+
+ // Create the file path for the image by hashing the URL which creates a guaranteed unique path name
+ NSString *imageFilePath = [self.cacheFileBaseDirectory stringByAppendingPathComponent:[self.class sdl_md5HashFromString:request.url]];
+ icon = [UIImage imageWithContentsOfFile:imageFilePath];
+
+ // If we fail to get icon at path, break loop early to download new icon
+ if (icon == nil) {
+ SDLLogW(@"No icon was found at the path, we need to download a new icon");
+ [self.class sdl_clearDirectoryWithPath:self.cacheFileBaseDirectory fileManager:self.fileManager];
+ iconArchiveFile = [[SDLIconArchiveFile alloc] init];
+ break;
+ }
+
+ return completion(icon, nil);
+ }
+
+ // If we got to this point, retrieving the icon failed for some reason. We will download the image and try to store it instead.
+ [self sdl_downloadIconFromRequestURL:request.url withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogE(@"Downloading the lock screen icon failed with error: %@", error);
+ return completion(nil, error);
+ }
+
+ // Save lock screen icon to file path
+ NSString *iconFilePath = [self.class sdl_writeImage:image toFilePath:self.cacheFileBaseDirectory imageURL:request.url];
+ if (iconFilePath == nil) {
+ SDLLogE(@"Could not save lock screen icon to path with error: %@; we will return the image anyway", error);
+ return completion(image, nil);
+ }
+
+ // Update archive file with icon
+ BOOL writeSuccess = [self updateArchiveFileWithIconURL:request.url iconFilePath:iconFilePath archiveFile:iconArchiveFile error:&error];
+ if (error != nil || !writeSuccess) {
+ SDLLogE(@"Could not update archive file with error: %@; we will return the image anyway", error);
+ }
+
+ return completion(image, nil);
+ }];
+}
+
+
+#pragma mark - Cache Directory and Files
+
+/**
+ * Handles the request to clear all files from lock screen icon directory in cache.
+*/
++ (void)sdl_clearDirectoryWithPath:(NSString *)path fileManager:(NSFileManager *)fileManager {
+ NSError *error = nil;
+ for (NSString *file in [fileManager contentsOfDirectoryAtPath:path error:&error]) {
+ if (error != nil) {
+ SDLLogE(@"Cannot clear directory; failed retrieving contents of directory: %@ with error: %@", path, error);
+ break;
+ }
+
+ BOOL success = [fileManager removeItemAtPath:[path stringByAppendingPathComponent:file] error:&error];
+ if (!success || error != nil) {
+ SDLLogE(@"Could not clear directory at path: %@; Could not delete file: %@", path, error);
+ break;
+ }
+ }
+}
+
+/**
+ * Handles request to save icon image to cache.
+ *
+ * @param icon The icon to be saved to the cache
+ * @param filePath The directory location to save the icon at
+ * @param urlString The url of the icon to be hashed and used as file name
+ * @return A string representation of the directory the icon was saved to
+*/
++ (nullable NSString *)sdl_writeImage:(UIImage *)icon toFilePath:(NSString *)filePath imageURL:(NSString *)urlString {
+ NSError *error = nil;
+
+ NSData *iconPNGData = UIImagePNGRepresentation(icon);
+ NSString *iconStorageName = [self.class sdl_md5HashFromString:urlString];
+ NSString *imageFilePath = [filePath stringByAppendingPathComponent:[iconStorageName stringByAppendingString:@".png"]];
+
+ BOOL writeSuccess = [iconPNGData writeToFile:imageFilePath atomically:YES];
+ if (!writeSuccess) {
+ SDLLogE(@"Could not write image file to specified path: %@", error);
+ return nil;
+ }
+
+ return imageFilePath;
+}
+
+/**
+ * Handles request to update archive file. Will create a new archive file if one is not present.
+ *
+ * @param iconURL The System request URL used to retrieve the icon
+ * @param iconFilePath The directory path where the icon file is held
+ * @param archiveFile Current archive file to update
+ * @param error An error that occurs if the archiver fails to archive the object to file
+*/
+- (BOOL)updateArchiveFileWithIconURL:(NSString *)iconURL
+ iconFilePath:(NSString *)iconFilePath
+ archiveFile:(SDLIconArchiveFile *)archiveFile
+ error:(NSError **)error {
+ NSMutableArray *archiveArray = [archiveFile.lockScreenIconCaches mutableCopy];
+
+ // Need to remove duplicate SDLLockScreenIconCache object if handling expired icon
+ for (SDLLockScreenIconCache *iconCacheCopy in archiveArray) {
+ if ([iconCacheCopy.iconUrl isEqualToString:iconURL]) {
+ [archiveArray removeObject:iconCacheCopy];
+ break;
+ }
+ }
+
+ // Add the new file to the archive
+ [archiveArray addObject:[[SDLLockScreenIconCache alloc] initWithIconUrl:iconURL iconFilePath:iconFilePath]];
+ archiveFile.lockScreenIconCaches = archiveArray;
+
+ // HAX: Update this when we are iOS 11.0+. You will need to create a data object using 'archivedDataWithRootObject:requiringSecureCoding:error:', and write it to file using 'writeToFile:options:error:'
+ // Write the new archive to disk
+ BOOL writeSuccess = [NSKeyedArchiver archiveRootObject:archiveFile toFile:self.archiveFilePath];
+ if (!writeSuccess) {
+ if (!*error) {
+ *error = [NSError errorWithDomain:SDLErrorDomainCacheFileManager code:SDLCacheManagerErrorUpdateIconArchiveFileFailure userInfo:nil];
+ SDLLogE(@"Error attempting to write archive file to cache: %@", *error);
+ }
+
+ return NO;
+ }
+
+ return YES;
+}
+
+
+#pragma mark - Directory Getters
+
+- (NSString *)cacheFileBaseDirectory {
+ NSString *cacheDirectory = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
+ return [cacheDirectory stringByAppendingPathComponent:@"/sdl/lockScreenIcon/"];
+}
+
+- (NSString *)archiveFilePath {
+ return [self.cacheFileBaseDirectory stringByAppendingPathComponent:@"archiveCacheFile.plist"];
+}
+
+
+#pragma mark - Download Image
+
+/**
+ * Handles request to download icon from request
+ *
+ * @param requestURL The System request URL used to download icon
+ * @param completion The completion handler is called when the icon download succeeds or fails with error
+*/
+- (void)sdl_downloadIconFromRequestURL:(NSString *)requestURL withCompletionHandler:(ImageRetrievalCompletionHandler)completion {
+ NSURL *url = [NSURL URLWithString:requestURL];
+ if ([url.scheme isEqualToString:@"http"]) {
+ url = [NSURL URLWithString:[requestURL stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]];
+ }
+
+ self.dataTask = [self.urlSession dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogW(@"Lock screen icon download task failed: %@", error);
+ return completion(nil, error);
+ }
+
+ UIImage *icon = [UIImage imageWithData:data];
+ if (icon == nil) {
+ SDLLogW(@"Returned data conversion to image failed: %@", error);
+ return completion(nil, error);
+ }
+
+ return completion(icon, nil);
+ }];
+
+ [self.dataTask resume];
+}
+
+
+#pragma mark - Helper Methods
+
+/**
+ * Creates a directory friendly string representation of a URL string by hashing the URL using the MD5 hash function.
+ *
+ * HAX: A MD5 hash always creates a string with 32 characters (128-bits). Due to some implementations of Core not following the spec, file names that are too long are being rejected. To try to accommodate this setup, hashed file names are being truncated to 16 characters.
+ *
+ * @param string The string to hash
+ * @return A MD5 hash of the string
+ */
++ (NSString *)sdl_md5HashFromString:(NSString *)string {
+ const char* str = [string UTF8String];
+ unsigned char hash[CC_MD5_DIGEST_LENGTH];
+ CC_MD5(str, (CC_LONG)strlen(str), hash);
+ NSMutableString *formattedHash = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH];
+ // HAX: To shorten the string to 16 characters, the loop has been shortened to 8 fom 16.
+ for (int i = 0; i < CC_MD5_DIGEST_LENGTH / 2; i += 1) {
+ [formattedHash appendFormat:@"%02x", hash[i]];
+ }
+ return formattedHash;
+}
+
+/**
+ * Determines the number of days from a spicified date.
+ *
+ * @param date The date to be compared against
+ * @return Integer representing number of days
+ */
++ (NSInteger)numberOfDaysFromDateCreated:(NSDate *)date {
+ NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay fromDate:date toDate:[NSDate date] options:kNilOptions];
+ return components.day;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLCapacityUnit.h b/SmartDeviceLink/SDLCapacityUnit.h
new file mode 100644
index 000000000..415bd18c5
--- /dev/null
+++ b/SmartDeviceLink/SDLCapacityUnit.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SDLEnum.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @since SDL 7.0.0
+ */
+typedef SDLEnum SDLCapacityUnit SDL_SWIFT_ENUM;
+
+extern SDLCapacityUnit const SDLCapacityUnitKilograms;
+
+extern SDLCapacityUnit const SDLCapacityUnitKilowatthours;
+
+extern SDLCapacityUnit const SDLCapacityUnitLiters;
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLCapacityUnit.m b/SmartDeviceLink/SDLCapacityUnit.m
new file mode 100644
index 000000000..7e21103fa
--- /dev/null
+++ b/SmartDeviceLink/SDLCapacityUnit.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SDLCapacityUnit.h"
+
+SDLCapacityUnit const SDLCapacityUnitLiters = @"LITERS";
+SDLCapacityUnit const SDLCapacityUnitKilowatthours = @"KILOWATTHOURS";
+SDLCapacityUnit const SDLCapacityUnitKilograms = @"KILOGRAMS";
diff --git a/SmartDeviceLink/SDLCarWindow.m b/SmartDeviceLink/SDLCarWindow.m
index d6048739e..12f2e83b7 100644
--- a/SmartDeviceLink/SDLCarWindow.m
+++ b/SmartDeviceLink/SDLCarWindow.m
@@ -92,8 +92,14 @@ NS_ASSUME_NONNULL_BEGIN
CGImageRef imageRef = screenshot.CGImage;
CVPixelBufferRef pixelBuffer = [self.class sdl_pixelBufferForImageRef:imageRef usingPool:self.streamManager.pixelBufferPool];
if (pixelBuffer != nil) {
- [self.streamManager sendVideoData:pixelBuffer];
+ BOOL success = [self.streamManager sendVideoData:pixelBuffer];
+ if (!success) {
+ SDLLogE(@"Video frame will not be sent because the video frame encoding failed");
+ return;
+ }
CVPixelBufferRelease(pixelBuffer);
+ } else {
+ SDLLogE(@"Video frame will not be sent because the pixelBuffer is nil");
}
}
@@ -191,6 +197,11 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
+ if (CGRectEqualToRect(rootViewController.view.frame, self.streamManager.videoScaleManager.appViewportFrame)) {
+ SDLLogV(@"The rootViewController frame is already the correct size: %@", NSStringFromCGRect(rootViewController.view.frame));
+ return;
+ }
+
rootViewController.view.frame = self.streamManager.videoScaleManager.appViewportFrame;
rootViewController.view.bounds = rootViewController.view.frame;
diff --git a/SmartDeviceLink/SDLCharacterSet.h b/SmartDeviceLink/SDLCharacterSet.h
index 51771fe77..9cd096573 100644
--- a/SmartDeviceLink/SDLCharacterSet.h
+++ b/SmartDeviceLink/SDLCharacterSet.h
@@ -1,33 +1,98 @@
-// SDLCharacterSet.h
-//
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLEnum.h"
/**
- * Character sets supported by SDL. Used to describe text field capabilities.
+ * The list of potential character sets
*
- * @since SDL 1.0
+ * @since SDL 1.0.0
*/
typedef SDLEnum SDLCharacterSet SDL_SWIFT_ENUM;
/**
- Character Set Type 2
+ * @deprecated
+ * @since SDL 7.0.0
*/
-extern SDLCharacterSet const SDLCharacterSetType2;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+extern SDLCharacterSet const SDLCharacterSetType2 __deprecated_msg("Use Ascii, Iso88591, or Utf8 instead");
+#pragma clang diagnostic pop
/**
- Character Set Type 5
+ * @deprecated
+ * @since SDL 7.0.0
*/
-extern SDLCharacterSet const SDLCharacterSetType5;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+extern SDLCharacterSet const SDLCharacterSetType5 __deprecated_msg("Use Ascii, Iso88591, or Utf8 instead");
+#pragma clang diagnostic pop
/**
- Character Set CID1
+ * @deprecated
+ * @since SDL 7.0.0
*/
-extern SDLCharacterSet const SDLCharacterSetCID1;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+extern SDLCharacterSet const SDLCharacterSetCID1 __deprecated_msg("Use Ascii, Iso88591, or Utf8 instead");
+#pragma clang diagnostic pop
/**
- Character Set CID2
+ * @deprecated
+ * @since SDL 7.0.0
*/
-extern SDLCharacterSet const SDLCharacterSetCID2;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+extern SDLCharacterSet const SDLCharacterSetCID2 __deprecated_msg("Use Ascii, Iso88591, or Utf8 instead");
+#pragma clang diagnostic pop
+/**
+ * ASCII as defined in https://en.wikipedia.org/wiki/ASCII as defined in codes 0-127. Non-printable characters such as tabs and back spaces are ignored.
+ *
+ * @since SDL 7.0.0
+ */
+extern SDLCharacterSet const SDLCharacterSetAscii;
+
+/**
+ * Latin-1, as defined in https://en.wikipedia.org/wiki/ISO/IEC_8859-1
+ *
+ * @since SDL 7.0.0
+ */
+extern SDLCharacterSet const SDLCharacterSetIso88591;
+
+/**
+ * The UTF-8 character set that uses variable bytes per code point. See https://en.wikipedia.org/wiki/UTF-8 for more details. This is the preferred character set.
+ *
+ * @since SDL 7.0.0
+ */
+extern SDLCharacterSet const SDLCharacterSetUtf8;
diff --git a/SmartDeviceLink/SDLCharacterSet.m b/SmartDeviceLink/SDLCharacterSet.m
index 64733c0dc..47b595f7e 100644
--- a/SmartDeviceLink/SDLCharacterSet.m
+++ b/SmartDeviceLink/SDLCharacterSet.m
@@ -1,10 +1,57 @@
-// SDLCharacterSet.m
-//
-
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
#import "SDLCharacterSet.h"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLCharacterSet const SDLCharacterSetType2 = @"TYPE2SET";
+#pragma clang diagnostic pop
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLCharacterSet const SDLCharacterSetType5 = @"TYPE5SET";
+#pragma clang diagnostic pop
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLCharacterSet const SDLCharacterSetCID1 = @"CID1SET";
+#pragma clang diagnostic pop
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLCharacterSet const SDLCharacterSetCID2 = @"CID2SET";
+#pragma clang diagnostic pop
+
+SDLCharacterSet const SDLCharacterSetAscii = @"ASCII";
+SDLCharacterSet const SDLCharacterSetIso88591 = @"ISO_8859_1";
+SDLCharacterSet const SDLCharacterSetUtf8 = @"UTF_8";
diff --git a/SmartDeviceLink/SDLChoiceSetManager.m b/SmartDeviceLink/SDLChoiceSetManager.m
index a3f658b6c..2b8422134 100644
--- a/SmartDeviceLink/SDLChoiceSetManager.m
+++ b/SmartDeviceLink/SDLChoiceSetManager.m
@@ -39,7 +39,7 @@
#import "SDLSystemCapability.h"
#import "SDLSystemCapabilityManager.h"
#import "SDLWindowCapability.h"
-#import "SDLWindowCapability+ShowManagerExtensions.h"
+#import "SDLWindowCapability+ScreenManagerExtensions.h"
NS_ASSUME_NONNULL_BEGIN
@@ -64,6 +64,7 @@ typedef NSNumber * SDLChoiceId;
@property (strong, nonatomic, readonly) SDLStateMachine *stateMachine;
@property (strong, nonatomic) NSOperationQueue *transactionQueue;
+@property (copy, nonatomic) dispatch_queue_t readWriteQueue;
@property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel;
@property (copy, nonatomic, nullable) SDLWindowCapability *currentWindowCapability;
@@ -97,6 +98,12 @@ UInt16 const ChoiceCellCancelIdMin = 1;
_stateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLChoiceManagerStateShutdown states:[self.class sdl_stateTransitionDictionary]];
_transactionQueue = [self sdl_newTransactionQueue];
+ if (@available(iOS 10.0, *)) {
+ _readWriteQueue = dispatch_queue_create_with_target("com.sdl.screenManager.choiceSetManager.readWriteQueue", DISPATCH_QUEUE_SERIAL, [SDLGlobals sharedGlobals].sdlProcessingQueue);
+ } else {
+ _readWriteQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue;
+ }
+
_preloadedMutableChoices = [NSMutableSet set];
_pendingMutablePreloadChoices = [NSMutableSet set];
@@ -112,6 +119,8 @@ UInt16 const ChoiceCellCancelIdMin = 1;
}
- (void)start {
+ SDLLogD(@"Starting manager");
+
[self.systemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self selector:@selector(sdl_displayCapabilityDidUpdate:)];
if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) {
@@ -122,7 +131,11 @@ UInt16 const ChoiceCellCancelIdMin = 1;
}
- (void)stop {
- [self.stateMachine transitionToState:SDLChoiceManagerStateShutdown];
+ SDLLogD(@"Stopping manager");
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [self.stateMachine transitionToState:SDLChoiceManagerStateShutdown];
+ }];
}
+ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_stateTransitionDictionary {
@@ -160,6 +173,10 @@ UInt16 const ChoiceCellCancelIdMin = 1;
#pragma mark - State Management
- (void)didEnterStateShutdown {
+ SDLLogV(@"Manager shutting down");
+
+ NSAssert(dispatch_get_specific(SDLProcessingQueueName) != nil, @"%@ must only be called on the SDL serial queue", NSStringFromSelector(_cmd));
+
_currentHMILevel = SDLHMILevelNone;
[self.transactionQueue cancelAllOperations];
@@ -177,16 +194,16 @@ UInt16 const ChoiceCellCancelIdMin = 1;
// Setup by sending a Choice Set without VR, seeing if there's an error. If there is, send one with VR. This choice set will be used for `presentKeyboard` interactions.
SDLCheckChoiceVROptionalOperation *checkOp = [[SDLCheckChoiceVROptionalOperation alloc] initWithConnectionManager:self.connectionManager];
- __weak typeof(self) weakself = self;
+ __weak typeof(self) weakSelf = self;
__weak typeof(checkOp) weakOp = checkOp;
checkOp.completionBlock = ^{
if ([self.currentState isEqualToString:SDLChoiceManagerStateShutdown]) { return; }
- weakself.vrOptional = weakOp.isVROptional;
+ weakSelf.vrOptional = weakOp.isVROptional;
if (weakOp.error != nil) {
- [weakself.stateMachine transitionToState:SDLChoiceManagerStateStartupError];
+ [weakSelf.stateMachine transitionToState:SDLChoiceManagerStateStartupError];
} else {
- [weakself.stateMachine transitionToState:SDLChoiceManagerStateReady];
+ [weakSelf.stateMachine transitionToState:SDLChoiceManagerStateReady];
}
};
@@ -213,10 +230,14 @@ UInt16 const ChoiceCellCancelIdMin = 1;
}
NSMutableSet<SDLChoiceCell *> *choicesToUpload = [[self sdl_choicesToBeUploadedWithArray:choices] mutableCopy];
- [choicesToUpload minusSet:self.preloadedMutableChoices];
- [choicesToUpload minusSet:self.pendingMutablePreloadChoices];
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [choicesToUpload minusSet:self.preloadedMutableChoices];
+ [choicesToUpload minusSet:self.pendingMutablePreloadChoices];
+ }];
if (choicesToUpload.count == 0) {
+ SDLLogD(@"All choices already preloaded. No need to perform a preload");
if (handler != nil) {
handler(nil);
}
@@ -227,7 +248,9 @@ UInt16 const ChoiceCellCancelIdMin = 1;
[self sdl_updateIdsOnChoices:choicesToUpload];
// Add the preload cells to the pending preloads
- [self.pendingMutablePreloadChoices unionSet:choicesToUpload];
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [self.pendingMutablePreloadChoices unionSet:choicesToUpload];
+ }];
// Upload pending preloads
// For backward compatibility with Gen38Inch display type head units
@@ -239,13 +262,24 @@ UInt16 const ChoiceCellCancelIdMin = 1;
__weak typeof(self) weakSelf = self;
__weak typeof(preloadOp) weakPreloadOp = preloadOp;
preloadOp.completionBlock = ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
SDLLogD(@"Choices finished preloading");
- [weakSelf.preloadedMutableChoices unionSet:choicesToUpload];
- [weakSelf.pendingMutablePreloadChoices minusSet:choicesToUpload];
if (handler != nil) {
handler(weakPreloadOp.error);
}
+
+ // Check if the manager has shutdown because the list of uploaded and pending choices should not be updated
+ if ([strongSelf.currentState isEqualToString:SDLChoiceManagerStateShutdown]) {
+ SDLLogD(@"Cancelling preloading choices because the manager is shut down");
+ return;
+ }
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.preloadedMutableChoices unionSet:choicesToUpload];
+ [strongSelf.pendingMutablePreloadChoices minusSet:choicesToUpload];
+ }];
};
[self.transactionQueue addOperation:preloadOp];
}
@@ -269,12 +303,14 @@ UInt16 const ChoiceCellCancelIdMin = 1;
if (self.pendingPresentationSet.delegate != nil) {
[self.pendingPresentationSet.delegate choiceSet:self.pendingPresentationSet didReceiveError:[NSError sdl_choiceSetManager_choicesDeletedBeforePresentation:@{@"deletedChoices": choices}]];
}
-
self.pendingPresentationSet = nil;
}
// Remove the cells from pending and delete choices
- [self.pendingMutablePreloadChoices minusSet:cellsToBeRemovedFromPending];
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [self.pendingMutablePreloadChoices minusSet:cellsToBeRemovedFromPending];
+ }];
+
for (SDLAsynchronousOperation *op in self.transactionQueue.operations) {
if (![op isMemberOfClass:[SDLPreloadChoicesOperation class]]) { continue; }
@@ -288,16 +324,27 @@ UInt16 const ChoiceCellCancelIdMin = 1;
[self sdl_findIdsOnChoices:cellsToBeDeleted];
SDLDeleteChoicesOperation *deleteOp = [[SDLDeleteChoicesOperation alloc] initWithConnectionManager:self.connectionManager cellsToDelete:cellsToBeDeleted];
- __weak typeof(self) weakself = self;
+ __weak typeof(self) weakSelf = self;
__weak typeof(deleteOp) weakOp = deleteOp;
deleteOp.completionBlock = ^{
+ SDLLogD(@"Finished deleting choices");
+
+ __strong typeof(weakSelf) strongSelf = weakSelf;
if (weakOp.error != nil) {
SDLLogE(@"Failed to delete choices: %@", weakOp.error);
return;
}
- SDLLogD(@"Finished deleting choices");
- [weakself.preloadedMutableChoices minusSet:cellsToBeDeleted];
+ // Check if the manager has shutdown because the list of uploaded choices should not be updated
+ if ([strongSelf.currentState isEqualToString:SDLChoiceManagerStateShutdown]) {
+ SDLLogD(@"Cancelling deleting choices because manager is shut down");
+ return;
+ }
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.preloadedMutableChoices minusSet:cellsToBeDeleted];
+ }];
};
[self.transactionQueue addOperation:deleteOp];
}
@@ -315,13 +362,14 @@ UInt16 const ChoiceCellCancelIdMin = 1;
return;
}
- if (self.pendingPresentationSet != nil) {
+ if (self.pendingPresentationSet != nil && !self.pendingPresentOperation.isFinished) {
SDLLogW(@"A choice set is pending: %@. We will try to cancel it in favor of presenting a different choice set: %@. If it's already on screen it cannot be cancelled", self.pendingPresentationSet, choiceSet);
[self.pendingPresentOperation cancel];
}
SDLLogD(@"Preloading and presenting choice set: %@", choiceSet);
self.pendingPresentationSet = choiceSet;
+
[self preloadChoices:self.pendingPresentationSet.choices withCompletionHandler:^(NSError * _Nullable error) {
if (error != nil) {
[choiceSet.delegate choiceSet:choiceSet didReceiveError:error];
@@ -334,16 +382,17 @@ UInt16 const ChoiceCellCancelIdMin = 1;
SDLPresentChoiceSetOperation *presentOp = nil;
if (delegate == nil) {
// Non-searchable choice set
- presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:nil keyboardDelegate:nil cancelID:self.nextCancelId++];
+ presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:nil keyboardDelegate:nil cancelID:self.nextCancelId];
} else {
// Searchable choice set
- presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:self.keyboardConfiguration keyboardDelegate:delegate cancelID:self.nextCancelId++];
+ presentOp = [[SDLPresentChoiceSetOperation alloc] initWithConnectionManager:self.connectionManager choiceSet:self.pendingPresentationSet mode:mode keyboardProperties:self.keyboardConfiguration keyboardDelegate:delegate cancelID:self.nextCancelId];
}
self.pendingPresentOperation = presentOp;
- __weak typeof(self) weakself = self;
+ __weak typeof(self) weakSelf = self;
__weak typeof(presentOp) weakOp = presentOp;
self.pendingPresentOperation.completionBlock = ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
__strong typeof(weakOp) strongOp = weakOp;
SDLLogD(@"Finished presenting choice set: %@", strongOp.choiceSet);
@@ -353,8 +402,8 @@ UInt16 const ChoiceCellCancelIdMin = 1;
[strongOp.choiceSet.delegate choiceSet:strongOp.choiceSet didSelectChoice:strongOp.selectedCell withSource:strongOp.selectedTriggerSource atRowIndex:strongOp.selectedCellRow];
}
- weakself.pendingPresentationSet = nil;
- weakself.pendingPresentOperation = nil;
+ strongSelf.pendingPresentOperation = nil;
+ strongSelf.pendingPresentationSet = nil;
};
[self.transactionQueue addOperation:presentOp];
@@ -374,7 +423,7 @@ UInt16 const ChoiceCellCancelIdMin = 1;
SDLLogD(@"Presenting keyboard with initial text: %@", initialText);
// Present a keyboard with the choice set that we used to test VR's optional state
- UInt16 keyboardCancelId = self.nextCancelId++;
+ UInt16 keyboardCancelId = self.nextCancelId;
self.pendingPresentOperation = [[SDLPresentKeyboardOperation alloc] initWithConnectionManager:self.connectionManager keyboardProperties:self.keyboardConfiguration initialText:initialText keyboardDelegate:delegate cancelID:keyboardCancelId];
[self.transactionQueue addOperation:self.pendingPresentOperation];
return @(keyboardCancelId);
@@ -395,14 +444,19 @@ UInt16 const ChoiceCellCancelIdMin = 1;
#pragma mark - Choice Management Helpers
+/// Checks the passed list of choices to be uploaded and returns the items that have not yet been uploaded to the module.
+/// @param choices The choices to be uploaded
+/// @return The choices that have not yet been uploaded to the module
- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeUploadedWithArray:(NSArray<SDLChoiceCell *> *)choices {
- // Check if any of the choices already exist on the head unit and remove them from being preloaded
NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
[choicesSet minusSet:self.preloadedChoices];
return [choicesSet copy];
}
+/// Checks the passed list of choices to be deleted and returns the items that have been uploaded to the module.
+/// @param choices The choices to be deleted
+/// @return The choices that have been uploaded to the module
- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeDeletedWithArray:(NSArray<SDLChoiceCell *> *)choices {
NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
[choicesSet intersectSet:self.preloadedChoices];
@@ -410,6 +464,9 @@ UInt16 const ChoiceCellCancelIdMin = 1;
return [choicesSet copy];
}
+/// Checks the passed list of choices to be deleted and returns the items that are waiting to be uploaded to the module.
+/// @param choices The choices to be deleted
+/// @return The choices that are waiting to be uploaded to the module
- (NSSet<SDLChoiceCell *> *)sdl_choicesToBeRemovedFromPendingWithArray:(NSArray<SDLChoiceCell *> *)choices {
NSMutableSet<SDLChoiceCell *> *choicesSet = [NSMutableSet setWithArray:choices];
[choicesSet intersectSet:self.pendingPreloadChoices];
@@ -417,23 +474,27 @@ UInt16 const ChoiceCellCancelIdMin = 1;
return [choicesSet copy];
}
+/// Assigns a unique id to each choice item.
+/// @param choices An array of choices
- (void)sdl_updateIdsOnChoices:(NSSet<SDLChoiceCell *> *)choices {
for (SDLChoiceCell *cell in choices) {
cell.choiceId = self.nextChoiceId;
- self.nextChoiceId++;
}
}
+/// Checks each choice item to find out if it has already been uploaded or if it is the the process of being uploaded. If so, the choice item is assigned the unique id of the uploaded item.
+/// @param choiceSet A set of choice items
- (void)sdl_findIdsOnChoiceSet:(SDLChoiceSet *)choiceSet {
- return [self sdl_findIdsOnChoices:[NSSet setWithArray:choiceSet.choices]];
+ [self sdl_findIdsOnChoices:[NSSet setWithArray:choiceSet.choices]];
}
+/// Checks each choice item to find out if it has already been uploaded or if it is the the process of being uploaded. If so, the choice item is assigned the unique id of the uploaded item.
+/// @param choices An array of choice items
- (void)sdl_findIdsOnChoices:(NSSet<SDLChoiceCell *> *)choices {
for (SDLChoiceCell *cell in choices) {
SDLChoiceCell *uploadCell = [self.pendingPreloadChoices member:cell] ?: [self.preloadedChoices member:cell];
- if (uploadCell != nil) {
- cell.choiceId = uploadCell.choiceId;
- }
+ if (uploadCell == nil) { continue; }
+ cell.choiceId = uploadCell.choiceId;
}
}
@@ -460,11 +521,41 @@ UInt16 const ChoiceCellCancelIdMin = 1;
#pragma mark - Getters
- (NSSet<SDLChoiceCell *> *)preloadedChoices {
- return [_preloadedMutableChoices copy];
+ __block NSSet<SDLChoiceCell *> *set = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ set = [self->_preloadedMutableChoices copy];
+ }];
+
+ return set;
}
- (NSSet<SDLChoiceCell *> *)pendingPreloadChoices {
- return [_pendingMutablePreloadChoices copy];
+ __block NSSet<SDLChoiceCell *> *set = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ set = [self->_pendingMutablePreloadChoices copy];
+ }];
+
+ return set;
+}
+
+- (UInt16)nextChoiceId {
+ __block UInt16 choiceId = 0;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ choiceId = self->_nextChoiceId;
+ self->_nextChoiceId = choiceId + 1;
+ }];
+
+ return choiceId;
+}
+
+- (UInt16)nextCancelId {
+ __block UInt16 cancelId = 0;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ cancelId = self->_nextCancelId;
+ self->_nextCancelId = cancelId + 1;
+ }];
+
+ return cancelId;
}
- (NSString *)currentState {
diff --git a/SmartDeviceLink/SDLConfiguration.h b/SmartDeviceLink/SDLConfiguration.h
index 663ca6a7d..17c7dc6ee 100644
--- a/SmartDeviceLink/SDLConfiguration.h
+++ b/SmartDeviceLink/SDLConfiguration.h
@@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
* The streaming media configuration.
*/
-@property (copy, nonatomic, readonly) SDLStreamingMediaConfiguration *streamingMediaConfig;
+@property (copy, nonatomic, readonly, nullable) SDLStreamingMediaConfiguration *streamingMediaConfig;
/**
* The file manager configuration.
@@ -51,37 +51,32 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic, readonly) SDLEncryptionConfiguration *encryptionConfig;
/**
- * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
- *
- * @param lifecycleConfig The lifecycle configuration to be used.
- * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
- * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
- * @return The configuration
- */
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager: instead");
-
-/**
- * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.
*
* @param lifecycleConfig The lifecycle configuration to be used.
* @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
* @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
* @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @param encryptionConfig The encryption configuration to be used. If nil, the `defaultConfiguration` will be used.
* @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager:encryption: instead");
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig encryption:(nullable SDLEncryptionConfiguration *)encryptionConfig;
/**
- * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.
*
* @param lifecycleConfig The lifecycle configuration to be used.
* @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
* @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
* @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
* @param encryptionConfig The encryption configuration to be used. If nil, the `defaultConfiguration` will be used.
* @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig encryption:(nullable SDLEncryptionConfiguration *)encryptionConfig;
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig encryption:(nullable SDLEncryptionConfiguration *)encryptionConfig;
+
+
+#pragma mark - Deprecated Initializers
/**
* Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
@@ -91,7 +86,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
* @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use configurationWithLifecycle:lockScreen:logging:fileManager: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager:encryption: instead");
/**
* Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
@@ -102,7 +97,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
* @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager:encryption: instead");
/**
* Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
@@ -113,7 +108,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
* @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead");
+- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption: instead");
/**
* Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
@@ -128,17 +123,27 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption: instead");
/**
- * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.
+ *
+ * @param lifecycleConfig The lifecycle configuration to be used.
+ * @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
+ * @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
+ * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
+ * @return The configuration
+ */
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager:encryption: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
+
+/**
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
*
* @param lifecycleConfig The lifecycle configuration to be used.
* @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
* @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
* @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
* @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
- * @param encryptionConfig The encryption configuration to be used. If nil, the `defaultConfiguration` will be used.
* @return The configuration
*/
-- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig encryption:(nullable SDLEncryptionConfiguration *)encryptionConfig;
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
/**
* Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.
@@ -149,19 +154,17 @@ NS_ASSUME_NONNULL_BEGIN
* @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
* @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
/**
- * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.
+ * Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.
*
* @param lifecycleConfig The lifecycle configuration to be used.
* @param lockScreenConfig The lockscreen configuration to be used. If nil, the `enabledConfiguration` will be used.
* @param logConfig The logging configuration to be used. If nil, the `defaultConfiguration` will be used.
- * @param streamingMediaConfig The streaming media configuration to be used or nil if not used.
- * @param fileManagerConfig The file manager configuration to be used or `defaultConfiguration` if nil.
* @return The configuration
*/
-+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig NS_SWIFT_UNAVAILABLE("Use an initializer instead");
++ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig __deprecated_msg("Use initWithLifecycle:lockScreen:logging:fileManager:encryption: instead") NS_SWIFT_UNAVAILABLE("Use an initializer instead");
@end
diff --git a/SmartDeviceLink/SDLConfiguration.m b/SmartDeviceLink/SDLConfiguration.m
index 626b25d03..bd1e85fdc 100644
--- a/SmartDeviceLink/SDLConfiguration.m
+++ b/SmartDeviceLink/SDLConfiguration.m
@@ -24,11 +24,11 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig {
- return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil encryption: nil];
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil encryption:nil];
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig {
- return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:nil encryption: nil];
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:nil encryption:nil];
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
@@ -36,18 +36,7 @@ NS_ASSUME_NONNULL_BEGIN
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig encryption:(nullable SDLEncryptionConfiguration *)encryptionConfig {
- self = [super init];
- if (!self) {
- return nil;
- }
-
- _lifecycleConfig = lifecycleConfig;
- _lockScreenConfig = lockScreenConfig ?: [SDLLockScreenConfiguration enabledConfiguration];
- _loggingConfig = logConfig ?: [SDLLogConfiguration defaultConfiguration];
- _fileManagerConfig = fileManagerConfig ?: [SDLFileManagerConfiguration defaultConfiguration];
- _encryptionConfig = encryptionConfig ?: [SDLEncryptionConfiguration defaultConfiguration];
-
- return self;
+ return [self initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig streamingMedia:nil fileManager:fileManagerConfig encryption:encryptionConfig];
}
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfiguration {
@@ -55,7 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
}
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig {
- return [self configurationWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil];
+ return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:nil fileManager:nil encryption:nil];
}
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig {
@@ -63,7 +52,7 @@ NS_ASSUME_NONNULL_BEGIN
}
+ (instancetype)configurationWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig fileManager:(nullable SDLFileManagerConfiguration *)fileManagerConfig {
- return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:fileManagerConfig encryption: nil];
+ return [[self alloc] initWithLifecycle:lifecycleConfig lockScreen:lockScreenConfig logging:logConfig fileManager:fileManagerConfig encryption:nil];
}
- (instancetype)initWithLifecycle:(SDLLifecycleConfiguration *)lifecycleConfig lockScreen:(nullable SDLLockScreenConfiguration *)lockScreenConfig logging:(nullable SDLLogConfiguration *)logConfig streamingMedia:(nullable SDLStreamingMediaConfiguration *)streamingMediaConfig {
@@ -97,6 +86,13 @@ NS_ASSUME_NONNULL_BEGIN
_fileManagerConfig = fileManagerConfig ?: [SDLFileManagerConfiguration defaultConfiguration];
_encryptionConfig = encryptionConfig ?: [SDLEncryptionConfiguration defaultConfiguration];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ if (_encryptionConfig.securityManagers == nil && _streamingMediaConfig.securityManagers != nil) {
+ _encryptionConfig.securityManagers = _streamingMediaConfig.securityManagers;
+ }
+#pragma clang diagnostic pop
+
return self;
}
diff --git a/SmartDeviceLink/SDLConnectionManagerType.h b/SmartDeviceLink/SDLConnectionManagerType.h
index d0e7f7f84..2602a7315 100644
--- a/SmartDeviceLink/SDLConnectionManagerType.h
+++ b/SmartDeviceLink/SDLConnectionManagerType.h
@@ -29,8 +29,8 @@ NS_ASSUME_NONNULL_BEGIN
/**
* Sends an RPC of type `SDLRPCRequest` without bypassing the block on RPC sends before managers complete setup.
*
- * @param request An RPC of type `SDLRPCRequest` be sent to Core.
- * @param handler Called when the response is received by Core
+ * @param request An RPC of type `SDLRPCRequest` be sent to Core.
+ * @param handler Called when the response is received by Core
*/
- (void)sendConnectionRequest:(__kindof SDLRPCRequest *)request withResponseHandler:(nullable SDLResponseHandler)handler;
@@ -39,11 +39,20 @@ NS_ASSUME_NONNULL_BEGIN
*
* Do not use to send an RPC of type `SDLRPCRequest`. Instead use `sendConnectionRequest:withResponseHandler:` to send a request.
*
- * @param rpc An RPC of type `SDLRPCResponse` or `SDLRPCNotification` to be sent to Core.
+ * @param rpc An RPC of type `SDLRPCResponse` or `SDLRPCNotification` to be sent to Core.
*/
- (void)sendConnectionRPC:(__kindof SDLRPCMessage *)rpc;
/**
+* Sends an RPC of type `SDLRPCResponse` or `SDLRPCNotification` and bypasses the block on RPC sends before managers complete setup. Unlike requests, responses and notifications sent to Core do not get a response from Core, so no handler is needed.
+*
+* Do not use to send an RPC of type `SDLRPCRequest`. Instead use `sendConnectionRequest:withResponseHandler:` to send a request.
+*
+* @param rpc An RPC of type `SDLRPCResponse` or `SDLRPCNotification` to be sent to Core.
+*/
+- (void)sendConnectionManagerRPC:(__kindof SDLRPCMessage *)rpc;
+
+/**
* Sends an array of RPCs of type `Request` asynchronously. The requests are sent without bypassing the block on RPC sends before managers complete setup.
*
* @param requests An array of RPCs of type `Request`
diff --git a/SmartDeviceLink/SDLDiagnosticMessage.h b/SmartDeviceLink/SDLDiagnosticMessage.h
index 74cbbcdff..385c72b4f 100644
--- a/SmartDeviceLink/SDLDiagnosticMessage.h
+++ b/SmartDeviceLink/SDLDiagnosticMessage.h
@@ -41,7 +41,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* Required, Array of NSNumber (Integers), Array size 1 - 65535, Integer Size 0 - 255
*/
-@property (strong, nonatomic) NSArray<NSNumber<SDLInt> *> *messageData;
+@property (strong, nonatomic) NSArray<NSNumber *> *messageData;
@end
diff --git a/SmartDeviceLink/SDLDiagnosticMessage.m b/SmartDeviceLink/SDLDiagnosticMessage.m
index b7d4e4016..adef6c980 100644
--- a/SmartDeviceLink/SDLDiagnosticMessage.m
+++ b/SmartDeviceLink/SDLDiagnosticMessage.m
@@ -52,11 +52,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:SDLRPCParameterNameMessageLength ofClass:NSNumber.class error:&error];
}
-- (void)setMessageData:(NSArray<NSNumber<SDLInt> *> *)messageData {
+- (void)setMessageData:(NSArray<NSNumber *> *)messageData {
[self.parameters sdl_setObject:messageData forName:SDLRPCParameterNameMessageData];
}
-- (NSArray<NSNumber<SDLInt> *> *)messageData {
+- (NSArray<NSNumber *> *)messageData {
NSError *error = nil;
return [self.parameters sdl_objectsForName:SDLRPCParameterNameMessageData ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLDiagnosticMessageResponse.h b/SmartDeviceLink/SDLDiagnosticMessageResponse.h
index aca74a779..2912beafa 100644
--- a/SmartDeviceLink/SDLDiagnosticMessageResponse.h
+++ b/SmartDeviceLink/SDLDiagnosticMessageResponse.h
@@ -18,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN
Optional
*/
-@property (nullable, strong, nonatomic) NSArray<NSNumber<SDLInt> *> *messageDataResult;
+@property (nullable, strong, nonatomic) NSArray<NSNumber *> *messageDataResult;
@end
diff --git a/SmartDeviceLink/SDLDiagnosticMessageResponse.m b/SmartDeviceLink/SDLDiagnosticMessageResponse.m
index a7b5cc254..dbfaa03a2 100644
--- a/SmartDeviceLink/SDLDiagnosticMessageResponse.m
+++ b/SmartDeviceLink/SDLDiagnosticMessageResponse.m
@@ -20,11 +20,11 @@ NS_ASSUME_NONNULL_BEGIN
}
#pragma clang diagnostic pop
-- (void)setMessageDataResult:(nullable NSArray<NSNumber<SDLInt> *> *)messageDataResult {
+- (void)setMessageDataResult:(nullable NSArray<NSNumber *> *)messageDataResult {
[self.parameters sdl_setObject:messageDataResult forName:SDLRPCParameterNameMessageDataResult];
}
-- (nullable NSArray<NSNumber<SDLInt> *> *)messageDataResult {
+- (nullable NSArray<NSNumber *> *)messageDataResult {
NSError *error = nil;
return [self.parameters sdl_objectsForName:SDLRPCParameterNameMessageDataResult ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLDriverDistractionCapability.h b/SmartDeviceLink/SDLDriverDistractionCapability.h
new file mode 100644
index 000000000..3f2943bef
--- /dev/null
+++ b/SmartDeviceLink/SDLDriverDistractionCapability.h
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SDLRPCStruct.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @since SDL 7.0.0
+ */
+@interface SDLDriverDistractionCapability : SDLRPCStruct
+
+/**
+ * @param menuLength - menuLength
+ * @param subMenuDepth - subMenuDepth
+ * @return A SDLDriverDistractionCapability object
+ */
+- (instancetype)initWithMenuLength:(nullable NSNumber<SDLInt> *)menuLength subMenuDepth:(nullable NSNumber<SDLUInt> *)subMenuDepth;
+
+/**
+ * The number of items allowed in a Choice Set or Command menu while the driver is distracted
+ * {"default_value": null, "max_value": null, "min_value": null}
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLInt> *menuLength;
+
+/**
+ * The depth of submenus allowed when the driver is distracted. e.g. 3 == top level menu -> submenu -> submenu; 1 == top level menu only
+ * {"default_value": null, "max_value": null, "min_value": 1}
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *subMenuDepth;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLDriverDistractionCapability.m b/SmartDeviceLink/SDLDriverDistractionCapability.m
new file mode 100644
index 000000000..3bfca9855
--- /dev/null
+++ b/SmartDeviceLink/SDLDriverDistractionCapability.m
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#import "SDLDriverDistractionCapability.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCParameterNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLDriverDistractionCapability
+
+- (instancetype)initWithMenuLength:(nullable NSNumber<SDLInt> *)menuLength subMenuDepth:(nullable NSNumber<SDLUInt> *)subMenuDepth {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+ self.menuLength = menuLength;
+ self.subMenuDepth = subMenuDepth;
+ return self;
+}
+
+- (void)setMenuLength:(nullable NSNumber<SDLInt> *)menuLength {
+ [self.store sdl_setObject:menuLength forName:SDLRPCParameterNameMenuLength];
+}
+
+- (nullable NSNumber<SDLInt> *)menuLength {
+ return [self.store sdl_objectForName:SDLRPCParameterNameMenuLength ofClass:NSNumber.class error:nil];
+}
+
+- (void)setSubMenuDepth:(nullable NSNumber<SDLUInt> *)subMenuDepth {
+ [self.store sdl_setObject:subMenuDepth forName:SDLRPCParameterNameSubMenuDepth];
+}
+
+- (nullable NSNumber<SDLUInt> *)subMenuDepth {
+ return [self.store sdl_objectForName:SDLRPCParameterNameSubMenuDepth ofClass:NSNumber.class error:nil];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END \ No newline at end of file
diff --git a/SmartDeviceLink/SDLEncodedSyncPData.h b/SmartDeviceLink/SDLEncodedSyncPData.h
index df7f1a4f7..8f81d002b 100644
--- a/SmartDeviceLink/SDLEncodedSyncPData.h
+++ b/SmartDeviceLink/SDLEncodedSyncPData.h
@@ -12,6 +12,7 @@
NS_ASSUME_NONNULL_BEGIN
+__deprecated
@interface SDLEncodedSyncPData : SDLRPCRequest
/**
diff --git a/SmartDeviceLink/SDLEncodedSyncPData.m b/SmartDeviceLink/SDLEncodedSyncPData.m
index 1d03e2c99..6db36b6fe 100644
--- a/SmartDeviceLink/SDLEncodedSyncPData.m
+++ b/SmartDeviceLink/SDLEncodedSyncPData.m
@@ -10,7 +10,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLEncodedSyncPData
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLEncodedSyncPDataResponse.h b/SmartDeviceLink/SDLEncodedSyncPDataResponse.h
index 8536ad33e..5313bbb87 100644
--- a/SmartDeviceLink/SDLEncodedSyncPDataResponse.h
+++ b/SmartDeviceLink/SDLEncodedSyncPDataResponse.h
@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
**DEPRECATED**
*/
+__deprecated
@interface SDLEncodedSyncPDataResponse : SDLRPCResponse
@end
diff --git a/SmartDeviceLink/SDLEncodedSyncPDataResponse.m b/SmartDeviceLink/SDLEncodedSyncPDataResponse.m
index d25d87d16..95c8cc628 100644
--- a/SmartDeviceLink/SDLEncodedSyncPDataResponse.m
+++ b/SmartDeviceLink/SDLEncodedSyncPDataResponse.m
@@ -10,7 +10,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLEncodedSyncPDataResponse
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLEncryptionConfiguration.h b/SmartDeviceLink/SDLEncryptionConfiguration.h
index 8173ba655..591884460 100644
--- a/SmartDeviceLink/SDLEncryptionConfiguration.h
+++ b/SmartDeviceLink/SDLEncryptionConfiguration.h
@@ -25,7 +25,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
* A delegate callback that will tell you when an acknowledgement has occurred for starting as secure service.
*/
-@property (copy, nonatomic, nullable) id<SDLServiceEncryptionDelegate> delegate;
+@property (weak, nonatomic, nullable) id<SDLServiceEncryptionDelegate> delegate;
/**
* Creates a default encryption configuration.
diff --git a/SmartDeviceLink/SDLEncryptionLifecycleManager.h b/SmartDeviceLink/SDLEncryptionLifecycleManager.h
index eb6aa951e..33641fcf5 100644
--- a/SmartDeviceLink/SDLEncryptionLifecycleManager.h
+++ b/SmartDeviceLink/SDLEncryptionLifecycleManager.h
@@ -8,14 +8,14 @@
#import <Foundation/Foundation.h>
#import "SDLConnectionManagerType.h"
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
-@class SDLEncryptionConfiguration;
+@class SDLConfiguration;
@class SDLProtocol;
NS_ASSUME_NONNULL_BEGIN
-@interface SDLEncryptionLifecycleManager : NSObject <SDLProtocolListener>
+@interface SDLEncryptionLifecycleManager : NSObject <SDLProtocolDelegate>
/**
* Whether or not the encryption session is connected.
@@ -32,7 +32,7 @@ NS_ASSUME_NONNULL_BEGIN
@param configuration This session's configuration
@return A new encryption lifecycle manager
*/
-- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLEncryptionConfiguration *)configuration;
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLConfiguration *)configuration;
/**
* Start the manager. This is used internally to get notified of the ACK message.
diff --git a/SmartDeviceLink/SDLEncryptionLifecycleManager.m b/SmartDeviceLink/SDLEncryptionLifecycleManager.m
index dcbf773db..b141080e4 100644
--- a/SmartDeviceLink/SDLEncryptionLifecycleManager.m
+++ b/SmartDeviceLink/SDLEncryptionLifecycleManager.m
@@ -6,25 +6,32 @@
// Copyright © 2019 smartdevicelink. All rights reserved.
//
+#import "SDLAsynchronousRPCRequestOperation.h"
+#import "SDLConfiguration.h"
#import "SDLEncryptionLifecycleManager.h"
#import "SDLEncryptionManagerConstants.h"
#import "SDLEncryptionConfiguration.h"
-#import "SDLServiceEncryptionDelegate.h"
-#import "SDLAsynchronousRPCRequestOperation.h"
+#import "SDLError.h"
+#import "SDLLifecycleConfiguration.h"
#import "SDLLogMacros.h"
-#import "SDLStateMachine.h"
-#import "SDLProtocolMessage.h"
-#import "SDLRPCNotificationNotification.h"
#import "SDLOnHMIStatus.h"
#import "SDLOnPermissionsChange.h"
#import "SDLPermissionItem.h"
#import "SDLPermissionConstants.h"
#import "SDLProtocol.h"
-#import "SDLError.h"
+#import "SDLProtocolMessage.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLServiceEncryptionDelegate.h"
+#import "SDLStateMachine.h"
+#import "SDLVehicleType.h"
NS_ASSUME_NONNULL_BEGIN
-@interface SDLEncryptionLifecycleManager() <SDLProtocolListener>
+typedef NSString SDLVehicleMake;
+
+@interface SDLEncryptionLifecycleManager() <SDLProtocolDelegate>
@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
@property (weak, nonatomic) SDLProtocol *protocol;
@@ -33,13 +40,15 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic, nullable) SDLHMILevel currentHMILevel;
@property (strong, nonatomic, nullable) NSMutableDictionary<SDLPermissionRPCName, SDLPermissionItem *> *permissions;
@property (assign, nonatomic) BOOL requiresEncryption;
-@property (weak, nonatomic, nullable) id<SDLServiceEncryptionDelegate> delegate;
+@property (strong, nonatomic) SDLConfiguration *configuration;
+
+@property (nonatomic, strong) NSMutableDictionary<SDLVehicleMake *, Class> *securityManagers;
@end
@implementation SDLEncryptionLifecycleManager
-- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLEncryptionConfiguration *)configuration {
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLConfiguration *)configuration {
self = [super init];
if (!self) {
return nil;
@@ -49,16 +58,37 @@ NS_ASSUME_NONNULL_BEGIN
_connectionManager = connectionManager;
_currentHMILevel = nil;
_requiresEncryption = NO;
+ _securityManagers = [NSMutableDictionary dictionary];
_encryptionStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLEncryptionLifecycleManagerStateStopped states:[self.class sdl_encryptionStateTransitionDictionary]];
_permissions = [NSMutableDictionary<SDLPermissionRPCName, SDLPermissionItem *> dictionary];
- _delegate = configuration.delegate;
+ _configuration = configuration;
+ for (Class securityManagerClass in _configuration.encryptionConfig.securityManagers) {
+ if (![securityManagerClass conformsToProtocol:@protocol(SDLSecurityType)]) {
+ NSString *reason = [NSString stringWithFormat:@"Invalid security manager: Class %@ does not conform to SDLSecurityType protocol", NSStringFromClass(securityManagerClass)];
+ @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
+ }
+
+ NSSet<NSString *> *vehicleMakes = [securityManagerClass availableMakes];
+ if (vehicleMakes == nil || vehicleMakes.count == 0) {
+ NSString *reason = [NSString stringWithFormat:@"Invalid security manager: Failed to retrieve makes for class %@", NSStringFromClass(securityManagerClass)];
+ @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
+ }
+
+ for (NSString *vehicleMake in vehicleMakes) {
+ self.securityManagers[vehicleMake] = securityManagerClass;
+ }
+ }
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_registerAppInterfaceResponseReceived:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_permissionsDidChange:) name:SDLDidChangePermissionsNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiLevelDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
return self;
}
+#pragma mark - Lifecycle
+
- (void)startWithProtocol:(SDLProtocol *)protocol {
SDLLogD(@"Starting encryption manager");
_protocol = protocol;
@@ -71,13 +101,14 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)stop {
- _permissions = nil;
+ SDLLogD(@"Stopping encryption manager");
+
+ [_permissions removeAllObjects];
_protocol = nil;
_currentHMILevel = nil;
_requiresEncryption = NO;
- _delegate = nil;
- SDLLogD(@"Stopping encryption manager");
+ [self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
}
- (BOOL)isEncryptionReady {
@@ -92,7 +123,7 @@ NS_ASSUME_NONNULL_BEGIN
SDLLogV(@"Attempting to start Encryption Service");
if (!self.protocol || !self.currentHMILevel) {
SDLLogV(@"Encryption manager is not yet started");
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
return;
}
@@ -101,7 +132,7 @@ NS_ASSUME_NONNULL_BEGIN
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStarting];
} else {
SDLLogE(@"Encryption Manager is not ready to encrypt.");
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
}
}
}
@@ -112,12 +143,13 @@ NS_ASSUME_NONNULL_BEGIN
if (error) {
SDLLogE(@"TLS setup error: %@", error);
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:error];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:error];
}
}];
}
-#pragma mark Encryption
+#pragma mark - State Machine
+
+ (NSDictionary<SDLState *, SDLAllowableStateTransitions *> *)sdl_encryptionStateTransitionDictionary {
return @{
SDLEncryptionLifecycleManagerStateStopped : @[SDLEncryptionLifecycleManagerStateStarting],
@@ -126,7 +158,6 @@ NS_ASSUME_NONNULL_BEGIN
};
}
-#pragma mark - State Machine
- (void)didEnterStateEncryptionStarting {
SDLLogD(@"Encryption manager is starting");
[self sdl_sendEncryptionStartService];
@@ -140,10 +171,10 @@ NS_ASSUME_NONNULL_BEGIN
SDLLogD(@"Encryption manager stopped");
}
-#pragma mark - SDLProtocolListener
+#pragma mark - SDLProtocolDelegate
#pragma mark Encryption Start Service ACK
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
switch (startServiceACK.header.serviceType) {
case SDLServiceTypeRPC: {
[self sdl_handleEncryptionStartServiceACK:startServiceACK];
@@ -156,17 +187,17 @@ NS_ASSUME_NONNULL_BEGIN
if (encryptionStartServiceAck.header.encrypted) {
SDLLogD(@"Encryption service started");
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateReady];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:YES error:nil];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:YES error:nil];
} else {
SDLLogD(@"Encryption service ACK received encryption = OFF");
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_encryption_off]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_encryption_off]];
}
}
#pragma mark Encryption Start Service NAK
-- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK {
switch (startServiceNAK.header.serviceType) {
case SDLServiceTypeRPC: {
[self sdl_handleEncryptionStartServiceNAK:startServiceNAK];
@@ -178,41 +209,49 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_handleEncryptionStartServiceNAK:(SDLProtocolMessage *)audioStartServiceNak {
SDLLogW(@"Encryption service failed to start due to NAK");
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_nak]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_nak]];
}
#pragma mark Encryption End Service
-- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK {
switch (endServiceACK.header.serviceType) {
case SDLServiceTypeRPC: {
SDLLogW(@"Encryption RPC service ended with end service ACK");
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
} break;
default: break;
}
}
-- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK {
switch (endServiceNAK.header.serviceType) {
case SDLServiceTypeRPC: {
SDLLogW(@"Encryption RPC service ended with end service NAK");
[self.encryptionStateMachine transitionToState:SDLEncryptionLifecycleManagerStateStopped];
- [self.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
+ [self.configuration.encryptionConfig.delegate serviceEncryptionUpdatedOnService:SDLServiceTypeRPC encrypted:NO error:[NSError sdl_encryption_lifecycle_notReadyError]];
} break;
default: break;
}
}
-#pragma mark - SDL RPC Notification callbacks
-- (void)sdl_hmiLevelDidChange:(SDLRPCNotificationNotification *)notification {
- if (![notification isNotificationMemberOfClass:[SDLOnHMIStatus class]]) {
- return;
+#pragma mark - Notifications
+
+- (void)sdl_registerAppInterfaceResponseReceived:(SDLRPCResponseNotification *)notification {
+ if (![notification isResponseMemberOfClass:[SDLRegisterAppInterfaceResponse class]]) { return; }
+
+ SDLRegisterAppInterfaceResponse *registerResponse = notification.response;
+ self.protocol.securityManager = [self sdl_securityManagerForMake:registerResponse.vehicleType.make];
+ if (self.protocol.securityManager && [self.protocol.securityManager respondsToSelector:@selector(setAppId:)]) {
+ self.protocol.securityManager.appId = self.configuration.lifecycleConfig.fullAppId ? self.configuration.lifecycleConfig.fullAppId : self.configuration.lifecycleConfig.appId;
}
+}
+
+- (void)sdl_hmiLevelDidChange:(SDLRPCNotificationNotification *)notification {
+ if (![notification isNotificationMemberOfClass:[SDLOnHMIStatus class]]) { return; }
SDLOnHMIStatus *hmiStatus = notification.notification;
-
self.currentHMILevel = hmiStatus.hmiLevel;
// if startWithProtocol has not been called yet, abort here
@@ -246,6 +285,20 @@ NS_ASSUME_NONNULL_BEGIN
}
}
+
+#pragma mark - Utilities
+
+- (nullable id<SDLSecurityType>)sdl_securityManagerForMake:(NSString *)make {
+ if ((make != nil) && (self.securityManagers[make] != nil)) {
+ Class securityManagerClass = self.securityManagers[make];
+ return [[securityManagerClass alloc] init];
+ }
+
+ return nil;
+}
+
+#pragma mark Encryption Status
+
- (BOOL)sdl_appRequiresEncryption {
if (self.requiresEncryption && [self sdl_containsAtLeastOneRPCThatRequiresEncryption]) {
return YES;
diff --git a/SmartDeviceLink/SDLError.h b/SmartDeviceLink/SDLError.h
index 0351239d5..622da44b0 100644
--- a/SmartDeviceLink/SDLError.h
+++ b/SmartDeviceLink/SDLError.h
@@ -26,6 +26,9 @@ extern SDLErrorDomain *const SDLErrorDomainChoiceSetManager;
extern SDLErrorDomain *const SDLErrorDomainSystemCapabilityManager;
extern SDLErrorDomain *const SDLErrorDomainTransport;
extern SDLErrorDomain *const SDLErrorDomainRPCStore;
+extern SDLErrorDomain *const SDLErrorDomainCacheFileManager;
+extern SDLErrorDomain *const SDLErrorDomainAudioStreamManager;
+
@interface NSError (SDLErrors)
@@ -36,14 +39,14 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore;
#pragma mark SDLManager
-+ (NSError *)sdl_lifecycle_rpcErrorWithDescription:(NSString *)description andReason:(NSString *)reason;
++ (NSError *)sdl_lifecycle_rpcErrorWithDescription:(nullable NSString *)description andReason:(nullable NSString *)reason;
+ (NSError *)sdl_lifecycle_notConnectedError;
+ (NSError *)sdl_lifecycle_notReadyError;
-+ (NSError *)sdl_lifecycle_unknownRemoteErrorWithDescription:(NSString *)description andReason:(NSString *)reason;
++ (NSError *)sdl_lifecycle_unknownRemoteErrorWithDescription:(nullable NSString *)description andReason:(nullable NSString *)reason;
+ (NSError *)sdl_lifecycle_managersFailedToStart;
-+ (NSError *)sdl_lifecycle_startedWithBadResult:(SDLResult)result info:(NSString *)info;
-+ (NSError *)sdl_lifecycle_startedWithWarning:(SDLResult)result info:(NSString *)info;
-+ (NSError *)sdl_lifecycle_failedWithBadResult:(SDLResult)result info:(NSString *)info;
++ (NSError *)sdl_lifecycle_startedWithBadResult:(nullable SDLResult)result info:(nullable NSString *)info;
++ (NSError *)sdl_lifecycle_startedWithWarning:(nullable SDLResult)result info:(nullable NSString *)info;
++ (NSError *)sdl_lifecycle_failedWithBadResult:(nullable SDLResult)result info:(nullable NSString *)info;
+ (NSError *)sdl_lifecycle_multipleRequestsCancelled;
#pragma mark SDLFileManager
@@ -59,9 +62,10 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore;
+ (NSError *)sdl_fileManager_dataMissingError;
+ (NSError *)sdl_fileManager_staticIconError;
-#pragma mark Show Managers
+#pragma mark Screen Managers
+ (NSError *)sdl_softButtonManager_pendingUpdateSuperseded;
++ (NSError *)sdl_subscribeButtonManager_notSubscribed;
+ (NSError *)sdl_textAndGraphicManager_pendingUpdateSuperseded;
#pragma mark Menu Manager
@@ -94,6 +98,14 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore;
+ (NSError *)sdl_rpcStore_invalidObjectErrorWithObject:(id)wrongObject expectedType:(Class)type;
+#pragma mark Cache File Manager
+
++ (NSError *)sdl_cacheFileManager_updateIconArchiveFileFailed;
+
+#pragma mark Audio Stream Manager
+
++ (NSError *)sdl_audioStreamManager_notConnected;
+
@end
@interface NSException (SDLExceptions)
@@ -104,7 +116,8 @@ extern SDLErrorDomain *const SDLErrorDomainRPCStore;
+ (NSException *)sdl_invalidSoftButtonStateException;
+ (NSException *)sdl_carWindowOrientationException;
+ (NSException *)sdl_invalidLockscreenSetupException;
-+ (NSException *)sdl_invalidSelectorExceptionWithSelector:(SEL)selector;
++ (NSException *)sdl_invalidSystemCapabilitySelectorExceptionWithSelector:(SEL)selector;
++ (NSException *)sdl_invalidSubscribeButtonSelectorExceptionWithSelector:(SEL)selector;
@end
diff --git a/SmartDeviceLink/SDLError.m b/SmartDeviceLink/SDLError.m
index d98609d89..19e37950f 100644
--- a/SmartDeviceLink/SDLError.m
+++ b/SmartDeviceLink/SDLError.m
@@ -19,20 +19,23 @@ SDLErrorDomain *const SDLErrorDomainEncryptionLifecycleManager = @"com.sdl.encry
SDLErrorDomain *const SDLErrorDomainFileManager = @"com.sdl.filemanager.error";
SDLErrorDomain *const SDLErrorDomainTextAndGraphicManager = @"com.sdl.textandgraphicmanager.error";
SDLErrorDomain *const SDLErrorDomainSoftButtonManager = @"com.sdl.softbuttonmanager.error";
+SDLErrorDomain *const SDLErrorDomainSubscribeButtonManager = @"com.sdl.subscribebuttonmanager.error";
SDLErrorDomain *const SDLErrorDomainMenuManager = @"com.sdl.menumanager.error";
SDLErrorDomain *const SDLErrorDomainChoiceSetManager = @"com.sdl.choicesetmanager.error";
SDLErrorDomain *const SDLErrorDomainSystemCapabilityManager = @"com.sdl.systemcapabilitymanager.error";
SDLErrorDomain *const SDLErrorDomainTransport = @"com.sdl.transport.error";
SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+SDLErrorDomain *const SDLErrorDomainCacheFileManager = @"com.sdl.cachefilemanager.error";
+SDLErrorDomain *const SDLErrorDomainAudioStreamManager = @"com.sdl.extension.pcmAudioStreamManager";
@implementation NSError (SDLErrors)
#pragma mark - SDLEncryptionLifecycleManager
+ (NSError *)sdl_encryption_lifecycle_notReadyError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Encryption Lifecycle manager not ready", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library is not finished setting up the connection, please wait until the encryption lifecycleState is SDLEncryptionLifecycleStateReady", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure HMI is not NONE and at least one RPC requires encryption in permissions?", nil)
+ NSLocalizedDescriptionKey: @"Encryption Lifecycle manager not ready",
+ NSLocalizedFailureReasonErrorKey: @"The SDL library is not finished setting up the connection, please wait until the encryption lifecycleState is SDLEncryptionLifecycleStateReady",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure HMI is not NONE and at least one RPC requires encryption in permissions?"
};
return [NSError errorWithDomain:SDLErrorDomainEncryptionLifecycleManager
@@ -42,9 +45,9 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_encryption_lifecycle_encryption_off {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Encryption Lifecycle received a ACK with encryption bit = 0", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library received ACK with encryption = OFF.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure you are on a supported remote head unit with proper policies and your app id is approved.", nil)
+ NSLocalizedDescriptionKey: @"Encryption Lifecycle received a ACK with encryption bit = 0",
+ NSLocalizedFailureReasonErrorKey: @"The SDL library received ACK with encryption = OFF.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure you are on a supported remote head unit with proper policies and your app id is approved."
};
return [NSError errorWithDomain:SDLErrorDomainEncryptionLifecycleManager
@@ -54,9 +57,9 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_encryption_lifecycle_nak {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Encryption Lifecycle received a negative acknowledgement", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The remote head unit sent a NAK. Encryption service failed to start due to NAK.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure your certificates are valid.", nil)
+ NSLocalizedDescriptionKey: @"Encryption Lifecycle received a negative acknowledgement",
+ NSLocalizedFailureReasonErrorKey: @"The remote head unit sent a NAK. Encryption service failed to start due to NAK.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure your certificates are valid."
};
return [NSError errorWithDomain:SDLErrorDomainEncryptionLifecycleManager
@@ -67,10 +70,12 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
#pragma mark - SDLManager
-+ (NSError *)sdl_lifecycle_rpcErrorWithDescription:(NSString *)description andReason:(NSString *)reason {
++ (NSError *)sdl_lifecycle_rpcErrorWithDescription:(nullable NSString *)description andReason:(nullable NSString *)reason {
+ NSString *descriptionString = description ?: @"";
+ NSString *reasonString = reason ?: @"";
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(description, nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil)
+ NSLocalizedDescriptionKey: descriptionString,
+ NSLocalizedFailureReasonErrorKey: reasonString
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
code:SDLManagerErrorRPCRequestFailed
@@ -79,8 +84,8 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_lifecycle_notConnectedError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Could not find a connection", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library could not find a current connection to an SDL hardware device", nil)
+ NSLocalizedDescriptionKey: @"Could not find a connection",
+ NSLocalizedFailureReasonErrorKey: @"The SDL library could not find a current connection to an SDL hardware device"
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
@@ -90,8 +95,8 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_lifecycle_notReadyError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Lifecycle manager not ready", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The SDL library is not finished setting up the connection, please wait until the lifecycleState is SDLLifecycleStateReady", nil)
+ NSLocalizedDescriptionKey: @"Lifecycle manager not ready",
+ NSLocalizedFailureReasonErrorKey: @"The SDL library is not finished setting up the connection, please wait until the lifecycleState is SDLLifecycleStateReady"
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
@@ -99,10 +104,12 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
userInfo:userInfo];
}
-+ (NSError *)sdl_lifecycle_unknownRemoteErrorWithDescription:(NSString *)description andReason:(NSString *)reason {
++ (NSError *)sdl_lifecycle_unknownRemoteErrorWithDescription:(nullable NSString *)description andReason:(nullable NSString *)reason {
+ NSString *descriptionString = description ?: @"";
+ NSString *reasonString = reason ?: @"";
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(description, nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(reason, nil)
+ NSLocalizedDescriptionKey: descriptionString,
+ NSLocalizedFailureReasonErrorKey: reasonString
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
code:SDLManagerErrorUnknownRemoteError
@@ -115,30 +122,36 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
userInfo:nil];
}
-+ (NSError *)sdl_lifecycle_startedWithBadResult:(SDLResult)result info:(NSString *)info {
++ (NSError *)sdl_lifecycle_startedWithBadResult:(nullable SDLResult)result info:(nullable NSString *)info {
+ NSString *resultString = result ?: @"";
+ NSString *infoString = info ?: @"";
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(result, nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(info, nil)
+ NSLocalizedDescriptionKey: resultString,
+ NSLocalizedFailureReasonErrorKey: infoString
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
code:SDLManagerErrorRegistrationFailed
userInfo:userInfo];
}
-+ (NSError *)sdl_lifecycle_startedWithWarning:(SDLResult)result info:(NSString *)info {
++ (NSError *)sdl_lifecycle_startedWithWarning:(nullable SDLResult)result info:(nullable NSString *)info {
+ NSString *resultString = result ?: @"";
+ NSString *infoString = info ?: @"";
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(result, nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(info, nil)
+ NSLocalizedDescriptionKey: resultString,
+ NSLocalizedFailureReasonErrorKey: infoString
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
code:SDLManagerErrorRegistrationSuccessWithWarning
userInfo:userInfo];
}
-+ (NSError *)sdl_lifecycle_failedWithBadResult:(SDLResult)result info:(NSString *)info {
++ (NSError *)sdl_lifecycle_failedWithBadResult:(nullable SDLResult)result info:(nullable NSString *)info {
+ NSString *resultString = result ?: @"";
+ NSString *infoString = info ?: @"";
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(result, nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(info, nil)
+ NSLocalizedDescriptionKey: resultString,
+ NSLocalizedFailureReasonErrorKey: infoString
};
return [NSError errorWithDomain:SDLErrorDomainLifecycleManager
code:SDLManagerErrorRegistrationFailed
@@ -156,36 +169,36 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_fileManager_cannotOverwriteError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Cannot overwrite remote file", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The remote file system already has a file of this name, and the file manager is set to not automatically overwrite files", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Set SDLFileManager autoOverwrite to YES, or call forceUploadFile:completion:", nil)
+ NSLocalizedDescriptionKey: @"Cannot overwrite remote file",
+ NSLocalizedFailureReasonErrorKey: @"The remote file system already has a file of this name, and the file manager is set to not automatically overwrite files",
+ NSLocalizedRecoverySuggestionErrorKey: @"Set SDLFileManager autoOverwrite to YES, or call forceUploadFile:completion:"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorCannotOverwrite userInfo:userInfo];
}
+ (NSError *)sdl_fileManager_noKnownFileError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"No such remote file is currently known", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The remote file is not currently known by the file manager. It could be that this file does not exist on the remote system or that the file manager has not completed its initialization and received a list of files from the remote system.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure a file with this name is present on the remote system and that the file manager has finished its initialization.", nil)
+ NSLocalizedDescriptionKey: @"No such remote file is currently known",
+ NSLocalizedFailureReasonErrorKey: @"The remote file is not currently known by the file manager. It could be that this file does not exist on the remote system or that the file manager has not completed its initialization and received a list of files from the remote system.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure a file with this name is present on the remote system and that the file manager has finished its initialization."
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorNoKnownFile userInfo:userInfo];
}
+ (NSError *)sdl_fileManager_unableToStartError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file manager was unable to start", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"This may be because files are not supported on this unit and / or LISTFILES returned an error", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that the system is sending back a proper LIST FILES response", nil)
+ NSLocalizedDescriptionKey: @"The file manager was unable to start",
+ NSLocalizedFailureReasonErrorKey: @"This may be because files are not supported on this unit and / or LISTFILES returned an error",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that the system is sending back a proper LIST FILES response"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorUnableToStart userInfo:userInfo];
}
+ (NSError *)sdl_fileManager_unableToUploadError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file manager was unable to send this file", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"This could be because the file manager has not started, or the head unit does not support files", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that the system is sending back a proper LIST FILES response and check the file manager's state", nil)
+ NSLocalizedDescriptionKey: @"The file manager was unable to send this file",
+ NSLocalizedFailureReasonErrorKey: @"This could be because the file manager has not started, or the head unit does not support files",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that the system is sending back a proper LIST FILES response and check the file manager's state"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorUnableToUpload userInfo:userInfo];
}
@@ -200,27 +213,27 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_fileManager_fileUploadCanceled {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file upload was canceled", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The file upload transaction was canceled before it could be completed", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"The file upload was canceled", nil)
+ NSLocalizedDescriptionKey: @"The file upload was canceled",
+ NSLocalizedFailureReasonErrorKey: @"The file upload transaction was canceled before it could be completed",
+ NSLocalizedRecoverySuggestionErrorKey: @"The file upload was canceled"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerUploadCanceled userInfo:userInfo];
}
+ (NSError *)sdl_fileManager_dataMissingError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file upload was canceled", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The data for the file is missing", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure the data used to create the file is valid", nil)
+ NSLocalizedDescriptionKey: @"The file upload was canceled",
+ NSLocalizedFailureReasonErrorKey: @"The data for the file is missing",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure the data used to create the file is valid"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorFileDataMissing userInfo:userInfo];
}
+ (NSError *)sdl_fileManager_staticIconError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file upload was canceled", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The file is a static icon, which cannot be uploaded", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Stop trying to upload a static icon, set it via the screen manager or create an SDLImage instead", nil)
+ NSLocalizedDescriptionKey: @"The file upload was canceled",
+ NSLocalizedFailureReasonErrorKey: @"The file is a static icon, which cannot be uploaded",
+ NSLocalizedRecoverySuggestionErrorKey: @"Stop trying to upload a static icon, set it via the screen manager or create an SDLImage instead"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorStaticIcon userInfo:userInfo];
}
@@ -229,9 +242,9 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_fileManager_fileDoesNotExistError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"The file manager was unable to send the file", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"This could be because the file does not exist at the specified file path or that passed data is invalid", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that the the correct file path is being set and that the passed data is valid", nil)
+ NSLocalizedDescriptionKey: @"The file manager was unable to send the file",
+ NSLocalizedFailureReasonErrorKey: @"This could be because the file does not exist at the specified file path or that passed data is invalid",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that the the correct file path is being set and that the passed data is valid"
};
return [NSError errorWithDomain:SDLErrorDomainFileManager code:SDLFileManagerErrorFileDoesNotExist userInfo:userInfo];
}
@@ -246,6 +259,15 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
return [NSError errorWithDomain:SDLErrorDomainSoftButtonManager code:SDLSoftButtonManagerErrorPendingUpdateSuperseded userInfo:nil];
}
++ (NSError *)sdl_subscribeButtonManager_notSubscribed {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: @"Subscribe Button Manager error",
+ NSLocalizedFailureReasonErrorKey: @"The subscribe button manager has not yet subscribed to the button being unsubscribed.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure you have used the Subscribe Button Manager to subscribe to the button name that you are attempting to unsubscribe."
+ };
+ return [NSError errorWithDomain:SDLErrorDomainSubscribeButtonManager code:SDLSubscribeButtonManagerErrorNotSubscribed userInfo:userInfo];
+}
+
#pragma mark Menu Manager
+ (NSError *)sdl_menuManager_failedToUpdateWithDictionary:(NSDictionary *)userInfo {
@@ -268,9 +290,9 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_choiceSetManager_failedToCreateMenuItems {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Choice Set Manager error", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Choice set manager failed to create menu items due to menuName being empty.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"If you are setting the menuName, it is possible that the head unit is sending incorrect displayCapabilities.", nil)
+ NSLocalizedDescriptionKey: @"Choice Set Manager error",
+ NSLocalizedFailureReasonErrorKey: @"Choice set manager failed to create menu items due to menuName being empty.",
+ NSLocalizedRecoverySuggestionErrorKey: @"If you are setting the menuName, it is possible that the head unit is sending incorrect displayCapabilities."
};
return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorFailedToCreateMenuItems userInfo:userInfo];
}
@@ -279,8 +301,8 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
NSString *errorString = [NSString stringWithFormat:@"Choice Set Manager error invalid state: %@", state];
NSDictionary<NSString *, NSString *> *userInfo = @{
NSLocalizedDescriptionKey: errorString,
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The choice set manager could be in an invalid state because the head unit doesn't support choice sets or the manager failed to set up correctly.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"If you are setting the menuName, it is possible that the head unit is sending incorrect displayCapabilities.", nil)
+ NSLocalizedFailureReasonErrorKey: @"The choice set manager could be in an invalid state because the head unit doesn't support choice sets or the manager failed to set up correctly.",
+ NSLocalizedRecoverySuggestionErrorKey: @"If you are setting the menuName, it is possible that the head unit is sending incorrect displayCapabilities."
};
return [NSError errorWithDomain:SDLErrorDomainChoiceSetManager code:SDLChoiceSetManagerErrorInvalidState userInfo:userInfo];
}
@@ -289,27 +311,27 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_systemCapabilityManager_moduleDoesNotSupportSystemCapabilities {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Module does not understand system capabilities", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The connected module does not support system capabilities", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Use isCapabilitySupported to find out if the feature is supported on the head unit, but no more information about the feature is available on this module", nil)
+ NSLocalizedDescriptionKey: @"Module does not understand system capabilities",
+ NSLocalizedFailureReasonErrorKey: @"The connected module does not support system capabilities",
+ NSLocalizedRecoverySuggestionErrorKey: @"Use isCapabilitySupported to find out if the feature is supported on the head unit, but no more information about the feature is available on this module"
};
return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities userInfo:userInfo];
}
+ (NSError *)sdl_systemCapabilityManager_cannotUpdateInHMINONE {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"System capabilities cannot be updated in HMI NONE.", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The system capability manager attempted to subscribe or update a system capability in HMI NONE, which is not allowed.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Wait until you are in HMI BACKGROUND, LIMITED, OR FULL before subscribing or updating a capability.", nil)
+ NSLocalizedDescriptionKey: @"System capabilities cannot be updated in HMI NONE.",
+ NSLocalizedFailureReasonErrorKey: @"The system capability manager attempted to subscribe or update a system capability in HMI NONE, which is not allowed.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Wait until you are in HMI BACKGROUND, LIMITED, OR FULL before subscribing or updating a capability."
};
return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorHMINone userInfo:userInfo];
}
+ (NSError *)sdl_systemCapabilityManager_cannotUpdateTypeDISPLAYS {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"System capability type DISPLAYS cannot be updated.", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The system capability manager attempted to update system capability type DISPLAYS, which is not allowed.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Subscribe to DISPLAYS to automatically receive updates or retrieve a cached display capability value directly from the SystemCapabilityManager.", nil)
+ NSLocalizedDescriptionKey: @"System capability type DISPLAYS cannot be updated.",
+ NSLocalizedFailureReasonErrorKey: @"The system capability manager attempted to update system capability type DISPLAYS, which is not allowed.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Subscribe to DISPLAYS to automatically receive updates or retrieve a cached display capability value directly from the SystemCapabilityManager."
};
return [NSError errorWithDomain:SDLErrorDomainSystemCapabilityManager code:SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays userInfo:userInfo];
}
@@ -318,36 +340,36 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_transport_unknownError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection error", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"TCP connection cannot be established due to unknown error.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified, and the phone is connected to the correct Wi-Fi network.", nil)
+ NSLocalizedDescriptionKey: @"TCP connection error",
+ NSLocalizedFailureReasonErrorKey: @"TCP connection cannot be established due to unknown error.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that correct IP address and TCP port number are specified, and the phone is connected to the correct Wi-Fi network."
};
return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorUnknown userInfo:userInfo];
}
+ (NSError *)sdl_transport_connectionRefusedError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection cannot be established", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The TCP connection is refused by head unit. Possible causes are that the specified TCP port number is not correct, or SDL Core is not running properly on the head unit.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified. Also, make sure that SDL Core on the head unit enables TCP transport.", nil)
+ NSLocalizedDescriptionKey: @"TCP connection cannot be established",
+ NSLocalizedFailureReasonErrorKey: @"The TCP connection is refused by head unit. Possible causes are that the specified TCP port number is not correct, or SDL Core is not running properly on the head unit.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that correct IP address and TCP port number are specified. Also, make sure that SDL Core on the head unit enables TCP transport."
};
return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorConnectionRefused userInfo:userInfo];
}
+ (NSError *)sdl_transport_connectionTimedOutError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"TCP connection timed out", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"The TCP connection cannot be established within a given time. Possible causes are that the specified IP address is not correct, or the connection is blocked by a firewall.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that correct IP address and TCP port number are specified. Also, make sure that the head unit's system configuration accepts TCP connections.", nil)
+ NSLocalizedDescriptionKey: @"TCP connection timed out",
+ NSLocalizedFailureReasonErrorKey: @"The TCP connection cannot be established within a given time. Possible causes are that the specified IP address is not correct, or the connection is blocked by a firewall.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that correct IP address and TCP port number are specified. Also, make sure that the head unit's system configuration accepts TCP connections."
};
return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorConnectionTimedOut userInfo:userInfo];
}
+ (NSError *)sdl_transport_networkDownError {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Network is not available", nil),
- NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"TCP connection cannot be established because the phone is not connected to the network. Possible causes are: Wi-Fi being disabled on the phone or the phone is connected to a wrong Wi-Fi network.", nil),
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Make sure that the phone is connected to the Wi-Fi network that has the head unit on it. Also, make sure that correct IP address and TCP port number are specified.", nil)
+ NSLocalizedDescriptionKey: @"Network is not available",
+ NSLocalizedFailureReasonErrorKey: @"TCP connection cannot be established because the phone is not connected to the network. Possible causes are: Wi-Fi being disabled on the phone or the phone is connected to a wrong Wi-Fi network.",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that the phone is connected to the Wi-Fi network that has the head unit on it. Also, make sure that correct IP address and TCP port number are specified."
};
return [NSError errorWithDomain:SDLErrorDomainTransport code:SDLTransportErrorNetworkDown userInfo:userInfo];
}
@@ -356,13 +378,35 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
+ (NSError *)sdl_rpcStore_invalidObjectErrorWithObject:(id)wrongObject expectedType:(Class)type {
NSDictionary<NSString *, NSString *> *userInfo = @{
- NSLocalizedDescriptionKey: NSLocalizedString(@"Type of stored value doesn't match with requested", nil),
+ NSLocalizedDescriptionKey: @"Type of stored value doesn't match with requested",
NSLocalizedFailureReasonErrorKey: [NSString stringWithFormat:@"Requested %@ but returned %@", NSStringFromClass(type), NSStringFromClass([wrongObject class])],
- NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Check the object type returned from the head unit system", nil)
+ NSLocalizedRecoverySuggestionErrorKey: @"Check the object type returned from the head unit system"
};
return [NSError errorWithDomain:SDLErrorDomainRPCStore code:SDLRPCStoreErrorGetInvalidObject userInfo:userInfo];
}
+#pragma mark Cache File Manager
+
++ (NSError *)sdl_cacheFileManager_updateIconArchiveFileFailed {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: @"Failed to update the icon archive file",
+ NSLocalizedFailureReasonErrorKey: @"Unable to archive icon archive file to file path",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that file path is valid"
+ };
+ return [NSError errorWithDomain:SDLErrorDomainCacheFileManager code:SDLCacheManagerErrorUpdateIconArchiveFileFailure userInfo:userInfo];
+}
+
+#pragma mark Audio Stream Manager
++ (NSError *)sdl_audioStreamManager_notConnected {
+ NSDictionary<NSString *, NSString *> *userInfo = @{
+ NSLocalizedDescriptionKey: @"Couldn't send audio data, the audio service is not connected",
+ NSLocalizedFailureReasonErrorKey: @"The audio service must be connected before sending audio data",
+ NSLocalizedRecoverySuggestionErrorKey: @"Make sure that a connection has been established, you are a NAVIGATION app and have the NAVIGATION app type in your configuration, and you are the active NAVIGATION app"
+ };
+
+ return [NSError errorWithDomain:SDLErrorDomainAudioStreamManager code:SDLAudioStreamManagerErrorNotConnected userInfo:userInfo];
+}
+
@end
@@ -405,12 +449,18 @@ SDLErrorDomain *const SDLErrorDomainRPCStore = @"com.sdl.rpcStore.error";
userInfo:nil];
}
-+ (NSException *)sdl_invalidSelectorExceptionWithSelector:(SEL)selector {
++ (NSException *)sdl_invalidSystemCapabilitySelectorExceptionWithSelector:(SEL)selector {
return [NSException exceptionWithName:@"com.sdl.systemCapabilityManager.selectorException"
reason:[NSString stringWithFormat:@"Capability observation selector: %@ does not match possible selectors, which must have between 0 and 3 parameters, or is not a selector on the observer object. Check that your selector is formatted correctly, and that your observer is not nil. You should unsubscribe an observer before it goes to nil.", NSStringFromSelector(selector)]
userInfo:nil];
}
++ (NSException *)sdl_invalidSubscribeButtonSelectorExceptionWithSelector:(SEL)selector {
+ return [NSException exceptionWithName:@"com.sdl.subscribeButtonManager.selectorException"
+ reason:[NSString stringWithFormat:@"Subscribe button observation selector: %@ does not match possible selectors, which must have between 0 and 4 parameters, or is not a selector on the observer object. Check that your selector is formatted correctly, and that your observer is not nil. You should unsubscribe an observer before it goes to nil.", NSStringFromSelector(selector)]
+ userInfo:nil];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLErrorConstants.h b/SmartDeviceLink/SDLErrorConstants.h
index a4e80c34f..89e46c133 100644
--- a/SmartDeviceLink/SDLErrorConstants.h
+++ b/SmartDeviceLink/SDLErrorConstants.h
@@ -119,7 +119,7 @@ typedef NS_ENUM(NSInteger, SDLTextAndGraphicManagerError) {
};
/**
- Errors associated with the ScreenManager class
+ Errors associated with the Soft Button Manager class
*/
typedef NS_ENUM(NSInteger, SDLSoftButtonManagerError) {
/// A pending update was superseded by a newer requested update. The old update will not be sent
@@ -127,6 +127,14 @@ typedef NS_ENUM(NSInteger, SDLSoftButtonManagerError) {
};
/**
+ Errors associated with the Subscribe Button Manager class
+ */
+typedef NS_ENUM(NSInteger, SDLSubscribeButtonManagerError) {
+ /// Attempting to unsubscribe to a subscribe button that has not yet been subscribed to yet.
+ SDLSubscribeButtonManagerErrorNotSubscribed = -1
+};
+
+/**
Errors associated with the ScreenManager class
*/
typedef NS_ENUM(NSInteger, SDLMenuManagerError) {
@@ -152,9 +160,15 @@ typedef NS_ENUM(NSInteger, SDLChoiceSetManagerError) {
SDLChoiceSetManagerErrorInvalidState = -5
};
+/// Errors associated with the system capability manager
typedef NS_ENUM(NSInteger, SDLSystemCapabilityManagerError) {
+ /// The connected head unit does not support any system capabilities
SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities = -1,
+
+ /// You must be in an HMI Level other than NONE to request or subscribe to capabilites other than DISPLAYS
SDLSystemCapabilityManagerErrorHMINone = -2,
+
+ /// You may not update the system capability type DISPLAYS because it is always subscribed
SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays = -3
};
@@ -192,3 +206,18 @@ typedef NS_ENUM(NSInteger, SDLRPCStoreError) {
*/
SDLRPCStoreErrorGetInvalidObject = -1,
};
+
+/// Errors related to the cache file manager
+typedef NS_ENUM(NSInteger, SDLCacheFileManagerError) {
+ /// Failed to update archive file
+ SDLCacheManagerErrorUpdateIconArchiveFileFailure = -1,
+};
+
+/// Errors related to the audio stream manager
+typedef NS_ENUM(NSInteger, SDLAudioStreamManagerError) {
+ /// The audio stream is not currently connected
+ SDLAudioStreamManagerErrorNotConnected = -1,
+
+ /// Attempted to play but there's no audio in the queue
+ SDLAudioStreamManagerErrorNoQueuedAudio = -2
+};
diff --git a/SmartDeviceLink/SDLFocusableItemLocator.m b/SmartDeviceLink/SDLFocusableItemLocator.m
index b4fc294b5..e416c2a3a 100644
--- a/SmartDeviceLink/SDLFocusableItemLocator.m
+++ b/SmartDeviceLink/SDLFocusableItemLocator.m
@@ -47,11 +47,21 @@ NS_ASSUME_NONNULL_BEGIN
_focusableViews = [NSMutableArray array];
_enableHapticDataRequests = NO;
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_projectionViewUpdated:) name:SDLDidUpdateProjectionView object:nil];
return self;
}
+- (void)start {
+ SDLLogD(@"Starting");
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_projectionViewUpdated:) name:SDLDidUpdateProjectionView object:nil];
+}
+
+- (void)stop {
+ SDLLogD(@"Stopping");
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [self.focusableViews removeAllObjects];
+}
+
- (void)updateInterfaceLayout {
if (@available(iOS 9.0, *)) {
[self.focusableViews removeAllObjects];
@@ -63,7 +73,11 @@ NS_ASSUME_NONNULL_BEGIN
[self.focusableViews exchangeObjectAtIndex:preferredViewIndex withObjectAtIndex:0];
}
+ SDLLogD(@"Updated VC layout, sending new haptic rects");
+ SDLLogV(@"For focusable views: %@", self.focusableViews);
[self sdl_sendHapticRPC];
+ } else {
+ SDLLogE(@"Attempted to update user interface layout, but it only works on iOS 9.0+");
}
}
@@ -78,10 +92,14 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
+ SDLLogD(@"Parsing UIView heirarchy");
+ SDLLogV(@"UIView: %@", currentView);
if (@available(iOS 9.0, *)) {
+ // Finding focusable subviews
NSArray *focusableSubviews = [currentView.subviews filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(UIView * _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
return (evaluatedObject.canBecomeFocused || [evaluatedObject isKindOfClass:[UIButton class]]);
}]];
+ SDLLogV(@"Found focusable subviews: %@", focusableSubviews);
BOOL isButton = [currentView isKindOfClass:[UIButton class]];
if ((currentView.canBecomeFocused || isButton) && focusableSubviews.count == 0) {
@@ -129,7 +147,7 @@ NS_ASSUME_NONNULL_BEGIN
}
SDLLogV(@"Sending haptic data: %@", hapticRects);
- SDLSendHapticData* hapticRPC = [[SDLSendHapticData alloc] initWithHapticRectData:hapticRects];
+ SDLSendHapticData *hapticRPC = [[SDLSendHapticData alloc] initWithHapticRectData:hapticRects];
[self.connectionManager sendConnectionManagerRequest:hapticRPC withResponseHandler:nil];
}
@@ -151,6 +169,7 @@ NS_ASSUME_NONNULL_BEGIN
}
}
+ SDLLogD(@"Found a focusable view: %@, for point: %@", selectedView, NSStringFromCGPoint(point));
return selectedView;
}
diff --git a/SmartDeviceLink/SDLFocusableItemLocatorType.h b/SmartDeviceLink/SDLFocusableItemLocatorType.h
index 400d9460d..cc43ad207 100644
--- a/SmartDeviceLink/SDLFocusableItemLocatorType.h
+++ b/SmartDeviceLink/SDLFocusableItemLocatorType.h
@@ -36,6 +36,12 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (instancetype)initWithViewController:(UIViewController *)viewController connectionManager:(id<SDLConnectionManagerType>)connectionManager videoScaleManager:(SDLStreamingVideoScaleManager *)videoScaleManager;
+/// Start observing updates
+- (void)start;
+
+/// Stop observing updates and clear data
+- (void)stop;
+
/**
updateInterfaceLayout crawls through the view hierarchy, updates and keep tracks of views to be reported through Haptic RPC. This function is automatically called when SDLDidUpdateProjectionView notification is sent by the application.
*/
diff --git a/SmartDeviceLink/SDLFuelRange.h b/SmartDeviceLink/SDLFuelRange.h
index 3220256cb..981ecd94b 100644
--- a/SmartDeviceLink/SDLFuelRange.h
+++ b/SmartDeviceLink/SDLFuelRange.h
@@ -6,6 +6,8 @@
// Copyright © 2018 smartdevicelink. All rights reserved.
//
+#import "SDLCapacityUnit.h"
+#import "SDLComponentVolumeStatus.h"
#import "SDLRPCMessage.h"
#import "SDLFuelType.h"
@@ -17,6 +19,41 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLFuelRange : SDLRPCStruct
/**
+ * @param type - type
+ * @param range - @(range)
+ * @param level - @(level)
+ * @param levelState - levelState
+ * @param capacity - @(capacity)
+ * @param capacityUnit - capacityUnit
+ * @return A SDLFuelRange object
+ */
+- (instancetype)initWithType:(nullable SDLFuelType)type range:(float)range level:(float)level levelState:(nullable SDLComponentVolumeStatus)levelState capacity:(float)capacity capacityUnit:(nullable SDLCapacityUnit)capacityUnit;
+
+/**
+ * The absolute capacity of this fuel type.
+ *
+ * Optional, Float, 0.0 - 1000000.0
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLFloat> *capacity;
+
+/**
+ * The unit of the capacity of this fuel type such as liters for gasoline or kWh for batteries.
+ */
+@property (strong, nonatomic, nullable) SDLCapacityUnit capacityUnit;
+
+/**
+ * The relative remaining capacity of this fuel type (percentage).
+ *
+ * Optional, Float, -6.0 - 1000000.0
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLFloat> *level;
+
+/**
+ * The fuel level state.
+ */
+@property (strong, nonatomic, nullable) SDLComponentVolumeStatus levelState;
+
+/**
* The vehicle's fuel type
*
* Optional
diff --git a/SmartDeviceLink/SDLFuelRange.m b/SmartDeviceLink/SDLFuelRange.m
index 1512a0957..f8e54736d 100644
--- a/SmartDeviceLink/SDLFuelRange.m
+++ b/SmartDeviceLink/SDLFuelRange.m
@@ -15,6 +15,20 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLFuelRange
+- (instancetype)initWithType:(nullable SDLFuelType)type range:(float)range level:(float)level levelState:(nullable SDLComponentVolumeStatus)levelState capacity:(float)capacity capacityUnit:(nullable SDLCapacityUnit)capacityUnit {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+ self.type = type;
+ self.range = @(range);
+ self.level = @(level);
+ self.levelState = levelState;
+ self.capacity = @(capacity);
+ self.capacityUnit = capacityUnit;
+ return self;
+}
+
- (void)setType:(nullable SDLFuelType)type {
[self.store sdl_setObject:type forName:SDLRPCParameterNameType];
}
@@ -31,6 +45,41 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectForName:SDLRPCParameterNameRange ofClass:NSNumber.class error:nil];
}
+- (void)setLevel:(nullable NSNumber<SDLFloat> *)level {
+ [self.store sdl_setObject:level forName:SDLRPCParameterNameLevel];
+}
+
+- (nullable NSNumber<SDLFloat> *)level {
+ NSError *error = nil;
+ return [self.store sdl_objectForName:SDLRPCParameterNameLevel ofClass:NSNumber.class error:&error];
+}
+
+- (void)setLevelState:(nullable SDLComponentVolumeStatus)levelState {
+ [self.store sdl_setObject:levelState forName:SDLRPCParameterNameLevelState];
+}
+
+- (nullable SDLComponentVolumeStatus)levelState {
+ NSError *error = nil;
+ return [self.store sdl_enumForName:SDLRPCParameterNameLevelState error:&error];
+}
+
+- (void)setCapacity:(nullable NSNumber<SDLFloat> *)capacity {
+ [self.store sdl_setObject:capacity forName:SDLRPCParameterNameCapacity];
+}
+
+- (nullable NSNumber<SDLFloat> *)capacity {
+ NSError *error = nil;
+ return [self.store sdl_objectForName:SDLRPCParameterNameCapacity ofClass:NSNumber.class error:&error];
+}
+
+- (void)setCapacityUnit:(nullable SDLCapacityUnit)capacityUnit {
+ [self.store sdl_setObject:capacityUnit forName:SDLRPCParameterNameCapacityUnit];
+}
+
+- (nullable SDLCapacityUnit)capacityUnit {
+ NSError *error = nil;
+ return [self.store sdl_enumForName:SDLRPCParameterNameCapacityUnit error:&error];
+}
@end
diff --git a/SmartDeviceLink/SDLFunctionID.m b/SmartDeviceLink/SDLFunctionID.m
index 69e545fa1..1a3b93bbb 100644
--- a/SmartDeviceLink/SDLFunctionID.m
+++ b/SmartDeviceLink/SDLFunctionID.m
@@ -116,10 +116,13 @@ NS_ASSUME_NONNULL_BEGIN
@32785: SDLRPCFunctionNameOnRCStatus,
@32786: SDLRPCFunctionNameOnAppServiceData,
@32787: SDLRPCFunctionNameOnSystemCapabilityUpdated,
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@65536: SDLRPCFunctionNameEncodedSyncPData,
@65537: SDLRPCFunctionNameSyncPData,
@98304: SDLRPCFunctionNameOnEncodedSyncPData,
@98305: SDLRPCFunctionNameOnSyncPData
+#pragma clang diagnostic pop
};
return self;
}
diff --git a/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.h b/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.h
index a22ec39d9..cbe315df2 100644
--- a/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.h
+++ b/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.h
@@ -20,9 +20,9 @@ NS_ASSUME_NONNULL_BEGIN
"true" - if SDL grants the permission for the requested module
"false" - SDL denies the permission for the requested module.
- Optional
+ Optional, contains a boolean
*/
-@property (strong, nonatomic, nullable) NSArray<NSNumber<SDLBool> *> *allowed;
+@property (strong, nonatomic, nullable) NSArray<NSNumber *> *allowed;
@end
diff --git a/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.m b/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.m
index 872eded62..369b63645 100644
--- a/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.m
+++ b/SmartDeviceLink/SDLGetInteriorVehicleDataConsentResponse.m
@@ -22,11 +22,11 @@
}
#pragma clang diagnostic pop
-- (void)setAllowed:(nullable NSArray<NSNumber<SDLBool> *> *)allowed {
+- (void)setAllowed:(nullable NSArray<NSNumber *> *)allowed {
[self.parameters sdl_setObject:allowed forName:SDLRPCParameterNameAllowed];
}
-- (nullable NSArray<NSNumber<SDLBool> *> *)allowed {
+- (nullable NSArray<NSNumber *> *)allowed {
NSError *error = nil;
return [self.parameters sdl_objectsForName:SDLRPCParameterNameAllowed ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLGetVehicleData.h b/SmartDeviceLink/SDLGetVehicleData.h
index 8e7082037..2410b63e1 100644
--- a/SmartDeviceLink/SDLGetVehicleData.h
+++ b/SmartDeviceLink/SDLGetVehicleData.h
@@ -47,7 +47,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Get wiperStatus data
* @return A SDLGetVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for getting data for all possible vehicle data items.
@@ -83,7 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Get wiperStatus data
* @return A SDLGetVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for getting data for all possible vehicle data items.
@@ -120,7 +120,43 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Get wiperStatus data
* @return A SDLGetVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus;
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
+
+/**
+ * Convenience init for getting data for all possible vehicle data items.
+ *
+ * @param gps - gps
+ * @param speed - speed
+ * @param rpm - rpm
+ * @param instantFuelConsumption - instantFuelConsumption
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - externalTemperature
+ * @param turnSignal - turnSignal
+ * @param vin - vin
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - engineTorque
+ * @param accPedalPosition - accPedalPosition
+ * @param steeringWheelAngle - steeringWheelAngle
+ * @param engineOilLife - engineOilLife
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModeStatus - clusterModeStatus
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLGetVehicleData object
+ */
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal vin:(nullable NSNumber<SDLBool> *)vin prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering;
/**
* A boolean value. If true, requests GPS data.
@@ -140,12 +176,12 @@ NS_ASSUME_NONNULL_BEGIN
/**
* A boolean value. If true, requests Fuel Level data.
*/
-@property (nullable, strong, nonatomic) NSNumber<SDLBool> *fuelLevel;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* A boolean value. If true, requests Fuel Level State data.
*/
-@property (nullable, strong, nonatomic) NSNumber<SDLBool> *fuelLevel_State;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* A boolean value. If true, requests Fuel Range data.
@@ -208,6 +244,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *wiperStatus;
/**
+ * To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *handsOffSteering;
+
+/**
* A boolean value. If true, requests Head Lamp Status data.
*/
@property (nullable, strong, nonatomic) NSNumber<SDLBool> *headLampStatus;
diff --git a/SmartDeviceLink/SDLGetVehicleData.m b/SmartDeviceLink/SDLGetVehicleData.m
index 30b8dfe81..0ebc322b2 100644
--- a/SmartDeviceLink/SDLGetVehicleData.m
+++ b/SmartDeviceLink/SDLGetVehicleData.m
@@ -15,57 +15,88 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameGetVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameGetVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO vin:vin wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:nil externalTemperature:@(externalTemperature) turnSignal:nil vin:@(vin) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:nil electronicParkBrakeStatus:nil cloudAppVehicleID:nil eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation cloudAppVehicleID:NO clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:electronicParkBrakeStatus emergencyEvent:emergencyEvent engineOilLife:engineOilLife engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:fuelRange gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:turnSignal vin:vin wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) vin:@(vin) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:nil eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
+}
+
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
+ return [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) vin:@(vin) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:@(cloudAppVehicleID) eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal vin:(BOOL)vin wiperStatus:(BOOL)wiperStatus {
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) vin:@(vin) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:@(cloudAppVehicleID) eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
+}
+
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal vin:(nullable NSNumber<SDLBool> *)vin prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
self = [self init];
if (!self) {
return nil;
}
-
- self.accPedalPosition = @(accelerationPedalPosition);
- self.airbagStatus = @(airbagStatus);
- self.beltStatus = @(beltStatus);
- self.bodyInformation = @(bodyInformation);
- self.cloudAppVehicleID = @(cloudAppVehicleID);
- self.clusterModeStatus = @(clusterModeStatus);
- self.deviceStatus = @(deviceStatus);
- self.driverBraking = @(driverBraking);
- self.eCallInfo = @(eCallInfo);
- self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
- self.emergencyEvent = @(emergencyEvent);
- self.engineOilLife = @(engineOilLife);
- self.engineTorque = @(engineTorque);
- self.externalTemperature = @(externalTemperature);
- self.fuelLevel = @(fuelLevel);
- self.fuelLevel_State = @(fuelLevelState);
- self.fuelRange = @(fuelRange);
- self.myKey = @(myKey);
- self.odometer = @(odometer);
- self.gps = @(gps);
- self.headLampStatus = @(headLampStatus);
- self.instantFuelConsumption = @(instantFuelConsumption);
- self.prndl = @(prndl);
- self.rpm = @(rpm);
- self.speed = @(speed);
- self.steeringWheelAngle = @(steeringWheelAngle);
- self.tirePressure = @(tirePressure);
- self.turnSignal = @(turnSignal);
- self.vin = @(vin);
- self.wiperStatus = @(wiperStatus);
-
+ self.gps = gps;
+ self.speed = speed;
+ self.rpm = rpm;
+ self.instantFuelConsumption = instantFuelConsumption;
+ self.fuelRange = fuelRange;
+ self.externalTemperature = externalTemperature;
+ self.turnSignal = turnSignal;
+ self.vin = vin;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = engineTorque;
+ self.accPedalPosition = accPedalPosition;
+ self.steeringWheelAngle = steeringWheelAngle;
+ self.engineOilLife = engineOilLife;
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModeStatus = clusterModeStatus;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
return self;
}
@@ -317,6 +348,14 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:NSNumber.class error:nil];
}
+- (void)setHandsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable NSNumber<SDLBool> *)handsOffSteering {
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:NSNumber.class error:nil];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGetVehicleDataResponse.h b/SmartDeviceLink/SDLGetVehicleDataResponse.h
index 7e727aebd..4da91a44c 100644
--- a/SmartDeviceLink/SDLGetVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLGetVehicleDataResponse.h
@@ -35,6 +35,43 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLGetVehicleDataResponse : SDLRPCResponse
/**
+ * initializes a new allocated object of the SDLGetVehicleDataResponse class
+ *
+ * @param accPedalPosition Accelerator pedal position (percentage depressed), optional
+ * @param airbagStatus The status of the air bags, optional
+ * @param beltStatus The status of the seat belts, optional
+ * @param bodyInformation The body information including power modes, optional
+ * @param cloudAppVehicleID The cloud app vehicle ID, optional
+ * @param clusterModeStatus The status modes of the cluster, optional
+ * @param deviceStatus The IVI system status including signal and battery strength, optional
+ * @param driverBraking The status of the brake pedal, optional
+ * @param eCallInfo Emergency Call notification and confirmation data, optional
+ * @param electronicParkBrakeStatus The status of the electronic parking brake, optional
+ * @param emergencyEvent Information related to an emergency event (and if it occurred), optional
+ * @param engineOilLife The estimated percentage (0% - 100%) of remaining oil life of the engine, optional
+ * @param engineTorque Torque value for engine (in Nm) on non-diesel variants, optional
+ * @param externalTemperature The external temperature in degrees celsius., optional
+ * @param fuelRange The estimate range in KM the vehicle can travel based on fuel level and consumption. Optional, Array of length 0 - 100, of SDLFuelRange
+ * @param gps The car current GPS coordinates, optional
+ * @param handsOffSteering To indicate whether driver hands are off the steering wheel, optional
+ * @param headLampStatus Status of the head lamps, optional
+ * @param instantFuelConsumption The instantaneous fuel consumption in microlitres, optional
+ * @param myKey Information related to the MyKey feature, optional
+ * @param odometer Odometer reading in km, optional
+ * @param prndl The current gear shift state of the user's vehicle, optional
+ * @param rpm The number of revolutions per minute of the engine., optional
+ * @param speed The vehicle speed in kilometers per hour, optional
+ * @param steeringWheelAngle Current angle of the steering wheel (in deg), optional
+ * @param tirePressure The current pressure warnings for the user's vehicle, optional
+ * @param turnSignal The status of the turn signal, optional
+ * @param vin The Vehicle Identification Number, optional
+ * @param wiperStatus The status of the wipers, optional
+ *
+ * @return an initialized object of the SDLGetVehicleDataResponse class or nil
+ */
+- (instancetype)initWithGps:(nullable SDLGPSData *)gps speed:(float)speed rpm:(nullable NSNumber<SDLUInt> *)rpm instantFuelConsumption:(float)instantFuelConsumption fuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange externalTemperature:(float)externalTemperature turnSignal:(nullable SDLTurnSignal)turnSignal vin:(nullable NSString *)vin prndl:(nullable SDLPRNDL)prndl tirePressure:(nullable SDLTireStatus *)tirePressure odometer:(nullable NSNumber<SDLUInt> *)odometer beltStatus:(nullable SDLBeltStatus *)beltStatus bodyInformation:(nullable SDLBodyInformation *)bodyInformation deviceStatus:(nullable SDLDeviceStatus *)deviceStatus driverBraking:(nullable SDLVehicleDataEventStatus)driverBraking wiperStatus:(nullable SDLWiperStatus)wiperStatus headLampStatus:(nullable SDLHeadLampStatus *)headLampStatus engineTorque:(float)engineTorque accPedalPosition:(float)accPedalPosition steeringWheelAngle:(float)steeringWheelAngle engineOilLife:(float)engineOilLife electronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSString *)cloudAppVehicleID eCallInfo:(nullable SDLECallInfo *)eCallInfo airbagStatus:(nullable SDLAirbagStatus *)airbagStatus emergencyEvent:(nullable SDLEmergencyEvent *)emergencyEvent clusterModeStatus:(nullable SDLClusterModeStatus *)clusterModeStatus myKey:(nullable SDLMyKey *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering;
+
+/**
The car current GPS coordinates
*/
@property (nullable, strong, nonatomic) SDLGPSData *gps;
@@ -52,12 +89,12 @@ NS_ASSUME_NONNULL_BEGIN
/**
The fuel level in the tank (percentage)
*/
-@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *fuelLevel;
+@property (strong, nonatomic, nullable) NSNumber<SDLFloat> *fuelLevel __deprecated_msg("use fuelRange.level instead on 7.0+ RPC version connections");
/**
The fuel level state
*/
-@property (nullable, strong, nonatomic) SDLComponentVolumeStatus fuelLevel_State;
+@property (strong, nonatomic, nullable) SDLComponentVolumeStatus fuelLevel_State __deprecated_msg("use fuelRange.levelState instead on 7.0+ RPC version connections");
/**
The estimate range in KM the vehicle can travel based on fuel level and consumption
@@ -122,6 +159,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLWiperStatus wiperStatus;
/**
+ To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *handsOffSteering;
+
+/**
Status of the head lamps
*/
@property (nullable, strong, nonatomic) SDLHeadLampStatus *headLampStatus;
diff --git a/SmartDeviceLink/SDLGetVehicleDataResponse.m b/SmartDeviceLink/SDLGetVehicleDataResponse.m
index 25ddde3f4..dfca48bbb 100644
--- a/SmartDeviceLink/SDLGetVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLGetVehicleDataResponse.m
@@ -27,12 +27,51 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameGetVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameGetVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
+- (instancetype)initWithGps:(nullable SDLGPSData *)gps speed:(float)speed rpm:(nullable NSNumber<SDLUInt> *)rpm instantFuelConsumption:(float)instantFuelConsumption fuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange externalTemperature:(float)externalTemperature turnSignal:(nullable SDLTurnSignal)turnSignal vin:(nullable NSString *)vin prndl:(nullable SDLPRNDL)prndl tirePressure:(nullable SDLTireStatus *)tirePressure odometer:(nullable NSNumber<SDLUInt> *)odometer beltStatus:(nullable SDLBeltStatus *)beltStatus bodyInformation:(nullable SDLBodyInformation *)bodyInformation deviceStatus:(nullable SDLDeviceStatus *)deviceStatus driverBraking:(nullable SDLVehicleDataEventStatus)driverBraking wiperStatus:(nullable SDLWiperStatus)wiperStatus headLampStatus:(nullable SDLHeadLampStatus *)headLampStatus engineTorque:(float)engineTorque accPedalPosition:(float)accPedalPosition steeringWheelAngle:(float)steeringWheelAngle engineOilLife:(float)engineOilLife electronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSString *)cloudAppVehicleID eCallInfo:(nullable SDLECallInfo *)eCallInfo airbagStatus:(nullable SDLAirbagStatus *)airbagStatus emergencyEvent:(nullable SDLEmergencyEvent *)emergencyEvent clusterModeStatus:(nullable SDLClusterModeStatus *)clusterModeStatus myKey:(nullable SDLMyKey *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.gps = gps;
+ self.speed = @(speed);
+ self.rpm = rpm;
+ self.instantFuelConsumption = @(instantFuelConsumption);
+ self.fuelRange = fuelRange;
+ self.externalTemperature = @(externalTemperature);
+ self.turnSignal = turnSignal;
+ self.vin = vin;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = @(engineTorque);
+ self.accPedalPosition = @(accPedalPosition);
+ self.steeringWheelAngle = @(steeringWheelAngle);
+ self.engineOilLife = @(engineOilLife);
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModeStatus = clusterModeStatus;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
+ return self;
+}
+
- (void)setGps:(nullable SDLGPSData *)gps {
[self.parameters sdl_setObject:gps forName:SDLRPCParameterNameGPS];
}
@@ -281,6 +320,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:NSObject.class error:nil];
}
+- (void)setHandsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable NSNumber<SDLBool> *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:NSNumber.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGlobals.h b/SmartDeviceLink/SDLGlobals.h
index 004a0e8d9..321fc60b4 100644
--- a/SmartDeviceLink/SDLGlobals.h
+++ b/SmartDeviceLink/SDLGlobals.h
@@ -43,6 +43,11 @@ extern void *const SDLConcurrentQueueName;
- (void)setDynamicMTUSize:(NSUInteger)maxMTUSize forServiceType:(SDLServiceType)serviceType;
- (NSUInteger)mtuSizeForServiceType:(SDLServiceType)serviceType;
+/// Calls a block on an SDL sub-queue of the internal serial SDLProcessingQueue. If the call to this method is already on that queue, the block will be run, if it is not, a `dispatch_sync` will occur to that queue first.
+/// @param queue The queue to run on. The passed queue should be a sub-queue of the SDLProcessingQueue. If it is not and the call to this method occurs on the passed queue, a deadlock will occur because the check will not pass correctly.
+/// @param block The block to run on the serial sub-queue.
++ (void)runSyncOnSerialSubQueue:(dispatch_queue_t)queue block:(void (^)(void))block;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLGlobals.m b/SmartDeviceLink/SDLGlobals.m
index dc78e7a56..00d764edb 100644
--- a/SmartDeviceLink/SDLGlobals.m
+++ b/SmartDeviceLink/SDLGlobals.m
@@ -15,8 +15,8 @@
NS_ASSUME_NONNULL_BEGIN
// VERSION DEPENDENT CODE
-NSString *const SDLMaxProxyProtocolVersion = @"5.2.0";
-NSString *const SDLMaxProxyRPCVersion = @"6.0.0";
+NSString *const SDLMaxProxyProtocolVersion = @"5.3.0";
+NSString *const SDLMaxProxyRPCVersion = @"7.0.0";
NSUInteger const SDLDefaultMTUSize = UINT32_MAX;
NSUInteger const SDLV1MTUSize = 1024;
@@ -71,6 +71,13 @@ typedef NSNumber *MTUBox;
return self;
}
++ (void)runSyncOnSerialSubQueue:(dispatch_queue_t)queue block:(void (^)(void))block {
+ if (dispatch_get_specific(SDLProcessingQueueName) != nil) {
+ block();
+ } else {
+ dispatch_sync(queue, block);
+ }
+}
#pragma mark - Custom Getters / Setters
diff --git a/SmartDeviceLink/SDLH264VideoEncoder.h b/SmartDeviceLink/SDLH264VideoEncoder.h
index 29f15515e..58bde0508 100644
--- a/SmartDeviceLink/SDLH264VideoEncoder.h
+++ b/SmartDeviceLink/SDLH264VideoEncoder.h
@@ -51,7 +51,7 @@ extern NSString *const SDLErrorDomainVideoEncoder;
/**
* The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.
*
- * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
+ * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
* @discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it's OK to call it once per frame.
*/
@property (assign, nonatomic, readonly) CVPixelBufferPoolRef CV_NULLABLE pixelBufferPool;
diff --git a/SmartDeviceLink/SDLH264VideoEncoder.m b/SmartDeviceLink/SDLH264VideoEncoder.m
index 933a4f48a..2d58a1263 100644
--- a/SmartDeviceLink/SDLH264VideoEncoder.m
+++ b/SmartDeviceLink/SDLH264VideoEncoder.m
@@ -22,10 +22,15 @@ static NSDictionary<NSString *, id>* _defaultVideoEncoderSettings;
@interface SDLH264VideoEncoder ()
@property (assign, nonatomic, nullable) VTCompressionSessionRef compressionSession;
-@property (assign, nonatomic, nullable) CFDictionaryRef sdl_pixelBufferOptions;
+@property (assign, nonatomic, nullable) CFDictionaryRef pixelBufferOptions;
@property (assign, nonatomic) NSUInteger currentFrameNumber;
@property (assign, nonatomic) double timestampOffset;
+@property (assign, nonatomic, readwrite) CVPixelBufferPoolRef CV_NULLABLE pixelBufferPool;
+
+/// Width and height of the video frame.
+@property (assign, nonatomic) CGSize dimensions;
+
@end
@@ -54,62 +59,22 @@ static NSDictionary<NSString *, id>* _defaultVideoEncoderSettings;
_compressionSession = NULL;
_currentFrameNumber = 0;
_videoEncoderSettings = properties;
-
+ _dimensions = dimensions;
_delegate = delegate;
-
- OSStatus status;
-
- // Create a compression session
- status = VTCompressionSessionCreate(NULL, (int32_t)dimensions.width, (int32_t)dimensions.height, kCMVideoCodecType_H264, NULL, self.sdl_pixelBufferOptions, NULL, &sdl_videoEncoderOutputCallback, (__bridge void *)self, &_compressionSession);
-
- if (status != noErr) {
- if (!*error) {
- *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionCreationFailure userInfo:@{ @"OSStatus": @(status) }];
- SDLLogE(@"Error attempting to create video compression session: %@", *error);
- }
-
+
+ BOOL compressionSessionCreated = [self sdl_createCompressionSessionWithError:error];
+ if (!compressionSessionCreated) {
return nil;
}
-
- CFRelease(_sdl_pixelBufferOptions);
- _sdl_pixelBufferOptions = nil;
-
- // Validate that the video encoder properties are valid.
- CFDictionaryRef supportedProperties;
- status = VTSessionCopySupportedPropertyDictionary(self.compressionSession, &supportedProperties);
- if (status != noErr) {
- if (!*error) {
- *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{ @"OSStatus": @(status) }];
- }
-
+
+ BOOL videoEncoderPropertiesValid = [self sdl_validateVideoEncoderPropertiesOnCompressionSession:self.compressionSession withError:error];
+ if (!videoEncoderPropertiesValid) {
return nil;
}
-
- NSArray* videoEncoderKeys = self.videoEncoderSettings.allKeys;
- for (NSString *key in videoEncoderKeys) {
- if (CFDictionaryContainsKey(supportedProperties, (__bridge CFStringRef)key) == false) {
- if (!*error) {
- NSString *description = [NSString stringWithFormat:@"\"%@\" is not a supported key.", key];
- *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey: description}];
- }
- CFRelease(supportedProperties);
- return nil;
- }
- }
- CFRelease(supportedProperties);
-
- // Populate the video encoder settings from provided dictionary.
- for (NSString *key in videoEncoderKeys) {
- id value = self.videoEncoderSettings[key];
-
- status = VTSessionSetProperty(self.compressionSession, (__bridge CFStringRef)key, (__bridge CFTypeRef)value);
- if (status != noErr) {
- if (!*error) {
- NSString *description = [NSString stringWithFormat:@"Setting key failed \"%@\"", key];
- *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey: description, @"OSStatus": @(status)}];
- }
- return nil;
- }
+
+ BOOL propertiesSetOnCompressionSession = [self sdl_setPropertiesOnCompressionSession:self.compressionSession withError:error];
+ if (!propertiesSetOnCompressionSession) {
+ return nil;
}
if ([protocol isEqualToEnum:SDLVideoStreamingProtocolRAW]) {
@@ -117,23 +82,23 @@ static NSDictionary<NSString *, id>* _defaultVideoEncoderSettings;
} else if ([protocol isEqualToEnum:SDLVideoStreamingProtocolRTP]) {
_packetizer = [[SDLRTPH264Packetizer alloc] initWithSSRC:ssrc];
} else {
- if (!*error) {
- *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorProtocolUnknown userInfo:@{ @"encoder": protocol}];
+ if (error != NULL) {
+ *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorProtocolUnknown userInfo:@{@"encoder": protocol}];
}
return nil;
}
- _timestampOffset = 0.0;
-
return self;
}
- (void)stop {
- if (self.compressionSession != NULL) {
- VTCompressionSessionInvalidate(self.compressionSession);
- CFRelease(self.compressionSession);
- self.compressionSession = NULL;
- }
+ _currentFrameNumber = 0;
+ _timestampOffset = 0.0;
+
+ CFRelease(_pixelBufferOptions);
+ _pixelBufferOptions = nil;
+
+ [self sdl_invalidateCompressionSession];
}
- (BOOL)encodeFrame:(CVImageBufferRef)imageBuffer {
@@ -153,6 +118,11 @@ static NSDictionary<NSString *, id>* _defaultVideoEncoderSettings;
OSStatus status = VTCompressionSessionEncodeFrame(_compressionSession, imageBuffer, presentationTimestamp, kCMTimeInvalid, NULL, (__bridge void *)self, NULL);
+ // HAX: [#1620](https://github.com/smartdevicelink/sdl_ios/issues/1620) On some older iPhones VTCompressionSessionEncodeFrame fails with a kVTInvalidSessionErr when the device is locked. Attempt to fix this by recreating the compression session.
+ if (status == kVTInvalidSessionErr) {
+ [self sdl_resetCompressionSession];
+ }
+
return (status == noErr);
}
@@ -176,11 +146,28 @@ static NSDictionary<NSString *, id>* _defaultVideoEncoderSettings;
}
- (CVPixelBufferPoolRef CV_NULLABLE)pixelBufferPool {
- return VTCompressionSessionGetPixelBufferPool(self.compressionSession);
+ // HAX: When the app is backgrounded, sometimes the compression session gets invalidated (this can happen the first time the app is backgrounded or the tenth). This causes the pool and/or the compression session to fail when the app is foregrounded and video frames are sent again. Attempt to fix this by recreating the compression session.
+ if (_pixelBufferPool == NULL) {
+ BOOL success = [self sdl_resetCompressionSession];
+ if (!success) {
+ return NULL;
+ }
+
+ _pixelBufferPool = VTCompressionSessionGetPixelBufferPool(self.compressionSession);
+ }
+
+ return _pixelBufferPool;
}
#pragma mark - Private
#pragma mark Callback
+
+/// Callback function that VideoToolbox calls when encoding is complete.
+/// @param outputCallbackRefCon The callback's reference value
+/// @param sourceFrameRefCon The frame's reference value
+/// @param status Returns `noErr` if compression was successful, or an error if not successful
+/// @param infoFlags Information about the encode operation (frame dropped or if encode ran asynchronously)
+/// @param sampleBuffer Contains the compressed frame if compression was successful and the frame was not dropped; null otherwise
void sdl_videoEncoderOutputCallback(void * CM_NULLABLE outputCallbackRefCon, void * CM_NULLABLE sourceFrameRefCon, OSStatus status, VTEncodeInfoFlags infoFlags, CM_NULLABLE CMSampleBufferRef sampleBuffer) {
// If there was an error in the encoding, drop the frame
if (status != noErr) {
@@ -216,8 +203,8 @@ void sdl_videoEncoderOutputCallback(void * CM_NULLABLE outputCallbackRefCon, voi
}
#pragma mark Getters
-- (CFDictionaryRef _Nullable)sdl_pixelBufferOptions {
- if (_sdl_pixelBufferOptions == nil) {
+- (CFDictionaryRef _Nullable)pixelBufferOptions {
+ if (_pixelBufferOptions == nil) {
CFMutableDictionaryRef pixelBufferOptions = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
OSType pixelFormatType = kCVPixelFormatType_32BGRA;
@@ -230,10 +217,10 @@ void sdl_videoEncoderOutputCallback(void * CM_NULLABLE outputCallbackRefCon, voi
CFRelease(pixelFormatNumberRef);
- _sdl_pixelBufferOptions = pixelBufferOptions;
+ _pixelBufferOptions = pixelBufferOptions;
}
- return _sdl_pixelBufferOptions;
+ return _pixelBufferOptions;
}
#pragma mark Helpers
@@ -307,11 +294,116 @@ void sdl_videoEncoderOutputCallback(void * CM_NULLABLE outputCallbackRefCon, voi
// Move to the next NAL unit in the block buffer
bufferOffset += AVCCHeaderLength + NALUnitLength;
}
-
-
+
return nalUnits;
}
+/// Forces the completion of any pending frames and invalidates the current VTCompressionSession
+- (void)sdl_invalidateCompressionSession {
+ if (self.compressionSession == NULL) { return; }
+
+ VTCompressionSessionCompleteFrames(self.compressionSession, kCMTimeInvalid);
+ VTCompressionSessionInvalidate(self.compressionSession);
+ CFRelease(self.compressionSession);
+ self.compressionSession = NULL;
+}
+
+/// Recreates a compression session and sets the video encoder properties on the session after an error occurs.
+/// @return True if the compression session was created successfully; false if not
+- (BOOL)sdl_resetCompressionSession {
+ // Destroy the current compression session before attempting to create a new one. Otherwise the attempt to create a new compression session sometimes fails.
+ [self sdl_invalidateCompressionSession];
+
+ NSError *error = nil;
+ BOOL compressionSessionCreated = [self sdl_createCompressionSessionWithError:&error];
+ if (!compressionSessionCreated) {
+ SDLLogE(@"Error creating the compression session: %@", error.localizedDescription);
+ return NO;
+ }
+
+ BOOL propertiesSetOnCompressionSession = [self sdl_setPropertiesOnCompressionSession:self.compressionSession withError:&error];
+ if (!propertiesSetOnCompressionSession) {
+ SDLLogE(@"Error setting the properties on the compression session: %@", error.localizedDescription);
+ return NO;
+ }
+
+ return YES;
+}
+
+/// Creates a compression session using the dimensions passed when the video encoder was created.
+/// @param error Error set if the compression session was not created successfully
+/// @return True if the compression session was created successfully; false if not
+- (BOOL)sdl_createCompressionSessionWithError:(NSError **)error {
+ OSStatus status = VTCompressionSessionCreate(NULL, (int32_t)self.dimensions.width, (int32_t)self.dimensions.height, kCMVideoCodecType_H264, NULL, self.pixelBufferOptions, NULL, &sdl_videoEncoderOutputCallback, (__bridge void *)self, &_compressionSession);
+
+ if (status != noErr) {
+ if (error != NULL) {
+ *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionCreationFailure userInfo:@{@"OSStatus":@(status), NSLocalizedDescriptionKey:@"Compression session could not be created"}];
+ }
+
+ return NO;
+ }
+
+ return (status == noErr);
+}
+
+/// Validates the properties set by the developer into the encoder settings dictionary. If any are not available for use, the session will be cancelled.
+/// @param compressionSession The compression session on which the video encoder properties will be set
+/// @param error Error set if the video encoder properties are not valid
+/// @return True if the video encoder properties are valid; false if not
+- (BOOL)sdl_validateVideoEncoderPropertiesOnCompressionSession:(VTCompressionSessionRef)compressionSession withError:(NSError **)error {
+ OSStatus status;
+
+ // Validate that the video encoder properties are valid.
+ CFDictionaryRef supportedProperties;
+ status = VTSessionCopySupportedPropertyDictionary(compressionSession, &supportedProperties);
+ if (status != noErr) {
+ if (error != NULL) {
+ *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{@"OSStatus":@(status), NSLocalizedDescriptionKey:[NSString stringWithFormat:@"\"%@\" are not supported properties.", supportedProperties]}];
+ }
+ return NO;
+ }
+
+ NSArray<NSString *> *videoEncoderKeys = self.videoEncoderSettings.allKeys;
+ for (NSString *key in videoEncoderKeys) {
+ if (CFDictionaryContainsKey(supportedProperties, (__bridge CFStringRef)key) == false) {
+ if (error != NULL) {
+ *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{NSLocalizedDescriptionKey:[NSString stringWithFormat:@"\"%@\" is not a supported key.", key]}];
+ }
+ CFRelease(supportedProperties);
+ return NO;
+ }
+ }
+ CFRelease(supportedProperties);
+
+ return YES;
+}
+
+/// Sets the video encoding properties on the compression session.
+/// @param compressionSession The compression session on which to set the video encoding properties
+/// @param error Error set if the properties were not successfully set on the video toolbox session
+/// @return True if the video encoding properties were set successfully; false if not
+- (BOOL)sdl_setPropertiesOnCompressionSession:(VTCompressionSessionRef)compressionSession withError:(NSError **)error {
+ OSStatus status;
+
+ NSArray* videoEncoderKeys = self.videoEncoderSettings.allKeys;
+ for (NSString *key in videoEncoderKeys) {
+ id value = self.videoEncoderSettings[key];
+ status = VTSessionSetProperty(compressionSession, (__bridge CFStringRef)key, (__bridge CFTypeRef)value);
+ if (status != noErr) {
+ if (error != NULL) {
+ *error = [NSError errorWithDomain:SDLErrorDomainVideoEncoder code:SDLVideoEncoderErrorConfigurationCompressionSessionSetPropertyFailure userInfo:@{@"OSStatus": @(status), NSLocalizedDescriptionKey:[NSString stringWithFormat:@"Setting key failed \"%@\"", key]}];
+ }
+ return NO;
+ }
+ }
+
+ self.currentFrameNumber = 0;
+ self.timestampOffset = 0.0;
+
+ return YES;
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLHMICapabilities.h b/SmartDeviceLink/SDLHMICapabilities.h
index 84a2eecf7..3d2187631 100644
--- a/SmartDeviceLink/SDLHMICapabilities.h
+++ b/SmartDeviceLink/SDLHMICapabilities.h
@@ -1,6 +1,34 @@
-//
-// SDLHMICapabilities.h
-// SmartDeviceLink-iOS
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLRPCStruct.h"
@@ -14,6 +42,19 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLHMICapabilities : SDLRPCStruct
/**
+ * @param navigation - navigation
+ * @param phoneCall - phoneCall
+ * @param videoStreaming - videoStreaming
+ * @param remoteControl - remoteControl
+ * @param appServices - appServices
+ * @param displays - displays
+ * @param seatLocation - seatLocation
+ * @param driverDistraction - driverDistraction
+ * @return A SDLHMICapabilities object
+ */
+- (instancetype)initWithNavigation:(nullable NSNumber<SDLBool> *)navigation phoneCall:(nullable NSNumber<SDLBool> *)phoneCall videoStreaming:(nullable NSNumber<SDLBool> *)videoStreaming remoteControl:(nullable NSNumber<SDLBool> *)remoteControl appServices:(nullable NSNumber<SDLBool> *)appServices displays:(nullable NSNumber<SDLBool> *)displays seatLocation:(nullable NSNumber<SDLBool> *)seatLocation driverDistraction:(nullable NSNumber<SDLBool> *)driverDistraction;
+
+/**
Availability of built in Nav. True: Available, False: Not Available
Boolean value. Optional.
@@ -78,6 +119,13 @@ NS_ASSUME_NONNULL_BEGIN
**/
@property (nullable, copy, nonatomic) NSNumber<SDLBool> *seatLocation;
+/**
+ * Availability of driver distraction capability. True: Available, False: Not Available
+ *
+ * @since SDL 7.0.0
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLBool> *driverDistraction;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLHMICapabilities.m b/SmartDeviceLink/SDLHMICapabilities.m
index fd0104e5e..ece1d811c 100644
--- a/SmartDeviceLink/SDLHMICapabilities.m
+++ b/SmartDeviceLink/SDLHMICapabilities.m
@@ -1,6 +1,34 @@
-//
-// SDLHMICapabilities.m
-// SmartDeviceLink-iOS
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLHMICapabilities.h"
@@ -11,6 +39,22 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLHMICapabilities
+- (instancetype)initWithNavigation:(nullable NSNumber<SDLBool> *)navigation phoneCall:(nullable NSNumber<SDLBool> *)phoneCall videoStreaming:(nullable NSNumber<SDLBool> *)videoStreaming remoteControl:(nullable NSNumber<SDLBool> *)remoteControl appServices:(nullable NSNumber<SDLBool> *)appServices displays:(nullable NSNumber<SDLBool> *)displays seatLocation:(nullable NSNumber<SDLBool> *)seatLocation driverDistraction:(nullable NSNumber<SDLBool> *)driverDistraction {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.navigation = navigation;
+ self.phoneCall = phoneCall;
+ self.videoStreaming = videoStreaming;
+ self.remoteControl = remoteControl;
+ self.appServices = appServices;
+ self.displays = displays;
+ self.seatLocation = seatLocation;
+ self.driverDistraction = driverDistraction;
+
+ return self;
+}
+
- (void)setNavigation:(nullable NSNumber<SDLBool> *)navigation {
[self.store sdl_setObject:navigation forName:SDLRPCParameterNameNavigation];
}
@@ -67,6 +111,14 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectForName:SDLRPCParameterNameSeatLocation ofClass:NSNumber.class error:nil];
}
+- (void)setDriverDistraction:(nullable NSNumber<SDLBool> *)driverDistraction {
+ [self.store sdl_setObject:driverDistraction forName:SDLRPCParameterNameDriverDistraction];
+}
+
+- (nullable NSNumber<SDLBool> *)driverDistraction {
+ return [self.store sdl_objectForName:SDLRPCParameterNameDriverDistraction ofClass:NSNumber.class error:nil];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLIAPControlSession.m b/SmartDeviceLink/SDLIAPControlSession.m
index e6505e4b3..50d7a98e4 100644
--- a/SmartDeviceLink/SDLIAPControlSession.m
+++ b/SmartDeviceLink/SDLIAPControlSession.m
@@ -49,57 +49,58 @@ int const ProtocolIndexTimeoutSeconds = 10;
- (void)startSession {
if (self.accessory == nil) {
SDLLogW(@"There is no control session in progress, attempting to create a new control session.");
- if (self.delegate == nil) { return; }
[self.delegate controlSessionShouldRetry];
} else {
SDLLogD(@"Starting a control session with accessory (%@)", self.accessory.name);
-
- if (![self sdl_startStreams]) {
- SDLLogW(@"Control session failed to setup with accessory: %@. Attempting to create a new control session", self.accessory);
- [self destroySession];
- if (self.delegate == nil) { return; }
- [self.delegate controlSessionShouldRetry];
- } else {
- SDLLogD(@"Waiting for the protocol string from Core, setting timer for %d seconds", ProtocolIndexTimeoutSeconds);
- self.protocolIndexTimer = [self sdl_createControlSessionProtocolIndexStringDataTimeoutTimer];
- }
+ __weak typeof(self) weakSelf = self;
+ [self sdl_startStreamsWithCompletionHandler:^(BOOL success) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (!success) {
+ SDLLogW(@"Control session failed to setup with accessory: %@. Attempting to create a new control session", strongSelf.accessory);
+ [strongSelf destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.delegate controlSessionShouldRetry];
+ }];
+ } else {
+ SDLLogD(@"Waiting for the protocol string from Core, setting timeout timer for %d seconds", ProtocolIndexTimeoutSeconds);
+ strongSelf.protocolIndexTimer = [strongSelf sdl_createControlSessionProtocolIndexStringDataTimeoutTimer];
+ }
+ }];
}
}
-- (BOOL)sdl_startStreams {
- if (![super createSession]) { return NO; }
+/// Opens the input and output streams for the session on the main thread.
+/// @discussion We must close the input/output streams from the same thread that owns the streams' run loop, otherwise if the streams are closed from another thread a random crash may occur. Since only a small amount of data will be transmitted on this stream before it is closed, we will open and close the streams on the main thread instead of creating a separate thread.
+- (void)sdl_startStreamsWithCompletionHandler:(void (^)(BOOL success))completionHandler {
+ if (![super createSession]) {
+ return completionHandler(NO);
+ }
+
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
- // No need for its own thread as only a small amount of data will be transmitted before control session is destroyed
- SDLLogD(@"Created the control session successfully");
- [super startStream:self.eaSession.outputStream];
- [super startStream:self.eaSession.inputStream];
+ SDLLogD(@"Created the control session successfully");
+ [super startStream:strongSelf.eaSession.outputStream];
+ [super startStream:strongSelf.eaSession.inputStream];
- return YES;
+ return completionHandler(YES);
+ });
}
#pragma mark Stop
-- (void)destroySession {
+/// Makes sure the session is closed and destroyed on the main thread.
+/// @param disconnectCompletionHandler Handler called when the session has disconnected
+- (void)destroySessionWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
SDLLogD(@"Destroying the control session");
- [self sdl_destroySession];
-}
-
-/**
- * Makes sure the session is closed and destroyed on the main thread.
- */
-- (void)sdl_destroySession {
- if ([NSThread isMainThread]) {
+ dispatch_async(dispatch_get_main_queue(), ^{
[self sdl_stopAndDestroySession];
- } else {
- dispatch_sync(dispatch_get_main_queue(), ^{
- [self sdl_stopAndDestroySession];
- });
- }
+ return disconnectCompletionHandler();
+ });
}
-/**
- * Closes the session streams and then destroys the session.
- */
+/// Closes the session streams and then destroys the session.
- (void)sdl_stopAndDestroySession {
NSAssert(NSThread.isMainThread, @"%@ must only be called on the main thread", NSStringFromSelector(_cmd));
@@ -172,10 +173,12 @@ int const ProtocolIndexTimeoutSeconds = 10;
// End events come in pairs, only perform this once per set.
[self.protocolIndexTimer cancel];
- [self destroySession];
- if (self.delegate == nil) { return; }
- [self.delegate controlSessionShouldRetry];
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.delegate controlSessionShouldRetry];
+ }];
}
/**
@@ -197,14 +200,14 @@ int const ProtocolIndexTimeoutSeconds = 10;
SDLLogD(@"Control Stream will switch to protocol %@", indexedProtocolString);
// Destroy the control session as it is no longer needed, and then create the data session.
- [self destroySession];
-
- if (self.accessory.isConnected) {
- if (self.delegate != nil) {
- [self.delegate controlSession:self didReceiveProtocolString:indexedProtocolString];
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (strongSelf.accessory.isConnected) {
+ [strongSelf.protocolIndexTimer cancel];
+ [strongSelf.delegate controlSession:strongSelf didReceiveProtocolString:indexedProtocolString];
}
- [self.protocolIndexTimer cancel];
- }
+ }];
}
/**
@@ -214,10 +217,11 @@ int const ProtocolIndexTimeoutSeconds = 10;
SDLLogE(@"Control stream error");
[self.protocolIndexTimer cancel];
- [self destroySession];
-
- if (self.delegate == nil) { return; }
- [self.delegate controlSessionShouldRetry];
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.delegate controlSessionShouldRetry];
+ }];
}
#pragma mark - Timer
@@ -234,10 +238,10 @@ int const ProtocolIndexTimeoutSeconds = 10;
void (^elapsedBlock)(void) = ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
SDLLogW(@"Control session failed to get the protocol string from Core after %d seconds, retrying.", ProtocolIndexTimeoutSeconds);
- [strongSelf sdl_destroySession];
-
- if (strongSelf.delegate == nil) { return; }
- [strongSelf.delegate controlSessionShouldRetry];
+ [strongSelf destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.delegate controlSessionShouldRetry];
+ }];
};
protocolIndexTimer.elapsedBlock = elapsedBlock;
@@ -252,14 +256,6 @@ int const ProtocolIndexTimeoutSeconds = 10;
[self.protocolIndexTimer start];
}
-#pragma mark - Lifecycle Destruction
-
-- (void)dealloc {
- SDLLogV(@"SDLIAPControlSession dealloc");
- [self destroySession];
- _protocolIndexTimer = nil;
-}
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLIAPDataSession.m b/SmartDeviceLink/SDLIAPDataSession.m
index 5bf61e304..785573fde 100644
--- a/SmartDeviceLink/SDLIAPDataSession.m
+++ b/SmartDeviceLink/SDLIAPDataSession.m
@@ -16,7 +16,7 @@
#import "SDLMutableDataQueue.h"
NSString *const IOStreamThreadName = @"com.smartdevicelink.iostream";
-NSTimeInterval const IOStreamThreadWaitSecs = 1.0;
+NSTimeInterval const IOStreamThreadCanceledSemaphoreWaitSecs = 1.0;
NS_ASSUME_NONNULL_BEGIN
@@ -25,27 +25,29 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, nonatomic, strong) NSThread *ioStreamThread;
@property (nonatomic, strong) SDLMutableDataQueue *sendDataQueue;
@property (weak, nonatomic) id<SDLIAPDataSessionDelegate> delegate;
-@property (nonatomic, strong) dispatch_semaphore_t canceledSemaphore;
+/// A semaphore used to block the current thread until we know that the I/O streams have been shutdown on the ioStreamThread
+@property (nonatomic, strong) dispatch_semaphore_t ioStreamThreadCancelledSemaphore;
@end
@implementation SDLIAPDataSession
-#pragma mark - Session lifecycle
+#pragma mark - Lifecycle
- (instancetype)initWithAccessory:(nullable EAAccessory *)accessory delegate:(id<SDLIAPDataSessionDelegate>)delegate forProtocol:(NSString *)protocol; {
- SDLLogV(@"SDLIAPDataSession init");
+ SDLLogV(@"iAP data session init for accessory: %@", accessory);
self = [super initWithAccessory:accessory forProtocol:protocol];
if (!self) { return nil; }
_delegate = delegate;
_sendDataQueue = [[SDLMutableDataQueue alloc] init];
- _canceledSemaphore = dispatch_semaphore_create(0);
+ _ioStreamThreadCancelledSemaphore = dispatch_semaphore_create(0);
return self;
}
+
#pragma mark Start
- (void)startSession {
@@ -58,9 +60,12 @@ NS_ASSUME_NONNULL_BEGIN
if (![super createSession]) {
SDLLogW(@"Data session failed to setup with accessory: %@. Retrying...", self.accessory);
- [self destroySession];
- if (self.delegate == nil) { return; }
- [self.delegate dataSessionShouldRetry];
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (strongSelf.delegate == nil) { return; }
+ [strongSelf.delegate dataSessionShouldRetry];
+ }];
}
if (self.eaSession != nil) {
@@ -73,66 +78,56 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Stop
-- (void)destroySession {
+/// Waits for the ioStreamThread to close and destroy the I/O streams.
+/// @param disconnectCompletionHandler Handler called when the session has disconnected
+- (void)destroySessionWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
SDLLogD(@"Destroying the data session");
- [self sdl_destroySession];
- [self.sendDataQueue removeAllObjects];
-}
-
-/**
- * Makes sure the session is closed and destroyed on the main thread.
- */
-- (void)sdl_destroySession {
- if ([NSThread isMainThread]) {
- [self sdl_stopAndDestroySession];
- } else {
- dispatch_sync(dispatch_get_main_queue(), ^{
- [self sdl_stopAndDestroySession];
- });
- }
-}
-
-/**
- * Waits for the session streams to close on the I/O Thread and then destroys the session.
- */
-- (void)sdl_stopAndDestroySession {
- NSAssert(NSThread.isMainThread, @"%@ must only be called on the main thread", NSStringFromSelector(_cmd));
if (self.ioStreamThread == nil) {
- SDLLogV(@"Stopping data session but no thread established.");
+ SDLLogV(@"No data session established");
[super cleanupClosedSession];
- return;
+ return disconnectCompletionHandler();
}
- [self.ioStreamThread cancel];
+ // Tell the ioStreamThread to shutdown the I/O streams. The I/O streams must be opened and closed on the same thread; if they are not, random crashes can occur. Dispatch this task to the main queue to ensure that this task is performed on the Main Thread. We are using the Main Thread for ease since we don't want to create a separate thread just to wait on closing the I/O streams. Using the Main Thread ensures that semaphore wait is not called from ioStreamThread, which would block the ioStreamThread and prevent shutdown.
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+
+ // Attempt to cancel the ioStreamThread. Once the thread realizes it has been cancelled, it will cleanup the I/O streams. Make sure to wake up the run loop in case there is no current I/O event running on the ioThread.
+ [strongSelf.ioStreamThread cancel];
+ [strongSelf performSelector:@selector(sdl_doNothing) onThread:self.ioStreamThread withObject:nil waitUntilDone:NO];
- // Waiting for the I/O streams of the data session to close
- [self sdl_isIOThreadCanceled:self.canceledSemaphore completionHandler:^(BOOL success) {
- if (success == NO) {
- SDLLogE(@"Destroying thread (IOStreamThread) for data session when I/O streams have not yet closed.");
+ // Block the thread until the semaphore has been released by the ioStreamThread (or a timeout has occured).
+ BOOL cancelledSuccessfully = [strongSelf sdl_isIOThreadCancelled];
+ if (!cancelledSuccessfully) {
+ SDLLogE(@"The I/O streams were not shut down successfully. We might not be able to create a new session with an accessory during the same app session. If this happens, only force quitting and restarting the app will allow new sessions.");
}
- self.ioStreamThread = nil;
- [super cleanupClosedSession];
- }];
+
+ [strongSelf.sendDataQueue removeAllObjects];
+
+ disconnectCompletionHandler();
+ });
}
-/**
- * Wait for the data session to detroy its input and output streams. The data EASession can not be destroyed until both streams have closed.
- *
- * @param canceledSemaphore When the canceled semaphore is released, the data session's input and output streams have been destroyed.
- * @param completionHandler Returns whether or not the data session's I/O streams were closed successfully.
- */
-- (void)sdl_isIOThreadCanceled:(dispatch_semaphore_t)canceledSemaphore completionHandler:(void (^)(BOOL success))completionHandler {
- long lWait = dispatch_semaphore_wait(canceledSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(IOStreamThreadWaitSecs * NSEC_PER_SEC)));
+/// Wait for the ioStreamThread to destroy the I/O streams. Make sure this method is not called on the ioStreamThread, as it will block the thread until the timeout occurs.
+/// @return Whether or not the session's I/O streams were closed successfully.
+- (BOOL)sdl_isIOThreadCancelled {
+ NSAssert(![NSThread.currentThread.name isEqualToString:IOStreamThreadName], @"%@ must not be called from the ioStreamThread!", NSStringFromSelector(_cmd));
+
+ long lWait = dispatch_semaphore_wait(self.ioStreamThreadCancelledSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(IOStreamThreadCanceledSemaphoreWaitSecs * NSEC_PER_SEC)));
if (lWait == 0) {
- SDLLogD(@"Stream thread canceled successfully");
- return completionHandler(YES);
- } else {
- SDLLogE(@"Failed to cancel stream thread");
- return completionHandler(NO);
+ SDLLogD(@"ioStreamThread cancelled successfully");
+ return YES;
}
+
+ SDLLogE(@"Failed to cancel ioStreamThread within %.1f seconds", IOStreamThreadCanceledSemaphoreWaitSecs);
+ return NO;
}
+/// Helper method for waking up the ioStreamThread.
+- (void)sdl_doNothing {}
+
#pragma mark - Sending data
- (void)sendData:(NSData *)data {
@@ -256,10 +251,12 @@ NS_ASSUME_NONNULL_BEGIN
// The handler will be called on the I/O thread, but the session stop method must be called on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
- [self destroySession];
-
- if (self.delegate == nil) { return; }
- [self.delegate dataSessionShouldRetry];
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (strongSelf.delegate == nil) { return; }
+ [strongSelf.delegate dataSessionShouldRetry];
+ }];
});
// To prevent deadlocks the handler must return to the runloop and not block the thread
@@ -308,11 +305,14 @@ NS_ASSUME_NONNULL_BEGIN
// To prevent deadlocks the handler must return to the runloop and not block the thread
dispatch_async(dispatch_get_main_queue(), ^{
- [self destroySession];
- if (![self.protocolString isEqualToString:LegacyProtocolString]) {
- if (self.delegate == nil) { return; }
- [self.delegate dataSessionShouldRetry];
- }
+ __weak typeof(self) weakSelf = self;
+ [self destroySessionWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (![strongSelf.protocolString isEqualToString:LegacyProtocolString]) {
+ if (strongSelf.delegate == nil) { return; }
+ [strongSelf.delegate dataSessionShouldRetry];
+ }
+ }];
});
}
@@ -331,17 +331,19 @@ NS_ASSUME_NONNULL_BEGIN
SDLLogD(@"Starting the accessory event loop on thread: %@", NSThread.currentThread.name);
- while (!self.ioStreamThread.cancelled) {
+ while (self.ioStreamThread != nil && !self.ioStreamThread.cancelled) {
// Enqueued data will be written to and read from the streams in the runloop
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.25f]];
}
SDLLogD(@"Closing the accessory event loop on thread: %@", NSThread.currentThread.name);
- // Close I/O streams of the data session. When the streams are closed. Notify the thread that it can close
+ // Close I/O streams
[self sdl_closeSession];
+ [super cleanupClosedSession];
- dispatch_semaphore_signal(self.canceledSemaphore);
+ // If a thread is blocked waiting on the I/O streams to shutdown, let the thread know that shutdown has completed.
+ dispatch_semaphore_signal(self.ioStreamThreadCancelledSemaphore);
}
}
@@ -367,12 +369,6 @@ NS_ASSUME_NONNULL_BEGIN
[super stopStream:stream];
}
-#pragma mark - Lifecycle Destruction
-
-- (void)dealloc {
- SDLLogV(@"SDLIAPDataSession dealloc");
- [self destroySession];
-}
@end
diff --git a/SmartDeviceLink/SDLIAPSession.h b/SmartDeviceLink/SDLIAPSession.h
index 75b1f6d55..6bc62ed5f 100644
--- a/SmartDeviceLink/SDLIAPSession.h
+++ b/SmartDeviceLink/SDLIAPSession.h
@@ -65,10 +65,9 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)startSession;
-/**
- * Stops the current session.
- */
-- (void)destroySession;
+/// Stops the current session.
+/// @param disconnectCompletionHandler Handler called when the session has been closed
+- (void)destroySessionWithCompletionHandler:(void (^)(void))disconnectCompletionHandler;
/**
* Creates a session with the accessory.
diff --git a/SmartDeviceLink/SDLIAPSession.m b/SmartDeviceLink/SDLIAPSession.m
index c69efce6d..eaf79725f 100644
--- a/SmartDeviceLink/SDLIAPSession.m
+++ b/SmartDeviceLink/SDLIAPSession.m
@@ -39,7 +39,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)startSession {}
-- (void)destroySession {}
+- (void)destroySessionWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {}
#pragma mark - Private Stream Lifecycle Helpers
diff --git a/SmartDeviceLink/SDLIAPTransport.m b/SmartDeviceLink/SDLIAPTransport.m
index a1be67a65..11da3a1d6 100644
--- a/SmartDeviceLink/SDLIAPTransport.m
+++ b/SmartDeviceLink/SDLIAPTransport.m
@@ -170,8 +170,8 @@ int const CreateSessionRetries = 3;
- (void)sdl_closeSessions {
self.retryCounter = 0;
self.sessionSetupInProgress = NO;
- [self.controlSession destroySession];
- [self.dataSession destroySession];
+
+ [self sdl_closeSessionsWithCompletionHandler:nil];
}
/**
@@ -181,8 +181,11 @@ int const CreateSessionRetries = 3;
self.retryCounter = 0;
self.sessionSetupInProgress = NO;
self.transportDestroyed = YES;
- [self disconnect];
- [self.delegate onTransportDisconnected];
+ __weak typeof(self) weakSelf = self;
+ [self disconnectWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf.delegate onTransportDisconnected];
+ }];
}
#pragma mark - Stream Lifecycle
@@ -212,7 +215,8 @@ int const CreateSessionRetries = 3;
/**
* Cleans up after a disconnected accessory by closing any open I/O streams.
*/
-- (void)disconnect {
+- (void)disconnectWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
+ SDLLogD(@"Disconnecting IAP transport");
// Stop event listening here so that even if the transport is disconnected by `SDLProxy` when there is a start session timeout, the class unregisters for accessory notifications
[self sdl_stopEventListening];
@@ -220,8 +224,7 @@ int const CreateSessionRetries = 3;
self.sessionSetupInProgress = NO;
self.transportDestroyed = YES;
- [self.controlSession destroySession];
- [self.dataSession destroySession];
+ [self sdl_closeSessionsWithCompletionHandler:disconnectCompletionHandler];
}
@@ -285,11 +288,46 @@ int const CreateSessionRetries = 3;
- (void)sdl_retryEstablishSession {
// Current strategy disallows automatic retries.
self.sessionSetupInProgress = NO;
- [self.controlSession destroySession];
- [self.dataSession destroySession];
- // Search connected accessories
- [self sdl_connect:nil];
+ __weak typeof(self) weakSelf = self;
+ [self sdl_closeSessionsWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ // Search connected accessories
+ [strongSelf sdl_connect:nil];
+ }];
+}
+
+/// Helper method for closing both the data and control sessions.
+/// @param disconnectCompletionHandler Handler called when both the data and control sessions have been disconnected successfully
+- (void)sdl_closeSessionsWithCompletionHandler:(nullable void (^)(void))disconnectCompletionHandler {
+ dispatch_group_t endSessionsTask = dispatch_group_create();
+ dispatch_group_enter(endSessionsTask);
+
+ if (self.controlSession != nil) {
+ dispatch_group_enter(endSessionsTask);
+ [self.controlSession destroySessionWithCompletionHandler:^{
+ SDLLogV(@"Control session destroyed");
+ dispatch_group_leave(endSessionsTask);
+ }];
+ }
+
+ if (self.dataSession != nil) {
+ dispatch_group_enter(endSessionsTask);
+ [self.dataSession destroySessionWithCompletionHandler:^{
+ SDLLogV(@"Data session destroyed");
+ dispatch_group_leave(endSessionsTask);
+ }];
+ }
+
+ dispatch_group_leave(endSessionsTask);
+
+ // This will always run after all `leave` calls
+ dispatch_group_notify(endSessionsTask, [SDLGlobals sharedGlobals].sdlProcessingQueue, ^{
+ SDLLogV(@"Both the data and control sessions are closed");
+ if (disconnectCompletionHandler != nil) {
+ disconnectCompletionHandler();
+ }
+ });
}
@@ -519,19 +557,6 @@ int const CreateSessionRetries = 3;
return NO;
}
-
-#pragma mark - Lifecycle Destruction
-
-- (void)dealloc {
- SDLLogV(@"SDLIAPTransport dealloc");
- [self disconnect];
- self.controlSession = nil;
- self.dataSession = nil;
- self.delegate = nil;
- self.sessionSetupInProgress = NO;
- self.accessoryConnectDuringActiveSession = NO;
-}
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLIconArchiveFile.h b/SmartDeviceLink/SDLIconArchiveFile.h
new file mode 100644
index 000000000..9d50ade1b
--- /dev/null
+++ b/SmartDeviceLink/SDLIconArchiveFile.h
@@ -0,0 +1,29 @@
+//
+// SDLIconArchiveFile.h
+// SmartDeviceLink
+//
+// Created by James Lapinski on 3/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLIconArchiveFile : NSObject <NSSecureCoding>
+
+@property (nonatomic, copy) NSArray *lockScreenIconCaches;
+
+@end
+
+@interface SDLLockScreenIconCache : NSObject <NSSecureCoding>
+
+@property (nonatomic, copy) NSString *iconUrl;
+@property (nonatomic, copy) NSString *iconFilePath;
+@property (nonatomic, copy) NSDate *lastModifiedDate;
+
+- (instancetype)initWithIconUrl:(NSString *)iconUrl iconFilePath:(NSString *)iconFilePath;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLIconArchiveFile.m b/SmartDeviceLink/SDLIconArchiveFile.m
new file mode 100644
index 000000000..d4bb70d4d
--- /dev/null
+++ b/SmartDeviceLink/SDLIconArchiveFile.m
@@ -0,0 +1,75 @@
+//
+// SDLIconArchiveFile.m
+// SmartDeviceLink
+//
+// Created by James Lapinski on 3/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLIconArchiveFile.h"
+
+@implementation SDLIconArchiveFile
+
+- (instancetype)init {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.lockScreenIconCaches = [[NSArray alloc] init];
+
+ return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)decoder {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.lockScreenIconCaches = [decoder decodeObjectOfClass:[NSArray self] forKey:@"lockScreenIconCaches"];
+
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)encoder {
+ [encoder encodeObject:self.lockScreenIconCaches forKey:@"lockScreenIconCaches"];
+}
+
+@end
+
+@implementation SDLLockScreenIconCache
+
+- (instancetype)initWithIconUrl:(NSString *)iconUrl iconFilePath:(NSString *)iconFilePath {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.iconUrl = iconUrl;
+ self.iconFilePath = iconFilePath;
+ self.lastModifiedDate = [NSDate date];
+
+ return self;
+}
+
+- (instancetype)initWithCoder:(NSCoder *)decoder {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.iconUrl = [decoder decodeObjectOfClass:[NSString self] forKey:@"iconUrl"];
+ self.iconFilePath = [decoder decodeObjectOfClass:[NSString self] forKey:@"iconFilePath"];
+ self.lastModifiedDate = [decoder decodeObjectOfClass:[NSDate self] forKey:@"lastModifiedDate"];
+
+ return self;
+}
+
++ (BOOL)supportsSecureCoding {
+ return YES;
+}
+
+- (void)encodeWithCoder:(NSCoder *)encoder {
+ [encoder encodeObject:self.iconUrl forKey:@"iconUrl"];
+ [encoder encodeObject:self.iconFilePath forKey:@"iconFilePath"];
+ [encoder encodeObject:self.lastModifiedDate forKey:@"lastModifiedDate"];
+}
+
+@end
diff --git a/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.h b/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.h
new file mode 100644
index 000000000..5db85093c
--- /dev/null
+++ b/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.h
@@ -0,0 +1,19 @@
+//
+// SDLImageField+ScreenManagerExtensions.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/20/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLImageField.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLImageField (ScreenManagerExtensions)
+
++ (NSArray<SDLImageField *> *)allImageFields;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.m b/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.m
new file mode 100644
index 000000000..1c7cc09c1
--- /dev/null
+++ b/SmartDeviceLink/SDLImageField+ScreenManagerExtensions.m
@@ -0,0 +1,30 @@
+//
+// SDLImageField+ScreenManagerExtensions.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/20/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLImageField+ScreenManagerExtensions.h"
+
+@implementation SDLImageField (ScreenManagerExtensions)
+
++ (NSArray<SDLImageFieldName> *)sdl_allImageFieldNames {
+ return @[SDLImageFieldNameAppIcon, SDLImageFieldNameGraphic, SDLImageFieldNameMenuIcon, SDLImageFieldNameTurnIcon, SDLImageFieldNameAlertIcon, SDLImageFieldNameChoiceImage, SDLImageFieldNameCommandIcon, SDLImageFieldNameLocationImage, SDLImageFieldNameSoftButtonImage, SDLImageFieldNameSecondaryGraphic, SDLImageFieldNameShowConstantTBTIcon, SDLImageFieldNameChoiceSecondaryImage, SDLImageFieldNameVoiceRecognitionHelpItem, SDLImageFieldNameShowConstantTBTNextTurnIcon];
+}
+
++ (NSArray<SDLFileType> *)sdl_allImageFileTypes {
+ return @[SDLFileTypeBMP, SDLFileTypePNG, SDLFileTypeJPEG];
+}
+
++ (NSArray<SDLImageField *> *)allImageFields {
+ NSMutableArray<SDLImageField *> *tempImageFields = [NSMutableArray array];
+ for (SDLImageFieldName fieldName in [self sdl_allImageFieldNames]) {
+ [tempImageFields addObject:[[SDLImageField alloc] initWithName:fieldName imageTypeSupported:[self sdl_allImageFileTypes] imageResolution:nil]];
+ }
+
+ return tempImageFields;
+}
+
+@end
diff --git a/SmartDeviceLink/SDLImageField.h b/SmartDeviceLink/SDLImageField.h
index 717ab935b..610b1a55c 100644
--- a/SmartDeviceLink/SDLImageField.h
+++ b/SmartDeviceLink/SDLImageField.h
@@ -40,7 +40,7 @@ NS_ASSUME_NONNULL_BEGIN
/// @param name The name identifying this image field
/// @param imageTypeSupported The image data types this field supports
/// @param imageResolution The native resolution of this image field
-- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray<SDLFileType> *)imageTypeSupported imageResolution:(SDLImageResolution *)imageResolution;
+- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray<SDLFileType> *)imageTypeSupported imageResolution:(nullable SDLImageResolution *)imageResolution;
@end
diff --git a/SmartDeviceLink/SDLImageField.m b/SmartDeviceLink/SDLImageField.m
index f0fc0e4c5..85532ff80 100644
--- a/SmartDeviceLink/SDLImageField.m
+++ b/SmartDeviceLink/SDLImageField.m
@@ -38,7 +38,7 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectForName:SDLRPCParameterNameImageResolution ofClass:SDLImageResolution.class error:nil];
}
-- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray<SDLFileType> *)imageTypeSupported imageResolution:(SDLImageResolution *)imageResolution {
+- (instancetype)initWithName:(SDLImageFieldName)name imageTypeSupported:(NSArray<SDLFileType> *)imageTypeSupported imageResolution:(nullable SDLImageResolution *)imageResolution {
self = [self init];
if (!self) { return nil; }
diff --git a/SmartDeviceLink/SDLLifecycleConfigurationUpdate.m b/SmartDeviceLink/SDLLifecycleConfigurationUpdate.m
index b81b14d03..b86688445 100644
--- a/SmartDeviceLink/SDLLifecycleConfigurationUpdate.m
+++ b/SmartDeviceLink/SDLLifecycleConfigurationUpdate.m
@@ -25,4 +25,8 @@
return self;
}
+- (NSString *)description {
+ return [NSString stringWithFormat:@"Lifecycle Configuration Update: new app name: %@, new short app name: %@, new tts name: %@, new voice commands: %@", self.appName, self.shortAppName, self.ttsName, self.voiceRecognitionCommandNames];
+}
+
@end
diff --git a/SmartDeviceLink/SDLLifecycleManager.h b/SmartDeviceLink/SDLLifecycleManager.h
index e3fcd2cb2..1911c4877 100644
--- a/SmartDeviceLink/SDLLifecycleManager.h
+++ b/SmartDeviceLink/SDLLifecycleManager.h
@@ -77,12 +77,6 @@ typedef void (^SDLManagerReadyBlock)(BOOL success, NSError *_Nullable error);
@property (strong, nonatomic, readonly) SDLResponseDispatcher *responseDispatcher;
@property (strong, nonatomic, readonly) SDLStateMachine *lifecycleStateMachine;
-// Deprecated internal proxy object
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-@property (strong, nonatomic, nullable) SDLProxy *proxy;
-#pragma clang diagnostic pop
-
@property (copy, nonatomic, readonly) SDLLifecycleState *lifecycleState;
@property (copy, nonatomic, nullable) SDLHMILevel hmiLevel;
@property (copy, nonatomic, nullable) SDLAudioStreamingState audioStreamingState;
diff --git a/SmartDeviceLink/SDLLifecycleManager.m b/SmartDeviceLink/SDLLifecycleManager.m
index fd8bb74e4..97842dcd1 100644
--- a/SmartDeviceLink/SDLLifecycleManager.m
+++ b/SmartDeviceLink/SDLLifecycleManager.m
@@ -11,6 +11,8 @@
#import "SDLLifecycleManager.h"
#import "NSMapTable+Subscripting.h"
+#import "SDLLifecycleRPCAdapter.h"
+#import "SDLAsynchronousRPCOperation.h"
#import "SDLAsynchronousRPCRequestOperation.h"
#import "SDLBackgroundTaskManager.h"
#import "SDLChangeRegistration.h"
@@ -24,8 +26,12 @@
#import "SDLFileManager.h"
#import "SDLFileManagerConfiguration.h"
#import "SDLGlobals.h"
+#import "SDLIAPTransport.h"
#import "SDLLifecycleConfiguration.h"
#import "SDLLifecycleConfigurationUpdate.h"
+#import "SDLLifecycleMobileHMIStateHandler.h"
+#import "SDLLifecycleSyncPDataHandler.h"
+#import "SDLLifecycleSystemRequestHandler.h"
#import "SDLLockScreenConfiguration.h"
#import "SDLLockScreenManager.h"
#import "SDLLockScreenPresenter.h"
@@ -40,12 +46,11 @@
#import "SDLPermissionManager.h"
#import "SDLPredefinedWindows.h"
#import "SDLProtocol.h"
-#import "SDLProxy.h"
+#import "SDLLifecycleProtocolHandler.h"
#import "SDLRPCNotificationNotification.h"
#import "SDLRegisterAppInterface.h"
#import "SDLRegisterAppInterfaceResponse.h"
#import "SDLResponseDispatcher.h"
-#import "SDLAsynchronousRPCOperation.h"
#import "SDLResult.h"
#import "SDLScreenManager.h"
#import "SDLSecondaryTransportManager.h"
@@ -54,8 +59,8 @@
#import "SDLStateMachine.h"
#import "SDLStreamingMediaConfiguration.h"
#import "SDLStreamingMediaManager.h"
-#import "SDLStreamingProtocolDelegate.h"
#import "SDLSystemCapabilityManager.h"
+#import "SDLTCPTransport.h"
#import "SDLUnregisterAppInterface.h"
#import "SDLVersion.h"
#import "SDLWindowCapability.h"
@@ -76,9 +81,16 @@ SDLLifecycleState *const SDLLifecycleStateReady = @"Ready";
NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask";
-#pragma mark - SDLManager Private Interface
+#pragma mark - Protected Class Interfaces
+@interface SDLStreamingMediaManager ()
+
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+
+@end
+
+#pragma mark - SDLLifecycleManager Private Interface
-@interface SDLLifecycleManager () <SDLConnectionManagerType, SDLStreamingProtocolDelegate>
+@interface SDLLifecycleManager () <SDLConnectionManagerType>
// Readonly public properties
@property (copy, nonatomic, readwrite) SDLConfiguration *configuration;
@@ -87,13 +99,24 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
@property (strong, nonatomic, readwrite) SDLResponseDispatcher *responseDispatcher;
@property (strong, nonatomic, readwrite) SDLStateMachine *lifecycleStateMachine;
-// Private properties
+// Private Managers
@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+@property (strong, nonatomic) SDLEncryptionLifecycleManager *encryptionLifecycleManager;
+
+// Private properties
@property (copy, nonatomic) SDLManagerReadyBlock readyHandler;
@property (copy, nonatomic) dispatch_queue_t lifecycleQueue;
@property (assign, nonatomic) int32_t lastCorrelationId;
@property (copy, nonatomic) SDLBackgroundTaskManager *backgroundTaskManager;
-@property (copy, nonatomic) SDLEncryptionLifecycleManager *encryptionLifecycleManager;
+@property (strong, nonatomic) SDLLanguage currentVRLanguage;
+
+// RPC Handlers
+@property (strong, nonatomic) SDLLifecycleSyncPDataHandler *syncPDataHandler;
+@property (strong, nonatomic) SDLLifecycleSystemRequestHandler *systemRequestHandler;
+@property (strong, nonatomic) SDLLifecycleMobileHMIStateHandler *mobileHMIStateHandler;
+
+// Protocol and Transport
+@property (strong, nonatomic, nullable) SDLLifecycleProtocolHandler *protocolHandler;
@end
@@ -103,7 +126,7 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
#pragma mark Lifecycle
- (instancetype)init {
- return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration disabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]] delegate:nil];
+ return [self initWithConfiguration:[[SDLConfiguration alloc] initWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration] encryption:nil] delegate:nil];
}
- (instancetype)initWithConfiguration:(SDLConfiguration *)configuration delegate:(nullable id<SDLManagerDelegate>)delegate {
@@ -112,8 +135,6 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
return nil;
}
- SDLLogV(@"Initializing Lifecycle Manager");
-
// Dependencies
_configuration = [configuration copy];
_delegate = delegate;
@@ -121,6 +142,12 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
// Logging
[SDLLogManager setConfiguration:_configuration.loggingConfig];
+ SDLLogD(@"Initializing Lifecycle Manager");
+ SDLLogD(@"SDL iOS Library Version: %@", [NSBundle bundleForClass:self.class].infoDictionary[@"CFBundleShortVersionString"]);
+ SDLLogD(@"iOS Version: %@", [NSBundle bundleForClass:self.class].infoDictionary[@"DTPlatformVersion"]);
+ SDLLogD(@"SDK Version: %@", [NSBundle bundleForClass:self.class].infoDictionary[@"DTSDKName"]);
+ SDLLogD(@"Minimum OS Version: %@", [NSBundle bundleForClass:self.class].infoDictionary[@"MinimumOSVersion"]);
+
// Private properties
_lifecycleStateMachine = [[SDLStateMachine alloc] initWithTarget:self initialState:SDLLifecycleStateStopped states:[self.class sdl_stateTransitionDictionary]];
_lastCorrelationId = 0;
@@ -138,41 +165,45 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
_lifecycleQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue;
}
+ _currentVRLanguage = _configuration.lifecycleConfig.language;
+
// Managers
_fileManager = [[SDLFileManager alloc] initWithConnectionManager:self configuration:_configuration.fileManagerConfig];
_permissionManager = [[SDLPermissionManager alloc] init];
_lockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:_configuration.lockScreenConfig notificationDispatcher:_notificationDispatcher presenter:[[SDLLockScreenPresenter alloc] init]];
_systemCapabilityManager = [[SDLSystemCapabilityManager alloc] initWithConnectionManager:self];
_screenManager = [[SDLScreenManager alloc] initWithConnectionManager:self fileManager:_fileManager systemCapabilityManager:_systemCapabilityManager];
-
- if ([configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] ||
- [configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] ||
- [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] ||
- [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]) {
+
+ if ([self.class sdl_isStreamingConfiguration:self.configuration]) {
_streamManager = [[SDLStreamingMediaManager alloc] initWithConnectionManager:self configuration:configuration systemCapabilityManager:self.systemCapabilityManager];
} else {
SDLLogV(@"Skipping StreamingMediaManager setup due to app type");
}
if (configuration.encryptionConfig.securityManagers != nil) {
- _encryptionLifecycleManager = [[SDLEncryptionLifecycleManager alloc] initWithConnectionManager:self configuration:_configuration.encryptionConfig];
+ _encryptionLifecycleManager = [[SDLEncryptionLifecycleManager alloc] initWithConnectionManager:self configuration:_configuration];
}
+ // RPC Handlers
+ _syncPDataHandler = [[SDLLifecycleSyncPDataHandler alloc] initWithConnectionManager:self];
+ _systemRequestHandler = [[SDLLifecycleSystemRequestHandler alloc] initWithConnectionManager:self];
+ _mobileHMIStateHandler = [[SDLLifecycleMobileHMIStateHandler alloc] initWithConnectionManager:self];
+
// Notifications
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(transportDidConnect) name:SDLTransportDidConnect object:_notificationDispatcher];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(transportDidDisconnect) name:SDLTransportDidDisconnect object:_notificationDispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_rpcServiceDidConnect) name:SDLRPCServiceDidConnect object:_notificationDispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_transportDidDisconnect) name:SDLTransportDidDisconnect object:_notificationDispatcher];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(hmiStatusDidChange:) name:SDLDidChangeHMIStatusNotification object:_notificationDispatcher];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(remoteHardwareDidUnregister:) name:SDLDidReceiveAppUnregisteredNotification object:_notificationDispatcher];
- _backgroundTaskManager = [[SDLBackgroundTaskManager alloc] initWithBackgroundTaskName: BackgroundTaskTransportName];
+ _backgroundTaskManager = [[SDLBackgroundTaskManager alloc] initWithBackgroundTaskName:BackgroundTaskTransportName];
return self;
}
- (void)startWithReadyHandler:(SDLManagerReadyBlock)readyHandler {
- dispatch_sync(_lifecycleQueue, ^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
[self sdl_startWithReadyHandler:readyHandler];
- });
+ }];
}
- (void)sdl_startWithReadyHandler:(SDLManagerReadyBlock)readyHandler {
@@ -188,14 +219,14 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
}
- (void)stop {
- dispatch_sync(_lifecycleQueue, ^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
SDLLogD(@"Lifecycle manager stopped");
if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]) {
[self sdl_transitionToState:SDLLifecycleStateUnregistering];
} else {
[self sdl_transitionToState:SDLLifecycleStateStopped];
}
- });
+ }];
}
- (void)startRPCEncryption {
@@ -231,30 +262,29 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
// Start a background task so a session can be established even when the app is backgrounded.
[self.backgroundTaskManager startBackgroundTask];
- // Start up the internal proxy object
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ // Start up the internal protocol, transport, and other internal managers
self.secondaryTransportManager = nil;
- if (self.configuration.lifecycleConfig.tcpDebugMode) {
- self.proxy = [SDLProxy tcpProxyWithListener:self.notificationDispatcher
- tcpIPAddress:self.configuration.lifecycleConfig.tcpDebugIPAddress
- tcpPort:@(self.configuration.lifecycleConfig.tcpDebugPort).stringValue
- secondaryTransportManager:self.secondaryTransportManager
- encryptionLifecycleManager:self.encryptionLifecycleManager];
- } else if (self.configuration.lifecycleConfig.allowedSecondaryTransports == SDLSecondaryTransportsNone) {
- self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher secondaryTransportManager:nil encryptionLifecycleManager:self.encryptionLifecycleManager];
+ SDLLifecycleConfiguration *lifecycleConfig = self.configuration.lifecycleConfig;
+ id<SDLTransportType> newTransport = nil;
+
+ if (lifecycleConfig.tcpDebugMode) {
+ newTransport = [[SDLTCPTransport alloc] initWithHostName:lifecycleConfig.tcpDebugIPAddress portNumber:@(lifecycleConfig.tcpDebugPort).stringValue];
} else {
- if([self.configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] ||
- [self.configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] ||
- [self.configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] ||
- [self.configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]) {
- // We reuse our queue to run secondary transport manager's state machine
- self.secondaryTransportManager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:self serialQueue:self.lifecycleQueue];
- }
+ newTransport = [[SDLIAPTransport alloc] init];
- self.proxy = [SDLProxy iapProxyWithListener:self.notificationDispatcher secondaryTransportManager:self.secondaryTransportManager encryptionLifecycleManager:self.encryptionLifecycleManager];
+ if (self.configuration.lifecycleConfig.allowedSecondaryTransports != SDLSecondaryTransportsNone
+ && [self.class sdl_isStreamingConfiguration:self.configuration]) {
+ // Reuse the queue to run the secondary transport manager's state machine
+ self.secondaryTransportManager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:(id<SDLStreamingProtocolDelegate>)self.streamManager serialQueue:self.lifecycleQueue];
+ self.streamManager.secondaryTransportManager = self.secondaryTransportManager;
+ }
}
-#pragma clang diagnostic pop
+
+ SDLProtocol *newProtocol = [[SDLProtocol alloc] initWithTransport:newTransport encryptionManager:self.encryptionLifecycleManager];
+ self.protocolHandler = [[SDLLifecycleProtocolHandler alloc] initWithProtocol:newProtocol notificationDispatcher:self.notificationDispatcher configuration:self.configuration];
+ [self.protocolHandler start];
+
+ [self.secondaryTransportManager startWithPrimaryProtocol:self.protocolHandler.protocol]; // Will not run if secondaryTransportManager is nil
}
- (void)didEnterStateStopped {
@@ -265,27 +295,55 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
[self sdl_stopManager:YES];
}
+/// Shuts down the all the managers used to manage the lifecycle of the SDL app after the connection between the phone and SDL enabled accessory has closed. If a restart is desired, attempt to start looking for another SDL enabled accessory. If no restart is desired, another connection will not be made with a SDL enabled accessory during the current app session
+/// @param shouldRestart Whether or not to start looking for another SDL enabled accessory.
- (void)sdl_stopManager:(BOOL)shouldRestart {
SDLLogV(@"Stopping manager, %@", (shouldRestart ? @"will restart" : @"will not restart"));
- self.proxy = nil;
+ dispatch_group_t stopManagersTask = dispatch_group_create();
+ dispatch_group_enter(stopManagersTask);
+
+ if (self.protocolHandler != nil) {
+ dispatch_group_enter(stopManagersTask);
+ [self.protocolHandler stopWithCompletionHandler:^{
+ dispatch_group_leave(stopManagersTask);
+ }];
+ }
+ if (self.secondaryTransportManager != nil) {
+ dispatch_group_enter(stopManagersTask);
+ [self.secondaryTransportManager stopWithCompletionHandler:^{
+ dispatch_group_leave(stopManagersTask);
+ }];
+ }
+
+ dispatch_group_leave(stopManagersTask);
+ // This will always run after all `leave`s
+ __weak typeof(self) weakSelf = self;
+ dispatch_group_notify(stopManagersTask, [SDLGlobals sharedGlobals].sdlProcessingQueue, ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ [strongSelf sdl_stopManagersAndRestart:shouldRestart];
+ });
+}
+
+/// Helper method for shutting down the remaining managers that do not need extra time to shutdown. Once all the managers have been shutdown, attempt to start looking for another SDL enabled accessory.
+/// @param shouldRestart Whether or not to start looking for another SDL enabled accessory.
+- (void)sdl_stopManagersAndRestart:(BOOL)shouldRestart {
[self.fileManager stop];
[self.permissionManager stop];
[self.lockScreenManager stop];
[self.screenManager stop];
[self.encryptionLifecycleManager stop];
- if (self.secondaryTransportManager != nil) {
- [self.secondaryTransportManager stop];
- } else {
- [self audioServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil];
- [self videoServiceProtocolDidUpdateFromOldProtocol:self.proxy.protocol toNewProtocol:nil];
- }
+ [self.streamManager stop];
[self.systemCapabilityManager stop];
[self.responseDispatcher clear];
[self.rpcOperationQueue cancelAllOperations];
+ [self.syncPDataHandler stop];
+ [self.systemRequestHandler stop];
+ [self.mobileHMIStateHandler stop];
+
self.registerResponse = nil;
self.lastCorrelationId = 0;
self.hmiLevel = nil;
@@ -306,33 +364,16 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
[strongSelf sdl_transitionToState:SDLLifecycleStateStarted];
} else {
// End the background task because a session will not be established
- [self.backgroundTaskManager endBackgroundTask];
+ [strongSelf.backgroundTaskManager endBackgroundTask];
}
});
}
- (void)didEnterStateConnected {
- // Ignore the connection while we are reconnecting. The proxy needs to be disposed and restarted in order to ensure correct state. https://github.com/smartdevicelink/sdl_ios/issues/1172
- if ([self.lifecycleState isEqualToString:SDLLifecycleStateReconnecting]) { return; }
-
- // If we have security managers, add them to the proxy
- NSString *appId = self.configuration.lifecycleConfig.fullAppId ? self.configuration.lifecycleConfig.fullAppId : self.configuration.lifecycleConfig.appId;
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- if (self.configuration.streamingMediaConfig.securityManagers != nil) {
- SDLLogD(@"Adding security managers from streamingMedia configuration");
- [self.proxy addSecurityManagers:self.configuration.streamingMediaConfig.securityManagers forAppId:appId];
- }
-#pragma clang diagnostic pop
- if (self.configuration.encryptionConfig.securityManagers != nil) {
- SDLLogD(@"Adding security managers from encryption configuration");
- [self.proxy addSecurityManagers:self.configuration.encryptionConfig.securityManagers forAppId:appId];
- }
-
// If the negotiated protocol version is greater than the minimum allowable version, we need to end service and disconnect
if ([self.configuration.lifecycleConfig.minimumProtocolVersion isGreaterThanVersion:[SDLGlobals sharedGlobals].protocolVersion]) {
SDLLogW(@"Disconnecting from head unit, protocol version %@ is less than configured minimum version %@", [SDLGlobals sharedGlobals].protocolVersion.stringVersion, self.configuration.lifecycleConfig.minimumProtocolVersion.stringVersion);
- [self.proxy.protocol endServiceWithType:SDLServiceTypeRPC];
+ [self.protocolHandler.protocol endServiceWithType:SDLServiceTypeRPC];
[self sdl_transitionToState:SDLLifecycleStateStopped];
return;
}
@@ -342,8 +383,7 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
// Send the request and depending on the response, post the notification
__weak typeof(self) weakSelf = self;
- [self sendConnectionManagerRequest:regRequest
- withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) {
+ [self sendConnectionManagerRequest:regRequest withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) {
// If the success BOOL is NO or we received an error at this point, we failed. Call the ready handler and transition to the DISCONNECTED state.
if (error != nil || ![response.success boolValue]) {
SDLLogE(@"Failed to register the app. Error: %@, Response: %@", error, response);
@@ -373,12 +413,20 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
}
NSArray<SDLLanguage> *supportedLanguages = self.configuration.lifecycleConfig.languagesSupported;
- SDLLanguage desiredLanguage = self.configuration.lifecycleConfig.language;
- SDLLanguage actualLanguage = self.registerResponse.language;
- BOOL delegateCanUpdateLifecycle = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:)];
-
+ SDLLanguage desiredHMILanguage = self.configuration.lifecycleConfig.language;
+ SDLLanguage desiredVRLanguage = self.currentVRLanguage;
+
+ SDLLanguage actualHMILanguage = self.registerResponse.hmiDisplayLanguage;
+ SDLLanguage actualVRLanguage = self.registerResponse.language;
+
+ BOOL oldDelegateCanUpdateLifecycle = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:)];
+ BOOL delegateCanUpdateLifecycle = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:hmiLanguage:)];
+
// language mismatch? but actual language is a supported language? and delegate has implemented method?
- if (![actualLanguage isEqualToEnum:desiredLanguage] && [supportedLanguages containsObject:actualLanguage] && delegateCanUpdateLifecycle) {
+ if ((delegateCanUpdateLifecycle || oldDelegateCanUpdateLifecycle)
+ && ([supportedLanguages containsObject:actualHMILanguage] || [supportedLanguages containsObject:actualVRLanguage])
+ && (![actualHMILanguage isEqualToEnum:desiredHMILanguage] || ![actualVRLanguage isEqualToEnum:desiredVRLanguage])) {
+ // If the delegate is implemented, AND the new HMI / VR language is a supported language, AND the new HMI / VR language is not the current language, THEN go to the updating configuration state and see if the dev wants to change the registration.
[self sdl_transitionToState:SDLLifecycleStateUpdatingConfiguration];
} else {
[self sdl_transitionToState:SDLLifecycleStateSettingUpManagers];
@@ -387,13 +435,25 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
- (void)didEnterStateUpdatingConfiguration {
// We can expect that the delegate has implemented the update method and the actual language is a supported language
+ SDLLanguage actualHMILanguage = self.registerResponse.hmiDisplayLanguage;
SDLLanguage actualLanguage = self.registerResponse.language;
- SDLLogD(@"Updating configuration due to language mismatch. New langugage: %@", actualLanguage);
-
- SDLLifecycleConfigurationUpdate *configUpdate = [self.delegate managerShouldUpdateLifecycleToLanguage:actualLanguage];
+ SDLLogD(@"Updating configuration due to language mismatch. New language: %@, new hmiLanguage: %@", actualLanguage, actualHMILanguage);
+
+ SDLLifecycleConfigurationUpdate *configUpdate = nil;
+ BOOL supportsNewDelegate = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:hmiLanguage:)];
+ BOOL supportsOldDelegate = [self.delegate respondsToSelector:@selector(managerShouldUpdateLifecycleToLanguage:)];
+ if (supportsNewDelegate) {
+ configUpdate = [self.delegate managerShouldUpdateLifecycleToLanguage:actualLanguage hmiLanguage:actualHMILanguage];
+ } else if (supportsOldDelegate) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ configUpdate = [self.delegate managerShouldUpdateLifecycleToLanguage:actualLanguage];
+#pragma clang diagnostic pop
+ }
if (configUpdate) {
- self.configuration.lifecycleConfig.language = actualLanguage;
+ self.configuration.lifecycleConfig.language = actualHMILanguage;
+ self.currentVRLanguage = actualLanguage;
if (configUpdate.appName) {
self.configuration.lifecycleConfig.appName = configUpdate.appName;
}
@@ -407,7 +467,7 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
self.configuration.lifecycleConfig.voiceRecognitionCommandNames = configUpdate.voiceRecognitionCommandNames;
}
- SDLChangeRegistration *changeRegistration = [[SDLChangeRegistration alloc] initWithLanguage:actualLanguage hmiDisplayLanguage:actualLanguage];
+ SDLChangeRegistration *changeRegistration = [[SDLChangeRegistration alloc] initWithLanguage:actualLanguage hmiDisplayLanguage:actualHMILanguage];
changeRegistration.appName = configUpdate.appName;
changeRegistration.ngnMediaScreenAppName = configUpdate.shortAppName;
changeRegistration.ttsName = configUpdate.ttsName;
@@ -454,13 +514,12 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
}];
if (self.encryptionLifecycleManager != nil) {
- [self.encryptionLifecycleManager startWithProtocol:self.proxy.protocol];
+ [self.encryptionLifecycleManager startWithProtocol:self.protocolHandler.protocol];
}
- // if secondary transport manager is used, streaming media manager will be started through onAudioServiceProtocolUpdated and onVideoServiceProtocolUpdated
+ // Starts the streaming media manager if only using the primary transport (i.e. secondary transports has been disabled in the lifecyle configuration). If using a secondary transport, setup is handled by the stream manager.
if (self.secondaryTransportManager == nil && self.streamManager != nil) {
- [self audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol];
- [self videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:self.proxy.protocol];
+ [self.streamManager startWithProtocol:self.protocolHandler.protocol];
}
dispatch_group_enter(managerGroup);
@@ -548,7 +607,7 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
SDLUnregisterAppInterface *unregisterRequest = [[SDLUnregisterAppInterface alloc] init];
__weak typeof(self) weakSelf = self;
- [self sdl_sendRequest:unregisterRequest
+ [self sdl_sendConnectionRequest:unregisterRequest
withResponseHandler:^(__kindof SDLRPCRequest *_Nullable request, __kindof SDLRPCResponse *_Nullable response, NSError *_Nullable error) {
if (error != nil || ![response.success boolValue]) {
SDLLogE(@"SDL Error unregistering, we are going to hard disconnect: %@, response: %@", error, response);
@@ -643,6 +702,8 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
[self.rpcOperationQueue addOperation:op];
}
+/// Send a request immediately without going through the RPC operation queue
+/// @param rpc The RPC to send
- (void)sendConnectionRPC:(__kindof SDLRPCMessage *)rpc {
NSAssert(([rpc isKindOfClass:SDLRPCResponse.class] || [rpc isKindOfClass:SDLRPCNotification.class]), @"Only RPCs of type `Response` or `Notfication` can be sent using this method. To send RPCs of type `Request` use sendConnectionRequest:withResponseHandler:.");
@@ -651,11 +712,24 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
return;
}
- [self sdl_runOnProcessingQueue:^{
- [self sdl_sendRequest:rpc withResponseHandler:nil];
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
+ [self sdl_sendConnectionRequest:rpc withResponseHandler:nil];
}];
}
+/// Send a non-request RPC immediately without going through the RPC operation queue, and allow requests to be sent before the managers have completed setup.
+/// @param rpc The RPC to send
+- (void)sendConnectionManagerRPC:(__kindof SDLRPCMessage *)rpc {
+ NSAssert(([rpc isKindOfClass:SDLRPCResponse.class] || [rpc isKindOfClass:SDLRPCNotification.class]), @"Only RPCs of type `Response` or `Notfication` can be sent using this method. To send RPCs of type `Request` use sendConnectionRequest:withResponseHandler:.");
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
+ [self sdl_sendConnectionRequest:rpc withResponseHandler:nil];
+ }];
+}
+
+/// Send a request immediately without going through the RPC operation queue
+/// @param request The request to send
+/// @param handler A callback handler for responses to the request
- (void)sendConnectionRequest:(__kindof SDLRPCRequest *)request withResponseHandler:(nullable SDLResponseHandler)handler {
if (![self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]) {
SDLLogW(@"Manager not ready, request not sent (%@)", request);
@@ -679,24 +753,29 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
return;
}
- [self sdl_runOnProcessingQueue:^{
- [self sdl_sendRequest:request withResponseHandler:handler];
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
+ [self sdl_sendConnectionRequest:request withResponseHandler:handler];
}];
}
-// Managers need to avoid state checking. Part of <SDLConnectionManagerType>.
+/// Send a request immediately without going through the RPC operation queue, and allow requests to be sent before the managers have completed setup.
+/// @param request The request to send
+/// @param handler A callback handler for responses to the request
- (void)sendConnectionManagerRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler {
- [self sdl_runOnProcessingQueue:^{
- [self sdl_sendRequest:request withResponseHandler:handler];
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
+ [self sdl_sendConnectionRequest:request withResponseHandler:handler];
}];
}
-- (void)sdl_sendRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler {
+/// Send a request by sending it directly through the protocol, without going through the RPC operation queue
+/// @param request The request to send
+/// @param handler A callback handler for responses to the request
+- (void)sdl_sendConnectionRequest:(__kindof SDLRPCMessage *)request withResponseHandler:(nullable SDLResponseHandler)handler {
// We will allow things to be sent in a "SDLLifecycleStateConnected" state in the private method, but block it in the public method sendRequest:withCompletionHandler: so that the lifecycle manager can complete its setup without being bothered by developer error
NSParameterAssert(request != nil);
// If, for some reason, the request is nil we should error out.
- if (!request) {
+ if (request == nil) {
NSError *error = [NSError sdl_lifecycle_rpcErrorWithDescription:@"Nil Request Sent" andReason:@"A nil RPC request was passed and cannot be sent."];
SDLLogW(@"%@", error);
if (handler) {
@@ -705,21 +784,39 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
return;
}
- if ([request isKindOfClass:SDLRPCRequest.class]) {
- // Generate and add a correlation ID to the request. When a response for the request is returned from Core, it will have the same correlation ID
- SDLRPCRequest *requestRPC = (SDLRPCRequest *)request;
- NSNumber *corrID = [self sdl_getNextCorrelationId];
- requestRPC.correlationID = corrID;
- [self.responseDispatcher storeRequest:requestRPC handler:handler];
- [self.proxy sendRPC:requestRPC];
- } else if ([request isKindOfClass:SDLRPCResponse.class] || [request isKindOfClass:SDLRPCNotification.class]) {
- [self.proxy sendRPC:request];
- } else {
- SDLLogE(@"Attempting to send an RPC with unknown type, %@. The request should be of type request, response or notification. Returning...", request.class);
+ // Before we send a message, we have to check if we need to adapt the RPC. When adapting the RPC, there could be multiple RPCs that need to be sent.
+ NSArray<SDLRPCMessage *> *messages = [SDLLifecycleRPCAdapter adaptRPC:request direction:SDLRPCDirectionOutgoing];
+ for (SDLRPCMessage *message in messages) {
+ if ([request isKindOfClass:SDLRPCRequest.class]) {
+ // Generate and add a correlation ID to the request. When a response for the request is returned from Core, it will have the same correlation ID
+ SDLRPCRequest *requestRPC = (SDLRPCRequest *)message;
+ NSNumber *corrID = [self sdl_getNextCorrelationId];
+ requestRPC.correlationID = corrID;
+ [self.responseDispatcher storeRequest:requestRPC handler:handler];
+ [self.protocolHandler.protocol sendRPC:requestRPC];
+ } else if ([request isKindOfClass:SDLRPCResponse.class] || [request isKindOfClass:SDLRPCNotification.class]) {
+ [self.protocolHandler.protocol sendRPC:message];
+ } else {
+ SDLLogE(@"Will not send an RPC with unknown type, %@. The request should be of type SDLRPCRequest, SDLRPCResponse, or SDLRPCNotification.", request.class);
+ }
}
}
#pragma mark Helper Methods
+
+/// Returns true if the app type set in the configuration is `NAVIGATION` or `PROJECTION`; false for any other app type.
+/// @param configuration This session's configuration
++ (BOOL)sdl_isStreamingConfiguration:(SDLConfiguration *)configuration {
+ if ([configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeNavigation] ||
+ [configuration.lifecycleConfig.appType isEqualToEnum:SDLAppHMITypeProjection] ||
+ [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeNavigation] ||
+ [configuration.lifecycleConfig.additionalAppTypes containsObject:SDLAppHMITypeProjection]) {
+ return YES;
+ }
+
+ return NO;
+}
+
- (NSNumber<SDLInt> *)sdl_getNextCorrelationId {
if (self.lastCorrelationId == INT32_MAX) {
self.lastCorrelationId = 0;
@@ -737,17 +834,8 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
return YES;
}
-// this is to make sure that the transition happens on the dedicated queue
-- (void)sdl_runOnProcessingQueue:(void (^)(void))block {
- if (dispatch_get_specific(SDLProcessingQueueName) != nil) {
- block();
- } else {
- dispatch_sync(self.lifecycleQueue, block);
- }
-}
-
- (void)sdl_transitionToState:(SDLState *)state {
- [self sdl_runOnProcessingQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
[self.lifecycleStateMachine transitionToState:state];
}];
}
@@ -758,13 +846,15 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
* @return An authentication token
*/
- (nullable NSString *)authToken {
- return self.proxy.protocol.authToken;
+ return self.protocolHandler.protocol.authToken;
}
#pragma mark SDL notification observers
-- (void)transportDidConnect {
- if (![self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]) {
+- (void)sdl_rpcServiceDidConnect {
+ // Ignore the connection while we are reconnecting. The proxy needs to be disposed and restarted in order to ensure correct state. https://github.com/smartdevicelink/sdl_ios/issues/1172
+ if (![self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReady]
+ && ![self.lifecycleStateMachine isCurrentState:SDLLifecycleStateReconnecting]) {
SDLLogD(@"Transport connected");
dispatch_async(self.lifecycleQueue, ^{
@@ -773,22 +863,22 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
}
}
-- (void)transportDidDisconnect {
+- (void)sdl_transportDidDisconnect {
SDLLogD(@"Transport Disconnected");
- dispatch_async(self.lifecycleQueue, ^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
if (self.lifecycleState == SDLLifecycleStateUnregistering || self.lifecycleState == SDLLifecycleStateStopped) {
[self sdl_transitionToState:SDLLifecycleStateStopped];
} else {
[self sdl_transitionToState:SDLLifecycleStateReconnecting];
}
- });
+ }];
}
- (void)hmiStatusDidChange:(SDLRPCNotificationNotification *)notification {
- dispatch_async(self.lifecycleQueue, ^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
[self sdl_hmiStatusDidChange:notification];
- });
+ }];
}
- (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification {
@@ -863,9 +953,9 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
}
- (void)remoteHardwareDidUnregister:(SDLRPCNotificationNotification *)notification {
- dispatch_async(self.lifecycleQueue, ^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.lifecycleQueue block:^{
[self sdl_remoteHardwareDidUnregister:notification];
- });
+ }];
}
- (void)sdl_remoteHardwareDidUnregister:(SDLRPCNotificationNotification *)notification {
@@ -880,42 +970,15 @@ NSString *const BackgroundTaskTransportName = @"com.sdl.transport.backgroundTask
[self sdl_transitionToState:SDLLifecycleStateStopped];
} else if ([self.lifecycleStateMachine isCurrentState:SDLLifecycleStateStopped]) {
return;
- } else if (appUnregisteredNotification.reason != nil && ([appUnregisteredNotification.reason isEqualToEnum:SDLAppInterfaceUnregisteredReasonAppUnauthorized] || [appUnregisteredNotification.reason isEqualToString:SDLAppInterfaceUnregisteredReasonProtocolViolation])) {
- // HAX: The string check is due to a core "feature" that could cause -1 to be sent as the enum value, which will crash here.
+ } else if (appUnregisteredNotification.reason != nil
+ && ([appUnregisteredNotification.reason isEqualToEnum:SDLAppInterfaceUnregisteredReasonAppUnauthorized]
+ || [appUnregisteredNotification.reason isEqualToEnum:SDLAppInterfaceUnregisteredReasonProtocolViolation])) {
[self sdl_transitionToState:SDLLifecycleStateStopped];
} else {
[self sdl_transitionToState:SDLLifecycleStateReconnecting];
}
}
-#pragma mark Streaming protocol listener
-
-- (void)audioServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol {
- if ((oldProtocol == nil && newProtocol == nil) || (oldProtocol == newProtocol)) {
- return;
- }
-
- if (oldProtocol != nil) {
- [self.streamManager stopAudio];
- }
- if (newProtocol != nil) {
- [self.streamManager startAudioWithProtocol:newProtocol];
- }
-}
-
-- (void)videoServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol {
- if ((oldProtocol == nil && newProtocol == nil) || (oldProtocol == newProtocol)) {
- return;
- }
-
- if (oldProtocol != nil) {
- [self.streamManager stopVideo];
- }
- if (newProtocol != nil) {
- [self.streamManager startVideoWithProtocol:newProtocol];
- }
-}
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.h b/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.h
new file mode 100644
index 000000000..0463995e3
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.h
@@ -0,0 +1,28 @@
+//
+// SDLLifecycleMobileHMIStateHandler.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/9/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@protocol SDLConnectionManagerType;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLifecycleMobileHMIStateHandler : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/// Initialize the object
+/// @param connectionManager The connection manager to send RPCs
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager;
+
+/// Stops the manager from checking for app background / foreground notifications.
+- (void)stop;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.m b/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.m
new file mode 100644
index 000000000..5a9be2543
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleMobileHMIStateHandler.m
@@ -0,0 +1,94 @@
+//
+// SDLLifecycleMobileHMIStateHandler.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/9/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "SDLLifecycleMobileHMIStateHandler.h"
+
+#import "SDLConnectionManagerType.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLMsgVersion.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLifecycleMobileHMIStateHandler ()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+
+@end
+
+@implementation SDLLifecycleMobileHMIStateHandler
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _connectionManager = connectionManager;
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(registerResponseReceived:) name:SDLDidReceiveRegisterAppInterfaceResponse object:nil];
+
+ return self;
+}
+
+- (void)stop {
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil];
+}
+
+/// This method sends an OnHMIStatus with the Mobile's HMI level to the head unit.
+/// This was originally designed to make sure that the head unit properly knew about the mobile app's ability to run timers in the background, which affected heartbeat.
+/// It may still affect some features on the head unit and the ability for the head unit to know which app is in the foreground is useful. It should not be removed due to unknown backward compatibility issues.
+- (void)sdl_sendMobileHMIState {
+ __block UIApplicationState appState = UIApplicationStateInactive;
+ if ([NSThread isMainThread]) {
+ appState = [UIApplication sharedApplication].applicationState;
+ } else {
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ appState = [UIApplication sharedApplication].applicationState;
+ });
+ }
+
+ SDLOnHMIStatus *hmiStatus = [[SDLOnHMIStatus alloc] init];
+ hmiStatus.audioStreamingState = SDLAudioStreamingStateNotAudible;
+ hmiStatus.systemContext = SDLSystemContextMain;
+
+ switch (appState) {
+ case UIApplicationStateActive: {
+ hmiStatus.hmiLevel = SDLHMILevelFull;
+ } break;
+ case UIApplicationStateBackground: // Fallthrough
+ case UIApplicationStateInactive: {
+ hmiStatus.hmiLevel = SDLHMILevelBackground;
+ } break;
+ default: break;
+ }
+
+ SDLLogD(@"Mobile UIApplication state changed, sending to remote system: %@", hmiStatus.hmiLevel);
+ [self.connectionManager sendConnectionManagerRPC:hmiStatus];
+}
+
+#pragma mark - Actions
+
+- (void)registerResponseReceived:(SDLRPCResponseNotification *)notification {
+ SDLRegisterAppInterfaceResponse *response = (SDLRegisterAppInterfaceResponse *)notification.response;
+
+ if (response.sdlMsgVersion.majorVersion.unsignedIntegerValue >= 4) {
+ [self sdl_sendMobileHMIState];
+ // Send SDL updates to application state
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidBecomeActiveNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidEnterBackgroundNotification object:nil];
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleProtocolHandler.h b/SmartDeviceLink/SDLLifecycleProtocolHandler.h
new file mode 100644
index 000000000..f39964e8b
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleProtocolHandler.h
@@ -0,0 +1,38 @@
+//
+// SDLProtocolDelegateHandler.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLProtocolDelegate.h"
+
+@class SDLConfiguration;
+@class SDLNotificationDispatcher;
+@class SDLProtocol;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLifecycleProtocolHandler : NSObject <SDLProtocolDelegate>
+
+@property (strong, nonatomic) SDLProtocol *protocol;
+
+/// Initialize the object
+/// @param protocol A protocol to receive protocol messages from and to send RPC data to
+/// @param notificationDispatcher A notification dispatcher to send notifications through
+/// @param configuration The configuration to use pass the app id to the protocol
+- (instancetype)initWithProtocol:(SDLProtocol *)protocol notificationDispatcher:(SDLNotificationDispatcher *)notificationDispatcher configuration:(SDLConfiguration *)configuration;
+
+/// Starts the manager and the underlying protocol.
+- (void)start;
+
+/// Stops the manager and the underlying protocol, which disconnects the underlying transport
+/// @param disconnectCompletionHandler A handler called when the transport finishes its disconnection
+- (void)stopWithCompletionHandler:(void (^)(void))disconnectCompletionHandler;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleProtocolHandler.m b/SmartDeviceLink/SDLLifecycleProtocolHandler.m
new file mode 100644
index 000000000..49a789637
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleProtocolHandler.m
@@ -0,0 +1,215 @@
+//
+// SDLProtocolDelegateHandler.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/10/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLLifecycleProtocolHandler.h"
+
+#import "SDLConfiguration.h"
+#import "SDLControlFramePayloadRPCStartService.h"
+#import "SDLError.h"
+#import "SDLGlobals.h"
+#import "SDLLifecycleConfiguration.h"
+#import "SDLLifecycleRPCAdapter.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLNotificationDispatcher.h"
+#import "SDLProtocol.h"
+#import "SDLProtocolHeader.h"
+#import "SDLProtocolMessage.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCMessage.h"
+#import "SDLRPCMessageType.h"
+#import "SDLTimer.h"
+
+static const float StartSessionTime = 10.0;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLifecycleProtocolHandler ()
+
+@property (weak, nonatomic) SDLNotificationDispatcher *notificationDispatcher;
+
+@property (strong, nonatomic) SDLTimer *rpcStartServiceTimeoutTimer;
+@property (copy, nonatomic) NSString *appId;
+
+@end
+
+@implementation SDLLifecycleProtocolHandler
+
+- (instancetype)initWithProtocol:(SDLProtocol *)protocol notificationDispatcher:(SDLNotificationDispatcher *)notificationDispatcher configuration:(SDLConfiguration *)configuration {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _protocol = protocol;
+ _notificationDispatcher = notificationDispatcher;
+
+ _appId = configuration.lifecycleConfig.fullAppId ? configuration.lifecycleConfig.fullAppId : configuration.lifecycleConfig.appId;
+ _protocol.appId = _appId;
+
+ [_protocol.protocolDelegateTable addObject:self];
+
+ return self;
+}
+
+- (void)start {
+ [self.protocol start];
+}
+
+- (void)stopWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
+ [self.protocol stopWithCompletionHandler:^{
+ disconnectCompletionHandler();
+ }];
+}
+
+
+#pragma mark - SDLProtocolDelegate
+
+/// Called when the transport is opened. We will send the RPC Start Service and wait for the RPC Start Service ACK
+- (void)protocolDidOpen:(SDLProtocol *)protocol {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogD(@"Transport opened, sending an RPC Start Service, and starting timer for RPC Start Service ACK to be received.");
+ [self.notificationDispatcher postNotificationName:SDLTransportDidConnect infoObject:nil];
+
+ SDLControlFramePayloadRPCStartService *startServicePayload = [[SDLControlFramePayloadRPCStartService alloc] initWithVersion:SDLMaxProxyProtocolVersion];
+ [self.protocol startServiceWithType:SDLServiceTypeRPC payload:startServicePayload.data];
+
+ if (self.rpcStartServiceTimeoutTimer == nil) {
+ self.rpcStartServiceTimeoutTimer = [[SDLTimer alloc] initWithDuration:StartSessionTime repeat:NO];
+ __weak typeof(self) weakSelf = self;
+ self.rpcStartServiceTimeoutTimer.elapsedBlock = ^{
+ SDLLogE(@"Start session timed out after %f seconds, closing the connection.", StartSessionTime);
+ [weakSelf.protocol stopWithCompletionHandler:^{}];
+ };
+ }
+ [self.rpcStartServiceTimeoutTimer start];
+}
+
+/// Called when the transport is closed.
+- (void)protocolDidClose:(SDLProtocol *)protocol {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogW(@"Transport disconnected");
+ [self.notificationDispatcher postNotificationName:SDLTransportDidDisconnect infoObject:nil];
+}
+
+- (void)protocol:(SDLProtocol *)protocol transportDidError:(NSError *)error {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogW(@"Transport error: %@", error);
+ [self.notificationDispatcher postNotificationName:SDLTransportConnectError infoObject:error];
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogD(@"Start Service (ACK) SessionId: %d for serviceType %d", startServiceACK.header.sessionID, startServiceACK.header.serviceType);
+
+ if (startServiceACK.header.serviceType == SDLServiceTypeRPC) {
+ [self.rpcStartServiceTimeoutTimer cancel];
+ [self.notificationDispatcher postNotificationName:SDLRPCServiceDidConnect infoObject:nil];
+ }
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogD(@"Start Service (NAK): SessionId: %d for serviceType %d", startServiceNAK.header.sessionID, startServiceNAK.header.serviceType);
+
+ if (startServiceNAK.header.serviceType == SDLServiceTypeRPC) {
+ [self.rpcStartServiceTimeoutTimer cancel];
+ [self.notificationDispatcher postNotificationName:SDLRPCServiceConnectionDidError infoObject:nil];
+ }
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK {
+ if (self.protocol != protocol) { return; }
+
+ SDLLogD(@"End Service (ACK): SessionId: %d for serviceType %d", endServiceACK.header.sessionID, endServiceACK.header.serviceType);
+
+ if (endServiceACK.header.serviceType == SDLServiceTypeRPC) {
+ [self.rpcStartServiceTimeoutTimer cancel];
+ [self.notificationDispatcher postNotificationName:SDLRPCServiceDidDisconnect infoObject:nil];
+ }
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK {
+ if (self.protocol != protocol) { return; }
+
+ if (endServiceNAK.header.serviceType == SDLServiceTypeRPC) {
+ NSError *error = [NSError sdl_lifecycle_unknownRemoteErrorWithDescription:@"RPC Service failed to stop" andReason:nil];
+ [self.notificationDispatcher postNotificationName:SDLRPCServiceConnectionDidError infoObject:error];
+ }
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveMessage:(SDLProtocolMessage *)msg {
+ if (self.protocol != protocol) { return; }
+
+ NSDictionary<NSString *, id> *rpcMessageAsDictionary = [msg rpcDictionary];
+ SDLRPCMessage *receivedMessage = [[SDLRPCMessage alloc] initWithDictionary:rpcMessageAsDictionary];
+ NSString *fullName = [self sdl_fullNameForMessage:receivedMessage];
+
+ // From the function name, create the corresponding RPCObject and initialize it
+ NSString *functionClassName = [NSString stringWithFormat:@"SDL%@", fullName];
+ SDLRPCMessage *newMessage = [[NSClassFromString(functionClassName) alloc] initWithDictionary:rpcMessageAsDictionary];
+
+ // If we were unable to create the message, it's an unknown type; discard it
+ if (newMessage == nil) { return; }
+
+ // Adapt the incoming message then call the callback
+ NSArray<SDLRPCMessage *> *adaptedMessages = [SDLLifecycleRPCAdapter adaptRPC:newMessage direction:SDLRPCDirectionIncoming];
+ for (SDLRPCMessage *message in adaptedMessages) {
+ [self sdl_sendCallbackForMessage:message];
+ }
+}
+
+#pragma mark - Utilities
+
+- (void)sdl_sendCallbackForMessage:(SDLRPCMessage *)message {
+ // Log the RPC message
+ SDLLogV(@"Sending callback for RPC message: %@", message);
+
+ SDLNotificationName notificationName = [self sdl_notificationNameForMessage:message];
+ if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameResponse]) {
+ [self.notificationDispatcher postRPCResponseNotification:notificationName response:(SDLRPCResponse *)message];
+ } else if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameRequest]) {
+ [self.notificationDispatcher postRPCRequestNotification:notificationName request:(SDLRPCRequest *)message];
+ } else if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameNotification]) {
+ [self.notificationDispatcher postRPCNotificationNotification:notificationName notification:(SDLRPCNotification *)message];
+ }
+}
+
+- (SDLNotificationName)sdl_notificationNameForMessage:(SDLRPCMessage *)message {
+ NSString *messageName = message.name;
+ if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameResponse]) {
+ return [NSString stringWithFormat:@"com.sdl.response.%@", messageName];
+ } else if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameRequest]) {
+ return [NSString stringWithFormat:@"com.sdl.request.%@", messageName];
+ } else if ([message.messageType isEqualToEnum:SDLRPCMessageTypeNameNotification]) {
+ return [NSString stringWithFormat:@"com.sdl.notification.%@", messageName];
+ }
+
+ return messageName;
+}
+
+- (NSString *)sdl_fullNameForMessage:(SDLRPCMessage *)message {
+ NSString *functionName = message.name;
+ NSString *messageType = message.messageType;
+
+ // If it's a response, append "response"
+ if ([messageType isEqualToEnum:SDLRPCMessageTypeNameResponse]) {
+ if (![functionName isEqualToEnum:SDLRPCFunctionNameGenericResponse]) {
+ functionName = [NSString stringWithFormat:@"%@Response", functionName];
+ }
+ }
+
+ return functionName;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleRPCAdapter.h b/SmartDeviceLink/SDLLifecycleRPCAdapter.h
new file mode 100644
index 000000000..1eea483d4
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleRPCAdapter.h
@@ -0,0 +1,29 @@
+//
+// SDLLifecycleRPCAdapter.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/15/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SDLRPCMessage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(NSUInteger, SDLRPCDirection) {
+ SDLRPCDirectionIncoming,
+ SDLRPCDirectionOutgoing
+};
+
+@interface SDLLifecycleRPCAdapter : NSObject
+
+/// Takes an RPC message (request, response, or notification) and adapts for the negotiated RPC spec version. This may need to happen before being sent or received.
+/// @param message The message to be adapted
+/// @return The message or messages to be sent or recieved
++ (NSArray<SDLRPCMessage *> *)adaptRPC:(SDLRPCMessage *)message direction:(SDLRPCDirection)direction;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleRPCAdapter.m b/SmartDeviceLink/SDLLifecycleRPCAdapter.m
new file mode 100644
index 000000000..3b965172c
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleRPCAdapter.m
@@ -0,0 +1,164 @@
+//
+// SDLLifecycleRPCAdapter.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/15/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLLifecycleRPCAdapter.h"
+
+#import "SDLGlobals.h"
+#import "SDLLogMacros.h"
+#import "SDLOnButtonEvent.h"
+#import "SDLOnButtonPress.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCMessage.h"
+#import "SDLSubscribeButton.h"
+#import "SDLUnsubscribeButton.h"
+#import "SDLVersion.h"
+
+@implementation SDLLifecycleRPCAdapter
+
++ (NSArray<SDLRPCMessage *> *)adaptRPC:(SDLRPCMessage *)message direction:(SDLRPCDirection)direction {
+ switch (direction) {
+ case SDLRPCDirectionIncoming:
+ if ([message.name isEqualToEnum:SDLRPCFunctionNameOnButtonPress]) {
+ return [self adaptOnButtonPress:(SDLOnButtonPress *)message];
+ } else if ([message.name isEqualToEnum:SDLRPCFunctionNameOnButtonEvent]) {
+ return [self adaptOnButtonEvent:(SDLOnButtonEvent *)message];
+ }
+ break;
+ case SDLRPCDirectionOutgoing:
+ if ([message.name isEqualToEnum:SDLRPCFunctionNameSubscribeButton]) {
+ return [self adaptSubscribeButton:(SDLSubscribeButton *)message];
+ } else if ([message.name isEqualToEnum:SDLRPCFunctionNameUnsubscribeButton]) {
+ return [self adaptUnsubscribeButton:(SDLUnsubscribeButton *)message];
+ }
+ break;
+ }
+
+ return @[message];
+}
+
+#pragma mark - Individual RPC Adaptations
+
+#pragma mark Incoming
+
+#pragma mark Notifications
+
+// https://github.com/smartdevicelink/sdl_java_suite/pull/864
++ (NSArray<SDLRPCMessage *> *)adaptOnButtonPress:(SDLOnButtonPress *)message {
+ SDLLogD(@"Adapting onButtonPress message: %@", message);
+ if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Force receive PlayPause & OK notifications
+ SDLOnButtonPress *okPress = [message copy];
+ okPress.buttonName = SDLButtonNameOk;
+
+ return @[message, okPress];
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Force receive PlayPause and OK notifications
+ SDLOnButtonPress *playPausePress = [message copy];
+ playPausePress.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPausePress];
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Force receive Ok and Play/Pause notifications
+ SDLOnButtonPress *playPausePress = [message copy];
+ playPausePress.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPausePress];
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Drop
+ return @[];
+ }
+ }
+
+ return @[message];
+}
+
+// https://github.com/smartdevicelink/sdl_java_suite/pull/864
++ (NSArray<SDLRPCMessage *> *)adaptOnButtonEvent:(SDLOnButtonEvent *)message {
+ SDLLogD(@"Adapting onButtonEvent message: %@", message);
+ if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Force receive PlayPause & OK notifications
+ SDLOnButtonEvent *okEvent = [message copy];
+ okEvent.buttonName = SDLButtonNameOk;
+
+ return @[message, okEvent];
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Force receive PlayPause and OK notifications
+ SDLOnButtonEvent *playPauseEvent = [message copy];
+ playPauseEvent.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPauseEvent];
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ // Force receive Ok and Play/Pause notifications
+ SDLOnButtonEvent *playPauseEvent = [message copy];
+ playPauseEvent.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPauseEvent];
+ } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ // Drop
+ return @[];
+ }
+ }
+
+ return @[message];
+}
+
+#pragma mark Outgoing
+
+#pragma mark Requests
+
+// See table here https://github.com/smartdevicelink/sdl_java_suite/pull/864
++ (NSArray<SDLRPCMessage *> *)adaptSubscribeButton:(SDLSubscribeButton *)message {
+ SDLLogD(@"Adapting SubscribeButton message: %@", message);
+ if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ SDLSubscribeButton *playPauseMessage = [message copy];
+ playPauseMessage.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPauseMessage];
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ SDLSubscribeButton *okMessage = [message copy];
+ okMessage.buttonName = SDLButtonNameOk;
+
+ return @[okMessage];
+ }
+ }
+
+ return @[message];
+}
+
+// https://github.com/smartdevicelink/sdl_java_suite/pull/864
++ (NSArray<SDLRPCMessage *> *)adaptUnsubscribeButton:(SDLUnsubscribeButton *)message {
+ SDLLogD(@"Adapting UnsubscribeButton message: %@", message);
+ if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
+ if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
+ SDLUnsubscribeButton *playPauseMessage = [message copy];
+ playPauseMessage.buttonName = SDLButtonNamePlayPause;
+
+ return @[message, playPauseMessage];
+ }
+ } else { // Major version < 5
+ if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
+ SDLUnsubscribeButton *okMessage = [message copy];
+ okMessage.buttonName = SDLButtonNameOk;
+
+ return @[okMessage];
+ }
+ }
+
+ return @[message];
+}
+
+@end
diff --git a/SmartDeviceLink/SDLLifecycleSyncPDataHandler.h b/SmartDeviceLink/SDLLifecycleSyncPDataHandler.h
new file mode 100644
index 000000000..f80ca385d
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleSyncPDataHandler.h
@@ -0,0 +1,29 @@
+//
+// SDLLifecycleSyncPDataHandler.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/8/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol SDLConnectionManagerType;
+
+/// Handles decoding OnSyncPData RPCs, then performing network requests and creating a SyncPData RPC request for legacy head units.
+@interface SDLLifecycleSyncPDataHandler : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/// Initialize the object
+/// @param manager The connection manager to send RPCs through
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager;
+
+/// Stops the manager cancels all URL session tasks
+- (void)stop;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleSyncPDataHandler.m b/SmartDeviceLink/SDLLifecycleSyncPDataHandler.m
new file mode 100644
index 000000000..58ef27696
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleSyncPDataHandler.m
@@ -0,0 +1,153 @@
+//
+// SDLLifecycleSyncPDataHandler.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/8/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "SDLLifecycleSyncPDataHandler.h"
+
+#import "SDLConnectionManagerType.h"
+#import "SDLEncodedSyncPData.h"
+#import "SDLLogMacros.h"
+#import "SDLOnEncodedSyncPData.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCParameterNames.h"
+
+static const float DefaultConnectionTimeout = 45.0;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLLifecycleSyncPDataHandler ()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> manager;
+@property (strong, nonatomic) NSURLSession *urlSession;
+
+@end
+
+@implementation SDLLifecycleSyncPDataHandler
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ SDLLogV(@"Initializing SyncPData handler");
+ _manager = manager;
+
+ NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
+ configuration.timeoutIntervalForRequest = DefaultConnectionTimeout;
+ configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
+ _urlSession = [NSURLSession sessionWithConfiguration:configuration];
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_encodedSyncPDataReceived:) name:SDLDidReceiveEncodedDataNotification object:nil];
+#pragma clang diagnostic pop
+
+ return self;
+}
+
+- (void)stop {
+ SDLLogV(@"Stopping SyncPData handler and stopping all URL session tasks");
+ [self.urlSession getTasksWithCompletionHandler:^(NSArray<NSURLSessionDataTask *> * _Nonnull dataTasks, NSArray<NSURLSessionUploadTask *> * _Nonnull uploadTasks, NSArray<NSURLSessionDownloadTask *> * _Nonnull downloadTasks) {
+ for (NSURLSessionTask *task in dataTasks) {
+ [task cancel];
+ }
+
+ for (NSURLSessionTask *task in uploadTasks) {
+ [task cancel];
+ }
+
+ for (NSURLSessionTask *task in downloadTasks) {
+ [task cancel];
+ }
+ }];
+}
+
+#pragma mark - Utilities
+
+- (void)sdl_sendEncodedSyncPData:(NSDictionary<NSString *, id> *)encodedSyncPData toURL:(NSString *)urlString withTimeout:(NSNumber *)timeout {
+ // Configure HTTP URL & Request
+ NSURL *url = [NSURL URLWithString:urlString];
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
+ request.HTTPMethod = @"POST";
+ [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
+ request.timeoutInterval = 60;
+
+ // Prepare the data in the required format
+ NSString *encodedSyncPDataString = [[NSString stringWithFormat:@"%@", encodedSyncPData] componentsSeparatedByString:@"\""][1];
+ NSArray<NSString *> *array = [NSArray arrayWithObject:encodedSyncPDataString];
+ NSDictionary<NSString *, id> *dictionary = @{ @"data": array };
+ NSError *JSONSerializationError = nil;
+ NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&JSONSerializationError];
+ if (JSONSerializationError) {
+ SDLLogW(@"Error attempting to create SyncPData for HTTP request: %@", JSONSerializationError);
+ return;
+ }
+
+ // Send the HTTP Request
+ __weak typeof(self) weakSelf = self;
+ [[self.urlSession uploadTaskWithRequest:request
+ fromData:data
+ completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
+ [weakSelf sdl_syncPDataNetworkRequestCompleteWithData:data response:response error:error];
+ }] resume];
+
+ SDLLogV(@"OnEncodedSyncPData (HTTP Request)");
+}
+
+// Handle the OnEncodedSyncPData HTTP Response
+- (void)sdl_syncPDataNetworkRequestCompleteWithData:(NSData *)data response:(NSURLResponse *)response error:(NSError *)error {
+ // Sample of response: {"data":["SDLKGLSDKFJLKSjdslkfjslkJLKDSGLKSDJFLKSDJF"]}
+ SDLLogV(@"OnEncodedSyncPData (HTTP Response): %@", response);
+
+ // Validate response data.
+ if (data == nil || data.length == 0) {
+ SDLLogW(@"OnEncodedSyncPData (HTTP Response): no data returned");
+ return;
+ }
+
+ // Convert data to RPCRequest
+ NSError *JSONConversionError = nil;
+ NSDictionary<NSString *, id> *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&JSONConversionError];
+ if (JSONConversionError) {
+ SDLLogE(@"Error converting EncodedSyncPData response dictionary: %@", JSONConversionError);
+ return;
+ }
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLEncodedSyncPData *request = [[SDLEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
+ request.data = responseDictionary[@"data"];
+
+ [self.manager sendConnectionManagerRequest:request withResponseHandler:nil];
+}
+
+
+#pragma mark - Notifications
+
+- (void)sdl_encodedSyncPDataReceived:(SDLRPCNotificationNotification *)notification {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLOnEncodedSyncPData *message = notification.notification;
+#pragma clang diagnostic pop
+
+ // If URL != nil, perform HTTP Post and don't pass the notification to proxy listeners
+ SDLLogV(@"OnEncodedSyncPData: %@", message);
+
+ NSString *urlString = (NSString *)message.parameters[SDLRPCParameterNameURLUppercase];
+ NSDictionary<NSString *, id> *encodedSyncPData = (NSDictionary<NSString *, id> *)message.parameters[SDLRPCParameterNameData];
+ NSNumber *encodedSyncPTimeout = (NSNumber *)message.parameters[SDLRPCParameterNameTimeoutCapitalized];
+
+ if (urlString && encodedSyncPData && encodedSyncPTimeout) {
+ [self sdl_sendEncodedSyncPData:encodedSyncPData toURL:urlString withTimeout:encodedSyncPTimeout];
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleSystemRequestHandler.h b/SmartDeviceLink/SDLLifecycleSystemRequestHandler.h
new file mode 100644
index 000000000..40865361a
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleSystemRequestHandler.h
@@ -0,0 +1,29 @@
+//
+// SDLLifecycleSystemRequestHandler.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/8/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol SDLConnectionManagerType;
+
+/// Handles decoding OnSystemRequest RPCs, then performing network requests and creating a SystemRequest RPC request for head units.
+@interface SDLLifecycleSystemRequestHandler : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/// Initialize the object
+/// @param manager A connection manager to send RPCs
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager;
+
+/// Stops the manager and clears all URL Session tasks
+- (void)stop;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLifecycleSystemRequestHandler.m b/SmartDeviceLink/SDLLifecycleSystemRequestHandler.m
new file mode 100644
index 000000000..354dca8dd
--- /dev/null
+++ b/SmartDeviceLink/SDLLifecycleSystemRequestHandler.m
@@ -0,0 +1,336 @@
+//
+// SDLLifecycleSystemRequestHandler.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/8/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+
+#import "SDLLifecycleSystemRequestHandler.h"
+
+#import "SDLCacheFileManager.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLGlobals.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnSystemRequest.h"
+#import "SDLPutFile.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSystemRequest.h"
+
+static const float DefaultConnectionTimeout = 45.0;
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef void (^URLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error);
+typedef void (^URLSessionDownloadTaskCompletionHandler)(NSURL *location, NSURLResponse *response, NSError *error);
+
+@interface SDLLifecycleSystemRequestHandler ()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> manager;
+@property (strong, nonatomic) SDLCacheFileManager *cacheFileManager;
+@property (strong, nonatomic) NSURLSession *urlSession;
+
+@end
+
+@implementation SDLLifecycleSystemRequestHandler
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)manager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ SDLLogV(@"Initializing SystemRequest handler");
+ _manager = manager;
+
+ _cacheFileManager = [[SDLCacheFileManager alloc] init];
+
+ NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
+ configuration.timeoutIntervalForRequest = DefaultConnectionTimeout;
+ configuration.timeoutIntervalForResource = DefaultConnectionTimeout;
+ configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
+ _urlSession = [NSURLSession sessionWithConfiguration:configuration];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(systemRequestReceived:) name:SDLDidReceiveSystemRequestNotification object:nil];
+
+ return self;
+}
+
+- (void)stop {
+ SDLLogV(@"Stopping SystemRequest handler and stopping all URL session tasks");
+ [self.urlSession getTasksWithCompletionHandler:^(NSArray<NSURLSessionDataTask *> * _Nonnull dataTasks, NSArray<NSURLSessionUploadTask *> * _Nonnull uploadTasks, NSArray<NSURLSessionDownloadTask *> * _Nonnull downloadTasks) {
+ for (NSURLSessionTask *task in dataTasks) {
+ [task cancel];
+ }
+
+ for (NSURLSessionTask *task in uploadTasks) {
+ [task cancel];
+ }
+
+ for (NSURLSessionTask *task in downloadTasks) {
+ [task cancel];
+ }
+ }];
+}
+
+#pragma mark - Handle OnSystemRequest
+- (void)sdl_handleSystemRequestLaunchApp:(SDLOnSystemRequest *)request {
+ NSURL *urlScheme = [NSURL URLWithString:request.url];
+ if (urlScheme == nil) {
+ SDLLogW(@"System request LaunchApp failed: invalid URL sent from module: %@", request.url);
+ return;
+ }
+
+ // If system version is less than 9.0 http://stackoverflow.com/a/5337804/1370927
+ if (SDL_SYSTEM_VERSION_LESS_THAN(@"9.0")) {
+ // Return early if we can't openURL because openURL will crash instead of fail silently in < 9.0
+ if (![[UIApplication sharedApplication] canOpenURL:urlScheme]) {
+ return;
+ }
+ }
+
+ [[UIApplication sharedApplication] openURL:urlScheme];
+}
+
+- (void)sdl_handleSystemRequestProprietary:(SDLOnSystemRequest *)request {
+ NSDictionary<NSString *, id> *jsonDict = [self sdl_validateAndParseProprietarySystemRequest:request];
+ if (jsonDict == nil || request.url == nil) {
+ return;
+ }
+
+ // Send the HTTP Request
+ __weak typeof(self) weakSelf = self;
+ [self sdl_uploadForBodyDataDictionary:jsonDict
+ urlString:request.url
+ completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+
+ if (error) {
+ SDLLogW(@"OnSystemRequest HTTP response error: %@", error);
+ return;
+ }
+ if (data == nil || data.length == 0) {
+ SDLLogW(@"OnSystemRequest HTTP response error: no data received");
+ return;
+ }
+
+ // Create the SystemRequest RPC to send to module.
+ SDLLogV(@"OnSystemRequest HTTP response");
+ SDLSystemRequest *request = [[SDLSystemRequest alloc] init];
+ request.requestType = SDLRequestTypeProprietary;
+ request.bulkData = data;
+
+ // Send the RPC Request
+ [strongSelf.manager sendConnectionManagerRequest:request withResponseHandler:nil];
+ }];
+}
+
+// TODO: Move to lock screen manager
+- (void)sdl_handleSystemRequestLockScreenIconURL:(SDLOnSystemRequest *)request {
+ [self.cacheFileManager retrieveImageForRequest:request withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ if (error != nil) {
+ SDLLogW(@"Failed to retrieve lock screen icon: %@", error.localizedDescription);
+ return;
+ }
+
+ NSDictionary<NSString *, id> *userInfo = nil;
+ if (image != nil) {
+ userInfo = @{SDLNotificationUserInfoObject: image};
+ }
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:userInfo];
+ }];
+}
+
+- (void)sdl_handleSystemRequestIconURL:(SDLOnSystemRequest *)request {
+ __weak typeof(self) weakSelf = self;
+ [self sdl_sendDataTaskWithURL:[NSURL URLWithString:request.url]
+ completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (error != nil) {
+ SDLLogW(@"OnSystemRequest (icon url) HTTP download task failed: %@", error.localizedDescription);
+ return;
+ } else if (data.length == 0) {
+ SDLLogW(@"OnSystemRequest (icon url) HTTP download task failed to get the cloud app icon image data");
+ return;
+ }
+
+ SDLSystemRequest *iconURLSystemRequest = [[SDLSystemRequest alloc] initWithType:SDLRequestTypeIconURL fileName:request.url];
+ iconURLSystemRequest.bulkData = data;
+
+ [strongSelf.manager sendConnectionManagerRequest:iconURLSystemRequest withResponseHandler:nil];
+ }];
+}
+
+- (void)sdl_handleSystemRequestHTTP:(SDLOnSystemRequest *)request {
+ if (request.bulkData.length == 0) {
+ // TODO: not sure how we want to handle http requests that don't have bulk data (maybe as GET?)
+ return;
+ }
+
+ __weak typeof(self) weakSelf = self;
+ [self sdl_uploadData:request.bulkData
+ toURLString:request.url
+ completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (error != nil) {
+ SDLLogW(@"OnSystemRequest (HTTP) error: %@", error.localizedDescription);
+ return;
+ }
+
+ if (data.length == 0) {
+ SDLLogW(@"OnSystemRequest (HTTP) error: no data returned");
+ return;
+ }
+
+ // Show the HTTP response
+ SDLLogV(@"OnSystemRequest (HTTP) response: %@", response);
+
+ // Create the PutFile RPC to send to module.
+ SDLPutFile *putFile = [[SDLPutFile alloc] init];
+ putFile.fileType = SDLFileTypeJSON;
+ putFile.sdlFileName = @"response_data";
+ putFile.bulkData = data;
+
+ // Send RPC Request
+ [strongSelf.manager sendConnectionManagerRequest:putFile withResponseHandler:nil];
+ }];
+}
+
+#pragma mark - HTTP
+
+/**
+ * Start an upload for some data to a web address specified
+ *
+ * @param data The data to be passed to the server
+ * @param urlString The URL the data should be POSTed to
+ * @param completionHandler A completion handler of what to do when the server responds
+ */
+- (void)sdl_uploadData:(NSData *_Nonnull)data toURLString:(NSString *_Nonnull)urlString completionHandler:(URLSessionTaskCompletionHandler _Nullable)completionHandler {
+ // NSURLRequest configuration
+ NSURL *url = [NSURL URLWithString:urlString];
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
+ [request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
+ request.HTTPMethod = @"POST";
+
+ SDLLogV(@"OnSystemRequest (HTTP) upload task created for URL: %@", urlString);
+
+ // Create the upload task
+ [self sdl_sendUploadRequest:request withData:data completionHandler:completionHandler];
+}
+
+/**
+ * Start an upload for a body data dictionary, this is used by the "proprietary" system request needed for backward compatibility
+ *
+ * @param dictionary The system request dictionary that contains the HTTP data to be sent
+ * @param urlString A string containing the URL to send the upload to
+ * @param completionHandler A completion handler returning the response from the server to the upload task
+ */
+- (void)sdl_uploadForBodyDataDictionary:(NSDictionary<NSString *, id> *)dictionary urlString:(NSString *)urlString completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
+ NSParameterAssert(dictionary != nil);
+ NSParameterAssert(urlString != nil);
+ NSParameterAssert(completionHandler != NULL);
+
+ // Extract data from the dictionary
+ NSDictionary<NSString *, id> *requestData = dictionary[@"HTTPRequest"];
+ NSDictionary *headers = requestData[@"headers"];
+ NSString *contentType = headers[@"ContentType"];
+ NSTimeInterval timeout = [headers[@"ConnectTimeout"] doubleValue];
+ NSString *method = headers[@"RequestMethod"];
+ NSString *bodyString = requestData[@"body"];
+ NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
+
+ // NSURLRequest configuration
+ NSURL *url = [NSURL URLWithString:urlString];
+ NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
+ [request setValue:contentType forHTTPHeaderField:@"content-type"];
+ request.timeoutInterval = timeout;
+ request.HTTPMethod = method;
+
+ SDLLogV(@"OnSystemRequest (Proprietary) upload task created for URL: %@", urlString);
+
+ // Create the upload task
+ [self sdl_sendUploadRequest:request withData:bodyData completionHandler:completionHandler];
+}
+
+- (void)sdl_sendUploadRequest:(NSURLRequest*)request withData:(NSData*)data completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
+ NSMutableURLRequest* mutableRequest = [request mutableCopy];
+
+ if ([mutableRequest.URL.scheme isEqualToString:@"http"]) {
+ mutableRequest.URL = [NSURL URLWithString:[mutableRequest.URL.absoluteString stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]];
+ }
+
+ [[self.urlSession uploadTaskWithRequest:request fromData:data completionHandler:completionHandler] resume];
+}
+
+- (void)sdl_sendDataTaskWithURL:(NSURL*)url completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
+ if ([url.scheme isEqualToString:@"http"]) {
+ url = [NSURL URLWithString:[url.absoluteString stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]];
+ }
+
+ [[self.urlSession dataTaskWithURL:url completionHandler:completionHandler] resume];
+}
+
+#pragma mark - Validation
+
+/**
+ * Determine if the System Request is valid and return it's JSON dictionary, if available.
+ *
+ * @param request The system request to parse
+ *
+ * @return A parsed JSON dictionary, or nil if it couldn't be parsed
+ */
+- (nullable NSDictionary<NSString *, id> *)sdl_validateAndParseProprietarySystemRequest:(SDLOnSystemRequest *)request {
+ NSString *urlString = request.url;
+ SDLFileType fileType = request.fileType;
+
+ // Validate input
+ if (urlString == nil || [NSURL URLWithString:urlString] == nil) {
+ SDLLogW(@"OnSystemRequest validation failure: URL is nil");
+ return nil;
+ }
+ if (![fileType isEqualToEnum:SDLFileTypeJSON]) {
+ SDLLogW(@"OnSystemRequest validation failure: file type is not JSON");
+ return nil;
+ }
+
+ // Get data dictionary from the bulkData
+ NSError *error = nil;
+ NSDictionary<NSString *, id> *JSONDictionary = [NSJSONSerialization JSONObjectWithData:request.bulkData options:kNilOptions error:&error];
+ if (error != nil) {
+ SDLLogW(@"OnSystemRequest validation failure: data is not valid JSON");
+ return nil;
+ }
+
+ return JSONDictionary;
+}
+
+#pragma mark - Notifications
+
+- (void)systemRequestReceived:(SDLRPCNotificationNotification *)notification {
+ SDLOnSystemRequest *onSystemRequest = notification.notification;
+ SDLRequestType requestType = onSystemRequest.requestType;
+
+ // Handle the various OnSystemRequest types
+ if ([requestType isEqualToEnum:SDLRequestTypeProprietary]) {
+ [self sdl_handleSystemRequestProprietary:onSystemRequest];
+ } else if ([requestType isEqualToEnum:SDLRequestTypeLockScreenIconURL]) {
+ [self sdl_handleSystemRequestLockScreenIconURL:onSystemRequest];
+ } else if ([requestType isEqualToEnum:SDLRequestTypeIconURL]) {
+ [self sdl_handleSystemRequestIconURL:onSystemRequest];
+ } else if ([requestType isEqualToEnum:SDLRequestTypeHTTP]) {
+ [self sdl_handleSystemRequestHTTP:onSystemRequest];
+ } else if ([requestType isEqualToEnum:SDLRequestTypeLaunchApp]) {
+ if ([NSThread isMainThread]) {
+ [self sdl_handleSystemRequestLaunchApp:onSystemRequest];
+ } else {
+ dispatch_sync(dispatch_get_main_queue(), ^{
+ [self sdl_handleSystemRequestLaunchApp:onSystemRequest];
+ });
+ }
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLockScreenManager.h b/SmartDeviceLink/SDLLockScreenManager.h
index 3e5279878..e4ef48666 100644
--- a/SmartDeviceLink/SDLLockScreenManager.h
+++ b/SmartDeviceLink/SDLLockScreenManager.h
@@ -10,6 +10,8 @@
@class SDLLockScreenConfiguration;
@class SDLLockScreenViewController;
+@class SDLNotificationDispatcher;
+
@protocol SDLViewControllerPresentable;
@@ -61,7 +63,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return An instance of `SDLLockScreenManager`.
*/
-- (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notificationDispatcher:(nullable id)dispatcher presenter:(id<SDLViewControllerPresentable>)presenter;
+- (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notificationDispatcher:(SDLNotificationDispatcher *)dispatcher presenter:(id<SDLViewControllerPresentable>)presenter;
/**
* Start the manager. This is used internally.
diff --git a/SmartDeviceLink/SDLLockScreenManager.m b/SmartDeviceLink/SDLLockScreenManager.m
index f8bbee25f..34ceee0bd 100644
--- a/SmartDeviceLink/SDLLockScreenManager.m
+++ b/SmartDeviceLink/SDLLockScreenManager.m
@@ -11,9 +11,11 @@
#import "NSBundle+SDLBundle.h"
#import "SDLLogMacros.h"
#import "SDLLockScreenConfiguration.h"
+#import "SDLLockScreenStatusManager.h"
#import "SDLLockScreenStatus.h"
#import "SDLLockScreenViewController.h"
#import "SDLNotificationConstants.h"
+#import "SDLNotificationDispatcher.h"
#import "SDLOnLockScreenStatus.h"
#import "SDLOnDriverDistraction.h"
#import "SDLRPCNotificationNotification.h"
@@ -27,6 +29,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (assign, nonatomic) BOOL canPresent;
@property (strong, nonatomic, readwrite) SDLLockScreenConfiguration *config;
@property (strong, nonatomic) id<SDLViewControllerPresentable> presenter;
+@property (strong, nonatomic) SDLLockScreenStatusManager *statusManager;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -42,7 +45,7 @@ NS_ASSUME_NONNULL_BEGIN
@implementation SDLLockScreenManager
-- (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notificationDispatcher:(nullable id)dispatcher presenter:(id<SDLViewControllerPresentable>)presenter {
+- (instancetype)initWithConfiguration:(SDLLockScreenConfiguration *)config notificationDispatcher:(SDLNotificationDispatcher *)dispatcher presenter:(id<SDLViewControllerPresentable>)presenter {
self = [super init];
if (!self) {
return nil;
@@ -53,9 +56,13 @@ NS_ASSUME_NONNULL_BEGIN
_config = config;
_presenter = presenter;
_lockScreenDismissedByUser = NO;
+ _statusManager = [[SDLLockScreenStatusManager alloc] initWithNotificationDispatcher:dispatcher];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenStatusDidChange:) name:SDLDidChangeLockScreenStatusNotification object:dispatcher];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenIconReceived:) name:SDLDidReceiveLockScreenIcon object:dispatcher];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenStatusDidChange:) name:SDLDidChangeLockScreenStatusNotification object:_statusManager];
+#pragma clang diagnostic pop
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_lockScreenIconReceived:) name:SDLDidReceiveLockScreenIcon object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_driverDistractionStateDidChange:) name:SDLDidChangeDriverDistractionStateNotification object:dispatcher];
@@ -66,7 +73,7 @@ NS_ASSUME_NONNULL_BEGIN
self.canPresent = NO;
__weak typeof(self) weakSelf = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) {
@@ -83,7 +90,7 @@ NS_ASSUME_NONNULL_BEGIN
} else {
[strongSelf sdl_start];
}
- }];
+ });
}
- (void)sdl_start {
@@ -141,7 +148,6 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)sdl_lockScreenIconReceived:(NSNotification *)notification {
- NSAssert([notification.userInfo[SDLNotificationUserInfoObject] isKindOfClass:[UIImage class]], @"A notification was sent with an unanticipated object");
if (![notification.userInfo[SDLNotificationUserInfoObject] isKindOfClass:[UIImage class]]) {
return;
}
@@ -156,7 +162,7 @@ NS_ASSUME_NONNULL_BEGIN
- (void)sdl_appDidBecomeActive:(NSNotification *)notification {
__weak typeof(self) weakSelf = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
// Restart, and potentially dismiss the lock screen if the app was disconnected in the background
if (!strongSelf.canPresent) {
@@ -164,7 +170,7 @@ NS_ASSUME_NONNULL_BEGIN
}
[strongSelf sdl_checkLockScreen];
- }];
+ });
}
- (void)sdl_driverDistractionStateDidChange:(SDLRPCNotificationNotification *)notification {
@@ -184,9 +190,9 @@ NS_ASSUME_NONNULL_BEGIN
}
__weak typeof(self) weakSelf = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
[weakSelf sdl_updatePresentation];
- }];
+ });
}
- (void)sdl_updatePresentation {
@@ -194,17 +200,26 @@ NS_ASSUME_NONNULL_BEGIN
if (self.canPresent) {
[self.presenter updateLockScreenToShow:YES withCompletionHandler:nil];
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
} else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusRequired]) {
+#pragma clang diagnostic pop
if (self.canPresent && !self.lockScreenDismissedByUser) {
[self.presenter updateLockScreenToShow:YES withCompletionHandler:nil];
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
} else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOptional]) {
+#pragma clang diagnostic pop
if (self.config.displayMode == SDLLockScreenConfigurationDisplayModeOptionalOrRequired && self.canPresent && !self.lockScreenDismissedByUser) {
[self.presenter updateLockScreenToShow:YES withCompletionHandler:nil];
} else if (self.config.displayMode != SDLLockScreenConfigurationDisplayModeOptionalOrRequired) {
[self.presenter updateLockScreenToShow:NO withCompletionHandler:nil];
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
} else if ([self.lastLockNotification.lockScreenStatus isEqualToEnum:SDLLockScreenStatusOff]) {
+#pragma clang diagnostic pop
[self.presenter updateLockScreenToShow:NO withCompletionHandler:nil];
}
}
@@ -236,7 +251,7 @@ NS_ASSUME_NONNULL_BEGIN
}
__weak typeof(self) weakSelf = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
__strong typeof(self) strongSelf = weakSelf;
SDLLockScreenViewController *lockscreenViewController = (SDLLockScreenViewController *)strongSelf.lockScreenViewController;
if (enabled) {
@@ -249,17 +264,7 @@ NS_ASSUME_NONNULL_BEGIN
[lockscreenViewController removeDismissGesture];
lockscreenViewController.lockedLabelText = nil;
}
- }];
-}
-
-#pragma mark - Threading Utilities
-
-- (void)sdl_runOnMainQueue:(void (^)(void))block {
- if ([NSThread isMainThread]) {
- block();
- } else {
- dispatch_sync(dispatch_get_main_queue(), block);
- }
+ });
}
@end
diff --git a/SmartDeviceLink/SDLLockScreenPresenter.m b/SmartDeviceLink/SDLLockScreenPresenter.m
index 05fae4d6c..03bca9e0a 100644
--- a/SmartDeviceLink/SDLLockScreenPresenter.m
+++ b/SmartDeviceLink/SDLLockScreenPresenter.m
@@ -110,7 +110,7 @@ NS_ASSUME_NONNULL_BEGIN
}
__weak typeof(self) weakself = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
__typeof(weakself) strongself = weakself;
if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) {
// If the the `UIWindow` is created while the app is backgrounded and the app is using `SceneDelegate` class (iOS 13+), then the window will not be created correctly. Wait until the app is foregrounded before creating the window.
@@ -146,7 +146,7 @@ NS_ASSUME_NONNULL_BEGIN
if (completionHandler == nil) { return; }
return completionHandler();
}];
- }];
+ });
}
@@ -162,14 +162,14 @@ NS_ASSUME_NONNULL_BEGIN
}
__weak typeof(self) weakSelf = self;
- [self sdl_runOnMainQueue:^{
+ dispatch_async(dispatch_get_main_queue(), ^{
if (UIApplication.sharedApplication.applicationState != UIApplicationStateActive) {
SDLLogV(@"Application is backgrounded. The lockscreen will not be dismissed until the app is brought to the foreground.");
if (completionHandler == nil) { return; }
return completionHandler(NO);
}
[weakSelf sdl_dismissLockscreenWithCompletionHandler:completionHandler];
- }];
+ });
}
/// Handles the dismissal of the lockscreen with animation.
@@ -208,16 +208,6 @@ NS_ASSUME_NONNULL_BEGIN
}];
}
-#pragma mark - Threading Utilities
-
-- (void)sdl_runOnMainQueue:(void (^)(void))block {
- if ([NSThread isMainThread]) {
- block();
- } else {
- dispatch_sync(dispatch_get_main_queue(), block);
- }
-}
-
#pragma mark - Custom Presented / Dismissed Getters
/// Returns whether or not the lockViewController is currently presented or currently animating the presentation of the lockscreen
diff --git a/SmartDeviceLink/SDLLockScreenStatus.h b/SmartDeviceLink/SDLLockScreenStatus.h
index 62f48ba05..d5d4846b9 100644
--- a/SmartDeviceLink/SDLLockScreenStatus.h
+++ b/SmartDeviceLink/SDLLockScreenStatus.h
@@ -11,19 +11,19 @@
Used in OnLockScreenStatus
*/
-typedef SDLEnum SDLLockScreenStatus SDL_SWIFT_ENUM;
+typedef SDLEnum SDLLockScreenStatus SDL_SWIFT_ENUM __deprecated;
/**
* LockScreen is Not Required
*/
-extern SDLLockScreenStatus const SDLLockScreenStatusOff;
+extern SDLLockScreenStatus const SDLLockScreenStatusOff __deprecated;
/**
* LockScreen is Optional
*/
-extern SDLLockScreenStatus const SDLLockScreenStatusOptional;
+extern SDLLockScreenStatus const SDLLockScreenStatusOptional __deprecated;
/**
* LockScreen is Required
*/
-extern SDLLockScreenStatus const SDLLockScreenStatusRequired;
+extern SDLLockScreenStatus const SDLLockScreenStatusRequired __deprecated;
diff --git a/SmartDeviceLink/SDLLockScreenStatusManager.h b/SmartDeviceLink/SDLLockScreenStatusManager.h
index 90b3d85a3..4230f6d2a 100644
--- a/SmartDeviceLink/SDLLockScreenStatusManager.h
+++ b/SmartDeviceLink/SDLLockScreenStatusManager.h
@@ -8,6 +8,7 @@
#import "SDLHMILevel.h"
#import "SDLLockScreenStatus.h"
+@class SDLNotificationDispatcher;
@class SDLOnLockScreenStatus;
NS_ASSUME_NONNULL_BEGIN
@@ -17,12 +18,15 @@ NS_ASSUME_NONNULL_BEGIN
@property (assign, nonatomic) BOOL userSelected;
@property (assign, nonatomic) BOOL driverDistracted;
@property (nullable, strong, nonatomic) SDLHMILevel hmiLevel;
-@property (strong, nonatomic, readonly) SDLLockScreenStatus lockScreenStatus;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@property (strong, nonatomic, readonly) SDLLockScreenStatus lockScreenStatus;
@property (strong, nonatomic, readonly) SDLOnLockScreenStatus *lockScreenStatusNotification;
#pragma clang diagnostic pop
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithNotificationDispatcher:(SDLNotificationDispatcher *)dispatcher;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLockScreenStatusManager.m b/SmartDeviceLink/SDLLockScreenStatusManager.m
index 4ab22faa4..e661abd80 100644
--- a/SmartDeviceLink/SDLLockScreenStatusManager.m
+++ b/SmartDeviceLink/SDLLockScreenStatusManager.m
@@ -6,7 +6,13 @@
#import "SDLLockScreenStatusManager.h"
#import "SDLLockScreenStatus.h"
+#import "SDLLogMacros.h"
+#import "SDLNotificationConstants.h"
+#import "SDLNotificationDispatcher.h"
+#import "SDLOnDriverDistraction.h"
+#import "SDLOnHMIStatus.h"
#import "SDLOnLockScreenStatus.h"
+#import "SDLRPCNotificationNotification.h"
NS_ASSUME_NONNULL_BEGIN
@@ -21,13 +27,17 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Lifecycle
-- (instancetype)init {
+- (instancetype)initWithNotificationDispatcher:(SDLNotificationDispatcher *)dispatcher {
self = [super init];
- if (self) {
- _userSelected = NO;
- _driverDistracted = NO;
- _haveDriverDistractionStatus = NO;
- }
+ if (!self) { return nil; }
+
+ _userSelected = NO;
+ _driverDistracted = NO;
+ _haveDriverDistractionStatus = NO;
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusDidUpdate:) name:SDLDidChangeHMIStatusNotification object:dispatcher];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_driverDistractionDidUpdate:) name:SDLDidChangeDriverDistractionStateNotification object:dispatcher];
+
return self;
}
@@ -68,39 +78,92 @@ NS_ASSUME_NONNULL_BEGIN
return notification;
}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (SDLLockScreenStatus)lockScreenStatus {
+#pragma clang diagnostic pop
if (self.hmiLevel == nil || [self.hmiLevel isEqualToEnum:SDLHMILevelNone]) {
// App is not active on the car
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusOff;
+#pragma clang diagnostic pop
} else if ([self.hmiLevel isEqualToEnum:SDLHMILevelBackground]) {
// App is in the background on the car
if (self.userSelected) {
// It was user selected
if (self.haveDriverDistractionStatus && !self.driverDistracted) {
// We have the distraction status, and the driver is not distracted
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusOptional;
+#pragma clang diagnostic pop
} else {
// We don't have the distraction status, and/or the driver is distracted
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusRequired;
+#pragma clang diagnostic pop
}
} else {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusOff;
+#pragma clang diagnostic pop
}
} else if ([self.hmiLevel isEqualToEnum:SDLHMILevelFull] || [self.hmiLevel isEqualToEnum:SDLHMILevelLimited]) {
// App is in the foreground on the car in some manner
if (self.haveDriverDistractionStatus && !self.driverDistracted) {
// We have the distraction status, and the driver is not distracted
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusOptional;
+#pragma clang diagnostic pop
} else {
// We don't have the distraction status, and/or the driver is distracted
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusRequired;
+#pragma clang diagnostic pop
}
} else {
// This shouldn't be possible.
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
return SDLLockScreenStatusOff;
+#pragma clang diagnostic pop
}
}
+#pragma mark - Utilities
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (void)sdl_postLockScreenStatus:(SDLOnLockScreenStatus *)statusNotification {
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:self rpcNotification:statusNotification];
+#pragma clang diagnostic pop
+
+ SDLLogD(@"Lock screen status changed. Sending new notification: %@", notification);
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+}
+
+
+#pragma mark - Observers
+
+- (void)sdl_hmiStatusDidUpdate:(SDLRPCNotificationNotification *)notification {
+ SDLOnHMIStatus *hmiStatus = notification.notification;
+
+ self.hmiLevel = hmiStatus.hmiLevel;
+ [self sdl_postLockScreenStatus:self.lockScreenStatusNotification];
+}
+
+- (void)sdl_driverDistractionDidUpdate:(SDLRPCNotificationNotification *)notification {
+ SDLOnDriverDistraction *driverDistraction = notification.notification;
+
+ self.driverDistracted = [driverDistraction.state isEqualToEnum:SDLDriverDistractionStateOn];
+ [self sdl_postLockScreenStatus:self.lockScreenStatusNotification];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLLogFileModuleMap.m b/SmartDeviceLink/SDLLogFileModuleMap.m
index 9195840e0..3d25be5d9 100644
--- a/SmartDeviceLink/SDLLogFileModuleMap.m
+++ b/SmartDeviceLink/SDLLogFileModuleMap.m
@@ -17,7 +17,6 @@
[self sdl_tcpTransportModule],
[self sdl_iapTransportModule],
[self sdl_secondaryTransportModule],
- [self sdl_proxyModule],
[self sdl_protocolModule],
[self sdl_rpcModule],
[self sdl_dispatcherModule],
@@ -27,10 +26,14 @@
[self sdl_systemCapabilityModule],
[self sdl_lockscreenManagerModule],
[self sdl_streamingMediaManagerModule],
- [self sdl_streamingMediaAudioTranscoderModule],
+ [self sdl_videoStreamingMediaManagerModule],
+ [self sdl_videoStreamingMediaTranscoderModule],
+ [self sdl_audioStreamingMediaManagerModule],
+ [self sdl_audioStreamingMediaTranscoderModule],
[self sdl_screenManagerModule],
[self sdl_screenManagerTextAndGraphicModule],
[self sdl_screenManagerSoftButtonModule],
+ [self sdl_screenManagerSubscribeButtonModule],
[self sdl_screenManagerMenuModule],
[self sdl_screenManagerChoiceSetModule],
[self sdl_utilitiesModule]]];
@@ -51,17 +54,13 @@
}
+ (SDLLogFileModule *)sdl_secondaryTransportModule {
- return [SDLLogFileModule moduleWithName:@"Transport/Secondary" files:[NSSet setWithArray:@[@"SDLSecondaryTransportManager", @"SDLSecondaryTransportPrimaryProtocolHandler"]]];
+ return [SDLLogFileModule moduleWithName:@"Transport/Secondary" files:[NSSet setWithArray:@[@"SDLSecondaryTransportManager"]]];
}
#pragma mark Low-Level
-+ (SDLLogFileModule *)sdl_proxyModule {
- return [SDLLogFileModule moduleWithName:@"Proxy" files:[NSSet setWithArray:@[@"SDLProxy", @"SDLPolicyDataParser"]]];
-}
-
+ (SDLLogFileModule *)sdl_protocolModule {
- return [SDLLogFileModule moduleWithName:@"Protocol" files:[NSSet setWithArray:@[@"SDLProtocol", @"SDLProtocolMessageAssembler", @"SDLProtocolMessageDisassembler", @"SDLProtocolReceivedMessageRouter", @"SDLV1ProtocolMessage", @"SDLV2ProtocolMessage", @"SDLV1ProtocolHeader", @"SDLV2ProtocolHeader"]]];
+ return [SDLLogFileModule moduleWithName:@"Protocol" files:[NSSet setWithArray:@[@"SDLProtocol", @"SDLProtocolMessageAssembler", @"SDLProtocolMessageDisassembler", @"SDLProtocolReceivedMessageRouter", @"SDLV1ProtocolMessage", @"SDLV2ProtocolMessage", @"SDLV1ProtocolHeader", @"SDLV2ProtocolHeader", @"SDLGlobals"]]];
}
+ (SDLLogFileModule *)sdl_rpcModule {
@@ -83,7 +82,7 @@
}
+ (SDLLogFileModule *)sdl_lifecycleManagerModule {
- return [SDLLogFileModule moduleWithName:@"Lifecycle" files:[NSSet setWithArray:@[@"SDLLifecycleManager", @"SDLManager", @"SDLAsynchronousOperation", @"SDLBackgroundTaskManager"]]];
+ return [SDLLogFileModule moduleWithName:@"Lifecycle" files:[NSSet setWithArray:@[@"SDLLifecycleManager", @"SDLManager", @"SDLAsynchronousOperation", @"SDLBackgroundTaskManager", @"SDLPolicyDataParser", @"SDLLifecycleProtocolHandler", @"SDLLifecycleRPCAdapter", @"SDLLifecycleSyncPDataHandler", @"SDLLifecycleSystemRequestHandler", @"SDLLifecycleMobileHMIStateHandler"]]];
}
+ (SDLLogFileModule *)sdl_systemCapabilityModule {
@@ -91,15 +90,27 @@
}
+ (SDLLogFileModule *)sdl_lockscreenManagerModule {
- return [SDLLogFileModule moduleWithName:@"Lockscreen" files:[NSSet setWithArray:@[@"SDLLockScreenManager", @"SDLLockScreenViewController", @"SDLLockScreenPresenter"]]];
+ return [SDLLogFileModule moduleWithName:@"Lockscreen" files:[NSSet setWithArray:@[@"SDLLockScreenManager", @"SDLLockScreenViewController", @"SDLLockScreenPresenter", @"SDLCacheFileManager", @"SDLLockScreenStatusManager"]]];
}
+ (SDLLogFileModule *)sdl_streamingMediaManagerModule {
- return [SDLLogFileModule moduleWithName:@"Streaming" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer", @"SDLStreamingMediaManager", @"SDLStreamingAudioLifecycleManager", @"SDLStreamingVideoLifecycleManager", @"SDLTouchManager", @"SDLCarWindow"]]];
+ return [SDLLogFileModule moduleWithName:@"Audio and Video Streaming" files:[NSSet setWithArray:@[@"SDLStreamingMediaManager"]]];
+}
+
++ (SDLLogFileModule *)sdl_videoStreamingMediaManagerModule {
+ return [SDLLogFileModule moduleWithName:@"Video Streaming" files:[NSSet setWithArray:@[@"SDLStreamingVideoLifecycleManager", @"SDLTouchManager", @"SDLCarWindow", @"SDLFocusableItemLocator"]]];
+}
+
++ (SDLLogFileModule *)sdl_videoStreamingMediaTranscoderModule {
+ return [SDLLogFileModule moduleWithName:@"Video Streaming/Transcoding" files:[NSSet setWithArray:@[@"SDLH264VideoEncoder", @"SDLRAWH264Packetizer", @"SDLRTPH264Packetizer"]]];
+}
+
++ (SDLLogFileModule *)sdl_audioStreamingMediaManagerModule {
+ return [SDLLogFileModule moduleWithName:@"Audio Streaming" files:[NSSet setWithArray:@[@"SDLStreamingAudioLifecycleManager"]]];
}
-+ (SDLLogFileModule *)sdl_streamingMediaAudioTranscoderModule {
- return [SDLLogFileModule moduleWithName:@"Streaming/Audio Transcode" files:[NSSet setWithArray:@[@"SDLAudioStreamManager", @"SDLPCMAudioConverter"]]];
++ (SDLLogFileModule *)sdl_audioStreamingMediaTranscoderModule {
+ return [SDLLogFileModule moduleWithName:@"Audio Streaming/Transcoding" files:[NSSet setWithArray:@[@"SDLAudioStreamManager", @"SDLPCMAudioConverter"]]];
}
+ (SDLLogFileModule *)sdl_screenManagerModule {
@@ -114,6 +125,10 @@
return [SDLLogFileModule moduleWithName:@"Screen/SoftButton" files:[NSSet setWithArray:@[@"SDLSoftButtonManager", @"SDLSoftButtonObject", @"SDLSoftButtonState", @"SDLSoftButtonTransitionOperation", @"SDLSoftButtonReplaceOperation"]]];
}
++ (SDLLogFileModule *)sdl_screenManagerSubscribeButtonModule {
+ return [SDLLogFileModule moduleWithName:@"Screen/SubscribeButton" files:[NSSet setWithArray:@[@"SDLSubscribeButtonManager", @"SDLSubscribeButtonObserver"]]];
+}
+
+ (SDLLogFileModule *)sdl_screenManagerMenuModule {
return [SDLLogFileModule moduleWithName:@"Screen/Menu" files:[NSSet setWithArray:@[@"SDLMenuManager", @"SDLVoiceCommandManager"]]];
}
diff --git a/SmartDeviceLink/SDLManager.h b/SmartDeviceLink/SDLManager.h
index 3e73385d3..ec0a45877 100644
--- a/SmartDeviceLink/SDLManager.h
+++ b/SmartDeviceLink/SDLManager.h
@@ -102,15 +102,6 @@ typedef void (^SDLManagerReadyBlock)(BOOL success, NSError *_Nullable error);
*/
@property (copy, nonatomic, readonly) NSArray<__kindof NSOperation *> *pendingRPCTransactions;
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-/**
-* Deprecated internal proxy object. This should only be accessed when the Manager is READY. This property may go to nil at any time.
-* All the other functionality exists on managers in sdl_ios 4.3+.
-*/
-@property (strong, nonatomic, readonly, nullable) SDLProxy *proxy;
-#pragma clang diagnostic pop
-
#pragma mark Lifecycle
diff --git a/SmartDeviceLink/SDLManager.m b/SmartDeviceLink/SDLManager.m
index d835eba71..41fc1c927 100644
--- a/SmartDeviceLink/SDLManager.m
+++ b/SmartDeviceLink/SDLManager.m
@@ -42,7 +42,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Lifecycle
- (instancetype)init {
- return [self initWithConfiguration:[SDLConfiguration configurationWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration]] delegate:nil];
+ return [self initWithConfiguration:[[SDLConfiguration alloc] initWithLifecycle:[SDLLifecycleConfiguration defaultConfigurationWithAppName:@"SDL APP" fullAppId:@"001"] lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] fileManager:[SDLFileManagerConfiguration defaultConfiguration] encryption:nil] delegate:nil];
}
- (instancetype)initWithConfiguration:(SDLConfiguration *)configuration delegate:(nullable id<SDLManagerDelegate>)delegate {
@@ -118,13 +118,6 @@ NS_ASSUME_NONNULL_BEGIN
return self.lifecycleManager.rpcOperationQueue.operations;
}
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-- (nullable SDLProxy *)proxy {
- return self.lifecycleManager.proxy;
-}
-#pragma clang diagnostic pop
-
#pragma mark SDLConnectionManager Protocol
diff --git a/SmartDeviceLink/SDLManagerDelegate.h b/SmartDeviceLink/SDLManagerDelegate.h
index 9cf795e37..f91a5ecb9 100644
--- a/SmartDeviceLink/SDLManagerDelegate.h
+++ b/SmartDeviceLink/SDLManagerDelegate.h
@@ -64,7 +64,16 @@ NS_ASSUME_NONNULL_BEGIN
* @param language The language of the connected head unit the manager is trying to update the configuration.
* @return An object of SDLLifecycleConfigurationUpdate if the head unit language is supported, otherwise nil to indicate that the language is not supported.
*/
-- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language;
+- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language __deprecated_msg("Use managerShouldUpdateLifecycleToLanguage:hmiLanguage");
+
+/**
+ * Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.
+ *
+ * @param language The VR+TTS language of the connected head unit the manager is trying to update the configuration.
+ * @param hmiLanguage The HMI display language of the connected head unit the manager is trying to update the configuration.
+ * @return An object of SDLLifecycleConfigurationUpdate if the head unit language is supported, otherwise nil to indicate that the language is not supported.
+ */
+- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language hmiLanguage:(SDLLanguage)hmiLanguage;
@end
diff --git a/SmartDeviceLink/SDLMenuManager.h b/SmartDeviceLink/SDLMenuManager.h
index 54701313b..a17775131 100644
--- a/SmartDeviceLink/SDLMenuManager.h
+++ b/SmartDeviceLink/SDLMenuManager.h
@@ -30,9 +30,10 @@ typedef void(^SDLMenuUpdateCompletionHandler)(NSError *__nullable error);
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager fileManager:(SDLFileManager *)fileManager systemCapabilityManager:(SDLSystemCapabilityManager *)systemCapabilityManager;
-/**
- * Stops the manager. This method is used internally.
- */
+/// Starts the manager. This method is used internally.
+- (void)start;
+
+/// Stops the manager. This method is used internally.
- (void)stop;
@property (strong, nonatomic) SDLMenuConfiguration *menuConfiguration;
diff --git a/SmartDeviceLink/SDLMenuManager.m b/SmartDeviceLink/SDLMenuManager.m
index 28a70f754..8cef8caef 100644
--- a/SmartDeviceLink/SDLMenuManager.m
+++ b/SmartDeviceLink/SDLMenuManager.m
@@ -38,7 +38,7 @@
#import "SDLShowAppMenu.h"
#import "SDLSystemCapabilityManager.h"
#import "SDLWindowCapability.h"
-#import "SDLWindowCapability+ShowManagerExtensions.h"
+#import "SDLWindowCapability+ScreenManagerExtensions.h"
#import "SDLVersion.h"
#import "SDLVoiceCommand.h"
@@ -65,6 +65,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (assign, nonatomic) BOOL hasQueuedUpdate;
@property (assign, nonatomic) BOOL waitingOnHMIUpdate;
@property (copy, nonatomic) NSArray<SDLMenuCell *> *waitingUpdateMenuCells;
+@property (strong, nonatomic, nullable) SDLWindowCapability *windowCapability;
@property (assign, nonatomic) UInt32 lastMenuId;
@property (copy, nonatomic) NSArray<SDLMenuCell *> *oldMenuCells;
@@ -103,6 +104,10 @@ UInt32 const MenuCellIdMin = 1;
return self;
}
+- (void)start {
+ [self.systemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self selector:@selector(sdl_displayCapabilityDidUpdate:)];
+}
+
- (void)stop {
_lastMenuId = MenuCellIdMin;
_menuCells = @[];
@@ -119,7 +124,7 @@ UInt32 const MenuCellIdMin = 1;
#pragma mark - Setters
- (void)setMenuConfiguration:(SDLMenuConfiguration *)menuConfiguration {
- NSArray<SDLMenuLayout> *layoutsAvailable = self.systemCapabilityManager.defaultMainWindowCapability.menuLayoutsAvailable;
+ NSArray<SDLMenuLayout> *layoutsAvailable = self.windowCapability.menuLayoutsAvailable;
if ([[SDLGlobals sharedGlobals].rpcVersion isLessThanVersion:[SDLVersion versionWithMajor:6 minor:0 patch:0]]) {
SDLLogW(@"Menu configurations is only supported on head units with RPC spec version 6.0.0 or later. Currently connected head unit RPC spec version is %@", [SDLGlobals sharedGlobals].rpcVersion);
@@ -158,6 +163,7 @@ UInt32 const MenuCellIdMin = 1;
if (self.currentHMILevel == nil
|| [self.currentHMILevel isEqualToEnum:SDLHMILevelNone]
|| [self.currentSystemContext isEqualToEnum:SDLSystemContextMenu]) {
+ SDLLogD(@"Waiting for HMI update to send menu cells");
self.waitingOnHMIUpdate = YES;
self.waitingUpdateMenuCells = menuCells;
return;
@@ -466,7 +472,7 @@ UInt32 const MenuCellIdMin = 1;
NSArray<SDLRPCRequest *> *mainMenuCommands = nil;
NSArray<SDLRPCRequest *> *subMenuCommands = nil;
- if ([self sdl_findAllArtworksToBeUploadedFromCells:self.menuCells].count > 0 || ![self.systemCapabilityManager.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameCommandIcon]) {
+ if ([self sdl_findAllArtworksToBeUploadedFromCells:self.menuCells].count > 0 || ![self.windowCapability hasImageFieldOfName:SDLImageFieldNameCommandIcon]) {
// Send artwork-less menu
mainMenuCommands = [self sdl_mainMenuCommandsForCells:updatedMenu withArtwork:NO usingIndexesFrom:menu];
subMenuCommands = [self sdl_subMenuCommandsForCells:updatedMenu withArtwork:NO];
@@ -528,7 +534,7 @@ UInt32 const MenuCellIdMin = 1;
#pragma mark Artworks
- (NSArray<SDLArtwork *> *)sdl_findAllArtworksToBeUploadedFromCells:(NSArray<SDLMenuCell *> *)cells {
- if (![self.systemCapabilityManager.defaultMainWindowCapability hasImageFieldOfName:SDLImageFieldNameCommandIcon]) {
+ if (![self.windowCapability hasImageFieldOfName:SDLImageFieldNameCommandIcon]) {
return @[];
}
@@ -642,7 +648,7 @@ UInt32 const MenuCellIdMin = 1;
params.position = @(position);
command.menuParams = params;
- command.vrCommands = cell.voiceCommands;
+ command.vrCommands = (cell.voiceCommands.count == 0) ? nil : cell.voiceCommands;
command.cmdIcon = (cell.icon && shouldHaveArtwork) ? cell.icon.imageRPC : nil;
command.cmdID = @(cell.cellId);
@@ -659,7 +665,7 @@ UInt32 const MenuCellIdMin = 1;
submenuLayout = self.menuConfiguration.defaultSubmenuLayout;
}
- return [[SDLAddSubMenu alloc] initWithId:cell.cellId menuName:cell.title menuLayout:submenuLayout menuIcon:icon position:(UInt8)position];
+ return [[SDLAddSubMenu alloc] initWithMenuID:cell.cellId menuName:cell.title position:@(position) menuIcon:icon menuLayout:submenuLayout parentID:nil];
}
#pragma mark - Calling handlers
@@ -688,6 +694,11 @@ UInt32 const MenuCellIdMin = 1;
[self sdl_callHandlerForCells:self.menuCells command:onCommand];
}
+- (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability {
+ // We won't use the object in the parameter but the convenience method of the system capability manager
+ self.windowCapability = self.systemCapabilityManager.defaultMainWindowCapability;
+}
+
- (void)sdl_hmiStatusNotification:(SDLRPCNotificationNotification *)notification {
SDLOnHMIStatus *hmiStatus = (SDLOnHMIStatus *)notification.notification;
diff --git a/SmartDeviceLink/SDLMenuParams.m b/SmartDeviceLink/SDLMenuParams.m
index 0fcfbd60e..85cf5880a 100644
--- a/SmartDeviceLink/SDLMenuParams.m
+++ b/SmartDeviceLink/SDLMenuParams.m
@@ -35,11 +35,11 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)setParentID:(nullable NSNumber<SDLInt> *)parentID {
- [self.store sdl_setObject:parentID forName:SDLRPCParameterNameParentId];
+ [self.store sdl_setObject:parentID forName:SDLRPCParameterNameParentID];
}
- (nullable NSNumber<SDLInt> *)parentID {
- return [self.store sdl_objectForName:SDLRPCParameterNameParentId ofClass:NSNumber.class error:nil];
+ return [self.store sdl_objectForName:SDLRPCParameterNameParentID ofClass:NSNumber.class error:nil];
}
- (void)setPosition:(nullable NSNumber<SDLInt> *)position {
diff --git a/SmartDeviceLink/SDLNotificationConstants.h b/SmartDeviceLink/SDLNotificationConstants.h
index 2c3adf827..d99e0724c 100644
--- a/SmartDeviceLink/SDLNotificationConstants.h
+++ b/SmartDeviceLink/SDLNotificationConstants.h
@@ -118,6 +118,15 @@ extern SDLNotificationName const SDLTransportDidConnect;
/// Name for a error during connection notification
extern SDLNotificationName const SDLTransportConnectError;
+/// Name for a disconnection notification
+extern SDLNotificationName const SDLRPCServiceDidDisconnect;
+
+/// Name for a connection notification
+extern SDLNotificationName const SDLRPCServiceDidConnect;
+
+/// Name for a error during connection notification
+extern SDLNotificationName const SDLRPCServiceConnectionDidError;
+
/// Name for a general error notification
extern SDLNotificationName const SDLDidReceiveError;
@@ -130,6 +139,9 @@ extern SDLNotificationName const SDLDidBecomeReady;
/// Name for a notification sent by the user when their CarWindow view has been updated
extern SDLNotificationName const SDLDidUpdateProjectionView;
+/// Name for a LockScreenStatus notification RPC
+extern SDLNotificationName const SDLDidChangeLockScreenStatusNotification __deprecated_msg("This will be replaced in a future version where a fake RPC is not sent");
+
/**
* NSNotification names associated with specific RPC responses.
*/
@@ -187,7 +199,7 @@ extern SDLNotificationName const SDLDidReceiveDiagnosticMessageResponse;
extern SDLNotificationName const SDLDidReceiveDialNumberResponse;
/// Name for an EncodedSyncPData response RPC
-extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse;
+extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse __deprecated;
/// Name for an EndAudioPassThru response RPC
extern SDLNotificationName const SDLDidReceiveEndAudioPassThruResponse;
@@ -304,7 +316,10 @@ extern SDLNotificationName const SDLDidReceiveSubscribeVehicleDataResponse;
extern SDLNotificationName const SDLDidReceiveSubscribeWaypointsResponse;
/// Name for a SyncPData response RPC
-extern SDLNotificationName const SDLDidReceiveSyncPDataResponse;
+extern SDLNotificationName const SDLDidReceiveSyncPDataResponse __deprecated;
+
+/// Name for a SystemRequest response RPC
+extern SDLNotificationName const SDLDidReceiveSystemRequestResponse;
/// Name for an UpdateTurnList response RPC
extern SDLNotificationName const SDLDidReceiveUpdateTurnListResponse;
@@ -381,7 +396,7 @@ extern SDLNotificationName const SDLDidReceiveDiagnosticMessageRequest;
extern SDLNotificationName const SDLDidReceiveDialNumberRequest;
/// Name for an EncodedSyncPData request RPC
-extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest;
+extern SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest __deprecated;
/// Name for a EndAudioPass request RPC
extern SDLNotificationName const SDLDidReceiveEndAudioPassThruRequest;
@@ -495,7 +510,7 @@ extern SDLNotificationName const SDLDidReceiveSubscribeVehicleDataRequest;
extern SDLNotificationName const SDLDidReceiveSubscribeWayPointsRequest;
/// Name for a SyncPData request RPC
-extern SDLNotificationName const SDLDidReceiveSyncPDataRequest;
+extern SDLNotificationName const SDLDidReceiveSyncPDataRequest __deprecated;
/// Name for a SystemRequest request RPC
extern SDLNotificationName const SDLDidReceiveSystemRequestRequest;
@@ -547,8 +562,8 @@ extern SDLNotificationName const SDLDidReceiveButtonPressNotification;
/// Name for a Command notification RPC
extern SDLNotificationName const SDLDidReceiveCommandNotification;
-/// Name for a EncodedData notification RPC
-extern SDLNotificationName const SDLDidReceiveEncodedDataNotification;
+/// Name for a EncodedSyncPData notification RPC
+extern SDLNotificationName const SDLDidReceiveEncodedDataNotification __deprecated;
/// Name for a InteriorVehicleData notification RPC
extern SDLNotificationName const SDLDidReceiveInteriorVehicleDataNotification;
@@ -559,9 +574,6 @@ extern SDLNotificationName const SDLDidReceiveKeyboardInputNotification;
/// Name for a Language notification RPC
extern SDLNotificationName const SDLDidChangeLanguageNotification;
-/// Name for a LockScreenStatus notification RPC
-extern SDLNotificationName const SDLDidChangeLockScreenStatusNotification;
-
/// Name for a NewHash notification RPC
extern SDLNotificationName const SDLDidReceiveNewHashNotification;
@@ -574,6 +586,9 @@ extern SDLNotificationName const SDLDidChangePermissionsNotification;
/// Name for a RemoteControlStatus notification RPC
extern SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification;
+/// Name for an OnSyncPData notification RPC
+extern SDLNotificationName const SDLDidReceiveSyncPDataNotification __deprecated;
+
/// Name for a SystemCapability notification RPC
extern SDLNotificationName const SDLDidReceiveSystemCapabilityUpdatedNotification;
diff --git a/SmartDeviceLink/SDLNotificationConstants.m b/SmartDeviceLink/SDLNotificationConstants.m
index 73d935c57..d4cb7c9bc 100644
--- a/SmartDeviceLink/SDLNotificationConstants.m
+++ b/SmartDeviceLink/SDLNotificationConstants.m
@@ -17,165 +17,170 @@ SDLNotificationUserInfoKey const SDLNotificationUserInfoObject = @"SDLNotificati
SDLNotificationName const SDLTransportDidDisconnect = @"com.sdl.transport.disconnect";
SDLNotificationName const SDLTransportDidConnect = @"com.sdl.transport.connect";
SDLNotificationName const SDLTransportConnectError = @"com.sdl.transport.connectError";
+SDLNotificationName const SDLRPCServiceDidDisconnect = @"com.sdl.rpcService.disconnect";
+SDLNotificationName const SDLRPCServiceDidConnect = @"com.sdl.rpcService.connect";
+SDLNotificationName const SDLRPCServiceConnectionDidError = @"com.sdl.rpcService.connectError";
SDLNotificationName const SDLDidReceiveError = @"com.sdl.general.error";
SDLNotificationName const SDLDidReceiveLockScreenIcon = @"com.sdl.general.lockscreenIconReceived";
SDLNotificationName const SDLDidBecomeReady = @"com.sdl.notification.managerReady";
SDLNotificationName const SDLDidReceiveVehicleIconNotification = @"com.sdl.notification.vehicleIcon";
SDLNotificationName const SDLDidUpdateProjectionView = @"com.sdl.notification.projectionViewUpdate";
+SDLNotificationName const SDLDidChangeLockScreenStatusNotification = @"com.sdl.notification.lockScreenStatus";
#pragma mark - RPC Responses
-SDLNotificationName const SDLDidReceiveAddCommandResponse = @"com.sdl.response.addCommand";
-SDLNotificationName const SDLDidReceiveAddSubMenuResponse = @"com.sdl.response.addSubMenu";
-SDLNotificationName const SDLDidReceiveAlertResponse = @"com.sdl.response.alert";
-SDLNotificationName const SDLDidReceiveAlertManeuverResponse = @"com.sdl.response.alertManeuver";
-SDLNotificationName const SDLDidReceiveButtonPressResponse = @"com.sdl.response.buttonPress";
-SDLNotificationName const SDLDidReceiveCancelInteractionResponse = @"com.sdl.response.cancelInteraction";
-SDLNotificationName const SDLDidReceiveChangeRegistrationResponse = @"com.sdl.response.changeRegistration";
-SDLNotificationName const SDLDidReceiveCloseApplicationResponse = @"com.sdl.response.closeApplication";
-SDLNotificationName const SDLDidReceiveCreateInteractionChoiceSetResponse = @"com.sdl.response.createInteractionChoiceSet";
-SDLNotificationName const SDLDidReceiveCreateWindowResponse = @"com.sdl.response.createWindow";
-SDLNotificationName const SDLDidReceiveDeleteCommandResponse = @"com.sdl.response.deleteCommand";
-SDLNotificationName const SDLDidReceiveDeleteFileResponse = @"com.sdl.response.deleteFile";
-SDLNotificationName const SDLDidReceiveDeleteInteractionChoiceSetResponse = @"com.sdl.response.deleteInteractionChoiceSet";
-SDLNotificationName const SDLDidReceiveDeleteSubmenuResponse = @"com.sdl.response.deleteSubmenu";
-SDLNotificationName const SDLDidReceiveDeleteWindowResponse = @"com.sdl.response.deleteWindow";
-SDLNotificationName const SDLDidReceiveDiagnosticMessageResponse = @"com.sdl.response.diagnosticMessage";
-SDLNotificationName const SDLDidReceiveDialNumberResponse = @"com.sdl.response.dialNumber";
-SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse = @"com.sdl.response.encodedSyncPData";
-SDLNotificationName const SDLDidReceiveEndAudioPassThruResponse = @"com.sdl.response.endAudioPassThru";
-SDLNotificationName const SDLDidReceiveGenericResponse = @"com.sdl.response.generic";
-SDLNotificationName const SDLDidReceiveGetCloudAppPropertiesResponse = @"com.sdl.response.getCloudAppProperties";
-SDLNotificationName const SDLDidReceiveGetAppServiceDataResponse = @"com.sdl.response.getAppServiceData";
-SDLNotificationName const SDLDidReceiveGetDTCsResponse = @"com.sdl.response.getDTCs";
-SDLNotificationName const SDLDidReceiveGetFileResponse = @"com.sdl.response.getFile";
-SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataResponse = @"com.sdl.response.getInteriorVehicleData";
-SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataConsentResponse = @"com.sdl.response.getInteriorVehicleDataConsent";
-SDLNotificationName const SDLDidReceiveGetSystemCapabilitiesResponse = @"com.sdl.response.getSystemCapabilities";
-SDLNotificationName const SDLDidReceiveGetVehicleDataResponse = @"com.sdl.response.getVehicleData";
-SDLNotificationName const SDLDidReceiveGetWaypointsResponse = @"com.sdl.response.getWaypoints";
-SDLNotificationName const SDLDidReceiveListFilesResponse = @"com.sdl.response.listFiles";
-SDLNotificationName const SDLDidReceivePerformAppServiceInteractionResponse = @"com.sdl.response.performAppServiceInteraction";
-SDLNotificationName const SDLDidReceivePerformAudioPassThruResponse = @"com.sdl.response.performAudioPassThru";
-SDLNotificationName const SDLDidReceivePerformInteractionResponse = @"com.sdl.response.performInteraction";
-SDLNotificationName const SDLDidReceivePublishAppServiceResponse = @"com.sdl.response.publishAppService";
-SDLNotificationName const SDLDidReceivePutFileResponse = @"com.sdl.response.putFile";
-SDLNotificationName const SDLDidReceiveReadDIDResponse = @"com.sdl.response.readDID";
-SDLNotificationName const SDLDidReceiveRegisterAppInterfaceResponse = @"com.sdl.response.registerAppInterface";
-SDLNotificationName const SDLDidReceiveReleaseInteriorVehicleDataModuleResponse = @"com.sdl.response.releaseInteriorVehicleDataModule";
-SDLNotificationName const SDLDidReceiveResetGlobalPropertiesResponse = @"com.sdl.response.resetGlobalProperties";
-SDLNotificationName const SDLDidReceiveScrollableMessageResponse = @"com.sdl.response.scrollableMessage";
-SDLNotificationName const SDLDidReceiveSendHapticDataResponse = @"com.sdl.response.sendHapticData";
-SDLNotificationName const SDLDidReceiveSendLocationResponse = @"com.sdl.response.sendLocation";
-SDLNotificationName const SDLDidReceiveSetAppIconResponse = @"com.sdl.response.setAppIcon";
-SDLNotificationName const SDLDidReceiveSetCloudAppPropertiesResponse = @"com.sdl.response.setCloudAppProperties";
-SDLNotificationName const SDLDidReceiveSetDisplayLayoutResponse = @"com.sdl.response.setDisplayLayout";
-SDLNotificationName const SDLDidReceiveSetGlobalPropertiesResponse = @"com.sdl.response.setGlobalProperties";
-SDLNotificationName const SDLDidReceiveSetInteriorVehicleDataResponse = @"com.sdl.response.setInteriorVehicleData";
-SDLNotificationName const SDLDidReceiveSetMediaClockTimerResponse = @"com.sdl.response.setMediaClockTimer";
-SDLNotificationName const SDLDidReceiveShowConstantTBTResponse = @"com.sdl.response.showConstantTBT";
-SDLNotificationName const SDLDidReceiveShowResponse = @"com.sdl.response.show";
-SDLNotificationName const SDLDidReceiveShowAppMenuResponse = @"com.sdl.response.showAppMenu";
-SDLNotificationName const SDLDidReceiveSliderResponse = @"com.sdl.response.slider";
-SDLNotificationName const SDLDidReceiveSpeakResponse = @"com.sdl.response.speak";
-SDLNotificationName const SDLDidReceiveSubscribeButtonResponse = @"com.sdl.response.subscribeButton";
-SDLNotificationName const SDLDidReceiveSubscribeVehicleDataResponse = @"com.sdl.response.subscribeVehicleData";
-SDLNotificationName const SDLDidReceiveSubscribeWaypointsResponse = @"com.sdl.response.subscribeWaypoints";
-SDLNotificationName const SDLDidReceiveSyncPDataResponse = @"com.sdl.response.syncPData";
-SDLNotificationName const SDLDidReceiveUpdateTurnListResponse = @"com.sdl.response.updateTurnList";
-SDLNotificationName const SDLDidReceiveUnpublishAppServiceResponse = @"com.sdl.response.unpublishAppService";
-SDLNotificationName const SDLDidReceiveUnregisterAppInterfaceResponse = @"com.sdl.response.unregisterAppInterface";
-SDLNotificationName const SDLDidReceiveUnsubscribeButtonResponse = @"com.sdl.response.unsubscribeButton";
-SDLNotificationName const SDLDidReceiveUnsubscribeVehicleDataResponse = @"com.sdl.response.unsubscribeVehicleData";
-SDLNotificationName const SDLDidReceiveUnsubscribeWaypointsResponse = @"com.sdl.response.unsubscribeWaypoints";
+SDLNotificationName const SDLDidReceiveAddCommandResponse = @"com.sdl.response.AddCommand";
+SDLNotificationName const SDLDidReceiveAddSubMenuResponse = @"com.sdl.response.AddSubMenu";
+SDLNotificationName const SDLDidReceiveAlertResponse = @"com.sdl.response.Alert";
+SDLNotificationName const SDLDidReceiveAlertManeuverResponse = @"com.sdl.response.AlertManeuver";
+SDLNotificationName const SDLDidReceiveButtonPressResponse = @"com.sdl.response.ButtonPress";
+SDLNotificationName const SDLDidReceiveCancelInteractionResponse = @"com.sdl.response.CancelInteraction";
+SDLNotificationName const SDLDidReceiveChangeRegistrationResponse = @"com.sdl.response.ChangeRegistration";
+SDLNotificationName const SDLDidReceiveCloseApplicationResponse = @"com.sdl.response.CloseApplication";
+SDLNotificationName const SDLDidReceiveCreateInteractionChoiceSetResponse = @"com.sdl.response.CreateInteractionChoiceSet";
+SDLNotificationName const SDLDidReceiveCreateWindowResponse = @"com.sdl.response.CreateWindow";
+SDLNotificationName const SDLDidReceiveDeleteCommandResponse = @"com.sdl.response.DeleteCommand";
+SDLNotificationName const SDLDidReceiveDeleteFileResponse = @"com.sdl.response.DeleteFile";
+SDLNotificationName const SDLDidReceiveDeleteInteractionChoiceSetResponse = @"com.sdl.response.DeleteInteractionChoiceSet";
+SDLNotificationName const SDLDidReceiveDeleteSubmenuResponse = @"com.sdl.response.DeleteSubMenu";
+SDLNotificationName const SDLDidReceiveDeleteWindowResponse = @"com.sdl.response.DeleteWindow";
+SDLNotificationName const SDLDidReceiveDiagnosticMessageResponse = @"com.sdl.response.DiagnosticMessage";
+SDLNotificationName const SDLDidReceiveDialNumberResponse = @"com.sdl.response.DialNumber";
+SDLNotificationName const SDLDidReceiveEncodedSyncPDataResponse = @"com.sdl.response.EncodedSyncPData";
+SDLNotificationName const SDLDidReceiveEndAudioPassThruResponse = @"com.sdl.response.EndAudioPassThru";
+SDLNotificationName const SDLDidReceiveGenericResponse = @"com.sdl.response.GenericResponse";
+SDLNotificationName const SDLDidReceiveGetCloudAppPropertiesResponse = @"com.sdl.response.GetCloudAppProperties";
+SDLNotificationName const SDLDidReceiveGetAppServiceDataResponse = @"com.sdl.response.GetAppServiceData";
+SDLNotificationName const SDLDidReceiveGetDTCsResponse = @"com.sdl.response.GetDTCs";
+SDLNotificationName const SDLDidReceiveGetFileResponse = @"com.sdl.response.GetFile";
+SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataResponse = @"com.sdl.response.GetInteriorVehicleData";
+SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataConsentResponse = @"com.sdl.response.GetInteriorVehicleDataConsent";
+SDLNotificationName const SDLDidReceiveGetSystemCapabilitiesResponse = @"com.sdl.response.GetSystemCapability";
+SDLNotificationName const SDLDidReceiveGetVehicleDataResponse = @"com.sdl.response.GetVehicleData";
+SDLNotificationName const SDLDidReceiveGetWaypointsResponse = @"com.sdl.response.GetWayPoints";
+SDLNotificationName const SDLDidReceiveListFilesResponse = @"com.sdl.response.ListFiles";
+SDLNotificationName const SDLDidReceivePerformAppServiceInteractionResponse = @"com.sdl.response.PerformAppServiceInteraction";
+SDLNotificationName const SDLDidReceivePerformAudioPassThruResponse = @"com.sdl.response.PerformAudioPassThru";
+SDLNotificationName const SDLDidReceivePerformInteractionResponse = @"com.sdl.response.PerformInteraction";
+SDLNotificationName const SDLDidReceivePublishAppServiceResponse = @"com.sdl.response.PublishAppService";
+SDLNotificationName const SDLDidReceivePutFileResponse = @"com.sdl.response.PutFile";
+SDLNotificationName const SDLDidReceiveReadDIDResponse = @"com.sdl.response.ReadDID";
+SDLNotificationName const SDLDidReceiveRegisterAppInterfaceResponse = @"com.sdl.response.RegisterAppInterface";
+SDLNotificationName const SDLDidReceiveReleaseInteriorVehicleDataModuleResponse = @"com.sdl.response.ReleaseInteriorVehicleDataModule";
+SDLNotificationName const SDLDidReceiveResetGlobalPropertiesResponse = @"com.sdl.response.ResetGlobalProperties";
+SDLNotificationName const SDLDidReceiveScrollableMessageResponse = @"com.sdl.response.ScrollableMessage";
+SDLNotificationName const SDLDidReceiveSendHapticDataResponse = @"com.sdl.response.SendHapticData";
+SDLNotificationName const SDLDidReceiveSendLocationResponse = @"com.sdl.response.SendLocation";
+SDLNotificationName const SDLDidReceiveSetAppIconResponse = @"com.sdl.response.SetAppIcon";
+SDLNotificationName const SDLDidReceiveSetCloudAppPropertiesResponse = @"com.sdl.response.SetCloudAppProperties";
+SDLNotificationName const SDLDidReceiveSetDisplayLayoutResponse = @"com.sdl.response.SetDisplayLayout";
+SDLNotificationName const SDLDidReceiveSetGlobalPropertiesResponse = @"com.sdl.response.SetGlobalProperties";
+SDLNotificationName const SDLDidReceiveSetInteriorVehicleDataResponse = @"com.sdl.response.SetInteriorVehicleData";
+SDLNotificationName const SDLDidReceiveSetMediaClockTimerResponse = @"com.sdl.response.SetMediaClockTimer";
+SDLNotificationName const SDLDidReceiveShowConstantTBTResponse = @"com.sdl.response.ShowConstantTBT";
+SDLNotificationName const SDLDidReceiveShowResponse = @"com.sdl.response.Show";
+SDLNotificationName const SDLDidReceiveShowAppMenuResponse = @"com.sdl.response.ShowAppMenu";
+SDLNotificationName const SDLDidReceiveSliderResponse = @"com.sdl.response.Slider";
+SDLNotificationName const SDLDidReceiveSpeakResponse = @"com.sdl.response.Speak";
+SDLNotificationName const SDLDidReceiveSubscribeButtonResponse = @"com.sdl.response.SubscribeButton";
+SDLNotificationName const SDLDidReceiveSubscribeVehicleDataResponse = @"com.sdl.response.SubscribeVehicleData";
+SDLNotificationName const SDLDidReceiveSubscribeWaypointsResponse = @"com.sdl.response.SubscribeWayPoints";
+SDLNotificationName const SDLDidReceiveSyncPDataResponse = @"com.sdl.response.SyncPData";
+SDLNotificationName const SDLDidReceiveSystemRequestResponse = @"com.sdl.response.SystemRequest";
+SDLNotificationName const SDLDidReceiveUpdateTurnListResponse = @"com.sdl.response.UpdateTurnList";
+SDLNotificationName const SDLDidReceiveUnpublishAppServiceResponse = @"com.sdl.response.UnpublishAppService";
+SDLNotificationName const SDLDidReceiveUnregisterAppInterfaceResponse = @"com.sdl.response.UnregisterAppInterface";
+SDLNotificationName const SDLDidReceiveUnsubscribeButtonResponse = @"com.sdl.response.UnsubscribeButton";
+SDLNotificationName const SDLDidReceiveUnsubscribeVehicleDataResponse = @"com.sdl.response.UnsubscribeVehicleData";
+SDLNotificationName const SDLDidReceiveUnsubscribeWaypointsResponse = @"com.sdl.response.UnsubscribeWayPoints";
#pragma mark - RPC Requests
-SDLNotificationName const SDLDidReceiveAddCommandRequest = @"com.sdl.request.addCommand";
-SDLNotificationName const SDLDidReceiveAddSubMenuRequest = @"com.sdl.request.addSubMenu";
-SDLNotificationName const SDLDidReceiveAlertRequest = @"com.sdl.request.alert";
-SDLNotificationName const SDLDidReceiveAlertManeuverRequest = @"com.sdl.request.alertManeuver";
-SDLNotificationName const SDLDidReceiveButtonPressRequest = @"com.sdl.request.buttonPress";
-SDLNotificationName const SDLDidReceiveCancelInteractionRequest = @"com.sdl.request.cancelInteraction";
-SDLNotificationName const SDLDidReceiveChangeRegistrationRequest = @"com.sdl.request.changeRegistration";
-SDLNotificationName const SDLDidReceiveCloseApplicationRequest = @"com.sdl.request.closeApplication";
-SDLNotificationName const SDLDidReceiveCreateWindowRequest = @"com.sdl.request.createWindow";
-SDLNotificationName const SDLDidReceiveCreateInteractionChoiceSetRequest = @"com.sdl.request.createInteractionChoiceSet";
-SDLNotificationName const SDLDidReceiveDeleteCommandRequest = @"com.sdl.request.deleteCommand";
-SDLNotificationName const SDLDidReceiveDeleteFileRequest = @"com.sdl.request.deleteFile";
-SDLNotificationName const SDLDidReceiveDeleteInteractionChoiceSetRequest = @"com.sdl.request.deleteInteractionChoiceSet";
-SDLNotificationName const SDLDidReceiveDeleteSubMenuRequest = @"com.sdl.request.deleteSubMenu";
-SDLNotificationName const SDLDidReceiveDeleteWindowRequest = @"com.sdl.request.deleteWindow";
-SDLNotificationName const SDLDidReceiveDiagnosticMessageRequest = @"com.sdl.request.diagnosticMessage";
-SDLNotificationName const SDLDidReceiveDialNumberRequest = @"com.sdl.request.dialNumber";
-SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest = @"com.sdl.request.encodedSyncPData";
-SDLNotificationName const SDLDidReceiveEndAudioPassThruRequest = @"com.sdl.request.endAudioPassThru";
-SDLNotificationName const SDLDidReceiveGetAppServiceDataRequest = @"com.sdl.request.getAppServiceData";
-SDLNotificationName const SDLDidReceiveGetCloudAppPropertiesRequest = @"com.sdl.request.getCloudAppProperties";
-SDLNotificationName const SDLDidReceiveGetDTCsRequest = @"com.sdl.request.getDTCs";
-SDLNotificationName const SDLDidReceiveGetFileRequest = @"com.sdl.request.getFile";
-SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataRequest = @"com.sdl.request.getInteriorVehicleData";
-SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataConsentRequest = @"com.sdl.request.getInteriorVehicleDataConsent";
-SDLNotificationName const SDLDidReceiveGetSystemCapabilityRequest = @"com.sdl.request.getSystemCapability";
-SDLNotificationName const SDLDidReceiveGetVehicleDataRequest = @"com.sdl.request.getVehicleData";
-SDLNotificationName const SDLDidReceiveGetWayPointsRequest = @"com.sdl.request.getWayPoints";
-SDLNotificationName const SDLDidReceiveListFilesRequest = @"com.sdl.request.listFiles";
-SDLNotificationName const SDLDidReceivePerformAppServiceInteractionRequest = @"com.sdl.request.performAppServiceInteraction";
-SDLNotificationName const SDLDidReceivePerformAudioPassThruRequest = @"com.sdl.request.performAudioPassThru";
-SDLNotificationName const SDLDidReceivePerformInteractionRequest = @"com.sdl.request.performInteraction";
-SDLNotificationName const SDLDidReceivePublishAppServiceRequest = @"com.sdl.request.publishAppService";
-SDLNotificationName const SDLDidReceivePutFileRequest = @"com.sdl.request.putFile";
-SDLNotificationName const SDLDidReceiveReadDIDRequest = @"com.sdl.request.readDID";
-SDLNotificationName const SDLDidReceiveRegisterAppInterfaceRequest = @"com.sdl.request.registerAppInterface";
-SDLNotificationName const SDLDidReceiveReleaseInteriorVehicleDataModuleRequest = @"com.sdl.request.releaseInteriorVehicleDataModule";
-SDLNotificationName const SDLDidReceiveResetGlobalPropertiesRequest = @"com.sdl.request.resetGlobalProperties";
-SDLNotificationName const SDLDidReceiveScrollableMessageRequest = @"com.sdl.request.scrollableMessage";
-SDLNotificationName const SDLDidReceiveSendHapticDataRequest = @"com.sdl.request.sendHapticData";
-SDLNotificationName const SDLDidReceiveSendLocationRequest = @"com.sdl.request.sendLocation";
-SDLNotificationName const SDLDidReceiveSetAppIconRequest = @"com.sdl.request.setAppIcon";
-SDLNotificationName const SDLDidReceiveSetCloudAppPropertiesRequest = @"com.sdl.request.setCloudAppProperties";
-SDLNotificationName const SDLDidReceiveSetDisplayLayoutRequest = @"com.sdl.request.setDisplayLayout";
-SDLNotificationName const SDLDidReceiveSetGlobalPropertiesRequest = @"com.sdl.request.setGlobalProperties";
-SDLNotificationName const SDLDidReceiveSetInteriorVehicleDataRequest = @"com.sdl.request.setInteriorVehicleData";
-SDLNotificationName const SDLDidReceiveSetMediaClockTimerRequest = @"com.sdl.request.setMediaClockTimer";
-SDLNotificationName const SDLDidReceiveShowRequest = @"com.sdl.request.show";
-SDLNotificationName const SDLDidReceiveShowAppMenuRequest = @"com.sdl.request.showAppMenu";
-SDLNotificationName const SDLDidReceiveShowConstantTBTRequest = @"com.sdl.request.showConstantTBT";
-SDLNotificationName const SDLDidReceiveSliderRequest = @"com.sdl.request.slider";
-SDLNotificationName const SDLDidReceiveSpeakRequest = @"com.sdl.request.speak";
-SDLNotificationName const SDLDidReceiveSubscribeButtonRequest = @"com.sdl.request.subscribeButton";
-SDLNotificationName const SDLDidReceiveSubscribeVehicleDataRequest = @"com.sdl.request.subscribeVehicleData";
-SDLNotificationName const SDLDidReceiveSubscribeWayPointsRequest = @"com.sdl.request.subscribeWayPoints";
-SDLNotificationName const SDLDidReceiveSyncPDataRequest = @"com.sdl.request.syncPData";
-SDLNotificationName const SDLDidReceiveSystemRequestRequest = @"com.sdl.request.systemRequest";
-SDLNotificationName const SDLDidReceiveUnpublishAppServiceRequest = @"com.sdl.request.unpublishAppService";
-SDLNotificationName const SDLDidReceiveUnregisterAppInterfaceRequest = @"com.sdl.request.unregisterAppInterface";
-SDLNotificationName const SDLDidReceiveUnsubscribeButtonRequest = @"com.sdl.request.unsubscribeButton";
-SDLNotificationName const SDLDidReceiveUnsubscribeVehicleDataRequest = @"com.sdl.request.unsubscribeVehicleData";
-SDLNotificationName const SDLDidReceiveUnsubscribeWayPointsRequest = @"com.sdl.request.unsubscribeWayPoints";
-SDLNotificationName const SDLDidReceiveUpdateTurnListRequest = @"com.sdl.request.updateTurnList";
+SDLNotificationName const SDLDidReceiveAddCommandRequest = @"com.sdl.request.AddCommand";
+SDLNotificationName const SDLDidReceiveAddSubMenuRequest = @"com.sdl.request.AddSubMenu";
+SDLNotificationName const SDLDidReceiveAlertRequest = @"com.sdl.request.Alert";
+SDLNotificationName const SDLDidReceiveAlertManeuverRequest = @"com.sdl.request.AlertManeuver";
+SDLNotificationName const SDLDidReceiveButtonPressRequest = @"com.sdl.request.ButtonPress";
+SDLNotificationName const SDLDidReceiveCancelInteractionRequest = @"com.sdl.request.CancelInteraction";
+SDLNotificationName const SDLDidReceiveChangeRegistrationRequest = @"com.sdl.request.ChangeRegistration";
+SDLNotificationName const SDLDidReceiveCloseApplicationRequest = @"com.sdl.request.CloseApplication";
+SDLNotificationName const SDLDidReceiveCreateWindowRequest = @"com.sdl.request.CreateWindow";
+SDLNotificationName const SDLDidReceiveCreateInteractionChoiceSetRequest = @"com.sdl.request.CreateInteractionChoiceSet";
+SDLNotificationName const SDLDidReceiveDeleteCommandRequest = @"com.sdl.request.DeleteCommand";
+SDLNotificationName const SDLDidReceiveDeleteFileRequest = @"com.sdl.request.DeleteFile";
+SDLNotificationName const SDLDidReceiveDeleteInteractionChoiceSetRequest = @"com.sdl.request.DeleteInteractionChoiceSet";
+SDLNotificationName const SDLDidReceiveDeleteSubMenuRequest = @"com.sdl.request.DeleteSubMenu";
+SDLNotificationName const SDLDidReceiveDeleteWindowRequest = @"com.sdl.request.DeleteWindow";
+SDLNotificationName const SDLDidReceiveDiagnosticMessageRequest = @"com.sdl.request.DiagnosticMessage";
+SDLNotificationName const SDLDidReceiveDialNumberRequest = @"com.sdl.request.DialNumber";
+SDLNotificationName const SDLDidReceiveEncodedSyncPDataRequest = @"com.sdl.request.EncodedSyncPData";
+SDLNotificationName const SDLDidReceiveEndAudioPassThruRequest = @"com.sdl.request.EndAudioPassThru";
+SDLNotificationName const SDLDidReceiveGetAppServiceDataRequest = @"com.sdl.request.GetAppServiceData";
+SDLNotificationName const SDLDidReceiveGetCloudAppPropertiesRequest = @"com.sdl.request.GetCloudAppProperties";
+SDLNotificationName const SDLDidReceiveGetDTCsRequest = @"com.sdl.request.GetDTCs";
+SDLNotificationName const SDLDidReceiveGetFileRequest = @"com.sdl.request.GetFile";
+SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataRequest = @"com.sdl.request.GetInteriorVehicleData";
+SDLNotificationName const SDLDidReceiveGetInteriorVehicleDataConsentRequest = @"com.sdl.request.GetInteriorVehicleDataConsent";
+SDLNotificationName const SDLDidReceiveGetSystemCapabilityRequest = @"com.sdl.request.GetSystemCapability";
+SDLNotificationName const SDLDidReceiveGetVehicleDataRequest = @"com.sdl.request.GetVehicleData";
+SDLNotificationName const SDLDidReceiveGetWayPointsRequest = @"com.sdl.request.GetWayPoints";
+SDLNotificationName const SDLDidReceiveListFilesRequest = @"com.sdl.request.ListFiles";
+SDLNotificationName const SDLDidReceivePerformAppServiceInteractionRequest = @"com.sdl.request.PerformAppServiceInteraction";
+SDLNotificationName const SDLDidReceivePerformAudioPassThruRequest = @"com.sdl.request.PerformAudioPassThru";
+SDLNotificationName const SDLDidReceivePerformInteractionRequest = @"com.sdl.request.PerformInteraction";
+SDLNotificationName const SDLDidReceivePublishAppServiceRequest = @"com.sdl.request.PublishAppService";
+SDLNotificationName const SDLDidReceivePutFileRequest = @"com.sdl.request.PutFile";
+SDLNotificationName const SDLDidReceiveReadDIDRequest = @"com.sdl.request.ReadDID";
+SDLNotificationName const SDLDidReceiveRegisterAppInterfaceRequest = @"com.sdl.request.RegisterAppInterface";
+SDLNotificationName const SDLDidReceiveReleaseInteriorVehicleDataModuleRequest = @"com.sdl.request.ReleaseInteriorVehicleDataModule";
+SDLNotificationName const SDLDidReceiveResetGlobalPropertiesRequest = @"com.sdl.request.ResetGlobalProperties";
+SDLNotificationName const SDLDidReceiveScrollableMessageRequest = @"com.sdl.request.ScrollableMessage";
+SDLNotificationName const SDLDidReceiveSendHapticDataRequest = @"com.sdl.request.SendHapticData";
+SDLNotificationName const SDLDidReceiveSendLocationRequest = @"com.sdl.request.SendLocation";
+SDLNotificationName const SDLDidReceiveSetAppIconRequest = @"com.sdl.request.SetAppIcon";
+SDLNotificationName const SDLDidReceiveSetCloudAppPropertiesRequest = @"com.sdl.request.SetCloudAppProperties";
+SDLNotificationName const SDLDidReceiveSetDisplayLayoutRequest = @"com.sdl.request.SetDisplayLayout";
+SDLNotificationName const SDLDidReceiveSetGlobalPropertiesRequest = @"com.sdl.request.SetGlobalProperties";
+SDLNotificationName const SDLDidReceiveSetInteriorVehicleDataRequest = @"com.sdl.request.SetInteriorVehicleData";
+SDLNotificationName const SDLDidReceiveSetMediaClockTimerRequest = @"com.sdl.request.SetMediaClockTimer";
+SDLNotificationName const SDLDidReceiveShowRequest = @"com.sdl.request.Show";
+SDLNotificationName const SDLDidReceiveShowAppMenuRequest = @"com.sdl.request.ShowAppMenu";
+SDLNotificationName const SDLDidReceiveShowConstantTBTRequest = @"com.sdl.request.ShowConstantTBT";
+SDLNotificationName const SDLDidReceiveSliderRequest = @"com.sdl.request.Slider";
+SDLNotificationName const SDLDidReceiveSpeakRequest = @"com.sdl.request.Speak";
+SDLNotificationName const SDLDidReceiveSubscribeButtonRequest = @"com.sdl.request.SubscribeButton";
+SDLNotificationName const SDLDidReceiveSubscribeVehicleDataRequest = @"com.sdl.request.SubscribeVehicleData";
+SDLNotificationName const SDLDidReceiveSubscribeWayPointsRequest = @"com.sdl.request.SubscribeWayPoints";
+SDLNotificationName const SDLDidReceiveSyncPDataRequest = @"com.sdl.request.SyncPData";
+SDLNotificationName const SDLDidReceiveSystemRequestRequest = @"com.sdl.request.SystemRequest";
+SDLNotificationName const SDLDidReceiveUnpublishAppServiceRequest = @"com.sdl.request.UnpublishAppService";
+SDLNotificationName const SDLDidReceiveUnregisterAppInterfaceRequest = @"com.sdl.request.UnregisterAppInterface";
+SDLNotificationName const SDLDidReceiveUnsubscribeButtonRequest = @"com.sdl.request.UnsubscribeButton";
+SDLNotificationName const SDLDidReceiveUnsubscribeVehicleDataRequest = @"com.sdl.request.UnsubscribeVehicleData";
+SDLNotificationName const SDLDidReceiveUnsubscribeWayPointsRequest = @"com.sdl.request.UnsubscribeWayPoints";
+SDLNotificationName const SDLDidReceiveUpdateTurnListRequest = @"com.sdl.request.UpdateTurnList";
#pragma mark - RPC Notifications
-SDLNotificationName const SDLDidChangeDriverDistractionStateNotification = @"com.sdl.notification.changeDriverDistractionStateNotification";
-SDLNotificationName const SDLDidChangeHMIStatusNotification = @"com.sdl.notification.changeHMIStatus";
-SDLNotificationName const SDLDidReceiveAppServiceDataNotification = @"com.sdl.notification.appServiceData";
-SDLNotificationName const SDLDidReceiveAppUnregisteredNotification = @"com.sdl.notification.appUnregistered";
-SDLNotificationName const SDLDidReceiveAudioPassThruNotification = @"com.sdl.notification.audioPassThru";
-SDLNotificationName const SDLDidReceiveButtonEventNotification = @"com.sdl.notification.buttonEvent";
-SDLNotificationName const SDLDidReceiveButtonPressNotification = @"com.sdl.notification.buttonPress";
-SDLNotificationName const SDLDidReceiveCommandNotification = @"com.sdl.notification.command";
-SDLNotificationName const SDLDidReceiveEncodedDataNotification = @"com.sdl.notification.encodedData";
-SDLNotificationName const SDLDidReceiveInteriorVehicleDataNotification = @"com.sdl.notification.interiorVehicleData";
-SDLNotificationName const SDLDidReceiveKeyboardInputNotification = @"com.sdl.notification.keyboardInput";
-SDLNotificationName const SDLDidChangeLanguageNotification = @"com.sdl.notification.changeLanguage";
-SDLNotificationName const SDLDidChangeLockScreenStatusNotification = @"com.sdl.notification.lockScreenStatus";
-SDLNotificationName const SDLDidReceiveNewHashNotification = @"com.sdl.notification.newHash";
-SDLNotificationName const SDLDidChangePermissionsNotification = @"com.sdl.notification.changePermission";
-SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification = @"com.sdl.notification.rcStatus";
-SDLNotificationName const SDLDidReceiveSystemCapabilityUpdatedNotification = @"com.sdl.notification.systemCapabilityUpdated";
-SDLNotificationName const SDLDidReceiveSystemRequestNotification = @"com.sdl.notification.receiveSystemRequest";
-SDLNotificationName const SDLDidChangeTurnByTurnStateNotification = @"com.sdl.notification.changeTurnByTurnState";
-SDLNotificationName const SDLDidReceiveTouchEventNotification = @"com.sdl.notification.touchEvent";
-SDLNotificationName const SDLDidReceiveVehicleDataNotification = @"com.sdl.notification.vehicleData";
-SDLNotificationName const SDLDidReceiveWaypointNotification = @"com.sdl.notification.waypoint";
+SDLNotificationName const SDLDidChangeDriverDistractionStateNotification = @"com.sdl.notification.OnDriverDistraction";
+SDLNotificationName const SDLDidChangeHMIStatusNotification = @"com.sdl.notification.OnHMIStatus";
+SDLNotificationName const SDLDidReceiveAppServiceDataNotification = @"com.sdl.notification.OnAppServiceData";
+SDLNotificationName const SDLDidReceiveAppUnregisteredNotification = @"com.sdl.notification.OnAppInterfaceUnregistered";
+SDLNotificationName const SDLDidReceiveAudioPassThruNotification = @"com.sdl.notification.OnAudioPassThru";
+SDLNotificationName const SDLDidReceiveButtonEventNotification = @"com.sdl.notification.OnButtonEvent";
+SDLNotificationName const SDLDidReceiveButtonPressNotification = @"com.sdl.notification.OnButtonPress";
+SDLNotificationName const SDLDidReceiveCommandNotification = @"com.sdl.notification.OnCommand";
+SDLNotificationName const SDLDidReceiveEncodedDataNotification = @"com.sdl.notification.OnEncodedSyncPData";
+SDLNotificationName const SDLDidReceiveInteriorVehicleDataNotification = @"com.sdl.notification.OnInteriorVehicleData";
+SDLNotificationName const SDLDidReceiveKeyboardInputNotification = @"com.sdl.notification.OnKeyboardInput";
+SDLNotificationName const SDLDidChangeLanguageNotification = @"com.sdl.notification.OnLanguageChange";
+SDLNotificationName const SDLDidReceiveNewHashNotification = @"com.sdl.notification.OnHashChange";
+SDLNotificationName const SDLDidChangePermissionsNotification = @"com.sdl.notification.OnPermissionsChange";
+SDLNotificationName const SDLDidReceiveRemoteControlStatusNotification = @"com.sdl.notification.OnRCStatus";
+SDLNotificationName const SDLDidReceiveSyncPDataNotification = @"com.sdl.notification.OnSyncPData";
+SDLNotificationName const SDLDidReceiveSystemCapabilityUpdatedNotification = @"com.sdl.notification.OnSystemCapabilityUpdated";
+SDLNotificationName const SDLDidReceiveSystemRequestNotification = @"com.sdl.notification.OnSystemRequest";
+SDLNotificationName const SDLDidChangeTurnByTurnStateNotification = @"com.sdl.notification.OnTBTClientState";
+SDLNotificationName const SDLDidReceiveTouchEventNotification = @"com.sdl.notification.OnTouchEvent";
+SDLNotificationName const SDLDidReceiveVehicleDataNotification = @"com.sdl.notification.OnVehicleData";
+SDLNotificationName const SDLDidReceiveWaypointNotification = @"com.sdl.notification.OnWayPointChange";
@implementation SDLNotificationConstants
@@ -198,7 +203,10 @@ SDLNotificationName const SDLDidReceiveWaypointNotification = @"com.sdl.notifica
SDLDidReceiveDeleteWindowResponse,
SDLDidReceiveDiagnosticMessageResponse,
SDLDidReceiveDialNumberResponse,
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLDidReceiveEncodedSyncPDataResponse,
+#pragma clang diagnostic pop
SDLDidReceiveEndAudioPassThruResponse,
SDLDidReceiveGenericResponse,
SDLDidReceiveGetCloudAppPropertiesResponse,
@@ -237,7 +245,11 @@ SDLNotificationName const SDLDidReceiveWaypointNotification = @"com.sdl.notifica
SDLDidReceiveSubscribeButtonResponse,
SDLDidReceiveSubscribeVehicleDataResponse,
SDLDidReceiveSubscribeWaypointsResponse,
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLDidReceiveSyncPDataResponse,
+#pragma clang diagnostic pop
+ SDLDidReceiveSystemRequestResponse,
SDLDidReceiveUpdateTurnListResponse,
SDLDidReceiveUnpublishAppServiceResponse,
SDLDidReceiveUnregisterAppInterfaceResponse,
diff --git a/SmartDeviceLink/SDLNotificationDispatcher.h b/SmartDeviceLink/SDLNotificationDispatcher.h
index f820ddc91..a923879c0 100644
--- a/SmartDeviceLink/SDLNotificationDispatcher.h
+++ b/SmartDeviceLink/SDLNotificationDispatcher.h
@@ -8,8 +8,6 @@
#import <Foundation/Foundation.h>
-#import "SDLProxyListener.h"
-
@class SDLRPCRequest;
@class SDLRPCResponse;
@class SDLRPCNotification;
@@ -20,7 +18,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
* The SDLNotificationDispatcher subscribes to SDLProxy notifications through SDLProxyListener and sends out actual NSNotifications with those contents. It can also be told to send out other types of notifications.
*/
-@interface SDLNotificationDispatcher : NSObject <SDLProxyListener>
+@interface SDLNotificationDispatcher : NSObject
/**
* Posts a notification with a specified name and object.
diff --git a/SmartDeviceLink/SDLNotificationDispatcher.m b/SmartDeviceLink/SDLNotificationDispatcher.m
index a17228120..bd8ab7e7a 100644
--- a/SmartDeviceLink/SDLNotificationDispatcher.m
+++ b/SmartDeviceLink/SDLNotificationDispatcher.m
@@ -8,11 +8,12 @@
#import "SDLNotificationDispatcher.h"
-#import "SDLError.h"
#import "SDLNotificationConstants.h"
#import "SDLRPCNotification.h"
#import "SDLRPCNotificationNotification.h"
+#import "SDLRPCRequest.h"
#import "SDLRPCRequestNotification.h"
+#import "SDLRPCResponse.h"
#import "SDLRPCResponseNotification.h"
NS_ASSUME_NONNULL_BEGIN
@@ -53,638 +54,6 @@ NS_ASSUME_NONNULL_BEGIN
[[NSNotificationCenter defaultCenter] postNotification:notification];
}
-#pragma mark - SDLProxyListener Delegate Methods
-
-- (void)onProxyOpened {
- [self postNotificationName:SDLTransportDidConnect infoObject:nil];
-}
-
-- (void)onProxyClosed {
- [self postNotificationName:SDLTransportDidDisconnect infoObject:nil];
-}
-
-- (void)onTransportError:(NSError *)error {
- [self postNotificationName:SDLTransportConnectError infoObject:error];
-}
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
-
-- (void)onOnHMIStatus:(SDLOnHMIStatus *)notification {
- [self postRPCNotificationNotification:SDLDidChangeHMIStatusNotification notification:notification];
-}
-
-- (void)onOnDriverDistraction:(SDLOnDriverDistraction *)notification {
- [self postRPCNotificationNotification:SDLDidChangeDriverDistractionStateNotification notification:notification];
-}
-
-#pragma mark Optional Methods
-
-- (void)onError:(NSException *)e {
- NSError *error = [NSError sdl_lifecycle_unknownRemoteErrorWithDescription:e.name andReason:e.reason];
- [self postNotificationName:SDLDidReceiveError infoObject:error];
-}
-
-# pragma mark - Responses
-
-- (void)onReceivedLockScreenIcon:(UIImage *)icon {
- [self postNotificationName:SDLDidReceiveLockScreenIcon infoObject:icon];
-}
-
-- (void)onAddCommandResponse:(SDLAddCommandResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveAddCommandResponse response:response];
-}
-
-- (void)onAddSubMenuResponse:(SDLAddSubMenuResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveAddSubMenuResponse response:response];
-}
-
-- (void)onAlertManeuverResponse:(SDLAlertManeuverResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveAlertManeuverResponse response:response];
-}
-
-- (void)onAlertResponse:(SDLAlertResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveAlertResponse response:response];
-}
-
-- (void)onButtonPressResponse:(SDLButtonPressResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveButtonPressResponse response:response];
-}
-
-- (void)onCancelInteractionResponse:(SDLCancelInteractionResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveCancelInteractionResponse response:response];
-}
-
-- (void)onChangeRegistrationResponse:(SDLChangeRegistrationResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveChangeRegistrationResponse response:response];
-}
-
-- (void)onCloseApplicationResponse:(SDLCloseApplicationResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveCloseApplicationResponse response:response];
-}
-
-- (void)onCreateInteractionChoiceSetResponse:(SDLCreateInteractionChoiceSetResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveCreateInteractionChoiceSetResponse response:response];
-}
-
-- (void)onCreateWindowResponse:(SDLCreateWindowResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveCreateWindowResponse response:response];
-}
-
-- (void)onDeleteCommandResponse:(SDLDeleteCommandResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDeleteCommandResponse response:response];
-}
-
-- (void)onDeleteFileResponse:(SDLDeleteFileResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDeleteFileResponse response:response];
-}
-
-- (void)onDeleteInteractionChoiceSetResponse:(SDLDeleteInteractionChoiceSetResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDeleteInteractionChoiceSetResponse response:response];
-}
-
-- (void)onDeleteSubMenuResponse:(SDLDeleteSubMenuResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDeleteSubmenuResponse response:response];
-}
-
-- (void)onDeleteWindowResponse:(SDLDeleteWindowResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDeleteWindowResponse response:response];
-}
-
-- (void)onDiagnosticMessageResponse:(SDLDiagnosticMessageResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDiagnosticMessageResponse response:response];
-}
-
-- (void)onDialNumberResponse:(SDLDialNumberResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveDialNumberResponse response:response];
-}
-
-- (void)onEncodedSyncPDataResponse:(SDLEncodedSyncPDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveEncodedSyncPDataResponse response:response];
-}
-
-- (void)onEndAudioPassThruResponse:(SDLEndAudioPassThruResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveEndAudioPassThruResponse response:response];
-}
-
-- (void)onGenericResponse:(SDLGenericResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGenericResponse response:response];
-}
-
-- (void)onGetCloudAppPropertiesResponse:(SDLGetCloudAppPropertiesResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetCloudAppPropertiesResponse response:response];
-}
-
-- (void)onGetAppServiceDataResponse:(SDLGetAppServiceDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetAppServiceDataResponse response:response];
-}
-
-- (void)onGetDTCsResponse:(SDLGetDTCsResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetDTCsResponse response:response];
-}
-
-- (void)onGetFileResponse:(SDLGetFileResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetFileResponse response:response];
-}
-
-- (void)onGetInteriorVehicleDataResponse:(SDLGetInteriorVehicleDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetInteriorVehicleDataResponse response:response];
-}
-
-- (void)onGetInteriorVehicleDataConsentResponse:(SDLGetInteriorVehicleDataConsentResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetInteriorVehicleDataConsentResponse response:response];
-}
-
-- (void)onGetSystemCapabilityResponse:(SDLGetSystemCapabilityResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetSystemCapabilitiesResponse response:response];
-}
-
-- (void)onGetVehicleDataResponse:(SDLGetVehicleDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetVehicleDataResponse response:response];
-}
-
-- (void)onGetWayPointsResponse:(SDLGetWayPointsResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveGetWaypointsResponse response:response];
-}
-
-- (void)onListFilesResponse:(SDLListFilesResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveListFilesResponse response:response];
-}
-
-- (void)onPerformAppServiceInteractionResponse:(SDLPerformAppServiceInteractionResponse *)response {
- [self postRPCResponseNotification:SDLDidReceivePerformAppServiceInteractionResponse response:response];
-}
-
-- (void)onPerformAudioPassThruResponse:(SDLPerformAudioPassThruResponse *)response {
- [self postRPCResponseNotification:SDLDidReceivePerformAudioPassThruResponse response:response];
-}
-
-- (void)onPerformInteractionResponse:(SDLPerformInteractionResponse *)response {
- [self postRPCResponseNotification:SDLDidReceivePerformInteractionResponse response:response];
-}
-
-- (void)onPublishAppServiceResponse:(SDLPublishAppServiceResponse *)response {
- [self postRPCResponseNotification:SDLDidReceivePublishAppServiceResponse response:response];
-}
-
-- (void)onPutFileResponse:(SDLPutFileResponse *)response {
- [self postRPCResponseNotification:SDLDidReceivePutFileResponse response:response];
-}
-
-- (void)onReadDIDResponse:(SDLReadDIDResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveReadDIDResponse response:response];
-}
-
-- (void)onRegisterAppInterfaceResponse:(SDLRegisterAppInterfaceResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveRegisterAppInterfaceResponse response:response];
-}
-
-- (void)onReleaseInteriorVehicleDataModuleResponse:(SDLReleaseInteriorVehicleDataModuleResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveReleaseInteriorVehicleDataModuleResponse response:response];
-}
-
-- (void)onResetGlobalPropertiesResponse:(SDLResetGlobalPropertiesResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveResetGlobalPropertiesResponse response:response];
-}
-
-- (void)onScrollableMessageResponse:(SDLScrollableMessageResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveScrollableMessageResponse response:response];
-}
-
-- (void)onSendHapticDataResponse:(SDLSendHapticDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSendHapticDataResponse response:response];
-}
-
-- (void)onSendLocationResponse:(SDLSendLocationResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSendLocationResponse response:response];
-}
-
-- (void)onSetAppIconResponse:(SDLSetAppIconResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSetAppIconResponse response:response];
-}
-
-- (void)onSetCloudAppPropertiesResponse:(SDLSetCloudAppPropertiesResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSetCloudAppPropertiesResponse response:response];
-}
-
-- (void)onSetDisplayLayoutResponse:(SDLSetDisplayLayoutResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSetDisplayLayoutResponse response:response];
-}
-
-- (void)onSetGlobalPropertiesResponse:(SDLSetGlobalPropertiesResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSetGlobalPropertiesResponse response:response];
-}
-
-- (void)onSetInteriorVehicleDataResponse:(SDLSetInteriorVehicleDataResponse *)response{
- [self postRPCResponseNotification:SDLDidReceiveSetInteriorVehicleDataResponse response:response];
-}
-
-- (void)onSetMediaClockTimerResponse:(SDLSetMediaClockTimerResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSetMediaClockTimerResponse response:response];
-}
-
-- (void)onShowConstantTBTResponse:(SDLShowConstantTBTResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveShowConstantTBTResponse response:response];
-}
-
-- (void)onShowResponse:(SDLShowResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveShowResponse response:response];
-}
-
-- (void)onShowAppMenuResponse:(SDLShowAppMenuResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveShowAppMenuResponse response:response];
-}
-
-- (void)onSliderResponse:(SDLSliderResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSliderResponse response:response];
-}
-
-- (void)onSpeakResponse:(SDLSpeakResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSpeakResponse response:response];
-}
-
-- (void)onSubscribeButtonResponse:(SDLSubscribeButtonResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSubscribeButtonResponse response:response];
-}
-
-- (void)onSubscribeVehicleDataResponse:(SDLSubscribeVehicleDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSubscribeVehicleDataResponse response:response];
-}
-
-- (void)onSubscribeWayPointsResponse:(SDLSubscribeWayPointsResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSubscribeWaypointsResponse response:response];
-}
-
-- (void)onSyncPDataResponse:(SDLSyncPDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveSyncPDataResponse response:response];
-}
-
-- (void)onUpdateTurnListResponse:(SDLUpdateTurnListResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUpdateTurnListResponse response:response];
-}
-
-- (void)onUnpublishAppServiceResponse:(SDLUnpublishAppServiceResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUnpublishAppServiceResponse response:response];
-}
-
-- (void)onUnregisterAppInterfaceResponse:(SDLUnregisterAppInterfaceResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUnregisterAppInterfaceResponse response:response];
-}
-
-- (void)onUnsubscribeButtonResponse:(SDLUnsubscribeButtonResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUnsubscribeButtonResponse response:response];
-}
-
-- (void)onUnsubscribeVehicleDataResponse:(SDLUnsubscribeVehicleDataResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUnsubscribeVehicleDataResponse response:response];
-}
-
-- (void)onUnsubscribeWayPointsResponse:(SDLUnsubscribeWayPointsResponse *)response {
- [self postRPCResponseNotification:SDLDidReceiveUnsubscribeWaypointsResponse response:response];
-}
-
-# pragma mark - Requests
-
-- (void)onAddCommand:(SDLAddCommand *)request {
- [self postRPCRequestNotification:SDLDidReceiveAddCommandRequest request:request];
-}
-
-- (void)onAddSubMenu:(SDLAddSubMenu *)request {
- [self postRPCRequestNotification:SDLDidReceiveAddSubMenuRequest request:request];
-}
-
-- (void)onAlert:(SDLAlert *)request {
- [self postRPCRequestNotification:SDLDidReceiveAlertRequest request:request];
-}
-
-- (void)onAlertManeuver:(SDLAlertManeuver *)request {
- [self postRPCRequestNotification:SDLDidReceiveAlertManeuverRequest request:request];
-}
-
-- (void)onButtonPress:(SDLButtonPress *)request {
- [self postRPCRequestNotification:SDLDidReceiveButtonPressRequest request:request];
-}
-
-- (void)onCancelInteraction:(SDLCancelInteraction *)request {
- [self postRPCRequestNotification:SDLDidReceiveCancelInteractionRequest request:request];
-}
-
-- (void)onChangeRegistration:(SDLChangeRegistration *)request {
- [self postRPCRequestNotification:SDLDidReceiveChangeRegistrationRequest request:request];
-}
-
-- (void)onCloseApplication:(SDLCloseApplication *)request {
- [self postRPCRequestNotification:SDLDidReceiveCloseApplicationRequest request:request];
-}
-
-- (void)onCreateInteractionChoiceSet:(SDLCreateInteractionChoiceSet *)request {
- [self postRPCRequestNotification:SDLDidReceiveCreateInteractionChoiceSetRequest request:request];
-}
-
-- (void)onCreateWindow:(SDLCreateWindow *)request {
- [self postRPCRequestNotification:SDLDidReceiveCreateWindowRequest request:request];
-}
-
-- (void)onDeleteCommand:(SDLDeleteCommand *)request {
- [self postRPCRequestNotification:SDLDidReceiveDeleteCommandRequest request:request];
-}
-
-- (void)onDeleteFile:(SDLDeleteFile *)request {
- [self postRPCRequestNotification:SDLDidReceiveDeleteFileRequest request:request];
-}
-
-- (void)onDeleteInteractionChoiceSet:(SDLDeleteInteractionChoiceSet *)request {
- [self postRPCRequestNotification:SDLDidReceiveDeleteInteractionChoiceSetRequest request:request];
-}
-
-- (void)onDeleteSubMenu:(SDLDeleteSubMenu *)request {
- [self postRPCRequestNotification:SDLDidReceiveDeleteSubMenuRequest request:request];
-}
-
-- (void)onDeleteWindow:(SDLDeleteWindow *)request {
- [self postRPCRequestNotification:SDLDidReceiveDeleteWindowRequest request:request];
-}
-
-- (void)onDiagnosticMessage:(SDLDiagnosticMessage *)request {
- [self postRPCRequestNotification:SDLDidReceiveDiagnosticMessageRequest request:request];
-}
-
-- (void)onDialNumber:(SDLDialNumber *)request {
- [self postRPCRequestNotification:SDLDidReceiveDialNumberRequest request:request];
-}
-
-- (void)onEncodedSyncPData:(SDLEncodedSyncPData *)request {
- [self postRPCRequestNotification:SDLDidReceiveEncodedSyncPDataRequest request:request];
-}
-
-- (void)onEndAudioPassThru:(SDLEndAudioPassThru *)request {
- [self postRPCRequestNotification:SDLDidReceiveEndAudioPassThruRequest request:request];
-}
-
-- (void)onGetAppServiceData:(SDLGetAppServiceData *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetAppServiceDataRequest request:request];
-}
-
-- (void)onGetCloudAppProperties:(SDLGetCloudAppProperties *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetCloudAppPropertiesRequest request:request];
-}
-
-- (void)onGetDTCs:(SDLGetDTCs *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetDTCsRequest request:request];
-}
-
-- (void)onGetFile:(SDLGetFile *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetFileRequest request:request];
-}
-
-- (void)onGetInteriorVehicleData:(SDLGetInteriorVehicleData *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetInteriorVehicleDataRequest request:request];
-}
-
-- (void)onGetInteriorVehicleDataConsent:(SDLGetInteriorVehicleDataConsent *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetInteriorVehicleDataConsentRequest request:request];
-}
-
-- (void)onGetSystemCapability:(SDLGetSystemCapability *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetSystemCapabilityRequest request:request];
-}
-
-- (void)onGetVehicleData:(SDLGetVehicleData *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetVehicleDataRequest request:request];
-}
-
-- (void)onGetWayPoints:(SDLGetWayPoints *)request {
- [self postRPCRequestNotification:SDLDidReceiveGetWayPointsRequest request:request];
-}
-
-- (void)onListFiles:(SDLListFiles *)request {
- [self postRPCRequestNotification:SDLDidReceiveListFilesRequest request:request];
-}
-
-- (void)onPerformAppServiceInteraction:(SDLPerformAppServiceInteraction *)request {
- [self postRPCRequestNotification:SDLDidReceivePerformAppServiceInteractionRequest request:request];
-}
-
-- (void)onPerformAudioPassThru:(SDLPerformAudioPassThru *)request {
- [self postRPCRequestNotification:SDLDidReceivePerformAudioPassThruRequest request:request];
-}
-
-- (void)onPerformInteraction:(SDLPerformInteraction *)request {
- [self postRPCRequestNotification:SDLDidReceivePerformInteractionRequest request:request];
-}
-
-- (void)onPublishAppService:(SDLPublishAppService *)request {
- [self postRPCRequestNotification:SDLDidReceivePublishAppServiceRequest request:request];
-}
-
-- (void)onPutFile:(SDLPutFile *)request {
- [self postRPCRequestNotification:SDLDidReceivePutFileRequest request:request];
-}
-
-- (void)onReadDID:(SDLReadDID *)request {
- [self postRPCRequestNotification:SDLDidReceiveReadDIDRequest request:request];
-}
-
-- (void)onRegisterAppInterface:(SDLRegisterAppInterface *)request {
- [self postRPCRequestNotification:SDLDidReceiveRegisterAppInterfaceRequest request:request];
-}
-
-- (void)onReleaseInteriorVehicleDataModule:(SDLReleaseInteriorVehicleDataModule *)request {
- [self postRPCRequestNotification:SDLDidReceiveReleaseInteriorVehicleDataModuleRequest request:request];
-}
-
-- (void)onResetGlobalProperties:(SDLResetGlobalProperties *)request {
- [self postRPCRequestNotification:SDLDidReceiveResetGlobalPropertiesRequest request:request];
-}
-
-- (void)onScrollableMessage:(SDLScrollableMessage *)request {
- [self postRPCRequestNotification:SDLDidReceiveScrollableMessageRequest request:request];
-}
-
-- (void)onSendHapticData:(SDLSendHapticData *)request {
- [self postRPCRequestNotification:SDLDidReceiveSendHapticDataRequest request:request];
-}
-
-- (void)onSendLocation:(SDLSendLocation *)request {
- [self postRPCRequestNotification:SDLDidReceiveSendLocationRequest request:request];
-}
-
-- (void)onSetAppIcon:(SDLSetAppIcon *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetAppIconRequest request:request];
-}
-
-- (void)onSetCloudAppProperties:(SDLSetCloudAppProperties *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetCloudAppPropertiesRequest request:request];
-}
-
-- (void)onSetDisplayLayout:(SDLSetDisplayLayout *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetDisplayLayoutRequest request:request];
-}
-
-- (void)onSetGlobalProperties:(SDLSetGlobalProperties *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetGlobalPropertiesRequest request:request];
-}
-
-- (void)onSetInteriorVehicleData:(SDLSetInteriorVehicleData *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetInteriorVehicleDataRequest request:request];
-}
-
-- (void)onSetMediaClockTimer:(SDLSetMediaClockTimer *)request {
- [self postRPCRequestNotification:SDLDidReceiveSetMediaClockTimerRequest request:request];
-}
-
-- (void)onShow:(SDLShow *)request {
- [self postRPCRequestNotification:SDLDidReceiveShowRequest request:request];
-}
-
-- (void)onShowAppMenu:(SDLShowAppMenu *)request {
- [self postRPCRequestNotification:SDLDidReceiveShowAppMenuRequest request:request];
-}
-
-- (void)onShowConstantTBT:(SDLShowConstantTBT *)request {
- [self postRPCRequestNotification:SDLDidReceiveShowConstantTBTRequest request:request];
-}
-
-- (void)onSlider:(SDLSlider *)request {
- [self postRPCRequestNotification:SDLDidReceiveSliderRequest request:request];
-}
-
-- (void)onSpeak:(SDLSpeak *)request {
- [self postRPCRequestNotification:SDLDidReceiveSpeakRequest request:request];
-}
-
-- (void)onSubscribeButton:(SDLSubscribeButton *)request {
- [self postRPCRequestNotification:SDLDidReceiveSubscribeButtonRequest request:request];
-}
-
-- (void)onSubscribeVehicleData:(SDLSubscribeVehicleData *)request {
- [self postRPCRequestNotification:SDLDidReceiveSubscribeVehicleDataRequest request:request];
-}
-
-- (void)onSubscribeWayPoints:(SDLSubscribeWayPoints *)request {
- [self postRPCRequestNotification:SDLDidReceiveSubscribeWayPointsRequest request:request];
-}
-
-- (void)onSyncPData:(SDLSyncPData *)request {
- [self postRPCRequestNotification:SDLDidReceiveSyncPDataRequest request:request];
-}
-
--(void)onSystemRequest:(SDLSystemRequest *)request {
- [self postRPCRequestNotification:SDLDidReceiveSystemRequestRequest request:request];
-}
-
-- (void)onUnpublishAppService:(SDLUnpublishAppService *)request {
- [self postRPCRequestNotification:SDLDidReceiveUnpublishAppServiceRequest request:request];
-}
-
-- (void)onUnregisterAppInterface:(SDLUnregisterAppInterface *)request {
- [self postRPCRequestNotification:SDLDidReceiveUnregisterAppInterfaceRequest request:request];
-}
-
-- (void)onUnsubscribeButton:(SDLUnsubscribeButton *)request {
- [self postRPCRequestNotification:SDLDidReceiveUnsubscribeButtonRequest request:request];
-}
-
-- (void)onUnsubscribeVehicleData:(SDLUnsubscribeVehicleData *)request {
- [self postRPCRequestNotification:SDLDidReceiveUnsubscribeVehicleDataRequest request:request];
-}
-
-- (void)onUnsubscribeWayPoints:(SDLUnsubscribeWayPoints *)request {
- [self postRPCRequestNotification:SDLDidReceiveUnsubscribeWayPointsRequest request:request];
-}
-
-- (void)onUpdateTurnList:(SDLUpdateTurnList *)request {
- [self postRPCRequestNotification:SDLDidReceiveUpdateTurnListRequest request:request];
-}
-
-# pragma mark - Notifications
-
-- (void)onOnAppInterfaceUnregistered:(SDLOnAppInterfaceUnregistered *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveAppUnregisteredNotification notification:notification];
-}
-
-- (void)onOnAppServiceData:(SDLOnAppServiceData *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveAppServiceDataNotification notification:notification];
-}
-
-- (void)onOnAudioPassThru:(SDLOnAudioPassThru *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveAudioPassThruNotification notification:notification];
-}
-
-- (void)onOnButtonEvent:(SDLOnButtonEvent *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveButtonEventNotification notification:notification];
-}
-
-- (void)onOnButtonPress:(SDLOnButtonPress *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveButtonPressNotification notification:notification];
-}
-
-- (void)onOnCommand:(SDLOnCommand *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveCommandNotification notification:notification];
-}
-
-- (void)onOnEncodedSyncPData:(SDLOnEncodedSyncPData *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveEncodedDataNotification notification:notification];
-}
-
-- (void)onOnHashChange:(SDLOnHashChange *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveNewHashNotification notification:notification];
-}
-
-- (void)onOnInteriorVehicleData:(SDLOnInteriorVehicleData *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveInteriorVehicleDataNotification notification:notification];
-}
-
-- (void)onOnKeyboardInput:(SDLOnKeyboardInput *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveKeyboardInputNotification notification:notification];
-}
-
-- (void)onOnLanguageChange:(SDLOnLanguageChange *)notification {
- [self postRPCNotificationNotification:SDLDidChangeLanguageNotification notification:notification];
-}
-
-- (void)onOnLockScreenNotification:(SDLOnLockScreenStatus *)notification {
- [self postRPCNotificationNotification:SDLDidChangeLockScreenStatusNotification notification:notification];
-}
-
-- (void)onOnPermissionsChange:(SDLOnPermissionsChange *)notification {
- [self postRPCNotificationNotification:SDLDidChangePermissionsNotification notification:notification];
-}
-
-- (void)onOnRCStatus:(SDLOnRCStatus *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveRemoteControlStatusNotification notification:notification];
-}
-
-- (void)onOnSyncPData:(SDLOnSyncPData *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveSystemRequestNotification notification:notification];
-}
-
-- (void)onOnSystemCapabilityUpdated:(SDLOnSystemCapabilityUpdated *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveSystemCapabilityUpdatedNotification notification:notification];
-}
-
-- (void)onOnSystemRequest:(SDLOnSystemRequest *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveSystemRequestNotification notification:notification];
-}
-
-- (void)onOnTBTClientState:(SDLOnTBTClientState *)notification {
- [self postRPCNotificationNotification:SDLDidChangeTurnByTurnStateNotification notification:notification];
-}
-
-- (void)onOnTouchEvent:(SDLOnTouchEvent *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveTouchEventNotification notification:notification];
-}
-
-- (void)onOnVehicleData:(SDLOnVehicleData *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveVehicleDataNotification notification:notification];
-}
-
-- (void)onOnWayPointChange:(SDLOnWayPointChange *)notification {
- [self postRPCNotificationNotification:SDLDidReceiveWaypointNotification notification:notification];
-}
-
-#pragma clang diagnostic pop
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLOnEncodedSyncPData.h b/SmartDeviceLink/SDLOnEncodedSyncPData.h
index 01aa48bac..b42880ec8 100644
--- a/SmartDeviceLink/SDLOnEncodedSyncPData.h
+++ b/SmartDeviceLink/SDLOnEncodedSyncPData.h
@@ -8,6 +8,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED ***
*/
+__deprecated
@interface SDLOnEncodedSyncPData : SDLRPCNotification
/**
diff --git a/SmartDeviceLink/SDLOnEncodedSyncPData.m b/SmartDeviceLink/SDLOnEncodedSyncPData.m
index b1526794e..830bb5d3f 100644
--- a/SmartDeviceLink/SDLOnEncodedSyncPData.m
+++ b/SmartDeviceLink/SDLOnEncodedSyncPData.m
@@ -9,7 +9,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLOnEncodedSyncPData
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLOnSyncPData.h b/SmartDeviceLink/SDLOnSyncPData.h
index 7b16ba171..4352228f6 100644
--- a/SmartDeviceLink/SDLOnSyncPData.h
+++ b/SmartDeviceLink/SDLOnSyncPData.h
@@ -9,6 +9,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
DEPRECATED
*/
+__deprecated
@interface SDLOnSyncPData : SDLRPCNotification
/// The url
diff --git a/SmartDeviceLink/SDLOnSyncPData.m b/SmartDeviceLink/SDLOnSyncPData.m
index 89541683f..af4f39b0a 100644
--- a/SmartDeviceLink/SDLOnSyncPData.m
+++ b/SmartDeviceLink/SDLOnSyncPData.m
@@ -11,7 +11,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLOnSyncPData
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLOnVehicleData.h b/SmartDeviceLink/SDLOnVehicleData.h
index 815827cb3..65dd75538 100644
--- a/SmartDeviceLink/SDLOnVehicleData.h
+++ b/SmartDeviceLink/SDLOnVehicleData.h
@@ -35,6 +35,42 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLOnVehicleData : SDLRPCNotification
/**
+ * Initializes an instance of the SDLOnVehicleData class
+ *
+ * @param gps - gps
+ * @param speed - @(speed)
+ * @param rpm - rpm
+ * @param instantFuelConsumption - @(instantFuelConsumption)
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - @(externalTemperature)
+ * @param turnSignal - turnSignal
+ * @param vin - vin
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - @(engineTorque)
+ * @param accPedalPosition - @(accPedalPosition)
+ * @param steeringWheelAngle - @(steeringWheelAngle)
+ * @param engineOilLife - @(engineOilLife)
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModeStatus - clusterModeStatus
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLOnVehicleData object
+ */
+- (instancetype)initWithGps:(nullable SDLGPSData *)gps speed:(float)speed rpm:(nullable NSNumber<SDLUInt> *)rpm instantFuelConsumption:(float)instantFuelConsumption fuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange externalTemperature:(float)externalTemperature turnSignal:(nullable SDLTurnSignal)turnSignal vin:(nullable NSString *)vin prndl:(nullable SDLPRNDL)prndl tirePressure:(nullable SDLTireStatus *)tirePressure odometer:(nullable NSNumber<SDLUInt> *)odometer beltStatus:(nullable SDLBeltStatus *)beltStatus bodyInformation:(nullable SDLBodyInformation *)bodyInformation deviceStatus:(nullable SDLDeviceStatus *)deviceStatus driverBraking:(nullable SDLVehicleDataEventStatus)driverBraking wiperStatus:(nullable SDLWiperStatus)wiperStatus headLampStatus:(nullable SDLHeadLampStatus *)headLampStatus engineTorque:(float)engineTorque accPedalPosition:(float)accPedalPosition steeringWheelAngle:(float)steeringWheelAngle engineOilLife:(float)engineOilLife electronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSString *)cloudAppVehicleID eCallInfo:(nullable SDLECallInfo *)eCallInfo airbagStatus:(nullable SDLAirbagStatus *)airbagStatus emergencyEvent:(nullable SDLEmergencyEvent *)emergencyEvent clusterModeStatus:(nullable SDLClusterModeStatus *)clusterModeStatus myKey:(nullable SDLMyKey *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering;
+
+/**
The car current GPS coordinates
*/
@property (nullable, strong, nonatomic) SDLGPSData *gps;
@@ -52,12 +88,12 @@ NS_ASSUME_NONNULL_BEGIN
/**
The fuel level in the tank (percentage)
*/
-@property (nullable, strong, nonatomic) NSNumber<SDLFloat> *fuelLevel;
+@property (strong, nonatomic, nullable) NSNumber<SDLFloat> *fuelLevel __deprecated_msg("use fuelRange.level instead on 7.0+ RPC version connections");
/**
The fuel level state
*/
-@property (nullable, strong, nonatomic) SDLComponentVolumeStatus fuelLevel_State;
+@property (strong, nonatomic, nullable) SDLComponentVolumeStatus fuelLevel_State __deprecated_msg("use fuelRange.levelState instead on 7.0+ RPC version connections");
/**
The estimate range in KM the vehicle can travel based on fuel level and consumption
@@ -122,6 +158,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLWiperStatus wiperStatus;
/**
+ To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *handsOffSteering;
+
+/**
Status of the head lamps
*/
@property (nullable, strong, nonatomic) SDLHeadLampStatus *headLampStatus;
@@ -188,7 +229,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@param vehicleDataState An object containing the OEM custom vehicle data item.
@@ -198,7 +239,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@return An OEM custom vehicle data object for the given vehicle data name.
diff --git a/SmartDeviceLink/SDLOnVehicleData.m b/SmartDeviceLink/SDLOnVehicleData.m
index 7c59dee34..f38e97d0d 100644
--- a/SmartDeviceLink/SDLOnVehicleData.m
+++ b/SmartDeviceLink/SDLOnVehicleData.m
@@ -26,12 +26,51 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameOnVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameOnVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
+- (instancetype)initWithGps:(nullable SDLGPSData *)gps speed:(float)speed rpm:(nullable NSNumber<SDLUInt> *)rpm instantFuelConsumption:(float)instantFuelConsumption fuelRange:(nullable NSArray<SDLFuelRange *> *)fuelRange externalTemperature:(float)externalTemperature turnSignal:(nullable SDLTurnSignal)turnSignal vin:(nullable NSString *)vin prndl:(nullable SDLPRNDL)prndl tirePressure:(nullable SDLTireStatus *)tirePressure odometer:(nullable NSNumber<SDLUInt> *)odometer beltStatus:(nullable SDLBeltStatus *)beltStatus bodyInformation:(nullable SDLBodyInformation *)bodyInformation deviceStatus:(nullable SDLDeviceStatus *)deviceStatus driverBraking:(nullable SDLVehicleDataEventStatus)driverBraking wiperStatus:(nullable SDLWiperStatus)wiperStatus headLampStatus:(nullable SDLHeadLampStatus *)headLampStatus engineTorque:(float)engineTorque accPedalPosition:(float)accPedalPosition steeringWheelAngle:(float)steeringWheelAngle engineOilLife:(float)engineOilLife electronicParkBrakeStatus:(nullable SDLElectronicParkBrakeStatus)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSString *)cloudAppVehicleID eCallInfo:(nullable SDLECallInfo *)eCallInfo airbagStatus:(nullable SDLAirbagStatus *)airbagStatus emergencyEvent:(nullable SDLEmergencyEvent *)emergencyEvent clusterModeStatus:(nullable SDLClusterModeStatus *)clusterModeStatus myKey:(nullable SDLMyKey *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.gps = gps;
+ self.speed = @(speed);
+ self.rpm = rpm;
+ self.instantFuelConsumption = @(instantFuelConsumption);
+ self.fuelRange = fuelRange;
+ self.externalTemperature = @(externalTemperature);
+ self.turnSignal = turnSignal;
+ self.vin = vin;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = @(engineTorque);
+ self.accPedalPosition = @(accPedalPosition);
+ self.steeringWheelAngle = @(steeringWheelAngle);
+ self.engineOilLife = @(engineOilLife);
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModeStatus = clusterModeStatus;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
+ return self;
+}
+
- (void)setGps:(nullable SDLGPSData *)gps {
[self.parameters sdl_setObject:gps forName:SDLRPCParameterNameGPS];
}
@@ -280,6 +319,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:NSObject.class error:nil];
}
+- (void)setHandsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable NSNumber<SDLBool> *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:NSNumber.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPCMAudioConverter.m b/SmartDeviceLink/SDLPCMAudioConverter.m
index 454ecdebb..853f5a6fb 100755
--- a/SmartDeviceLink/SDLPCMAudioConverter.m
+++ b/SmartDeviceLink/SDLPCMAudioConverter.m
@@ -132,7 +132,7 @@ NSString *const SDLErrorDomainPCMAudioStreamConverter = @"com.sdl.extension.pcmA
err = ExtAudioFileRead(infile, &numFrames, &fillBufList);
if (err != noErr) {
if (*error != nil) {
- *error = [NSError errorWithDomain:SDLErrorDomainPCMAudioStreamConverter code:err userInfo:nil];
+ *error = [NSError errorWithDomain:SDLErrorDomainPCMAudioStreamConverter code:err userInfo:@{@"type": @"ExtAudioFileRead"}];
}
return nil;
}
@@ -143,7 +143,7 @@ NSString *const SDLErrorDomainPCMAudioStreamConverter = @"com.sdl.extension.pcmA
err = ExtAudioFileWrite(outfile, numFrames, &fillBufList);
if (err != noErr) {
if (*error != nil) {
- *error = [NSError errorWithDomain:SDLErrorDomainPCMAudioStreamConverter code:err userInfo:nil];
+ *error = [NSError errorWithDomain:SDLErrorDomainPCMAudioStreamConverter code:err userInfo:@{@"type": @"ExtAudioFileWrite"}];
}
return nil;
}
diff --git a/SmartDeviceLink/SDLPerformInteraction.h b/SmartDeviceLink/SDLPerformInteraction.h
index 575305682..bc035ce04 100644
--- a/SmartDeviceLink/SDLPerformInteraction.h
+++ b/SmartDeviceLink/SDLPerformInteraction.h
@@ -189,7 +189,7 @@ NS_ASSUME_NONNULL_BEGIN
@since SDL 1.0
*/
-@property (strong, nonatomic) NSArray<NSNumber<SDLInt> *> *interactionChoiceSetIDList;
+@property (strong, nonatomic) NSArray<NSNumber *> *interactionChoiceSetIDList;
/**
Help text. This is the spoken text when a user speaks "help" while the interaction is occurring.
diff --git a/SmartDeviceLink/SDLPerformInteraction.m b/SmartDeviceLink/SDLPerformInteraction.m
index 6b72bf502..540788531 100644
--- a/SmartDeviceLink/SDLPerformInteraction.m
+++ b/SmartDeviceLink/SDLPerformInteraction.m
@@ -135,11 +135,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_enumForName:SDLRPCParameterNameInteractionMode error:&error];
}
-- (void)setInteractionChoiceSetIDList:(NSArray<NSNumber<SDLInt> *> *)interactionChoiceSetIDList {
+- (void)setInteractionChoiceSetIDList:(NSArray<NSNumber *> *)interactionChoiceSetIDList {
[self.parameters sdl_setObject:interactionChoiceSetIDList forName:SDLRPCParameterNameInteractionChoiceSetIdList];
}
-- (NSArray<NSNumber<SDLInt> *> *)interactionChoiceSetIDList {
+- (NSArray<NSNumber *> *)interactionChoiceSetIDList {
NSError *error = nil;
return [self.parameters sdl_objectsForName:SDLRPCParameterNameInteractionChoiceSetIdList ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLPermissionConstants.h b/SmartDeviceLink/SDLPermissionConstants.h
index ea36738cc..8c7c1f0da 100644
--- a/SmartDeviceLink/SDLPermissionConstants.h
+++ b/SmartDeviceLink/SDLPermissionConstants.h
@@ -9,6 +9,9 @@
#import <Foundation/Foundation.h>
#import "NSNumber+NumberType.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLPermissionElement.h"
+#import "SDLRPCPermissionStatus.h"
NS_ASSUME_NONNULL_BEGIN
@@ -59,11 +62,19 @@ typedef NS_ENUM(NSUInteger, SDLPermissionGroupStatus) {
};
/**
- * The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.
+ * This is a block that is passed in to some methods that will be stored and called when specified permissions change.
*
- * @param change A dictionary of permission changes containing <key(String): RPC Name, object(BOOL): YES if the RPC is allowed, NO if it is not allowed>
- * @param status The change made to all of the RPCs in the changedDict. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed
+ * @param updatedPermissionStatuses A dictionary of the new current status of all subscription items; containing <key(String): RPC Name, object(BOOL): YES if the RPC is allowed, NO if it is not allowed>
+ * @param status The unified group status of the RPCs in the updatedPermissionStatuses dictionary. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed
*/
-typedef void (^SDLPermissionsChangedHandler)(NSDictionary<SDLPermissionRPCName, NSNumber *> *_Nonnull change, SDLPermissionGroupStatus status);
+typedef void (^SDLPermissionsChangedHandler)(NSDictionary<SDLPermissionRPCName, NSNumber *> *_Nonnull updatedPermissionStatuses, SDLPermissionGroupStatus status);
+
+/**
+ * A block that will be called when specified permissions change. It will return whether each RPC and its parameters are allowed as well as the permission group status of all the RPCs.
+ *
+ * @param updatedPermissionStatuses A dictionary of the new current status of all subscription items; containing <key(String): SDLPermissionRPCName, object(SDLRPCPermissionStatus)>
+ * @param status The unified group status of the RPCs in the updatedPermissionStatuses dictionary. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed
+ */
+typedef void (^SDLRPCPermissionStatusChangedHandler)(NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *_Nonnull updatedPermissionStatuses, SDLPermissionGroupStatus status);
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPermissionElement.h b/SmartDeviceLink/SDLPermissionElement.h
new file mode 100644
index 000000000..3edffe0c6
--- /dev/null
+++ b/SmartDeviceLink/SDLPermissionElement.h
@@ -0,0 +1,42 @@
+//
+// SDLPermissionElement.h
+// SmartDeviceLink
+//
+// Created by James Lapinski on 6/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLParameterPermissions.h"
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// An object containing the RPC name and its parameter names that should be checked when checking permissions
+@interface SDLPermissionElement : NSObject <NSCopying>
+
+/**
+ * Name of the individual RPC.
+ * Required
+ */
+@property (strong, nonatomic) SDLRPCFunctionName rpcName;
+
+/**
+ * RPC parameters for the individual RPC
+ */
+@property (strong, nonatomic, nullable) NSArray<NSString *> *parameterPermissions;
+
+/**
+ * Creates a new permission element.
+ *
+ * @param rpcName The name of the RPC.
+ * @param parameterPermissions An array parameters for the RPC that should be checked if they are allowed. Note that not all head units may provide this data. If no parameter data is received, we assume that the parameter is not allowed.
+ *
+ * @return An instance of `SDLPermissionElement`.
+ */
+- (instancetype)initWithRPCName:(SDLRPCFunctionName)rpcName parameterPermissions:(nullable NSArray<NSString *> *)parameterPermissions;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPermissionElement.m b/SmartDeviceLink/SDLPermissionElement.m
new file mode 100644
index 000000000..ea2aa6e4e
--- /dev/null
+++ b/SmartDeviceLink/SDLPermissionElement.m
@@ -0,0 +1,41 @@
+//
+// SDLPermissionElement.m
+// SmartDeviceLink
+//
+// Created by James Lapinski on 6/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLPermissionElement.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLPermissionElement
+
+- (instancetype)initWithRPCName:(SDLRPCFunctionName)rpcName parameterPermissions:(nullable NSArray<NSString *> *)parameterPermissions {
+ self = [super init];
+ if (!self) { return nil; }
+
+ self.rpcName = rpcName;
+ self.parameterPermissions = parameterPermissions;
+
+ return self;
+}
+
+#pragma mark - NSCopying
+
+- (id)copyWithZone:(nullable NSZone *)zone {
+ SDLPermissionElement *newElement = [[self.class allocWithZone:zone] initWithRPCName:[_rpcName copyWithZone:zone] parameterPermissions:[_parameterPermissions copyWithZone:zone]];
+
+ return newElement;
+}
+
+#pragma mark - Description
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"RPC name: %@, parameter permissions: %@", self.rpcName, self.parameterPermissions];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPermissionFilter.h b/SmartDeviceLink/SDLPermissionFilter.h
index f31666bec..e733d2331 100644
--- a/SmartDeviceLink/SDLPermissionFilter.h
+++ b/SmartDeviceLink/SDLPermissionFilter.h
@@ -9,6 +9,7 @@
#import <Foundation/Foundation.h>
#import "SDLPermissionConstants.h"
+#import "SDLPermissionElement.h"
NS_ASSUME_NONNULL_BEGIN
@@ -21,11 +22,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic, readonly) SDLPermissionObserverIdentifier identifier;
/**
- * All of the RPC names in this filter group.
- */
-@property (copy, nonatomic, readonly) NSArray<SDLPermissionRPCName> *rpcNames;
-
-/**
* The type of this filter group.
*/
@property (assign, nonatomic, readonly) SDLPermissionGroupType groupType;
@@ -36,7 +32,20 @@ NS_ASSUME_NONNULL_BEGIN
@property (copy, nonatomic, readonly) SDLPermissionsChangedHandler handler;
/**
- * Create a new permission filter group.
+ * The block that will be called on status changes to RPC permission status objects
+ */
+@property (copy, nonatomic, readonly) SDLRPCPermissionStatusChangedHandler rpcPermissionStatusHandler;
+
+/**
+ * All of the permission elements in this filter group.
+ */
+@property (copy, nonatomic, readonly) NSArray<SDLPermissionElement *> *permissionElements;
+
+/// Initializer unavailable
+- (instancetype)init NS_UNAVAILABLE;
+
+/**
+ * Create a new permission filter group with a SDLPermissionsChangedHandler.
*
* @param rpcNames The names of the RPCs to watch permissions of.
* @param groupType The type of notifications to be sent for this filter group.
@@ -44,18 +53,18 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return An instance of `SDLPermissionFilter`.
*/
-- (instancetype)initWithRPCNames:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType observer:(SDLPermissionsChangedHandler)handler NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupType:(SDLPermissionGroupType)groupType permissionsHandler:(SDLPermissionsChangedHandler)handler;
/**
- * Create a new permission filter group.
+ * Create a new permission filter group with a SDLRPCPermissionStatusChangedHandler.
*
- * @param rpcNames The names of the RPCs to watch permissions of.
+ * @param rpcNames The names of the RPCs to watch permissions of.
* @param groupType The type of notifications to be sent for this filter group.
- * @param handler The block observer to be called when changes occur.
+ * @param permissionStatusHandler The block observer to be called when changes occur.
*
* @return An instance of `SDLPermissionFilter`.
*/
-+ (instancetype)filterWithRPCNames:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType observer:(SDLPermissionsChangedHandler)handler NS_SWIFT_UNAVAILABLE("Use the initializer");
+- (instancetype)initWithPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupType:(SDLPermissionGroupType)groupType permissionStatusHandler:(SDLRPCPermissionStatusChangedHandler)permissionStatusHandler;
/**
* Whether the current filter is equivalent with another filter or not.
@@ -66,6 +75,15 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (BOOL)isEqualToFilter:(SDLPermissionFilter *)otherFilter;
+/**
+ * Converts an array of SDLPermissionElement objects to an array of SDLPermissionRPCName objects
+ *
+ * @param permissionElements The permission elements to convert.
+ *
+ * @return An array of SDLPermissionRPCName objects
+ */
+- (NSArray<SDLPermissionRPCName> *)rpcNamesFromPermissionElements:(NSArray<SDLPermissionElement *> *)permissionElements;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPermissionFilter.m b/SmartDeviceLink/SDLPermissionFilter.m
index 0d142b3a3..c2ed47a3e 100644
--- a/SmartDeviceLink/SDLPermissionFilter.m
+++ b/SmartDeviceLink/SDLPermissionFilter.m
@@ -11,46 +11,59 @@
NS_ASSUME_NONNULL_BEGIN
-
@implementation SDLPermissionFilter
#pragma mark - Lifecycle
-- (instancetype)init {
- return [self initWithRPCNames:@[]
- groupType:SDLPermissionGroupTypeAny
- observer:^(NSDictionary<SDLPermissionRPCName, NSNumber<SDLBool> *> *_Nonnull change, SDLPermissionGroupStatus status){
- }];
-}
-
-- (instancetype)initWithRPCNames:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType observer:(SDLPermissionsChangedHandler)observer {
+- (instancetype)initWithPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupType:(SDLPermissionGroupType)groupType permissionsHandler:(SDLPermissionsChangedHandler)observer {
self = [super init];
if (!self) {
return nil;
}
_identifier = [NSUUID UUID];
- _rpcNames = rpcNames;
+ _permissionElements = rpcNames;
_groupType = groupType;
_handler = observer;
return self;
}
-+ (instancetype)filterWithRPCNames:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType observer:(SDLPermissionsChangedHandler)observer {
- return [[self alloc] initWithRPCNames:rpcNames groupType:groupType observer:observer];
+- (instancetype)initWithPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupType:(SDLPermissionGroupType)groupType permissionStatusHandler:(SDLRPCPermissionStatusChangedHandler)permissionStatusHandler {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _identifier = [NSUUID UUID];
+ _permissionElements = rpcNames;
+ _groupType = groupType;
+ _rpcPermissionStatusHandler = permissionStatusHandler;
+
+ return self;
+}
+
+#pragma mark - Helpers
+
+- (NSArray<SDLPermissionRPCName> *)rpcNamesFromPermissionElements:(NSArray<SDLPermissionElement *> *)permissionElements {
+ NSMutableArray *rpcNames = [[NSMutableArray alloc] init];
+ for (SDLPermissionElement *element in permissionElements) {
+ [rpcNames addObject:element.rpcName];
+ }
+
+ return [rpcNames copy];
}
#pragma mark - NSCopying
- (id)copyWithZone:(nullable NSZone *)zone {
- SDLPermissionFilter *newFilter = [[self.class allocWithZone:zone] initWithRPCNames:[_rpcNames copyWithZone:zone] groupType:_groupType observer:[_handler copyWithZone:zone]];
+ SDLPermissionFilter *newFilter = [[self.class allocWithZone:zone] initWithPermissions:[_permissionElements copyWithZone:zone] groupType:_groupType permissionsHandler:[_handler copyWithZone:zone]];
newFilter->_identifier = _identifier;
+ newFilter->_rpcPermissionStatusHandler = _rpcPermissionStatusHandler;
return newFilter;
}
+
#pragma mark - Equality
- (BOOL)isEqual:(id)object {
@@ -73,7 +86,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Description
- (NSString *)description {
- return [NSString stringWithFormat:@"identifier: %@, group type: %@, rpcs: %@", self.identifier, @(self.groupType), self.rpcNames];
+ return [NSString stringWithFormat:@"Permission Filter Identifier: %@, group type: %@, RPCs: %@", self.identifier, @(self.groupType), self.permissionElements];
}
@end
diff --git a/SmartDeviceLink/SDLPermissionManager.h b/SmartDeviceLink/SDLPermissionManager.h
index 78866fc90..4a1fc4577 100644
--- a/SmartDeviceLink/SDLPermissionManager.h
+++ b/SmartDeviceLink/SDLPermissionManager.h
@@ -10,6 +10,8 @@
#import "SDLHMILevel.h"
#import "SDLPermissionConstants.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCPermissionStatus.h"
@class SDLPermissionItem;
@class SDLRPCMessage;
@@ -43,7 +45,16 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return YES if the RPC is allowed at the current HMI level, NO if not
*/
-- (BOOL)isRPCAllowed:(SDLPermissionRPCName)rpcName;
+- (BOOL)isRPCAllowed:(SDLPermissionRPCName)rpcName __deprecated_msg(("Use isRPCNameAllowed: instead"));
+
+/**
+ * Determine if an individual RPC is allowed for the current HMI level
+ *
+ * @param rpcName The name of the RPC to be tested, for example, SDLRPCFunctionNameShow
+ *
+ * @return YES if the RPC is allowed at the current HMI level, NO if not
+ */
+- (BOOL)isRPCNameAllowed:(SDLRPCFunctionName)rpcName;
/**
* Determine if all RPCs are allowed for the current HMI level
@@ -52,7 +63,16 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return AllAllowed if all of the permissions are allowed, AllDisallowed if all the permissions are disallowed, Any if some are allowed, and some are disallowed
*/
-- (SDLPermissionGroupStatus)groupStatusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames;
+- (SDLPermissionGroupStatus)groupStatusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames __deprecated_msg(("Use groupStatusOfRPCPermissions: instead"));
+
+/**
+ * Determine if all RPCs are allowed for the current HMI level
+ *
+ * @param rpcNames The RPCs to check
+ *
+ * @return AllAllowed if all of the permissions are allowed, AllDisallowed if all the permissions are disallowed, Any if some are allowed, and some are disallowed
+*/
+- (SDLPermissionGroupStatus)groupStatusOfRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames;
/**
* Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed
@@ -61,7 +81,16 @@ NS_ASSUME_NONNULL_BEGIN
*
* @return A dictionary specifying if the passed in RPC names are currently allowed or not
*/
-- (NSDictionary<SDLPermissionRPCName, NSNumber *> *)statusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames;
+- (NSDictionary<SDLPermissionRPCName, NSNumber *> *)statusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames __deprecated_msg(("Use statusesOfRPCPermissions: instead"));
+
+/**
+ * Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed
+ *
+ * @param rpcNames An array of permission elements to check
+ *
+ * @return A dictionary with specific RPC info contained in a SDLRPCPermissionStatus
+*/
+- (NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *)statusesOfRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames;
/**
* Add an observer for specified RPC names, with a callback that will be called whenever the value changes, as well as immediately with the current status.
@@ -71,12 +100,25 @@ NS_ASSUME_NONNULL_BEGIN
* @warning The observer may be called before this method returns, do not attempt to remove the observer from within the observer. That could send `nil` to removeObserverForIdentifier:. If you want functionality like that, call groupStatusOfRPCs: instead.
*
* @param rpcNames The RPCs to be observed
+ * @param groupType Affects the times that the observer block will be called. If Any, any change to any RPC in rpcNames will cause the observer block to be called. If AllAllowed, the block will be called when: 1. The observer is first set regardless of RPC status 2. Every RPC in rpcNames becomes allowed 3. The group of rpcNames goes from all being allowed to some or all being disallowed.
+ * @param handler The block that will be called whenever permissions change.
+ *
+ * @return An identifier that can be passed to removeObserverForIdentifer: to remove the observer
+ */
+- (SDLPermissionObserverIdentifier)addObserverForRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType withHandler:(SDLPermissionsChangedHandler)handler __deprecated_msg(("Use subscribeToRPCPermissions:groupType:withHandler: instead"));
+
+/**
+ * Subscribe to specified RPC names, with a callback that will be called whenever the value changes. Unlike addObserverForRPCs:groupType:withHandler:, the callback will only return immediately if the groupType is set to SDLPermissionGroupTypeAny or if the groupType is set to SDLPermissionGroupTypeAllAllowed and all RPCs in the rpcNames parameter are allowed.
+ *
+ * @warning The observer may be called before this method returns, do not attempt to remove the observer from within the observer. That could send `nil` to removeObserverForIdentifier:. If you want functionality like that, call groupStatusOfRPCs: instead.
+ *
+ * @param permissionElements The permission elements to be observed
* @param groupType Affects the times that the observer block will be called. If Any, any change to any RPC in rpcNames will cause the observer block to be called. If AllAllowed, the block will be called when: 1. Every RPC in rpcNames becomes allowed 2. The group of rpcNames goes from all being allowed to some or all being disallowed.
* @param handler The block that will be called whenever permissions change.
*
* @return An identifier that can be passed to removeObserverForIdentifer: to remove the observer
*/
-- (SDLPermissionObserverIdentifier)addObserverForRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType withHandler:(SDLPermissionsChangedHandler)handler;
+- (SDLPermissionObserverIdentifier)subscribeToRPCPermissions:(NSArray<SDLPermissionElement *> *)permissionElements groupType:(SDLPermissionGroupType)groupType withHandler:(SDLRPCPermissionStatusChangedHandler)handler;
/**
* Remove every current observer
@@ -94,7 +136,22 @@ NS_ASSUME_NONNULL_BEGIN
/**
* Check whether or not an RPC needs encryption.
*/
-- (BOOL)rpcRequiresEncryption:(SDLPermissionRPCName)rpcName;
+- (BOOL)rpcRequiresEncryption:(SDLPermissionRPCName)rpcName __deprecated_msg(("Use rpcNameRequiresEncryption: instead"));
+
+/**
+ * Check whether or not an RPC needs encryption.
+ */
+- (BOOL)rpcNameRequiresEncryption:(SDLRPCFunctionName)rpcName;
+
+/**
+ * Check whether a parameter of an RPC is allowed
+ *
+ * @param rpcName The name of the RPC to be tested, for example, SDLRPCFunctionNameGetVehicleData
+ * @param parameter The name of the parameter to be tested, for example, rpm
+ *
+ * @return True if the parameter is allowed, false if it is not
+ */
+- (BOOL)isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString *)parameter;
@end
diff --git a/SmartDeviceLink/SDLPermissionManager.m b/SmartDeviceLink/SDLPermissionManager.m
index cdb08e135..aa9f14bf0 100644
--- a/SmartDeviceLink/SDLPermissionManager.m
+++ b/SmartDeviceLink/SDLPermissionManager.m
@@ -12,6 +12,7 @@
#import "SDLNotificationConstants.h"
#import "SDLOnHMIStatus.h"
#import "SDLOnPermissionsChange.h"
+#import "SDLParameterPermissions.h"
#import "SDLPermissionFilter.h"
#import "SDLPermissionItem.h"
#import "SDLPredefinedWindows.h"
@@ -66,23 +67,35 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Permissions available
- (BOOL)isRPCAllowed:(NSString *)rpcName {
- if (self.permissions[rpcName] == nil || self.currentHMILevel == nil) {
+ return [self isRPCNameAllowed:rpcName];
+}
+
+- (BOOL)isRPCNameAllowed:(SDLRPCFunctionName)rpcName {
+ return [self.class isRPCNameAllowed:rpcName permissions:self.permissions hmiLevel:self.currentHMILevel];
+}
+
++ (BOOL)isRPCNameAllowed:(SDLRPCFunctionName)rpcName permissions:(NSDictionary<SDLPermissionRPCName, SDLPermissionItem *> *)permissions hmiLevel:(SDLHMILevel)hmiLevel {
+ if (permissions[rpcName] == nil || hmiLevel == nil) {
return NO;
}
- SDLPermissionItem *item = self.permissions[rpcName];
- return [item.hmiPermissions.allowed containsObject:self.currentHMILevel];
+ SDLPermissionItem *item = permissions[rpcName];
+ return [item.hmiPermissions.allowed containsObject:hmiLevel];
}
- (SDLPermissionGroupStatus)groupStatusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames {
+ return [self groupStatusOfRPCPermissions:[self sdl_createPermissionElementsFromRPCNames:rpcNames]];
+}
+
+- (SDLPermissionGroupStatus)groupStatusOfRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames {
if (self.currentHMILevel == nil) {
return SDLPermissionGroupStatusUnknown;
}
- return [self.class sdl_groupStatusOfRPCs:rpcNames withPermissions:[self.permissions copy] hmiLevel:self.currentHMILevel];
+ return [self.class sdl_groupStatusOfRPCPermissions:rpcNames withPermissions:[self.permissions copy] hmiLevel:self.currentHMILevel];
}
-+ (SDLPermissionGroupStatus)sdl_groupStatusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames withPermissions:(NSDictionary<SDLPermissionRPCName, SDLPermissionItem *> *)permissions hmiLevel:(SDLHMILevel)hmiLevel {
++ (SDLPermissionGroupStatus)sdl_groupStatusOfRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames withPermissions:(NSDictionary<SDLPermissionRPCName, SDLPermissionItem *> *)permissions hmiLevel:(SDLHMILevel)hmiLevel {
// If we don't have an HMI level, then just say everything is disallowed
if (hmiLevel == nil) {
return SDLPermissionGroupStatusUnknown;
@@ -92,7 +105,9 @@ NS_ASSUME_NONNULL_BEGIN
BOOL hasDisallowed = NO;
// Loop through all the RPCs we need to check
- for (NSString *rpcName in rpcNames) {
+ for (SDLPermissionElement *permissionElement in rpcNames) {
+ NSString *rpcName = permissionElement.rpcName;
+
// If at this point in the loop, we have both allowed and disallowed RPCs, return the mixed result
if (hasAllowed && hasDisallowed) {
return SDLPermissionGroupStatusMixed;
@@ -110,6 +125,16 @@ NS_ASSUME_NONNULL_BEGIN
} else {
hasDisallowed = YES;
}
+
+ if (permissionElement.parameterPermissions != nil) {
+ for (NSString *parameter in permissionElement.parameterPermissions) {
+ if ([self.class sdl_isPermissionParameterAllowed:permissionElement.rpcName parameter:parameter permissionItems:permissions hmiLevel:hmiLevel]) {
+ hasAllowed = YES;
+ } else {
+ hasDisallowed = YES;
+ }
+ }
+ }
}
if (hasAllowed && hasDisallowed) {
@@ -122,11 +147,28 @@ NS_ASSUME_NONNULL_BEGIN
}
- (NSDictionary<SDLPermissionRPCName, NSNumber *> *)statusOfRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames {
- NSMutableDictionary<SDLPermissionRPCName, NSNumber *> *permissionAllowedDict = [NSMutableDictionary dictionary];
+ NSArray *permissionElementsArray = [self sdl_createPermissionElementsFromRPCNames:rpcNames];
- for (NSString *rpcName in rpcNames) {
- BOOL allowed = [self isRPCAllowed:rpcName];
- permissionAllowedDict[rpcName] = @(allowed);
+ // Convert the dictionary returned from statusesOfRPCNames: to the correct return type
+ return [self sdl_convertPermissionsStatusDictionaryToPermissionsBoolDictionary:[self statusesOfRPCPermissions:permissionElementsArray]];
+}
+
+- (NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *)statusesOfRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames {
+ NSMutableDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *permissionAllowedDict = [NSMutableDictionary dictionary];
+
+ for (SDLPermissionElement *permissionElement in rpcNames) {
+ if (permissionElement == nil) { continue; }
+
+ NSMutableDictionary<NSString *, NSNumber *> *rpcParameters = [NSMutableDictionary dictionary];
+ if (permissionElement.parameterPermissions != nil) {
+ for (NSString *permissionParameter in permissionElement.parameterPermissions) {
+ BOOL isParameterAllowed = [self.class sdl_isPermissionParameterAllowed:permissionElement.rpcName parameter:permissionParameter permissionItems:self.permissions hmiLevel:self.currentHMILevel];
+ rpcParameters[permissionParameter] = @(isParameterAllowed);
+ }
+ }
+
+ SDLRPCPermissionStatus *permissionStatus = [[SDLRPCPermissionStatus alloc] initWithRPCName:permissionElement.rpcName isRPCAllowed:[self isRPCNameAllowed:permissionElement.rpcName] rpcParameters:rpcParameters];
+ permissionAllowedDict[permissionElement.rpcName] = permissionStatus;
}
return [permissionAllowedDict copy];
@@ -138,7 +180,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Add Observers
- (SDLPermissionObserverIdentifier)addObserverForRPCs:(NSArray<SDLPermissionRPCName> *)rpcNames groupType:(SDLPermissionGroupType)groupType withHandler:(nonnull SDLPermissionsChangedHandler)handler {
- SDLPermissionFilter *filter = [SDLPermissionFilter filterWithRPCNames:rpcNames groupType:groupType observer:handler];
+ SDLPermissionFilter *filter = [[SDLPermissionFilter alloc] initWithPermissions:[self sdl_createPermissionElementsFromRPCNames:rpcNames] groupType:groupType permissionsHandler:handler];
// Store the filter for later use
[self.filters addObject:filter];
@@ -149,11 +191,31 @@ NS_ASSUME_NONNULL_BEGIN
return filter.identifier;
}
-- (void)sdl_callFilterObserver:(SDLPermissionFilter *)filter {
- SDLPermissionGroupStatus permissionStatus = [self groupStatusOfRPCs:filter.rpcNames];
- NSDictionary<SDLPermissionRPCName, NSNumber *> *allowedDict = [self statusOfRPCs:filter.rpcNames];
+- (SDLPermissionObserverIdentifier)subscribeToRPCPermissions:(NSArray<SDLPermissionElement *> *)rpcNames groupType:(SDLPermissionGroupType)groupType withHandler:(SDLRPCPermissionStatusChangedHandler)handler {
+ SDLPermissionFilter *filter = [[SDLPermissionFilter alloc] initWithPermissions:rpcNames groupType:groupType permissionStatusHandler:handler];
+
+ // Store the filter for later use
+ [self.filters addObject:filter];
+
+ // Check permission status and group type to see if we need to call handler immediately after setting the observer
+ SDLPermissionGroupStatus permissionStatus = [self groupStatusOfRPCPermissions:filter.permissionElements];
+ if ((groupType == SDLPermissionGroupTypeAny) || (groupType == SDLPermissionGroupTypeAllAllowed && permissionStatus == SDLPermissionGroupStatusAllowed)) {
+ [self sdl_callFilterObserver:filter];
+ }
- filter.handler(allowedDict, permissionStatus);
+ return filter.identifier;
+}
+
+- (void)sdl_callFilterObserver:(SDLPermissionFilter *)filter {
+ SDLPermissionGroupStatus permissionStatus = [self groupStatusOfRPCPermissions:filter.permissionElements];
+
+ if (filter.rpcPermissionStatusHandler != nil) {
+ NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *allowedDict = [self statusesOfRPCPermissions:filter.permissionElements];
+ filter.rpcPermissionStatusHandler(allowedDict, permissionStatus);
+ } else if (filter.handler != nil) {
+ NSDictionary<SDLRPCFunctionName, NSNumber *> *allowedDict = [self sdl_convertPermissionsStatusDictionaryToPermissionsBoolDictionary:[self statusesOfRPCPermissions:filter.permissionElements]];
+ filter.handler(allowedDict, permissionStatus);
+ }
}
#pragma mark Remove Observers
@@ -203,7 +265,7 @@ NS_ASSUME_NONNULL_BEGIN
for (SDLPermissionFilter *filter in modifiedFilters) {
if (filter.groupType == SDLPermissionGroupTypeAllAllowed) {
SDLPermissionGroupStatus oldStatus = [allAllowedFiltersWithOldStatus[filter.identifier] unsignedIntegerValue];
- SDLPermissionGroupStatus newStatus = [self groupStatusOfRPCs:filter.rpcNames];
+ SDLPermissionGroupStatus newStatus = [self groupStatusOfRPCPermissions:filter.permissionElements];
// We've already eliminated the case where the permissions could stay the same, so if the permissions changed *to* allowed or *away* from allowed, we need to call the observer.
if (newStatus == SDLPermissionGroupStatusAllowed || oldStatus == SDLPermissionGroupStatusAllowed) {
@@ -233,7 +295,7 @@ NS_ASSUME_NONNULL_BEGIN
if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) {
return;
}
-
+
SDLHMILevel oldHMILevel = [self.currentHMILevel copy];
self.currentHMILevel = hmiStatus.hmiLevel;
NSArray<SDLPermissionFilter *> *filters = [self.filters copy];
@@ -261,6 +323,39 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Helper Methods
/**
+ * HAX: Remove this when statusOfRPCs: is no longer supported. Converts a dictionary from <SDLRPCFunctionName, SDLRPCPermissionStatus*> to <SDLPermissionRPCName, NSNumber *>.
+ *
+ * @param permissionStatusDictionary The dictionary containing <SDLRPCFunctionName, SDLRPCPermissionStatus*> to convert.
+ *
+ * @return A <SDLPermissionRPCName, NSNumber *> dictionary.
+ */
+- (NSDictionary<SDLPermissionRPCName, NSNumber *> *)sdl_convertPermissionsStatusDictionaryToPermissionsBoolDictionary:(NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus*> *)permissionStatusDictionary {
+ NSMutableDictionary *rpcNameDictionary = [[NSMutableDictionary alloc] init];
+ [permissionStatusDictionary enumerateKeysAndObjectsUsingBlock:^(SDLRPCFunctionName _Nonnull key, SDLRPCPermissionStatus * _Nonnull obj, BOOL * _Nonnull stop) {
+ [rpcNameDictionary setObject:@(obj.rpcAllowed) forKey:key];
+ }];
+
+ return rpcNameDictionary;
+}
+
+/**
+ * Converts an array of RPC name strings to permission elements.
+ *
+ * @param rpcNames The RPC names to convert.
+ *
+ * @return An array of permission elements.
+ */
+- (NSArray<SDLPermissionElement *> *)sdl_createPermissionElementsFromRPCNames:(NSArray<SDLRPCFunctionName> *)rpcNames {
+ NSMutableArray *permissionElements = [[NSMutableArray alloc] init];
+ for (NSString *rpcName in rpcNames) {
+ SDLPermissionElement *permissionElement = [[SDLPermissionElement alloc] initWithRPCName:rpcName parameterPermissions:nil];
+ [permissionElements addObject:permissionElement];
+ }
+
+ return [permissionElements copy];
+}
+
+/**
* Determine if a filter changes based on an HMI level change and the filter's group type settings. This will run through the filter's RPCs, check the permission for each and see if any permission within the filter changes based on some permission now being allowed when it wasn't, or not allowed when it was. This also takes into account the group type setting, so an All Allowed filter will return YES if and only if some permission changed *and* that causes a status change *to* or *from* Allowed.
*
* @param filter The filter to check
@@ -271,7 +366,7 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (BOOL)sdl_didFilterChange:(SDLPermissionFilter *)filter fromHMILevel:(SDLHMILevel)oldHMILevel toHMILevel:(SDLHMILevel)newHMILevel {
BOOL changed = NO;
- for (NSString *rpcName in filter.rpcNames) {
+ for (NSString *rpcName in [filter rpcNamesFromPermissionElements:filter.permissionElements]) {
SDLPermissionItem *item = self.permissions[rpcName];
BOOL newAllowed = [item.hmiPermissions.allowed containsObject:self.currentHMILevel];
BOOL oldAllowed = [item.hmiPermissions.allowed containsObject:oldHMILevel];
@@ -289,8 +384,8 @@ NS_ASSUME_NONNULL_BEGIN
// This is only for the All Allowed group type. Unlike with the Any group type, we need to know if the group status has changed
if (changed) {
- SDLPermissionGroupStatus oldStatus = [self.class sdl_groupStatusOfRPCs:filter.rpcNames withPermissions:self.permissions hmiLevel:oldHMILevel];
- SDLPermissionGroupStatus newStatus = [self.class sdl_groupStatusOfRPCs:filter.rpcNames withPermissions:self.permissions hmiLevel:newHMILevel];
+ SDLPermissionGroupStatus oldStatus = [self.class sdl_groupStatusOfRPCPermissions:filter.permissionElements withPermissions:self.permissions hmiLevel:oldHMILevel];
+ SDLPermissionGroupStatus newStatus = [self.class sdl_groupStatusOfRPCPermissions:filter.permissionElements withPermissions:self.permissions hmiLevel:newHMILevel];
// We've already eliminated the case where the permissions could stay the same, so if the permissions changed *to* allowed or *away* from allowed, we need to call the observer.
if (newStatus == SDLPermissionGroupStatusAllowed || oldStatus == SDLPermissionGroupStatusAllowed) {
@@ -313,7 +408,7 @@ NS_ASSUME_NONNULL_BEGIN
NSMutableDictionary<SDLPermissionFilter *, NSNumber<SDLInt> *> *filtersWithStatus = [NSMutableDictionary dictionary];
for (SDLPermissionFilter *filter in filters) {
if (filter.groupType == SDLPermissionGroupTypeAllAllowed) {
- filtersWithStatus[filter.identifier] = @([self groupStatusOfRPCs:filter.rpcNames]);
+ filtersWithStatus[filter.identifier] = @([self groupStatusOfRPCPermissions:filter.permissionElements]);
}
}
@@ -335,7 +430,7 @@ NS_ASSUME_NONNULL_BEGIN
for (SDLPermissionFilter *filter in filters) {
NSArray<SDLPermissionItem *> *modifiedPermissionItems = [self sdl_modifiedUpdatedPermissions:updatedPermissions comparedToCurrentPermissions:currentPermissions];
for (SDLPermissionItem *item in modifiedPermissionItems) {
- if ([filter.rpcNames containsObject:item.rpcName]) {
+ if ([[filter rpcNamesFromPermissionElements:filter.permissionElements] containsObject:item.rpcName]) {
[modifiedFilters addObject:filter];
break;
}
@@ -368,12 +463,31 @@ NS_ASSUME_NONNULL_BEGIN
}
- (BOOL)rpcRequiresEncryption:(SDLPermissionRPCName)rpcName {
+ return [self rpcNameRequiresEncryption:rpcName];
+}
+
+- (BOOL)rpcNameRequiresEncryption:(SDLRPCFunctionName)rpcName {
if (self.permissions[rpcName].requireEncryption != nil) {
return self.permissions[rpcName].requireEncryption.boolValue;
}
return NO;
}
+- (BOOL)isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString *)parameter {
+ return [self.class sdl_isPermissionParameterAllowed:rpcName parameter:parameter permissionItems:self.permissions hmiLevel:self.currentHMILevel];
+}
+
++ (BOOL)sdl_isPermissionParameterAllowed:(SDLRPCFunctionName)rpcName parameter:(NSString *)parameter permissionItems:(NSDictionary<SDLPermissionRPCName, SDLPermissionItem *> *)permissionItems hmiLevel:(SDLHMILevel)hmiLevel {
+ SDLPermissionItem *permissionItem = permissionItems[rpcName];
+ if (permissionItem == nil || ![self isRPCNameAllowed:rpcName permissions:permissionItems hmiLevel:hmiLevel] || permissionItem.parameterPermissions == nil || permissionItem.parameterPermissions.allowed == nil) {
+ return NO;
+ } else if (permissionItem.parameterPermissions.userDisallowed != nil) {
+ return [permissionItem.parameterPermissions.allowed containsObject:parameter] && ![permissionItem.parameterPermissions.userDisallowed containsObject:parameter];
+ } else {
+ return [permissionItem.parameterPermissions.allowed containsObject:parameter];
+ }
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPolicyDataParser.h b/SmartDeviceLink/SDLPolicyDataParser.h
deleted file mode 100644
index cdc763b1e..000000000
--- a/SmartDeviceLink/SDLPolicyDataParser.h
+++ /dev/null
@@ -1,35 +0,0 @@
-//
-// PolicyDataParser.h
-//
-
-#import <Foundation/Foundation.h>
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface SDLPolicyDataParser : NSObject
-
-@property (assign, nonatomic) Byte protocolVersion;
-@property (assign, nonatomic) BOOL isResponseRequired;
-@property (assign, nonatomic) BOOL isHighBandwidth;
-@property (assign, nonatomic) BOOL isSigned;
-@property (assign, nonatomic) BOOL isEncrypted;
-@property (assign, nonatomic) BOOL hasESN;
-@property (assign, nonatomic) Byte serviceType;
-@property (assign, nonatomic) Byte commandType;
-@property (assign, nonatomic) BOOL CPUDestination;
-@property (assign, nonatomic) Byte encryptionKeyIndex;
-@property (assign, nonatomic) UInt32 payloadSize;
-@property (strong, nonatomic) NSData *ESN;
-@property (assign, nonatomic) UInt32 moduleMessageId;
-@property (assign, nonatomic) UInt32 serverMessageId;
-@property (assign, nonatomic) Byte messageStatus;
-@property (strong, nonatomic) NSData *initializationVector;
-@property (strong, nonatomic) NSData *payload;
-@property (strong, nonatomic) NSData *signatureTag;
-
-- (nullable NSData *)unwrap:(NSData *)wrappedData;
-- (void)parsePolicyData:(NSData *)data;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPolicyDataParser.m b/SmartDeviceLink/SDLPolicyDataParser.m
deleted file mode 100644
index 9e23aeedc..000000000
--- a/SmartDeviceLink/SDLPolicyDataParser.m
+++ /dev/null
@@ -1,143 +0,0 @@
-//
-// PolicyDataParser.m
-//
-
-#import "SDLPolicyDataParser.h"
-#import "SDLLogMacros.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@implementation SDLPolicyDataParser
-
-- (nullable NSData *)unwrap:(NSData *)wrappedData {
- NSData *decodedData = nil;
-
- @try {
- NSError *errorJSONSerialization = nil;
- NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:wrappedData options:kNilOptions error:&errorJSONSerialization];
- NSArray<NSString *> *array = dictionary[@"data"];
- NSString *base64EncodedString = array[0];
-
- if ([NSData instancesRespondToSelector:@selector(initWithBase64EncodedString:options:)]) {
- decodedData = [[NSData alloc] initWithBase64EncodedString:base64EncodedString options:0];
- } else {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- decodedData = [[NSData alloc] initWithBase64Encoding:base64EncodedString];
-#pragma clang diagnostic pop
- }
- }
- @catch (NSException *exception) {
- decodedData = nil;
- SDLLogW(@"%@", exception);
- }
-
- return decodedData;
-}
-
-- (void)parsePolicyData:(NSData *)data {
- @try {
- Byte *bytes = (Byte *)data.bytes;
-
- Byte firstByte = bytes[0];
- self.protocolVersion = (firstByte & 0b11100000) >> 5;
- self.isResponseRequired = (firstByte & 0b00010000) != 0;
- self.isHighBandwidth = (firstByte & 0b00001000) != 0;
- self.isSigned = (firstByte & 0b00000100) != 0;
- self.isEncrypted = (firstByte & 0b00000010) != 0;
- self.hasESN = (firstByte & 0b00000001) != 0;
-
- self.serviceType = bytes[1];
-
- Byte thirdByte = bytes[2];
- self.commandType = (thirdByte & 0b11110000) >> 4;
- self.CPUDestination = (thirdByte & 0b00001000) != 0;
- self.encryptionKeyIndex = (thirdByte & 0b00000111);
-
- const int PayloadSizeOffset = 3;
- if (self.isHighBandwidth) {
- self.payloadSize = ntohl(*(UInt32 *)(bytes + PayloadSizeOffset));
- } else {
- self.payloadSize = ntohs(*(UInt16 *)(bytes + PayloadSizeOffset));
- }
-
- if (self.hasESN) {
- int esnOffset = self.isHighBandwidth ? 7 : 5;
- self.ESN = [NSData dataWithBytes:(bytes + esnOffset) length:8];
- }
-
- if (self.isHighBandwidth) {
- int moduleMessageIdOffset = 7;
- if (self.hasESN)
- moduleMessageIdOffset += self.ESN.length;
- self.moduleMessageId = ntohl(*(UInt32 *)(bytes + moduleMessageIdOffset));
-
- int serverMessageIdOffset = 11;
- if (self.hasESN)
- serverMessageIdOffset += self.ESN.length;
- self.serverMessageId = ntohl(*(UInt32 *)(bytes + serverMessageIdOffset));
-
- int messageStatusOffset = 15;
- if (self.hasESN)
- messageStatusOffset += self.ESN.length;
- self.messageStatus = bytes[messageStatusOffset];
- }
-
- if (self.isEncrypted) {
- int ivOffset = 5;
- if (self.isHighBandwidth)
- ivOffset += 11;
- if (self.hasESN)
- ivOffset += self.ESN.length;
- self.initializationVector = [NSData dataWithBytes:(bytes + ivOffset) length:16];
- }
-
- int payloadOffset = 5;
- if (self.isHighBandwidth) {
- payloadOffset += 11;
- }
- if (self.hasESN) {
- payloadOffset += self.ESN.length;
- }
- if (self.isEncrypted) {
- payloadOffset += self.initializationVector.length;
- }
-
- self.payload = [NSData dataWithBytes:(bytes + payloadOffset) length:self.payloadSize];
-
- if (self.isSigned) {
- int signatureTagOffset = (int)data.length - 16;
- self.signatureTag = [NSData dataWithBytes:(bytes + signatureTagOffset) length:16];
- }
- }
- @catch (NSException *exception) {
- SDLLogW(@"%@", exception);
- }
-}
-
-- (NSString *)description {
- NSString *esnString = [[NSString alloc] initWithData:self.ESN encoding:NSUTF8StringEncoding];
-
- NSMutableString *descriptionString = [NSMutableString stringWithFormat:@"Ver:%u; ", self.protocolVersion];
- [descriptionString appendFormat:@"RespReq:%u; ", self.isResponseRequired];
- [descriptionString appendFormat:@"HiBnd:%u; ", self.isHighBandwidth];
- [descriptionString appendFormat:@"Sign:%u; ", self.isSigned];
- [descriptionString appendFormat:@"Enc:%u; ", self.isEncrypted];
- [descriptionString appendFormat:@"HasESN:%u; ", self.hasESN];
- [descriptionString appendFormat:@"Svc:%u; ", self.serviceType];
- [descriptionString appendFormat:@"Cmd:%u; ", self.commandType];
- [descriptionString appendFormat:@"CPU:%u; ", self.CPUDestination];
- [descriptionString appendFormat:@"EncKey:%u; ", self.encryptionKeyIndex];
- [descriptionString appendFormat:@"sz:%u; ", (unsigned int)self.payloadSize];
- [descriptionString appendFormat:@"ESN:%@; ", esnString];
- [descriptionString appendFormat:@"mmid:%u; ", (unsigned int)self.moduleMessageId];
- [descriptionString appendFormat:@"smid:%u; ", (unsigned int)self.serverMessageId];
- [descriptionString appendFormat:@"status:%u; ", self.messageStatus];
- [descriptionString appendFormat:@"iv:%@; ", self.initializationVector];
- [descriptionString appendFormat:@"hmac:%@", self.signatureTag];
- return descriptionString;
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPredefinedLayout.h b/SmartDeviceLink/SDLPredefinedLayout.h
index f56c275bb..73a076eac 100644
--- a/SmartDeviceLink/SDLPredefinedLayout.h
+++ b/SmartDeviceLink/SDLPredefinedLayout.h
@@ -108,3 +108,12 @@ extern SDLPredefinedLayout const SDLPredefinedLayoutDoubleGraphicWithSoftButtons
A layout with only a single large graphic
*/
extern SDLPredefinedLayout const SDLPredefinedLayoutLargeGraphicOnly;
+
+
+/**
+ Custom root template allowing in-vehicle WebEngine applications with
+ appropriate permissions to show the application's own web view.
+
+ @since 7.0
+ */
+extern SDLPredefinedLayout const SDLPredefinedLayoutWebView;
diff --git a/SmartDeviceLink/SDLPredefinedLayout.m b/SmartDeviceLink/SDLPredefinedLayout.m
index 08a0c29e8..691be5e3d 100644
--- a/SmartDeviceLink/SDLPredefinedLayout.m
+++ b/SmartDeviceLink/SDLPredefinedLayout.m
@@ -24,3 +24,4 @@ SDLPredefinedLayout const SDLPredefinedLayoutTextButtonsWithGraphic = @"TEXTBUTT
SDLPredefinedLayout const SDLPredefinedLayoutLargeGraphicWithSoftButtons = @"LARGE_GRAPHIC_WITH_SOFTBUTTONS";
SDLPredefinedLayout const SDLPredefinedLayoutDoubleGraphicWithSoftButtons = @"DOUBLE_GRAPHIC_WITH_SOFTBUTTONS";
SDLPredefinedLayout const SDLPredefinedLayoutLargeGraphicOnly = @"LARGE_GRAPHIC_ONLY";
+SDLPredefinedLayout const SDLPredefinedLayoutWebView = @"WEB_VIEW";
diff --git a/SmartDeviceLink/SDLPreloadChoicesOperation.m b/SmartDeviceLink/SDLPreloadChoicesOperation.m
index d812ed525..82f7435ff 100644
--- a/SmartDeviceLink/SDLPreloadChoicesOperation.m
+++ b/SmartDeviceLink/SDLPreloadChoicesOperation.m
@@ -19,7 +19,7 @@
#import "SDLImage.h"
#import "SDLLogMacros.h"
#import "SDLWindowCapability.h"
-#import "SDLWindowCapability+ShowManagerExtensions.h"
+#import "SDLWindowCapability+ScreenManagerExtensions.h"
NS_ASSUME_NONNULL_BEGIN
@@ -87,12 +87,10 @@ NS_ASSUME_NONNULL_BEGIN
NSMutableArray<SDLArtwork *> *artworksToUpload = [NSMutableArray arrayWithCapacity:self.cellsToUpload.count];
for (SDLChoiceCell *cell in self.cellsToUpload) {
- if ([self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage]
- && [self sdl_artworkNeedsUpload:cell.artwork]) {
+ if ([self sdl_shouldSendChoicePrimaryImage] && [self sdl_artworkNeedsUpload:cell.artwork]) {
[artworksToUpload addObject:cell.artwork];
}
- if ([self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage]
- && [self sdl_artworkNeedsUpload:cell.secondaryArtwork]) {
+ if ([self sdl_shouldSendChoiceSecondaryImage] && [self sdl_artworkNeedsUpload:cell.secondaryArtwork]) {
[artworksToUpload addObject:cell.secondaryArtwork];
}
}
@@ -185,6 +183,7 @@ NS_ASSUME_NONNULL_BEGIN
return [[SDLCreateInteractionChoiceSet alloc] initWithId:(UInt32)choice.choiceID.unsignedIntValue choiceSet:@[choice]];
}
+/// Determine if we should send primary text. If textFields is nil, we don't know the capabilities and we will send everything.
- (BOOL)sdl_shouldSendChoiceText {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -193,23 +192,27 @@ NS_ASSUME_NONNULL_BEGIN
}
#pragma clang diagnostic pop
- return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMenuName] : YES;
+ return [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMenuName];
}
+/// Determine if we should send secondary text. If textFields is nil, we don't know the capabilities and we will send everything.
- (BOOL)sdl_shouldSendChoiceSecondaryText {
- return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameSecondaryText] : YES;
+ return [self.windowCapability hasTextFieldOfName:SDLTextFieldNameSecondaryText];
}
+/// Determine if we should send teriary text. If textFields is nil, we don't know the capabilities and we will send everything.
- (BOOL)sdl_shouldSendChoiceTertiaryText {
- return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTertiaryText] : YES;
+ return [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTertiaryText];
}
+/// Determine if we should send the primary image. If imageFields is nil, we don't know the capabilities and we will send everything.
- (BOOL)sdl_shouldSendChoicePrimaryImage {
- return (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage] : YES;
+ return [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceImage];
}
+/// Determine if we should send the secondary image. If imageFields is nil, we don't know the capabilities and we will send everything.
- (BOOL)sdl_shouldSendChoiceSecondaryImage {
- return (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage] : YES;
+ return [self.windowCapability hasImageFieldOfName:SDLImageFieldNameChoiceSecondaryImage];
}
#pragma mark - Property Overrides
diff --git a/SmartDeviceLink/SDLProtocol.h b/SmartDeviceLink/SDLProtocol.h
index 4f8954026..a9a21f66d 100644
--- a/SmartDeviceLink/SDLProtocol.h
+++ b/SmartDeviceLink/SDLProtocol.h
@@ -5,7 +5,7 @@
#import "SDLTransportType.h"
#import "SDLProtocolConstants.h"
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
#import "SDLSecurityType.h"
#import "SDLTransportDelegate.h"
@@ -28,7 +28,7 @@ typedef NS_ENUM(NSUInteger, SDLProtocolError) {
extern NSString *const SDLProtocolSecurityErrorDomain;
-@interface SDLProtocol : NSObject <SDLProtocolListener, SDLTransportDelegate>
+@interface SDLProtocol : NSObject <SDLProtocolDelegate, SDLTransportDelegate>
/**
* Deprecated debug logging tool.
@@ -38,20 +38,23 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
/**
* The transport layer for sending data between the app and Core
*/
-@property (nullable, weak, nonatomic) id<SDLTransportType> transport;
+@property (nullable, strong, nonatomic) id<SDLTransportType> transport;
/**
* A table for tracking all subscribers
*
* If you update protocolDelegateTable while the protocol is running, please make sure to guard with @synchronized.
*/
-@property (nullable, strong, nonatomic) NSHashTable<id<SDLProtocolListener>> *protocolDelegateTable;
+@property (nullable, strong, nonatomic) NSHashTable<id<SDLProtocolDelegate>> *protocolDelegateTable;
/**
* A security manager for sending encrypted data.
*/
@property (nullable, nonatomic, strong) id<SDLSecurityType> securityManager;
+/// The encryption manager for sending encrypted data
+@property (nullable, nonatomic, weak) SDLEncryptionLifecycleManager *encryptionLifecycleManager;
+
/**
* The app's id
*/
@@ -63,14 +66,25 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
@property (strong, nonatomic, readonly, nullable) NSString *authToken;
#pragma mark - Init
+- (instancetype)init NS_UNAVAILABLE;
+
/**
- * Initialize the protocol with an encryption lifecycle manager.
+ * Initialize the protocol with an encryption lifecycle manager
*
- * @param encryptionLifecycleManager An encryption lifecycle manager.
+ * @param transport The transport to send and receive data from
+ * @param encryptionManager An encryption lifecycle manager
*
- * @return An instance of SDLProtocol
+ * @return An instance of SDLProtocol
*/
-- (instancetype)initWithEncryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager;
+- (instancetype)initWithTransport:(id<SDLTransportType>)transport encryptionManager:(nullable SDLEncryptionLifecycleManager *)encryptionManager;
+
+#pragma mark - Lifecycle
+
+/// Starts the connected transport
+- (void)start;
+
+/// Stops the connected transport
+- (void)stopWithCompletionHandler:(void (^)(void))disconnectCompletionHandler;
#pragma mark - Sending
@@ -137,15 +151,6 @@ extern NSString *const SDLProtocolSecurityErrorDomain;
*/
- (void)sendEncryptedRawData:(NSData *)data onService:(SDLServiceType)serviceType;
-#pragma mark - Recieving
-
-/**
- * Turns received bytes into message objects.
- *
- * @param receivedData The data received from Core
- */
-- (void)handleBytesFromTransport:(NSData *)receivedData;
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProtocol.m b/SmartDeviceLink/SDLProtocol.m
index 29c7ca38f..d9d3c03d7 100644
--- a/SmartDeviceLink/SDLProtocol.m
+++ b/SmartDeviceLink/SDLProtocol.m
@@ -47,7 +47,6 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, strong, nonatomic) SDLProtocolReceivedMessageRouter *messageRouter;
@property (strong, nonatomic) NSMutableDictionary<SDLServiceTypeBox *, SDLProtocolHeader *> *serviceHeaders;
@property (assign, nonatomic) int32_t hashId;
-@property (nonatomic, strong) SDLEncryptionLifecycleManager *encryptionLifecycleManager;
// Readonly public properties
@property (strong, nonatomic, readwrite, nullable) NSString *authToken;
@@ -61,35 +60,40 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Lifecycle
-- (instancetype)init {
- if (self = [super init]) {
- _messageID = 0;
- _hashId = SDLControlFrameInt32NotFound;
- _prioritizedCollection = [[SDLPrioritizedObjectCollection alloc] init];
- _protocolDelegateTable = [NSHashTable weakObjectsHashTable];
- _serviceHeaders = [[NSMutableDictionary alloc] init];
- _messageRouter = [[SDLProtocolReceivedMessageRouter alloc] init];
- _messageRouter.delegate = self;
- }
+- (instancetype)initWithTransport:(id<SDLTransportType>)transport encryptionManager:(nullable SDLEncryptionLifecycleManager *)encryptionManager {
+ self = [super init];
+ if (!self) { return nil; }
- return self;
-}
+ SDLLogV(@"Initializing protocol with transport: %@, encryption manager: %@", transport, encryptionManager);
+ _messageID = 0;
+ _hashId = SDLControlFrameInt32NotFound;
+ _prioritizedCollection = [[SDLPrioritizedObjectCollection alloc] init];
+ _protocolDelegateTable = [NSHashTable weakObjectsHashTable];
+ _serviceHeaders = [[NSMutableDictionary alloc] init];
+ _messageRouter = [[SDLProtocolReceivedMessageRouter alloc] init];
+ _messageRouter.delegate = self;
-- (instancetype)initWithEncryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager {
- if (self = [super init]) {
- _messageID = 0;
- _hashId = SDLControlFrameInt32NotFound;
- _prioritizedCollection = [[SDLPrioritizedObjectCollection alloc] init];
- _protocolDelegateTable = [NSHashTable weakObjectsHashTable];
- _serviceHeaders = [[NSMutableDictionary alloc] init];
- _messageRouter = [[SDLProtocolReceivedMessageRouter alloc] init];
- _messageRouter.delegate = self;
- _encryptionLifecycleManager = encryptionLifecycleManager;
- }
+ _transport = transport;
+ _transport.delegate = self;
+
+ _encryptionLifecycleManager = encryptionManager;
return self;
}
+- (void)start {
+ SDLLogD(@"Starting protocol: %@", self);
+ [self.transport connect];
+}
+
+- (void)stopWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
+ SDLLogD(@"Stopping protocol: %@, disconnecting transport and stopping security manager", self);
+ [self.securityManager stop];
+ [self.transport disconnectWithCompletionHandler:^{
+ disconnectCompletionHandler();
+ }];
+}
+
#pragma mark - Service metadata
- (BOOL)storeHeader:(SDLProtocolHeader *)header forServiceType:(SDLServiceType)serviceType {
if (header == nil) {
@@ -104,7 +108,12 @@ NS_ASSUME_NONNULL_BEGIN
- (UInt8)sdl_retrieveSessionIDforServiceType:(SDLServiceType)serviceType {
SDLProtocolHeader *header = self.serviceHeaders[@(serviceType)];
if (header == nil) {
- SDLLogW(@"Warning: Tried to retrieve sessionID for serviceType %i, but no header is saved for that service type", serviceType);
+ // The first time the RPC service type is created, there's no header, so we don't need to warn.
+ if (serviceType != SDLServiceTypeRPC) {
+ SDLLogW(@"Warning: Tried to retrieve sessionID for serviceType %i, but no header is saved for that service type.", serviceType);
+ }
+
+ return 0;
}
return header.sessionID;
@@ -113,37 +122,40 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - SDLTransportDelegate
- (void)onTransportConnected {
- NSArray<id<SDLProtocolListener>> *listeners;
+ SDLLogV(@"Transport connected, opening protocol");
+ NSArray<id<SDLProtocolDelegate>> *listeners;
@synchronized(self.protocolDelegateTable) {
listeners = self.protocolDelegateTable.allObjects;
}
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onProtocolOpened)]) {
- [listener onProtocolOpened];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocolDidOpen:)]) {
+ [listener protocolDidOpen:self];
}
}
}
- (void)onTransportDisconnected {
- NSArray<id<SDLProtocolListener>> *listeners;
+ SDLLogV(@"Transport disconnected, closing protocol");
+ NSArray<id<SDLProtocolDelegate>> *listeners;
@synchronized(self.protocolDelegateTable) {
listeners = self.protocolDelegateTable.allObjects;
}
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onProtocolClosed)]) {
- [listener onProtocolClosed];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocolDidClose:)]) {
+ [listener protocolDidClose:self];
}
}
}
- (void)onDataReceived:(NSData *)receivedData {
- [self handleBytesFromTransport:receivedData];
+ [self sdl_handleBytesFromTransport:receivedData];
}
- (void)onError:(NSError *)error {
- for (id<SDLProtocolListener> listener in self.protocolDelegateTable.allObjects) {
- if ([listener respondsToSelector:@selector(onTransportError:)]) {
- [listener onTransportError:error];
+ SDLLogV(@"Transport received an error: %@", error);
+ for (id<SDLProtocolDelegate> listener in self.protocolDelegateTable.allObjects) {
+ if ([listener respondsToSelector:@selector(protocol:transportDidError:)]) {
+ [listener protocol:self transportDidError:error];
}
}
}
@@ -153,10 +165,12 @@ NS_ASSUME_NONNULL_BEGIN
- (void)startServiceWithType:(SDLServiceType)serviceType payload:(nullable NSData *)payload {
// No encryption, just build and send the message synchronously
SDLProtocolMessage *message = [self sdl_createStartServiceMessageWithType:serviceType encrypted:NO payload:payload];
+ SDLLogD(@"Sending start service: %@", message);
[self sdl_sendDataToTransport:message.data onService:serviceType];
}
- (void)startSecureServiceWithType:(SDLServiceType)serviceType payload:(nullable NSData *)payload tlsInitializationHandler:(void (^)(BOOL success, NSError *error))tlsInitializationHandler {
+ SDLLogD(@"Attempting to start TLS for service type: %hhu", serviceType);
[self sdl_initializeTLSEncryptionWithCompletionHandler:^(BOOL success, NSError *error) {
if (!success) {
// We can't start the service because we don't have encryption, return the error
@@ -166,6 +180,7 @@ NS_ASSUME_NONNULL_BEGIN
// TLS initialization succeeded. Build and send the message.
SDLProtocolMessage *message = [self sdl_createStartServiceMessageWithType:serviceType encrypted:YES payload:nil];
+ SDLLogD(@"TLS initialized, sending start service for message: %@", message);
[self sdl_sendDataToTransport:message.data onService:serviceType];
}];
}
@@ -174,22 +189,7 @@ NS_ASSUME_NONNULL_BEGIN
SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:(UInt8)[SDLGlobals sharedGlobals].protocolVersion.major];
NSData *servicePayload = payload;
- switch (serviceType) {
- case SDLServiceTypeRPC: {
- // Need a different header for starting the RPC service, we get the session Id from the HU, or its the same as the RPC service's
- if ([self sdl_retrieveSessionIDforServiceType:SDLServiceTypeRPC]) {
- header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceTypeRPC];
- } else {
- header.sessionID = 0;
- }
-
- SDLControlFramePayloadRPCStartService *startServicePayload = [[SDLControlFramePayloadRPCStartService alloc] initWithVersion:SDLMaxProxyProtocolVersion];
- servicePayload = startServicePayload.data;
- } break;
- default: {
- header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceTypeRPC];
- } break;
- }
+ header.sessionID = [self sdl_retrieveSessionIDforServiceType:SDLServiceTypeRPC];
header.frameType = SDLFrameTypeControl;
header.serviceType = serviceType;
header.frameData = SDLFrameInfoStartService;
@@ -211,6 +211,7 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
+ SDLLogD(@"Telling security manager to initialize");
[self.securityManager initializeWithAppId:self.appId completionHandler:^(NSError *_Nullable error) {
if (error) {
SDLLogE(@"Security Manager failed to initialize with error: %@", error);
@@ -248,6 +249,7 @@ NS_ASSUME_NONNULL_BEGIN
}
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:payload];
+ SDLLogD(@"Sending end service: %@", message);
[self sdl_sendDataToTransport:message.data onService:serviceType];
}
@@ -255,6 +257,8 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Register Secondary Transport
- (void)registerSecondaryTransport {
+ SDLLogV(@"Attempting to register the secondary transport");
+
SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:(UInt8)[SDLGlobals sharedGlobals].protocolVersion.major];
header.frameType = SDLFrameTypeControl;
header.serviceType = SDLServiceTypeControl;
@@ -265,6 +269,7 @@ NS_ASSUME_NONNULL_BEGIN
}
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+ SDLLogD(@"Sending register secondary transport: %@", message);
[self sdl_sendDataToTransport:message.data onService:SDLServiceTypeControl];
}
@@ -293,7 +298,7 @@ NS_ASSUME_NONNULL_BEGIN
}
NSData *messagePayload = nil;
- SDLLogV(@"Send RPC %@", message);
+ SDLLogV(@"Sending RPC: %@", message);
// Build the message payload. Include the binary header if necessary
// VERSION DEPENDENT CODE
@@ -418,7 +423,7 @@ NS_ASSUME_NONNULL_BEGIN
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:data];
- if (message.size < [[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeRPC]) {
+ if (message.size < [[SDLGlobals sharedGlobals] mtuSizeForServiceType:service]) {
SDLLogV(@"Sending protocol message: %@", message);
[self sdl_sendDataToTransport:message.data onService:header.serviceType];
} else {
@@ -434,7 +439,7 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Receive and Process Data
// Turn received bytes into message objects.
-- (void)handleBytesFromTransport:(NSData *)receivedData {
+- (void)sdl_handleBytesFromTransport:(NSData *)receivedData {
// Initialize the receive buffer which will contain bytes while messages are constructed.
if (self.receiveBuffer == nil) {
self.receiveBuffer = [NSMutableData dataWithCapacity:(4 * [[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeRPC])];
@@ -443,10 +448,10 @@ NS_ASSUME_NONNULL_BEGIN
// Save the data
[self.receiveBuffer appendData:receivedData];
- [self processMessages];
+ [self sdl_processMessages];
}
-- (void)processMessages {
+- (void)sdl_processMessages {
UInt8 incomingVersion = [SDLProtocolHeader determineVersion:self.receiveBuffer];
// If we have enough bytes, create the header.
@@ -479,10 +484,9 @@ NS_ASSUME_NONNULL_BEGIN
}
message = [SDLProtocolMessage messageWithHeader:header andPayload:payload];
- SDLLogV(@"Protocol message received: %@", message);
} else {
// Need to wait for more bytes.
- SDLLogV(@" protocol header complete, message incomplete, waiting for %ld more bytes. Header: %@", (long)(messageSize - self.receiveBuffer.length), header);
+ SDLLogV(@"Protocol header complete, message incomplete, waiting for %ld more bytes. Header: %@", (long)(messageSize - self.receiveBuffer.length), header);
return;
}
@@ -490,16 +494,21 @@ NS_ASSUME_NONNULL_BEGIN
self.receiveBuffer = [[self.receiveBuffer subdataWithRange:NSMakeRange(messageSize, self.receiveBuffer.length - messageSize)] mutableCopy];
// Pass on the message to the message router.
- [self.messageRouter handleReceivedMessage:message];
+ [self.messageRouter handleReceivedMessage:message protocol:self];
// Call recursively until the buffer is empty or incomplete message is encountered
if (self.receiveBuffer.length > 0) {
- [self processMessages];
+ [self sdl_processMessages];
}
}
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
- // V5 Packet
+
+#pragma mark - SDLProtocolDelegate from SDLReceivedProtocolMessageRouter
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
+ SDLLogD(@"Received start service ACK: %@", startServiceACK);
+
+ // V5+ Packet
if (startServiceACK.header.version >= 5) {
switch (startServiceACK.header.serviceType) {
case SDLServiceTypeRPC: {
@@ -521,8 +530,7 @@ NS_ASSUME_NONNULL_BEGIN
default:
break;
}
- } else {
- // V4 and below packet
+ } else { // V4 and below packet
switch (startServiceACK.header.serviceType) {
case SDLServiceTypeRPC: {
[SDLGlobals sharedGlobals].maxHeadUnitProtocolVersion = [SDLVersion versionWithMajor:startServiceACK.header.version minor:0 patch:0];
@@ -536,69 +544,74 @@ NS_ASSUME_NONNULL_BEGIN
self.serviceHeaders[@(startServiceACK.header.serviceType)] = [startServiceACK.header copy];
// Pass along to all the listeners
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolStartServiceACKMessage:)]) {
- [listener handleProtocolStartServiceACKMessage:startServiceACK];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveStartServiceACK:)]) {
+ [listener protocol:protocol didReceiveStartServiceACK:startServiceACK];
}
}
}
-- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK {
[self sdl_logControlNAKPayload:startServiceNAK];
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolStartServiceNAKMessage:)]) {
- [listener handleProtocolStartServiceNAKMessage:startServiceNAK];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveStartServiceNAK:)]) {
+ [listener protocol:protocol didReceiveStartServiceNAK:startServiceNAK];
}
}
}
-- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK {
+ SDLLogD(@"End service ACK: %@", endServiceACK);
// Remove the session id
[self.serviceHeaders removeObjectForKey:@(endServiceACK.header.serviceType)];
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolEndServiceACKMessage:)]) {
- [listener handleProtocolEndServiceACKMessage:endServiceACK];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveEndServiceACK:)]) {
+ [listener protocol:protocol didReceiveEndServiceACK:endServiceACK];
}
}
}
-- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK {
[self sdl_logControlNAKPayload:endServiceNAK];
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolEndServiceNAKMessage:)]) {
- [listener handleProtocolEndServiceNAKMessage:endServiceNAK];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveEndServiceNAK:)]) {
+ [listener protocol:protocol didReceiveEndServiceNAK:endServiceNAK];
}
}
}
-- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportACKMessage:)]) {
- [listener handleProtocolRegisterSecondaryTransportACKMessage:registerSecondaryTransportACK];
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportACK:(SDLProtocolMessage *)registerSecondaryTransportACK {
+ SDLLogD(@"Register Secondary Transport ACK: %@", registerSecondaryTransportACK);
+
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveRegisterSecondaryTransportACK:)]) {
+ [listener protocol:protocol didReceiveRegisterSecondaryTransportACK:registerSecondaryTransportACK];
}
}
}
-- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK {
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportNAK:(SDLProtocolMessage *)registerSecondaryTransportNAK {
[self sdl_logControlNAKPayload:registerSecondaryTransportNAK];
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportNAKMessage:)]) {
- [listener handleProtocolRegisterSecondaryTransportNAKMessage:registerSecondaryTransportNAK];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveRegisterSecondaryTransportNAK:)]) {
+ [listener protocol:protocol didReceiveRegisterSecondaryTransportNAK:registerSecondaryTransportNAK];
}
}
}
- (void)handleHeartbeatForSession:(Byte)session {
+ SDLLogV(@"Received a heartbeat");
+
// Respond with a heartbeat ACK
SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:(UInt8)[SDLGlobals sharedGlobals].protocolVersion.major];
header.frameType = SDLFrameTypeControl;
@@ -608,8 +621,8 @@ NS_ASSUME_NONNULL_BEGIN
SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
[self sdl_sendDataToTransport:message.data onService:header.serviceType];
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
if ([listener respondsToSelector:@selector(handleHeartbeatForSession:)]) {
[listener handleHeartbeatForSession:session];
}
@@ -617,61 +630,40 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)handleHeartbeatACK {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
+ SDLLogV(@"Received a heartbeat ACK");
+
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
if ([listener respondsToSelector:@selector(handleHeartbeatACK)]) {
[listener handleHeartbeatACK];
}
}
}
-- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(handleTransportEventUpdateMessage:)]) {
- [listener handleTransportEventUpdateMessage:transportEventUpdate];
+- (void)protocol:(SDLProtocol *)protocol didReceiveTransportEventUpdate:(SDLProtocolMessage *)transportEventUpdate {
+ SDLLogD(@"Received a transport event update: %@", transportEventUpdate);
+
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveTransportEventUpdate:)]) {
+ [listener protocol:protocol didReceiveTransportEventUpdate:transportEventUpdate];
}
}
}
-- (void)onProtocolMessageReceived:(SDLProtocolMessage *)msg {
+- (void)protocol:(SDLProtocol *)protocol didReceiveMessage:(SDLProtocolMessage *)msg {
// Control service (but not control frame type) messages are TLS handshake messages
if (msg.header.serviceType == SDLServiceTypeControl) {
[self sdl_processSecurityMessage:msg];
return;
}
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onProtocolMessageReceived:)]) {
- [listener onProtocolMessageReceived:msg];
- }
- }
-}
-
-- (void)onProtocolOpened {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onProtocolOpened)]) {
- [listener onProtocolOpened];
- }
- }
-}
-
-- (void)onProtocolClosed {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onProtocolClosed)]) {
- [listener onProtocolClosed];
- }
- }
-}
+ SDLLogV(@"Other protocol message received: %@", msg);
-- (void)onError:(NSString *)info exception:(NSException *)e {
- NSArray<id<SDLProtocolListener>> *listeners = [self sdl_getProtocolListeners];
- for (id<SDLProtocolListener> listener in listeners) {
- if ([listener respondsToSelector:@selector(onError:exception:)]) {
- [listener onError:info exception:e];
+ NSArray<id<SDLProtocolDelegate>> *listeners = [self sdl_getProtocolListeners];
+ for (id<SDLProtocolDelegate> listener in listeners) {
+ if ([listener respondsToSelector:@selector(protocol:didReceiveMessage:)]) {
+ [listener protocol:protocol didReceiveMessage:msg];
}
}
}
@@ -683,21 +675,20 @@ NS_ASSUME_NONNULL_BEGIN
if (nakMessage.header.version >= 5) {
SDLControlFramePayloadNak *endServiceNakPayload = [[SDLControlFramePayloadNak alloc] initWithData:nakMessage.payload];
NSArray<NSString *> *rejectedParams = endServiceNakPayload.rejectedParams;
- if (rejectedParams.count > 0) {
- SDLLogE(@"Start Service NAK'd, service type: %@, rejectedParams: %@", @(nakMessage.header.serviceType), rejectedParams);
- }
+ SDLLogE(@"%@ service NAK'd, service type: %@, rejectedParams: %@", (nakMessage.header.frameData == SDLFrameInfoStartServiceNACK) ? @"Start" : @"End", @(nakMessage.header.serviceType), rejectedParams);
+ } else {
+ SDLLogE(@"NAK received message: %@", nakMessage);
}
} break;
case SDLFrameInfoRegisterSecondaryTransportNACK: {
SDLControlFramePayloadRegisterSecondaryTransportNak *payload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithData:nakMessage.payload];
SDLLogE(@"Register Secondary Transport NAK'd, reason: %@", payload.reason);
} break;
- default:
- break;
+ default: break;
}
}
-- (NSArray<id<SDLProtocolListener>> *)sdl_getProtocolListeners {
+- (NSArray<id<SDLProtocolDelegate>> *)sdl_getProtocolListeners {
@synchronized(self.protocolDelegateTable) {
return self.protocolDelegateTable.allObjects;
}
@@ -705,16 +696,19 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - TLS Handshake
+
// TODO: These should be split out to a separate class to be tested properly
- (void)sdl_processSecurityMessage:(SDLProtocolMessage *)clientHandshakeMessage {
+ SDLLogD(@"Received a security message: %@", clientHandshakeMessage);
+
if (self.securityManager == nil) {
- SDLLogE(@"Failed to process security message because no security manager is set. Message: %@", clientHandshakeMessage);
+ SDLLogE(@"Failed to process security message because no security manager is set.");
return;
}
// Misformatted handshake message, something went wrong
if (clientHandshakeMessage.payload.length <= 12) {
- SDLLogE(@"Security message is malformed, less than 12 bytes. It does not have a protocol header. Message: %@", clientHandshakeMessage);
+ SDLLogE(@"Security message is malformed, less than 12 bytes. It does not have a protocol header.");
}
// Tear off the binary header of the client protocol message to get at the actual TLS handshake
@@ -737,6 +731,7 @@ NS_ASSUME_NONNULL_BEGIN
}
// Send the response or error message. If it's an error message, the module will ACK the Start Service without encryption. If it's a TLS handshake message, the module will ACK with encryption
+ SDLLogD(@"Sending security message: %@", serverSecurityMessage);
[self sdl_sendDataToTransport:serverSecurityMessage.data onService:SDLServiceTypeControl];
}
diff --git a/SmartDeviceLink/SDLProtocolDelegate.h b/SmartDeviceLink/SDLProtocolDelegate.h
new file mode 100644
index 000000000..f3c55902c
--- /dev/null
+++ b/SmartDeviceLink/SDLProtocolDelegate.h
@@ -0,0 +1,98 @@
+// SDLProtocolDelegate.h
+//
+
+#import "SDLProtocolHeader.h"
+
+@class SDLProtocol;
+@class SDLProtocolMessage;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@protocol SDLProtocolDelegate <NSObject>
+
+@optional
+
+
+#pragma mark - Protocol Messages
+
+/// Called when a protocol frame is received.
+/// @param msg A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveMessage:(SDLProtocolMessage *)msg;
+
+/// Called when the start service frame succeeds.
+/// @discussion This frame can be sent on both the primary and secondary transports
+/// @param startServiceACK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK;
+
+/// Called when the start service frame fails.
+/// @discussion This frame can be sent on both the primary and secondary transports
+/// @param startServiceNAK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK;
+
+/// Called when the end service frame succeeds.
+/// @discussion This frame can be sent on both the primary and secondary transports
+/// @param endServiceACK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK;
+
+/// Called when the end service frame fails.
+/// @discussion This frame can be sent on both the primary and secondary transports
+/// @param endServiceNAK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK;
+
+#pragma mark Secondary Transport Messages
+
+/// Called when the secondary transport registration frame succeeds.
+/// @discussion This frame is only sent on the secondary transport
+/// @param registerSecondaryTransportACK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportACK:(SDLProtocolMessage *)registerSecondaryTransportACK;
+
+/// Called when the secondary transport registration frame fails.
+/// @discussion This frame is only sent on the secondary transport
+/// @param registerSecondaryTransportNAK A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportNAK:(SDLProtocolMessage *)registerSecondaryTransportNAK;
+
+/// Called when the status or configuration of one or more transports has updated.
+/// @discussion This frame is only sent on the primary transport
+/// @param transportEventUpdate A SDLProtocolMessage object
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol didReceiveTransportEventUpdate:(SDLProtocolMessage *)transportEventUpdate;
+
+#pragma mark - Transport Lifecycle
+
+/// Called when the transport opens.
+/// @param protocol The transport's protocol
+- (void)protocolDidOpen:(SDLProtocol *)protocol;
+
+/// Called when the transport closes.
+/// @param protocol The transport's protocol
+- (void)protocolDidClose:(SDLProtocol *)protocol;
+
+/// Called when the transport errors.
+/// @discussion Currently only used by TCP transport.
+/// @param error The error
+/// @param protocol The transport's protocol
+- (void)protocol:(SDLProtocol *)protocol transportDidError:(NSError *)error;
+
+#pragma mark - Deprecated Protocol Messages
+
+/// A ping packet that is sent to ensure the connection is still active and the service is still valid.
+/// @discussion Deprecated - requires protocol major version 3
+/// @param session The session number
+- (void)handleHeartbeatForSession:(Byte)session;
+
+/// Called when the heartbeat frame was recieved successfully.
+/// @discussion Deprecated - requires protocol major version 3
+- (void)handleHeartbeatACK;
+
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProtocolListener.h b/SmartDeviceLink/SDLProtocolListener.h
deleted file mode 100644
index e944f25f6..000000000
--- a/SmartDeviceLink/SDLProtocolListener.h
+++ /dev/null
@@ -1,97 +0,0 @@
-// SDLProtocolListener.h
-//
-
-#import "SDLProtocolHeader.h"
-
-@class SDLProtocolMessage;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol SDLProtocolListener <NSObject>
-
-@optional
-
-#pragma mark - v4.7.0 protocol handlers
-
-/**
- * Called when the message is a start service success message.
- *
- * @param startServiceACK A SDLProtocolMessage object
- */
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK;
-
-/**
- * Called when the message is a start service failed message.
- *
- * @param startServiceNAK A SDLProtocolMessage object
- */
-- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK;
-
-/**
- * Called when the message is a end service success message.
- *
- * @param endServiceACK A SDLProtocolMessage object
- */
-- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK;
-
-/**
- * Called when the message is a end service failed message.
- *
- * @param endServiceNAK A SDLProtocolMessage object
- */
-- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK;
-- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK;
-- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK;
-- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate;
-
-#pragma mark - Older protocol handlers
-
-/**
- * Called when the message is a heartbeat message.
- *
- * @param session Session number
- */
-- (void)handleHeartbeatForSession:(Byte)session;
-
-/**
- * Called when the message is a heartbeat success message.
- */
-- (void)handleHeartbeatACK;
-
-/**
- * Called when the message is protocol message.
- *
- * @param msg A SDLProtocolMessage object
- */
-- (void)onProtocolMessageReceived:(SDLProtocolMessage *)msg;
-
-/**
- * Called when the message is a protocol opened message.
- */
-- (void)onProtocolOpened;
-
-/**
- * Called when the message is a protocol closed message.
- */
-- (void)onProtocolClosed;
-
-/**
- * Called when the message is an error message.
- *
- * @param info The error info message
- * @param e The exception
- */
-- (void)onError:(NSString *)info exception:(NSException *)e;
-
-/**
- * Called when an error is notified from transport.
- *
- * Note: currently, this is used only by TCP transport.
- *
- * @param error The type of the error
- */
-- (void)onTransportError:(NSError *)error;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.h b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.h
index 30cafa5da..d025310a3 100644
--- a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.h
+++ b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.h
@@ -2,7 +2,7 @@
//
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
@class SDLProtocolMessage;
NS_ASSUME_NONNULL_BEGIN
@@ -12,14 +12,14 @@ NS_ASSUME_NONNULL_BEGIN
/**
* A listener.
*/
-@property (weak, nonatomic, nullable) id<SDLProtocolListener> delegate;
+@property (weak, nonatomic, nullable) id<SDLProtocolDelegate> delegate;
/**
* Called when a message is received from Core.
*
* @param message A SDLProtocolMessage object
*/
-- (void)handleReceivedMessage:(SDLProtocolMessage *)message;
+- (void)handleReceivedMessage:(SDLProtocolMessage *)message protocol:(SDLProtocol *)protocol;
@end
diff --git a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
index a4bbf71e2..6c51f0079 100644
--- a/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
+++ b/SmartDeviceLink/SDLProtocolReceivedMessageRouter.m
@@ -26,60 +26,60 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
-- (void)handleReceivedMessage:(SDLProtocolMessage *)message {
+- (void)handleReceivedMessage:(SDLProtocolMessage *)message protocol:(SDLProtocol *)protocol {
SDLFrameType frameType = message.header.frameType;
switch (frameType) {
case SDLFrameTypeSingle: {
- [self sdl_dispatchProtocolMessage:message];
+ [self sdl_dispatchProtocolMessage:message protocol:protocol];
} break;
case SDLFrameTypeControl: {
- [self sdl_dispatchControlMessage:message];
+ [self sdl_dispatchControlMessage:message protocol:protocol];
} break;
case SDLFrameTypeFirst: // fallthrough
case SDLFrameTypeConsecutive: {
- [self sdl_dispatchMultiPartMessage:message];
+ [self sdl_dispatchMultiPartMessage:message protocol:protocol];
} break;
default: break;
}
}
-- (void)sdl_dispatchProtocolMessage:(SDLProtocolMessage *)message {
- if ([self.delegate respondsToSelector:@selector(onProtocolMessageReceived:)]) {
- [self.delegate onProtocolMessageReceived:message];
+- (void)sdl_dispatchProtocolMessage:(SDLProtocolMessage *)message protocol:(SDLProtocol *)protocol {
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveMessage:)]) {
+ [self.delegate protocol:protocol didReceiveMessage:message];
}
}
-- (void)sdl_dispatchControlMessage:(SDLProtocolMessage *)message {
+- (void)sdl_dispatchControlMessage:(SDLProtocolMessage *)message protocol:(SDLProtocol *)protocol {
switch (message.header.frameData) {
case SDLFrameInfoStartServiceACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolStartServiceACKMessage:)]) {
- [self.delegate handleProtocolStartServiceACKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveStartServiceACK:)]) {
+ [self.delegate protocol:protocol didReceiveStartServiceACK:message];
}
} break;
case SDLFrameInfoStartServiceNACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolStartServiceNAKMessage:)]) {
- [self.delegate handleProtocolStartServiceNAKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveStartServiceNAK:)]) {
+ [self.delegate protocol:protocol didReceiveStartServiceNAK:message];
}
} break;
case SDLFrameInfoEndServiceACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolEndServiceACKMessage:)]) {
- [self.delegate handleProtocolEndServiceACKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveEndServiceACK:)]) {
+ [self.delegate protocol:protocol didReceiveEndServiceACK:message];
}
} break;
case SDLFrameInfoEndServiceNACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolStartServiceNAKMessage:)]) {
- [self.delegate handleProtocolEndServiceNAKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveEndServiceNAK:)]) {
+ [self.delegate protocol:protocol didReceiveEndServiceNAK:message];
}
} break;
case SDLFrameInfoRegisterSecondaryTransportACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportACKMessage:)]) {
- [self.delegate handleProtocolRegisterSecondaryTransportACKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveRegisterSecondaryTransportACK:)]) {
+ [self.delegate protocol:protocol didReceiveRegisterSecondaryTransportACK:message];
}
} break;
case SDLFrameInfoRegisterSecondaryTransportNACK: {
- if ([self.delegate respondsToSelector:@selector(handleProtocolRegisterSecondaryTransportNAKMessage:)]) {
- [self.delegate handleProtocolRegisterSecondaryTransportNAKMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveRegisterSecondaryTransportNAK:)]) {
+ [self.delegate protocol:protocol didReceiveRegisterSecondaryTransportNAK:message];
}
} break;
case SDLFrameInfoHeartbeat: {
@@ -93,15 +93,15 @@ NS_ASSUME_NONNULL_BEGIN
}
} break;
case SDLFrameInfoTransportEventUpdate: {
- if ([self.delegate respondsToSelector:@selector(handleTransportEventUpdateMessage:)]) {
- [self.delegate handleTransportEventUpdateMessage:message];
+ if ([self.delegate respondsToSelector:@selector(protocol:didReceiveTransportEventUpdate:)]) {
+ [self.delegate protocol:protocol didReceiveTransportEventUpdate:message];
}
} break;
default: break; // Other frame data is possible, but we don't care about them
}
}
-- (void)sdl_dispatchMultiPartMessage:(SDLProtocolMessage *)message {
+- (void)sdl_dispatchMultiPartMessage:(SDLProtocolMessage *)message protocol:(SDLProtocol *)protocol {
// Pass multipart messages to an assembler and call delegate when done.
NSNumber *sessionID = [NSNumber numberWithUnsignedChar:message.header.sessionID];
@@ -113,7 +113,7 @@ NS_ASSUME_NONNULL_BEGIN
SDLMessageAssemblyCompletionHandler completionHandler = ^void(BOOL done, SDLProtocolMessage *assembledMessage) {
if (done) {
- [self sdl_dispatchProtocolMessage:assembledMessage];
+ [self sdl_dispatchProtocolMessage:assembledMessage protocol:protocol];
}
};
[assembler handleMessage:message withCompletionHandler:completionHandler];
diff --git a/SmartDeviceLink/SDLProxy.h b/SmartDeviceLink/SDLProxy.h
deleted file mode 100644
index 60a68f44c..000000000
--- a/SmartDeviceLink/SDLProxy.h
+++ /dev/null
@@ -1,138 +0,0 @@
-// SDLProxy.h
-//
-
-@class SDLEncryptionLifecycleManager;
-@class SDLProtocol;
-@class SDLPutFile;
-@class SDLRPCMessage;
-@class SDLSecondaryTransportManager;
-@class SDLStreamingMediaManager;
-@class SDLTimer;
-
-#import "SDLProtocolListener.h"
-#import "SDLProxyListener.h"
-#import "SDLSecurityType.h"
-#import "SDLTransportType.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-@interface SDLProxy : NSObject <SDLProtocolListener, NSStreamDelegate> {
- Byte _version;
- Byte _bulkSessionID;
- BOOL _isConnected;
-}
-
-/**
- * The protocol that handles sending and receiving messages from Core.
- */
-@property (nullable, strong, nonatomic) SDLProtocol *protocol;
-
-/**
- * The transport type used to connect the app to Core.
- */
-@property (nullable, strong, nonatomic) id<SDLTransportType> transport;
-
-/**
- * A set of all subscribers.
- */
-@property (readonly, copy, nonatomic) NSSet<NSObject<SDLProxyListener> *> *proxyListeners;
-
-/**
- * Closes an open session if no start service ACK message received from Core within a given amount of time.
- */
-@property (strong, nonatomic) SDLTimer *startSessionTimer;
-
-/**
- * The proxy version number.
- */
-@property (readonly, copy, nonatomic) NSString *proxyVersion;
-
-/**
- * Convenience init.
- *
- * @param transport The type of network connection
- * @param delegate The subscriber
- * @param secondaryTransportManager The secondary transport manager
- * @return A SDLProxy object
- */
-- (id)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager;
-
-/**
- * Creates a SDLProxy object with an iap (USB / Bluetooth) transport network connection.
- *
- * @param delegate The subscriber
- * @param secondaryTransportManager The secondary transport manager
- * @param encryptionLifecycleManager The encryption life cycle manager
- * @return A SDLProxy object
- */
-+ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager encryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager;
-
-/**
- * Creates a SDLProxy object with a TCP (WiFi) transport network connection.
- *
- * @param delegate The subscriber
- * @param ipaddress The IP address of Core
- * @param port The port address of Core
- * @param secondaryTransportManager The secondary transport manager
- * @param encryptionLifecycleManager The encryption life cycle manager
- * @return A SDLProxy object
- */
-+ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager encryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager;
-
-/**
- * Adds a delegate.
- *
- * @param delegate The delegate to add
- */
-- (void)addDelegate:(NSObject<SDLProxyListener> *)delegate;
-
-/**
- * Removes a delegate.
- *
- * @param delegate The delegate to remove
- */
-- (void)removeDelegate:(NSObject<SDLProxyListener> *)delegate;
-
-/**
- * Sends a RPC to Core.
- *
- * @param message A SDLRPCMessage object
- */
-- (void)sendRPC:(SDLRPCMessage *)message;
-
-/**
- * Parses a dictionary object and notifies the subscribed delegates of the messages sent by Core. Some messages are also intercepted and handled by the library.
- *
- * @param dictionary The message data
- */
-- (void)handleRPCDictionary:(NSDictionary<NSString *, id> *)dictionary;
-
-/**
- * Parses a SDLProtocolMessage object and notifies the subscribed delegates of the messages sent by Core. Some messages are also intercepted and handled by the library.
- *
- * @param msgData The message data
- */
-- (void)handleProtocolMessage:(SDLProtocolMessage *)msgData;
-
-/**
- * Adds the security manangers needed to send encrypted data.
- *
- * @param securityManagerClasses The security manager classes
- * @param appId The app's id
- */
-- (void)addSecurityManagers:(NSArray<Class> *)securityManagerClasses forAppId:(NSString *)appId;
-
-/**
- * Puts data into a file on the module. Performs a putFile for a given input stream, performed in chunks, for handling very large files.
- *
- * @param inputStream A stream containing the data to put to the module.
- * @param putFileRPCRequest A SDLPutFile object containing the parameters for the put(s)
- *
- * @discussion: The proxy will read from the stream based on the max MTU size and send them in individual putFile requests. This may result in multiple responses being received, one for each request.
- * @note: The length parameter of the putFileRPCRequest will be ignored. The proxy will substitute the number of bytes read from the stream.
- */
-- (void)putFileStream:(NSInputStream *)inputStream withRequest:(SDLPutFile *)putFileRPCRequest;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProxy.m b/SmartDeviceLink/SDLProxy.m
deleted file mode 100644
index 9b48e54b0..000000000
--- a/SmartDeviceLink/SDLProxy.m
+++ /dev/null
@@ -1,1074 +0,0 @@
-// SDLProxy.m
-
-#import "SDLProxy.h"
-
-#import <UIKit/UIKit.h>
-#import <objc/runtime.h>
-
-#import "SDLAudioStreamingState.h"
-#import "SDLLogMacros.h"
-#import "SDLEncodedSyncPData.h"
-#import "SDLEncryptionLifecycleManager.h"
-#import "SDLFileType.h"
-#import "SDLFunctionID.h"
-#import "SDLGlobals.h"
-#import "SDLHMILevel.h"
-#import "SDLIAPTransport.h"
-#import "SDLLanguage.h"
-#import "SDLLayoutMode.h"
-#import "SDLLockScreenStatusManager.h"
-#import "SDLOnButtonEvent.h"
-#import "SDLOnButtonPress.h"
-#import "SDLOnHMIStatus.h"
-#import "SDLOnSystemRequest.h"
-#import "SDLPolicyDataParser.h"
-#import "SDLProtocol.h"
-#import "SDLProtocolMessage.h"
-#import "SDLPutFile.h"
-#import "SDLRPCPayload.h"
-#import "SDLRPCResponse.h"
-#import "SDLRegisterAppInterfaceResponse.h"
-#import "SDLRequestType.h"
-#import "SDLSecondaryTransportManager.h"
-#import "SDLStreamingMediaManager.h"
-#import "SDLSubscribeButton.h"
-#import "SDLSystemContext.h"
-#import "SDLSystemRequest.h"
-#import "SDLTCPTransport.h"
-#import "SDLTimer.h"
-#import "SDLTransportType.h"
-#import "SDLUnsubscribeButton.h"
-#import "SDLVehicleType.h"
-#import "SDLVersion.h"
-
-#import "SDLRPCParameterNames.h"
-#import "SDLRPCFunctionNames.h"
-
-NS_ASSUME_NONNULL_BEGIN
-
-typedef NSString SDLVehicleMake;
-
-typedef void (^URLSessionTaskCompletionHandler)(NSData *data, NSURLResponse *response, NSError *error);
-typedef void (^URLSessionDownloadTaskCompletionHandler)(NSURL *location, NSURLResponse *response, NSError *error);
-
-NSString *const SDLProxyVersion = @"6.5.0";
-const float StartSessionTime = 10.0;
-const float NotifyProxyClosedDelay = (float)0.1;
-const int PoliciesCorrelationId = 65535;
-static float DefaultConnectionTimeout = 45.0;
-
-@interface SDLProxy () {
- SDLLockScreenStatusManager *_lsm;
-}
-
-@property (copy, nonatomic) NSString *appId;
-@property (strong, nonatomic) NSMutableSet<NSObject<SDLProxyListener> *> *mutableProxyListeners;
-@property (nullable, nonatomic, strong) SDLDisplayCapabilities *displayCapabilities;
-@property (nonatomic, strong) NSMutableDictionary<SDLVehicleMake *, Class> *securityManagers;
-@property (nonatomic, strong) NSURLSession *urlSession;
-
-@end
-
-
-@implementation SDLProxy
-
-#pragma mark - Object lifecycle
-- (instancetype)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
- if (self = [super init]) {
- SDLLogD(@"Framework Version: %@", self.proxyVersion);
- _lsm = [[SDLLockScreenStatusManager alloc] init];
- _mutableProxyListeners = [NSMutableSet setWithObject:delegate];
- _securityManagers = [NSMutableDictionary dictionary];
-
- _protocol = [[SDLProtocol alloc] init];
- _transport = transport;
- _transport.delegate = _protocol;
-
- [_protocol.protocolDelegateTable addObject:self];
- _protocol.transport = transport;
-
- // make sure that secondary transport manager is started prior to starting protocol
- if (secondaryTransportManager != nil) {
- [secondaryTransportManager startWithPrimaryProtocol:_protocol];
- }
-
- [self.transport connect];
-
- SDLLogV(@"Proxy transport initialization");
-
- NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
- configuration.timeoutIntervalForRequest = DefaultConnectionTimeout;
- configuration.timeoutIntervalForResource = DefaultConnectionTimeout;
- configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
-
- _urlSession = [NSURLSession sessionWithConfiguration:configuration];
-
- }
-
- return self;
-}
-
-- (instancetype)initWithTransport:(id<SDLTransportType>)transport delegate:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager encryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager {
- if (self = [super init]) {
- SDLLogD(@"Framework Version: %@", self.proxyVersion);
- _lsm = [[SDLLockScreenStatusManager alloc] init];
- _mutableProxyListeners = [NSMutableSet setWithObject:delegate];
- _securityManagers = [NSMutableDictionary dictionary];
-
- _protocol = [[SDLProtocol alloc] initWithEncryptionLifecycleManager:encryptionLifecycleManager];
- _transport = transport;
- _transport.delegate = _protocol;
-
- [_protocol.protocolDelegateTable addObject:self];
- _protocol.transport = transport;
-
- // make sure that secondary transport manager is started prior to starting protocol
- if (secondaryTransportManager != nil) {
- [secondaryTransportManager startWithPrimaryProtocol:_protocol];
- }
-
- [self.transport connect];
-
- SDLLogV(@"Proxy transport initialization");
-
- NSURLSessionConfiguration* configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
- configuration.timeoutIntervalForRequest = DefaultConnectionTimeout;
- configuration.timeoutIntervalForResource = DefaultConnectionTimeout;
- configuration.requestCachePolicy = NSURLRequestUseProtocolCachePolicy;
-
- _urlSession = [NSURLSession sessionWithConfiguration:configuration];
-
- }
-
- return self;
-}
-
-
-+ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
- SDLIAPTransport *transport = [[SDLIAPTransport alloc] init];
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager];
-
- return ret;
-}
-
-+ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager {
- SDLTCPTransport *transport = [[SDLTCPTransport alloc] initWithHostName:ipaddress portNumber:port];
-
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager];
-
- return ret;
-}
-
-+ (SDLProxy *)iapProxyWithListener:(id<SDLProxyListener>)delegate secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager encryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager {
- SDLIAPTransport *transport = [[SDLIAPTransport alloc] init];
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager encryptionLifecycleManager:encryptionLifecycleManager];
-
- return ret;
-}
-
-+ (SDLProxy *)tcpProxyWithListener:(id<SDLProxyListener>)delegate tcpIPAddress:(NSString *)ipaddress tcpPort:(NSString *)port secondaryTransportManager:(nullable SDLSecondaryTransportManager *)secondaryTransportManager encryptionLifecycleManager:(SDLEncryptionLifecycleManager *)encryptionLifecycleManager {
- SDLTCPTransport *transport = [[SDLTCPTransport alloc] initWithHostName:ipaddress portNumber:port];
-
- SDLProxy *ret = [[SDLProxy alloc] initWithTransport:transport delegate:delegate secondaryTransportManager:secondaryTransportManager encryptionLifecycleManager:encryptionLifecycleManager];
-
- return ret;
-}
-
-- (void)dealloc {
- if (self.protocol.securityManager != nil) {
- [self.protocol.securityManager stop];
- }
-
- if (self.transport != nil) {
- [self.transport disconnect];
- }
-
- [[NSNotificationCenter defaultCenter] removeObserver:self];
-
- [_urlSession invalidateAndCancel];
- SDLLogV(@"Proxy dealloc");
-}
-
-- (void)sdl_notifyProxyClosed {
- if (_isConnected) {
- _isConnected = NO;
- [self sdl_invokeMethodOnDelegates:@selector(onProxyClosed) withObject:nil];
- }
-}
-
-
-#pragma mark - Application Lifecycle
-
-/// This method sends an OnHMIStatus with the Mobile's HMI level to the head unit.
-/// This was originally designed to make sure that the head unit properly knew about the mobile app's ability to run timers in the background, which affected heartbeat.
-/// It may still affect some features on the head unit and the ability for the head unit to know which app is in the foreground is useful. It should not be removed due to unknown backward compatibility issues.
-- (void)sdl_sendMobileHMIState {
- __block UIApplicationState appState = UIApplicationStateInactive;
- if ([NSThread isMainThread]) {
- appState = [UIApplication sharedApplication].applicationState;
- } else {
- dispatch_sync(dispatch_get_main_queue(), ^{
- appState = [UIApplication sharedApplication].applicationState;
- });
- }
-
- SDLOnHMIStatus *HMIStatusRPC = [[SDLOnHMIStatus alloc] init];
-
- HMIStatusRPC.audioStreamingState = SDLAudioStreamingStateNotAudible;
- HMIStatusRPC.systemContext = SDLSystemContextMain;
-
- switch (appState) {
- case UIApplicationStateActive: {
- HMIStatusRPC.hmiLevel = SDLHMILevelFull;
- } break;
- case UIApplicationStateBackground: // Fallthrough
- case UIApplicationStateInactive: {
- HMIStatusRPC.hmiLevel = SDLHMILevelBackground;
- } break;
- default: break;
- }
-
- SDLLogD(@"Mobile UIApplication state changed, sending to remote system: %@", HMIStatusRPC.hmiLevel);
- [self sendRPC:HMIStatusRPC];
-}
-
-#pragma mark - Accessors
-
-- (NSSet<NSObject<SDLProxyListener> *> *)proxyListeners {
- return [self.mutableProxyListeners copy];
-}
-
-
-#pragma mark - Setters / Getters
-
-- (NSString *)proxyVersion {
- return SDLProxyVersion;
-}
-
-#pragma mark - SecurityManager
-
-- (void)addSecurityManagers:(NSArray<Class> *)securityManagerClasses forAppId:(NSString *)appId {
- NSParameterAssert(securityManagerClasses != nil);
- NSParameterAssert(appId != nil);
- self.appId = appId;
-
- for (Class securityManagerClass in securityManagerClasses) {
- if (![securityManagerClass conformsToProtocol:@protocol(SDLSecurityType)]) {
- NSString *reason = [NSString stringWithFormat:@"Invalid security manager: Class %@ does not conform to SDLSecurityType protocol", NSStringFromClass(securityManagerClass)];
- @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
- }
-
- NSSet<NSString *> *vehicleMakes = [securityManagerClass availableMakes];
-
- if (vehicleMakes == nil || vehicleMakes.count == 0) {
- NSString *reason = [NSString stringWithFormat:@"Invalid security manager: Failed to retrieve makes for class %@", NSStringFromClass(securityManagerClass)];
- @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
- }
-
- for (NSString *vehicleMake in vehicleMakes) {
- self.securityManagers[vehicleMake] = securityManagerClass;
- }
- }
-}
-
-- (nullable id<SDLSecurityType>)sdl_securityManagerForMake:(NSString *)make {
- if ((make != nil) && (self.securityManagers[make] != nil)) {
- Class securityManagerClass = self.securityManagers[make];
- self.protocol.appId = self.appId;
- return [[securityManagerClass alloc] init];
- }
-
- return nil;
-}
-
-
-#pragma mark - SDLProtocolListener Implementation
-
-- (void)onProtocolOpened {
- _isConnected = YES;
- SDLLogV(@"Proxy RPC protocol opened");
- // The RPC payload will be created by the protocol object...it's weird and confusing, I know.
- [self.protocol startServiceWithType:SDLServiceTypeRPC payload:nil];
-
- if (self.startSessionTimer == nil) {
- self.startSessionTimer = [[SDLTimer alloc] initWithDuration:StartSessionTime repeat:NO];
- __weak typeof(self) weakSelf = self;
- self.startSessionTimer.elapsedBlock = ^{
- SDLLogW(@"Start session timed out");
- [weakSelf performSelector:@selector(sdl_notifyProxyClosed) withObject:nil afterDelay:NotifyProxyClosedDelay];
- };
- }
- [self.startSessionTimer start];
-}
-
-- (void)onProtocolClosed {
- [self sdl_notifyProxyClosed];
-}
-
-- (void)onError:(NSString *)info exception:(NSException *)e {
- [self sdl_invokeMethodOnDelegates:@selector(onError:) withObject:e];
-}
-
-- (void)onTransportError:(NSError *)error {
- [self sdl_invokeMethodOnDelegates:@selector(onTransportError:) withObject:error];
-}
-
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
- // Turn off the timer, the start session response came back
- [self.startSessionTimer cancel];
- SDLLogV(@"StartSession (response)\nSessionId: %d for serviceType %d", startServiceACK.header.sessionID, startServiceACK.header.serviceType);
-
- if (startServiceACK.header.serviceType == SDLServiceTypeRPC) {
- [self sdl_invokeMethodOnDelegates:@selector(onProxyOpened) withObject:nil];
- }
-}
-
-- (void)onProtocolMessageReceived:(SDLProtocolMessage *)msgData {
- @try {
- [self handleProtocolMessage:msgData];
- } @catch (NSException *e) {
- SDLLogW(@"Proxy: Failed to handle protocol message %@", e);
- }
-}
-
-
-#pragma mark - Message sending
-- (void)sendRPC:(SDLRPCMessage *)message {
- if ([message.name isEqualToString:SDLRPCFunctionNameSubscribeButton]) {
- BOOL handledRPC = [self sdl_adaptButtonSubscribeMessage:(SDLSubscribeButton *)message];
- if (handledRPC) { return; }
- } else if ([message.name isEqualToString:SDLRPCFunctionNameUnsubscribeButton]) {
- BOOL handledRPC = [self sdl_adaptButtonUnsubscribeMessage:(SDLUnsubscribeButton *)message];
- if (handledRPC) { return; }
- }
-
- @try {
- [self.protocol sendRPC:message];
- } @catch (NSException *exception) {
- SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
- }
-}
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-- (BOOL)sdl_adaptButtonSubscribeMessage:(SDLSubscribeButton *)message {
- if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
- if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- SDLSubscribeButton *playPauseMessage = [message copy];
- playPauseMessage.buttonName = SDLButtonNamePlayPause;
-
- @try {
- [self.protocol sendRPC:message];
- [self.protocol sendRPC:playPauseMessage];
- } @catch (NSException *exception) {
- SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
- }
-
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- return NO;
- }
- } else { // Major version < 5
- if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- return NO;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- SDLSubscribeButton *okMessage = [message copy];
- okMessage.buttonName = SDLButtonNameOk;
-
- @try {
- [self.protocol sendRPC:okMessage];
- } @catch (NSException *exception) {
- SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
- }
-
- return YES;
- }
- }
-
- return NO;
-}
-
-- (BOOL)sdl_adaptButtonUnsubscribeMessage:(SDLUnsubscribeButton *)message {
- if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
- if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- SDLUnsubscribeButton *playPauseMessage = [message copy];
- playPauseMessage.buttonName = SDLButtonNamePlayPause;
-
- @try {
- [self.protocol sendRPC:message];
- [self.protocol sendRPC:playPauseMessage];
- } @catch (NSException *exception) {
- SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
- }
-
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- return NO;
- }
- } else { // Major version < 5
- if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- return NO;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- SDLUnsubscribeButton *okMessage = [message copy];
- okMessage.buttonName = SDLButtonNameOk;
-
- @try {
- [self.protocol sendRPC:okMessage];
- } @catch (NSException *exception) {
- SDLLogE(@"Proxy: Failed to send RPC message: %@", message.name);
- }
-
- return YES;
- }
- }
-
- return NO;
-}
-#pragma clang diagnostic pop
-
-#pragma mark - Message Receiving
-
-- (void)handleProtocolMessage:(SDLProtocolMessage *)incomingMessage {
- // Convert protocol message to dictionary
- NSDictionary<NSString *, id> *rpcMessageAsDictionary = [incomingMessage rpcDictionary];
- [self handleRPCDictionary:rpcMessageAsDictionary];
-}
-
-- (void)handleRPCDictionary:(NSDictionary<NSString *, id> *)dict {
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLRPCMessage *message = [[SDLRPCMessage alloc] initWithDictionary:[dict mutableCopy]];
-#pragma clang diagnostic pop
- NSString *functionName = message.name;
- NSString *messageType = message.messageType;
-
- // If it's a response, append response
- if ([messageType isEqualToString:SDLRPCParameterNameResponse]) {
- BOOL notGenericResponseMessage = ![functionName isEqualToString:SDLRPCFunctionNameGenericResponse];
- if (notGenericResponseMessage) {
- functionName = [NSString stringWithFormat:@"%@Response", functionName];
- }
- }
-
- // From the function name, create the corresponding RPCObject and initialize it
- NSString *functionClassName = [NSString stringWithFormat:@"SDL%@", functionName];
- SDLRPCMessage *newMessage = [[NSClassFromString(functionClassName) alloc] initWithDictionary:[dict mutableCopy]];
-
- // Log the RPC message
- SDLLogV(@"Message received: %@", newMessage);
-
- // Intercept and handle several messages ourselves
-
- if ([functionName isEqualToString:@"RegisterAppInterfaceResponse"]) {
- [self handleRegisterAppInterfaceResponse:(SDLRPCResponse *)newMessage];
- }
-
- if ([functionName isEqualToString:@"OnEncodedSyncPData"]) {
- [self sdl_handleSyncPData:newMessage];
- }
-
- if ([functionName isEqualToString:@"OnSystemRequest"]) {
- [self sdl_handleSystemRequest:dict];
- }
-
- if ([functionName isEqualToString:@"SystemRequestResponse"]) {
- [self sdl_handleSystemRequestResponse:newMessage];
- }
-
-
- if ([functionName isEqualToString:@"OnButtonPress"]) {
- SDLOnButtonPress *message = (SDLOnButtonPress *)newMessage;
- if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
- BOOL handledRPC = [self sdl_handleOnButtonPressPostV5:message];
- if (handledRPC) { return; }
- } else { // RPC version of 4 or less (connected to an old head unit)
- BOOL handledRPC = [self sdl_handleOnButtonPressPreV5:message];
- if (handledRPC) { return; }
- }
- }
-
- if ([functionName isEqualToString:@"OnButtonEvent"]) {
- SDLOnButtonEvent *message = (SDLOnButtonEvent *)newMessage;
- if ([SDLGlobals sharedGlobals].rpcVersion.major >= 5) {
- BOOL handledRPC = [self sdl_handleOnButtonEventPostV5:message];
- if (handledRPC) { return; }
- } else {
- BOOL handledRPC = [self sdl_handleOnButtonEventPreV5:message];
- if (handledRPC) { return; }
- }
- }
-
- [self sdl_invokeDelegateMethodsWithFunction:functionName message:newMessage];
-
- //Intercepting SDLRPCFunctionNameOnAppInterfaceUnregistered must happen after it is broadcasted as a notification above. This will prevent reconnection attempts in the lifecycle manager when the AppInterfaceUnregisteredReason should prevent reconnections.
- if ([functionName isEqualToString:SDLRPCFunctionNameOnAppInterfaceUnregistered] || [functionName isEqualToString:SDLRPCFunctionNameUnregisterAppInterface]) {
- [self sdl_handleRPCUnregistered:dict];
- }
-
- // When an OnHMIStatus notification comes in, after passing it on (above), generate an "OnLockScreenNotification"
- if ([functionName isEqualToString:@"OnHMIStatus"]) {
- [self sdl_handleAfterHMIStatus:newMessage];
- }
-
- // When an OnDriverDistraction notification comes in, after passing it on (above), generate an "OnLockScreenNotification"
- if ([functionName isEqualToString:@"OnDriverDistraction"]) {
- [self sdl_handleAfterDriverDistraction:newMessage];
- }
-}
-
-- (void)sdl_invokeDelegateMethodsWithFunction:(NSString *)functionName message:(SDLRPCMessage *)message {
- // Formulate the name of the method to call and invoke the method on the delegate(s)
- NSString *handlerName = [NSString stringWithFormat:@"on%@:", functionName];
- SEL handlerSelector = NSSelectorFromString(handlerName);
- [self sdl_invokeMethodOnDelegates:handlerSelector withObject:message];
-}
-
-
-#pragma mark - RPC Handlers
-
-- (void)sdl_handleRPCUnregistered:(NSDictionary<NSString *, id> *)messageDictionary {
- SDLLogW(@"Unregistration forced by module. %@", messageDictionary);
- [self sdl_notifyProxyClosed];
-}
-
-- (void)handleRegisterAppInterfaceResponse:(SDLRPCResponse *)response {
- SDLRegisterAppInterfaceResponse *registerResponse = (SDLRegisterAppInterfaceResponse *)response;
-
- self.protocol.securityManager = [self sdl_securityManagerForMake:registerResponse.vehicleType.make];
- if (self.protocol.securityManager && [self.protocol.securityManager respondsToSelector:@selector(setAppId:)]) {
- self.protocol.securityManager.appId = self.appId;
- }
-
- if ([SDLGlobals sharedGlobals].protocolVersion.major >= 4) {
- [self sdl_sendMobileHMIState];
- // Send SDL updates to application state
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidBecomeActiveNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_sendMobileHMIState) name:UIApplicationDidEnterBackgroundNotification object:nil];
- }
-}
-
-- (void)sdl_handleSyncPData:(SDLRPCMessage *)message {
- // If URL != nil, perform HTTP Post and don't pass the notification to proxy listeners
- SDLLogV(@"OnEncodedSyncPData: %@", message);
-
- NSString *urlString = (NSString *)message.parameters[SDLRPCParameterNameURLUppercase];
- NSDictionary<NSString *, id> *encodedSyncPData = (NSDictionary<NSString *, id> *)message.parameters[SDLRPCParameterNameData];
- NSNumber *encodedSyncPTimeout = (NSNumber *)message.parameters[SDLRPCParameterNameTimeoutCapitalized];
-
- if (urlString && encodedSyncPData && encodedSyncPTimeout) {
- [self sdl_sendEncodedSyncPData:encodedSyncPData toURL:urlString withTimeout:encodedSyncPTimeout];
- }
-}
-
-- (void)sdl_handleSystemRequest:(NSDictionary<NSString *, id> *)dict {
- SDLLogV(@"OnSystemRequest");
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLOnSystemRequest *systemRequest = [[SDLOnSystemRequest alloc] initWithDictionary:[dict mutableCopy]];
- SDLRequestType requestType = systemRequest.requestType;
-#pragma clang diagnostic pop
-
- // Handle the various OnSystemRequest types
- if ([requestType isEqualToEnum:SDLRequestTypeProprietary]) {
- [self sdl_handleSystemRequestProprietary:systemRequest];
- } else if ([requestType isEqualToEnum:SDLRequestTypeLockScreenIconURL]) {
- [self sdl_handleSystemRequestLockScreenIconURL:systemRequest];
- } else if ([requestType isEqualToEnum:SDLRequestTypeIconURL]) {
- [self sdl_handleSystemRequestIconURL:systemRequest];
- } else if ([requestType isEqualToEnum:SDLRequestTypeHTTP]) {
- [self sdl_handleSystemRequestHTTP:systemRequest];
- } else if ([requestType isEqualToEnum:SDLRequestTypeLaunchApp]) {
- [self sdl_handleSystemRequestLaunchApp:systemRequest];
- }
-}
-
-- (void)sdl_handleSystemRequestResponse:(SDLRPCMessage *)message {
- SDLLogV(@"SystemRequestResponse to be discarded");
-}
-
-#pragma mark BackCompatability ButtonName Helpers
-
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-- (BOOL)sdl_handleOnButtonPressPreV5:(SDLOnButtonPress *)message {
- // Drop PlayPause, this shouldn't come in
- if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- // Send Ok and Play/Pause notifications
- SDLOnButtonPress *playPausePress = [message copy];
- playPausePress.buttonName = SDLButtonNamePlayPause;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPausePress];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- }
-
- return NO;
-}
-
-- (BOOL)sdl_handleOnButtonPressPostV5:(SDLOnButtonPress *)message {
- if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- // Send PlayPause & OK notifications
- SDLOnButtonPress *okPress = [message copy];
- okPress.buttonName = SDLButtonNameOk;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:okPress];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- // Send PlayPause and OK notifications
- SDLOnButtonPress *playPausePress = [message copy];
- playPausePress.buttonName = SDLButtonNamePlayPause;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPausePress];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- }
-
- return NO;
-}
-
-- (BOOL)sdl_handleOnButtonEventPreV5:(SDLOnButtonEvent *)message {
- // Drop PlayPause, this shouldn't come in
- if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- // Send Ok and Play/Pause notifications
- SDLOnButtonEvent *playPauseEvent = [message copy];
- playPauseEvent.buttonName = SDLButtonNamePlayPause;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPauseEvent];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- }
-
- return NO;
-}
-
-- (BOOL)sdl_handleOnButtonEventPostV5:(SDLOnButtonEvent *)message {
- if ([message.buttonName isEqualToEnum:SDLButtonNamePlayPause]) {
- // Send PlayPause & OK notifications
- SDLOnButtonEvent *okEvent = [message copy];
- okEvent.buttonName = SDLButtonNameOk;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:okEvent];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- } else if ([message.buttonName isEqualToEnum:SDLButtonNameOk]) {
- // Send PlayPause and OK notifications
- SDLOnButtonEvent *playPauseEvent = [message copy];
- playPauseEvent.buttonName = SDLButtonNamePlayPause;
-
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:playPauseEvent];
- [self sdl_invokeDelegateMethodsWithFunction:message.getFunctionName message:message];
- return YES;
- }
-
- return NO;
-}
-#pragma clang diagnostic pop
-
-
-#pragma mark Handle Post-Invoke of Delegate Methods
-- (void)sdl_handleAfterHMIStatus:(SDLRPCMessage *)message {
- SDLHMILevel hmiLevel = (SDLHMILevel)message.parameters[SDLRPCParameterNameHMILevel];
- _lsm.hmiLevel = hmiLevel;
-
- SEL callbackSelector = NSSelectorFromString(@"onOnLockScreenNotification:");
- [self sdl_invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification];
-}
-
-- (void)sdl_handleAfterDriverDistraction:(SDLRPCMessage *)message {
- NSString *stateString = (NSString *)message.parameters[SDLRPCParameterNameState];
- BOOL state = [stateString isEqualToString:@"DD_ON"] ? YES : NO;
- _lsm.driverDistracted = state;
-
- SEL callbackSelector = NSSelectorFromString(@"onOnLockScreenNotification:");
- [self sdl_invokeMethodOnDelegates:callbackSelector withObject:_lsm.lockScreenStatusNotification];
-}
-
-
-#pragma mark OnSystemRequest Handlers
-- (void)sdl_handleSystemRequestLaunchApp:(SDLOnSystemRequest *)request {
- NSURL *URLScheme = [NSURL URLWithString:request.url];
- if (URLScheme == nil) {
- SDLLogW(@"System request LaunchApp failed: invalid URL sent from module: %@", request.url);
- return;
- }
- // If system version is less than 9.0 http://stackoverflow.com/a/5337804/1370927
- if (SDL_SYSTEM_VERSION_LESS_THAN(@"9.0")) {
- // Return early if we can't openURL because openURL will crash instead of fail silently in < 9.0
- if (![[UIApplication sharedApplication] canOpenURL:URLScheme]) {
- return;
- }
- }
- [[UIApplication sharedApplication] openURL:URLScheme];
-}
-
-- (void)sdl_handleSystemRequestProprietary:(SDLOnSystemRequest *)request {
- NSDictionary<NSString *, id> *JSONDictionary = [self sdl_validateAndParseSystemRequest:request];
- if (JSONDictionary == nil || request.url == nil) {
- return;
- }
-
- NSDictionary<NSString *, id> *requestData = JSONDictionary[@"HTTPRequest"];
- NSString *bodyString = requestData[@"body"];
- NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
-
- // Parse and display the policy data.
- SDLPolicyDataParser *pdp = [[SDLPolicyDataParser alloc] init];
- NSData *policyData = [pdp unwrap:bodyData];
- if (policyData != nil) {
- [pdp parsePolicyData:policyData];
- SDLLogV(@"Policy data received");
- }
-
- // Send the HTTP Request
- __weak typeof(self) weakSelf = self;
- [self sdl_uploadForBodyDataDictionary:JSONDictionary
- urlString:request.url
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- __strong typeof(weakSelf) strongSelf = weakSelf;
-
- if (error) {
- SDLLogW(@"OnSystemRequest HTTP response error: %@", error);
- return;
- }
-
- if (data == nil || data.length == 0) {
- SDLLogW(@"OnSystemRequest HTTP response error: no data received");
- return;
- }
-
- // Create the SystemRequest RPC to send to module.
- SDLLogV(@"OnSystemRequest HTTP response");
- SDLSystemRequest *request = [[SDLSystemRequest alloc] init];
- request.correlationID = [NSNumber numberWithInt:PoliciesCorrelationId];
- request.requestType = SDLRequestTypeProprietary;
- request.bulkData = data;
-
- // Parse and display the policy data.
- SDLPolicyDataParser *pdp = [[SDLPolicyDataParser alloc] init];
- NSData *policyData = [pdp unwrap:data];
- if (policyData) {
- [pdp parsePolicyData:policyData];
- SDLLogV(@"Cloud policy data: %@", pdp);
- }
-
- // Send the RPC Request
- [strongSelf sendRPC:request];
- }];
-}
-
-- (void)sdl_handleSystemRequestLockScreenIconURL:(SDLOnSystemRequest *)request {
- __weak typeof(self) weakSelf = self;
- [self sdl_sendDataTaskWithURL:[NSURL URLWithString:request.url]
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- __strong typeof(weakSelf) strongSelf = weakSelf;
- if (error != nil) {
- SDLLogW(@"OnSystemRequest (lock screen icon) HTTP download task failed: %@", error.localizedDescription);
- return;
- }
-
- UIImage *icon = [UIImage imageWithData:data];
- [strongSelf sdl_invokeMethodOnDelegates:@selector(onReceivedLockScreenIcon:) withObject:icon];
- }];
-}
-
-- (void)sdl_handleSystemRequestIconURL:(SDLOnSystemRequest *)request {
- __weak typeof(self) weakSelf = self;
- [self sdl_sendDataTaskWithURL:[NSURL URLWithString:request.url]
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- __strong typeof(weakSelf) strongSelf = weakSelf;
- if (error != nil) {
- SDLLogW(@"OnSystemRequest (icon url) HTTP download task failed: %@", error.localizedDescription);
- return;
- } else if (data.length == 0) {
- SDLLogW(@"OnSystemRequest (icon url) HTTP download task failed to get the cloud app icon image data");
- return;
- }
-
- SDLSystemRequest *iconURLSystemRequest = [[SDLSystemRequest alloc] initWithType:SDLRequestTypeIconURL fileName:request.url];
- iconURLSystemRequest.bulkData = data;
-
- [strongSelf sendRPC:iconURLSystemRequest];
- }];
-}
-
-- (void)sdl_handleSystemRequestHTTP:(SDLOnSystemRequest *)request {
- if (request.bulkData.length == 0) {
- // TODO: not sure how we want to handle http requests that don't have bulk data (maybe as GET?)
- return;
- }
-
- __weak typeof(self) weakSelf = self;
- [self sdl_uploadData:request.bulkData
- toURLString:request.url
- completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
- __strong typeof(weakSelf) strongSelf = weakSelf;
- if (error != nil) {
- SDLLogW(@"OnSystemRequest (HTTP) error: %@", error.localizedDescription);
- return;
- }
-
- if (data.length == 0) {
- SDLLogW(@"OnSystemRequest (HTTP) error: no data returned");
- return;
- }
-
- // Show the HTTP response
- SDLLogV(@"OnSystemRequest (HTTP) response: %@", response);
-
- // Create the SystemRequest RPC to send to module.
- SDLPutFile *putFile = [[SDLPutFile alloc] init];
- putFile.fileType = SDLFileTypeJSON;
- putFile.correlationID = @(PoliciesCorrelationId);
- putFile.syncFileName = @"response_data";
- putFile.bulkData = data;
-
- // Send RPC Request
- [strongSelf sendRPC:putFile];
- }];
-}
-
-/**
- * Determine if the System Request is valid and return it's JSON dictionary, if available.
- *
- * @param request The system request to parse
- *
- * @return A parsed JSON dictionary, or nil if it couldn't be parsed
- */
-- (nullable NSDictionary<NSString *, id> *)sdl_validateAndParseSystemRequest:(SDLOnSystemRequest *)request {
- NSString *urlString = request.url;
- SDLFileType fileType = request.fileType;
-
- // Validate input
- if (urlString == nil || [NSURL URLWithString:urlString] == nil) {
- SDLLogW(@"OnSystemRequest validation failure: URL is nil");
- return nil;
- }
-
- if (![fileType isEqualToEnum:SDLFileTypeJSON]) {
- SDLLogW(@"OnSystemRequest validation failure: file type is not JSON");
- return nil;
- }
-
- // Get data dictionary from the bulkData
- NSError *error = nil;
- NSDictionary<NSString *, id> *JSONDictionary = [NSJSONSerialization JSONObjectWithData:request.bulkData options:kNilOptions error:&error];
- if (error != nil) {
- SDLLogW(@"OnSystemRequest validation failure: data is not valid JSON");
- return nil;
- }
-
- return JSONDictionary;
-}
-
-/**
- * Start an upload for some data to a web address specified
- *
- * @param data The data to be passed to the server
- * @param urlString The URL the data should be POSTed to
- * @param completionHandler A completion handler of what to do when the server responds
- */
-- (void)sdl_uploadData:(NSData *_Nonnull)data toURLString:(NSString *_Nonnull)urlString completionHandler:(URLSessionTaskCompletionHandler _Nullable)completionHandler {
- // NSURLRequest configuration
- NSURL *url = [NSURL URLWithString:urlString];
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- [request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
- request.HTTPMethod = @"POST";
-
- SDLLogV(@"OnSystemRequest (HTTP) upload task created for URL: %@", urlString);
-
- // Create the upload task
- [self sdl_sendUploadRequest:request withData:data completionHandler:completionHandler];
-}
-
-/**
- * Start an upload for a body data dictionary, this is used by the "proprietary" system request needed for backward compatibility
- *
- * @param dictionary The system request dictionary that contains the HTTP data to be sent
- * @param urlString A string containing the URL to send the upload to
- * @param completionHandler A completion handler returning the response from the server to the upload task
- */
-- (void)sdl_uploadForBodyDataDictionary:(NSDictionary<NSString *, id> *)dictionary urlString:(NSString *)urlString completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
- NSParameterAssert(dictionary != nil);
- NSParameterAssert(urlString != nil);
- NSParameterAssert(completionHandler != NULL);
-
- // Extract data from the dictionary
- NSDictionary<NSString *, id> *requestData = dictionary[@"HTTPRequest"];
- NSDictionary *headers = requestData[@"headers"];
- NSString *contentType = headers[@"ContentType"];
- NSTimeInterval timeout = [headers[@"ConnectTimeout"] doubleValue];
- NSString *method = headers[@"RequestMethod"];
- NSString *bodyString = requestData[@"body"];
- NSData *bodyData = [bodyString dataUsingEncoding:NSUTF8StringEncoding];
-
- // NSURLRequest configuration
- NSURL *url = [NSURL URLWithString:urlString];
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- [request setValue:contentType forHTTPHeaderField:@"content-type"];
- request.timeoutInterval = timeout;
- request.HTTPMethod = method;
-
- SDLLogV(@"OnSystemRequest (Proprietary) upload task created for URL: %@", urlString);
-
- // Create the upload task
- [self sdl_sendUploadRequest:request withData:bodyData completionHandler:completionHandler];
-}
-
-- (void)sdl_sendUploadRequest:(NSURLRequest*)request withData:(NSData*)data completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
- NSMutableURLRequest* mutableRequest = [request mutableCopy];
-
- if ([mutableRequest.URL.scheme isEqualToString:@"http"]) {
- mutableRequest.URL = [NSURL URLWithString:[mutableRequest.URL.absoluteString stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]];
- }
-
- [[self.urlSession uploadTaskWithRequest:request fromData:data completionHandler:completionHandler] resume];
-}
-
-- (void)sdl_sendDataTaskWithURL:(NSURL*)url completionHandler:(URLSessionTaskCompletionHandler)completionHandler {
- if ([url.scheme isEqualToString:@"http"]) {
- url = [NSURL URLWithString:[url.absoluteString stringByReplacingCharactersInRange:NSMakeRange(0, 4) withString:@"https"]];
- }
-
- [[self.urlSession dataTaskWithURL:url completionHandler:completionHandler] resume];
-}
-
-#pragma mark - Delegate management
-
-- (void)addDelegate:(NSObject<SDLProxyListener> *)delegate {
- @synchronized(self.mutableProxyListeners) {
- [self.mutableProxyListeners addObject:delegate];
- }
-}
-
-- (void)removeDelegate:(NSObject<SDLProxyListener> *)delegate {
- @synchronized(self.mutableProxyListeners) {
- [self.mutableProxyListeners removeObject:delegate];
- }
-}
-
-- (void)sdl_invokeMethodOnDelegates:(SEL)aSelector withObject:(nullable id)object {
- // Occurs on the processing serial queue
- for (id<SDLProxyListener> listener in self.proxyListeners) {
- if ([listener respondsToSelector:aSelector]) {
- // HAX: http://stackoverflow.com/questions/7017281/performselector-may-cause-a-leak-because-its-selector-is-unknown
- ((void (*)(id, SEL, id))[(NSObject *)listener methodForSelector:aSelector])(listener, aSelector, object);
- }
- }
-}
-
-
-#pragma mark - System Request and SyncP handling
-
-- (void)sdl_sendEncodedSyncPData:(NSDictionary<NSString *, id> *)encodedSyncPData toURL:(NSString *)urlString withTimeout:(NSNumber *)timeout {
- // Configure HTTP URL & Request
- NSURL *url = [NSURL URLWithString:urlString];
- NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
- request.HTTPMethod = @"POST";
- [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
- request.timeoutInterval = 60;
-
- // Prepare the data in the required format
- NSString *encodedSyncPDataString = [[NSString stringWithFormat:@"%@", encodedSyncPData] componentsSeparatedByString:@"\""][1];
- NSArray<NSString *> *array = [NSArray arrayWithObject:encodedSyncPDataString];
- NSDictionary<NSString *, id> *dictionary = @{ @"data": array };
- NSError *JSONSerializationError = nil;
- NSData *data = [NSJSONSerialization dataWithJSONObject:dictionary options:kNilOptions error:&JSONSerializationError];
- if (JSONSerializationError) {
- SDLLogW(@"Error attempting to create SyncPData for HTTP request: %@", JSONSerializationError);
- return;
- }
-
- // Send the HTTP Request
- __weak typeof(self) weakSelf = self;
- [[self.urlSession uploadTaskWithRequest:request
- fromData:data
- completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
- [weakSelf sdl_syncPDataNetworkRequestCompleteWithData:data response:response error:error];
- }] resume];
-
- SDLLogV(@"OnEncodedSyncPData (HTTP Request)");
-}
-
-// Handle the OnEncodedSyncPData HTTP Response
-- (void)sdl_syncPDataNetworkRequestCompleteWithData:(NSData *)data response:(NSURLResponse *)response error:(NSError *)error {
- // Sample of response: {"data":["SDLKGLSDKFJLKSjdslkfjslkJLKDSGLKSDJFLKSDJF"]}
- SDLLogV(@"OnEncodedSyncPData (HTTP Response): %@", response);
-
- // Validate response data.
- if (data == nil || data.length == 0) {
- SDLLogW(@"OnEncodedSyncPData (HTTP Response): no data returned");
- return;
- }
-
- // Convert data to RPCRequest
- NSError *JSONConversionError = nil;
- NSDictionary<NSString *, id> *responseDictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&JSONConversionError];
- if (!JSONConversionError) {
- SDLEncodedSyncPData *request = [[SDLEncodedSyncPData alloc] init];
- request.correlationID = [NSNumber numberWithInt:PoliciesCorrelationId];
- request.data = [responseDictionary objectForKey:@"data"];
-
- [self sendRPC:request];
- }
-}
-
-
-#pragma mark - PutFile Streaming
-- (void)putFileStream:(NSInputStream *)inputStream withRequest:(SDLPutFile *)putFileRPCRequest {
- inputStream.delegate = self;
- objc_setAssociatedObject(inputStream, @"SDLPutFile", putFileRPCRequest, OBJC_ASSOCIATION_RETAIN);
- objc_setAssociatedObject(inputStream, @"BaseOffset", [putFileRPCRequest offset], OBJC_ASSOCIATION_RETAIN);
-
- [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
- [inputStream open];
-}
-
-- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode {
- switch (eventCode) {
- case NSStreamEventHasBytesAvailable: {
- // Grab some bytes from the stream and send them in a SDLPutFile RPC Request
- NSUInteger currentStreamOffset = [[stream propertyForKey:NSStreamFileCurrentOffsetKey] unsignedIntegerValue];
-
- NSMutableData *buffer = [NSMutableData dataWithLength:[[SDLGlobals sharedGlobals] mtuSizeForServiceType:SDLServiceTypeRPC]];
- NSInteger nBytesRead = [(NSInputStream *)stream read:(uint8_t *)buffer.mutableBytes maxLength:buffer.length];
- if (nBytesRead > 0) {
- NSData *data = [buffer subdataWithRange:NSMakeRange(0, (NSUInteger)nBytesRead)];
- NSUInteger baseOffset = [(NSNumber *)objc_getAssociatedObject(stream, @"BaseOffset") unsignedIntegerValue];
- NSUInteger newOffset = baseOffset + currentStreamOffset;
-
- SDLPutFile *putFileRPCRequest = (SDLPutFile *)objc_getAssociatedObject(stream, @"SDLPutFile");
- [putFileRPCRequest setOffset:[NSNumber numberWithUnsignedInteger:newOffset]];
- [putFileRPCRequest setLength:[NSNumber numberWithUnsignedInteger:(NSUInteger)nBytesRead]];
- [putFileRPCRequest setBulkData:data];
-
- [self sendRPC:putFileRPCRequest];
- }
-
- break;
- }
- case NSStreamEventEndEncountered: {
- // Cleanup the stream
- [stream close];
- [stream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
-
- break;
- }
- case NSStreamEventErrorOccurred: {
- SDLLogE(@"NSStream error attempting to upload putfile stream: %lu", (unsigned long)eventCode);
- break;
- }
- default: {
- break;
- }
- }
-}
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLProxyListener.h b/SmartDeviceLink/SDLProxyListener.h
deleted file mode 100644
index 25d52f589..000000000
--- a/SmartDeviceLink/SDLProxyListener.h
+++ /dev/null
@@ -1,1243 +0,0 @@
-// SDLProxyListener.h
-//
-
-#import <UIKit/UIKit.h>
-
-@class SDLAddCommand;
-@class SDLAddCommandResponse;
-@class SDLAddSubMenu;
-@class SDLAddSubMenuResponse;
-@class SDLAlert;
-@class SDLAlertManeuver;
-@class SDLAlertManeuverResponse;
-@class SDLAlertResponse;
-@class SDLButtonPress;
-@class SDLButtonPressResponse;
-@class SDLCancelInteraction;
-@class SDLCancelInteractionResponse;
-@class SDLChangeRegistration;
-@class SDLChangeRegistrationResponse;
-@class SDLCloseApplication;
-@class SDLCloseApplicationResponse;
-@class SDLCreateInteractionChoiceSet;
-@class SDLCreateInteractionChoiceSetResponse;
-@class SDLCreateWindow;
-@class SDLCreateWindowResponse;
-@class SDLDeleteCommand;
-@class SDLDeleteCommandResponse;
-@class SDLDeleteFile;
-@class SDLDeleteFileResponse;
-@class SDLDeleteInteractionChoiceSet;
-@class SDLDeleteInteractionChoiceSetResponse;
-@class SDLDeleteSubMenu;
-@class SDLDeleteSubMenuResponse;
-@class SDLDeleteWindow;
-@class SDLDeleteWindowResponse;
-@class SDLDiagnosticMessage;
-@class SDLDiagnosticMessageResponse;
-@class SDLDialNumber;
-@class SDLDialNumberResponse;
-@class SDLEncodedSyncPData;
-@class SDLEncodedSyncPDataResponse;
-@class SDLEndAudioPassThru;
-@class SDLEndAudioPassThruResponse;
-@class SDLGenericResponse;
-@class SDLGetCloudAppProperties;
-@class SDLGetCloudAppPropertiesResponse;
-@class SDLGetAppServiceData;
-@class SDLGetAppServiceDataResponse;
-@class SDLGetDTCs;
-@class SDLGetDTCsResponse;
-@class SDLGetFile;
-@class SDLGetFileResponse;
-@class SDLGetInteriorVehicleData;
-@class SDLGetInteriorVehicleDataResponse;
-@class SDLGetInteriorVehicleDataConsent;
-@class SDLGetInteriorVehicleDataConsentResponse;
-@class SDLGetSystemCapability;
-@class SDLGetSystemCapabilityResponse;
-@class SDLGetVehicleData;
-@class SDLGetVehicleDataResponse;
-@class SDLGetWayPoints;
-@class SDLGetWayPointsResponse;
-@class SDLListFiles;
-@class SDLListFilesResponse;
-@class SDLOnAppInterfaceUnregistered;
-@class SDLOnAppServiceData;
-@class SDLOnAudioPassThru;
-@class SDLOnButtonEvent;
-@class SDLOnButtonPress;
-@class SDLOnCommand;
-@class SDLOnDriverDistraction;
-@class SDLOnEncodedSyncPData;
-@class SDLOnHashChange;
-@class SDLOnHMIStatus;
-@class SDLOnInteriorVehicleData;
-@class SDLOnKeyboardInput;
-@class SDLOnLanguageChange;
-@class SDLOnLockScreenStatus;
-@class SDLOnPermissionsChange;
-@class SDLOnRCStatus;
-@class SDLOnSyncPData;
-@class SDLOnSystemCapabilityUpdated;
-@class SDLOnSystemRequest;
-@class SDLOnTBTClientState;
-@class SDLOnTouchEvent;
-@class SDLOnVehicleData;
-@class SDLOnWayPointChange;
-@class SDLPerformAppServiceInteraction;
-@class SDLPerformAppServiceInteractionResponse;
-@class SDLPerformAudioPassThru;
-@class SDLPerformAudioPassThruResponse;
-@class SDLPerformInteraction;
-@class SDLPerformInteractionResponse;
-@class SDLPublishAppService;
-@class SDLPublishAppServiceResponse;
-@class SDLPutFile;
-@class SDLPutFileResponse;
-@class SDLReadDID;
-@class SDLReadDIDResponse;
-@class SDLRegisterAppInterface;
-@class SDLRegisterAppInterfaceResponse;
-@class SDLReleaseInteriorVehicleDataModule;
-@class SDLReleaseInteriorVehicleDataModuleResponse;
-@class SDLResetGlobalProperties;
-@class SDLResetGlobalPropertiesResponse;
-@class SDLScrollableMessage;
-@class SDLScrollableMessageResponse;
-@class SDLSendHapticData;
-@class SDLSendHapticDataResponse;
-@class SDLSendLocation;
-@class SDLSendLocationResponse;
-@class SDLSetAppIcon;
-@class SDLSetAppIconResponse;
-@class SDLSetCloudAppProperties;
-@class SDLSetCloudAppPropertiesResponse;
-@class SDLSetDisplayLayout;
-@class SDLSetDisplayLayoutResponse;
-@class SDLSetGlobalProperties;
-@class SDLSetGlobalPropertiesResponse;
-@class SDLSetInteriorVehicleData;
-@class SDLSetInteriorVehicleDataResponse;
-@class SDLSetMediaClockTimer;
-@class SDLSetMediaClockTimerResponse;
-@class SDLShow;
-@class SDLShowAppMenu;
-@class SDLShowAppMenuResponse;
-@class SDLShowConstantTBT;
-@class SDLShowConstantTBTResponse;
-@class SDLShowResponse;
-@class SDLSlider;
-@class SDLSliderResponse;
-@class SDLSpeak;
-@class SDLSpeakResponse;
-@class SDLSubscribeButton;
-@class SDLSubscribeButtonResponse;
-@class SDLSubscribeVehicleData;
-@class SDLSubscribeVehicleDataResponse;
-@class SDLSubscribeWayPoints;
-@class SDLSubscribeWayPointsResponse;
-@class SDLSyncPData;
-@class SDLSyncPDataResponse;
-@class SDLSystemRequest;
-@class SDLUnpublishAppService;
-@class SDLUnpublishAppServiceResponse;
-@class SDLUnregisterAppInterface;
-@class SDLUnregisterAppInterfaceResponse;
-@class SDLUnsubscribeButton;
-@class SDLUnsubscribeButtonResponse;
-@class SDLUnsubscribeVehicleData;
-@class SDLUnsubscribeVehicleDataResponse;
-@class SDLUnsubscribeWayPoints;
-@class SDLUnsubscribeWayPointsResponse;
-@class SDLUpdateTurnList;
-@class SDLUpdateTurnListResponse;
-
-NS_ASSUME_NONNULL_BEGIN
-
-@protocol SDLProxyListener <NSObject>
-
-/**
- * Called when a Driver Distraction notification is received from Core
- *
- * @param notification A SDLOnDriverDistraction object
- */
-- (void)onOnDriverDistraction:(SDLOnDriverDistraction *)notification;
-
-/**
- * Called when the HMI Status of the SDL app has changed
- *
- * @param notification A SDLOnHMIStatus object
- */
-- (void)onOnHMIStatus:(SDLOnHMIStatus *)notification;
-
-/**
- * Called when a connection with Core has closed
- */
-- (void)onProxyClosed;
-
-/**
- * Called when a connection with Core has been established
- */
-- (void)onProxyOpened;
-
-@optional
-
-#pragma mark - Responses
-
-/**
- * Called when an Add Command Response is received from Core
- *
- * @param response A SDLAddCommandResponse object
- */
-- (void)onAddCommandResponse:(SDLAddCommandResponse *)response;
-
-/**
- * Called when an Add SubMenu Response is received from Core
- *
- * @param response A SDLAddSubMenuResponse object
- */
-- (void)onAddSubMenuResponse:(SDLAddSubMenuResponse *)response;
-
-/**
- * Called when a Alert Maneuver Response is received from Core
- *
- * @param response A SDLAlertManeuverResponse object
- */
-- (void)onAlertManeuverResponse:(SDLAlertManeuverResponse *)response;
-
-/**
- * Called when a Alert Response is received from Core
- *
- * @param response A SDLAlertResponse object
- */
-- (void)onAlertResponse:(SDLAlertResponse *)response;
-
-/**
- * Called when a Button Press Response is received from Core
- *
- * @param response A SDLButtonPressResponse object
- */
-- (void)onButtonPressResponse:(SDLButtonPressResponse *)response;
-
-/**
- * Called when a `CancelInteraction` response is received from Core
- *
- * @param response A SDLCancelInteractionResponse object
- */
-- (void)onCancelInteractionResponse:(SDLCancelInteractionResponse *)response;
-
-/**
- * Called when a Change Registration Response is received from Core
- *
- * @param response A SDLChangeRegistrationResponse object
- */
-- (void)onChangeRegistrationResponse:(SDLChangeRegistrationResponse *)response;
-
-/**
- * Called when a `CloseApplication` response is received from Core
- *
- * @param response A SDLCloseApplicationResponse object
- */
-- (void)onCloseApplicationResponse:(SDLCloseApplicationResponse *)response;
-
-/**
- * Called when a Create Interaction Choice Set Response is received from Core
- *
- * @param response A SDLCreateInteractionChoiceSetResponse object
- */
-- (void)onCreateInteractionChoiceSetResponse:(SDLCreateInteractionChoiceSetResponse *)response;
-
-/**
- * Called when a Create Window Response is received from Core
- *
- * @param response A SDLCreateWindowResponse object
- */
-- (void)onCreateWindowResponse:(SDLCreateWindowResponse *)response;
-
-/**
- * Called when a Delete Command Response is received from Core
- *
- * @param response A SDLDeleteCommandResponse object
- */
-- (void)onDeleteCommandResponse:(SDLDeleteCommandResponse *)response;
-
-/**
- * Called when a Delete File Response is received from Core
- *
- * @param response A SDLDeleteFileResponse object
- */
-- (void)onDeleteFileResponse:(SDLDeleteFileResponse *)response;
-
-/**
- * Called when a Delete Interaction Choice Set Response is received from Core
- *
- * @param response A SDLDeleteInteractionChoiceSetResponse object
- */
-- (void)onDeleteInteractionChoiceSetResponse:(SDLDeleteInteractionChoiceSetResponse *)response;
-
-/**
- * Called when a Delete SubMenu Response is received from Core
- *
- * @param response A SDLDeleteSubMenuResponse object
- */
-- (void)onDeleteSubMenuResponse:(SDLDeleteSubMenuResponse *)response;
-
-/**
- * Called when a Delete Window Response is received from Core
- *
- * @param response A SDLDeleteWindowResponse object
- */
-- (void)onDeleteWindowResponse:(SDLDeleteWindowResponse *)response;
-
-/**
- * Called when a Diagnostic Message Response is received from Core
- *
- * @param response A SDLDiagnosticMessageResponse object
- */
-- (void)onDiagnosticMessageResponse:(SDLDiagnosticMessageResponse *)response;
-
-/**
- * Called when a Dial Number Response is received from Core
- *
- * @param response A SDLDialNumberResponse object
- */
-- (void)onDialNumberResponse:(SDLDialNumberResponse *)response;
-
-/**
- * Called when an Encoded Sync P Data Response is received from Core
- *
- * @param response A SDLEncodedSyncPDataResponse object
- */
-- (void)onEncodedSyncPDataResponse:(SDLEncodedSyncPDataResponse *)response;
-
-/**
- * Called when an End Audio Pass Thru Response is received from Core
- *
- * @param response A SDLEndAudioPassThruResponse object
- */
-- (void)onEndAudioPassThruResponse:(SDLEndAudioPassThruResponse *)response;
-
-/**
- * Called when a Generic Response is received from Core
- *
- * @param response A SDLGenericResponse object
- */
-- (void)onGenericResponse:(SDLGenericResponse *)response;
-
-/**
- * Called when a Get App Service Data Response is received from Core
- *
- * @param response A SDLGetAppServiceDataResponse object
- */
-- (void)onGetAppServiceDataResponse:(SDLGetAppServiceDataResponse *)response;
-
-/**
- * Called when a GetCloudAppPropertiesResponse Response is received from Core
- *
- * @param response A SDLGetCloudAppPropertiesResponse object
- */
-- (void)onGetCloudAppPropertiesResponse:(SDLGetCloudAppPropertiesResponse *)response;
-
-/**
- * Called when a Get DTCs Response is received from Core
- *
- * @param response A SDLGetDTCsResponse object
- */
-- (void)onGetDTCsResponse:(SDLGetDTCsResponse *)response;
-
-/**
- * Called when a Get File Response is received from Core
- *
- * @param response A SDLGetFileResponse object
- */
-- (void)onGetFileResponse:(SDLGetFileResponse *)response;
-
-/**
- * Called when a Get Interior Vehicle Data Response is received from Core
- *
- * @param response A SDLGetInteriorVehicleDataResponse object
- */
-- (void)onGetInteriorVehicleDataResponse:(SDLGetInteriorVehicleDataResponse *)response;
-
-/**
- * Called when a Get Interior Vehicle Data Consent Response is received from Core
- *
- * @param response A SDLGetInteriorVehicleDataConsentResponse object
- */
-- (void)onGetInteriorVehicleDataConsentResponse:(SDLGetInteriorVehicleDataConsentResponse *)response;
-
-/**
- * Called when a Get System Capability Response is received from Core
- *
- * @param response A SDLGetSystemCapabilityResponse object
- */
-- (void)onGetSystemCapabilityResponse:(SDLGetSystemCapabilityResponse *)response;
-
-/**
- * Called when a Get Vehicle Data Response is received from Core
- *
- * @param response A SDLGetVehicleDataResponse object
- */
-- (void)onGetVehicleDataResponse:(SDLGetVehicleDataResponse *)response;
-
-/**
- * Called when a Get Way Points Response is received from Core
- *
- * @param response A SDLGetWaypointsResponse object
- */
-- (void)onGetWayPointsResponse:(SDLGetWayPointsResponse *)response;
-
-/**
- * Called when a List Files Response is received from Core
- *
- * @param response A SDLListFilesResponse object
- */
-- (void)onListFilesResponse:(SDLListFilesResponse *)response;
-
-/**
- * Called when a Received Lock Screen Icon notification is received from Core
- *
- * @param icon An image
- */
-- (void)onReceivedLockScreenIcon:(UIImage *)icon;
-
-/**
- * Called when a Perform App Service Interaction Response is received from Core
- *
- * @param response A SDLPerformAppServiceInteractionResponse object
- */
-- (void)onPerformAppServiceInteractionResponse:(SDLPerformAppServiceInteractionResponse *)response;
-
-/**
- * Called when a Perform Audio Pass Thru Response is received from Core
- *
- * @param response A SDLPerformAudioPassThruResponse object
- */
-- (void)onPerformAudioPassThruResponse:(SDLPerformAudioPassThruResponse *)response;
-
-/**
- * Called when a Perform Interaction Response is received from Core
- *
- * @param response A SDLPerformInteractionResponse object
- */
-- (void)onPerformInteractionResponse:(SDLPerformInteractionResponse *)response;
-
-/**
- * Called when a Publish App Service Response is received from Core
- *
- * @param response A SDLPublishAppService object
- */
-- (void)onPublishAppServiceResponse:(SDLPublishAppServiceResponse *)response;
-
-/**
- * Called when a Put File Response is received from Core
- *
- * @param response A SDLPutFileResponse object
- */
-- (void)onPutFileResponse:(SDLPutFileResponse *)response;
-
-/**
- * Called when a Read DID Response is received from Core
- *
- * @param response A SDLReadDIDResponse object
- */
-- (void)onReadDIDResponse:(SDLReadDIDResponse *)response;
-
-/**
- * Called when a Register App Interface Response is received from Core
- *
- * @param response A SDLRegisterAppInterfaceResponse object
- */
-- (void)onRegisterAppInterfaceResponse:(SDLRegisterAppInterfaceResponse *)response;
-
-/**
- * Called when a Release Interior Vehicle Data Module Response is received from Core
- *
- * @param response A SDLReleaseInteriorVehicleDataModuleResponse object
- */
-- (void)onReleaseInteriorVehicleDataModuleResponse:(SDLReleaseInteriorVehicleDataModuleResponse *)response;
-
-/**
- * Called when a Reset Global Properties Response is received from Core
- *
- * @param response A SDLResetGlobalPropertiesResponse object
- */
-- (void)onResetGlobalPropertiesResponse:(SDLResetGlobalPropertiesResponse *)response;
-
-/**
- * Called when a Scrollable Message Response is received from Core
- *
- * @param response A SDLScrollableMessageResponse object
- */
-- (void)onScrollableMessageResponse:(SDLScrollableMessageResponse *)response;
-
-/**
- * Called when a Send Haptic Data Response is received from Core
- *
- * @param response A SDLSendHapticDataResponse object
- */
-- (void)onSendHapticDataResponse:(SDLSendHapticDataResponse *)response;
-
-/**
- * Called when a Send Location Response is received from Core
- *
- * @param response A SDLSendLocationResponse object
- */
-- (void)onSendLocationResponse:(SDLSendLocationResponse *)response;
-
-/**
- * Called when a Set App Icon Response is received from Core
- *
- * @param response A SDLSetAppIconResponse object
- */
-- (void)onSetAppIconResponse:(SDLSetAppIconResponse *)response;
-
-/**
- * Called when a SetCloudAppPropertiesResponse is received from Core
- *
- * @param response A SDLSetCloudAppPropertiesResponse object
- */
-- (void)onSetCloudAppPropertiesResponse:(SDLSetCloudAppPropertiesResponse *)response;
-
-/**
- * Called when a Set Display Layout Response is received from Core
- *
- * @param response A SDLSetDisplayLayoutResponse object
- */
-- (void)onSetDisplayLayoutResponse:(SDLSetDisplayLayoutResponse *)response;
-
-/**
- * Called when a Set Global Properties Response is received from Core
- *
- * @param response A SDLSetGlobalPropertiesResponse object
- */
-- (void)onSetGlobalPropertiesResponse:(SDLSetGlobalPropertiesResponse *)response;
-
-/**
- * Called when a Set Interior Vehicle Data Response is received from Core
- *
- * @param response A SDLSetInteriorVehicleDataResponse object
- */
-- (void)onSetInteriorVehicleDataResponse:(SDLSetInteriorVehicleDataResponse *)response;
-
-/**
- * Called when a Set Media Clock Timer Response is received from Core
- *
- * @param response A SDLSetMediaClockTimerResponse object
- */
-- (void)onSetMediaClockTimerResponse:(SDLSetMediaClockTimerResponse *)response;
-
-/**
- * Called when a Show Constant TBT Response is received from Core
- *
- * @param response A SDLShowConstantTBTResponse object
- */
-- (void)onShowConstantTBTResponse:(SDLShowConstantTBTResponse *)response;
-
-/**
- * Called when a Show Response is received from Core
- *
- * @param response A SDLShowResponse object
- */
-- (void)onShowResponse:(SDLShowResponse *)response;
-
-/**
- * Called when a ShowAppMenu Response is received from Core
- *
- * @param response A SDLShowAppMenuResponse object
- */
-- (void)onShowAppMenuResponse:(SDLShowAppMenuResponse *)response;
-
-/**
- * Called when a Slider Response is received from Core
- *
- * @param response A SDLSliderResponse object
- */
-- (void)onSliderResponse:(SDLSliderResponse *)response;
-
-/**
- * Called when a Speak Response is received from Core
- *
- * @param response A SDLSpeakResponse object
- */
-- (void)onSpeakResponse:(SDLSpeakResponse *)response;
-
-/**
- * Called when a Subscribe Button Response is received from Core
- *
- * @param response A SDLSubscribeButtonResponse object
- */
-- (void)onSubscribeButtonResponse:(SDLSubscribeButtonResponse *)response;
-
-/**
- * Called when a Subscribe Vehicle Data Response is received from Core
- *
- * @param response A SDLSubscribeVehicleDataResponse object
- */
-- (void)onSubscribeVehicleDataResponse:(SDLSubscribeVehicleDataResponse *)response;
-
-/**
- * Called when a Subscribe Way Points Response is received from Core
- *
- * @param response A SDLSubscribeWayPointsResponse object
- */
-- (void)onSubscribeWayPointsResponse:(SDLSubscribeWayPointsResponse *)response;
-
-/**
- * Called when a Sync P Data Response is received from Core
- *
- * @param response A SDLSyncPDataResponse object
- */
-- (void)onSyncPDataResponse:(SDLSyncPDataResponse *)response;
-
-/**
- * Called when an Update Turn List Response is received from Core
- *
- * @param response A SDLUpdateTurnListResponse object
- */
-- (void)onUpdateTurnListResponse:(SDLUpdateTurnListResponse *)response;
-
-/**
- * Called when an Unpublish App Service Response is received from Core
- *
- * @param response A SDLUnpublishAppServiceResponse object
- */
-- (void)onUnpublishAppServiceResponse:(SDLUnpublishAppServiceResponse *)response;
-
-/**
- * Called when an Unregister App Interface Response is received from Core
- *
- * @param response A SDLUnregisterAppInterfaceResponse object
- */
-- (void)onUnregisterAppInterfaceResponse:(SDLUnregisterAppInterfaceResponse *)response;
-
-/**
- * Called when an Unsubscribe Button Response is received from Core
- *
- * @param response A SDLUnsubscribeButtonResponse object
- */
-- (void)onUnsubscribeButtonResponse:(SDLUnsubscribeButtonResponse *)response;
-
-/**
- * Called when an Unsubscribe Vehicle Data Response is received from Core
- *
- * @param response A SDLUnsubscribeVehicleDataResponse object
- */
-- (void)onUnsubscribeVehicleDataResponse:(SDLUnsubscribeVehicleDataResponse *)response;
-
-/**
- * Called when an Unsubscribe Way Points Response is received from Core
- *
- * @param response A SDLUnsubscribeWayPointsResponse object
- */
-- (void)onUnsubscribeWayPointsResponse:(SDLUnsubscribeWayPointsResponse *)response;
-
-#pragma mark - Requests
-
-/**
- * Called when a `AddCommand` request is received from Core
- *
- * @param request A SDLAddCommand object
- */
-- (void)onAddCommand:(SDLAddCommand *)request;
-
-/**
- * Called when a `AddSubMenu` request is received from Core
- *
- * @param request A SDLAddSubMenu object
- */
-- (void)onAddSubMenu:(SDLAddSubMenu *)request;
-
-/**
- * Called when a `Alert` request is received from Core
- *
- * @param request A SDLAlert object
- */
-- (void)onAlert:(SDLAlert *)request;
-
-/**
- * Called when a `AlertManeuver` request is received from Core
- *
- * @param request A SDLAlertManeuver object
- */
-- (void)onAlertManeuver:(SDLAlertManeuver *)request;
-
-/**
- * Called when a `ButtonPress` request is received from Core
- *
- * @param request A SDLButtonPress object
- */
-- (void)onButtonPress:(SDLButtonPress *)request;
-
-/**
- * Called when a `CancelInteraction` request is received from Core
- *
- * @param request A SDLCancelInteraction object
- */
-- (void)onCancelInteraction:(SDLCancelInteraction *)request;
-
-/**
- * Called when a `ChangeRegistration` request is received from Core
- *
- * @param request A SDLChangeRegistration object
- */
-- (void)onChangeRegistration:(SDLChangeRegistration *)request;
-
-/**
- * Called when a `CloseApplication` request is received from Core
- *
- * @param request A SDLCloseApplication object
- */
-- (void)onCloseApplication:(SDLCloseApplication *)request;
-
-/**
- * Called when a `CreateInteractionChoiceSet` request is received from Core
- *
- * @param request A SDLCreateInteractionChoiceSet object
- */
-- (void)onCreateInteractionChoiceSet:(SDLCreateInteractionChoiceSet *)request;
-
-/**
- * Called when a `SDLCreateWindow` request is received from Core
- *
- * @param request A SDLCreateWindow object
- */
-- (void)onCreateWindow:(SDLCreateWindow *)request;
-
-/**
- * Called when a `DeleteCommand` request is received from Core
- *
- * @param request A SDLDeleteCommand object
- */
-- (void)onDeleteCommand:(SDLDeleteCommand *)request;
-
-/**
- * Called when a `DeleteFile` request is received from Core
- *
- * @param request A SDLDeleteFile object
- */
-- (void)onDeleteFile:(SDLDeleteFile *)request;
-
-/**
- * Called when a `DeleteInteractionChoiceSet` request is received from Core
- *
- * @param request A SDLDeleteInteractionChoiceSet object
- */
-- (void)onDeleteInteractionChoiceSet:(SDLDeleteInteractionChoiceSet *)request;
-
-/**
- * Called when a `DeleteSubMenu` request is received from Core
- *
- * @param request A SDLDeleteSubMenu object
- */
-- (void)onDeleteSubMenu:(SDLDeleteSubMenu *)request;
-
-/**
- * Called when a `SDLDeleteWindow` request is received from Core
- *
- * @param request A SDLDeleteWindow object
- */
-- (void)onDeleteWindow:(SDLDeleteWindow *)request;
-
-/**
- * Called when a `DiagnosticMessage` request is received from Core
- *
- * @param request A SDLDiagnosticMessage object
- */
-- (void)onDiagnosticMessage:(SDLDiagnosticMessage *)request;
-
-/**
- * Called when a `DialNumber` request is received from Core
- *
- * @param request A SDLDialNumber object
- */
-- (void)onDialNumber:(SDLDialNumber *)request;
-
-/**
- * Called when a `EncodedSyncPData` request is received from Core
- *
- * @param request A SDLEncodedSyncPData object
- */
-- (void)onEncodedSyncPData:(SDLEncodedSyncPData *)request;
-
-/**
- * Called when a `EndAudioPassThru` request is received from Core
- *
- * @param request A SDLEndAudioPassThru object
- */
-- (void)onEndAudioPassThru:(SDLEndAudioPassThru *)request;
-
-/**
- * Called when a `GetAppServiceData` request is received from Core
- *
- * @param request A SDLGetAppServiceData object
- */
-- (void)onGetAppServiceData:(SDLGetAppServiceData *)request;
-
-/**
- * Called when a `GetCloudAppProperties` request is received from Core
- *
- * @param request A SDLGetCloudAppProperties object
- */
-- (void)onGetCloudAppProperties:(SDLGetCloudAppProperties *)request;
-
-/**
- * Called when a `GetDTCs` request is received from Core
- *
- * @param request A SDLGetDTCs object
- */
-- (void)onGetDTCs:(SDLGetDTCs *)request;
-
-/**
- * Called when a `GetFile` request is received from Core
- *
- * @param request A SDLGetFile object
- */
-- (void)onGetFile:(SDLGetFile *)request;
-
-/**
- * Called when a `GetInteriorVehicleData` request is received from Core
- *
- * @param request A SDLGetInteriorVehicleData object
- */
-- (void)onGetInteriorVehicleData:(SDLGetInteriorVehicleData *)request;
-
-/**
- * Called when a `GetInteriorVehicleDataConsent` request is received from Core
- *
- * @param request A SDLGetInteriorVehicleDataConsent object
- */
-- (void)onGetInteriorVehicleConsentData:(SDLGetInteriorVehicleDataConsent *)request;
-
-/**
- * Called when a `GetSystemCapability` request is received from Core
- *
- * @param request A SDLGetSystemCapability object
- */
-- (void)onGetSystemCapability:(SDLGetSystemCapability *)request;
-
-/**
- * Called when a `GetVehicleData` request is received from Core
- *
- * @param request A SDLGetVehicleData object
- */
-- (void)onGetVehicleData:(SDLGetVehicleData *)request;
-
-/**
- * Called when a `GetWayPoints` request is received from Core
- *
- * @param request A SDLGetWayPoints object
- */
-- (void)onGetWayPoints:(SDLGetWayPoints *)request;
-
-/**
- * Called when a `ListFiles` request is received from Core
- *
- * @param request A SDLListFiles object
- */
-- (void)onListFiles:(SDLListFiles *)request;
-
-/**
- * Called when a `PerformAppServiceInteraction` request is received from Core
- *
- * @param request A SDLPerformAppServiceInteraction object
- */
-- (void)onPerformAppServiceInteraction:(SDLPerformAppServiceInteraction *)request;
-
-/**
- * Called when a `PerformAudioPassThru` request is received from Core
- *
- * @param request A SDLPerformAudioPassThru object
- */
-- (void)onPerformAudioPassThru:(SDLPerformAudioPassThru *)request;
-
-/**
- * Called when a `PerformInteraction` request is received from Core
- *
- * @param request A SDLPerformInteraction object
- */
-- (void)onPerformInteraction:(SDLPerformInteraction *)request;
-
-/**
- * Called when a `PublishAppService` request is received from Core
- *
- * @param request A SDLPublishAppService object
- */
-- (void)onPublishAppService:(SDLPublishAppService *)request;
-
-/**
- * Called when a `PutFile` request is received from Core
- *
- * @param request A SDLPutFile object
- */
-- (void)onPutFile:(SDLPutFile *)request;
-
-/**
- * Called when a `ReadDID` request is received from Core
- *
- * @param request A SDLReadDID object
- */
-- (void)onReadDID:(SDLReadDID *)request;
-
-/**
- * Called when a `RegisterAppInterface` request is received from Core
- *
- * @param request A SDLRegisterAppInterface object
- */
-- (void)onRegisterAppInterface:(SDLRegisterAppInterface *)request;
-
-/**
- * Called when a `ReleaseInteriorVehicleDataModule` request is received from Core
- *
- * @param request A SDLReleaseInteriorVehicleDataModule object
- */
-- (void)onReleaseInteriorVehicleDataModule:(SDLReleaseInteriorVehicleDataModule *)request;
-
-/**
- * Called when a `ResetGlobalProperties` request is received from Core
- *
- * @param request A SDLResetGlobalProperties object
- */
-- (void)onResetGlobalProperties:(SDLResetGlobalProperties *)request;
-
-/**
- * Called when a `ScrollableMessage` request is received from Core
- *
- * @param request A SDLScrollableMessage object
- */
-- (void)onScrollableMessage:(SDLScrollableMessage *)request;
-
-/**
- * Called when a `SendHapticData` request is received from Core
- *
- * @param request A SDLSendHapticData object
- */
-- (void)onSendHapticData:(SDLSendHapticData *)request;
-
-/**
- * Called when a `SendLocation` request is received from Core
- *
- * @param request A SDLSendLocation object
- */
-- (void)onSendLocation:(SDLSendLocation *)request;
-
-/**
- * Called when a `SetAppIcon` request is received from Core
- *
- * @param request A SDLSetAppIcon object
- */
-- (void)onSetAppIcon:(SDLSetAppIcon *)request;
-
-/**
- * Called when a `SetCloudAppProperties` request is received from Core
- *
- * @param request A SDLSetCloudAppProperties object
- */
-- (void)onSetCloudAppProperties:(SDLSetCloudAppProperties *)request;
-
-/**
- * Called when a `SetDisplayLayout` request is received from Core
- *
- * @param request A SDLSetDisplayLayout object
- */
-- (void)onSetDisplayLayout:(SDLSetDisplayLayout *)request;
-
-/**
- * Called when a `SetGlobalProperties` request is received from Core
- *
- * @param request A SDLSetGlobalProperties object
- */
-- (void)onSetGlobalProperties:(SDLSetGlobalProperties *)request;
-
-/**
- * Called when a `SetInteriorVehicleData` request is received from Core
- *
- * @param request A SDLSetInteriorVehicleData object
- */
-- (void)onSetInteriorVehicleData:(SDLSetInteriorVehicleData *)request;
-
-/**
- * Called when a `SetMediaClockTimer` request is received from Core
- *
- * @param request A SDLSetMediaClockTimer object
- */
-- (void)onSetMediaClockTimer:(SDLSetMediaClockTimer *)request;
-
-/**
- * Called when a `Show` request is received from Core
- *
- * @param request A SDLShow object
- */
-- (void)onShow:(SDLShow *)request;
-
-/**
- * Called when a `ShowAppMenu` is received from Core
- *
- * @param request A SDLShowAppMenu object
- */
-- (void)onShowAppMenu:(SDLShowAppMenu *)request;
-
-/**
- * Called when a `ShowConstantTBT` request is received from Core
- *
- * @param request A SDLShowConstantTBT object
- */
-- (void)onShowConstantTBT:(SDLShowConstantTBT *)request;
-
-/**
- * Called when a `Slider` request is received from Core
- *
- * @param request A SDLSlider object
- */
-- (void)onSlider:(SDLSlider *)request;
-
-/**
- * Called when a `Speak` request is received from Core
- *
- * @param request A SDLSpeak object
- */
-- (void)onSpeak:(SDLSpeak *)request;
-
-/**
- * Called when a `SubscribeButton` request is received from Core
- *
- * @param request A SDLSubscribeButton object
- */
-- (void)onSubscribeButton:(SDLSubscribeButton *)request;
-
-/**
- * Called when a `SubscribeVehicleData` request is received from Core
- *
- * @param request A SDLSubscribeVehicleData object
- */
-- (void)onSubscribeVehicleData:(SDLSubscribeVehicleData *)request;
-
-/**
- * Called when a `SubscribeWayPoints` request is received from Core
- *
- * @param request A SDLSubscribeWayPoints object
- */
-- (void)onSubscribeWayPoints:(SDLSubscribeWayPoints *)request;
-
-/**
- * Called when a `SyncPData` request is received from Core
- *
- * @param request A SDLSyncPData object
- */
-- (void)onSyncPData:(SDLSyncPData *)request;
-
-/**
- * Called when a `SystemRequest` request is received from Core
- *
- * @param request A SDLSystemRequest object
- */
-- (void)onSystemRequest:(SDLSystemRequest *)request;
-
-/**
- * Called when a `SDLUnpublishAppService` request is received from Core
- *
- * @param request A SDLUnpublishAppService object
- */
-- (void)onUnpublishAppService:(SDLUnpublishAppService *)request;
-
-/**
- * Called when a `UnregisterAppInterface` request is received from Core
- *
- * @param request A SDLUnregisterAppInterface object
- */
-- (void)onUnregisterAppInterface:(SDLUnregisterAppInterface *)request;
-
-/**
- * Called when a `UnsubscribeButton` request is received from Core
- *
- * @param request A SDLUnsubscribeButton object
- */
-- (void)onUnsubscribeButton:(SDLUnsubscribeButton *)request;
-
-/**
- * Called when a `UnsubscribeVehicleData` request is received from Core
- *
- * @param request A SDLUnsubscribeVehicleData object
- */
-- (void)onUnsubscribeVehicleData:(SDLUnsubscribeVehicleData *)request;
-
-/**
- * Called when a `UnsubscribeWayPoints` request is received from Core
- *
- * @param request A SDLUnsubscribeWayPoints object
- */
-- (void)onUnsubscribeWayPoints:(SDLUnsubscribeWayPoints *)request;
-
-/**
- * Called when a `UpdateTurnList` request is received from Core
- *
- * @param request A SDLUpdateTurnList object
- */
-- (void)onUpdateTurnList:(SDLUpdateTurnList *)request;
-
-
-#pragma mark - Notifications
-
-/**
- * Called when an On App Interface Unregistered notification is received from Core
- *
- * @param notification A SDLOnAppInterfaceUnregistered object
- */
-- (void)onOnAppInterfaceUnregistered:(SDLOnAppInterfaceUnregistered *)notification;
-
-/**
- * Called when an On App Service Data notification is received from Core
- *
- * @param notification A SDLOnAppServiceData object
- */
-- (void)onOnAppServiceData:(SDLOnAppServiceData *)notification;
-
-/**
- * Called when an On Audio Pass Thru notification is received from Core
- *
- * @param notification A SDLOnAudioPassThru object
- */
-- (void)onOnAudioPassThru:(SDLOnAudioPassThru *)notification;
-
-/**
- * Called when an On Button Event notification is received from Core
- *
- * @param notification A SDLOnButtonEvent object
- */
-- (void)onOnButtonEvent:(SDLOnButtonEvent *)notification;
-
-/**
- * Called when an On Button Press notification is received from Core
- *
- * @param notification A SDLOnButtonPress object
- */
-- (void)onOnButtonPress:(SDLOnButtonPress *)notification;
-
-/**
- * Called when an On Command notification is received from Core
- *
- * @param notification A SDLOnCommand object
- */
-- (void)onOnCommand:(SDLOnCommand *)notification;
-
-/**
- * Called when an On Encoded Sync P Data notification is received from Core
- *
- * @param notification A SDLOnEncodedSyncPData object
- */
-- (void)onOnEncodedSyncPData:(SDLOnEncodedSyncPData *)notification;
-
-/**
- * Called when an On Hash Change notification is received from Core
- *
- * @param notification A SDLOnHashChange object
- */
-- (void)onOnHashChange:(SDLOnHashChange *)notification;
-
-/**
- * Called when an On Interior Vehicle Data notification is received from Core
- *
- * @param notification A SDLOnInteriorVehicleData object
- */
-- (void)onOnInteriorVehicleData:(SDLOnInteriorVehicleData *)notification;
-
-/**
- * Called when an On Keyboard Input notification is received from Core
- *
- * @param notification A SDLOnKeyboardInput object
- */
-- (void)onOnKeyboardInput:(SDLOnKeyboardInput *)notification;
-
-/**
- * Called when an On Language Change notification is received from Core
- *
- * @param notification A SDLOnLanguageChange object
- */
-- (void)onOnLanguageChange:(SDLOnLanguageChange *)notification;
-
-/**
- * Called when an On Lock Screen notification is received from Core
- *
- * @param notification A SDLOnLockScreenStatus object
- */
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-- (void)onOnLockScreenNotification:(SDLOnLockScreenStatus *)notification;
-#pragma clang diagnostic pop
-
-/**
- * Called when an On Permissions Change notification is received from Core
- *
- * @param notification A SDLOnPermissionsChange object
- */
-- (void)onOnPermissionsChange:(SDLOnPermissionsChange *)notification;
-
-/**
- * Called when an On RC Change notification is received from Core
- *
- * @param notification A SDLOnRCStatus object
- */
-- (void)onOnRCStatus:(SDLOnRCStatus *)notification;
-
-/**
- * Called when an On Sync P notification is received from Core
- *
- * @param notification A SDLOnSyncPData object
- */
-- (void)onOnSyncPData:(SDLOnSyncPData *)notification;
-
-/**
- * Called when an `OnSystemCapabilityUpdated` notification is received from Core
- *
- * @param notification A SDLOnSystemCapabilityUpdated object
- */
-- (void)onOnSystemCapabilityUpdated:(SDLOnSystemCapabilityUpdated *)notification;
-
-/**
- * Called when an On System Request notification is received from Core
- *
- * @param notification A SDLOnSystemRequest object
- */
-- (void)onOnSystemRequest:(SDLOnSystemRequest *)notification;
-
-/**
- * Called when an On TBT Client State notification is received from Core
- *
- * @param notification A SDLOnTBTClientState object
- */
-- (void)onOnTBTClientState:(SDLOnTBTClientState *)notification;
-
-/**
- * Called when an On Touch Event notification is received from Core
- *
- * @param notification A SDLOnTouchEvent object
- */
-- (void)onOnTouchEvent:(SDLOnTouchEvent *)notification;
-
-/**
- * Called when an On Vehicle Data notification is received from Core
- *
- * @param notification A SDLOnVehicleData object
- */
-- (void)onOnVehicleData:(SDLOnVehicleData *)notification;
-
-/**
- * Called when an On Way Point Change notification is received from Core
- *
- * @param notification A SDLOnWayPointChange object
- */
-- (void)onOnWayPointChange:(SDLOnWayPointChange *)notification;
-
-#pragma mark - Other
-
-/**
- * Called when an Error message is received from Core
- *
- * @param e An exception message
- */
-- (void)onError:(NSException *)e;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLPutFile.h b/SmartDeviceLink/SDLPutFile.h
index ac621a0b4..98a05fe69 100644
--- a/SmartDeviceLink/SDLPutFile.h
+++ b/SmartDeviceLink/SDLPutFile.h
@@ -88,7 +88,14 @@ NS_ASSUME_NONNULL_BEGIN
*
* Required, max length 255 characters
*/
-@property (strong, nonatomic) NSString *syncFileName;
+@property (strong, nonatomic) NSString *syncFileName __deprecated_msg("use sdlFileName instead");
+
+/**
+* File reference name
+*
+* Required, max length 255 characters
+*/
+@property (strong, nonatomic) NSString *sdlFileName;
/**
* A FileType value representing a selected file type
diff --git a/SmartDeviceLink/SDLPutFile.m b/SmartDeviceLink/SDLPutFile.m
index 162ca5b6d..2470be16d 100644
--- a/SmartDeviceLink/SDLPutFile.m
+++ b/SmartDeviceLink/SDLPutFile.m
@@ -28,7 +28,7 @@ NS_ASSUME_NONNULL_BEGIN
return nil;
}
- self.syncFileName = fileName;
+ self.sdlFileName = fileName;
self.fileType = fileType;
return self;
@@ -95,6 +95,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:SDLRPCParameterNameSyncFileName ofClass:NSString.class error:&error];
}
+- (void)setSdlFileName:(NSString *)syncFileName {
+ [self.parameters sdl_setObject:syncFileName forName:SDLRPCParameterNameSyncFileName];
+}
+
+- (NSString *)sdlFileName {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameSyncFileName ofClass:NSString.class error:&error];
+}
+
- (void)setFileType:(SDLFileType)fileType {
[self.parameters sdl_setObject:fileType forName:SDLRPCParameterNameFileType];
}
diff --git a/SmartDeviceLink/SDLRPCFunctionNames.h b/SmartDeviceLink/SDLRPCFunctionNames.h
index f2738e1b1..fce4b61f7 100644
--- a/SmartDeviceLink/SDLRPCFunctionNames.h
+++ b/SmartDeviceLink/SDLRPCFunctionNames.h
@@ -59,7 +59,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameDiagnosticMessage;
extern SDLRPCFunctionName const SDLRPCFunctionNameDialNumber;
/// Function name for an CreateInteractionChoiceSet RPC
-extern SDLRPCFunctionName const SDLRPCFunctionNameEncodedSyncPData;
+extern SDLRPCFunctionName const SDLRPCFunctionNameEncodedSyncPData __deprecated;
/// Function name for an EndAudioPassThru RPC
extern SDLRPCFunctionName const SDLRPCFunctionNameEndAudioPassThru;
@@ -119,7 +119,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameOnCommand;
extern SDLRPCFunctionName const SDLRPCFunctionNameOnDriverDistraction;
/// Function name for an OnEncodedSyncPData notification RPC
-extern SDLRPCFunctionName const SDLRPCFunctionNameOnEncodedSyncPData;
+extern SDLRPCFunctionName const SDLRPCFunctionNameOnEncodedSyncPData __deprecated;
/// Function name for an OnHashChange notification RPC
extern SDLRPCFunctionName const SDLRPCFunctionNameOnHashChange;
@@ -146,7 +146,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameOnPermissionsChange;
extern SDLRPCFunctionName const SDLRPCFunctionNameOnRCStatus;
/// Function name for an OnSyncPData notification RPC
-extern SDLRPCFunctionName const SDLRPCFunctionNameOnSyncPData;
+extern SDLRPCFunctionName const SDLRPCFunctionNameOnSyncPData __deprecated;
/// Function name for an OnSystemCapabilityUpdated notification RPC
extern SDLRPCFunctionName const SDLRPCFunctionNameOnSystemCapabilityUpdated;
@@ -248,7 +248,7 @@ extern SDLRPCFunctionName const SDLRPCFunctionNameSubscribeVehicleData;
extern SDLRPCFunctionName const SDLRPCFunctionNameSubscribeWayPoints;
/// Function name for a SyncPData RPC
-extern SDLRPCFunctionName const SDLRPCFunctionNameSyncPData;
+extern SDLRPCFunctionName const SDLRPCFunctionNameSyncPData __deprecated;
/// Function name for a SystemRequest RPC
extern SDLRPCFunctionName const SDLRPCFunctionNameSystemRequest;
diff --git a/SmartDeviceLink/SDLRPCMessageType.h b/SmartDeviceLink/SDLRPCMessageType.h
index 5e01c4a4b..ac0df1958 100644
--- a/SmartDeviceLink/SDLRPCMessageType.h
+++ b/SmartDeviceLink/SDLRPCMessageType.h
@@ -3,6 +3,8 @@
#import <Foundation/Foundation.h>
+#import "SDLEnum.h"
+
/**
The type of RPC message
*/
@@ -16,3 +18,15 @@ typedef NS_ENUM(Byte, SDLRPCMessageType) {
/// A message that does not have a response
SDLRPCMessageTypeNotification
};
+
+/// A type of RPC message
+typedef SDLEnum SDLRPCMessageTypeName SDL_SWIFT_ENUM;
+
+/// A request that will require a response
+extern SDLRPCMessageTypeName const SDLRPCMessageTypeNameRequest;
+
+/// A response to a request
+extern SDLRPCMessageTypeName const SDLRPCMessageTypeNameResponse;
+
+/// A message that does not have a response
+extern SDLRPCMessageTypeName const SDLRPCMessageTypeNameNotification;
diff --git a/SmartDeviceLink/SDLRPCMessageType.m b/SmartDeviceLink/SDLRPCMessageType.m
new file mode 100644
index 000000000..365cd26ef
--- /dev/null
+++ b/SmartDeviceLink/SDLRPCMessageType.m
@@ -0,0 +1,13 @@
+//
+// SDLRPCMessageType.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 6/12/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLRPCMessageType.h"
+
+SDLRPCMessageTypeName const SDLRPCMessageTypeNameRequest = @"request";
+SDLRPCMessageTypeName const SDLRPCMessageTypeNameResponse = @"response";
+SDLRPCMessageTypeName const SDLRPCMessageTypeNameNotification = @"notification";
diff --git a/SmartDeviceLink/SDLRPCParameterNames.h b/SmartDeviceLink/SDLRPCParameterNames.h
index fa0622846..c42dcfffe 100644
--- a/SmartDeviceLink/SDLRPCParameterNames.h
+++ b/SmartDeviceLink/SDLRPCParameterNames.h
@@ -1,5 +1,35 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
// SDLRPCParameterNames.h
-//
#import <Foundation/Foundation.h>
#import "SDLMacros.h"
@@ -87,6 +117,8 @@ extern SDLRPCParameterName const SDLRPCParameterNameButtonEventMode;
extern SDLRPCParameterName const SDLRPCParameterNameButtonName;
extern SDLRPCParameterName const SDLRPCParameterNameButtonPressMode;
extern SDLRPCParameterName const SDLRPCParameterNameCancelID;
+extern SDLRPCParameterName const SDLRPCParameterNameCapacity;
+extern SDLRPCParameterName const SDLRPCParameterNameCapacityUnit;
extern SDLRPCParameterName const SDLRPCParameterNameColor;
extern SDLRPCParameterName const SDLRPCParameterNameCol;
extern SDLRPCParameterName const SDLRPCParameterNameColSpan;
@@ -169,6 +201,8 @@ extern SDLRPCParameterName const SDLRPCParameterNameDriverBeltDeployed;
extern SDLRPCParameterName const SDLRPCParameterNameDriverBraking;
extern SDLRPCParameterName const SDLRPCParameterNameDriverBuckleBelted;
extern SDLRPCParameterName const SDLRPCParameterNameDriverCurtainAirbagDeployed;
+extern SDLRPCParameterName const SDLRPCParameterNameDriverDistraction;
+extern SDLRPCParameterName const SDLRPCParameterNameDriverDistractionCapability;
extern SDLRPCParameterName const SDLRPCParameterNameDriverDistractionStatus;
extern SDLRPCParameterName const SDLRPCParameterNameDriverDoorAjar;
extern SDLRPCParameterName const SDLRPCParameterNameDriverKneeAirbagDeployed;
@@ -229,6 +263,7 @@ extern SDLRPCParameterName const SDLRPCParameterNameGraphicSupported;
extern SDLRPCParameterName const SDLRPCParameterNameGreen;
extern SDLRPCParameterName const SDLRPCParameterNameGrid;
extern SDLRPCParameterName const SDLRPCParameterNameHandledRPCs;
+extern SDLRPCParameterName const SDLRPCParameterNameHandsOffSteering;
extern SDLRPCParameterName const SDLRPCParameterNameHapticRectData;
extern SDLRPCParameterName const SDLRPCParameterNameHapticSpatialDataSupported;
extern SDLRPCParameterName const SDLRPCParameterNameHardware;
@@ -321,6 +356,7 @@ extern SDLRPCParameterName const SDLRPCParameterNameLength;
extern SDLRPCParameterName const SDLRPCParameterNameLevel;
extern SDLRPCParameterName const SDLRPCParameterNameLevels;
extern SDLRPCParameterName const SDLRPCParameterNameLevelSpan;
+extern SDLRPCParameterName const SDLRPCParameterNameLevelState;
extern SDLRPCParameterName const SDLRPCParameterNameLightControlCapabilities;
extern SDLRPCParameterName const SDLRPCParameterNameLightControlData;
extern SDLRPCParameterName const SDLRPCParameterNameLightState;
@@ -356,7 +392,6 @@ extern SDLRPCParameterName const SDLRPCParameterNameMassageEnabled;
extern SDLRPCParameterName const SDLRPCParameterNameMassageEnabledAvailable;
extern SDLRPCParameterName const SDLRPCParameterNameMassageMode;
extern SDLRPCParameterName const SDLRPCParameterNameMassageModeAvailable;
-extern SDLRPCParameterName const SDLRPCParameterNameMemoryAvailable;
extern SDLRPCParameterName const SDLRPCParameterNameMassageZone;
extern SDLRPCParameterName const SDLRPCParameterNameMaxBitrate;
extern SDLRPCParameterName const SDLRPCParameterNameMaxDuration;
@@ -377,10 +412,12 @@ extern SDLRPCParameterName const SDLRPCParameterNameMediaTrack;
extern SDLRPCParameterName const SDLRPCParameterNameMediaImage;
extern SDLRPCParameterName const SDLRPCParameterNameMediaType;
extern SDLRPCParameterName const SDLRPCParameterNameMemory;
+extern SDLRPCParameterName const SDLRPCParameterNameMemoryAvailable;
extern SDLRPCParameterName const SDLRPCParameterNameMenuIcon;
extern SDLRPCParameterName const SDLRPCParameterNameMenuId;
extern SDLRPCParameterName const SDLRPCParameterNameMenuLayout;
extern SDLRPCParameterName const SDLRPCParameterNameMenuLayoutsAvailable;
+extern SDLRPCParameterName const SDLRPCParameterNameMenuLength;
extern SDLRPCParameterName const SDLRPCParameterNameMenuName;
extern SDLRPCParameterName const SDLRPCParameterNameMenuParams;
extern SDLRPCParameterName const SDLRPCParameterNameMenuTitle;
@@ -445,7 +482,7 @@ extern SDLRPCParameterName const SDLRPCParameterNameOS;
extern SDLRPCParameterName const SDLRPCParameterNameOSVersion;
extern SDLRPCParameterName const SDLRPCParameterNameParameterPermissions;
extern SDLRPCParameterName const SDLRPCParameterNameParameters;
-extern SDLRPCParameterName const SDLRPCParameterNameParentId;
+extern SDLRPCParameterName const SDLRPCParameterNameParentID;
extern SDLRPCParameterName const SDLRPCParameterNameParkBrakeActive;
extern SDLRPCParameterName const SDLRPCParameterNamePassengerAirbagDeployed;
extern SDLRPCParameterName const SDLRPCParameterNamePassengerBeltDeployed;
@@ -609,6 +646,7 @@ extern SDLRPCParameterName const SDLRPCParameterNameSteeringWheelAngle;
extern SDLRPCParameterName const SDLRPCParameterNameStereoAudioOutputMuted;
extern SDLRPCParameterName const SDLRPCParameterNameSubAdministrativeArea;
extern SDLRPCParameterName const SDLRPCParameterNameSubLocality;
+extern SDLRPCParameterName const SDLRPCParameterNameSubMenuDepth;
extern SDLRPCParameterName const SDLRPCParameterNameSubscribe;
extern SDLRPCParameterName const SDLRPCParameterNameSubThoroughfare;
extern SDLRPCParameterName const SDLRPCParameterNameSuccess;
diff --git a/SmartDeviceLink/SDLRPCParameterNames.m b/SmartDeviceLink/SDLRPCParameterNames.m
index 6a9d5a913..0ac742961 100644
--- a/SmartDeviceLink/SDLRPCParameterNames.m
+++ b/SmartDeviceLink/SDLRPCParameterNames.m
@@ -1,5 +1,35 @@
+/*
+ * Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
// SDLRPCParameterNames.h
-//
#import "NSMutableDictionary+Store.h"
#import "SDLRPCParameterNames.h"
@@ -85,6 +115,8 @@ SDLRPCParameterName const SDLRPCParameterNameButtonEventMode = @"buttonEventMode
SDLRPCParameterName const SDLRPCParameterNameButtonName = @"buttonName";
SDLRPCParameterName const SDLRPCParameterNameButtonPressMode = @"buttonPressMode";
SDLRPCParameterName const SDLRPCParameterNameCancelID = @"cancelID";
+SDLRPCParameterName const SDLRPCParameterNameCapacity = @"capacity";
+SDLRPCParameterName const SDLRPCParameterNameCapacityUnit = @"capacityUnit";
SDLRPCParameterName const SDLRPCParameterNameCoolingEnabled = @"coolingEnabled";
SDLRPCParameterName const SDLRPCParameterNameCoolingEnabledAvailable = @"coolingEnabledAvailable";
SDLRPCParameterName const SDLRPCParameterNameCoolingLevel = @"coolingLevel";
@@ -165,6 +197,8 @@ SDLRPCParameterName const SDLRPCParameterNameDriverBeltDeployed = @"driverBeltDe
SDLRPCParameterName const SDLRPCParameterNameDriverBraking = @"driverBraking";
SDLRPCParameterName const SDLRPCParameterNameDriverBuckleBelted = @"driverBuckleBelted";
SDLRPCParameterName const SDLRPCParameterNameDriverCurtainAirbagDeployed = @"driverCurtainAirbagDeployed";
+SDLRPCParameterName const SDLRPCParameterNameDriverDistraction = @"driverDistraction";
+SDLRPCParameterName const SDLRPCParameterNameDriverDistractionCapability = @"driverDistractionCapability";
SDLRPCParameterName const SDLRPCParameterNameDriverDistractionStatus = @"driverDistractionStatus";
SDLRPCParameterName const SDLRPCParameterNameDriverDoorAjar = @"driverDoorAjar";
SDLRPCParameterName const SDLRPCParameterNameDriverKneeAirbagDeployed = @"driverKneeAirbagDeployed";
@@ -225,6 +259,7 @@ SDLRPCParameterName const SDLRPCParameterNameGraphicSupported = @"graphicSupport
SDLRPCParameterName const SDLRPCParameterNameGreen = @"green";
SDLRPCParameterName const SDLRPCParameterNameGrid = @"grid";
SDLRPCParameterName const SDLRPCParameterNameHandledRPCs = @"handledRPCs";
+SDLRPCParameterName const SDLRPCParameterNameHandsOffSteering = @"handsOffSteering";
SDLRPCParameterName const SDLRPCParameterNameHapticRectData = @"hapticRectData";
SDLRPCParameterName const SDLRPCParameterNameHapticSpatialDataSupported = @"hapticSpatialDataSupported";
SDLRPCParameterName const SDLRPCParameterNameHardware = @"hardware";
@@ -318,6 +353,7 @@ SDLRPCParameterName const SDLRPCParameterNameLength = @"length";
SDLRPCParameterName const SDLRPCParameterNameLevel = @"level";
SDLRPCParameterName const SDLRPCParameterNameLevels = @"levels";
SDLRPCParameterName const SDLRPCParameterNameLevelSpan = @"levelspan";
+SDLRPCParameterName const SDLRPCParameterNameLevelState = @"levelState";
SDLRPCParameterName const SDLRPCParameterNameLightControlCapabilities = @"lightControlCapabilities";
SDLRPCParameterName const SDLRPCParameterNameLightControlData = @"lightControlData";
SDLRPCParameterName const SDLRPCParameterNameLightState = @"lightState";
@@ -374,6 +410,7 @@ SDLRPCParameterName const SDLRPCParameterNameMenuIcon = @"menuIcon";
SDLRPCParameterName const SDLRPCParameterNameMenuId = @"menuID";
SDLRPCParameterName const SDLRPCParameterNameMenuLayout = @"menuLayout";
SDLRPCParameterName const SDLRPCParameterNameMenuLayoutsAvailable = @"menuLayoutsAvailable";
+SDLRPCParameterName const SDLRPCParameterNameMenuLength = @"menuLength";
SDLRPCParameterName const SDLRPCParameterNameMenuName = @"menuName";
SDLRPCParameterName const SDLRPCParameterNameMenuParams = @"menuParams";
SDLRPCParameterName const SDLRPCParameterNameMenuTitle = @"menuTitle";
@@ -439,7 +476,7 @@ SDLRPCParameterName const SDLRPCParameterNameOS = @"os";
SDLRPCParameterName const SDLRPCParameterNameOSVersion = @"osVersion";
SDLRPCParameterName const SDLRPCParameterNameParameterPermissions = @"parameterPermissions";
SDLRPCParameterName const SDLRPCParameterNameParameters = @"parameters";
-SDLRPCParameterName const SDLRPCParameterNameParentId = @"parentID";
+SDLRPCParameterName const SDLRPCParameterNameParentID = @"parentID";
SDLRPCParameterName const SDLRPCParameterNameParkBrakeActive = @"parkBrakeActive";
SDLRPCParameterName const SDLRPCParameterNamePassengerAirbagDeployed = @"passengerAirbagDeployed";
SDLRPCParameterName const SDLRPCParameterNamePassengerBeltDeployed = @"passengerBeltDeployed";
@@ -604,6 +641,7 @@ SDLRPCParameterName const SDLRPCParameterNameSteeringWheelAngle = @"steeringWhee
SDLRPCParameterName const SDLRPCParameterNameStereoAudioOutputMuted = @"stereoAudioOutputMuted";
SDLRPCParameterName const SDLRPCParameterNameSubAdministrativeArea = @"subAdministrativeArea";
SDLRPCParameterName const SDLRPCParameterNameSubLocality = @"subLocality";
+SDLRPCParameterName const SDLRPCParameterNameSubMenuDepth = @"subMenuDepth";
SDLRPCParameterName const SDLRPCParameterNameSubscribe = @"subscribe";
SDLRPCParameterName const SDLRPCParameterNameSubThoroughfare = @"subThoroughfare";
SDLRPCParameterName const SDLRPCParameterNameSuccess = @"success";
diff --git a/SmartDeviceLink/SDLRPCPermissionStatus.h b/SmartDeviceLink/SDLRPCPermissionStatus.h
new file mode 100644
index 000000000..72a471443
--- /dev/null
+++ b/SmartDeviceLink/SDLRPCPermissionStatus.h
@@ -0,0 +1,48 @@
+//
+// SDLRPCPermissionStatus.h
+// SmartDeviceLink
+//
+// Created by James Lapinski on 6/29/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// An object containing the result status of a permission element request
+@interface SDLRPCPermissionStatus : NSObject
+
+/**
+ Name of the individual RPC.
+
+ Required
+ */
+@property (strong, nonatomic, readonly) SDLRPCFunctionName rpcName;
+
+/**
+ * Whether or not the RPC is allowed.
+ */
+@property (assign, nonatomic, readonly, getter=isRPCAllowed) BOOL rpcAllowed;
+
+/**
+ * Holds a dictionary of RPC parameters and objects of an NSNumber<BOOL> specifying if that RPC parameter is currently allowed
+ */
+@property (strong, nonatomic, nullable, readonly) NSDictionary<NSString *, NSNumber *> *rpcParameters;
+
+/**
+ * Initializes a SDLRPCPermissionStatus object.
+ *
+ * @param rpcName The name of the RPC.
+ * @param isRPCAllowed The permission status for the RPC.
+ * @param rpcParameters A dictionary of RPC parameters and objects of an NSNumber<BOOL> specifying if that RPC parameter is currently allowed
+ *
+ * @return An instance of the SDLRPCPermissionStatus class.
+ */
+- (instancetype)initWithRPCName:(SDLRPCFunctionName)rpcName isRPCAllowed:(BOOL)isRPCAllowed rpcParameters:(nullable NSDictionary<NSString *, NSNumber *> *)rpcParameters;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLRPCPermissionStatus.m b/SmartDeviceLink/SDLRPCPermissionStatus.m
new file mode 100644
index 000000000..7c6a8d00a
--- /dev/null
+++ b/SmartDeviceLink/SDLRPCPermissionStatus.m
@@ -0,0 +1,34 @@
+//
+// SDLRPCPermissionStatus.m
+// SmartDeviceLink
+//
+// Created by James Lapinski on 6/29/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLRPCPermissionStatus.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLRPCPermissionStatus
+
+- (instancetype)initWithRPCName:(SDLRPCFunctionName)rpcName isRPCAllowed:(BOOL)isRPCAllowed rpcParameters:(nullable NSDictionary<NSString *,NSNumber *> *)rpcParameters {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _rpcName = rpcName;
+ _rpcAllowed = isRPCAllowed;
+ _rpcParameters = rpcParameters;
+
+ return self;
+}
+
+#pragma mark - Description
+
+- (NSString *)description {
+ return [NSString stringWithFormat:@"RPC Permission status, RPC name: %@, allowed: %@, RPC parameters %@", self.rpcName, (self.isRPCAllowed ? @"YES" : @"NO"), self.rpcParameters];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLReadDID.h b/SmartDeviceLink/SDLReadDID.h
index a5ea8ee7c..299e7851d 100644
--- a/SmartDeviceLink/SDLReadDID.h
+++ b/SmartDeviceLink/SDLReadDID.h
@@ -44,8 +44,10 @@ NS_ASSUME_NONNULL_BEGIN
* <li>Minvalue:0; Maxvalue:65535</li>
* <li>ArrayMin:0; ArrayMax:1000</li>
* </ul>
+ *
+ * Mandatory, contains an integer
*/
-@property (strong, nonatomic) NSArray<NSNumber<SDLInt> *> *didLocation;
+@property (strong, nonatomic) NSArray<NSNumber *> *didLocation;
@end
diff --git a/SmartDeviceLink/SDLReadDID.m b/SmartDeviceLink/SDLReadDID.m
index cf2d276ff..dd337708e 100644
--- a/SmartDeviceLink/SDLReadDID.m
+++ b/SmartDeviceLink/SDLReadDID.m
@@ -42,11 +42,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:SDLRPCParameterNameECUName ofClass:NSNumber.class error:&error];
}
-- (void)setDidLocation:(NSArray<NSNumber<SDLInt> *> *)didLocation {
+- (void)setDidLocation:(NSArray<NSNumber *> *)didLocation {
[self.parameters sdl_setObject:didLocation forName:SDLRPCParameterNameDIDLocation];
}
-- (NSArray<NSNumber<SDLInt> *> *)didLocation {
+- (NSArray<NSNumber *> *)didLocation {
NSError *error = nil;
return [self.parameters sdl_objectsForName:SDLRPCParameterNameDIDLocation ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
index 2f18c4522..20c9cf4e2 100644
--- a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
+++ b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.h
@@ -172,7 +172,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* @since SDL 3.0
*/
-@property (nullable, strong, nonatomic) NSArray<NSNumber<SDLInt> *> *supportedDiagModes;
+@property (nullable, strong, nonatomic) NSArray<NSNumber *> *supportedDiagModes;
/**
* Specifies the HMI capabilities.
diff --git a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
index e1d174ecf..5c081e9e6 100644
--- a/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
+++ b/SmartDeviceLink/SDLRegisterAppInterfaceResponse.m
@@ -163,11 +163,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:SDLRPCParameterNameVehicleType ofClass:SDLVehicleType.class error:nil];
}
-- (void)setSupportedDiagModes:(nullable NSArray<NSNumber<SDLInt> *> *)supportedDiagModes {
+- (void)setSupportedDiagModes:(nullable NSArray<NSNumber *> *)supportedDiagModes {
[self.parameters sdl_setObject:supportedDiagModes forName:SDLRPCParameterNameSupportedDiagnosticModes];
}
-- (nullable NSArray<NSNumber<SDLInt> *> *)supportedDiagModes {
+- (nullable NSArray<NSNumber *> *)supportedDiagModes {
return [self.parameters sdl_objectsForName:SDLRPCParameterNameSupportedDiagnosticModes ofClass:NSNumber.class error:nil];
}
diff --git a/SmartDeviceLink/SDLResponseDispatcher.m b/SmartDeviceLink/SDLResponseDispatcher.m
index 7c5956616..5408ba9ed 100644
--- a/SmartDeviceLink/SDLResponseDispatcher.m
+++ b/SmartDeviceLink/SDLResponseDispatcher.m
@@ -162,7 +162,7 @@ NS_ASSUME_NONNULL_BEGIN
__block NSArray<SDLResponseHandler> *handlers = nil;
__block NSArray<SDLRPCRequest *> *requests = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
__strong typeof(weakself) strongself = weakself;
NSMutableArray *handlerArray = [NSMutableArray array];
NSMutableArray *requestArray = [NSMutableArray array];
@@ -236,7 +236,7 @@ NS_ASSUME_NONNULL_BEGIN
__block SDLResponseHandler handler = nil;
__block SDLRPCRequest *request = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
handler = self->_rpcResponseHandlerMap[response.correlationID];
request = self->_rpcRequestDictionary[response.correlationID];
}];
@@ -336,14 +336,6 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark Utilities
-- (void)sdl_runSyncOnQueue:(void (^)(void))block {
- if (dispatch_get_specific(SDLProcessingQueueName) != nil) {
- block();
- } else {
- dispatch_sync(self.readWriteQueue, block);
- }
-}
-
- (void)sdl_runAsyncOnQueue:(void (^)(void))block {
if (dispatch_get_specific(SDLProcessingQueueName) != nil) {
block();
@@ -356,7 +348,7 @@ NS_ASSUME_NONNULL_BEGIN
- (NSMapTable<SDLRPCCorrelationId *, SDLResponseHandler> *)rpcResponseHandlerMap {
__block NSMapTable<SDLRPCCorrelationId *, SDLResponseHandler> *map = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
map = self->_rpcResponseHandlerMap;
}];
@@ -365,7 +357,7 @@ NS_ASSUME_NONNULL_BEGIN
- (NSMutableDictionary<SDLRPCCorrelationId *, SDLRPCRequest *> *)rpcRequestDictionary {
__block NSMutableDictionary<SDLRPCCorrelationId *, SDLRPCRequest *> *dict = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
dict = self->_rpcRequestDictionary;
}];
@@ -374,7 +366,7 @@ NS_ASSUME_NONNULL_BEGIN
- (NSMapTable<SDLAddCommandCommandId *, SDLRPCCommandNotificationHandler> *)commandHandlerMap {
__block NSMapTable<SDLAddCommandCommandId *, SDLRPCCommandNotificationHandler> *map = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
map = self->_commandHandlerMap;
}];
@@ -383,7 +375,7 @@ NS_ASSUME_NONNULL_BEGIN
- (NSMapTable<SDLSubscribeButtonName *, SDLRPCButtonNotificationHandler> *)buttonHandlerMap {
__block NSMapTable<SDLSubscribeButtonName *, SDLRPCButtonNotificationHandler> *map = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
map = self->_buttonHandlerMap;
}];
@@ -392,7 +384,7 @@ NS_ASSUME_NONNULL_BEGIN
- (NSMapTable<SDLSoftButtonId *, SDLRPCButtonNotificationHandler> *)customButtonHandlerMap {
__block NSMapTable<SDLSoftButtonId *, SDLRPCButtonNotificationHandler> *map = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
map = self->_customButtonHandlerMap;
}];
@@ -401,7 +393,7 @@ NS_ASSUME_NONNULL_BEGIN
- (nullable SDLAudioPassThruHandler)audioPassThruHandler {
__block SDLAudioPassThruHandler audioPassThruHandler = nil;
- [self sdl_runSyncOnQueue:^{
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
audioPassThruHandler = self->_audioPassThruHandler;
}];
diff --git a/SmartDeviceLink/SDLScreenManager.h b/SmartDeviceLink/SDLScreenManager.h
index 4ffe0a28a..a08d3b40d 100644
--- a/SmartDeviceLink/SDLScreenManager.h
+++ b/SmartDeviceLink/SDLScreenManager.h
@@ -9,10 +9,12 @@
#import <Foundation/Foundation.h>
#import "NSNumber+NumberType.h"
+#import "SDLButtonName.h"
#import "SDLInteractionMode.h"
+#import "SDLMenuManagerConstants.h"
#import "SDLMetadataType.h"
+#import "SDLNotificationConstants.h"
#import "SDLTextAlignment.h"
-#import "SDLMenuManagerConstants.h"
@class SDLArtwork;
@class SDLChoiceCell;
@@ -21,6 +23,8 @@
@class SDLKeyboardProperties;
@class SDLMenuCell;
@class SDLMenuConfiguration;
+@class SDLOnButtonEvent;
+@class SDLOnButtonPress;
@class SDLSoftButtonObject;
@class SDLSystemCapabilityManager;
@class SDLVoiceCommand;
@@ -45,6 +49,13 @@ typedef void(^SDLScreenManagerUpdateCompletionHandler)(NSError *__nullable error
*/
typedef void(^SDLPreloadChoiceCompletionHandler)(NSError *__nullable error);
+/// A handler run when the subscribe button has been selected
+///
+/// @param buttonPress Indicates whether this is a long or short button press event
+/// @param buttonEvent Indicates that the button has been depressed or released
+/// @param error The error if one occurred
+typedef void (^SDLSubscribeButtonHandler)(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error);
+
/// The SDLScreenManager is a manager to control SDL UI features. Use the screen manager for setting up the UI of the template, creating a menu for your users, creating softbuttons, setting textfields, etc..
@interface SDLScreenManager : NSObject
@@ -199,7 +210,7 @@ If set to `SDLDynamicMenuUpdatesModeForceOff`, menu updates will work the legacy
*/
- (void)stop;
-#pragma mark Text and Graphic
+#pragma mark - Text and Graphic
/**
Delays all screen updates until endUpdatesWithCompletionHandler: is called.
*/
@@ -241,13 +252,48 @@ If set to `SDLDynamicMenuUpdatesModeForceOff`, menu updates will work the legacy
*/
- (void)endUpdatesWithCompletionHandler:(nullable SDLScreenManagerUpdateCompletionHandler)handler;
-#pragma mark Soft Button
+#pragma mark - Soft Buttons
/// Retrieve a SoftButtonObject based on its name.
/// @param name The name of the button
- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name;
-#pragma mark Choice Sets
+#pragma mark - Subscribe Buttons
+
+/// Subscribes to a subscribe button. The update handler will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the `error` parameter of the updateHandler.
+/// @param buttonName The name of the hard button to subscribe to
+/// @param updateHandler The block run when the subscribe button is selected
+/// @return An object that can be used to unsubscribe the block using `unsubscribeButtonWithObserver:withCompletionHandler:`.
+- (id<NSObject>)subscribeButton:(SDLButtonName)buttonName withUpdateHandler:(SDLSubscribeButtonHandler)updateHandler;
+
+/// Subscribes to a subscribe button. The selector will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the `error` parameter of the selector.
+///
+/// The selector supports the following parameters:
+///
+/// 1. A selector with no parameters. The observer will be notified when a button press occurs (it will not know if a short or long press has occurred).
+///
+/// 2. A selector with one parameter: (SDLButtonName). The observer will be notified when a button press occurs (both a short and long press will trigger the selector, but it will not be able to distinguish between them). It will not be notified of button events.
+///
+/// 3. A selector with two parameters: (SDLButtonName, NSError). The observer will be notified when a button press occurs (both a short and long press will trigger the selector, but it will not be able to distinguish between them). It will not be notified of button events.
+///
+/// 4. A selector with three parameters: (SDLButtonName, NSError, SDLOnButtonPress). The observer will be notified when a long or short button press occurs (and can distinguish between a short or long press), but will not be notified of individual button events.
+///
+/// 5. A selector with four parameters: (SDLButtonName, NSError, SDLOnButtonPress, SDLOnButtonEvent). The observer will be notified when any button press or any button event occurs (and can distinguish between them).
+///
+/// To unsubscribe from the hard button, call `unsubscribeButton:withObserver:withCompletionHandler:`.
+///
+/// @param buttonName The name of the hard button to subscribe to
+/// @param observer The object that will have `selector` called whenever the button has been selected
+/// @param selector The selector on `observer` that will be called whenever the button has been selected
+- (void)subscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer selector:(SEL)selector;
+
+/// Unsubscribes to a subscribe button. Please note that if a subscribe button has multiple subscribers the observer will no longer get notifications, however, the app will still be subscribed to the hard button until the last subscriber is removed.
+/// @param buttonName The name of the hard button to subscribe to
+/// @param observer The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed
+/// @param completionHandler A handler called when the observer has been unsubscribed to the hard button
+- (void)unsubscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer withCompletionHandler:(SDLScreenManagerUpdateCompletionHandler)completionHandler;
+
+#pragma mark - Choice Sets
/**
Preload cells to the head unit. This will *greatly* reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You *do not* need to wait until the completion handler is called to present a choice set containing choices being loaded. The choice set will wait until the preload completes and then immediately present.
@@ -309,7 +355,7 @@ If set to `SDLDynamicMenuUpdatesModeForceOff`, menu updates will work the legacy
*/
- (void)dismissKeyboardWithCancelID:(NSNumber<SDLInt> *)cancelID;
-#pragma mark Menu
+#pragma mark - Menu
/**
Present the top-level of your application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden.
diff --git a/SmartDeviceLink/SDLScreenManager.m b/SmartDeviceLink/SDLScreenManager.m
index fac9ca4c0..9950521e8 100644
--- a/SmartDeviceLink/SDLScreenManager.m
+++ b/SmartDeviceLink/SDLScreenManager.m
@@ -11,6 +11,7 @@
#import "SDLChoiceSetManager.h"
#import "SDLMenuManager.h"
#import "SDLSoftButtonManager.h"
+#import "SDLSubscribeButtonManager.h"
#import "SDLTextAndGraphicManager.h"
#import "SDLVoiceCommandManager.h"
@@ -23,6 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLMenuManager *menuManager;
@property (strong, nonatomic) SDLVoiceCommandManager *voiceCommandMenuManager;
@property (strong, nonatomic) SDLChoiceSetManager *choiceSetManager;
+@property (strong, nonatomic) SDLSubscribeButtonManager *subscribeButtonManager;
@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
@property (weak, nonatomic) SDLFileManager *fileManager;
@@ -42,6 +44,7 @@ NS_ASSUME_NONNULL_BEGIN
_textAndGraphicManager = [[SDLTextAndGraphicManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager systemCapabilityManager:systemCapabilityManager];
_softButtonManager = [[SDLSoftButtonManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager systemCapabilityManager:systemCapabilityManager];
+ _subscribeButtonManager = [[SDLSubscribeButtonManager alloc] initWithConnectionManager:connectionManager];
_menuManager = [[SDLMenuManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager systemCapabilityManager:systemCapabilityManager];
_voiceCommandMenuManager = [[SDLVoiceCommandManager alloc] initWithConnectionManager:connectionManager];
_choiceSetManager = [[SDLChoiceSetManager alloc] initWithConnectionManager:connectionManager fileManager:fileManager systemCapabilityManager:systemCapabilityManager];
@@ -52,7 +55,9 @@ NS_ASSUME_NONNULL_BEGIN
- (void)startWithCompletionHandler:(void (^)(NSError * _Nullable))handler {
[self.textAndGraphicManager start];
[self.softButtonManager start];
+ [self.menuManager start];
[self.choiceSetManager start];
+ [self.subscribeButtonManager start];
handler(nil);
}
@@ -63,10 +68,7 @@ NS_ASSUME_NONNULL_BEGIN
[self.menuManager stop];
[self.voiceCommandMenuManager stop];
[self.choiceSetManager stop];
-}
-
-- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name {
- return [self.softButtonManager softButtonObjectNamed:name];
+ [self.subscribeButtonManager stop];
}
#pragma mark - Setters
@@ -258,6 +260,26 @@ NS_ASSUME_NONNULL_BEGIN
[self.textAndGraphicManager updateWithCompletionHandler:handler];
}
+#pragma mark - Subscribe Buttons
+
+- (id<NSObject>)subscribeButton:(SDLButtonName)buttonName withUpdateHandler:(SDLSubscribeButtonHandler)updateHandler {
+ return [self.subscribeButtonManager subscribeButton:buttonName withUpdateHandler:updateHandler];
+}
+
+- (void)subscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer selector:(SEL)selector {
+ [self.subscribeButtonManager subscribeButton:buttonName withObserver:observer selector:selector];
+}
+
+- (void)unsubscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer withCompletionHandler:(SDLScreenManagerUpdateCompletionHandler)completionHandler {
+ [self.subscribeButtonManager unsubscribeButton:buttonName withObserver:observer withCompletionHandler:completionHandler];
+}
+
+#pragma mark - Soft Buttons
+
+- (nullable SDLSoftButtonObject *)softButtonObjectNamed:(NSString *)name {
+ return [self.softButtonManager softButtonObjectNamed:name];
+}
+
#pragma mark - Choice Sets
- (void)deleteChoices:(NSArray<SDLChoiceCell *> *)choices {
diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.h b/SmartDeviceLink/SDLSecondaryTransportManager.h
index 0af612d7e..3552588db 100644
--- a/SmartDeviceLink/SDLSecondaryTransportManager.h
+++ b/SmartDeviceLink/SDLSecondaryTransportManager.h
@@ -6,7 +6,7 @@
// Copyright © 2018 Xevo Inc. All rights reserved.
//
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
#import "SDLStreamingProtocolDelegate.h"
@class SDLControlFramePayloadRPCStartServiceAck;
@@ -34,46 +34,25 @@ extern SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting;
manager with appropriate SDLProtocol instance. When the secondary transport is
disconnected, this manager retries connection with a regular interval.
*/
-@interface SDLSecondaryTransportManager : NSObject <SDLProtocolListener>
+@interface SDLSecondaryTransportManager : NSObject <SDLProtocolDelegate>
-/** state of this manager */
-@property (strong, nonatomic, readonly) SDLStateMachine *stateMachine;
-
-/**
- Create a new secondary transport manager.
-
- @param streamingProtocolDelegate a delegate to handle updates on protocol instances
- @param queue a serial dispatch queue that the internal state machine runs on
- @return A new secondary transport manager
- */
+/// Create a new secondary transport manager.
+/// @param streamingProtocolDelegate a delegate to handle updates on protocol instances
+/// @param queue a serial dispatch queue that the internal state machine runs on
- (instancetype)initWithStreamingProtocolDelegate:(id<SDLStreamingProtocolDelegate>)streamingProtocolDelegate
serialQueue:(dispatch_queue_t)queue;
-/**
- * Start the manager.
-
- @param primaryProtocol protocol that runs on the main (primary) transport
- */
+/// Start the manager.
+/// @param primaryProtocol The protocol that runs on the main (primary) transport
- (void)startWithPrimaryProtocol:(SDLProtocol *)primaryProtocol;
-/**
- * Stop the manager.
- */
-- (void)stop;
-
-/**
- * Call this method when Start Service ACK control frame is received on primary transport.
-
- @param payload payload of Start Service ACK frame received on the primary transport
- */
-- (void)onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload;
-
-/**
- * Call this method when Transport Event Update control frame is received on primary transport.
+/// Stop the manager
+/// @param completionHandler Handler called when the manager has shutdown
+- (void)stopWithCompletionHandler:(void (^)(void))completionHandler;
- @param payload payload of Transport Event Update frame received on the primary transport
- */
-- (void)onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload;
+/// Destroys the secondary transport.
+/// @param completionHandler Handler called when the session has been destroyed
+- (void)disconnectSecondaryTransportWithCompletionHandler:(void (^)(void))completionHandler;
@end
diff --git a/SmartDeviceLink/SDLSecondaryTransportManager.m b/SmartDeviceLink/SDLSecondaryTransportManager.m
index 9cd1af232..f6054494e 100644
--- a/SmartDeviceLink/SDLSecondaryTransportManager.m
+++ b/SmartDeviceLink/SDLSecondaryTransportManager.m
@@ -11,6 +11,7 @@
#import "SDLSecondaryTransportManager.h"
+#import "SDLBackgroundTaskManager.h"
#import "SDLControlFramePayloadConstants.h"
#import "SDLControlFramePayloadRPCStartServiceAck.h"
#import "SDLControlFramePayloadTransportEventUpdate.h"
@@ -19,9 +20,9 @@
#import "SDLOnHMIStatus.h"
#import "SDLProtocol.h"
#import "SDLProtocolHeader.h"
+#import "SDLProtocolMessage.h"
#import "SDLNotificationConstants.h"
#import "SDLRPCNotificationNotification.h"
-#import "SDLSecondaryTransportPrimaryProtocolHandler.h"
#import "SDLStateMachine.h"
#import "SDLTCPTransport.h"
#import "SDLTimer.h"
@@ -52,6 +53,9 @@ SDLSecondaryTransportState *const SDLSecondaryTransportStateConnecting = @"Conne
SDLSecondaryTransportState *const SDLSecondaryTransportStateRegistered = @"Registered";
SDLSecondaryTransportState *const SDLSecondaryTransportStateReconnecting = @"Reconnecting";
+/// Name for the background task started when the device app is backgrounded.
+NSString *const BackgroundTaskSecondaryTransportName = @"com.sdl.transport.secondaryTransportBackgroundTask";
+
// Timeout for receiving Register Secondary Transport ACK frame
static const float RegisterTransportTime = 10.0;
@@ -61,18 +65,23 @@ static const float RetryConnectionDelay = 5.0;
// Indicates that a TCP port is not specified (unconfigured).
static const int TCPPortUnspecified = -1;
+/// The old and new protocols being used when the transport switches. If the old protocol is `nil`, the transport is not yet started; newProtocol is `nil` the transport will be stopped.
+struct TransportProtocolUpdated {
+ SDLProtocol * _Nullable oldProtocol;
+ SDLProtocol * _Nullable newProtocol;
+} transportUpdated;
@interface SDLSecondaryTransportManager ()
-// State of this manager.
-@property (strong, nonatomic, readwrite) SDLStateMachine *stateMachine;
+/// State of this manager.
+@property (strong, nonatomic) SDLStateMachine *stateMachine;
// Dedicated queue that the state machine will run on.
@property (copy, nonatomic) dispatch_queue_t stateMachineQueue;
// Instance of the protocol that runs on primary transport.
@property (strong, nonatomic) SDLProtocol *primaryProtocol;
-// A class to catch Start Service ACK and Transport Config Update frames.
-@property (strong, nonatomic) SDLSecondaryTransportPrimaryProtocolHandler *primaryProtocolHandler;
+/// The header of the Start Service ACK frame received on primary transport
+@property (copy, nonatomic) SDLProtocolHeader *primaryRPCHeader;
// Selected type of secondary transport. If 'SDLSecondaryTransportTypeDisabled' then secondary transport is disabled.
@property (assign, nonatomic) SDLSecondaryTransportType secondaryTransportType;
@@ -98,8 +107,18 @@ static const int TCPPortUnspecified = -1;
// TCP port number of SDL Core. If the information isn't available then TCPPortUnspecified is stored.
@property (assign, nonatomic) int tcpPort;
+/// The current hmi level of the SDL app.
@property (strong, nonatomic, nullable) SDLHMILevel currentHMILevel;
+/// The current application state of the app on the phone. This information is tracked because TCP transport can only reliably work when the app on the phone is in the foreground. If the phone is locked or the app is put in the background for a long time, the OS can reclaim the socket.
+@property (assign, nonatomic) UIApplicationState currentApplicationState;
+
+/// A background task used to close the secondary transport before the app is suspended.
+@property (strong, nonatomic) SDLBackgroundTaskManager *backgroundTaskManager;
+
+/// A handler called when the secondary transport has been shutdown
+@property (nonatomic, copy, nullable) void (^disconnectCompletionHandler)(void);
+
@end
@implementation SDLSecondaryTransportManager
@@ -124,7 +143,18 @@ static const int TCPPortUnspecified = -1;
@(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy];
_tcpPort = TCPPortUnspecified;
+ _backgroundTaskManager = [[SDLBackgroundTaskManager alloc] initWithBackgroundTaskName:BackgroundTaskSecondaryTransportName];
+
+ _currentApplicationState = UIApplicationStateInactive;
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ strongSelf.currentApplicationState = UIApplication.sharedApplication.applicationState;
+ });
+
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_hmiStatusDidChange:) name:SDLDidChangeHMIStatusNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_appStateDidBecomeInactive:) name:UIApplicationWillResignActiveNotification object:nil];
return self;
}
@@ -143,13 +173,16 @@ static const int TCPPortUnspecified = -1;
}
self.primaryProtocol = primaryProtocol;
- self.primaryProtocolHandler = [[SDLSecondaryTransportPrimaryProtocolHandler alloc] initWithSecondaryTransportManager:self primaryProtocol:primaryProtocol];
+
+ @synchronized(self.primaryProtocol.protocolDelegateTable) {
+ [self.primaryProtocol.protocolDelegateTable addObject:self];
+ }
[self.stateMachine transitionToState:SDLSecondaryTransportStateStarted];
}
-- (void)stop {
- SDLLogD(@"SDLSecondaryTransportManager stop");
+- (void)stopWithCompletionHandler:(void (^)(void))completionHandler {
+ SDLLogD(@"Stopping manager");
// this method must be called in SDLLifecycleManager's state machine queue
if (strcmp(dispatch_queue_get_label(DISPATCH_CURRENT_QUEUE_LABEL), dispatch_queue_get_label(self.stateMachineQueue)) != 0) {
@@ -160,36 +193,20 @@ static const int TCPPortUnspecified = -1;
SDLLogD(@"Stopping audio / video services on both transports");
[self sdl_handleTransportUpdateWithPrimaryAvailable:NO secondaryAvailable:NO];
- [self.stateMachine transitionToState:SDLSecondaryTransportStateStopped];
-}
-
-#pragma mark - Manager Lifecycle
+ if ([self.stateMachine.currentState isEqualToEnum:SDLSecondaryTransportStateStopped]) {
+ return completionHandler();
+ }
-- (void)sdl_startManager {
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_onAppStateUpdated:) name:UIApplicationDidBecomeActiveNotification object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_onAppStateUpdated:) name:UIApplicationWillResignActiveNotification object:nil];
+ // In order to stop the secondary transport
+ // 1. The observer must be told to shut down the services running on the transports. This can take a few moments since a request must be sent to the module a response must be awaited.
+ // 2. Once the services have been shutdown, the observer will notifiy this class by calling `disconnectSecondaryTransportWithCompletionHandler`. The secondary transport can now be shutdown. This can take a few memoments since the I/O streams must be closed on the thread they were opened on.
+ // 3. Once the secondary transport has shutdown successfully, the `disconnectCompletionHandler` will be called.
+ self.disconnectCompletionHandler = completionHandler;
- [self.primaryProtocolHandler start];
+ [self.stateMachine transitionToState:SDLSecondaryTransportStateStopped];
}
-- (void)sdl_stopManager {
- SDLLogD(@"SDLSecondaryTransportManager stop");
-
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidBecomeActiveNotification object:nil];
- [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];
-
- [self.primaryProtocolHandler stop];
-
- self.streamingServiceTransportMap = [@{@(SDLServiceTypeAudio):@(SDLTransportClassInvalid),
- @(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy];
- self.secondaryTransportType = SDLSecondaryTransportTypeDisabled;
- self.transportsForAudioService = @[];
- self.transportsForVideoService = @[];
-
- self.ipAddress = nil;
- self.tcpPort = TCPPortUnspecified;
- self.currentHMILevel = nil;
-}
+#pragma mark - Manager Lifecycle
- (void)sdl_configureManager:(nullable NSArray<SDLSecondaryTransportTypeBox *> *)availableSecondaryTransports
availableTransportsForAudio:(nullable NSArray<SDLTransportClassBox *> *)availableTransportsForAudio
@@ -250,12 +267,25 @@ static const int TCPPortUnspecified = -1;
- (void)didEnterStateStopped {
SDLLogD(@"Secondary transport manager stopped");
- [self sdl_stopManager];
+
+ self.streamingServiceTransportMap = [@{@(SDLServiceTypeAudio):@(SDLTransportClassInvalid),
+ @(SDLServiceTypeVideo):@(SDLTransportClassInvalid)} mutableCopy];
+ self.secondaryTransportType = SDLSecondaryTransportTypeDisabled;
+ self.transportsForAudioService = @[];
+ self.transportsForVideoService = @[];
+
+ self.ipAddress = nil;
+ self.tcpPort = TCPPortUnspecified;
+ self.currentHMILevel = nil;
+
+ if (self.disconnectCompletionHandler != nil) {
+ self.disconnectCompletionHandler();
+ self.disconnectCompletionHandler = nil;
+ }
}
- (void)didEnterStateStarted {
SDLLogD(@"Secondary transport manager started");
- [self sdl_startManager];
}
- (void)didEnterStateConfigured {
@@ -266,6 +296,8 @@ static const int TCPPortUnspecified = -1;
|| self.secondaryTransportType == SDLSecondaryTransportTypeIAP)
&& self.sdl_isHMILevelNonNone) {
[self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting];
+ } else {
+ SDLLogD(@"The secondary transport manager is not ready to transition to connecting state. The app's application state needs to be Active in order to create a socket (current app state is %ld) and we need the socket address (current IP address: %@ and port: %d)", (long)self.currentApplicationState, self.ipAddress, self.tcpPort);
}
}
@@ -280,81 +312,40 @@ static const int TCPPortUnspecified = -1;
self.registerTransportTimer = nil;
}
-- (void)willTransitionFromStateConnectingToStateConfigured {
- [self sdl_disconnectSecondaryTransport];
-}
-
-- (void)willTransitionFromStateConnectingToStateReconnecting {
- [self sdl_disconnectSecondaryTransport];
-}
-
-- (void)willTransitionFromStateConnectingToStateStopped {
- [self sdl_disconnectSecondaryTransport];
-}
-
- (void)didEnterStateRegistered {
SDLLogD(@"Secondary transport is registered");
[self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:YES];
}
- (void)willTransitionFromStateRegisteredToStateConfigured {
- // before disconnecting Secondary Transport, stop running services
- SDLLogD(@"Stopping services on secondary transport");
+ SDLLogD(@"Manger is closing transport but is configured to resume the secondary transport. Stopping services on secondary transport");
[self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO];
-
- [self sdl_disconnectSecondaryTransport];
-}
-
-- (void)willTransitionFromStateRegisteredToStateReconnecting {
- SDLLogD(@"Stopping services on secondary transport");
- [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO];
-
- [self sdl_disconnectSecondaryTransport];
-}
-
-- (void)willTransitionFromStateRegisteredToStateStopped {
- // sdl_handleTransportUpdateWithPrimaryAvailable is called in stop method
- [self sdl_disconnectSecondaryTransport];
}
- (void)didEnterStateReconnecting {
- SDLLogD(@"Secondary transport is reconnecting");
+ SDLLogD(@"The secondary transport manager will try to reconnect in %.01f seconds", RetryConnectionDelay);
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(RetryConnectionDelay * NSEC_PER_SEC)), _stateMachineQueue, ^{
if ([weakSelf.stateMachine isCurrentState:SDLSecondaryTransportStateReconnecting]) {
- SDLLogD(@"Attempting reconnection");
+ SDLLogD(@"Attempting to reconnect");
[weakSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
}
});
}
+
#pragma mark - Starting / Stopping / Restarting services
- (void)sdl_handleTransportUpdateWithPrimaryAvailable:(BOOL)primaryAvailable secondaryAvailable:(BOOL)secondaryAvailable {
- // update audio service
- [self sdl_updateService:SDLServiceTypeAudio
- allowedTransports:self.transportsForAudioService
- primaryAvailable:primaryAvailable
- secondaryAvailable:secondaryAvailable
- transportUpdatedBlock:^(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol) {
- [self.streamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:oldProtocol toNewProtocol:newProtocol];
- }];
+ struct TransportProtocolUpdated audioTransportUpdated = [self sdl_updateService:SDLServiceTypeAudio allowedTransports:self.transportsForAudioService primaryAvailable:primaryAvailable secondaryAvailable:secondaryAvailable];
+ struct TransportProtocolUpdated videoTransportUpdated = [self sdl_updateService:SDLServiceTypeVideo allowedTransports:self.transportsForVideoService primaryAvailable:primaryAvailable secondaryAvailable:secondaryAvailable];
- // update video service
- [self sdl_updateService:SDLServiceTypeVideo
- allowedTransports:self.transportsForVideoService
- primaryAvailable:primaryAvailable
- secondaryAvailable:secondaryAvailable
- transportUpdatedBlock:^(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol) {
- [self.streamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:oldProtocol toNewProtocol:newProtocol];
- }];
+ if (audioTransportUpdated.newProtocol == audioTransportUpdated.oldProtocol && videoTransportUpdated.newProtocol == videoTransportUpdated.oldProtocol) { return; }
+
+ [self.streamingProtocolDelegate didUpdateFromOldVideoProtocol:videoTransportUpdated.oldProtocol toNewVideoProtocol:videoTransportUpdated.newProtocol fromOldAudioProtocol:audioTransportUpdated.oldProtocol toNewAudioProtocol:audioTransportUpdated.newProtocol];
}
-- (void)sdl_updateService:(UInt8)service
- allowedTransports:(nonnull NSArray<SDLTransportClassBox *> *)transportList
- primaryAvailable:(BOOL)primaryTransportAvailable
- secondaryAvailable:(BOOL)secondaryTransportAvailable
- transportUpdatedBlock:(void (^)(SDLProtocol * _Nullable oldProtocol, SDLProtocol * _Nullable newProtocol))transportUpdatedBlock {
+- (struct TransportProtocolUpdated)sdl_updateService:(SDLServiceType)service allowedTransports:(nonnull NSArray<SDLTransportClassBox *> *)transportList primaryAvailable:(BOOL)primaryTransportAvailable secondaryAvailable:(BOOL)secondaryTransportAvailable {
SDLTransportClass newTransport = SDLTransportClassInvalid;
// the list is in preferred order, so take a look from the beginning
for (SDLTransportClassBox *transport in transportList) {
@@ -380,10 +371,14 @@ static const int TCPPortUnspecified = -1;
} else if (newTransport != SDLTransportClassInvalid) {
SDLLogD(@"Starting service 0x%X on %@ transport", service, [self sdl_getTransportClassName:newTransport]);
}
-
- transportUpdatedBlock([self sdl_getProtocolFromTransportClass:oldTransport],
- [self sdl_getProtocolFromTransportClass:newTransport]);
+ } else {
+ SDLLogV(@"Transport was not updated");
}
+
+ struct TransportProtocolUpdated transportUpdated;
+ transportUpdated.oldProtocol = [self sdl_getProtocolFromTransportClass:oldTransport];
+ transportUpdated.newProtocol = [self sdl_getProtocolFromTransportClass:newTransport];
+ return transportUpdated;
}
- (nullable SDLProtocol *)sdl_getProtocolFromTransportClass:(SDLTransportClass)transportClass {
@@ -405,6 +400,32 @@ static const int TCPPortUnspecified = -1;
#pragma mark - Transport management
+#pragma mark Primary transport
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
+ if (startServiceACK.header.serviceType != SDLServiceTypeRPC || self.primaryProtocol != protocol) { return; }
+
+ SDLLogV(@"Received Start Service ACK header of RPC service on primary (%@) transport", protocol.transport);
+
+ // Keep header to acquire Session ID
+ self.primaryRPCHeader = startServiceACK.header;
+
+ SDLControlFramePayloadRPCStartServiceAck *payload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:startServiceACK.payload];
+
+ [self sdl_onStartServiceAckReceived:payload];
+}
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveTransportEventUpdate:(SDLProtocolMessage *)transportEventUpdate {
+ if (self.primaryProtocol != protocol) { return; }
+
+ SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:transportEventUpdate.payload];
+ SDLLogV(@"Recieved transport event update on primary (%@) transport: %@", protocol.transport, payload);
+
+ [self sdl_onTransportEventUpdateReceived:payload];
+}
+
+#pragma mark Secondary transport
+
// try establishing secondary transport. Returns NO if failed
- (BOOL)sdl_connectSecondaryTransport {
if (self.secondaryTransport != nil) {
@@ -423,17 +444,24 @@ static const int TCPPortUnspecified = -1;
}
}
-- (BOOL)sdl_disconnectSecondaryTransport {
+- (void)disconnectSecondaryTransportWithCompletionHandler:(void (^)(void))completionHandler {
if (self.secondaryTransport == nil) {
- SDLLogW(@"Attempted to disconnect secondary transport, but it's already stopped.");
- return NO;
+ SDLLogW(@"Attempted to disconnect secondary transport but it's already stopped.");
+ return completionHandler();
}
- SDLLogD(@"Disconnect secondary transport");
- [self.secondaryTransport disconnect];
- self.secondaryTransport = nil;
+ __weak typeof(self) weakSelf = self;
+ [self.secondaryTransport disconnectWithCompletionHandler:^{
+ SDLLogD(@"Disconnecting secondary transport manager");
- return YES;
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ strongSelf.secondaryTransport = nil;
+ strongSelf.secondaryProtocol = nil;
+ [strongSelf.streamingServiceTransportMap removeAllObjects];
+
+ [strongSelf.backgroundTaskManager endBackgroundTask];
+ return completionHandler();
+ }];
}
- (BOOL)sdl_startTCPSecondaryTransport {
@@ -447,20 +475,21 @@ static const int TCPPortUnspecified = -1;
SDLTCPTransport *transport = [[SDLTCPTransport alloc] init];
transport.hostName = self.ipAddress;
transport.portNumber = [NSString stringWithFormat:@"%d", self.tcpPort];
- SDLProtocol *protocol = [[SDLProtocol alloc] init];
- transport.delegate = protocol;
- protocol.transport = transport;
- [protocol.protocolDelegateTable addObject:self];
- protocol.securityManager = self.primaryProtocol.securityManager;
+ SDLProtocol *protocol = [[SDLProtocol alloc] initWithTransport:transport encryptionManager:self.primaryProtocol.encryptionLifecycleManager];
+ protocol.securityManager = self.primaryProtocol.securityManager;
self.secondaryProtocol = protocol;
self.secondaryTransport = transport;
+ @synchronized(self.secondaryProtocol.protocolDelegateTable) {
+ [self.secondaryProtocol.protocolDelegateTable addObject:self];
+ }
+
// we reuse Session ID acquired from primary transport's protocol
// this is for Register Secondary Transport frame
- [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeControl];
+ [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeControl];
// this is for video and audio services
- [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
+ [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
[self.secondaryTransport connect];
return YES;
@@ -470,20 +499,20 @@ static const int TCPPortUnspecified = -1;
SDLLogD(@"Starting Secondary Transport: iAP");
SDLIAPTransport *transport = [[SDLIAPTransport alloc] init];
- SDLProtocol *protocol = [[SDLProtocol alloc] init];
- transport.delegate = protocol;
- protocol.transport = transport;
- [protocol.protocolDelegateTable addObject:self];
+ SDLProtocol *protocol = [[SDLProtocol alloc] initWithTransport:transport encryptionManager:self.primaryProtocol.encryptionLifecycleManager];
protocol.securityManager = self.primaryProtocol.securityManager;
-
self.secondaryProtocol = protocol;
self.secondaryTransport = transport;
+ @synchronized(self.secondaryProtocol.protocolDelegateTable) {
+ [self.secondaryProtocol.protocolDelegateTable addObject:self];
+ }
+
// we reuse Session ID acquired from primary transport's protocol
// this is for Register Secondary Transport frame
- [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeControl];
+ [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeControl];
// this is for video and audio services
- [self.secondaryProtocol storeHeader:self.primaryProtocolHandler.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
+ [self.secondaryProtocol storeHeader:self.primaryRPCHeader forServiceType:SDLServiceTypeRPC];
[self.secondaryTransport connect];
return YES;
@@ -503,7 +532,7 @@ static const int TCPPortUnspecified = -1;
return NO;
}
- if (self.sdl_getAppState != UIApplicationStateActive) {
+ if (self.currentApplicationState != UIApplicationStateActive) {
SDLLogD(@"App state is not Active, TCP transport is not ready");
return NO;
}
@@ -511,23 +540,12 @@ static const int TCPPortUnspecified = -1;
return YES;
}
-- (UIApplicationState)sdl_getAppState {
- if ([NSThread isMainThread]) {
- return [UIApplication sharedApplication].applicationState;
- } else {
- __block UIApplicationState appState;
- dispatch_sync(dispatch_get_main_queue(), ^{
- appState = [UIApplication sharedApplication].applicationState;
- });
- return appState;
- }
-}
-
-
-#pragma mark - SDLProtocolListener Implementation
+#pragma mark - SDLProtocolDelegate Implementation
// called on transport's thread, notifying that the transport is established
-- (void)onProtocolOpened {
+- (void)protocolDidOpen:(SDLProtocol *)protocol {
+ if (self.secondaryProtocol != protocol) { return; }
+
SDLLogD(@"Secondary transport connected");
self.registerTransportTimer = [[SDLTimer alloc] initWithDuration:RegisterTransportTime repeat:NO];
@@ -540,10 +558,12 @@ static const int TCPPortUnspecified = -1;
return;
}
- // if the state is still Connecting, go back to Configured state and retry immediately
+ // If still in Connecting state, shutdown the transport and try to reconnect
if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateConnecting]) {
- SDLLogD(@"Retry secondary transport connection after registration timeout");
- [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ SDLLogD(@"Shutting down and restarting the secondary transport connection after registration timeout");
+ [strongSelf sdl_transportClosed];
+ } else {
+ SDLLogD(@"Could not register the secondary transport with the module. The services will not be started on the secondary transport.");
}
});
};
@@ -552,22 +572,44 @@ static const int TCPPortUnspecified = -1;
[self.secondaryProtocol registerSecondaryTransport];
}
-// called on transport's thread, notifying that the transport is disconnected
-// (Note: when transport's disconnect method is called, this method will not be called)
-- (void)onProtocolClosed {
- SDLLogD(@"secondary transport disconnected");
+/// Called on the transport's thread, notifying that the transport has errored before a connection was established.
+/// @param error The error
+/// @param protocol The protocol
+- (void)protocol:(SDLProtocol *)protocol transportDidError:(NSError *)error {
+ if (self.secondaryProtocol != protocol) { return; }
+ SDLLogE(@"The secondary transport errored.");
+ [self sdl_transportClosed];
+}
+
+/// Called on transport's thread, notifying that the transport is disconnected.
+/// @discussion When the transport's disconnect method is called, this method will not be called.
+/// @param protocol The protocol
+- (void)protocolDidClose:(SDLProtocol *)protocol {
+ if (self.secondaryProtocol != protocol) { return; }
+
+ SDLLogE(@"The secondary transport disconnected.");
+ [self sdl_transportClosed];
+}
+
+/// Try to reconnect the secondary transport if the transport errored during the connection attempt or closed unexpectedly.
+- (void)sdl_transportClosed {
dispatch_async(self.stateMachineQueue, ^{
if ([self sdl_isTransportOpened]) {
+ SDLLogV(@"Secondary transport is ready to reconnect. Attempting to reconnect the secondary transport");
+ [self.streamingProtocolDelegate transportClosed];
[self.stateMachine transitionToState:SDLSecondaryTransportStateReconnecting];
+ } else {
+ SDLLogD(@"Secondary transport is not ready to reconnect. Will not attempt to reconnect the secondary transport");
}
});
}
// called from SDLProtocol's _receiveQueue of secondary transport
-- (void)handleProtocolRegisterSecondaryTransportACKMessage:(SDLProtocolMessage *)registerSecondaryTransportACK {
- SDLLogD(@"Received Register Secondary Transport ACK frame");
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportACK:(SDLProtocolMessage *)registerSecondaryTransportACK {
+ if (self.secondaryProtocol != protocol) { return; }
+ SDLLogD(@"Received Register Secondary Transport ACK on the secondary (%@) transport", protocol.transport);
dispatch_async(self.stateMachineQueue, ^{
// secondary transport is now ready
[self.stateMachine transitionToState:SDLSecondaryTransportStateRegistered];
@@ -575,16 +617,21 @@ static const int TCPPortUnspecified = -1;
}
// called from SDLProtocol's _receiveQueue of secondary transport
-- (void)handleProtocolRegisterSecondaryTransportNAKMessage:(SDLProtocolMessage *)registerSecondaryTransportNAK {
- SDLLogW(@"Received Register Secondary Transport NAK frame");
+- (void)protocol:(SDLProtocol *)protocol didReceiveRegisterSecondaryTransportNAK:(SDLProtocolMessage *)registerSecondaryTransportNAK {
+ if (self.secondaryProtocol != protocol) { return; }
+ SDLLogW(@"Received Register Secondary Transport NAK on the secondary (%@) transport", protocol.transport);
dispatch_async(self.stateMachineQueue, ^{
+ if ([self.stateMachine.currentState isEqualToEnum:SDLSecondaryTransportStateRegistered]) {
+ [self sdl_handleTransportUpdateWithPrimaryAvailable:YES secondaryAvailable:NO];
+ }
[self.stateMachine transitionToState:SDLSecondaryTransportStateReconnecting];
});
}
-// called from SDLProtocol's _receiveQueue of "primary" transport
-- (void)onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload {
+/// Called when a Start Service ACK control frame is received on the primary transport.
+/// @param payload The payload of Start Service ACK frame received on the primary transport.
+- (void)sdl_onStartServiceAckReceived:(SDLControlFramePayloadRPCStartServiceAck *)payload {
NSMutableArray<SDLSecondaryTransportTypeBox *> *secondaryTransports = nil;
if (payload.secondaryTransports != nil) {
secondaryTransports = [NSMutableArray array];
@@ -604,8 +651,9 @@ static const int TCPPortUnspecified = -1;
});
}
-// called from SDLProtocol's _receiveQueue of "primary" transport
-- (void)onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload {
+/// Called when a Transport Event Update control frame is received on the primary transport.
+/// @param payload the payload of Transport Event Update frame
+- (void)sdl_onTransportEventUpdateReceived:(SDLControlFramePayloadTransportEventUpdate *)payload {
dispatch_async(_stateMachineQueue, ^{
BOOL updated = NO;
@@ -655,25 +703,71 @@ static const int TCPPortUnspecified = -1;
#pragma mark - App state handling
-- (void)sdl_onAppStateUpdated:(NSNotification *)notification {
- dispatch_async(_stateMachineQueue, ^{
- if (notification.name == UIApplicationWillResignActiveNotification) {
- if ([self sdl_isTransportOpened] && self.secondaryTransportType == SDLSecondaryTransportTypeTCP) {
- SDLLogD(@"Disconnecting TCP transport since the app will go to background");
- [self.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
- }
- } else if (notification.name == UIApplicationDidBecomeActiveNotification) {
- if ([self.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured]
- && self.secondaryTransportType == SDLSecondaryTransportTypeTCP
- && [self sdl_isTCPReady]
- && [self sdl_isHMILevelNonNone]) {
- SDLLogD(@"Resuming TCP transport since the app came into the foreground");
- [self.stateMachine transitionToState:SDLSecondaryTransportStateConnecting];
- }
+/// Closes and re-opens the the secondary transport when the app is backgrounded and foregrounded on the device respectively. This is done because sockets can be reclaimed by the system at anytime when the app is not in the foreground.
+/// @param notification Notification from the OS that the app's life-cycle state has changed
+- (void)sdl_appStateDidBecomeActive:(NSNotification *)notification {
+ self.currentApplicationState = UIApplicationStateActive;
+
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(self.stateMachineQueue, ^{
+ __strong typeof(self) strongSelf = weakSelf;
+ SDLLogD(@"App entered the foreground");
+ if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateRegistered]) {
+ SDLLogD(@"In the registered state; TCP transport has not yet been shutdown. Ending the background task.");
+ [strongSelf.backgroundTaskManager endBackgroundTask];
+ } else if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateConfigured]
+ && strongSelf.secondaryTransportType == SDLSecondaryTransportTypeTCP
+ && [strongSelf sdl_isTCPReady]
+ && [strongSelf sdl_isHMILevelNonNone]) {
+ SDLLogD(@"In the configured state; restarting the TCP transport. Ending the background task.");
+ [strongSelf.backgroundTaskManager endBackgroundTask];
+ [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConnecting];
+ } else {
+ SDLLogD(@"TCP transport not ready to start, secondary transport state must be in state Configured (currently in state: %@), the SDL app hmi level must be non-NONE (currently in state: %@), and the app must be ready to start a TCP socket (current app state: %ld, current IP address: %@, current port: %d)", strongSelf.stateMachine.currentState, strongSelf.currentHMILevel, self.currentApplicationState, self.ipAddress, self.tcpPort);
+ }
+ });
+}
+
+- (void)sdl_appStateDidBecomeInactive:(NSNotification *)notification {
+ self.currentApplicationState = UIApplicationStateInactive;
+
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(self.stateMachineQueue, ^{
+ __strong typeof(self) strongSelf = weakSelf;
+ SDLLogD(@"App will enter the background");
+ if ([strongSelf sdl_isTransportOpened] && strongSelf.secondaryTransportType == SDLSecondaryTransportTypeTCP) {
+ SDLLogD(@"Starting background task to keep TCP transport alive");
+ strongSelf.backgroundTaskManager.taskExpiringHandler = [strongSelf sdl_backgroundTaskEndedHandler];
+ [strongSelf.backgroundTaskManager startBackgroundTask];
+ } else {
+ SDLLogD(@"TCP transport already disconnected, will not start a background task.");
}
});
}
+/// Handles a notification that the background task is about to expire. If the app is still backgrounded we must close the TCP socket, which can take a few moments to complete. When this manager transitons to the Configured state, the `SDLStreamingMediaManager` is notified that the secondary transport wants to shutdown via the `streamingProtocolDelegate`. The `SDLStreamingMediaManager` sends an end video service control frame and an end audio service control frame and waits for responses to both requests from the module. Once the module has responded to both end service requests, the `SDLStreamingMediaManager` notifies us that the TCP socket can be shutdown by calling the `disconnectSecondaryTransport` method. Finally, once we know the socket has shutdown, we can end the background task. To ensure that all the shutdown steps are performed, we must delay shutting down the background task, otherwise some of the steps might not complete due to the app being suspended. Improper shutdown can cause trouble when establishing a new streaming session as either the new TCP connection will fail (due to the TCP socket's I/O streams not shutting down) or restarting the video and audio streams can fail (due to Core not receiving the end service requests). On the other hand, we can end the background task immediately if the app has re-entered the foreground or the manager has shutdown as no cleanup needs to be performed.
+/// @return A background task ended handler
+- (nullable BOOL (^)(void))sdl_backgroundTaskEndedHandler {
+ __weak typeof(self) weakSelf = self;
+ return ^{
+ __strong typeof(self) strongSelf = weakSelf;
+ if (strongSelf.currentApplicationState == UIApplicationStateActive || [strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateStopped]) {
+ // Return NO as we do not need to perform any cleanup and can end the background task immediately
+ SDLLogV(@"No cleanup needed since app has been foregrounded.");
+ return NO;
+ } else if ([strongSelf.stateMachine isCurrentState:SDLSecondaryTransportStateStopped]) {
+ // Return NO as we do not need to perform any cleanup and can end the background task immediately
+ SDLLogV(@"No cleanup needed since manager has been stopped.");
+ return NO;
+ } else {
+ // Return YES as we want to delay ending the background task until shutdown of the secondary transport has finished. Transitoning to the Configured state starts the process of shutting down the streaming services and the TCP socket which can take a few moments to complete. Once the streaming services have shutdown, the `SDLStreamingMediaManager` calls the `disconnectSecondaryTransport` method. The `disconnectSecondaryTransport` takes care of destroying the background task after disconnecting the TCP transport.
+ SDLLogD(@"Performing cleanup due to the background task expiring: disconnecting the TCP transport.");
+ [strongSelf.stateMachine transitionToState:SDLSecondaryTransportStateConfigured];
+ return YES;
+ }
+ };
+}
+
#pragma mark - Utility methods
- (SDLSecondaryTransportType)sdl_convertTransportType:(NSString *)transportString {
@@ -732,6 +826,7 @@ static const int TCPPortUnspecified = -1;
}
#pragma mark - RPC Notifications
+
/// Check and track the HMI status to ensure that the secondary transport only attempts a connection in non-NONE HMI states
///
/// See: https://github.com/smartdevicelink/sdl_evolution/blob/master/proposals/0214-secondary-transport-optimization.md
diff --git a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h
deleted file mode 100644
index d3e8510ee..000000000
--- a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.h
+++ /dev/null
@@ -1,46 +0,0 @@
-//
-// SDLSecondaryTransportPrimaryProtocolHandler.h
-// SmartDeviceLink-iOS
-//
-// Created by Sho Amano on 2018/08/09.
-// Copyright © 2018 Xevo Inc. All rights reserved.
-//
-
-#import "SDLProtocolListener.h"
-
-@class SDLProtocol;
-@class SDLSecondaryTransportManager;
-
-NS_ASSUME_NONNULL_BEGIN
-
-/**
- A class to receive event from primary transport.
- */
-@interface SDLSecondaryTransportPrimaryProtocolHandler : NSObject <SDLProtocolListener>
-
-/** The header of Start Service ACK frame received on primary transport. */
-@property (copy, nonatomic) SDLProtocolHeader *primaryRPCHeader;
-
-/**
- Create a new primary protocol handler with given SDLSecondaryTransportManager and SDLProtocol instances.
-
- @param manager instance of SDLSecondaryTransportManager
- @param primaryProtocol instance of SDLProtocol for the primary transport
- @return A new primary protocol handler
- */
-- (instancetype)initWithSecondaryTransportManager:(SDLSecondaryTransportManager *)manager
- primaryProtocol:(SDLProtocol *)primaryProtocol;
-
-/**
- * Start the handler.
- */
-- (void)start;
-
-/**
- * Stop the handler.
- */
-- (void)stop;
-
-@end
-
-NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m b/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m
deleted file mode 100644
index 066a68999..000000000
--- a/SmartDeviceLink/SDLSecondaryTransportPrimaryProtocolHandler.m
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// SDLSecondaryTransportPrimaryProtocolHandler.m
-// SmartDeviceLink
-//
-// Created by Sho Amano on 2018/08/09.
-// Copyright © 2018 Xevo Inc. All rights reserved.
-//
-
-#import <Foundation/Foundation.h>
-
-#import "SDLSecondaryTransportPrimaryProtocolHandler.h"
-
-#import "SDLControlFramePayloadRPCStartServiceAck.h"
-#import "SDLControlFramePayloadTransportEventUpdate.h"
-#import "SDLLogMacros.h"
-#import "SDLProtocol.h"
-#import "SDLProtocolMessage.h"
-#import "SDLSecondaryTransportManager.h"
-
-@interface SDLSecondaryTransportPrimaryProtocolHandler ()
-@property (weak, nonatomic) SDLSecondaryTransportManager *secondaryTransportManager;
-@property (weak, nonatomic) SDLProtocol *primaryProtocol;
-@end
-
-@implementation SDLSecondaryTransportPrimaryProtocolHandler
-
-- (instancetype)initWithSecondaryTransportManager:(SDLSecondaryTransportManager *)manager
- primaryProtocol:(SDLProtocol *)primaryProtocol {
- self = [super init];
- if (!self) {
- return nil;
- }
-
- _secondaryTransportManager = manager;
- _primaryProtocol = primaryProtocol;
-
- return self;
-}
-
-- (void)start {
- @synchronized(self.primaryProtocol.protocolDelegateTable) {
- [self.primaryProtocol.protocolDelegateTable addObject:self];
- }
-}
-
-- (void)stop {
- @synchronized(self.primaryProtocol.protocolDelegateTable) {
- [self.primaryProtocol.protocolDelegateTable removeObject:self];
- }
-}
-
-// called from protocol's _reeiveQueue of Primary Transport
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
- if (startServiceACK.header.serviceType != SDLServiceTypeRPC) {
- return;
- }
-
- SDLLogV(@"Received Start Service ACK header of RPC service on primary transport");
-
- // keep header to acquire Session ID
- self.primaryRPCHeader = startServiceACK.header;
-
- SDLControlFramePayloadRPCStartServiceAck *payload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithData:startServiceACK.payload];
-
- [self.secondaryTransportManager onStartServiceAckReceived:payload];
-}
-
-// called from protocol's _reeiveQueue of Primary Transport
-- (void)handleTransportEventUpdateMessage:(SDLProtocolMessage *)transportEventUpdate {
- SDLControlFramePayloadTransportEventUpdate *payload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithData:transportEventUpdate.payload];
- SDLLogV(@"Transport Config Update: %@", payload);
-
- [self.secondaryTransportManager onTransportEventUpdateReceived:payload];
-}
-
-@end
diff --git a/SmartDeviceLink/SDLSoftButtonReplaceOperation.m b/SmartDeviceLink/SDLSoftButtonReplaceOperation.m
index 91191f3b0..d3a68735c 100644
--- a/SmartDeviceLink/SDLSoftButtonReplaceOperation.m
+++ b/SmartDeviceLink/SDLSoftButtonReplaceOperation.m
@@ -50,39 +50,42 @@ NS_ASSUME_NONNULL_BEGIN
[super start];
if (self.isCancelled) { return; }
- // Check the state of our images
+ // Check if soft buttons have images and, if so, if the images need to be uploaded
if (![self sdl_supportsSoftButtonImages]) {
- // We don't support images at all
+ // The module does not support images
SDLLogW(@"Soft button images are not supported. Attempting to send text-only soft buttons. If any button does not contain text, no buttons will be sent.");
- // Send text buttons if all the soft buttons have text
+ // Send text-only buttons if all current states for the soft buttons have text
__weak typeof(self) weakself = self;
[self sdl_sendCurrentStateTextOnlySoftButtonsWithCompletionHandler:^(BOOL success) {
+ __strong typeof(weakself) strongself = weakself;
if (!success) {
- SDLLogE(@"Head unit does not support images and some of the soft buttons do not have text, so none of the buttons will be sent.");
+ SDLLogE(@"Buttons will not be sent because the module does not support images and some of the buttons do not have text");
}
- [weakself finishOperation];
+ [strongself finishOperation];
}];
- } else if ([self sdl_currentStateHasImages] && ![self sdl_allCurrentStateImagesAreUploaded]) {
- // If there are images that aren't uploaded
- // Send text buttons if all the soft buttons have text
+ } else if (![self sdl_allStateImagesAreUploaded]) {
+ // If there are images in the first soft button state that have not yet been uploaded, send a text-only version of the soft buttons (the text-only buttons will only be sent if all the first button states have text)
[self sdl_sendCurrentStateTextOnlySoftButtonsWithCompletionHandler:^(BOOL success) {}];
- // Upload initial images
+ // Upload images used in the first soft button state
__weak typeof(self) weakself = self;
[self sdl_uploadInitialStateImagesWithCompletionHandler:^{
- // Send initial soft buttons w/ images
- [weakself sdl_sendCurrentStateSoftButtonsWithCompletionHandler:^{
- // Upload other images
- [weakself sdl_uploadOtherStateImagesWithCompletionHandler:^{
+ SDLLogV(@"Finished sending images for the first soft button states");
+ // Now that the images have been uploaded, send the soft buttons with images
+ __strong typeof(weakself) strongself = weakself;
+ [strongself sdl_sendCurrentStateSoftButtonsWithCompletionHandler:^{
+ // Finally, upload the images used in the other button states
+ __strong typeof(weakself) strongself = weakself;
+ [strongself sdl_uploadOtherStateImagesWithCompletionHandler:^{
__strong typeof(weakself) strongself = weakself;
- SDLLogV(@"Finished sending other images for soft buttons");
+ SDLLogV(@"Finished sending images for the other soft button states");
[strongself finishOperation];
}];
}];
}];
} else {
- // All the images are already uploaded. Send initial soft buttons w/ images.
+ // All the images have been uploaded. Send initial soft buttons with images.
__weak typeof(self) weakself = self;
[self sdl_sendCurrentStateSoftButtonsWithCompletionHandler:^{
__strong typeof(weakself) strongself = weakself;
@@ -95,8 +98,9 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Uploading Images
+/// Upload the initial state images.
+/// @param handler Called when all images have been uploaded
- (void)sdl_uploadInitialStateImagesWithCompletionHandler:(void (^)(void))handler {
- // Upload all soft button images, the initial state images first, then the other states. We need to send updates when the initial state is ready.
NSMutableArray<SDLArtwork *> *initialStatesToBeUploaded = [NSMutableArray array];
for (SDLSoftButtonObject *object in self.softButtonObjects) {
if ([self sdl_artworkNeedsUpload:object.currentState.artwork]) {
@@ -104,41 +108,13 @@ NS_ASSUME_NONNULL_BEGIN
}
}
- if (initialStatesToBeUploaded.count == 0) {
- SDLLogV(@"No initial state artworks to upload");
- handler();
- return;
- }
-
- SDLLogD(@"Uploading soft button initial artworks");
- NSMutableArray<NSString *> *failedArtworkNames = [NSMutableArray array];
- __weak typeof(self) weakself = self;
- [self.fileManager uploadArtworks:[initialStatesToBeUploaded copy] progressHandler:^BOOL(NSString * _Nonnull artworkName, float uploadPercentage, NSError * _Nullable error) {
- SDLLogV(@"Uploaded initial state artwork: %@, error: %@, percent complete: %f.2%%", artworkName, error, uploadPercentage * 100);
- if (error != nil) {
- [failedArtworkNames addObject:artworkName];
- }
-
- if (weakself.isCancelled) {
- [weakself finishOperation];
- return NO;
- }
-
- return YES;
- } completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) {
- if (error != nil) {
- SDLLogE(@"Error uploading soft button artworks: %@", error);
- } else {
- SDLLogD(@"Soft button initial state artworks uploaded");
- }
-
- handler();
- }];
+ [self sdl_uploadImages:initialStatesToBeUploaded forStateName:@"Initial" completionHandler:handler];
}
+/// Upload the other state images.
+/// @param handler Called when all images have been uploaded
- (void)sdl_uploadOtherStateImagesWithCompletionHandler:(void (^)(void))handler {
NSMutableArray<SDLArtwork *> *otherStatesToBeUploaded = [NSMutableArray array];
- // Upload all soft button images, the initial state images first, then the other states. We need to send updates when the initial state is ready.
for (SDLSoftButtonObject *object in self.softButtonObjects) {
for (SDLSoftButtonState *state in object.states) {
if ([state.name isEqualToString:object.currentState.name]) { continue; }
@@ -148,35 +124,39 @@ NS_ASSUME_NONNULL_BEGIN
}
}
- if (otherStatesToBeUploaded.count == 0) {
- SDLLogV(@"No other state artworks to upload");
- handler();
+ [self sdl_uploadImages:otherStatesToBeUploaded forStateName:@"Other" completionHandler:handler];
+}
+
+/// Helper method for uploading images
+/// @param images The images to upload
+/// @param stateName The name of the button states for which the images are being uploaded. Used for logs.
+/// @param completionHandler Called when all images have been uploaded
+- (void)sdl_uploadImages:(NSArray<SDLArtwork *> *)images forStateName:(NSString *)stateName completionHandler:(void (^)(void))completionHandler {
+ if (images.count == 0) {
+ SDLLogV(@"No images to upload for %@ states", stateName);
+ completionHandler();
return;
}
- SDLLogD(@"Uploading soft button other state artworks");
- NSMutableArray<NSString *> *failedArtworkNames = [NSMutableArray array];
+ SDLLogD(@"Uploading images for %@ states", stateName);
__weak typeof(self) weakself = self;
- [self.fileManager uploadArtworks:[otherStatesToBeUploaded copy] progressHandler:^BOOL(NSString * _Nonnull artworkName, float uploadPercentage, NSError * _Nullable error) {
- SDLLogV(@"Uploaded other state artwork: %@, error: %@, percent complete: %f.2%%", artworkName, error, uploadPercentage * 100);
- if (error != nil) {
- [failedArtworkNames addObject:artworkName];
- }
-
- if (weakself.isCancelled) {
- [weakself finishOperation];
+ [self.fileManager uploadArtworks:[images copy] progressHandler:^BOOL(NSString * _Nonnull artworkName, float uploadPercentage, NSError * _Nullable error) {
+ __strong typeof(weakself) strongself = weakself;
+ SDLLogV(@"Uploaded %@ states images: %@, error: %@, percent complete: %f.2%%", stateName, artworkName, error, uploadPercentage * 100);
+ if (strongself.isCancelled) {
+ [strongself finishOperation];
return NO;
}
return YES;
} completionHandler:^(NSArray<NSString *> * _Nonnull artworkNames, NSError * _Nullable error) {
if (error != nil) {
- SDLLogE(@"Error uploading soft button artworks: %@", error);
+ SDLLogE(@"Error uploading %@ states images: %@", stateName, error);
} else {
- SDLLogD(@"Soft button other state artworks uploaded");
+ SDLLogD(@"All %@ states images uploaded", stateName);
}
- handler();
+ completionHandler();
}];
}
@@ -248,23 +228,16 @@ NS_ASSUME_NONNULL_BEGIN
#pragma mark - Images
- (BOOL)sdl_artworkNeedsUpload:(SDLArtwork *)artwork {
- return (artwork != nil && ![self.fileManager hasUploadedFile:artwork] && !artwork.isStaticIcon);
-}
-
-- (BOOL)sdl_currentStateHasImages {
- for (SDLSoftButtonObject *object in self.softButtonObjects) {
- if (object.currentState.artwork != nil) {
- return YES;
- }
- }
-
- return NO;
+ return (artwork != nil && ![self.fileManager hasUploadedFile:artwork] && self.softButtonCapabilities.imageSupported.boolValue && !artwork.isStaticIcon);
}
-- (BOOL)sdl_allCurrentStateImagesAreUploaded {
+/// Checks all the button states for images that need to be uploaded.
+/// @return True if all images have been uploaded; false at least one image needs to be uploaded
+- (BOOL)sdl_allStateImagesAreUploaded {
for (SDLSoftButtonObject *button in self.softButtonObjects) {
- SDLArtwork *artwork = button.currentState.artwork;
- if ([self sdl_artworkNeedsUpload:artwork]) {
+ for (SDLSoftButtonState *state in button.states) {
+ SDLArtwork *artwork = state.artwork;
+ if (![self sdl_artworkNeedsUpload:artwork]) { continue; }
return NO;
}
}
diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
index 7822f17c8..436bd5ca5 100644
--- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
+++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.h
@@ -9,7 +9,7 @@
#import <Foundation/Foundation.h>
#import "SDLHMILevel.h"
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
#import "SDLStreamingAudioManagerType.h"
#import "SDLStreamingMediaManagerConstants.h"
@@ -25,9 +25,9 @@
NS_ASSUME_NONNULL_BEGIN
-@interface SDLStreamingAudioLifecycleManager : NSObject <SDLProtocolListener, SDLStreamingAudioManagerType>
+@interface SDLStreamingAudioLifecycleManager : NSObject <SDLProtocolDelegate, SDLStreamingAudioManagerType>
-@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioManager;
+@property (nonatomic, strong, readonly) SDLAudioStreamManager *audioTranscodingManager;
@property (strong, nonatomic, readonly) SDLStateMachine *audioStreamStateMachine;
@property (strong, nonatomic, readonly) SDLAudioStreamManagerState *currentAudioStreamState;
@@ -70,11 +70,20 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)startWithProtocol:(SDLProtocol *)protocol;
-/**
- * Stop the manager. This method is used internally.
- */
+/// This method is used internally to stop the manager when the device disconnects from the module. Since there is no connection between the device and the module there is no point in sending an end audio service control frame as the module will never receive the request.
- (void)stop;
+/// This method is used internally to stop the manager when audio needs to be stopped on the secondary transport. The primary transport is still open.
+/// 1. Since the primary transport is still open, we will not reset the `hmiLevel` since we can still get notifications from the module with the updated HMI status on the primary transport.
+/// 2. We need to send an end audio service control frame to the module to ensure that the audio session is shut down correctly. In order to do this the protocol must be kept open and only destroyed after the module ACKs or NAKs our end audio service request.
+/// @param audioEndedCompletionHandler Called when the module ACKs or NAKs to the request to end the audio service.
+- (void)endAudioServiceWithCompletionHandler:(void (^)(void))audioEndedCompletionHandler;
+
+/// This method is used internally to stop audio streaming when the secondary transport has been closed due to an connection error. The primary transport is still open.
+/// 1. Since the transport has been closed, we can not send an end audio service control frame to the module.
+/// 2. Since the primary transport is still open, we will not reset the `hmiLevel`. This lets us resume audio streaming if the secondary transport can be reestablished during the same app session.
+- (void)secondaryTransportDidDisconnect;
+
/**
* This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback
*
diff --git a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
index 6bc8fb8ac..af806d779 100644
--- a/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
+++ b/SmartDeviceLink/SDLStreamingAudioLifecycleManager.m
@@ -35,6 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLStreamingAudioLifecycleManager()
+@property (nonatomic, strong, readwrite) SDLAudioStreamManager *audioTranscodingManager;
@property (strong, nonatomic, readwrite) SDLStateMachine *audioStreamStateMachine;
@property (assign, nonatomic, readonly, getter=isHmiStateAudioStreamCapable) BOOL hmiStateAudioStreamCapable;
@@ -43,8 +44,10 @@ NS_ASSUME_NONNULL_BEGIN
@property (weak, nonatomic) SDLProtocol *protocol;
@property (copy, nonatomic) NSArray<NSString *> *secureMakes;
-@property (copy, nonatomic) NSString *connectedVehicleMake;
+@property (copy, nonatomic, nullable) NSString *connectedVehicleMake;
+@property (assign, nonatomic, readwrite, getter=isAudioEncrypted) BOOL audioEncrypted;
+@property (nonatomic, copy, nullable) void (^audioServiceEndedCompletionHandler)(void);
@end
@implementation SDLStreamingAudioLifecycleManager
@@ -55,10 +58,8 @@ NS_ASSUME_NONNULL_BEGIN
return nil;
}
- SDLLogV(@"Creating AudioStreamingLifecycleManager");
-
_connectionManager = connectionManager;
- _audioManager = [[SDLAudioStreamManager alloc] initWithManager:self];
+ _audioTranscodingManager = [[SDLAudioStreamManager alloc] initWithManager:self];
_systemCapabilityManager = systemCapabilityManager;
_requestedEncryptionType = configuration.streamingMediaConfig.maximumDesiredEncryption;
@@ -84,6 +85,7 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)startWithProtocol:(SDLProtocol *)protocol {
+ SDLLogD(@"Starting with protocol: %@", protocol);
_protocol = protocol;
@synchronized(self.protocol.protocolDelegateTable) {
@@ -98,13 +100,26 @@ NS_ASSUME_NONNULL_BEGIN
- (void)stop {
SDLLogD(@"Stopping manager");
- [self sdl_stopAudioSession];
+ _protocol = nil;
+ _hmiLevel = SDLHMILevelNone;
+ _connectedVehicleMake = nil;
+ [self.audioTranscodingManager stop];
- self.hmiLevel = SDLHMILevelNone;
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
+}
+- (void)secondaryTransportDidDisconnect {
[self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
}
+- (void)endAudioServiceWithCompletionHandler:(void (^)(void))audioEndedCompletionHandler {
+ SDLLogD(@"Ending audio service");
+ self.audioServiceEndedCompletionHandler = audioEndedCompletionHandler;
+
+ [self.audioTranscodingManager stop];
+ [self.protocol endServiceWithType:SDLServiceTypeAudio];
+}
+
- (BOOL)sendAudioData:(NSData*)audioData {
if (!self.isAudioConnected) {
return NO;
@@ -144,6 +159,11 @@ NS_ASSUME_NONNULL_BEGIN
_audioEncrypted = NO;
[[NSNotificationCenter defaultCenter] postNotificationName:SDLAudioStreamDidStopNotification object:nil];
+
+ if (self.audioServiceEndedCompletionHandler != nil) {
+ self.audioServiceEndedCompletionHandler();
+ self.audioServiceEndedCompletionHandler = nil;
+ }
}
- (void)didEnterStateAudioStreamStarting {
@@ -170,24 +190,16 @@ NS_ASSUME_NONNULL_BEGIN
[self.protocol endServiceWithType:SDLServiceTypeAudio];
}
-#pragma mark - SDLProtocolListener
-#pragma mark Video / Audio Start Service ACK
+#pragma mark - SDLProtocolDelegate
+#pragma mark Start Service ACK/NAK
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
- switch (startServiceACK.header.serviceType) {
- case SDLServiceTypeAudio: {
- [self sdl_handleAudioStartServiceAck:startServiceACK];
- } break;
- default: break;
- }
-}
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
+ if (startServiceACK.header.serviceType != SDLServiceTypeAudio) { return; }
-- (void)sdl_handleAudioStartServiceAck:(SDLProtocolMessage *)audioStartServiceAck {
- SDLLogD(@"Audio service started");
- _audioEncrypted = audioStartServiceAck.header.encrypted;
+ self.audioEncrypted = startServiceACK.header.encrypted;
- SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:audioStartServiceAck.payload];
- SDLLogV(@"ACK: %@", audioAckPayload);
+ SDLControlFramePayloadAudioStartServiceAck *audioAckPayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithData:startServiceACK.payload];
+ SDLLogD(@"Request to start audio service ACKed on transport %@, with payload: %@", protocol.transport, audioAckPayload);
if (audioAckPayload.mtu != SDLControlFrameInt64NotFound) {
[[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)audioAckPayload.mtu forServiceType:SDLServiceTypeAudio];
@@ -196,32 +208,31 @@ NS_ASSUME_NONNULL_BEGIN
[self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateReady];
}
-#pragma mark Video / Audio Start Service NAK
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK {
+ if (startServiceNAK.header.serviceType != SDLServiceTypeAudio) { return; }
+
+ SDLLogE(@"Request to start audio service NAKed on transport %@, with payload: %@", protocol.transport, startServiceNAK.payload);
-- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
- switch (startServiceNAK.header.serviceType) {
- case SDLServiceTypeAudio: {
- [self sdl_handleAudioStartServiceNak:startServiceNAK];
- } break;
- default: break;
- }
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
}
-- (void)sdl_handleAudioStartServiceNak:(SDLProtocolMessage *)audioStartServiceNak {
- SDLLogW(@"Audio service failed to start due to NAK");
- [self sdl_transitionToStoppedState:SDLServiceTypeAudio];
-}
+#pragma mark End Service ACK/NAK
-#pragma mark Video / Audio End Service
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK {
+ if (endServiceACK.header.serviceType != SDLServiceTypeAudio) { return; }
+ SDLLogD(@"Request to end audio service ACKed on transport %@", protocol.transport);
-- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
- SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
- [self sdl_transitionToStoppedState:endServiceACK.header.serviceType];
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
}
-- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
- SDLLogW(@"%@ service ended with end service NAK", (endServiceNAK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
- [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType];
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK {
+ if (endServiceNAK.header.serviceType != SDLServiceTypeAudio) { return; }
+
+ SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:endServiceNAK.payload];
+ SDLLogE(@"Request to end audio service NAKed on transport %@, with payload: %@", protocol.transport, nakPayload);
+
+ /// Core will NAK the audio end service control frame if audio is not streaming or if video is streaming but the HMI does not recognize that audio is streaming.
+ [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
}
#pragma mark - SDL RPC Notification callbacks
@@ -232,8 +243,9 @@ NS_ASSUME_NONNULL_BEGIN
return;
}
- SDLLogD(@"Received Register App Interface response");
+ SDLLogV(@"Received Register App Interface response");
SDLRegisterAppInterfaceResponse *registerResponse = (SDLRegisterAppInterfaceResponse*)notification.response;
+
self.connectedVehicleMake = registerResponse.vehicleType.make;
}
@@ -289,15 +301,6 @@ NS_ASSUME_NONNULL_BEGIN
}
}
-- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType {
- switch (serviceType) {
- case SDLServiceTypeAudio:
- [self.audioStreamStateMachine transitionToState:SDLAudioStreamManagerStateStopped];
- break;
- default: break;
- }
-}
-
#pragma mark Setters / Getters
- (BOOL)isHmiStateAudioStreamCapable {
diff --git a/SmartDeviceLink/SDLStreamingMediaManager.h b/SmartDeviceLink/SDLStreamingMediaManager.h
index 9a6142369..495f466cf 100644
--- a/SmartDeviceLink/SDLStreamingMediaManager.h
+++ b/SmartDeviceLink/SDLStreamingMediaManager.h
@@ -15,6 +15,7 @@
@class SDLAudioStreamManager;
@class SDLConfiguration;
@class SDLProtocol;
+@class SDLSecondaryTransportManager;
@class SDLSystemCapabilityManager;
@class SDLTouchManager;
@class SDLVideoStreamingFormat;
@@ -22,11 +23,11 @@
@protocol SDLFocusableItemLocatorType;
@protocol SDLConnectionManagerType;
+
NS_ASSUME_NONNULL_BEGIN
-#pragma mark - Interface
-/// Manager to help control streaming media services.
+/// Manager to help control streaming (video and audio) media services.
@interface SDLStreamingMediaManager : NSObject <SDLStreamingAudioManagerType>
/**
@@ -99,7 +100,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
* The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.
*
- * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
+ * @warning This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
* @discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it's OK to call it once per frame.
*/
@property (assign, nonatomic, readonly, nullable) CVPixelBufferPoolRef pixelBufferPool;
@@ -116,6 +117,9 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (assign, nonatomic) BOOL showVideoBackgroundDisplay;
+
+#pragma mark - Lifecycle
+
/// Initializer unavailable
- (instancetype)init NS_UNAVAILABLE;
@@ -131,21 +135,11 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager NS_DESIGNATED_INITIALIZER;
/**
- * Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
+ * Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
*/
- (void)startWithProtocol:(SDLProtocol *)protocol;
/**
- * Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
- */
-- (void)startAudioWithProtocol:(SDLProtocol *)protocol;
-
-/**
- * Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
- */
-- (void)startVideoWithProtocol:(SDLProtocol *)protocol;
-
-/**
* Stop the manager. This method is used internally.
*/
- (void)stop;
@@ -160,6 +154,8 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)stopVideo;
+#pragma mark - Data Transfer
+
/**
* This method receives raw image data and will run iOS8+'s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.
*
@@ -190,6 +186,18 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (BOOL)sendAudioData:(NSData *)audioData;
+#pragma mark - Deprecated Methods
+
+ /**
+ * Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
+ */
+- (void)startAudioWithProtocol:(SDLProtocol *)protocol __deprecated_msg("Use startWithProtocol: instead");
+
+ /**
+ * Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on `SDLManager`.
+ */
+- (void)startVideoWithProtocol:(SDLProtocol *)protocol __deprecated_msg("Use startWithProtocol: instead");
+
@end
diff --git a/SmartDeviceLink/SDLStreamingMediaManager.m b/SmartDeviceLink/SDLStreamingMediaManager.m
index f2a51be98..3b6a14890 100644
--- a/SmartDeviceLink/SDLStreamingMediaManager.m
+++ b/SmartDeviceLink/SDLStreamingMediaManager.m
@@ -11,7 +11,11 @@
#import "SDLAudioStreamManager.h"
#import "SDLConfiguration.h"
#import "SDLConnectionManagerType.h"
+#import "SDLGlobals.h"
+#import "SDLLogMacros.h"
+#import "SDLSecondaryTransportManager.h"
#import "SDLStreamingAudioLifecycleManager.h"
+#import "SDLStreamingProtocolDelegate.h"
#import "SDLStreamingVideoLifecycleManager.h"
#import "SDLStreamingVideoScaleManager.h"
#import "SDLSystemCapabilityManager.h"
@@ -20,20 +24,23 @@
NS_ASSUME_NONNULL_BEGIN
-@interface SDLStreamingMediaManager ()
+@interface SDLStreamingMediaManager () <SDLStreamingProtocolDelegate>
@property (strong, nonatomic) SDLStreamingAudioLifecycleManager *audioLifecycleManager;
@property (strong, nonatomic) SDLStreamingVideoLifecycleManager *videoLifecycleManager;
@property (assign, nonatomic) BOOL audioStarted;
@property (assign, nonatomic) BOOL videoStarted;
+@property (strong, nonatomic, nullable) SDLProtocol *audioProtocol;
+@property (strong, nonatomic, nullable) SDLProtocol *videoProtocol;
+
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
@end
@implementation SDLStreamingMediaManager
-#pragma mark - Public
-#pragma mark Lifecycle
+#pragma mark - Lifecycle
- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager configuration:(SDLConfiguration *)configuration systemCapabilityManager:(nullable SDLSystemCapabilityManager *)systemCapabilityManager {
self = [super init];
@@ -51,36 +58,27 @@ NS_ASSUME_NONNULL_BEGIN
return [self initWithConnectionManager:connectionManager configuration:configuration systemCapabilityManager:nil];
}
-- (void)dealloc {
- [_audioLifecycleManager stop];
- [_videoLifecycleManager stop];
-}
-
-- (void)startWithProtocol:(SDLProtocol *)protocol {
- [self startAudioWithProtocol:protocol];
- [self startVideoWithProtocol:protocol];
-}
-
-- (void)startAudioWithProtocol:(SDLProtocol *)protocol {
- [self.audioLifecycleManager startWithProtocol:protocol];
- self.audioStarted = YES;
-}
-
-- (void)startVideoWithProtocol:(SDLProtocol *)protocol {
- [self.videoLifecycleManager startWithProtocol:protocol];
- self.videoStarted = YES;
-}
-
- (void)stop {
[self stopAudio];
[self stopVideo];
+ self.audioProtocol = nil;
+ self.videoProtocol = nil;
}
+
+#pragma mark Audio
+
- (void)stopAudio {
[self.audioLifecycleManager stop];
self.audioStarted = NO;
}
+- (BOOL)sendAudioData:(NSData*)audioData {
+ return [self.audioLifecycleManager sendAudioData:audioData];
+}
+
+#pragma mark Video
+
- (void)stopVideo {
[self.videoLifecycleManager stop];
self.videoStarted = NO;
@@ -94,8 +92,132 @@ NS_ASSUME_NONNULL_BEGIN
return [self.videoLifecycleManager sendVideoData:imageBuffer presentationTimestamp:presentationTimestamp];
}
-- (BOOL)sendAudioData:(NSData*)audioData {
- return [self.audioLifecycleManager sendAudioData:audioData];
+#pragma mark - Secondary Transport
+
+- (void)startWithProtocol:(SDLProtocol *)protocol {
+ [self didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:protocol fromOldAudioProtocol:nil toNewAudioProtocol:protocol];
+}
+
+- (void)sdl_disconnectSecondaryTransportWithCompletionHandler:(void (^)(void))completionHandler {
+ if (self.secondaryTransportManager == nil) {
+ SDLLogV(@"Attempting to disconnect a non-existent secondary transport. Returning.");
+ return completionHandler();
+ }
+
+ [self.secondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:completionHandler];
+}
+
+# pragma mark SDLStreamingProtocolDelegate
+
+- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol
+ toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol
+ fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol
+ toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol {
+ BOOL videoProtocolUpdated = (oldVideoProtocol != newVideoProtocol);
+ BOOL audioProtocolUpdated = (oldAudioProtocol != newAudioProtocol);
+
+ if (!videoProtocolUpdated && !audioProtocolUpdated) {
+ SDLLogV(@"The video and audio transports did not update.");
+ return;
+ }
+
+ dispatch_group_t endServiceTask = dispatch_group_create();
+ dispatch_group_enter(endServiceTask);
+
+ __weak typeof(self) weakSelf = self;
+ if (oldVideoProtocol != nil) {
+ dispatch_group_enter(endServiceTask);
+ [self.videoLifecycleManager endVideoServiceWithCompletionHandler:^ {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ strongSelf.videoStarted = NO;
+ dispatch_group_leave(endServiceTask);
+ }];
+ }
+
+ if (oldAudioProtocol != nil) {
+ dispatch_group_enter(endServiceTask);
+ __weak typeof(self) weakSelf = self;
+ [self.audioLifecycleManager endAudioServiceWithCompletionHandler:^ {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ strongSelf.audioStarted = NO;
+ dispatch_group_leave(endServiceTask);
+ }];
+ }
+
+ dispatch_group_leave(endServiceTask);
+
+ // This will always run
+ dispatch_group_notify(endServiceTask, [SDLGlobals sharedGlobals].sdlProcessingQueue, ^{
+ if (oldVideoProtocol != nil || oldAudioProtocol != nil) {
+ [self sdl_reconnectSecondaryTransportWithNewVideoProtocol:newVideoProtocol newAudioProtocol:newAudioProtocol transportDestroyed:false];
+ } else {
+ SDLLogV(@"No need to disconnect the secondary transport. Starting new audio and video protocols");
+ [self sdl_startNewProtocolForAudio:newAudioProtocol forVideo:newVideoProtocol];
+ }
+ });
+}
+
+- (void)transportClosed {
+ [self sdl_reconnectSecondaryTransportWithNewVideoProtocol:nil newAudioProtocol:nil transportDestroyed:true];
+}
+
+/// Disconnects the secondary transport. If the transport is still open and a new video or audio protocol have been set, then a new video/audio sessions are attempted. If the transport has been closed, then the audio/video managers are stopped.
+/// @param newVideoProtocol The new video protocol
+/// @param newAudioProtocol The new audio protocol
+/// @param transportDestroyed Whether or not the transport is still open
+- (void)sdl_reconnectSecondaryTransportWithNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol newAudioProtocol:(nullable SDLProtocol *)newAudioProtocol transportDestroyed:(BOOL)transportDestroyed {
+ SDLLogV(@"Disconnecting the secondary transport");
+ __weak typeof(self) weakSelf = self;
+ [self sdl_disconnectSecondaryTransportWithCompletionHandler:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (transportDestroyed) {
+ SDLLogD(@"Transport destroyed. Shutting down audio and video managers");
+ [strongSelf.audioLifecycleManager secondaryTransportDidDisconnect];
+ [strongSelf.videoLifecycleManager secondaryTransportDidDisconnect];
+ strongSelf.audioProtocol = nil;
+ strongSelf.videoProtocol = nil;
+ } else {
+ SDLLogD(@"Checking if new audio and video sessions need to be started on the transport");
+ strongSelf.audioProtocol = nil;
+ strongSelf.videoProtocol = nil;
+ [strongSelf sdl_startNewProtocolForAudio:newAudioProtocol forVideo:newVideoProtocol];
+ }
+ }];
+}
+
+/// Starts the audio and/or video services using the new protocol.
+/// @param newAudioProtocol The new audio protocol
+/// @param newVideoProtocol The new video protocol
+- (void)sdl_startNewProtocolForAudio:(nullable SDLProtocol *)newAudioProtocol forVideo:(nullable SDLProtocol *)newVideoProtocol {
+ if (newAudioProtocol == nil && newVideoProtocol == nil) {
+ SDLLogD(@"No new audio or video session will be started");
+ return;
+ }
+
+ if (newAudioProtocol != nil) {
+ self.audioProtocol = newAudioProtocol;
+ [self.audioLifecycleManager startWithProtocol:newAudioProtocol];
+ self.audioStarted = YES;
+ }
+ if (newVideoProtocol != nil) {
+ self.videoProtocol = newVideoProtocol;
+ [self.videoLifecycleManager startWithProtocol:newVideoProtocol];
+ self.videoStarted = YES;
+ }
+}
+
+#pragma mark Deprecated
+
+ - (void)startAudioWithProtocol:(SDLProtocol *)protocol {
+ self.audioProtocol = protocol;
+ [self.audioLifecycleManager startWithProtocol:protocol];
+ self.audioStarted = YES;
+}
+
+ - (void)startVideoWithProtocol:(SDLProtocol *)protocol {
+ self.videoProtocol = protocol;
+ [self.videoLifecycleManager startWithProtocol:protocol];
+ self.videoStarted = YES;
}
@@ -106,7 +228,7 @@ NS_ASSUME_NONNULL_BEGIN
}
- (SDLAudioStreamManager *)audioManager {
- return self.audioLifecycleManager.audioManager;
+ return self.audioLifecycleManager.audioTranscodingManager;
}
- (nullable UIViewController *)rootViewController {
@@ -137,7 +259,7 @@ NS_ASSUME_NONNULL_BEGIN
- (BOOL)isVideoEncrypted {
return self.videoLifecycleManager.isVideoEncrypted;
}
-
+
- (BOOL)isVideoStreamingPaused {
return self.videoLifecycleManager.isVideoStreamingPaused;
}
@@ -164,11 +286,12 @@ NS_ASSUME_NONNULL_BEGIN
}
- (BOOL)showVideoBackgroundDisplay {
- // both audio and video managers should have same type
return self.videoLifecycleManager.showVideoBackgroundDisplay;
}
+
#pragma mark - Setters
+
- (void)setRootViewController:(nullable UIViewController *)rootViewController {
self.videoLifecycleManager.rootViewController = rootViewController;
}
diff --git a/SmartDeviceLink/SDLStreamingProtocolDelegate.h b/SmartDeviceLink/SDLStreamingProtocolDelegate.h
index b3ec8f78a..1639c3b7d 100644
--- a/SmartDeviceLink/SDLStreamingProtocolDelegate.h
+++ b/SmartDeviceLink/SDLStreamingProtocolDelegate.h
@@ -14,27 +14,20 @@ NS_ASSUME_NONNULL_BEGIN
@protocol SDLStreamingProtocolDelegate <NSObject>
-/**
- * Called when protocol instance for audio service has been updated.
- *
- * If `newProtocol` is nil, it indicates that underlying transport
- * becomes unavailable.
- *
- * @param oldProtocol protocol instance that has been used for audio streaming.
- * @param newProtocol protocol instance that will be used for audio streaming.
- */
-- (void)audioServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol;
-
-/**
- * Called when protocol instance for video service has been updated.
- *
- * If `newProtocol` is nil, it indicates that underlying transport
- * becomes unavailable.
- *
- * @param oldProtocol protocol instance that has been used for video streaming.
- * @param newProtocol protocol instance that will be used for video streaming.
- */
-- (void)videoServiceProtocolDidUpdateFromOldProtocol:(nullable SDLProtocol *)oldProtocol toNewProtocol:(nullable SDLProtocol *)newProtocol;
+/// Called when protocol instance for audio and/or video service has been updated and the transport is established.
+///
+/// If `newVideoProtocol` or `newAudioProtocol` have been set then the transport is established and a current session can be started. If `newVideoProtocol` or `newAudioProtocol` is nil it indicates that underlying transport will become unavailable and any ongoing sessions on that transport should be stopped (i.e. send a request to the module to stop the session and wait for a response).
+///
+/// @param oldVideoProtocol protocol instance that was being used for video streaming
+/// @param newVideoProtocol protocol instance that will be used for video streaming
+/// @param oldAudioProtocol protocol instance that was being used for audio streaming
+/// @param newAudioProtocol protocol instance that will be used for audio streaming
+- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol;
+
+/// Called when the audio and/or video must be stopped because the transport has been destroyed or errored out.
+///
+/// Since the transport does not exist, current sessions can not be properly stopped (i.e. no request can be sent module to stop the session) but the observer still needs to stop creating and sending data.
+- (void)transportClosed;
@end
diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
index 0ed5e1c7e..9fb1b39a1 100644
--- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
+++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.h
@@ -10,7 +10,7 @@
#import <VideoToolbox/VideoToolbox.h>
#import "SDLHMILevel.h"
-#import "SDLProtocolListener.h"
+#import "SDLProtocolDelegate.h"
#import "SDLStreamingMediaManagerConstants.h"
#import "SDLVideoStreamingFormat.h"
#import "SDLVideoStreamingState.h"
@@ -30,10 +30,9 @@
@protocol SDLStreamingMediaManagerDataSource;
-
NS_ASSUME_NONNULL_BEGIN
-@interface SDLStreamingVideoLifecycleManager : NSObject <SDLProtocolListener>
+@interface SDLStreamingVideoLifecycleManager : NSObject <SDLProtocolDelegate>
@property (strong, nonatomic, readonly) SDLStateMachine *videoStreamStateMachine;
@property (strong, nonatomic, readonly) SDLVideoStreamManagerState *currentVideoStreamState;
@@ -148,11 +147,21 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (void)startWithProtocol:(SDLProtocol *)protocol;
-/**
- * Stop the manager. This method is used internally.
- */
+/// This method is used internally to stop the manager when the device disconnects from the module.
- (void)stop;
+/// This method is used internally to stop the manager when video needs to be stopped on the secondary transport. The primary transport is still open.
+/// 1. Since the primary transport is still open, do will not reset the `hmiLevel` and `videoStreamingState` because we can still get notifications from the module with the updated hmi status on the primary transport.
+/// 2. We need to send an end video service control frame to the module to ensure that the video session is shut down correctly. In order to do this the protocol must be kept open and only destroyed after the module ACKs or NAKs our end video service request.
+/// 3. Since the primary transport is still open, the video scale manager should not be reset because the default video dimensions are retrieved from the `RegisterAppInterfaceResponse`. Due to a bug with the video start service ACK sometimes returning a screen resolution of {0, 0} on subsequent request to start a video service, we need to keep the screen resolution from the very first start video service ACK. (This is not an issue if the head unit supports the `VideoStreamingCapability`).
+/// @param videoEndedCompletionHandler Called when the module ACKs or NAKs to the request to end the video service.
+- (void)endVideoServiceWithCompletionHandler:(void (^)(void))videoEndedCompletionHandler;
+
+/// This method is used internally to stop video streaming when the secondary transport has been closed due to an connection error. The primary transport is still open.
+/// 1. Since the transport has been closed, we can not send an end video service control frame to the module.
+/// 2. Since the primary transport is still open, we will not reset the `hmiLevel`, `videoStreamingState` or the video scale manager. This lets us resume video streaming if the secondary transport can be reestablished during the same app session.
+- (void)secondaryTransportDidDisconnect;
+
/**
* This method receives raw image data and will run iOS8+'s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.
*
diff --git a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
index c32613e97..f6d8d00c7 100644
--- a/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
+++ b/SmartDeviceLink/SDLStreamingVideoLifecycleManager.m
@@ -72,7 +72,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
@property (strong, nonatomic) NSMutableDictionary *videoEncoderSettings;
@property (copy, nonatomic) NSDictionary<NSString *, id> *customEncoderSettings;
@property (copy, nonatomic) NSArray<NSString *> *secureMakes;
-@property (copy, nonatomic) NSString *connectedVehicleMake;
+@property (copy, nonatomic, nullable) NSString *connectedVehicleMake;
@property (copy, nonatomic, readonly) NSString *appName;
@property (assign, nonatomic) CV_NULLABLE CVPixelBufferRef backgroundingPixelBuffer;
@@ -80,6 +80,8 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
@property (strong, nonatomic, nullable) CADisplayLink *displayLink;
@property (assign, nonatomic) BOOL useDisplayLink;
+@property (assign, nonatomic, readwrite, getter=isVideoEncrypted) BOOL videoEncrypted;
+
/**
* SSRC of RTP header field.
*
@@ -92,6 +94,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
@property (assign, nonatomic) CMTime lastPresentationTimestamp;
@property (copy, nonatomic, readonly) NSString *videoStreamBackgroundString;
+@property (nonatomic, copy, nullable) void (^videoServiceEndedCompletionHandler)(void);
@end
@@ -103,8 +106,6 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
return nil;
}
- SDLLogV(@"Creating StreamingLifecycleManager");
-
_appName = configuration.lifecycleConfig.appName;
_connectionManager = connectionManager;
_systemCapabilityManager = systemCapabilityManager;
@@ -180,6 +181,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
- (void)startWithProtocol:(SDLProtocol *)protocol {
+ SDLLogD(@"Starting with protocol: %@", protocol);
_protocol = protocol;
@synchronized(self.protocol.protocolDelegateTable) {
@@ -188,27 +190,42 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
}
+ [self.focusableItemManager start];
+
// attempt to start streaming since we may already have necessary conditions met
[self sdl_startVideoSession];
}
- (void)stop {
SDLLogD(@"Stopping manager");
- [self sdl_stopVideoSession];
- _protocol = nil;
_backgroundingPixelBuffer = NULL;
_preferredFormatIndex = 0;
_preferredResolutionIndex = 0;
-
+ _lastPresentationTimestamp = kCMTimeInvalid;
_hmiLevel = SDLHMILevelNone;
_videoStreamingState = SDLVideoStreamingStateNotStreamable;
- _lastPresentationTimestamp = kCMTimeInvalid;
-
+ _protocol = nil;
[self.videoScaleManager stop];
+ [self.focusableItemManager stop];
+ _connectedVehicleMake = nil;
+
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
+}
+
+- (void)secondaryTransportDidDisconnect {
+ SDLLogD(@"Stopping video manager");
+ [self.focusableItemManager stop];
[self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
}
+- (void)endVideoServiceWithCompletionHandler:(void (^)(void))videoEndedCompletionHandler {
+ SDLLogD(@"Ending video service");
+ [self sdl_disposeDisplayLink];
+ self.videoServiceEndedCompletionHandler = videoEndedCompletionHandler;
+ [self.protocol endServiceWithType:SDLServiceTypeVideo];
+}
+
- (BOOL)sendVideoData:(CVImageBufferRef)imageBuffer {
return [self sendVideoData:imageBuffer presentationTimestamp:kCMTimeInvalid];
}
@@ -288,7 +305,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)didEnterStateAppInactive {
SDLLogD(@"App became inactive");
- if (!self.protocol) { return; }
+ if (self.protocol == nil) {
+ SDLLogV(@"No session established with head unit. Ignoring app backgrounded notification");
+ return;
+ }
if (_showVideoBackgroundDisplay) {
[self sdl_sendBackgroundFrames];
@@ -306,7 +326,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
// We should be waiting to start any OpenGL drawing until UIApplicationDidBecomeActive is called.
- (void)didEnterStateAppActive {
SDLLogD(@"App became active");
- if (!self.protocol) { return; }
+ if (self.protocol == nil) {
+ SDLLogV(@"No session established with head unit. Ignoring app foregounded notification");
+ return;
+ }
if (self.isVideoSuspended) {
[self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady];
@@ -326,11 +349,11 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
};
}
-- (void)disposeDisplayLink {
- if (self.displayLink != nil) {
- [self.displayLink invalidate];
- self.displayLink = nil;
- }
+- (void)sdl_disposeDisplayLink {
+ if (self.displayLink == nil) { return; }
+ SDLLogD(@"Destroying display link");
+ [self.displayLink invalidate];
+ self.displayLink = nil;
}
- (void)didEnterStateVideoStreamStopped {
@@ -343,9 +366,19 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
_videoEncoder = nil;
}
- [self disposeDisplayLink];
+ _backgroundingPixelBuffer = NULL;
+ _preferredFormatIndex = 0;
+ _preferredResolutionIndex = 0;
+ _lastPresentationTimestamp = kCMTimeInvalid;
+
+ [self sdl_disposeDisplayLink];
[[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStopNotification object:nil];
+
+ if (self.videoServiceEndedCompletionHandler != nil) {
+ self.videoServiceEndedCompletionHandler();
+ self.videoServiceEndedCompletionHandler = nil;
+ }
}
- (void)didEnterStateVideoStreamStarting {
@@ -424,7 +457,15 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
self.videoEncoder = nil;
}
- [self disposeDisplayLink];
+ [self sdl_disposeDisplayLink];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStartNotification object:nil];
+
+ if (!self.isAppStateVideoStreamCapable) {
+ SDLLogD(@"App is in the background and can not stream video. Video will resume when app is foregrounded");
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateSuspended];
+ return;
+ }
if (self.videoEncoder == nil) {
NSError* error = nil;
@@ -452,20 +493,19 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
self.lastPresentationTimestamp = kCMTimeInvalid;
}
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamDidStartNotification object:nil];
-
if (self.useDisplayLink) {
+ __weak typeof(self) weakSelf = self;
dispatch_async(dispatch_get_main_queue(), ^{
- // And start up the displayLink
- NSInteger targetFramerate = ((NSNumber *)self.videoEncoderSettings[(__bridge NSString *)kVTCompressionPropertyKey_ExpectedFrameRate]).integerValue;
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ NSInteger targetFramerate = ((NSNumber *)strongSelf.videoEncoderSettings[(__bridge NSString *)kVTCompressionPropertyKey_ExpectedFrameRate]).integerValue;
SDLLogD(@"Initializing CADisplayLink with framerate: %ld", (long)targetFramerate);
- self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(sdl_displayLinkFired:)];
+ strongSelf.displayLink = [CADisplayLink displayLinkWithTarget:strongSelf selector:@selector(sdl_displayLinkFired:)];
if (@available(iOS 10, *)) {
- self.displayLink.preferredFramesPerSecond = targetFramerate;
+ strongSelf.displayLink.preferredFramesPerSecond = targetFramerate;
} else {
- self.displayLink.frameInterval = (60 / targetFramerate);
+ strongSelf.displayLink.frameInterval = (60 / targetFramerate);
}
- [self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
+ [strongSelf.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
});
} else {
self.touchManager.enableSyncedPanning = NO;
@@ -474,9 +514,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)didEnterStateVideoStreamSuspended {
SDLLogD(@"Video stream suspended");
-
- [self disposeDisplayLink];
-
+ [self sdl_disposeDisplayLink];
[[NSNotificationCenter defaultCenter] postNotificationName:SDLVideoStreamSuspendedNotification object:nil];
}
@@ -485,31 +523,23 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.protocol endServiceWithType:SDLServiceTypeVideo];
}
-#pragma mark - SDLProtocolListener
-#pragma mark Video / Audio Start Service ACK
+#pragma mark - SDLProtocolDelegate
+#pragma mark Start Service ACK/NAK
-- (void)handleProtocolStartServiceACKMessage:(SDLProtocolMessage *)startServiceACK {
- switch (startServiceACK.header.serviceType) {
- case SDLServiceTypeVideo: {
- [self sdl_handleVideoStartServiceAck:startServiceACK];
- } break;
- default: break;
- }
-}
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceACK:(SDLProtocolMessage *)startServiceACK {
+ if (startServiceACK.header.serviceType != SDLServiceTypeVideo) { return; }
-- (void)sdl_handleVideoStartServiceAck:(SDLProtocolMessage *)videoStartServiceAck {
- SDLLogD(@"Video service started");
- _videoEncrypted = videoStartServiceAck.header.encrypted;
+ self.videoEncrypted = startServiceACK.header.encrypted;
- SDLControlFramePayloadVideoStartServiceAck *videoAckPayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithData:videoStartServiceAck.payload];
- SDLLogV(@"ACK: %@", videoAckPayload);
+ SDLControlFramePayloadVideoStartServiceAck *videoAckPayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithData:startServiceACK.payload];
+ SDLLogD(@"Request to start video service ACKed on transport %@, with payload: %@", protocol.transport, videoAckPayload);
if (videoAckPayload.mtu != SDLControlFrameInt64NotFound) {
[[SDLGlobals sharedGlobals] setDynamicMTUSize:(NSUInteger)videoAckPayload.mtu forServiceType:SDLServiceTypeVideo];
}
// This is the definitive screen size that will be used
- if (videoAckPayload.height != SDLControlFrameInt32NotFound && videoAckPayload.width != SDLControlFrameInt32NotFound) {
+ if ((videoAckPayload.height != SDLControlFrameInt32NotFound || videoAckPayload.height != 0) && (videoAckPayload.width != SDLControlFrameInt32NotFound && videoAckPayload.width != 0)) {
self.videoScaleManager.displayViewportResolution = CGSizeMake(videoAckPayload.width, videoAckPayload.height);
} else if (self.preferredResolutions.count > 0) {
// If a preferred resolution was set, use the first option to set the screen size
@@ -529,25 +559,15 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateReady];
}
-#pragma mark Video / Audio Start Service NAK
-
-- (void)handleProtocolStartServiceNAKMessage:(SDLProtocolMessage *)startServiceNAK {
- switch (startServiceNAK.header.serviceType) {
- case SDLServiceTypeVideo: {
- [self sdl_handleVideoStartServiceNak:startServiceNAK];
- }
- default: break;
- }
-}
+- (void)protocol:(SDLProtocol *)protocol didReceiveStartServiceNAK:(SDLProtocolMessage *)startServiceNAK {
+ if (startServiceNAK.header.serviceType != SDLServiceTypeVideo) { return; }
-- (void)sdl_handleVideoStartServiceNak:(SDLProtocolMessage *)videoStartServiceNak {
- SDLLogW(@"Video service failed to start due to NAK");
- SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:videoStartServiceNak.payload];
- SDLLogD(@"NAK: %@", videoStartServiceNak);
+ SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:startServiceNAK.payload];
+ SDLLogE(@"Request to start video service NAKed on transport %@, with payload: %@", protocol.transport, nakPayload);
// If we have no payload rejected params, we don't know what to do to retry, so we'll just stop and maybe cry
if (nakPayload.rejectedParams.count == 0) {
- [self sdl_transitionToStoppedState:SDLServiceTypeVideo];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
return;
}
@@ -565,16 +585,23 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
[self sdl_sendVideoStartService];
}
-#pragma mark Video / Audio End Service
+#pragma mark End Service ACK/NAK
+
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceACK:(SDLProtocolMessage *)endServiceACK {
+ if (endServiceACK.header.serviceType != SDLServiceTypeVideo) { return; }
+ SDLLogD(@"Request to end video service ACKed on transport %@", protocol.transport);
-- (void)handleProtocolEndServiceACKMessage:(SDLProtocolMessage *)endServiceACK {
- SDLLogD(@"%@ service ended", (endServiceACK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
- [self sdl_transitionToStoppedState:endServiceACK.header.serviceType];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
}
-- (void)handleProtocolEndServiceNAKMessage:(SDLProtocolMessage *)endServiceNAK {
- SDLLogW(@"%@ service ended with end service NAK", (endServiceNAK.header.serviceType == SDLServiceTypeVideo ? @"Video" : @"Audio"));
- [self sdl_transitionToStoppedState:endServiceNAK.header.serviceType];
+- (void)protocol:(SDLProtocol *)protocol didReceiveEndServiceNAK:(SDLProtocolMessage *)endServiceNAK {
+ if (endServiceNAK.header.serviceType != SDLServiceTypeVideo) { return; }
+
+ SDLControlFramePayloadNak *nakPayload = [[SDLControlFramePayloadNak alloc] initWithData:endServiceNAK.payload];
+ SDLLogE(@"Request to end video service NAKed on transport %@, with payload: %@", protocol.transport, nakPayload);
+
+ /// Core will NAK the video end service control frame if video is not streaming or if video is streaming but the HMI does not recognize that video is streaming.
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
}
#pragma mark - SDL RPC Notification callbacks
@@ -608,6 +635,13 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
SDLLogD(@"Determined base screen size on display capabilities: %@", NSStringFromCGSize(self.videoScaleManager.displayViewportResolution));
}
+/// Parses out the `hmiLevel` and `videoStreamingState` from an `OnHMIStatus` notification from Core. Since Core only allows video streaming when the `hmiLevel` is `FULL` or `LIMITED`, sending video data when the `hmiLevel` is not `FULL` or `LIMITED` will result in Core forcing an unregistration with a reason of `PROTOCOL_VIOLATION`.
+/// 1. The `hmiLevel` will go to `FULL` when the user opens the SDL app by tapping on the SDL app icon on the HMI or uses a voice command to launch the SDL app.
+/// 2. The `hmiLevel` will go to `LIMITED` when the user backgrounds the SDL app by opening another app or by going back to the home screen.
+/// 3. The `hmiLevel` will go to `NONE` when the user "exits" the app (either through gesture or voice commands). It will also go to `NONE` if video fails to stream and the user presses "cancel" on the HMI popup. In these cases the transport between the phone and accessory will still be open. It will also go to `NONE` when the user disconnects the transport between the phone and accessory. In this case no notification will be recieved since the transport was disconnected.
+/// 4. The `hmiLevel` will go to `BACKGROUND` if the app is in `LIMITED` and another app takes over video streaming capability (i.e. another navigation app's `hmiLevel` changes to `FULL`).
+///
+/// @param notification The `OnHMIStatus` notification
- (void)sdl_hmiStatusDidChange:(SDLRPCNotificationNotification *)notification {
NSAssert([notification.notification isKindOfClass:[SDLOnHMIStatus class]], @"A notification was sent with an unanticipated object");
if (![notification.notification isKindOfClass:[SDLOnHMIStatus class]]) {
@@ -618,6 +652,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
if (hmiStatus.windowID != nil && hmiStatus.windowID.integerValue != SDLPredefinedWindowsDefaultWindow) {
return;
}
+
self.hmiLevel = hmiStatus.hmiLevel;
SDLVideoStreamingState newState = hmiStatus.videoStreamingState ?: SDLVideoStreamingStateStreamable;
@@ -627,7 +662,10 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
}
// if startWithProtocol has not been called yet, abort here
- if (!self.protocol) { return; }
+ if (self.protocol == nil) {
+ SDLLogW(@"No session established with head unit. HMI status is not relevant.");
+ return;
+ }
if (self.isHmiStateVideoStreamCapable) {
[self sdl_startVideoSession];
@@ -656,8 +694,8 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)sdl_startVideoSession {
SDLLogV(@"Attempting to start video session");
- if (!self.protocol) {
- SDLLogV(@"Video manager is not yet started");
+ if (self.protocol == nil) {
+ SDLLogW(@"No transport established with head unit. Video start service request will not be sent.");
return;
}
@@ -684,22 +722,14 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
- (void)sdl_stopVideoSession {
SDLLogV(@"Attempting to stop video session");
if (!self.isStreamingSupported) {
+ SDLLogW(@"Head unit does not support video streaming. Will not send an end video service request");
return;
}
-
if (self.isVideoConnected || self.isVideoSuspended) {
[self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateShuttingDown];
- }
-}
-
-- (void)sdl_transitionToStoppedState:(SDLServiceType)serviceType {
- switch (serviceType) {
- case SDLServiceTypeVideo:
- [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
- break;
- default:
- break;
+ } else {
+ SDLLogW(@"No video is currently streaming. Will not send an end video service request.");
}
}
@@ -776,7 +806,7 @@ typedef void(^SDLVideoCapabilityResponseHandler)(SDLVideoStreamingCapability *_N
if (self.preferredFormatIndex >= self.preferredFormats.count
|| self.preferredResolutionIndex >= self.preferredResolutions.count) {
SDLLogE(@"No preferred format or no preferred resolution found that works: format index %lu, resolution index %lu", (unsigned long)self.preferredFormatIndex, (unsigned long)self.preferredResolutionIndex);
- [self sdl_transitionToStoppedState:SDLServiceTypeVideo];
+ [self.videoStreamStateMachine transitionToState:SDLVideoStreamManagerStateStopped];
return;
}
diff --git a/SmartDeviceLink/SDLSubscribeButtonManager.h b/SmartDeviceLink/SDLSubscribeButtonManager.h
new file mode 100644
index 000000000..c73d3d83b
--- /dev/null
+++ b/SmartDeviceLink/SDLSubscribeButtonManager.h
@@ -0,0 +1,75 @@
+//
+// SDLSubscribeButtonManager.h
+// SmartDeviceLink
+//
+// Created by Nicole on 5/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLButtonName.h"
+#import "SDLConnectionManagerType.h"
+#import "SDLNotificationConstants.h"
+
+@class SDLSystemCapabilityManager;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A handler run when the subscribe button has been selected.
+/// @param buttonPress Indicates whether this is a long or short button press event
+/// @param buttonEvent Indicates whether the button has been depressed or released
+/// @param error The error, if one occurred, during the subscription
+typedef void (^SDLSubscribeButtonUpdateHandler)(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error);
+
+/// The handler run when the update has completed.
+/// @param error An error if the update failed
+typedef void(^SDLSubscribeButtonUpdateCompletionHandler)(NSError *__nullable error);
+
+/// Manager for handling subscriptions to hard buttons.
+@interface SDLSubscribeButtonManager : NSObject
+
+/// Initialize the manager with required dependencies.
+/// @param connectionManager The connection manager object for sending RPCs
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager;
+
+/// Starts the manager. This method is used internally.
+- (void)start;
+
+/// Stops the manager. This method is used internally.
+- (void)stop;
+
+/// Subscribes to a subscribe button. The update handler will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the `error` parameter of the updateHandler.
+/// @param buttonName The name of the hard button to subscribe to
+/// @param updateHandler The block run when the subscribe button is selected
+/// @return An object that can be used to unsubscribe the block using `unsubscribeButtonWithObserver:withCompletionHandler:`.
+- (id<NSObject>)subscribeButton:(SDLButtonName)buttonName withUpdateHandler:(nullable SDLSubscribeButtonUpdateHandler)updateHandler;
+
+/// Subscribes to a subscribe button. The selector will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the `error` parameter of the selector.
+///
+/// The selector supports the following parameters:
+///
+/// 1. A selector with no parameters. The observer will be notified when a button press occurs (it will not know if a short or long press has occurred).
+///
+/// 2. A selector with one parameter, (SDLButtonName). The observer will be notified when a button press occurs (it will not know if a short or long press has occurred).
+///
+/// 3. A selector with two parameters, (SDLButtonName, NSError). The observer will be notified when a button press occurs (it will not know if a short or long press has occurred).
+///
+/// 4. A selector with three parameters, (SDLButtonName, NSError, SDLOnButtonPress). The observer will be notified when a long or short button press occurs, but not a button event.
+///
+/// 5. A selector with four parameters, (SDLButtonName, NSError, SDLOnButtonPress, SDLOnButtonEvent). The observer will be notified when any button press or any button event occurs.
+///
+/// To unsubscribe to the hard button, please call `unsubscribeButton:withObserver:withCompletionHandler:`.
+///
+/// @param buttonName The name of the hard button to subscribe to
+/// @param observer The object that will have `selector` called whenever the button has been selected
+/// @param selector The selector on `observer` that will be called whenever the button has been selected
+- (void)subscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer selector:(SEL)selector;
+
+/// Unsubscribes to a subscribe button. Please note that if a subscribe button has multiple subscribers the observer will no longer get notifications, however, the app will still be subscribed to the hard button until the last subscriber is removed.
+/// @param buttonName The name of the hard button to subscribe to
+/// @param observer The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed
+/// @param completionHandler A handler called when the observer has been unsubscribed to the hard button
+- (void)unsubscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer withCompletionHandler:(nullable SDLSubscribeButtonUpdateCompletionHandler)completionHandler;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeButtonManager.m b/SmartDeviceLink/SDLSubscribeButtonManager.m
new file mode 100644
index 000000000..f311291c5
--- /dev/null
+++ b/SmartDeviceLink/SDLSubscribeButtonManager.m
@@ -0,0 +1,298 @@
+//
+// SDLSDLSubscribeButtonManager.m
+// SmartDeviceLink
+//
+// Created by Nicole on 5/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLSubscribeButtonManager.h"
+
+#import "SDLError.h"
+#import "SDLGlobals.h"
+#import "SDLHMIPermissions.h"
+#import "SDLLogMacros.h"
+#import "SDLOnButtonPress.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLOnPermissionsChange.h"
+#import "SDLPermissionItem.h"
+#import "SDLPredefinedWindows.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSubscribeButton.h"
+#import "SDLSubscribeButtonObserver.h"
+#import "SDLUnsubscribeButton.h"
+#import "SDLUnsubscribeButtonResponse.h"
+#import "SDLOnButtonEvent.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLSubscribeButtonManager()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (strong, nonatomic) NSMutableDictionary<SDLButtonName, NSMutableArray<SDLSubscribeButtonObserver *> *> *subscribeButtonObservers;
+@property (copy, nonatomic) dispatch_queue_t readWriteQueue;
+
+@end
+
+@implementation SDLSubscribeButtonManager
+
+#pragma mark - Lifecycle
+
+- (instancetype)initWithConnectionManager:(id<SDLConnectionManagerType>)connectionManager {
+ self = [super init];
+ if (!self) { return nil; }
+
+ if (@available(iOS 10.0, *)) {
+ _readWriteQueue = dispatch_queue_create_with_target("com.sdl.subscribeButtonManager.readWriteQueue", DISPATCH_QUEUE_SERIAL, [SDLGlobals sharedGlobals].sdlProcessingQueue);
+ } else {
+ _readWriteQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue;
+ }
+
+ _connectionManager = connectionManager;
+ _subscribeButtonObservers = [NSMutableDictionary dictionary];
+
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_handleButtonEvent:) name:SDLDidReceiveButtonEventNotification object:nil];
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sdl_handleButtonPress:) name:SDLDidReceiveButtonPressNotification object:nil];
+
+ return self;
+}
+
+- (void)start { }
+
+- (void)stop {
+ __weak typeof(self) weakSelf = self;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ __strong typeof(weakSelf) strongself = weakSelf;
+ [strongself->_subscribeButtonObservers removeAllObjects];
+ }];
+}
+
+#pragma mark - Subscribe
+
+- (id<NSObject>)subscribeButton:(SDLButtonName)buttonName withUpdateHandler:(nullable SDLSubscribeButtonUpdateHandler)updateHandler {
+ SDLLogD(@"Subscribing to subscribe button with name: %@, with block", buttonName);
+
+ NSObject *observer = [[NSObject alloc] init];
+ SDLSubscribeButtonObserver *observerObject = [[SDLSubscribeButtonObserver alloc] initWithObserver:observer updateHandler:updateHandler];
+
+ if (self.subscribeButtonObservers[buttonName].count > 0) {
+ // The app has already subscribed to the button, simply add the observer to the list of observers for the button name.
+ [self sdl_addSubscribedObserver:observerObject forButtonName:buttonName];
+ } else {
+ // The app has not yet subscribed to the button, send the `SubscribeButton` request for the button name.
+ [self sdl_subscribeToButtonNamed:buttonName withObserverObject:observerObject];
+ }
+
+ return observer;
+}
+
+- (void)subscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer selector:(SEL)selector; {
+ SDLLogD(@"Subscribing to subscribe button with name: %@, observer object: %@, selector: %@", buttonName, observer, NSStringFromSelector(selector));
+
+ NSUInteger numberOfParametersInSelector = [NSStringFromSelector(selector) componentsSeparatedByString:@":"].count - 1;
+ if (numberOfParametersInSelector > 4) {
+ SDLLogE(@"Attempted to subscribe to a subscribe button using a selector that contains more than 4 parameters");
+ return;
+ }
+
+ if (observer == nil) {
+ SDLLogE(@"Attempted to subscribe to subscribe button with name %@ with a selector on a *nil* observer, which will always fail", buttonName);
+ return;
+ }
+
+ SDLSubscribeButtonObserver *observerObject = [[SDLSubscribeButtonObserver alloc] initWithObserver:observer selector:selector];
+ if (self.subscribeButtonObservers[buttonName].count > 0) {
+ [self sdl_addSubscribedObserver:observerObject forButtonName:buttonName];
+ return;
+ }
+
+ [self sdl_subscribeToButtonNamed:buttonName withObserverObject:observerObject];
+}
+
+/// Helper method for checking if the observer is currently subscribed to the button
+/// @param observer The observer
+/// @param buttonName The name of the button
+/// @return True if the observer is currently subscribed to the button; false if not
+- (BOOL)sdl_isSubscribedObserver:(id<NSObject>)observer forButtonName:(SDLButtonName)buttonName {
+ BOOL isSubscribedObserver = NO;
+ for (SDLSubscribeButtonObserver *subscribedObserver in self.subscribeButtonObservers[buttonName]) {
+ if (subscribedObserver.observer != observer ) { continue; }
+ isSubscribedObserver = YES;
+ break;
+ }
+
+ return isSubscribedObserver;
+}
+
+/// Helper method for adding an observer for the button
+/// @param subscribedObserver The observer
+/// @param buttonName The name of the button
+- (void)sdl_addSubscribedObserver:(SDLSubscribeButtonObserver *)subscribedObserver forButtonName:(SDLButtonName)buttonName {
+ __weak typeof(self) weakSelf = self;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (strongSelf.subscribeButtonObservers[buttonName] == nil) {
+ SDLLogV(@"Adding first subscriber for button: %@", buttonName);
+ strongSelf.subscribeButtonObservers[buttonName] = [NSMutableArray arrayWithObject:subscribedObserver];
+ } else {
+ SDLLogV(@"Adding another subscriber for button: %@", buttonName);
+ [strongSelf.subscribeButtonObservers[buttonName] addObject:subscribedObserver];
+ }
+ }];
+}
+
+#pragma mark Send Subscribe Request
+
+/// Helper method for sending a `SubscribeButton` request and notifying subscribers of button events.
+/// @param buttonName The name of the subscribe button
+/// @param observerObject The observer object
+- (void)sdl_subscribeToButtonNamed:(SDLButtonName)buttonName withObserverObject:(SDLSubscribeButtonObserver *)observerObject {
+ SDLSubscribeButton *subscribeButton = [[SDLSubscribeButton alloc] initWithButtonName:buttonName handler:nil];
+ __weak typeof(self) weakSelf = self;
+
+ [self.connectionManager sendConnectionRequest:subscribeButton withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ // Check if the request was successful. If a subscription request got sent for a button that is already subscribed then the module will respond with `IGNORED` so just act as if subscription succeeded.
+ if (!response.success.boolValue && ![response.resultCode isEqualToEnum:SDLResultIgnored]) {
+ [strongSelf sdl_invokeObserver:observerObject withButtonName:buttonName buttonPress:nil buttonEvent:nil error:error];
+ return;
+ }
+
+ [strongSelf sdl_addSubscribedObserver:observerObject forButtonName:buttonName];
+ }];
+}
+
+#pragma mark - Unsubscribe
+#pragma mark Send Unsubscribe Request
+
+- (void)unsubscribeButton:(SDLButtonName)buttonName withObserver:(id<NSObject>)observer withCompletionHandler:(nullable SDLSubscribeButtonUpdateCompletionHandler)completionHandler {
+ if (self.subscribeButtonObservers[buttonName] == nil || ![self sdl_isSubscribedObserver:observer forButtonName:buttonName]) {
+ SDLLogE(@"Attempting to unsubscribe to the %@ subscribe button which is not currently subscribed", buttonName);
+ return completionHandler([NSError sdl_subscribeButtonManager_notSubscribed]);
+ }
+
+ // If we have more than one observer, just remove this observer
+ if (self.subscribeButtonObservers[buttonName].count > 1) {
+ [self sdl_removeSubscribedObserver:observer forButtonName:buttonName];
+ return completionHandler(nil);
+ }
+
+ // If there's only one observer, unsubscribe from the button
+ SDLUnsubscribeButton *unsubscribeButton = [[SDLUnsubscribeButton alloc] initWithButtonName:buttonName];
+ __weak typeof(self) weakSelf = self;
+ [self.connectionManager sendConnectionRequest:unsubscribeButton withResponseHandler:^(__kindof SDLRPCRequest * _Nullable request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) {
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ if (!response.success.boolValue) {
+ SDLLogE(@"Attempt to unsubscribe from subscribe button %@ failed", buttonName);
+ return completionHandler(error);
+ }
+
+ SDLLogD(@"Successfully unsubscribed from subscribe button named %@", buttonName);
+ [strongSelf sdl_removeSubscribedObserver:observer forButtonName:buttonName];
+ return completionHandler(error);
+ }];
+}
+
+/// Helper method for removing an observer for the button
+/// @param observer The observer
+/// @param buttonName The name of the button
+- (void)sdl_removeSubscribedObserver:(id<NSObject>)observer forButtonName:(SDLButtonName)buttonName {
+ __weak typeof(self) weakSelf = self;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
+ for (NSUInteger i = 0; i < strongSelf.subscribeButtonObservers[buttonName].count; i++) {
+ SDLSubscribeButtonObserver *subscribedObserver = (SDLSubscribeButtonObserver *)strongSelf.subscribeButtonObservers[buttonName][i];
+ if (subscribedObserver.observer != observer) { continue; }
+ // Okay to mutate because we will break immediately afterward
+ [strongSelf.subscribeButtonObservers[buttonName] removeObjectAtIndex:i];
+ break;
+ }
+ }];
+}
+
+#pragma mark - Notifications
+
+/// Button event notification from the module
+/// @param notification Information about the button event
+- (void)sdl_handleButtonEvent:(SDLRPCNotificationNotification *)notification {
+ SDLOnButtonEvent *buttonEvent = (SDLOnButtonEvent *)notification.notification;
+ if (buttonEvent == nil) { return; }
+
+ SDLButtonName buttonName = buttonEvent.buttonName;
+ for (SDLSubscribeButtonObserver *subscribeButtonObserver in self.subscribeButtonObservers[buttonName]) {
+ [self sdl_invokeObserver:subscribeButtonObserver withButtonName:buttonName buttonPress:nil buttonEvent:buttonEvent error:nil];
+ }
+}
+
+/// Button press notification from the module
+/// @param notification Information about the button press
+- (void)sdl_handleButtonPress:(SDLRPCNotificationNotification *)notification {
+ SDLOnButtonPress *buttonPress = (SDLOnButtonPress *)notification.notification;
+ if (buttonPress == nil) { return; }
+
+ SDLButtonName buttonName = buttonPress.buttonName;
+ for (SDLSubscribeButtonObserver *subscribeButtonObserver in self.subscribeButtonObservers[buttonName]) {
+ [self sdl_invokeObserver:subscribeButtonObserver withButtonName:buttonName buttonPress:buttonPress buttonEvent:nil error:nil];
+ }
+}
+
+/// Helper method for notifying subscribers of button events.
+/// @param observer The object that will have `selector` called
+/// @param buttonName The name of the subscribe button
+/// @param buttonPress Indicates whether this is a long or short button press event
+/// @param buttonEvent Indicates that the button has been depressed or released
+/// @param error The error, if one occurred; nil if not
+- (void)sdl_invokeObserver:(SDLSubscribeButtonObserver *)observer withButtonName:(SDLButtonName)buttonName buttonPress:(nullable SDLOnButtonPress *)buttonPress buttonEvent:(nullable SDLOnButtonEvent *)buttonEvent error:(nullable NSError *)error {
+ if (observer.updateBlock != nil) {
+ observer.updateBlock(buttonPress, buttonEvent, error);
+ } else {
+ if (![observer.observer respondsToSelector:observer.selector]) {
+ @throw [NSException sdl_invalidSubscribeButtonSelectorExceptionWithSelector:observer.selector];
+ }
+
+ NSUInteger numberOfParametersInSelector = [NSStringFromSelector(observer.selector) componentsSeparatedByString:@":"].count - 1;
+
+ // If a selector has 0, 1, 2, or 3 parameters and only a button event has occured, do not notify the observer of the button event.
+ if (buttonEvent != nil && numberOfParametersInSelector <= 3) {
+ return;
+ }
+
+ NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[(NSObject *)observer.observer methodSignatureForSelector:observer.selector]];
+ [invocation setSelector:observer.selector];
+ [invocation setTarget:observer.observer];
+
+ if (numberOfParametersInSelector >= 1) {
+ [invocation setArgument:&buttonName atIndex:2];
+ }
+ if (numberOfParametersInSelector >= 2) {
+ [invocation setArgument:&error atIndex:3];
+ }
+ if (numberOfParametersInSelector >= 3) {
+ [invocation setArgument:&buttonPress atIndex:4];
+ }
+ if (numberOfParametersInSelector >= 4) {
+ [invocation setArgument:&buttonEvent atIndex:5];
+ }
+ if (numberOfParametersInSelector >= 5) {
+ @throw [NSException sdl_invalidSubscribeButtonSelectorExceptionWithSelector:observer.selector];
+ }
+
+ [invocation invoke];
+ }
+}
+
+#pragma mark - Getters
+
+- (NSMutableDictionary<SDLButtonName, NSMutableArray<SDLSubscribeButtonObserver *> *> *)subscribeButtonObservers {
+ __block NSMutableDictionary<SDLButtonName, NSMutableArray<SDLSubscribeButtonObserver *> *> *dict = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ dict = self->_subscribeButtonObservers;
+ }];
+
+ return dict;
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeButtonObserver.h b/SmartDeviceLink/SDLSubscribeButtonObserver.h
new file mode 100644
index 000000000..49e783f97
--- /dev/null
+++ b/SmartDeviceLink/SDLSubscribeButtonObserver.h
@@ -0,0 +1,42 @@
+//
+// SDLSubscribeButtonObserver.h
+// SmartDeviceLink
+//
+// Created by Nicole on 5/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLNotificationConstants.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A handler mirroring the one in SDLSubscribeButtonManager.h for `subscribeButton:withBlock:`
+typedef void (^SDLSubscribeButtonUpdateHandler)(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error);
+
+/// An observer object for SDLSubscribeButtonManager
+@interface SDLSubscribeButtonObserver : NSObject
+
+/// The object that will be used to call the selector if available, and to unsubscribe this observer
+@property (weak, nonatomic) id<NSObject> observer;
+
+/// A selector called when the observer is triggered
+@property (assign, nonatomic) SEL selector;
+
+/// A block called when the observer is triggered
+@property (copy, nonatomic) SDLSubscribeButtonUpdateHandler updateBlock;
+
+/// Create an observer using an object and a selector on that object
+/// @param observer The object to be called when the subscription triggers
+/// @param selector The selector to be called when the subscription triggers
+/// @return The observer
+- (instancetype)initWithObserver:(id<NSObject>)observer selector:(SEL)selector;
+
+/// Create an observer using an object and a callback block
+/// @param observer The object that can be used to unsubscribe the block
+/// @param block The block that will be called when the subscription triggers
+/// @return The observer
+- (instancetype)initWithObserver:(id<NSObject>)observer updateHandler:(SDLSubscribeButtonUpdateHandler)block;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeButtonObserver.m b/SmartDeviceLink/SDLSubscribeButtonObserver.m
new file mode 100644
index 000000000..9c9b72f68
--- /dev/null
+++ b/SmartDeviceLink/SDLSubscribeButtonObserver.m
@@ -0,0 +1,45 @@
+//
+// SDLSubscribeButtonObserver.m
+// SmartDeviceLink
+//
+// Created by Nicole on 5/21/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLSubscribeButtonObserver.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLSubscribeButtonObserver
+
+- (instancetype)initWithObserver:(id<NSObject>)observer selector:(SEL)selector {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _observer = observer;
+ _selector = selector;
+
+ return self;
+}
+
+- (instancetype)initWithObserver:(id<NSObject>)observer updateHandler:(SDLSubscribeButtonUpdateHandler)block {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _observer = observer;
+ _updateBlock = block;
+
+ return self;
+}
+
+- (NSString *)description {
+ if (self.selector) {
+ return [NSString stringWithFormat:@"Observer: %@[%@] - %@", [_observer class], _observer, NSStringFromSelector(_selector)];
+ } else {
+ return [NSString stringWithFormat:@"Block Observer: %@", _observer];
+ }
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeVehicleData.h b/SmartDeviceLink/SDLSubscribeVehicleData.h
index d0e6d4629..e81ed7f2f 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleData.h
+++ b/SmartDeviceLink/SDLSubscribeVehicleData.h
@@ -48,7 +48,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Subscribe to wiperStatus
* @return A SDLSubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for subscribing to all possible vehicle data items.
@@ -83,7 +83,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Subscribe to wiperStatus
* @return A SDLSubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for subscribing to all possible vehicle data items.
@@ -119,7 +119,42 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Subscribe to wiperStatus
* @return A SDLSubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus;
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
+
+/**
+ * Convenience init for subscribing to all possible vehicle data items.
+ *
+ * @param gps - gps
+ * @param speed - speed
+ * @param rpm - rpm
+ * @param instantFuelConsumption - instantFuelConsumption
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - externalTemperature
+ * @param turnSignal - turnSignal
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - engineTorque
+ * @param accPedalPosition - accPedalPosition
+ * @param steeringWheelAngle - steeringWheelAngle
+ * @param engineOilLife - engineOilLife
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModeStatus - clusterModeStatus
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLSubscribeVehicleData object
+ */
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering;
/**
* A boolean value. If true, subscribes GPS data.
@@ -139,12 +174,12 @@ NS_ASSUME_NONNULL_BEGIN
/**
* A boolean value. If true, subscribes Fuel Level data.
*/
-@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* A boolean value. If true, subscribes Fuel Level State data.
*/
-@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* A boolean value. If true, subscribes Fuel Range data.
@@ -202,6 +237,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *wiperStatus;
/**
+ * To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *handsOffSteering;
+
+/**
* A boolean value. If true, subscribes Head Lamp Status data.
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *headLampStatus;
@@ -268,7 +308,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@param vehicleDataState A boolean value. If true, requests the OEM custom vehicle data item.
@@ -278,7 +318,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@return The state of an OEM custom vehicle data item for the given vehicle data name.
diff --git a/SmartDeviceLink/SDLSubscribeVehicleData.m b/SmartDeviceLink/SDLSubscribeVehicleData.m
index a5bd22070..5ab5f9a1d 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleData.m
+++ b/SmartDeviceLink/SDLSubscribeVehicleData.m
@@ -15,56 +15,86 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameSubscribeVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameSubscribeVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(NO) externalTemperature:@(externalTemperature) turnSignal:@(NO) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(NO) electronicParkBrakeStatus:@(NO) cloudAppVehicleID:@(NO) eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+
+ return self;
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation cloudAppVehicleID:NO clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:electronicParkBrakeStatus emergencyEvent:emergencyEvent engineOilLife:engineOilLife engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:fuelRange gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:turnSignal wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:nil eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+
+ return self;
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:@(cloudAppVehicleID) eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+
+ return self;
+}
+
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
self = [self init];
if (!self) {
return nil;
}
-
- self.accPedalPosition = @(accelerationPedalPosition);
- self.airbagStatus = @(airbagStatus);
- self.beltStatus = @(beltStatus);
- self.bodyInformation = @(bodyInformation);
- self.cloudAppVehicleID = @(cloudAppVehicleID);
- self.clusterModeStatus = @(clusterModeStatus);
- self.deviceStatus = @(deviceStatus);
- self.driverBraking = @(driverBraking);
- self.eCallInfo = @(eCallInfo);
- self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
- self.emergencyEvent = @(emergencyEvent);
- self.engineOilLife = @(engineOilLife);
- self.engineTorque = @(engineTorque);
- self.externalTemperature = @(externalTemperature);
- self.fuelLevel = @(fuelLevel);
- self.fuelLevel_State = @(fuelLevelState);
- self.fuelRange = @(fuelRange);
- self.myKey = @(myKey);
- self.odometer = @(odometer);
- self.gps = @(gps);
- self.headLampStatus = @(headLampStatus);
- self.instantFuelConsumption = @(instantFuelConsumption);
- self.prndl = @(prndl);
- self.rpm = @(rpm);
- self.speed = @(speed);
- self.steeringWheelAngle = @(steeringWheelAngle);
- self.tirePressure = @(tirePressure);
- self.turnSignal = @(turnSignal);
- self.wiperStatus = @(wiperStatus);
-
+ self.gps = gps;
+ self.speed = speed;
+ self.rpm = rpm;
+ self.instantFuelConsumption = instantFuelConsumption;
+ self.fuelRange = fuelRange;
+ self.externalTemperature = externalTemperature;
+ self.turnSignal = turnSignal;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = engineTorque;
+ self.accPedalPosition = accPedalPosition;
+ self.steeringWheelAngle = steeringWheelAngle;
+ self.engineOilLife = engineOilLife;
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModeStatus = clusterModeStatus;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
return self;
}
@@ -308,6 +338,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:NSNumber.class error:nil];
}
+- (void)setHandsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable NSNumber<SDLBool> *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:NSNumber.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
index 3f4386499..702ca901f 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.h
@@ -17,6 +17,41 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLSubscribeVehicleDataResponse : SDLRPCResponse
/**
+ * Convenience init for setting all data on vehicle data items.
+ *
+ * @param gps - gps
+ * @param speed - speed
+ * @param rpm - rpm
+ * @param instantFuelConsumption - instantFuelConsumption
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - externalTemperature
+ * @param turnSignal - turnSignal
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - engineTorque
+ * @param accPedalPosition - accPedalPosition
+ * @param steeringWheelAngle - steeringWheelAngle
+ * @param engineOilLife - engineOilLife
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModes - clusterModes
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLSubscribeVehicleDataResponse object
+ */
+- (instancetype)initWithGps:(nullable SDLVehicleDataResult *)gps speed:(nullable SDLVehicleDataResult *)speed rpm:(nullable SDLVehicleDataResult *)rpm instantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption fuelRange:(nullable SDLVehicleDataResult *)fuelRange externalTemperature:(nullable SDLVehicleDataResult *)externalTemperature turnSignal:(nullable SDLVehicleDataResult *)turnSignal prndl:(nullable SDLVehicleDataResult *)prndl tirePressure:(nullable SDLVehicleDataResult *)tirePressure odometer:(nullable SDLVehicleDataResult *)odometer beltStatus:(nullable SDLVehicleDataResult *)beltStatus bodyInformation:(nullable SDLVehicleDataResult *)bodyInformation deviceStatus:(nullable SDLVehicleDataResult *)deviceStatus driverBraking:(nullable SDLVehicleDataResult *)driverBraking wiperStatus:(nullable SDLVehicleDataResult *)wiperStatus headLampStatus:(nullable SDLVehicleDataResult *)headLampStatus engineTorque:(nullable SDLVehicleDataResult *)engineTorque accPedalPosition:(nullable SDLVehicleDataResult *)accPedalPosition steeringWheelAngle:(nullable SDLVehicleDataResult *)steeringWheelAngle engineOilLife:(nullable SDLVehicleDataResult *)engineOilLife electronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus cloudAppVehicleID:(nullable SDLVehicleDataResult *)cloudAppVehicleID eCallInfo:(nullable SDLVehicleDataResult *)eCallInfo airbagStatus:(nullable SDLVehicleDataResult *)airbagStatus emergencyEvent:(nullable SDLVehicleDataResult *)emergencyEvent clusterModes:(nullable SDLVehicleDataResult *)clusterModes myKey:(nullable SDLVehicleDataResult *)myKey handsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering;
+
+/**
The result of requesting to subscribe to the GPSData.
Optional
@@ -42,14 +77,14 @@ NS_ASSUME_NONNULL_BEGIN
Optional
*/
-@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel;
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
The result of requesting to subscribe to the fuel level state.
Optional
*/
-@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State;
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
The result of requesting to subscribe to the fuel range.
@@ -129,6 +164,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) SDLVehicleDataResult *wiperStatus;
/**
+ To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *handsOffSteering;
+
+/**
The result of requesting to subscribe to the status of the head lamps.
Optional
@@ -221,7 +261,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@param vehicleDataState SDLVehicleDataResult object containing custom data type and result code information.
diff --git a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
index 7ab6b4e63..d57a45146 100644
--- a/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLSubscribeVehicleDataResponse.m
@@ -16,12 +16,50 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameSubscribeVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameSubscribeVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
+- (instancetype)initWithGps:(nullable SDLVehicleDataResult *)gps speed:(nullable SDLVehicleDataResult *)speed rpm:(nullable SDLVehicleDataResult *)rpm instantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption fuelRange:(nullable SDLVehicleDataResult *)fuelRange externalTemperature:(nullable SDLVehicleDataResult *)externalTemperature turnSignal:(nullable SDLVehicleDataResult *)turnSignal prndl:(nullable SDLVehicleDataResult *)prndl tirePressure:(nullable SDLVehicleDataResult *)tirePressure odometer:(nullable SDLVehicleDataResult *)odometer beltStatus:(nullable SDLVehicleDataResult *)beltStatus bodyInformation:(nullable SDLVehicleDataResult *)bodyInformation deviceStatus:(nullable SDLVehicleDataResult *)deviceStatus driverBraking:(nullable SDLVehicleDataResult *)driverBraking wiperStatus:(nullable SDLVehicleDataResult *)wiperStatus headLampStatus:(nullable SDLVehicleDataResult *)headLampStatus engineTorque:(nullable SDLVehicleDataResult *)engineTorque accPedalPosition:(nullable SDLVehicleDataResult *)accPedalPosition steeringWheelAngle:(nullable SDLVehicleDataResult *)steeringWheelAngle engineOilLife:(nullable SDLVehicleDataResult *)engineOilLife electronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus cloudAppVehicleID:(nullable SDLVehicleDataResult *)cloudAppVehicleID eCallInfo:(nullable SDLVehicleDataResult *)eCallInfo airbagStatus:(nullable SDLVehicleDataResult *)airbagStatus emergencyEvent:(nullable SDLVehicleDataResult *)emergencyEvent clusterModes:(nullable SDLVehicleDataResult *)clusterModes myKey:(nullable SDLVehicleDataResult *)myKey handsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.gps = gps;
+ self.speed = speed;
+ self.rpm = rpm;
+ self.instantFuelConsumption = instantFuelConsumption;
+ self.fuelRange = fuelRange;
+ self.externalTemperature = externalTemperature;
+ self.turnSignal = turnSignal;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = engineTorque;
+ self.accPedalPosition = accPedalPosition;
+ self.steeringWheelAngle = steeringWheelAngle;
+ self.engineOilLife = engineOilLife;
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModes = clusterModes;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
+ return self;
+}
+
- (void)setGps:(nullable SDLVehicleDataResult *)gps {
[self.parameters sdl_setObject:gps forName:SDLRPCParameterNameGPS];
}
@@ -262,6 +300,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:SDLVehicleDataResult.class error:nil];
}
+- (void)setHandsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable SDLVehicleDataResult *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:SDLVehicleDataResult.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSyncPData.h b/SmartDeviceLink/SDLSyncPData.h
index 6dbad57e0..a72ad2cc9 100644
--- a/SmartDeviceLink/SDLSyncPData.h
+++ b/SmartDeviceLink/SDLSyncPData.h
@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
*
* *** DEPRECATED ***
*/
+__deprecated
@interface SDLSyncPData : SDLRPCRequest
@end
diff --git a/SmartDeviceLink/SDLSyncPData.m b/SmartDeviceLink/SDLSyncPData.m
index bd3453b95..46bd04427 100644
--- a/SmartDeviceLink/SDLSyncPData.m
+++ b/SmartDeviceLink/SDLSyncPData.m
@@ -10,7 +10,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLSyncPData
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLSyncPDataResponse.h b/SmartDeviceLink/SDLSyncPDataResponse.h
index 43b228a15..e99452915 100644
--- a/SmartDeviceLink/SDLSyncPDataResponse.h
+++ b/SmartDeviceLink/SDLSyncPDataResponse.h
@@ -11,6 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
DEPRECATED
*/
+__deprecated
@interface SDLSyncPDataResponse : SDLRPCResponse
@end
diff --git a/SmartDeviceLink/SDLSyncPDataResponse.m b/SmartDeviceLink/SDLSyncPDataResponse.m
index 64341aa58..315af6b7c 100644
--- a/SmartDeviceLink/SDLSyncPDataResponse.m
+++ b/SmartDeviceLink/SDLSyncPDataResponse.m
@@ -10,7 +10,10 @@
NS_ASSUME_NONNULL_BEGIN
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
@implementation SDLSyncPDataResponse
+#pragma clang diagnostic pop
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
diff --git a/SmartDeviceLink/SDLSystemCapability.h b/SmartDeviceLink/SDLSystemCapability.h
index f0ac7b2d8..d41136c2f 100755
--- a/SmartDeviceLink/SDLSystemCapability.h
+++ b/SmartDeviceLink/SDLSystemCapability.h
@@ -1,21 +1,46 @@
-//
-// SDLSystemCapability.h
-// SmartDeviceLink-iOS
-//
-// Created by Joel Fischer on 7/10/17.
-// Copyright © 2017 smartdevicelink. All rights reserved.
-//
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLRPCStruct.h"
#import "SDLSystemCapabilityType.h"
@class SDLAppServicesCapabilities;
-@class SDLPhoneCapability;
+@class SDLDisplayCapability;
+@class SDLDriverDistractionCapability;
@class SDLNavigationCapability;
-@class SDLVideoStreamingCapability;
+@class SDLPhoneCapability;
@class SDLRemoteControlCapabilities;
@class SDLSeatLocationCapability;
-@class SDLDisplayCapability;
+@class SDLVideoStreamingCapability;
NS_ASSUME_NONNULL_BEGIN
@@ -82,6 +107,11 @@ NS_ASSUME_NONNULL_BEGIN
*/
- (instancetype)initWithSeatLocationCapability:(SDLSeatLocationCapability *)capability;
+/// Convenience init for a Driver Distraction capability
+/// @param capability Describes capabilities when the driver is distracted
+/// @return A SDLSystemCapability object
+- (instancetype)initWithDriverDistractionCapability:(SDLDriverDistractionCapability *)capability;
+
/**
* Used as a descriptor of what data to expect in this struct. The corresponding param to this enum should be included and the only other parameter included.
*/
@@ -138,6 +168,13 @@ NS_ASSUME_NONNULL_BEGIN
*/
@property (nullable, strong, nonatomic) NSArray<SDLDisplayCapability *> *displayCapabilities;
+/**
+ * Describes capabilities when the driver is distracted
+ *
+ * @since SDL 7.0.0
+ */
+@property (nullable, strong, nonatomic) SDLDriverDistractionCapability *driverDistractionCapability;
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSystemCapability.m b/SmartDeviceLink/SDLSystemCapability.m
index 3936e463b..8cfe47dbe 100755
--- a/SmartDeviceLink/SDLSystemCapability.m
+++ b/SmartDeviceLink/SDLSystemCapability.m
@@ -1,23 +1,48 @@
-//
-// SDLSystemCapability.m
-// SmartDeviceLink-iOS
-//
-// Created by Joel Fischer on 7/10/17.
-// Copyright © 2017 smartdevicelink. All rights reserved.
-//
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLSystemCapability.h"
#import "NSMutableDictionary+Store.h"
#import "SDLAppServicesCapabilities.h"
-#import "SDLRPCParameterNames.h"
+#import "SDLDisplayCapability.h"
+#import "SDLDriverDistractionCapability.h"
#import "SDLNavigationCapability.h"
#import "SDLPhoneCapability.h"
-#import "SDLSystemCapabilityType.h"
-#import "SDLVideoStreamingCapability.h"
#import "SDLRemoteControlCapabilities.h"
+#import "SDLRPCParameterNames.h"
#import "SDLSeatLocationCapability.h"
-#import "SDLDisplayCapability.h"
+#import "SDLSystemCapabilityType.h"
+#import "SDLVideoStreamingCapability.h"
NS_ASSUME_NONNULL_BEGIN
@@ -107,6 +132,18 @@ NS_ASSUME_NONNULL_BEGIN
return self;
}
+- (instancetype)initWithDriverDistractionCapability:(SDLDriverDistractionCapability *)capability {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+
+ self.systemCapabilityType = SDLSystemCapabilityTypeDriverDistraction;
+ self.driverDistractionCapability = capability;
+
+ return self;
+}
+
- (void)setSystemCapabilityType:(SDLSystemCapabilityType)type {
[self.store sdl_setObject:type forName:SDLRPCParameterNameSystemCapabilityType];
}
@@ -172,6 +209,14 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectsForName:SDLRPCParameterNameDisplayCapabilities ofClass:SDLDisplayCapability.class error:nil];
}
+- (void)setDriverDistractionCapability:(nullable SDLDriverDistractionCapability *)driverDistractionCapability {
+ [self.store sdl_setObject:driverDistractionCapability forName:SDLRPCParameterNameDriverDistractionCapability];
+}
+
+- (nullable SDLDriverDistractionCapability *)driverDistractionCapability {
+ return [self.store sdl_objectForName:SDLRPCParameterNameDriverDistractionCapability ofClass:SDLDriverDistractionCapability.class error:nil];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSystemCapabilityManager.h b/SmartDeviceLink/SDLSystemCapabilityManager.h
index ca1c35792..bbedc4c66 100644
--- a/SmartDeviceLink/SDLSystemCapabilityManager.h
+++ b/SmartDeviceLink/SDLSystemCapabilityManager.h
@@ -19,6 +19,7 @@
@class SDLButtonCapabilities;
@class SDLDisplayCapability;
@class SDLDisplayCapabilities;
+@class SDLDriverDistractionCapability;
@class SDLHMICapabilities;
@class SDLNavigationCapability;
@class SDLPhoneCapability;
@@ -156,58 +157,36 @@ typedef void (^SDLCapabilityUpdateWithErrorHandler)(SDLSystemCapability * _Nulla
/**
* If returned, the platform supports app services
- *
- * @see SDLAppServicesCapabilities
- *
- * Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLAppServicesCapabilities *appServicesCapabilities;
/**
If returned, the platform supports navigation
-
- @see SDLNavigationCapability
-
- Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLNavigationCapability *navigationCapability;
/**
If returned, the platform supports making phone calls
-
- @see SDLPhoneCapability
-
- Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLPhoneCapability *phoneCapability;
/**
If returned, the platform supports video streaming
-
- @see SDLVideoStreamingCapability
-
- Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLVideoStreamingCapability *videoStreamingCapability;
/**
If returned, the platform supports remote control capabilities
-
- @see SDLRemoteControlCapabilities
-
- Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLRemoteControlCapabilities *remoteControlCapability;
/**
If returned, the platform supports remote control capabilities for seats
-
- @see SDLSeatLocationCapability
-
- Optional
*/
@property (nullable, strong, nonatomic, readonly) SDLSeatLocationCapability *seatLocationCapability;
+/// If returned, the platform supports driver distraction capabilities
+@property (nullable, strong, nonatomic, readonly) SDLDriverDistractionCapability *driverDistractionCapability;
/**
* Returns the window capability object of the default main window which is always pre-created by the connected system. This is a convenience method for easily accessing the capabilities of the default main window.
diff --git a/SmartDeviceLink/SDLSystemCapabilityManager.m b/SmartDeviceLink/SDLSystemCapabilityManager.m
index ea1dee9b5..8c979a18e 100644
--- a/SmartDeviceLink/SDLSystemCapabilityManager.m
+++ b/SmartDeviceLink/SDLSystemCapabilityManager.m
@@ -14,12 +14,14 @@
#import "SDLConnectionManagerType.h"
#import "SDLDisplayCapabilities.h"
#import "SDLDisplayCapability.h"
+#import "SDLDriverDistractionCapability.h"
#import "SDLError.h"
#import "SDLGenericResponse.h"
#import "SDLGetSystemCapability.h"
#import "SDLGetSystemCapabilityResponse.h"
#import "SDLGlobals.h"
#import "SDLHMICapabilities.h"
+#import "SDLImageField+ScreenManagerExtensions.h"
#import "SDLLogMacros.h"
#import "SDLNavigationCapability.h"
#import "SDLNotificationConstants.h"
@@ -35,6 +37,8 @@
#import "SDLSetDisplayLayoutResponse.h"
#import "SDLSystemCapability.h"
#import "SDLSystemCapabilityObserver.h"
+#import "SDLTextField+ScreenManagerExtensions.h"
+#import "SDLTextFieldName.h"
#import "SDLVersion.h"
#import "SDLVideoStreamingCapability.h"
#import "SDLWindowCapability.h"
@@ -65,6 +69,7 @@ typedef NSString * SDLServiceID;
@property (nullable, strong, nonatomic, readwrite) SDLVideoStreamingCapability *videoStreamingCapability;
@property (nullable, strong, nonatomic, readwrite) SDLRemoteControlCapabilities *remoteControlCapability;
@property (nullable, strong, nonatomic, readwrite) SDLSeatLocationCapability *seatLocationCapability;
+@property (nullable, strong, nonatomic, readwrite) SDLDriverDistractionCapability *driverDistractionCapability;
@property (nullable, strong, nonatomic) NSMutableDictionary<SDLServiceID, SDLAppServiceCapability *> *appServicesCapabilitiesDictionary;
@@ -75,6 +80,8 @@ typedef NSString * SDLServiceID;
@property (assign, nonatomic) BOOL shouldConvertDeprecatedDisplayCapabilities;
@property (strong, nonatomic) SDLHMILevel currentHMILevel;
+@property (copy, nonatomic) dispatch_queue_t readWriteQueue;
+
@end
@implementation SDLSystemCapabilityManager
@@ -87,6 +94,12 @@ typedef NSString * SDLServiceID;
return nil;
}
+ if (@available(iOS 10.0, *)) {
+ _readWriteQueue = dispatch_queue_create_with_target("com.sdl.systemCapabilityManager.readWriteQueue", DISPATCH_QUEUE_SERIAL, [SDLGlobals sharedGlobals].sdlProcessingQueue);
+ } else {
+ _readWriteQueue = [SDLGlobals sharedGlobals].sdlProcessingQueue;
+ }
+
_connectionManager = manager;
_shouldConvertDeprecatedDisplayCapabilities = YES;
_appServicesCapabilitiesDictionary = [NSMutableDictionary dictionary];
@@ -96,7 +109,7 @@ typedef NSString * SDLServiceID;
_currentHMILevel = SDLHMILevelNone;
- [self sdl_registerForNotifications];
+ [self sdl_registerForNotifications];
return self;
}
@@ -108,32 +121,35 @@ typedef NSString * SDLServiceID;
*/
- (void)stop {
SDLLogD(@"System Capability manager stopped");
- _displayCapabilities = nil;
- _displays = nil;
- _hmiCapabilities = nil;
- _softButtonCapabilities = nil;
- _buttonCapabilities = nil;
- _presetBankCapabilities = nil;
- _hmiZoneCapabilities = nil;
- _speechCapabilities = nil;
- _prerecordedSpeechCapabilities = nil;
- _vrCapability = NO;
- _audioPassThruCapabilities = nil;
- _pcmStreamCapability = nil;
- _navigationCapability = nil;
- _phoneCapability = nil;
- _videoStreamingCapability = nil;
- _remoteControlCapability = nil;
- _seatLocationCapability = nil;
- _appServicesCapabilitiesDictionary = [NSMutableDictionary dictionary];
-
- _supportsSubscriptions = NO;
- [_capabilityObservers removeAllObjects];
- [_subscriptionStatus removeAllObjects];
-
- _currentHMILevel = SDLHMILevelNone;
-
- _shouldConvertDeprecatedDisplayCapabilities = YES;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ self.displayCapabilities = nil;
+ self.displays = nil;
+ self.hmiCapabilities = nil;
+ self.softButtonCapabilities = nil;
+ self.buttonCapabilities = nil;
+ self.presetBankCapabilities = nil;
+ self.hmiZoneCapabilities = nil;
+ self.speechCapabilities = nil;
+ self.prerecordedSpeechCapabilities = nil;
+ self.vrCapability = NO;
+ self.audioPassThruCapabilities = nil;
+ self.pcmStreamCapability = nil;
+ self.navigationCapability = nil;
+ self.phoneCapability = nil;
+ self.videoStreamingCapability = nil;
+ self.remoteControlCapability = nil;
+ self.seatLocationCapability = nil;
+ self.driverDistractionCapability = nil;
+
+ self.supportsSubscriptions = NO;
+
+ self.appServicesCapabilitiesDictionary = [NSMutableDictionary dictionary];
+ [self.capabilityObservers removeAllObjects];
+ [self.subscriptionStatus removeAllObjects];
+
+ self.currentHMILevel = SDLHMILevelNone;
+ self.shouldConvertDeprecatedDisplayCapabilities = YES;
+ }];
}
#pragma mark - Getters
@@ -208,6 +224,8 @@ typedef NSString * SDLServiceID;
// return if display capabilities don't exist.
if (display == nil) {
+ defaultWindowCapability.textFields = [SDLTextField allTextFields];
+ defaultWindowCapability.imageFields = [SDLImageField allImageFields];
displayCapability.windowCapabilities = @[defaultWindowCapability];
return @[displayCapability];
}
@@ -245,17 +263,17 @@ typedef NSString * SDLServiceID;
// Create the deprecated capabilities for backward compatibility if developers try to access them
SDLDisplayCapabilities *convertedCapabilities = [[SDLDisplayCapabilities alloc] init];
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated"
- convertedCapabilities.displayType = SDLDisplayTypeGeneric; // deprecated but it is mandatory
- #pragma clang diagnostic pop
- convertedCapabilities.displayName = self.displays.firstObject.displayName;
- convertedCapabilities.textFields = [defaultMainWindowCapabilities.textFields copy];
- convertedCapabilities.imageFields = [defaultMainWindowCapabilities.imageFields copy];
- convertedCapabilities.templatesAvailable = [defaultMainWindowCapabilities.templatesAvailable copy];
- convertedCapabilities.numCustomPresetsAvailable = [defaultMainWindowCapabilities.numCustomPresetsAvailable copy];
- convertedCapabilities.mediaClockFormats = @[]; // mandatory field but allows empty array
- convertedCapabilities.graphicSupported = @([defaultMainWindowCapabilities.imageTypeSupported containsObject:SDLImageTypeDynamic]);
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated"
+ convertedCapabilities.displayType = SDLDisplayTypeGeneric; // deprecated but it is mandatory
+#pragma clang diagnostic pop
+ convertedCapabilities.displayName = self.displays.firstObject.displayName;
+ convertedCapabilities.textFields = [defaultMainWindowCapabilities.textFields copy];
+ convertedCapabilities.imageFields = [defaultMainWindowCapabilities.imageFields copy];
+ convertedCapabilities.templatesAvailable = [defaultMainWindowCapabilities.templatesAvailable copy];
+ convertedCapabilities.numCustomPresetsAvailable = [defaultMainWindowCapabilities.numCustomPresetsAvailable copy];
+ convertedCapabilities.mediaClockFormats = @[]; // mandatory field but allows empty array
+ convertedCapabilities.graphicSupported = @([defaultMainWindowCapabilities.imageTypeSupported containsObject:SDLImageTypeDynamic]);
self.displayCapabilities = convertedCapabilities;
self.buttonCapabilities = defaultMainWindowCapabilities.buttonCapabilities;
@@ -277,6 +295,8 @@ typedef NSString * SDLServiceID;
return self.hmiCapabilities.remoteControl.boolValue;
} else if ([type isEqualToEnum:SDLSystemCapabilityTypeSeatLocation]) {
return self.hmiCapabilities.seatLocation.boolValue;
+ } else if ([type isEqualToEnum:SDLSystemCapabilityTypeDriverDistraction]) {
+ return self.hmiCapabilities.driverDistraction.boolValue;
} else if ([type isEqualToEnum:SDLSystemCapabilityTypeAppServices]) {
//This is a corner case that the param was not available in 5.1.0, but the app services feature was available. We have to say it's available because we don't know.
if ([[SDLGlobals sharedGlobals].rpcVersion isEqualToVersion:[SDLVersion versionWithString:@"5.1.0"]]) {
@@ -310,6 +330,8 @@ typedef NSString * SDLServiceID;
return [[SDLSystemCapability alloc] initWithDisplayCapabilities:self.displays];
} else if ([type isEqualToEnum:SDLSystemCapabilityTypeSeatLocation] && self.seatLocationCapability != nil) {
return [[SDLSystemCapability alloc] initWithSeatLocationCapability:self.seatLocationCapability];
+ } else if ([type isEqualToEnum:SDLSystemCapabilityTypeDriverDistraction] && self.driverDistractionCapability != nil) {
+ return [[SDLSystemCapability alloc] initWithDriverDistractionCapability:self.driverDistractionCapability];
} else if ([type isEqualToEnum:SDLSystemCapabilityTypeRemoteControl] && self.remoteControlCapability != nil) {
return [[SDLSystemCapability alloc] initWithRemoteControlCapability:self.remoteControlCapability];
} else if ([type isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming] && self.videoStreamingCapability != nil) {
@@ -373,7 +395,9 @@ typedef NSString * SDLServiceID;
SDLLogD(@"GetSystemCapability response succeeded, type: %@, response: %@", type, getSystemCapabilityResponse);
if (![weakself.subscriptionStatus[type] isEqualToNumber:subscribe] && weakself.supportsSubscriptions) {
- weakself.subscriptionStatus[type] = subscribe;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ weakself.subscriptionStatus[type] = subscribe;
+ }];
}
[weakself sdl_saveSystemCapability:getSystemCapabilityResponse.systemCapability error:error completionHandler:handler];
@@ -418,6 +442,12 @@ typedef NSString * SDLServiceID;
return NO;
}
self.seatLocationCapability = systemCapability.seatLocationCapability;
+ } else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeDriverDistraction]) {
+ if ([self.driverDistractionCapability isEqual:systemCapability.driverDistractionCapability]) {
+ [self sdl_callObserversForUpdate:systemCapability error:error handler:handler];
+ return NO;
+ }
+ self.driverDistractionCapability = systemCapability.driverDistractionCapability;
} else if ([systemCapabilityType isEqualToEnum:SDLSystemCapabilityTypeVideoStreaming]) {
if ([self.videoStreamingCapability isEqual:systemCapability.videoStreamingCapability]) {
[self sdl_callObserversForUpdate:systemCapability error:error handler:handler];
@@ -446,15 +476,11 @@ typedef NSString * SDLServiceID;
- (void)sdl_saveAppServicesCapabilitiesUpdate:(SDLAppServicesCapabilities *)newCapabilities {
SDLLogV(@"Saving app services capability update with new capabilities: %@", newCapabilities);
for (SDLAppServiceCapability *capability in newCapabilities.appServices) {
- if (capability.updateReason == nil) {
- // First update, new capability
- self.appServicesCapabilitiesDictionary[capability.updatedAppServiceRecord.serviceID] = capability;
- } else if ([capability.updateReason isEqualToEnum:SDLServiceUpdateRemoved]) {
- self.appServicesCapabilitiesDictionary[capability.updatedAppServiceRecord.serviceID] = nil;
- } else {
- // Everything else involves adding or updating the existing service record
- self.appServicesCapabilitiesDictionary[capability.updatedAppServiceRecord.serviceID] = capability;
- }
+ // If the capability has been removed, delete the saved capability; otherwise just update with the new capability
+ SDLAppServiceCapability *newCapability = [capability.updateReason isEqualToEnum:SDLServiceUpdateRemoved] ? nil : capability;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ self.appServicesCapabilitiesDictionary[capability.updatedAppServiceRecord.serviceID] = newCapability;
+ }];
}
}
@@ -505,64 +531,22 @@ typedef NSString * SDLServiceID;
#pragma mark - Manager Subscriptions
+#pragma mark Subscribing
+
- (nullable id<NSObject>)subscribeToCapabilityType:(SDLSystemCapabilityType)type withBlock:(SDLCapabilityUpdateHandler)block {
SDLLogD(@"Subscribing to capability type: %@ with a handler (DEPRECATED)", type);
SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:[[NSObject alloc] init] block:block];
- if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
- SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type);
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]];
- return nil;
- }
-
- if (self.capabilityObservers[type] == nil) {
- SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type);
- self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject];
-
- // We don't want to send this for the displays type because that's automatically subscribed
- if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
- [self sdl_sendGetSystemCapabilityWithType:type subscribe:@YES completionHandler:nil];
- } else {
- // If we're not calling the GSC RPC we should invoke the observer with the cached data
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil];
- }
- } else {
- // Store the observer and call it immediately with the cached value
- [self.capabilityObservers[type] addObject:observerObject];
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil];
- }
-
- return observerObject.observer;
+ id<NSObject> subscribedObserver = [self sdl_subscribeToCapabilityType:type observerObject:observerObject];
+ return subscribedObserver;
}
- (nullable id<NSObject>)subscribeToCapabilityType:(SDLSystemCapabilityType)type withUpdateHandler:(SDLCapabilityUpdateWithErrorHandler)handler {
SDLLogD(@"Subscribing to capability type: %@ with a handler", type);
SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:[[NSObject alloc] init] updateHandler:handler];
- if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
- SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type);
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]];
- return nil;
- }
-
- if (self.capabilityObservers[type] == nil) {
- SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type);
- self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject];
-
- // We don't want to send this for the displays type because that's automatically subscribed
- if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
- [self sdl_sendGetSystemCapabilityWithType:type subscribe:@YES completionHandler:nil];
- } else {
- // If we're not calling the GSC RPC we should invoke the observer with the cached data
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil];
- }
- } else {
- // Store the observer and call it immediately with the cached value
- [self.capabilityObservers[type] addObject:observerObject];
- [self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil];
- }
-
- return observerObject.observer;
+ id<NSObject> subscribedObserver = [self sdl_subscribeToCapabilityType:type observerObject:observerObject];
+ return subscribedObserver;
}
- (BOOL)subscribeToCapabilityType:(SDLSystemCapabilityType)type withObserver:(id<NSObject>)observer selector:(SEL)selector {
@@ -579,15 +563,28 @@ typedef NSString * SDLServiceID;
}
SDLSystemCapabilityObserver *observerObject = [[SDLSystemCapabilityObserver alloc] initWithObserver:observer selector:selector];
+
+ id<NSObject> subscribedObserver = [self sdl_subscribeToCapabilityType:type observerObject:observerObject];
+ return subscribedObserver == nil ? NO : YES;
+}
+
+/// Helper method for subscribing to a system capability type
+/// @param type The SystemCapabilityType that will be subscribed
+/// @param observerObject An object that can be used to unsubscribe the block. If nil, the subscription was not succesful.
+/// @return The observer if the subscription was succesful; nil if not.
+- (nullable id<NSObject>)sdl_subscribeToCapabilityType:(SDLSystemCapabilityType)type observerObject:(SDLSystemCapabilityObserver *)observerObject {
if ([self.currentHMILevel isEqualToEnum:SDLHMILevelNone] && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
SDLLogE(@"Attempted to subscribe to type: %@ in HMI level NONE, which is not allowed. Please wait until you are in HMI BACKGROUND, LIMITED, or FULL before attempting to subscribe to any SystemCapabilityType other than DISPLAYS.", type);
[self sdl_invokeObserver:observerObject withCapabilityType:type capability:nil error:[NSError sdl_systemCapabilityManager_cannotUpdateInHMINONE]];
- return NO;
+ return nil;
}
if (self.capabilityObservers[type] == nil) {
SDLLogD(@"This is the first subscription to capability type: %@, sending a GetSystemCapability with subscribe true", type);
- self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject];
+
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ self.capabilityObservers[type] = [NSMutableArray arrayWithObject:observerObject];
+ }];
// We don't want to send this for the displays type because that's automatically subscribed
if (![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
@@ -598,18 +595,25 @@ typedef NSString * SDLServiceID;
}
} else {
// Store the observer and call it immediately with the cached value
- [self.capabilityObservers[type] addObject:observerObject];
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [self.capabilityObservers[type] addObject:observerObject];
+ }];
+
[self sdl_invokeObserver:observerObject withCapabilityType:type capability:[self sdl_cachedCapabilityForType:type] error:nil];
}
- return YES;
+ return observerObject.observer;
}
+#pragma mark Unubscribing
+
- (void)unsubscribeFromCapabilityType:(SDLSystemCapabilityType)type withObserver:(id)observer {
SDLLogD(@"Unsubscribing from capability type: %@", type);
for (SDLSystemCapabilityObserver *capabilityObserver in self.capabilityObservers[type]) {
if ([observer isEqual:capabilityObserver.observer] && self.capabilityObservers[type] != nil) {
- [self.capabilityObservers[type] removeObject:capabilityObserver];
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ [self.capabilityObservers[type] removeObject:capabilityObserver];
+ }];
[self sdl_removeNilObserversAndUnsubscribeIfNecessary];
break;
@@ -617,6 +621,43 @@ typedef NSString * SDLServiceID;
}
}
+- (void)sdl_removeNilObserversAndUnsubscribeIfNecessary {
+ SDLLogV(@"Checking for nil observers and removing them, then checking for subscriptions we don't need and unsubscribing.");
+ // Loop through our observers
+ for (SDLSystemCapabilityType key in self.capabilityObservers.allKeys) {
+ for (SDLSystemCapabilityObserver *observer in self.capabilityObservers[key]) {
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ // If an observer object is nil, remove it
+ if (observer.observer == nil) {
+ [self.capabilityObservers[key] removeObject:observer];
+ }
+
+ // If we no longer have any observers for that type, remove the array
+ if (self.capabilityObservers[key].count == 0) {
+ [self.capabilityObservers removeObjectForKey:key];
+ }
+ }];
+ }
+ }
+
+ // If we don't support subscriptions, we don't want to unsubscribe by sending an RPC below
+ if (!self.supportsSubscriptions) {
+ return;
+ }
+
+ // Loop through our subscription statuses, check if we're subscribed. If we are, and we do not have observers for that type, and that type is not DISPLAYS, then unsubscribe.
+ for (SDLSystemCapabilityType type in self.subscriptionStatus.allKeys) {
+ if ([self.subscriptionStatus[type] isEqualToNumber:@YES]
+ && self.capabilityObservers[type] == nil
+ && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
+ SDLLogD(@"Removing the last subscription to type %@, sending a GetSystemCapability with subscribe false (will unsubscribe)", type);
+ [self sdl_sendGetSystemCapabilityWithType:type subscribe:@NO completionHandler:nil];
+ }
+ }
+}
+
+#pragma mark Notifying Subscribers
+
/// Calls all observers of a capability type with an updated capability
/// @param capability The new capability update
/// @param handler The update handler to call, if one exists after the observers are called
@@ -646,7 +687,7 @@ typedef NSString * SDLServiceID;
observer.updateBlock(capability, subscribed, error);
} else {
if (![observer.observer respondsToSelector:observer.selector]) {
- @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector];
+ @throw [NSException sdl_invalidSystemCapabilitySelectorExceptionWithSelector:observer.selector];
}
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[(NSObject *)observer.observer methodSignatureForSelector:observer.selector]];
@@ -664,46 +705,13 @@ typedef NSString * SDLServiceID;
[invocation setArgument:&subscribed atIndex:4];
}
if (numberOfParametersInSelector >= 4) {
- @throw [NSException sdl_invalidSelectorExceptionWithSelector:observer.selector];
+ @throw [NSException sdl_invalidSystemCapabilitySelectorExceptionWithSelector:observer.selector];
}
[invocation invoke];
}
}
-- (void)sdl_removeNilObserversAndUnsubscribeIfNecessary {
- SDLLogV(@"Checking for nil observers and removing them, then checking for subscriptions we don't need and unsubscribing.");
- // Loop through our observers
- for (SDLSystemCapabilityType key in self.capabilityObservers.allKeys) {
- for (SDLSystemCapabilityObserver *observer in self.capabilityObservers[key]) {
- // If an observer object is nil, remove it
- if (observer.observer == nil) {
- [self.capabilityObservers[key] removeObject:observer];
- }
-
- // If we no longer have any observers for that type, remove the array
- if (self.capabilityObservers[key].count == 0) {
- [self.capabilityObservers removeObjectForKey:key];
- }
- }
- }
-
- // If we don't support subscriptions, we don't want to unsubscribe by sending an RPC below
- if (!self.supportsSubscriptions) {
- return;
- }
-
- // Loop through our subscription statuses, check if we're subscribed. If we are, and we do not have observers for that type, and that type is not DISPLAYS, then unsubscribe.
- for (SDLSystemCapabilityType type in self.subscriptionStatus.allKeys) {
- if ([self.subscriptionStatus[type] isEqualToNumber:@YES]
- && self.capabilityObservers[type] == nil
- && ![type isEqualToEnum:SDLSystemCapabilityTypeDisplays]) {
- SDLLogD(@"Removing the last subscription to type %@, sending a GetSystemCapability with subscribe false (will unsubscribe)", type);
- [self sdl_sendGetSystemCapabilityWithType:type subscribe:@NO completionHandler:nil];
- }
- }
-}
-
#pragma mark - Notifications
/// Registers for notifications and responses from Core
@@ -796,6 +804,36 @@ typedef NSString * SDLServiceID;
self.currentHMILevel = onHMIStatus.hmiLevel;
}
+
+#pragma mark Getters
+
+- (NSMutableDictionary<SDLSystemCapabilityType, NSMutableArray<SDLSystemCapabilityObserver *> *> *)capabilityObservers {
+ __block NSMutableDictionary<SDLSystemCapabilityType, NSMutableArray<SDLSystemCapabilityObserver *> *> *dict = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ dict = self->_capabilityObservers;
+ }];
+
+ return dict;
+}
+
+- (NSMutableDictionary<SDLSystemCapabilityType, NSNumber<SDLBool> *> *)subscriptionStatus {
+ __block NSMutableDictionary<SDLSystemCapabilityType, NSNumber<SDLBool> *> *dict = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ dict = self->_subscriptionStatus;
+ }];
+
+ return dict;
+}
+
+- (nullable NSMutableDictionary<SDLServiceID, SDLAppServiceCapability *> *)appServicesCapabilitiesDictionary {
+ __block NSMutableDictionary<SDLServiceID, SDLAppServiceCapability *> *dict = nil;
+ [SDLGlobals runSyncOnSerialSubQueue:self.readWriteQueue block:^{
+ dict = self->_appServicesCapabilitiesDictionary;
+ }];
+
+ return dict;
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLSystemCapabilityType.h b/SmartDeviceLink/SDLSystemCapabilityType.h
index 60f11a78a..2c5092794 100755
--- a/SmartDeviceLink/SDLSystemCapabilityType.h
+++ b/SmartDeviceLink/SDLSystemCapabilityType.h
@@ -1,10 +1,34 @@
-//
-// SDLSystemCapabilityType.h
-// SmartDeviceLink-iOS
-//
-// Created by Joel Fischer on 7/10/17.
-// Copyright © 2017 smartdevicelink. All rights reserved.
-//
+/*
+* Copyright (c) 2020, SmartDeviceLink Consortium, Inc.
+* All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions are met:
+*
+* Redistributions of source code must retain the above copyright notice, this
+* list of conditions and the following disclaimer.
+*
+* Redistributions in binary form must reproduce the above copyright notice,
+* this list of conditions and the following
+* disclaimer in the documentation and/or other materials provided with the
+* distribution.
+*
+* Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+* its contributors may be used to endorse or promote products derived
+* from this software without specific prior written permission.
+*
+* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+*/
#import "SDLEnum.h"
@@ -49,3 +73,8 @@ extern SDLSystemCapabilityType const SDLSystemCapabilityTypeSeatLocation;
@since SDL 6.0
*/
extern SDLSystemCapabilityType const SDLSystemCapabilityTypeDisplays;
+
+/**
+ * @since SDL 7.0.0
+ */
+extern SDLSystemCapabilityType const SDLSystemCapabilityTypeDriverDistraction;
diff --git a/SmartDeviceLink/SDLSystemCapabilityType.m b/SmartDeviceLink/SDLSystemCapabilityType.m
index 4185345e6..5f5894ec5 100755
--- a/SmartDeviceLink/SDLSystemCapabilityType.m
+++ b/SmartDeviceLink/SDLSystemCapabilityType.m
@@ -15,3 +15,4 @@ SDLSystemCapabilityType const SDLSystemCapabilityTypeVideoStreaming = @"VIDEO_ST
SDLSystemCapabilityType const SDLSystemCapabilityTypeRemoteControl = @"REMOTE_CONTROL";
SDLSystemCapabilityType const SDLSystemCapabilityTypeSeatLocation = @"SEAT_LOCATION";
SDLSystemCapabilityType const SDLSystemCapabilityTypeDisplays = @"DISPLAYS";
+SDLSystemCapabilityType const SDLSystemCapabilityTypeDriverDistraction = @"DRIVER_DISTRACTION";
diff --git a/SmartDeviceLink/SDLTCPTransport.m b/SmartDeviceLink/SDLTCPTransport.m
index fe642b9c0..962c1ffc4 100644
--- a/SmartDeviceLink/SDLTCPTransport.m
+++ b/SmartDeviceLink/SDLTCPTransport.m
@@ -9,37 +9,44 @@
#import "SDLTCPTransport.h"
#import "SDLMutableDataQueue.h"
#import "SDLError.h"
+#import "SDLGlobals.h"
#import "SDLLogMacros.h"
+#import "SDLTimer.h"
#import <errno.h>
NS_ASSUME_NONNULL_BEGIN
NSString *const TCPIOThreadName = @"com.smartdevicelink.tcpiothread";
-NSTimeInterval const IOThreadWaitSecs = 1.0;
+NSTimeInterval const IOThreadCanceledSemaphoreWaitSecs = 1.0;
NSUInteger const DefaultReceiveBufferSize = 16 * 1024;
NSTimeInterval ConnectionTimeoutSecs = 30.0;
@interface SDLTCPTransport ()
@property (nullable, nonatomic, strong) NSThread *ioThread;
-@property (nonatomic, strong) dispatch_semaphore_t ioThreadStoppedSemaphore;
@property (nonatomic, assign) NSUInteger receiveBufferSize;
@property (nonatomic, strong) SDLMutableDataQueue *sendDataQueue;
@property (nullable, nonatomic, strong) NSInputStream *inputStream;
@property (nullable, nonatomic, strong) NSOutputStream *outputStream;
@property (nonatomic, assign) BOOL outputStreamHasSpace;
-@property (nullable, nonatomic, strong) NSTimer *connectionTimer;
+@property (nullable, nonatomic, strong) SDLTimer *connectionTimer;
@property (nonatomic, assign) BOOL transportConnected;
@property (nonatomic, assign) BOOL transportErrorNotified;
+/// A semaphore used to block the current thread until we know that the I/O streams have been shutdown on the ioThread
+@property (nonatomic, strong) dispatch_semaphore_t ioThreadCancelledSemaphore;
+
@end
@implementation SDLTCPTransport
- (instancetype)init {
- if (self = [super init]) {
- _receiveBufferSize = DefaultReceiveBufferSize;
- _sendDataQueue = [[SDLMutableDataQueue alloc] init];
- }
+ self = [super init];
+ if (!self) { return nil; }
+
+ _receiveBufferSize = DefaultReceiveBufferSize;
+ _sendDataQueue = [[SDLMutableDataQueue alloc] init];
+ _ioThreadCancelledSemaphore = dispatch_semaphore_create(0);
+
return self;
}
@@ -53,11 +60,6 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
return self;
}
-- (void)dealloc {
- SDLLogD(@"SDLTCPTransport dealloc");
- [self disconnect];
-}
-
#pragma mark - Stream Lifecycle
// Note: When a connection is refused (e.g. TCP port number is not correct) or timed out (e.g. invalid IP address), then onError will be notified.
@@ -67,6 +69,8 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
return;
}
+ SDLLogD(@"Attempting to connect");
+
unsigned int port;
int num = [self.portNumber intValue];
if (0 <= num && num <= 65535) {
@@ -78,7 +82,6 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
self.ioThread = [[NSThread alloc] initWithTarget:self selector:@selector(sdl_tcpTransportEventLoop) object:nil];
self.ioThread.name = TCPIOThreadName;
- self.ioThreadStoppedSemaphore = dispatch_semaphore_create(0);
CFReadStreamRef readStream = NULL;
CFWriteStreamRef writeStream = NULL;
@@ -96,32 +99,55 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
[self.ioThread start];
}
-- (void)disconnect {
+- (void)disconnectWithCompletionHandler:(void (^)(void))disconnectCompletionHandler {
+ SDLLogD(@"Disconnecting");
+
+ [self.sendDataQueue removeAllObjects];
+ self.transportErrorNotified = NO;
+ self.transportConnected = NO;
+
if (self.ioThread == nil) {
- // already disconnected
- return;
+ SDLLogV(@"TCP transport not yet started or has been shutdown");
+ return disconnectCompletionHandler();
}
- SDLLogD(@"Disconnecting TCP transport");
+ // Tell the ioThread to shutdown the I/O streams. The I/O streams must be opened and closed on the same thread; if they are not, random crashes can occur. Dispatch this task to the main queue to ensure that this task is performed on the Main Thread. We are using the Main Thread for ease since we don't want to create a separate thread just to wait on closing the I/O streams. Using the Main Thread ensures that semaphore wait is not called from ioThread, which would block the ioThread and prevent shutdown.
+ __weak typeof(self) weakSelf = self;
+ dispatch_async(dispatch_get_main_queue(), ^{
+ __strong typeof(weakSelf) strongSelf = weakSelf;
- [self sdl_cancelIOThread];
+ // Attempt to cancel the ioThread. Once the thread realizes it has been cancelled, it will cleanup the I/O streams. Make sure to wake up the run loop in case there is no current I/O event running on the ioThread.
+ [strongSelf.ioThread cancel];
+ [strongSelf performSelector:@selector(sdl_doNothing) onThread:self.ioThread withObject:nil waitUntilDone:NO];
- long ret = dispatch_semaphore_wait(self.ioThreadStoppedSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(IOThreadWaitSecs * NSEC_PER_SEC)));
- if (ret == 0) {
- SDLLogD(@"TCP transport thread stopped");
- } else {
- SDLLogE(@"Failed to stop TCP transport thread");
- }
- self.ioThread = nil;
+ // Block the thread until the semaphore has been released by the ioThread (or a timeout has occured).
+ BOOL cancelledSuccessfully = [strongSelf sdl_isIOThreadCancelled];
+ if (!cancelledSuccessfully) {
+ SDLLogE(@"The I/O streams were not shut down successfully. We might not be able to create a new session with an accessory during the same app session. If this happens, only force quitting and restarting the app will allow new sessions.");
+ }
+
+ disconnectCompletionHandler();
+ });
+}
- self.inputStream = nil;
- self.outputStream = nil;
+/// Wait for the ioThread to destroy the I/O streams. To ensure that we are not blocking the ioThread, this method should only be called from the main thread.
+/// @return Whether or not the session's I/O streams were closed successfully.
+- (BOOL)sdl_isIOThreadCancelled {
+ NSAssert(![NSThread.currentThread.name isEqualToString:TCPIOThreadName], @"%@ must not be called from the ioThread!", NSStringFromSelector(_cmd));
- [self.sendDataQueue removeAllObjects];
- self.transportErrorNotified = NO;
- self.transportConnected = NO;
+ long lWait = dispatch_semaphore_wait(self.ioThreadCancelledSemaphore, dispatch_time(DISPATCH_TIME_NOW, (int64_t)(IOThreadCanceledSemaphoreWaitSecs * NSEC_PER_SEC)));
+ if (lWait == 0) {
+ SDLLogD(@"ioThread cancelled successfully");
+ return YES;
+ }
+
+ SDLLogE(@"Failed to cancel ioThread within %f seconds", IOThreadCanceledSemaphoreWaitSecs);
+ return NO;
}
+/// Helper method for waking up the ioThread.
+- (void)sdl_doNothing {}
+
#pragma mark - Data Transmission
- (void)sendData:(NSData *)msgBytes {
@@ -138,36 +164,48 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
[self sdl_setupStream:self.outputStream];
// JFYI: NSStream itself has a connection timeout (about 1 minute). If you specify a large timeout value, you may get the NSStream's timeout event first.
- self.connectionTimer = [NSTimer scheduledTimerWithTimeInterval:ConnectionTimeoutSecs target:self selector:@selector(sdl_onConnectionTimedOut:) userInfo:nil repeats:NO];
+ __weak typeof(self) weakSelf = self;
+ self.connectionTimer = [[SDLTimer alloc] initWithDuration:ConnectionTimeoutSecs];
+ self.connectionTimer.elapsedBlock = ^{
+ [weakSelf sdl_onConnectionTimedOut];
+ };
+ [self.connectionTimer startOnRunLoop:[NSRunLoop currentRunLoop]];
// these will initiate a connection to remote server
SDLLogD(@"Connecting to %@:%@ ...", self.hostName, self.portNumber);
[self.inputStream open];
[self.outputStream open];
- while (![self.ioThread isCancelled]) {
+ while (self.ioThread != nil && !self.ioThread.cancelled) {
BOOL ret = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
if (!ret) {
SDLLogW(@"Failed to start TCP transport run loop");
break;
}
}
- SDLLogD(@"TCP transport run loop terminated");
+ // Close the I/O streams
+ SDLLogD(@"TCP transport run loop terminated");
[self sdl_teardownStream:self.inputStream];
[self sdl_teardownStream:self.outputStream];
+ self.inputStream = nil;
+ self.outputStream = nil;
+ [self.connectionTimer cancel];
- [self.connectionTimer invalidate];
-
- dispatch_semaphore_signal(self.ioThreadStoppedSemaphore);
+ // If a thread is blocked waiting on the I/O streams to shutdown, let the thread know that shutdown has completed.
+ dispatch_semaphore_signal(self.ioThreadCancelledSemaphore);
}
}
+/// Configures a stream
+/// @param stream An input or output stream
- (void)sdl_setupStream:(NSStream *)stream {
stream.delegate = self;
[stream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
}
+/// Tears down a stream
+/// @param stream An input or output stream
- (void)sdl_teardownStream:(NSStream *)stream {
NSStreamStatus streamStatus = stream.streamStatus;
if (streamStatus != NSStreamStatusNotOpen && streamStatus != NSStreamStatusClosed) {
@@ -177,12 +215,6 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
[stream setDelegate:nil];
}
-- (void)sdl_cancelIOThread {
- [self.ioThread cancel];
- // wake up the run loop in case we don't have any I/O event
- [self performSelector:@selector(sdl_doNothing) onThread:self.ioThread withObject:nil waitUntilDone:NO];
-}
-
#pragma mark - NSStreamDelegate
// this method runs only on the I/O thread (i.e. invoked from the run loop)
@@ -195,7 +227,7 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
// We will get two NSStreamEventOpenCompleted events (for both input and output streams) and we don't need both. Let's use the one of output stream since we need to make sure that output stream is ready before Proxy sending Start Service frame.
if (aStream == self.outputStream) {
SDLLogD(@"TCP transport connected");
- [self.connectionTimer invalidate];
+ [self.connectionTimer cancel];
self.transportConnected = YES;
[self.delegate onTransportConnected];
}
@@ -274,12 +306,10 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
self.outputStreamHasSpace = NO;
}
-- (void)sdl_onConnectionTimedOut:(NSTimer *)timer {
+- (void)sdl_onConnectionTimedOut {
NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onConnectionTimedOut is called on a wrong thread!");
SDLLogW(@"TCP connection timed out");
- [self sdl_cancelIOThread];
-
if (!self.transportErrorNotified) {
NSAssert(!self.transportConnected, @"transport should not be connected in this case");
[self.delegate onError:[NSError sdl_transport_connectionTimedOutError]];
@@ -290,9 +320,6 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
- (void)sdl_onStreamError:(NSStream *)stream {
NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onStreamError is called on a wrong thread!");
- // stop I/O thread
- [self sdl_cancelIOThread];
-
// avoid notifying multiple error events
if (self.transportErrorNotified) {
return;
@@ -340,16 +367,12 @@ NSTimeInterval ConnectionTimeoutSecs = 30.0;
SDLLogD(@"Stream ended");
NSAssert([[NSThread currentThread] isEqual:self.ioThread], @"sdl_onStreamEnd is called on a wrong thread!");
- [self sdl_cancelIOThread];
-
if (!self.transportErrorNotified) {
[self.delegate onTransportDisconnected];
self.transportErrorNotified = YES;
}
}
-- (void)sdl_doNothing {}
-
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLTextAndGraphicManager.m b/SmartDeviceLink/SDLTextAndGraphicManager.m
index 2d04f74ed..6324e13e3 100644
--- a/SmartDeviceLink/SDLTextAndGraphicManager.m
+++ b/SmartDeviceLink/SDLTextAndGraphicManager.m
@@ -27,7 +27,7 @@
#import "SDLSystemCapabilityManager.h"
#import "SDLTextField.h"
#import "SDLWindowCapability.h"
-#import "SDLWindowCapability+ShowManagerExtensions.h"
+#import "SDLWindowCapability+ScreenManagerExtensions.h"
NS_ASSUME_NONNULL_BEGIN
@@ -87,10 +87,23 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)start {
+ SDLLogD(@"Starting manager");
+
+ // Make sure none of the properties were set after the manager was shut down
+ [self sdl_reset];
+
[self.systemCapabilityManager subscribeToCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self selector:@selector(sdl_displayCapabilityDidUpdate:)];
}
- (void)stop {
+ SDLLogD(@"Stopping manager");
+ [self sdl_reset];
+
+ [self.systemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self];
+}
+
+- (void)sdl_reset {
+ SDLLogV(@"Resetting properties");
_textField1 = nil;
_textField2 = nil;
_textField3 = nil;
@@ -115,8 +128,6 @@ NS_ASSUME_NONNULL_BEGIN
_blankArtwork = nil;
_waitingOnHMILevelUpdateToUpdate = NO;
_isDirty = NO;
-
- [self.systemCapabilityManager unsubscribeFromCapabilityType:SDLSystemCapabilityTypeDisplays withObserver:self];
}
#pragma mark - Upload / Send
@@ -301,7 +312,7 @@ NS_ASSUME_NONNULL_BEGIN
NSArray *nonNilFields = [self sdl_findNonNilTextFields];
if (nonNilFields.count == 0) { return show; }
- NSUInteger numberOfLines = (self.windowCapability.textFields != nil) ? self.windowCapability.maxNumberOfMainFieldLines : 4;
+ NSUInteger numberOfLines = self.windowCapability.maxNumberOfMainFieldLines;
if (numberOfLines == 1) {
show = [self sdl_assembleOneLineShowText:show withShowFields:nonNilFields];
} else if (numberOfLines == 2) {
@@ -512,46 +523,46 @@ NS_ASSUME_NONNULL_BEGIN
}
- (BOOL)sdl_shouldUpdatePrimaryImage {
- BOOL templateSupportsPrimaryArtwork = (self.windowCapability.imageFields != nil) ? [self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] : YES;
+ BOOL templateSupportsPrimaryArtwork = [self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic];
+ BOOL graphicMatchesExisting = [self.currentScreenData.graphic.value isEqualToString:self.primaryGraphic.name];
+ BOOL graphicExists = (self.primaryGraphic != nil);
- return (templateSupportsPrimaryArtwork
- && ![self.currentScreenData.graphic.value isEqualToString:self.primaryGraphic.name]
- && self.primaryGraphic != nil);
+ return (templateSupportsPrimaryArtwork && !graphicMatchesExisting && graphicExists);
}
- (BOOL)sdl_shouldUpdateSecondaryImage {
- BOOL templateSupportsSecondaryArtwork = (self.windowCapability.imageFields != nil) ? ([self.windowCapability hasImageFieldOfName:SDLImageFieldNameGraphic] || [self.windowCapability hasImageFieldOfName:SDLImageFieldNameSecondaryGraphic]) : YES;
+ BOOL templateSupportsSecondaryArtwork = [self.windowCapability hasImageFieldOfName:SDLImageFieldNameSecondaryGraphic];
+ BOOL graphicMatchesExisting = [self.currentScreenData.secondaryGraphic.value isEqualToString:self.secondaryGraphic.name];
+ BOOL graphicExists = (self.secondaryGraphic != nil);
// Cannot detect if there is a secondary image, so we'll just try to detect if there's a primary image and allow it if there is.
- return (templateSupportsSecondaryArtwork
- && ![self.currentScreenData.secondaryGraphic.value isEqualToString:self.secondaryGraphic.name]
- && self.secondaryGraphic != nil);
+ return (templateSupportsSecondaryArtwork && !graphicMatchesExisting && graphicExists);
}
- (BOOL)sdl_shouldUpdateMediaTextField {
- return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMediaTrack] : YES;
+ return [self.windowCapability hasTextFieldOfName:SDLTextFieldNameMediaTrack];
}
- (BOOL)sdl_shouldUpdateTitleField {
- return (self.windowCapability.textFields != nil) ? [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTemplateTitle] : YES;
+ return [self.windowCapability hasTextFieldOfName:SDLTextFieldNameTemplateTitle];
}
- (NSArray<NSString *> *)sdl_findNonNilTextFields {
NSMutableArray *array = [NSMutableArray array];
- self.textField1.length > 0 ? [array addObject:self.textField1] : nil;
- self.textField2.length > 0 ? [array addObject:self.textField2] : nil;
- self.textField3.length > 0 ? [array addObject:self.textField3] : nil;
- self.textField4.length > 0 ? [array addObject:self.textField4] : nil;
+ (self.textField1.length > 0) ? [array addObject:self.textField1] : nil;
+ (self.textField2.length > 0) ? [array addObject:self.textField2] : nil;
+ (self.textField3.length > 0) ? [array addObject:self.textField3] : nil;
+ (self.textField4.length > 0) ? [array addObject:self.textField4] : nil;
return [array copy];
}
- (NSArray<SDLMetadataType> *)sdl_findNonNilMetadataFields {
NSMutableArray *array = [NSMutableArray array];
- self.textField1Type.length > 0 ? [array addObject:self.textField1Type] : nil;
- self.textField2Type.length > 0 ? [array addObject:self.textField2Type] : nil;
- self.textField3Type.length > 0 ? [array addObject:self.textField3Type] : nil;
- self.textField4Type.length > 0 ? [array addObject:self.textField4Type] : nil;
+ (self.textField1Type.length) > 0 ? [array addObject:self.textField1Type] : nil;
+ (self.textField2Type.length) > 0 ? [array addObject:self.textField2Type] : nil;
+ (self.textField3Type.length) > 0 ? [array addObject:self.textField3Type] : nil;
+ (self.textField4Type.length) > 0 ? [array addObject:self.textField4Type] : nil;
return [array copy];
}
@@ -712,7 +723,7 @@ NS_ASSUME_NONNULL_BEGIN
// Auto-send an updated show
if ([self sdl_hasData]) {
- [self sdl_updateWithCompletionHandler:nil];
+ [self updateWithCompletionHandler:nil];
}
}
diff --git a/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.h b/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.h
new file mode 100644
index 000000000..310b024bf
--- /dev/null
+++ b/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.h
@@ -0,0 +1,19 @@
+//
+// SDLTextField+ScreenManagerExtensions.h
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/20/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLTextField.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SDLTextField (ScreenManagerExtensions)
+
++ (NSArray<SDLTextField *> *)allTextFields;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.m b/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.m
new file mode 100644
index 000000000..28e6b349d
--- /dev/null
+++ b/SmartDeviceLink/SDLTextField+ScreenManagerExtensions.m
@@ -0,0 +1,26 @@
+//
+// SDLTextField+ScreenManagerExtensions.m
+// SmartDeviceLink
+//
+// Created by Joel Fischer on 5/20/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SDLTextField+ScreenManagerExtensions.h"
+
+@implementation SDLTextField (ScreenManagerExtensions)
+
++ (NSArray<SDLTextFieldName> *)sdl_allTextFieldNames {
+ return @[SDLTextFieldNameETA, SDLTextFieldNameMenuName, SDLTextFieldNameMenuTitle, SDLTextFieldNameStatusBar, SDLTextFieldNameAlertText1, SDLTextFieldNameAlertText2, SDLTextFieldNameAlertText3, SDLTextFieldNameMainField1, SDLTextFieldNameMainField2, SDLTextFieldNameMainField3, SDLTextFieldNameMainField4, SDLTextFieldNameMediaClock, SDLTextFieldNameMediaTrack, SDLTextFieldNamePhoneNumber, SDLTextFieldNameAddressLines, SDLTextFieldNameLocationName, SDLTextFieldNameSliderFooter, SDLTextFieldNameSliderHeader, SDLTextFieldNameTertiaryText, SDLTextFieldNameSecondaryText, SDLTextFieldNameTemplateTitle, SDLTextFieldNameTotalDistance, SDLTextFieldNameNavigationText1, SDLTextFieldNameNavigationText2, SDLTextFieldNameLocationDescription, SDLTextFieldNameScrollableMessageBody, SDLTextFieldNameInitialInteractionText, SDLTextFieldNameAudioPassThruDisplayText1, SDLTextFieldNameAudioPassThruDisplayText2];
+}
+
++ (NSArray<SDLTextField *> *)allTextFields {
+ NSMutableArray<SDLTextField *> *tempTextFields = [NSMutableArray array];
+ for (SDLTextFieldName fieldName in [self sdl_allTextFieldNames]) {
+ [tempTextFields addObject:[[SDLTextField alloc] initWithName:fieldName characterSet:SDLCharacterSetUtf8 width:500 rows:8]];
+ }
+
+ return tempTextFields;
+}
+
+@end
diff --git a/SmartDeviceLink/SDLTextField.h b/SmartDeviceLink/SDLTextField.h
index d1dcedb1d..a345ff145 100644
--- a/SmartDeviceLink/SDLTextField.h
+++ b/SmartDeviceLink/SDLTextField.h
@@ -26,11 +26,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic) SDLTextFieldName name;
/**
- * The character set that is supported in this field.
- *
- * @see SDLCharacterSet
- *
- * Required
+ * The set of characters that are supported by this text field. All text is sent in UTF-8 format, but not all systems may support all of the characters expressed by UTF-8. All systems will support at least ASCII, but they may support more, either the LATIN-1 character set, or the full UTF-8 character set.
*/
@property (strong, nonatomic) SDLCharacterSet characterSet;
diff --git a/SmartDeviceLink/SDLTimer.h b/SmartDeviceLink/SDLTimer.h
index cba9efefa..dcd75c79c 100644
--- a/SmartDeviceLink/SDLTimer.h
+++ b/SmartDeviceLink/SDLTimer.h
@@ -8,14 +8,40 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLTimer : NSObject
+/// A block called when the timer elapses
@property (copy, nonatomic, nullable) void (^elapsedBlock)(void);
+
+/// A block called when the timer is cancelled
@property (copy, nonatomic, nullable) void (^canceledBlock)(void);
-@property (assign, nonatomic) float duration;
-- (instancetype)init;
-- (instancetype)initWithDuration:(float)duration;
-- (instancetype)initWithDuration:(float)duration repeat:(BOOL)repeat;
+/// The time between calling `start` and when the elapsed block will be called
+@property (assign, nonatomic) NSTimeInterval duration;
+
+/// Whether or not the timer is currently running
+@property (assign, nonatomic) BOOL timerRunning;
+
+/// Whether or not the timer will repeat after it completes
+@property (assign, nonatomic) BOOL repeat;
+
+- (instancetype)init NS_UNAVAILABLE;
+
+/// Initialize a timer with a specified duration on the main run loop without repeating
+/// @param duration The duration of the timer. Must not be 0.
+- (instancetype)initWithDuration:(NSTimeInterval)duration;
+
+/// Initialize a timer with a specified duration on the passed run loop and optionally repeating
+/// @param duration The duration of the timer
+/// @param repeat Whether or not the timer should autorepeat
+- (instancetype)initWithDuration:(NSTimeInterval)duration repeat:(BOOL)repeat;
+
+/// Starts the timer on the main run loop. When the timer has elapsed, the elapsed block will be called.
- (void)start;
+
+/// Starts the timer on the specified run loop. When the timer has elapsed, the elapsed block will be called.
+/// @param runLoop The run loop to start the timer on
+- (void)startOnRunLoop:(NSRunLoop *)runLoop;
+
+/// Cancels and invalidates the timer. The canceled block will be called.
- (void)cancel;
@end
diff --git a/SmartDeviceLink/SDLTimer.m b/SmartDeviceLink/SDLTimer.m
index 2774c0836..39479c9af 100644
--- a/SmartDeviceLink/SDLTimer.m
+++ b/SmartDeviceLink/SDLTimer.m
@@ -2,6 +2,7 @@
// SDLTimer.m
//
+#import "SDLLogMacros.h"
#import "SDLTimer.h"
NS_ASSUME_NONNULL_BEGIN
@@ -40,32 +41,26 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLTimer () <SDLTimerTargetDelegate>
@property (strong, nonatomic, nullable) NSTimer *timer;
-@property (assign, nonatomic) BOOL timerRunning;
-@property (assign, nonatomic) BOOL repeat;
+
@end
@implementation SDLTimer
-- (instancetype)init {
- if (self = [super init]) {
- _duration = 0;
- _timerRunning = NO;
- }
- return self;
-}
-
-- (instancetype)initWithDuration:(float)duration {
+- (instancetype)initWithDuration:(NSTimeInterval)duration {
return [self initWithDuration:duration repeat:NO];
}
-- (instancetype)initWithDuration:(float)duration repeat:(BOOL)repeat {
+- (instancetype)initWithDuration:(NSTimeInterval)duration repeat:(BOOL)repeat {
self = [super init];
- if (self) {
- _duration = duration;
- _repeat = repeat;
- _timerRunning = NO;
- }
+ if (!self) { return nil; }
+
+ NSAssert(duration > 0, @"Cannot create a timer with a 0 duration");
+
+ _duration = duration;
+ _repeat = repeat;
+ _timerRunning = NO;
+
return self;
}
@@ -74,12 +69,16 @@ NS_ASSUME_NONNULL_BEGIN
}
- (void)start {
+ [self startOnRunLoop:[NSRunLoop mainRunLoop]];
+}
+
+- (void)startOnRunLoop:(NSRunLoop *)runLoop {
if (self.duration > 0) {
[self stopAndDestroyTimer];
-
+
SDLTimerTarget *timerTarget = [[SDLTimerTarget alloc] initWithDelegate:self];
- self.timer = [NSTimer timerWithTimeInterval:_duration target:timerTarget selector:@selector(timerElapsed) userInfo:nil repeats:_repeat];
- [[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];
+ self.timer = [NSTimer timerWithTimeInterval:self.duration target:timerTarget selector:@selector(timerElapsed) userInfo:nil repeats:_repeat];
+ [runLoop addTimer:self.timer forMode:NSRunLoopCommonModes];
self.timerRunning = YES;
}
}
diff --git a/SmartDeviceLink/SDLTouch.h b/SmartDeviceLink/SDLTouch.h
index e001257b9..b6df4bacf 100644
--- a/SmartDeviceLink/SDLTouch.h
+++ b/SmartDeviceLink/SDLTouch.h
@@ -11,13 +11,13 @@
@class SDLTouchEvent;
/// Identifies finger touch
-typedef enum {
+typedef NS_ENUM(NSUInteger, SDLTouchIdentifier) {
/// Touch was first finger
SDLTouchIdentifierFirstFinger = 0,
/// Touch was second finger
SDLTouchIdentifierSecondFinger = 1
-} SDLTouchIdentifier;
+};
NS_ASSUME_NONNULL_BEGIN
diff --git a/SmartDeviceLink/SDLTouchEvent.h b/SmartDeviceLink/SDLTouchEvent.h
index 4d2671c78..b11a9a21a 100644
--- a/SmartDeviceLink/SDLTouchEvent.h
+++ b/SmartDeviceLink/SDLTouchEvent.h
@@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
Required, array size 1-1000, contains integer value 0-2000000000
*/
-@property (strong, nonatomic) NSArray<NSNumber<SDLInt> *> *timeStamp;
+@property (strong, nonatomic) NSArray<NSNumber *> *timeStamp;
/**
The touch's coordinate
diff --git a/SmartDeviceLink/SDLTouchEvent.m b/SmartDeviceLink/SDLTouchEvent.m
index 617174bbc..2fbfa90d4 100644
--- a/SmartDeviceLink/SDLTouchEvent.m
+++ b/SmartDeviceLink/SDLTouchEvent.m
@@ -21,11 +21,11 @@ NS_ASSUME_NONNULL_BEGIN
return [self.store sdl_objectForName:SDLRPCParameterNameId ofClass:NSNumber.class error:&error];
}
-- (void)setTimeStamp:(NSArray<NSNumber<SDLInt> *> *)timeStamp {
+- (void)setTimeStamp:(NSArray<NSNumber *> *)timeStamp {
[self.store sdl_setObject:timeStamp forName:SDLRPCParameterNameTS];
}
-- (NSArray<NSNumber<SDLInt> *> *)timeStamp {
+- (NSArray<NSNumber *> *)timeStamp {
NSError *error = nil;
return [self.store sdl_objectsForName:SDLRPCParameterNameTS ofClass:NSNumber.class error:&error];
}
diff --git a/SmartDeviceLink/SDLTouchManager.h b/SmartDeviceLink/SDLTouchManager.h
index 7b7e65a97..c762d6822 100644
--- a/SmartDeviceLink/SDLTouchManager.h
+++ b/SmartDeviceLink/SDLTouchManager.h
@@ -33,39 +33,35 @@ typedef void(^SDLTouchEventHandler)(SDLTouch *touch, SDLTouchType type);
@property (nonatomic, weak, nullable) id<SDLTouchManagerDelegate> touchEventDelegate;
/**
- * @abstract
- * Returns all OnTouchEvent notifications as SDLTouch and SDLTouchType objects.
+ Returns all OnTouchEvent notifications as SDLTouch and SDLTouchType objects.
*/
@property (copy, nonatomic, nullable) SDLTouchEventHandler touchEventHandler;
/**
Distance between two taps on the screen, in the head unit's coordinate system, used for registering double-tap callbacks.
- @note Defaults to 50 px.
+ Defaults to 50 px.
*/
@property (nonatomic, assign) CGFloat tapDistanceThreshold;
/**
Minimum distance for a pan gesture in the head unit's coordinate system, used for registering pan callbacks.
- @note Defaults to 8 px.
+ Defaults to 8 px.
*/
@property (nonatomic, assign) CGFloat panDistanceThreshold;
/**
- * @abstract
- * Time (in seconds) between tap events to register a double-tap callback.
- * @remark
- * Default is 0.4 seconds.
+ Time (in seconds) between tap events to register a double-tap callback. This must be greater than 0.0.
+
+ Default is 0.4 seconds.
*/
@property (nonatomic, assign) CGFloat tapTimeThreshold;
/**
- * @abstract
- * Time (in seconds) between movement events to register panning or pinching
- * callbacks.
- * @remark
- * Default is 0.05 seconds.
+ Time (in seconds) between movement events to register panning or pinching callbacks.
+
+ Default is 0.05 seconds.
*/
@property (nonatomic, assign) CGFloat movementTimeThreshold __deprecated_msg("This is now unused, the movement time threshold is now synced to the framerate automatically");
@@ -75,19 +71,16 @@ typedef void(^SDLTouchEventHandler)(SDLTouch *touch, SDLTouchType type);
@property (assign, nonatomic) BOOL enableSyncedPanning;
/**
- * @abstract
- * Boolean denoting whether or not the touch manager should deliver touch event
- * callbacks.
- * @remark
- * Default is true.
+ Boolean denoting whether or not the touch manager should deliver touch event callbacks.
+
+ Default is true.
*/
@property (nonatomic, assign, getter=isTouchEnabled) BOOL touchEnabled;
/**
- * @abstract
- * Cancels pending touch event timers that may be in progress.
- * @remark
- * Currently only impacts the timer used to register single taps.
+ Cancels pending touch event timers that may be in progress.
+
+ Currently only impacts the timer used to register single taps.
*/
- (void)cancelPendingTouches;
diff --git a/SmartDeviceLink/SDLTouchManager.m b/SmartDeviceLink/SDLTouchManager.m
index 50209940e..242f4e46e 100644
--- a/SmartDeviceLink/SDLTouchManager.m
+++ b/SmartDeviceLink/SDLTouchManager.m
@@ -15,9 +15,9 @@
#import "SDLNotificationConstants.h"
#import "SDLOnTouchEvent.h"
#import "SDLPinchGesture.h"
-#import "SDLProxyListener.h"
#import "SDLRPCNotificationNotification.h"
#import "SDLStreamingVideoScaleManager.h"
+#import "SDLTimer.h"
#import "SDLTouch.h"
#import "SDLTouchCoord.h"
#import "SDLTouchEvent.h"
@@ -74,7 +74,7 @@ static NSUInteger const MaximumNumberOfTouches = 2;
* @abstract
* Timer used for distinguishing between single & double taps.
*/
-@property (nonatomic, strong, nullable) NSTimer *singleTapTimer;
+@property (nonatomic, strong, nullable) SDLTimer *singleTapTimer;
/*!
* @abstract
@@ -447,8 +447,12 @@ static NSUInteger const MaximumNumberOfTouches = 2;
[self sdl_cancelSingleTapTimer];
}
- self.singleTapTimer = [NSTimer timerWithTimeInterval:self.tapTimeThreshold target:self selector:@selector(sdl_singleTapTimerCallback:) userInfo:@{@"point": [NSValue valueWithCGPoint:point]} repeats:NO];
- [[NSRunLoop mainRunLoop] addTimer:self.singleTapTimer forMode:NSRunLoopCommonModes];
+ __weak typeof(self) weakSelf = self;
+ self.singleTapTimer = [[SDLTimer alloc] initWithDuration:self.tapTimeThreshold];
+ self.singleTapTimer.elapsedBlock = ^{
+ [weakSelf sdl_singleTapTimerCallbackWithPoint:point];
+ };
+ [self.singleTapTimer start];
}
/**
@@ -456,10 +460,9 @@ static NSUInteger const MaximumNumberOfTouches = 2;
This is called on the main thread based on `sdl_initializeSingleTapTimerAtPoint:`
- @param timer The timer that was fired
+ @param point The point where the tap occurred
*/
-- (void)sdl_singleTapTimerCallback:(NSTimer *)timer {
- CGPoint point = ((NSValue *)timer.userInfo[@"point"]).CGPointValue;
+- (void)sdl_singleTapTimerCallbackWithPoint:(CGPoint)point {
self.singleTapTouch = nil;
[self sdl_cancelSingleTapTimer];
if ([self.touchEventDelegate respondsToSelector:@selector(touchManager:didReceiveSingleTapForView:atPoint:)]) {
@@ -476,8 +479,8 @@ static NSUInteger const MaximumNumberOfTouches = 2;
*
* Checks if a single tap is inside a view. As the single tap timer is run on a background thread, the check is done on a main thread and then the result is returned on a background thread.
*
- * @param point Screen coordinates of the tap gesture
- * @param hitViewHandler A handler that returns the view the point is inside of; nil if the point does not lie inside of a view
+ * @param point Screen coordinates of the tap gesture
+ * @param hitViewHandler A handler that returns the view the point is inside of; nil if the point does not lie inside of a view
*/
- (void)sdl_getSingleTapHitView:(CGPoint)point hitViewHandler:(nullable void (^)(UIView * __nullable hitView))hitViewHandler {
if (!self.hitTester) {
@@ -499,7 +502,7 @@ static NSUInteger const MaximumNumberOfTouches = 2;
return;
}
- [self.singleTapTimer invalidate];
+ [self.singleTapTimer cancel];
self.singleTapTimer = nil;
}
diff --git a/SmartDeviceLink/SDLTransportType.h b/SmartDeviceLink/SDLTransportType.h
index 5d516808d..8cfb4ec7e 100644
--- a/SmartDeviceLink/SDLTransportType.h
+++ b/SmartDeviceLink/SDLTransportType.h
@@ -11,7 +11,7 @@ NS_ASSUME_NONNULL_BEGIN
@property (nullable, weak, nonatomic) id<SDLTransportDelegate> delegate;
- (void)connect;
-- (void)disconnect;
+- (void)disconnectWithCompletionHandler:(void (^)(void))disconnectCompletionHandler;
- (void)sendData:(NSData *)dataToSend;
@end
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleData.h b/SmartDeviceLink/SDLUnsubscribeVehicleData.h
index 370f34882..0d135a163 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleData.h
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.h
@@ -50,7 +50,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Unsubscribe to wiperStatus
* @return A SDLUnsubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for unsubscribing to all possible vehicle data items.
@@ -85,7 +85,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Unsubscribe to wiperStatus
* @return A SDLUnsubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus: instead");
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
/**
* Convenience init for unsubscribing to all possible vehicle data items.
@@ -121,7 +121,42 @@ NS_ASSUME_NONNULL_BEGIN
* @param wiperStatus Unsubscribe to wiperStatus
* @return A SDLUnsubscribeVehicleData object
*/
-- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus;
+- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus __deprecated_msg("Use initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering: instead");
+
+/**
+ * Convenience init for unsubscribing from all possible vehicle data items.
+ *
+ * @param gps - gps
+ * @param speed - speed
+ * @param rpm - rpm
+ * @param instantFuelConsumption - instantFuelConsumption
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - externalTemperature
+ * @param turnSignal - turnSignal
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - engineTorque
+ * @param accPedalPosition - accPedalPosition
+ * @param steeringWheelAngle - steeringWheelAngle
+ * @param engineOilLife - engineOilLife
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModeStatus - clusterModeStatus
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLUnsubscribeVehicleData object
+ */
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering;
/**
* If true, unsubscribes from GPS
@@ -141,12 +176,12 @@ NS_ASSUME_NONNULL_BEGIN
/**
* If true, unsubscribes from Fuel Level
*/
-@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* If true, unsubscribes from Fuel Level State
*/
-@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State;
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *fuelLevel_State __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
* If true, unsubscribes from Fuel Range
@@ -204,6 +239,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *wiperStatus;
/**
+ * To indicate whether driver hands are off the steering wheel
+ */
+@property (strong, nonatomic, nullable) NSNumber<SDLBool> *handsOffSteering;
+
+/**
* If true, unsubscribes from Head Lamp Status
*/
@property (strong, nonatomic, nullable) NSNumber<SDLBool> *headLampStatus;
@@ -270,7 +310,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@param vehicleDataState A boolean value. If true, requests an unsubscribes of the OEM custom vehicle data item.
@@ -280,7 +320,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item to unsubscribe for.
@return A boolean value indicating if an unsubscribe request will occur for the OEM custom vehicle data item.
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleData.m b/SmartDeviceLink/SDLUnsubscribeVehicleData.m
index e83148be0..978b12a17 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleData.m
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleData.m
@@ -15,56 +15,83 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameUnsubscribeVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameUnsubscribeVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo emergencyEvent:(BOOL)emergencyEvent engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:NO emergencyEvent:emergencyEvent engineOilLife:NO engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:NO gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:NO wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:nil externalTemperature:@(externalTemperature) turnSignal:nil prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:nil electronicParkBrakeStatus:nil cloudAppVehicleID:nil eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
- return [self initWithAccelerationPedalPosition:accelerationPedalPosition airbagStatus:airbagStatus beltStatus:beltStatus bodyInformation:bodyInformation cloudAppVehicleID:NO clusterModeStatus:clusterModeStatus deviceStatus:deviceStatus driverBraking:driverBraking eCallInfo:eCallInfo electronicParkBrakeStatus:electronicParkBrakeStatus emergencyEvent:emergencyEvent engineOilLife:engineOilLife engineTorque:engineTorque externalTemperature:externalTemperature fuelLevel:fuelLevel fuelLevelState:fuelLevelState fuelRange:fuelRange gps:gps headLampStatus:headLampStatus instantFuelConsumption:instantFuelConsumption myKey:myKey odometer:odometer prndl:prndl rpm:rpm speed:speed steeringWheelAngle:steeringWheelAngle tirePressure:tirePressure turnSignal:turnSignal wiperStatus:wiperStatus];
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:nil eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
}
- (instancetype)initWithAccelerationPedalPosition:(BOOL)accelerationPedalPosition airbagStatus:(BOOL)airbagStatus beltStatus:(BOOL)beltStatus bodyInformation:(BOOL)bodyInformation cloudAppVehicleID:(BOOL)cloudAppVehicleID clusterModeStatus:(BOOL)clusterModeStatus deviceStatus:(BOOL)deviceStatus driverBraking:(BOOL)driverBraking eCallInfo:(BOOL)eCallInfo electronicParkBrakeStatus:(BOOL)electronicParkBrakeStatus emergencyEvent:(BOOL)emergencyEvent engineOilLife:(BOOL)engineOilLife engineTorque:(BOOL)engineTorque externalTemperature:(BOOL)externalTemperature fuelLevel:(BOOL)fuelLevel fuelLevelState:(BOOL)fuelLevelState fuelRange:(BOOL)fuelRange gps:(BOOL)gps headLampStatus:(BOOL)headLampStatus instantFuelConsumption:(BOOL)instantFuelConsumption myKey:(BOOL)myKey odometer:(BOOL)odometer prndl:(BOOL)prndl rpm:(BOOL)rpm speed:(BOOL)speed steeringWheelAngle:(BOOL)steeringWheelAngle tirePressure:(BOOL)tirePressure turnSignal:(BOOL)turnSignal wiperStatus:(BOOL)wiperStatus {
+ self = [self initWithGps:@(gps) speed:@(speed) rpm:@(rpm) instantFuelConsumption:@(instantFuelConsumption) fuelRange:@(fuelRange) externalTemperature:@(externalTemperature) turnSignal:@(turnSignal) prndl:@(prndl) tirePressure:@(tirePressure) odometer:@(odometer) beltStatus:@(beltStatus) bodyInformation:@(bodyInformation) deviceStatus:@(deviceStatus) driverBraking:@(driverBraking) wiperStatus:@(wiperStatus) headLampStatus:@(headLampStatus) engineTorque:@(engineTorque) accPedalPosition:@(accelerationPedalPosition) steeringWheelAngle:@(steeringWheelAngle) engineOilLife:@(engineOilLife) electronicParkBrakeStatus:@(electronicParkBrakeStatus) cloudAppVehicleID:@(cloudAppVehicleID) eCallInfo:@(eCallInfo) airbagStatus:@(airbagStatus) emergencyEvent:@(emergencyEvent) clusterModeStatus:@(clusterModeStatus) myKey:@(myKey) handsOffSteering:nil];
+ if (self) {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ self.fuelLevel = @(fuelLevel);
+ self.fuelLevel_State = @(fuelLevelState);
+#pragma clang diagnostic pop
+ }
+ return self;
+}
+
+- (instancetype)initWithGps:(nullable NSNumber<SDLBool> *)gps speed:(nullable NSNumber<SDLBool> *)speed rpm:(nullable NSNumber<SDLBool> *)rpm instantFuelConsumption:(nullable NSNumber<SDLBool> *)instantFuelConsumption fuelRange:(nullable NSNumber<SDLBool> *)fuelRange externalTemperature:(nullable NSNumber<SDLBool> *)externalTemperature turnSignal:(nullable NSNumber<SDLBool> *)turnSignal prndl:(nullable NSNumber<SDLBool> *)prndl tirePressure:(nullable NSNumber<SDLBool> *)tirePressure odometer:(nullable NSNumber<SDLBool> *)odometer beltStatus:(nullable NSNumber<SDLBool> *)beltStatus bodyInformation:(nullable NSNumber<SDLBool> *)bodyInformation deviceStatus:(nullable NSNumber<SDLBool> *)deviceStatus driverBraking:(nullable NSNumber<SDLBool> *)driverBraking wiperStatus:(nullable NSNumber<SDLBool> *)wiperStatus headLampStatus:(nullable NSNumber<SDLBool> *)headLampStatus engineTorque:(nullable NSNumber<SDLBool> *)engineTorque accPedalPosition:(nullable NSNumber<SDLBool> *)accPedalPosition steeringWheelAngle:(nullable NSNumber<SDLBool> *)steeringWheelAngle engineOilLife:(nullable NSNumber<SDLBool> *)engineOilLife electronicParkBrakeStatus:(nullable NSNumber<SDLBool> *)electronicParkBrakeStatus cloudAppVehicleID:(nullable NSNumber<SDLBool> *)cloudAppVehicleID eCallInfo:(nullable NSNumber<SDLBool> *)eCallInfo airbagStatus:(nullable NSNumber<SDLBool> *)airbagStatus emergencyEvent:(nullable NSNumber<SDLBool> *)emergencyEvent clusterModeStatus:(nullable NSNumber<SDLBool> *)clusterModeStatus myKey:(nullable NSNumber<SDLBool> *)myKey handsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
self = [self init];
if (!self) {
return nil;
}
-
- self.accPedalPosition = @(accelerationPedalPosition);
- self.airbagStatus = @(airbagStatus);
- self.beltStatus = @(beltStatus);
- self.bodyInformation = @(bodyInformation);
- self.cloudAppVehicleID = @(cloudAppVehicleID);
- self.clusterModeStatus = @(clusterModeStatus);
- self.deviceStatus = @(deviceStatus);
- self.driverBraking = @(driverBraking);
- self.eCallInfo = @(eCallInfo);
- self.electronicParkBrakeStatus = @(electronicParkBrakeStatus);
- self.emergencyEvent = @(emergencyEvent);
- self.engineOilLife = @(engineOilLife);
- self.engineTorque = @(engineTorque);
- self.externalTemperature = @(externalTemperature);
- self.fuelLevel = @(fuelLevel);
- self.fuelLevel_State = @(fuelLevelState);
- self.fuelRange = @(fuelRange);
- self.myKey = @(myKey);
- self.odometer = @(odometer);
- self.gps = @(gps);
- self.headLampStatus = @(headLampStatus);
- self.instantFuelConsumption = @(instantFuelConsumption);
- self.prndl = @(prndl);
- self.rpm = @(rpm);
- self.speed = @(speed);
- self.steeringWheelAngle = @(steeringWheelAngle);
- self.tirePressure = @(tirePressure);
- self.turnSignal = @(turnSignal);
- self.wiperStatus = @(wiperStatus);
-
+ self.gps = gps;
+ self.speed = speed;
+ self.rpm = rpm;
+ self.instantFuelConsumption = instantFuelConsumption;
+ self.fuelRange = fuelRange;
+ self.externalTemperature = externalTemperature;
+ self.turnSignal = turnSignal;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = engineTorque;
+ self.accPedalPosition = accPedalPosition;
+ self.steeringWheelAngle = steeringWheelAngle;
+ self.engineOilLife = engineOilLife;
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModeStatus = clusterModeStatus;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
return self;
}
@@ -308,6 +335,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:NSNumber.class error:nil];
}
+- (void)setHandsOffSteering:(nullable NSNumber<SDLBool> *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable NSNumber<SDLBool> *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:NSNumber.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
index da07d6616..0e4a2c299 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.h
@@ -16,6 +16,41 @@ NS_ASSUME_NONNULL_BEGIN
@interface SDLUnsubscribeVehicleDataResponse : SDLRPCResponse
/**
+ * Convenience init for setting all data on vehicle data items.
+ *
+ * @param gps - gps
+ * @param speed - speed
+ * @param rpm - rpm
+ * @param instantFuelConsumption - instantFuelConsumption
+ * @param fuelRange - fuelRange
+ * @param externalTemperature - externalTemperature
+ * @param turnSignal - turnSignal
+ * @param prndl - prndl
+ * @param tirePressure - tirePressure
+ * @param odometer - odometer
+ * @param beltStatus - beltStatus
+ * @param bodyInformation - bodyInformation
+ * @param deviceStatus - deviceStatus
+ * @param driverBraking - driverBraking
+ * @param wiperStatus - wiperStatus
+ * @param headLampStatus - headLampStatus
+ * @param engineTorque - engineTorque
+ * @param accPedalPosition - accPedalPosition
+ * @param steeringWheelAngle - steeringWheelAngle
+ * @param engineOilLife - engineOilLife
+ * @param electronicParkBrakeStatus - electronicParkBrakeStatus
+ * @param cloudAppVehicleID - cloudAppVehicleID
+ * @param eCallInfo - eCallInfo
+ * @param airbagStatus - airbagStatus
+ * @param emergencyEvent - emergencyEvent
+ * @param clusterModes - clusterModes
+ * @param myKey - myKey
+ * @param handsOffSteering - handsOffSteering
+ * @return A SDLUnsubscribeVehicleDataResponse object
+ */
+- (instancetype)initWithGps:(nullable SDLVehicleDataResult *)gps speed:(nullable SDLVehicleDataResult *)speed rpm:(nullable SDLVehicleDataResult *)rpm instantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption fuelRange:(nullable SDLVehicleDataResult *)fuelRange externalTemperature:(nullable SDLVehicleDataResult *)externalTemperature turnSignal:(nullable SDLVehicleDataResult *)turnSignal prndl:(nullable SDLVehicleDataResult *)prndl tirePressure:(nullable SDLVehicleDataResult *)tirePressure odometer:(nullable SDLVehicleDataResult *)odometer beltStatus:(nullable SDLVehicleDataResult *)beltStatus bodyInformation:(nullable SDLVehicleDataResult *)bodyInformation deviceStatus:(nullable SDLVehicleDataResult *)deviceStatus driverBraking:(nullable SDLVehicleDataResult *)driverBraking wiperStatus:(nullable SDLVehicleDataResult *)wiperStatus headLampStatus:(nullable SDLVehicleDataResult *)headLampStatus engineTorque:(nullable SDLVehicleDataResult *)engineTorque accPedalPosition:(nullable SDLVehicleDataResult *)accPedalPosition steeringWheelAngle:(nullable SDLVehicleDataResult *)steeringWheelAngle engineOilLife:(nullable SDLVehicleDataResult *)engineOilLife electronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus cloudAppVehicleID:(nullable SDLVehicleDataResult *)cloudAppVehicleID eCallInfo:(nullable SDLVehicleDataResult *)eCallInfo airbagStatus:(nullable SDLVehicleDataResult *)airbagStatus emergencyEvent:(nullable SDLVehicleDataResult *)emergencyEvent clusterModes:(nullable SDLVehicleDataResult *)clusterModes myKey:(nullable SDLVehicleDataResult *)myKey handsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering;
+
+/**
The result of requesting to unsubscribe to the GPSData.
Optional
@@ -41,14 +76,14 @@ NS_ASSUME_NONNULL_BEGIN
Optional
*/
-@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel;
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
The result of requesting to unsubscribe to the fuel level state.
Optional
*/
-@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State;
+@property (strong, nonatomic, nullable) SDLVehicleDataResult *fuelLevel_State __deprecated_msg("use fuelRange instead on 7.0+ RPC version connections");
/**
The result of requesting to unsubscribe to the fuel range.
@@ -128,6 +163,11 @@ NS_ASSUME_NONNULL_BEGIN
@property (strong, nonatomic, nullable) SDLVehicleDataResult *wiperStatus;
/**
+ The result of requesting to unsubscribe from the status of driver hands are off the steering wheel
+ */
+@property (nullable, strong, nonatomic) SDLVehicleDataResult *handsOffSteering;
+
+/**
The result of requesting to unsubscribe to the status of the head lamps.
Optional
@@ -220,7 +260,7 @@ NS_ASSUME_NONNULL_BEGIN
/**
Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.
-
+
@param vehicleDataName The name of the OEM custom vehicle data item.
@param vehicleDataState SDLVehicleDataResult object containing custom data type and result code information.
diff --git a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
index b86423085..4abed6683 100644
--- a/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
+++ b/SmartDeviceLink/SDLUnsubscribeVehicleDataResponse.m
@@ -16,12 +16,50 @@ NS_ASSUME_NONNULL_BEGIN
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- (instancetype)init {
- if (self = [super initWithName:SDLRPCFunctionNameUnsubscribeVehicleData]) {
+ self = [super initWithName:SDLRPCFunctionNameUnsubscribeVehicleData];
+ if (!self) {
+ return nil;
}
return self;
}
#pragma clang diagnostic pop
+- (instancetype)initWithGps:(nullable SDLVehicleDataResult *)gps speed:(nullable SDLVehicleDataResult *)speed rpm:(nullable SDLVehicleDataResult *)rpm instantFuelConsumption:(nullable SDLVehicleDataResult *)instantFuelConsumption fuelRange:(nullable SDLVehicleDataResult *)fuelRange externalTemperature:(nullable SDLVehicleDataResult *)externalTemperature turnSignal:(nullable SDLVehicleDataResult *)turnSignal prndl:(nullable SDLVehicleDataResult *)prndl tirePressure:(nullable SDLVehicleDataResult *)tirePressure odometer:(nullable SDLVehicleDataResult *)odometer beltStatus:(nullable SDLVehicleDataResult *)beltStatus bodyInformation:(nullable SDLVehicleDataResult *)bodyInformation deviceStatus:(nullable SDLVehicleDataResult *)deviceStatus driverBraking:(nullable SDLVehicleDataResult *)driverBraking wiperStatus:(nullable SDLVehicleDataResult *)wiperStatus headLampStatus:(nullable SDLVehicleDataResult *)headLampStatus engineTorque:(nullable SDLVehicleDataResult *)engineTorque accPedalPosition:(nullable SDLVehicleDataResult *)accPedalPosition steeringWheelAngle:(nullable SDLVehicleDataResult *)steeringWheelAngle engineOilLife:(nullable SDLVehicleDataResult *)engineOilLife electronicParkBrakeStatus:(nullable SDLVehicleDataResult *)electronicParkBrakeStatus cloudAppVehicleID:(nullable SDLVehicleDataResult *)cloudAppVehicleID eCallInfo:(nullable SDLVehicleDataResult *)eCallInfo airbagStatus:(nullable SDLVehicleDataResult *)airbagStatus emergencyEvent:(nullable SDLVehicleDataResult *)emergencyEvent clusterModes:(nullable SDLVehicleDataResult *)clusterModes myKey:(nullable SDLVehicleDataResult *)myKey handsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering {
+ self = [self init];
+ if (!self) {
+ return nil;
+ }
+ self.gps = gps;
+ self.speed = speed;
+ self.rpm = rpm;
+ self.instantFuelConsumption = instantFuelConsumption;
+ self.fuelRange = fuelRange;
+ self.externalTemperature = externalTemperature;
+ self.turnSignal = turnSignal;
+ self.prndl = prndl;
+ self.tirePressure = tirePressure;
+ self.odometer = odometer;
+ self.beltStatus = beltStatus;
+ self.bodyInformation = bodyInformation;
+ self.deviceStatus = deviceStatus;
+ self.driverBraking = driverBraking;
+ self.wiperStatus = wiperStatus;
+ self.headLampStatus = headLampStatus;
+ self.engineTorque = engineTorque;
+ self.accPedalPosition = accPedalPosition;
+ self.steeringWheelAngle = steeringWheelAngle;
+ self.engineOilLife = engineOilLife;
+ self.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ self.cloudAppVehicleID = cloudAppVehicleID;
+ self.eCallInfo = eCallInfo;
+ self.airbagStatus = airbagStatus;
+ self.emergencyEvent = emergencyEvent;
+ self.clusterModes = clusterModes;
+ self.myKey = myKey;
+ self.handsOffSteering = handsOffSteering;
+ return self;
+}
+
- (void)setGps:(nullable SDLVehicleDataResult *)gps {
[self.parameters sdl_setObject:gps forName:SDLRPCParameterNameGPS];
}
@@ -262,6 +300,15 @@ NS_ASSUME_NONNULL_BEGIN
return [self.parameters sdl_objectForName:vehicleDataName ofClass:SDLVehicleDataResult.class error:nil];
}
+- (void)setHandsOffSteering:(nullable SDLVehicleDataResult *)handsOffSteering {
+ [self.parameters sdl_setObject:handsOffSteering forName:SDLRPCParameterNameHandsOffSteering];
+}
+
+- (nullable SDLVehicleDataResult *)handsOffSteering {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameHandsOffSteering ofClass:SDLVehicleDataResult.class error:&error];
+}
+
@end
NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/SDLVehicleDataType.h b/SmartDeviceLink/SDLVehicleDataType.h
index e65cdcef9..8343aa567 100644
--- a/SmartDeviceLink/SDLVehicleDataType.h
+++ b/SmartDeviceLink/SDLVehicleDataType.h
@@ -27,12 +27,12 @@ extern SDLVehicleDataType const SDLVehicleDataTypeRPM;
/**
Vehicle fuel level data
*/
-extern SDLVehicleDataType const SDLVehicleDataTypeFuelLevel;
+extern SDLVehicleDataType const SDLVehicleDataTypeFuelLevel __deprecated_msg("use SDLVehicleDataTypeFuelRange on RPC 7.0+ connections");
/**
Vehicle fuel level state data
*/
-extern SDLVehicleDataType const SDLVehicleDataTypeFuelLevelState;
+extern SDLVehicleDataType const SDLVehicleDataTypeFuelLevelState __deprecated_msg("use SDLVehicleDataTypeFuelRange on RPC 7.0+ connections");
/**
Vehicle fuel consumption data
@@ -120,6 +120,12 @@ extern SDLVehicleDataType const SDLVehicleDataTypeBraking;
extern SDLVehicleDataType const SDLVehicleDataTypeWiperStatus;
/**
+ To indicate whether driver hands are off the steering wheel
+ Added in SDL 7.0.0
+ */
+extern SDLVehicleDataType const SDLVehicleDataTypeHandsOffSteering;
+
+/**
Vehicle headlamp status
*/
extern SDLVehicleDataType const SDLVehicleDataTypeHeadlampStatus;
diff --git a/SmartDeviceLink/SDLVehicleDataType.m b/SmartDeviceLink/SDLVehicleDataType.m
index 895613873..a9436587e 100644
--- a/SmartDeviceLink/SDLVehicleDataType.m
+++ b/SmartDeviceLink/SDLVehicleDataType.m
@@ -36,4 +36,4 @@ SDLVehicleDataType const SDLVehicleDataTypeElectronicParkBrakeStatus = @"VEHICLE
SDLVehicleDataType const SDLVehicleDataTypeTurnSignal = @"VEHICLEDATA_TURNSIGNAL";
SDLVehicleDataType const SDLVehicleDataTypeCloudAppVehicleID = @"VEHICLEDATA_CLOUDAPPVEHICLEID";
SDLVehicleDataType const SDLVehicleDataTypeOEMVehicleDataType = @"VEHICLEDATA_OEM_CUSTOM_DATA";
-
+SDLVehicleDataType const SDLVehicleDataTypeHandsOffSteering = @"VEHICLEDATA_HANDSOFFSTEERING";
diff --git a/SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.h b/SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.h
index 14bfc9ffa..9321c98cd 100644
--- a/SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.h
+++ b/SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.h
@@ -14,7 +14,7 @@
NS_ASSUME_NONNULL_BEGIN
-@interface SDLWindowCapability (ShowManagerExtensions)
+@interface SDLWindowCapability (ScreenManagerExtensions)
@property (assign, nonatomic, readonly) NSUInteger maxNumberOfMainFieldLines;
diff --git a/SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.m b/SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.m
index c6b808e22..441356a83 100644
--- a/SmartDeviceLink/SDLWindowCapability+ShowManagerExtensions.m
+++ b/SmartDeviceLink/SDLWindowCapability+ScreenManagerExtensions.m
@@ -8,11 +8,11 @@
// Copyright © 2019 smartdevicelink. All rights reserved.
//
-#import "SDLWindowCapability+ShowManagerExtensions.h"
+#import "SDLWindowCapability+ScreenManagerExtensions.h"
#import "SDLImageField.h"
#import "SDLTextField.h"
-@implementation SDLWindowCapability (ShowManagerExtension)
+@implementation SDLWindowCapability (ScreenManagerExtensions)
- (BOOL)hasTextFieldOfName:(SDLTextFieldName)name {
for (SDLTextField *textField in self.textFields) {
diff --git a/SmartDeviceLink/SDLWindowCapability.h b/SmartDeviceLink/SDLWindowCapability.h
index a68eb0127..8360416b2 100644
--- a/SmartDeviceLink/SDLWindowCapability.h
+++ b/SmartDeviceLink/SDLWindowCapability.h
@@ -68,14 +68,14 @@ NS_ASSUME_NONNULL_BEGIN
Size: min 1 max 100
*/
-@property (nullable, strong, nonatomic) NSArray<SDLButtonCapabilities *> *buttonCapabilities;
+@property (nullable, strong, nonatomic) NSArray<SDLButtonCapabilities *> *buttonCapabilities;
/**
The number of soft buttons available on-window and the capabilities for each button.
Size: min 1 max 100
*/
-@property (nullable, strong, nonatomic) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
+@property (nullable, strong, nonatomic) NSArray<SDLSoftButtonCapabilities *> *softButtonCapabilities;
/**
An array of available menu layouts. If this parameter is not provided, only the `LIST` layout is assumed to be available.
diff --git a/SmartDeviceLink/SmartDeviceLink.h b/SmartDeviceLink/SmartDeviceLink.h
index 542c2a208..cb305d759 100644
--- a/SmartDeviceLink/SmartDeviceLink.h
+++ b/SmartDeviceLink/SmartDeviceLink.h
@@ -198,6 +198,7 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
#import "SDLDeviceStatus.h"
#import "SDLDisplayCapabilities.h"
#import "SDLDisplayCapability.h"
+#import "SDLDriverDistractionCapability.h"
#import "SDLECallInfo.h"
#import "SDLEmergencyEvent.h"
#import "SDLFuelRange.h"
@@ -435,6 +436,8 @@ FOUNDATION_EXPORT const unsigned char SmartDeviceLinkVersionString[];
// Permissions
#import "SDLPermissionConstants.h"
+#import "SDLPermissionElement.h"
+#import "SDLRPCPermissionStatus.h"
#import "SDLPermissionManager.h"
// Screen
diff --git a/SmartDeviceLink/TestSubscribeButtonObserver.h b/SmartDeviceLink/TestSubscribeButtonObserver.h
new file mode 100644
index 000000000..f2cde7318
--- /dev/null
+++ b/SmartDeviceLink/TestSubscribeButtonObserver.h
@@ -0,0 +1,34 @@
+//
+// TestSubscribeButtonObserver.h
+// SmartDeviceLink
+//
+// Created by Nicole on 6/22/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLSubscribeButton.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TestSubscribeButtonObserver : NSObject
+
+@property (assign, nonatomic) NSUInteger selectorCalledCount;
+@property (strong, nonatomic, nullable) NSMutableArray<SDLButtonName> *buttonNamesReceived;
+@property (strong, nonatomic, nullable) NSMutableArray<NSError *> *buttonErrorsReceived;
+@property (strong, nonatomic, nullable) NSMutableArray<SDLOnButtonEvent *> *buttonEventsReceived;
+@property (strong, nonatomic, nullable) NSMutableArray<SDLOnButtonPress *> *buttonPressesReceived;
+
+- (void)buttonPressEvent;
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName;
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error;
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress;
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress buttonEvent:(SDLOnButtonEvent *)buttonEvent;
+
+/// An invalid selector with too many parameters
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress buttonEvent:(SDLOnButtonEvent *)buttonEvent extraParameter:(BOOL)extraParameter;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink/TestSubscribeButtonObserver.m b/SmartDeviceLink/TestSubscribeButtonObserver.m
new file mode 100644
index 000000000..99f9f44b9
--- /dev/null
+++ b/SmartDeviceLink/TestSubscribeButtonObserver.m
@@ -0,0 +1,70 @@
+//
+// TestSubscribeButtonObserver.m
+// SmartDeviceLink
+//
+// Created by Nicole on 6/22/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "TestSubscribeButtonObserver.h"
+
+@implementation TestSubscribeButtonObserver
+
+- (instancetype)init {
+ self = [super init];
+ if (!self) { return nil; }
+
+ _selectorCalledCount = 0;
+ _buttonNamesReceived = [NSMutableArray<SDLButtonName> array];
+ _buttonErrorsReceived = [NSMutableArray<NSError *> array];
+ _buttonEventsReceived = [NSMutableArray<SDLOnButtonEvent *> array];
+ _buttonPressesReceived = [NSMutableArray<SDLOnButtonPress *> array];
+
+ return self;
+}
+
+- (void)buttonPressEvent {
+ [self sdl_saveButtonName:nil buttonError:nil buttonPress:nil buttonEvent:nil];
+}
+
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName {
+ [self sdl_saveButtonName:buttonName buttonError:nil buttonPress:nil buttonEvent:nil];
+}
+
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error {
+ [self sdl_saveButtonName:buttonName buttonError:error buttonPress:nil buttonEvent:nil];
+}
+
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress {
+ [self sdl_saveButtonName:buttonName buttonError:error buttonPress:buttonPress buttonEvent:nil];
+}
+
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress buttonEvent:(SDLOnButtonEvent *)buttonEvent {
+ [self sdl_saveButtonName:buttonName buttonError:error buttonPress:buttonPress buttonEvent:buttonEvent];
+}
+
+- (void)buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress buttonEvent:(SDLOnButtonEvent *)buttonEvent extraParameter:(BOOL)extraParameter {
+ [self sdl_saveButtonName:buttonName buttonError:error buttonPress:buttonPress buttonEvent:buttonEvent];
+}
+
+- (void)sdl_saveButtonName:(nullable SDLButtonName)buttonName buttonError:(nullable NSError *)buttonError buttonPress:(nullable SDLOnButtonPress *)buttonPress buttonEvent:(nullable SDLOnButtonEvent *)buttonEvent {
+ self.selectorCalledCount++;
+
+ if (buttonName != nil) {
+ [self.buttonNamesReceived addObject:buttonName];
+ }
+
+ if (buttonError != nil) {
+ [self.buttonErrorsReceived addObject:buttonError];
+ }
+
+ if (buttonPress != nil) {
+ [self.buttonPressesReceived addObject:buttonPress];
+ }
+
+ if (buttonEvent != nil) {
+ [self.buttonEventsReceived addObject:buttonEvent];
+ }
+}
+
+@end
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLAudioStreamManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLAudioStreamManagerSpec.m
index e538122f5..1341fc916 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLAudioStreamManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLAudioStreamManagerSpec.m
@@ -2,6 +2,7 @@
#import <Nimble/Nimble.h>
#import "SDLAudioStreamManager.h"
+#import "SDLError.h"
#import "SDLStreamingAudioManagerMock.h"
QuickSpecBegin(SDLAudioStreamManagerSpec)
@@ -32,8 +33,6 @@ describe(@"the audio stream manager", ^{
beforeEach(^{
mockAudioManager.audioConnected = NO;
[testManager pushWithFileURL:testAudioFileURL];
-
- [NSThread sleepForTimeInterval:0.5];
});
describe(@"after attempting to play the file", ^{
@@ -43,7 +42,7 @@ describe(@"the audio stream manager", ^{
});
it(@"should fail to send data", ^{
- expect(mockAudioManager.dataSinceClear.length).to(equal(0));
+ expect(mockAudioManager.dataSinceClear.length).toEventually(equal(0));
expect(mockAudioManager.error.code).toEventually(equal(SDLAudioStreamManagerErrorNotConnected));
});
});
@@ -53,8 +52,6 @@ describe(@"the audio stream manager", ^{
beforeEach(^{
mockAudioManager.audioConnected = NO;
[testManager pushWithData:testAudioFileData];
-
- [NSThread sleepForTimeInterval:0.5];
});
describe(@"after attempting to play the file", ^{
@@ -64,7 +61,7 @@ describe(@"the audio stream manager", ^{
});
it(@"should fail to send data", ^{
- expect(mockAudioManager.dataSinceClear.length).to(equal(0));
+ expect(mockAudioManager.dataSinceClear.length).toEventually(equal(0));
expect(mockAudioManager.error.code).toEventually(equal(SDLAudioStreamManagerErrorNotConnected));
});
});
@@ -75,27 +72,27 @@ describe(@"the audio stream manager", ^{
beforeEach(^{
mockAudioManager.audioConnected = YES;
[testManager pushWithFileURL:testAudioFileURL];
-
- [NSThread sleepForTimeInterval:0.5];
});
it(@"should have a file in the queue", ^{
- expect(testManager.queue).toNot(beEmpty());
+ expect(testManager.queue).toEventuallyNot(beEmpty());
});
describe(@"after attempting to play the file", ^{
beforeEach(^{
[mockAudioManager clearData];
[testManager playNextWhenReady];
-
- [NSThread sleepForTimeInterval:1.0];
});
it(@"should be sending data", ^{
expect(testManager.isPlaying).toEventually(beTrue());
expect(mockAudioManager.dataSinceClear.length).toEventually(equal(34380));
- // Fails when it shouldn't, `weakself` goes to nil in `sdl_playNextWhenReady`
+ // wait for the delegate to be called when the audio finishes
+ float waitTime = 1.1 + 0.25; // length of audio in testAudioFileURL + 0.25 buffer
+ NSLog(@"Please wait %f for audio file to finish playing...", waitTime);
+ [NSThread sleepForTimeInterval:waitTime];
+
expect(mockAudioManager.finishedPlaying).toEventually(beTrue());
});
});
@@ -115,12 +112,10 @@ describe(@"the audio stream manager", ^{
beforeEach(^{
mockAudioManager.audioConnected = YES;
[testManager pushWithData:testAudioFileData];
-
- [NSThread sleepForTimeInterval:0.5];
});
it(@"should have a file in the queue", ^{
- expect(testManager.queue).toNot(beEmpty());
+ expect(testManager.queue).toEventuallyNot(beEmpty());
});
describe(@"after attempting to play the audio buffer", ^{
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m
index 40edaeed3..47156d1c0 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLChoiceSetManagerSpec.m
@@ -95,7 +95,7 @@ describe(@"choice set manager tests", ^{
testCell3 = [[SDLChoiceCell alloc] initWithText:@"test3"];
enabledWindowCapability = [[SDLWindowCapability alloc] init];
- enabledWindowCapability.textFields = @[[[SDLTextField alloc] initWithName:SDLTextFieldNameMenuName characterSet:SDLCharacterSetType5 width:500 rows:1]];
+ enabledWindowCapability.textFields = @[[[SDLTextField alloc] initWithName:SDLTextFieldNameMenuName characterSet:SDLCharacterSetUtf8 width:500 rows:1]];
disabledWindowCapability = [[SDLWindowCapability alloc] init];
disabledWindowCapability.textFields = @[];
blankWindowCapability = [[SDLWindowCapability alloc] init];
@@ -216,6 +216,11 @@ describe(@"choice set manager tests", ^{
it(@"should shutdown", ^{
expect(testManager.currentState).to(equal(SDLChoiceManagerStateShutdown));
+ expect(testManager.vrOptional).to(beTrue());
+ expect(testManager.currentHMILevel).to(equal(SDLHMILevelNone));
+ expect(testManager.pendingPresentationSet).to(beNil());
+ expect(testManager.preloadedMutableChoices).to(beEmpty());
+ expect(testManager.pendingMutablePreloadChoices).to(beEmpty());
});
});
});
@@ -273,6 +278,34 @@ describe(@"choice set manager tests", ^{
expect(testManager.pendingPreloadChoices).to(haveCount(1));
});
});
+
+ context(@"when the manager shuts down during preloading", ^{
+ beforeEach(^{
+ testManager.pendingMutablePreloadChoices = [NSMutableSet setWithArray:@[testCell1]];
+
+ [testManager preloadChoices:@[testCell1, testCell2, testCell3] withCompletionHandler:^(NSError * _Nullable error) {
+ }];
+ });
+
+ it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{
+ expect(testManager.pendingPreloadChoices).to(contain(testCell1));
+ expect(testManager.pendingPreloadChoices).to(contain(testCell2));
+ expect(testManager.pendingPreloadChoices).to(contain(testCell3));
+ expect(testManager.transactionQueue.operations.firstObject).to(beAnInstanceOf([SDLPreloadChoicesOperation class]));
+
+ [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO];
+ testManager.pendingMutablePreloadChoices = [NSMutableSet set];
+ testManager.preloadedMutableChoices = [NSMutableSet set];
+
+ SDLPreloadChoicesOperation *testOp = testManager.transactionQueue.operations.firstObject;
+ testOp.completionBlock();
+
+ expect(testManager.preloadedMutableChoices).to(beEmpty());
+ expect(testManager.preloadedChoices).to(beEmpty());
+ expect(testManager.pendingMutablePreloadChoices).to(beEmpty());
+ expect(testManager.pendingPreloadChoices).to(beEmpty());
+ });
+ });
});
describe(@"deleting choices", ^{
@@ -321,6 +354,40 @@ describe(@"choice set manager tests", ^{
expect(testManager.transactionQueue.operationCount).to(equal(1)); // No delete operation
});
});
+
+ context(@"when the manager shuts down during deletion", ^{
+ __block SDLPresentChoiceSetOperation *pendingPresentOp = nil;
+ __block id<SDLChoiceSetDelegate> choiceDelegate = nil;
+
+ beforeEach(^{
+ choiceDelegate = OCMProtocolMock(@protocol(SDLChoiceSetDelegate));
+ pendingPresentOp = OCMClassMock([SDLPresentChoiceSetOperation class]);
+ OCMStub(pendingPresentOp.choiceSet.choices).andReturn([NSSet setWithArray:@[testCell1]]);
+ testManager.pendingPresentOperation = pendingPresentOp;
+ testManager.pendingPresentationSet = [[SDLChoiceSet alloc] initWithTitle:@"Test" delegate:choiceDelegate choices:@[testCell1]];
+ testManager.preloadedMutableChoices = [NSMutableSet setWithObject:testCell1];
+
+ [testManager deleteChoices:@[testCell1, testCell2, testCell3]];
+ });
+
+ it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{
+ expect(testManager.transactionQueue.operations.lastObject).to(beAnInstanceOf([SDLDeleteChoicesOperation class]));
+ expect(testManager.pendingPresentationSet).to(beNil());
+ OCMVerify([pendingPresentOp cancel]);
+ OCMVerify([choiceDelegate choiceSet:[OCMArg any] didReceiveError:[OCMArg any]]);
+
+ [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO];
+ testManager.pendingMutablePreloadChoices = [NSMutableSet set];
+ testManager.preloadedMutableChoices = [NSMutableSet set];
+
+ testManager.transactionQueue.operations.lastObject.completionBlock();
+
+ expect(testManager.preloadedMutableChoices).to(beEmpty());
+ expect(testManager.preloadedChoices).to(beEmpty());
+ expect(testManager.pendingMutablePreloadChoices).to(beEmpty());
+ expect(testManager.pendingPreloadChoices).to(beEmpty());
+ });
+ });
});
describe(@"presenting a choice set", ^{
@@ -400,6 +467,30 @@ describe(@"choice set manager tests", ^{
});
});
});
+
+ describe(@"when the manager shuts down during presentation", ^{
+ beforeEach(^{
+ [testManager presentChoiceSet:testChoiceSet mode:testMode withKeyboardDelegate:keyboardDelegate];
+ });
+
+ it(@"should leave the list of pending and uploaded choice items empty when the operation finishes", ^{
+ expect(testManager.pendingPresentationSet).to(equal(testChoiceSet));
+ expect(testManager.transactionQueue.operations).to(haveCount(2));
+ expect(testManager.transactionQueue.operations.firstObject).to(beAnInstanceOf([SDLPreloadChoicesOperation class]));
+ expect(testManager.transactionQueue.operations.lastObject).to(beAnInstanceOf([SDLPresentChoiceSetOperation class]));
+
+ [testManager.stateMachine setToState:SDLChoiceManagerStateShutdown fromOldState:nil callEnterTransition:NO];
+ testManager.pendingMutablePreloadChoices = [NSMutableSet set];
+ testManager.preloadedMutableChoices = [NSMutableSet set];
+
+ testManager.transactionQueue.operations.lastObject.completionBlock();
+
+ expect(testManager.preloadedMutableChoices).to(beEmpty());
+ expect(testManager.preloadedChoices).to(beEmpty());
+ expect(testManager.pendingMutablePreloadChoices).to(beEmpty());
+ expect(testManager.pendingPreloadChoices).to(beEmpty());
+ });
+ });
});
describe(@"presenting a keyboard", ^{
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
index 38fb36ec9..73a973975 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLConfigurationSpec.m
@@ -79,7 +79,10 @@ describe(@"a configuration", ^{
});
it(@"configurationWithLifecycle:lockScreen:logging:fileManager", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig fileManager:someFileManagerConfig];
+ #pragma clang diagnostic pop
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
@@ -131,7 +134,10 @@ describe(@"a configuration", ^{
});
it(@"configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testConfig = [SDLConfiguration configurationWithLifecycle:someLifecycleConfig lockScreen:someLockscreenConfig logging:someLogConfig streamingMedia:someStreamingConfig fileManager:someFileManagerConfig];
+ #pragma clang diagnostic pop
expect(testConfig.lifecycleConfig).to(equal(someLifecycleConfig));
expect(testConfig.lockScreenConfig).to(equal(someLockscreenConfig));
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeSecurityManager.m b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeSecurityManager.m
index e50dab063..81673c819 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeSecurityManager.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeSecurityManager.m
@@ -31,7 +31,7 @@
}
+ (NSSet<NSString *> *)availableMakes {
- return [NSSet set];
+ return [NSSet setWithObject:@"SDL"];
}
@end
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.h b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.h
index e6e9bae11..b0cf5a985 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.h
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.h
@@ -12,6 +12,4 @@
@interface SDLFakeViewControllerPresenter : NSObject <SDLViewControllerPresentable>
-@property (strong, nonatomic, nullable) UIViewController *lockViewController;
-
@end
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m
index db28e24b8..c4c7fe101 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLFakeViewControllerPresenter.m
@@ -12,6 +12,7 @@
@interface SDLFakeViewControllerPresenter ()
@property (assign, nonatomic) BOOL shouldShowLockScreen;
+@property (strong, nonatomic, nullable) UIViewController *lockVC;
@end
@@ -45,5 +46,12 @@
}
}
+- (void)setLockViewController:(UIViewController *)lockViewController {
+ self.lockVC = lockViewController;
+}
+
+- (UIViewController *)lockViewController {
+ return self.lockVC;
+}
@end
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
index 4e136dfa0..55bc7336f 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleManagerSpec.m
@@ -12,6 +12,7 @@
#import "SDLGlobals.h"
#import "SDLHMILevel.h"
#import "SDLLifecycleConfiguration.h"
+#import "SDLLifecycleProtocolHandler.h"
#import "SDLLockScreenConfiguration.h"
#import "SDLLockScreenManager.h"
#import "SDLLogConfiguration.h"
@@ -23,12 +24,12 @@
#import "SDLOnHMIStatus.h"
#import "SDLPerformAppServiceInteractionResponse.h"
#import "SDLPermissionManager.h"
-#import "SDLProxy.h"
#import "SDLProtocol.h"
#import "SDLRegisterAppInterface.h"
#import "SDLRegisterAppInterfaceResponse.h"
#import "SDLResult.h"
#import "SDLRPCNotificationNotification.h"
+#import "SDLSecondaryTransportManager.h"
#import "SDLShow.h"
#import "SDLStateMachine.h"
#import "SDLStreamingMediaConfiguration.h"
@@ -41,15 +42,26 @@
#import "SDLVersion.h"
#import "SDLVideoStreamingState.h"
+#import "TestOldConfigurationUpdateManagerDelegate.h"
+#import "TestNewConfigurationUpdateManagerDelegate.h"
+
// Ignore the deprecated proxy methods
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+@interface SDLStreamingMediaManager ()
+
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol;
+
+@end
+
@interface SDLLifecycleManager ()
// this private property is used for testing
@property (copy, nonatomic) dispatch_queue_t lifecycleQueue;
@property (assign, nonatomic) int32_t lastCorrelationId;
+@property (strong, nonatomic) SDLLanguage currentVRLanguage;
@end
QuickConfigurationBegin(SendingRPCsConfiguration)
@@ -69,10 +81,15 @@ QuickConfigurationBegin(SendingRPCsConfiguration)
QuickConfigurationEnd
+@interface SDLGlobals ()
+@property (copy, nonatomic, readwrite) SDLVersion *protocolVersion;
+@end
+
@interface SDLLifecycleManager ()
// reach the private property for testing
@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+@property (strong, nonatomic, nullable) SDLLifecycleProtocolHandler *protocolHandler;
@end
@@ -83,13 +100,13 @@ describe(@"a lifecycle manager", ^{
__block SDLConfiguration *testConfig = nil;
__block id protocolMock = OCMClassMock([SDLProtocol class]);
- __block id proxyMock = OCMClassMock([SDLProxy class]);
__block id lockScreenManagerMock = OCMClassMock([SDLLockScreenManager class]);
__block id fileManagerMock = OCMClassMock([SDLFileManager class]);
__block id permissionManagerMock = OCMClassMock([SDLPermissionManager class]);
__block id streamingManagerMock = OCMClassMock([SDLStreamingMediaManager class]);
__block id systemCapabilityMock = OCMClassMock([SDLSystemCapabilityManager class]);
-
+ __block id secondaryTransportManagerMock = OCMClassMock([SDLSecondaryTransportManager class]);
+
void (^transitionToState)(SDLState *) = ^(SDLState *state) {
dispatch_sync(testManager.lifecycleQueue, ^{
[testManager.lifecycleStateMachine transitionToState:state];
@@ -103,9 +120,6 @@ describe(@"a lifecycle manager", ^{
};
beforeEach(^{
- OCMStub([proxyMock iapProxyWithListener:[OCMArg any] secondaryTransportManager:[OCMArg any] encryptionLifecycleManager:[OCMArg any]]).andReturn(proxyMock);
- OCMStub([(SDLProxy*)proxyMock protocol]).andReturn(protocolMock);
-
SDLLifecycleConfiguration *testLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test App" appId:@"Test Id"];
testLifecycleConfig.shortAppName = @"Short Name";
testLifecycleConfig.appType = SDLAppHMITypeNavigation;
@@ -113,12 +127,18 @@ describe(@"a lifecycle manager", ^{
testConfig = [SDLConfiguration configurationWithLifecycle:testLifecycleConfig lockScreen:[SDLLockScreenConfiguration disabledConfiguration] logging:[SDLLogConfiguration defaultConfiguration] streamingMedia:[SDLStreamingMediaConfiguration insecureConfiguration]];
testConfig.lifecycleConfig.languagesSupported = @[SDLLanguageEnUs, SDLLanguageEnGb];
testConfig.lifecycleConfig.language = SDLLanguageEnUs;
+ testConfig.lifecycleConfig.minimumProtocolVersion = [SDLVersion versionWithMajor:2 minor:0 patch:0];
+ testConfig.lifecycleConfig.minimumRPCVersion = [SDLVersion versionWithMajor:2 minor:0 patch:0];
testManager = [[SDLLifecycleManager alloc] initWithConfiguration:testConfig delegate:OCMProtocolMock(@protocol(SDLManagerDelegate))];
testManager.lockScreenManager = lockScreenManagerMock;
testManager.fileManager = fileManagerMock;
testManager.permissionManager = permissionManagerMock;
testManager.streamManager = streamingManagerMock;
testManager.systemCapabilityManager = systemCapabilityMock;
+ testManager.secondaryTransportManager = secondaryTransportManagerMock;
+
+ [SDLGlobals sharedGlobals].protocolVersion = [SDLVersion versionWithMajor:3 minor:0 patch:0];
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:3 minor:0 patch:0];
});
it(@"should initialize properties", ^{
@@ -129,7 +149,6 @@ describe(@"a lifecycle manager", ^{
expect(testManager.fileManager).toNot(beNil());
expect(testManager.permissionManager).toNot(beNil());
expect(testManager.streamManager).toNot(beNil());
- expect(testManager.proxy).to(beNil());
expect(testManager.registerResponse).to(beNil());
expect(testManager.lockScreenManager).toNot(beNil());
expect(testManager.notificationDispatcher).toNot(beNil());
@@ -139,6 +158,7 @@ describe(@"a lifecycle manager", ^{
expect(testManager.rpcOperationQueue).toNot(beNil());
expect(@([testManager conformsToProtocol:@protocol(SDLConnectionManagerType)])).to(equal(@YES));
expect(testManager.authToken).to(beNil());
+ expect(testManager.currentVRLanguage).toNot(beNil());
});
itBehavesLike(@"unable to send an RPC", ^{ return @{ @"manager": testManager }; });
@@ -214,31 +234,27 @@ describe(@"a lifecycle manager", ^{
readyHandlerSuccess = success;
readyHandlerError = error;
}];
+
+ testManager.protocolHandler.protocol = protocolMock;
});
- it(@"should initialize the proxy property", ^{
- expect(testManager.proxy).toNot(beNil());
+ it(@"should initialize enter the started state and start the secondary transport", ^{
expect(testManager.lifecycleState).to(match(SDLLifecycleStateStarted));
- });
- it(@"should initialize secondary transport manager if not in tcpDebugMode", ^{
- if (!testManager.configuration.lifecycleConfig.tcpDebugMode) {
- expect(testManager.secondaryTransportManager).toNot(beNil());
- }
+ expect(testManager.secondaryTransportManager).toNot(beNil());
});
describe(@"after receiving a connect notification", ^{
beforeEach(^{
// When we connect, we should be creating an sending an RAI
- OCMExpect([proxyMock sendRPC:[OCMArg isKindOfClass:[SDLRegisterAppInterface class]]]);
+ OCMExpect([protocolMock sendRPC:[OCMArg isKindOfClass:[SDLRegisterAppInterface class]]]);
- [testManager.notificationDispatcher postNotificationName:SDLTransportDidConnect infoObject:nil];
- [NSThread sleepForTimeInterval:0.1];
+ [testManager.notificationDispatcher postNotificationName:SDLRPCServiceDidConnect infoObject:nil];
});
it(@"should send a register app interface request and be in the connected state", ^{
- OCMVerifyAllWithDelay(proxyMock, 0.5);
- expect(testManager.lifecycleState).to(match(SDLLifecycleStateConnected));
+ OCMVerifyAllWithDelay(protocolMock, 1.0);
+ expect(testManager.lifecycleState).toEventually(equal(SDLLifecycleStateConnected));
});
itBehavesLike(@"unable to send an RPC", ^{ return @{ @"manager": testManager }; });
@@ -250,7 +266,7 @@ describe(@"a lifecycle manager", ^{
});
it(@"should be in the started state", ^{
- expect(testManager.lifecycleState).to(match(SDLLifecycleStateReconnecting));
+ expect(testManager.lifecycleState).to(equal(SDLLifecycleStateReconnecting));
});
});
@@ -258,16 +274,15 @@ describe(@"a lifecycle manager", ^{
it(@"should simply stop", ^{
[testManager stop];
- expect(testManager.lifecycleState).toEventually(match(SDLLifecycleStateStopped));
+ expect(testManager.lifecycleState).toEventually(equal(SDLLifecycleStateStopped));
});
});
});
describe(@"in the connected state when the minimum protocol version is in effect", ^{
beforeEach(^{
- SDLVersion *oldVersion = [SDLVersion versionWithMajor:0 minor:0 patch:0];
- id globalMock = OCMPartialMock([SDLGlobals sharedGlobals]);
- OCMStub([globalMock protocolVersion]).andReturn(oldVersion);
+ [SDLGlobals sharedGlobals].protocolVersion = [SDLVersion versionWithMajor:1 minor:0 patch:0];
+
OCMExpect([protocolMock endServiceWithType:SDLServiceTypeRPC]);
[testManager.lifecycleStateMachine setToState:SDLLifecycleStateConnected fromOldState:nil callEnterTransition:YES];
});
@@ -291,7 +306,7 @@ describe(@"a lifecycle manager", ^{
OCMStub([fileManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), fileManagerStartError, nil])]);
OCMStub([permissionManagerMock startWithCompletionHandler:([OCMArg invokeBlockWithArgs:@(YES), permissionManagerStartError, nil])]);
if (testConfig.lifecycleConfig.tcpDebugMode) {
- OCMStub([streamingManagerMock startWithProtocol:protocolMock]);
+ OCMStub([streamingManagerMock startSecondaryTransportWithProtocol:protocolMock]);
}
// Send an RAI response & make sure we have an HMI status to move the lifecycle forward
@@ -306,7 +321,7 @@ describe(@"a lifecycle manager", ^{
OCMVerify([fileManagerMock startWithCompletionHandler:[OCMArg any]]);
OCMVerify([permissionManagerMock startWithCompletionHandler:[OCMArg any]]);
if (testManager.configuration.lifecycleConfig.tcpDebugMode) {
- OCMVerify([streamingManagerMock startWithProtocol:[OCMArg any]]);
+ OCMStub([streamingManagerMock startSecondaryTransportWithProtocol:[OCMArg any]]);
}
});
@@ -315,11 +330,14 @@ describe(@"a lifecycle manager", ^{
describe(@"after receiving a disconnect notification", ^{
beforeEach(^{
+ OCMStub([protocolMock stopWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMStub([secondaryTransportManagerMock stopWithCompletionHandler:[OCMArg invokeBlock]]);
[testManager.notificationDispatcher postNotificationName:SDLTransportDidDisconnect infoObject:nil];
+ [NSThread sleepForTimeInterval:1.0];
});
it(@"should enter the started state", ^{
- expect(testManager.lifecycleState).toEventually(match(SDLLifecycleStateStarted));
+ expect(testManager.lifecycleState).toEventually(equal(SDLLifecycleStateStarted));
});
});
@@ -329,16 +347,14 @@ describe(@"a lifecycle manager", ^{
});
it(@"should enter the stopped state", ^{
- expect(testManager.lifecycleState).to(match(SDLLifecycleStateStopped));
+ expect(testManager.lifecycleState).to(equal(SDLLifecycleStateStopped));
});
});
});
describe(@"transitioning to the registered state when the minimum RPC version is in effect", ^{
beforeEach(^{
- SDLVersion *oldVersion = [SDLVersion versionWithMajor:0 minor:0 patch:0];
- id globalMock = OCMPartialMock([SDLGlobals sharedGlobals]);
- OCMStub([globalMock rpcVersion]).andReturn(oldVersion);
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:1 minor:0 patch:0];
[testManager.lifecycleStateMachine setToState:SDLLifecycleStateRegistered fromOldState:nil callEnterTransition:YES];
});
@@ -417,57 +433,137 @@ describe(@"a lifecycle manager", ^{
});
context(@"when the register response returns different language than the one passed with the lifecycle configuration", ^{
- beforeEach(^{
- expect(testManager.configuration.lifecycleConfig.appName).to(equal(testConfig.lifecycleConfig.appName));
- expect(testManager.configuration.lifecycleConfig.shortAppName).to(equal(testConfig.lifecycleConfig.shortAppName));
- expect(testManager.configuration.lifecycleConfig.ttsName).to(beNil());
- expect(testManager.configuration.lifecycleConfig.language).to(equal(testConfig.lifecycleConfig.language));
- expect(testManager.configuration.lifecycleConfig.languagesSupported).to(equal(testConfig.lifecycleConfig.languagesSupported));
- });
-
- it(@"should should update the configuration when the app supports the head unit language", ^{
- SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
- registerAppInterfaceResponse.success = @YES;
- registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
- registerAppInterfaceResponse.info = @"Language mismatch";
- registerAppInterfaceResponse.language = SDLLanguageEnGb;
- testManager.registerResponse = registerAppInterfaceResponse;
-
- SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:@"EnGb" shortAppName:@"E" ttsName:[SDLTTSChunk textChunksFromString:@"EnGb ttsName"] voiceRecognitionCommandNames:nil];
- OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(update);
-
- setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
- // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
-
- expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnGb));
- expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"EnGb"));
- expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"E"));
- expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(equal([SDLTTSChunk textChunksFromString:@"EnGb ttsName"]));
-
- OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
+ context(@"using the deprecated delegate method", ^{
+ __block TestOldConfigurationUpdateManagerDelegate *oldDelegate = nil;
+ beforeEach(^{
+ oldDelegate = OCMClassMock([TestOldConfigurationUpdateManagerDelegate class]);
+ testManager.delegate = oldDelegate;
+ });
+
+ it(@"should should update the configuration when the app supports the head unit language", ^{
+ SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ registerAppInterfaceResponse.success = @YES;
+ registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
+ registerAppInterfaceResponse.info = @"Language mismatch";
+ registerAppInterfaceResponse.language = SDLLanguageEnGb;
+ registerAppInterfaceResponse.hmiDisplayLanguage = SDLLanguageEnGb;
+ testManager.registerResponse = registerAppInterfaceResponse;
+
+ SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:@"EnGb" shortAppName:@"E" ttsName:[SDLTTSChunk textChunksFromString:@"EnGb ttsName"] voiceRecognitionCommandNames:nil];
+ OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(update);
+
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
+ // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
+
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnGb));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"EnGb"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"E"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(equal([SDLTTSChunk textChunksFromString:@"EnGb ttsName"]));
+
+ OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
+ });
+
+ it(@"should not update the configuration when the app does not support the head unit language", ^{
+ SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ registerAppInterfaceResponse.success = @YES;
+ registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
+ registerAppInterfaceResponse.info = @"Language mismatch";
+ registerAppInterfaceResponse.language = SDLLanguageDeDe;
+ registerAppInterfaceResponse.hmiDisplayLanguage = SDLLanguageDeDe;
+ testManager.registerResponse = registerAppInterfaceResponse;
+
+ OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(nil);
+
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
+ // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
+
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnUs));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"Test App"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"Short Name"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(beNil());
+
+ OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
+ });
});
- it(@"should not update the configuration when the app does not support the head unit language", ^{
- SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
- registerAppInterfaceResponse.success = @YES;
- registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
- registerAppInterfaceResponse.info = @"Language mismatch";
- registerAppInterfaceResponse.language = SDLLanguageDeDe;
- testManager.registerResponse = registerAppInterfaceResponse;
+ context(@"using the updated delegate method", ^{
+ __block TestNewConfigurationUpdateManagerDelegate *newDelegate = nil;
+ beforeEach(^{
+ newDelegate = OCMClassMock([TestNewConfigurationUpdateManagerDelegate class]);
+ testManager.delegate = newDelegate;
+ });
+
+ it(@"should should update the configuration when the app supports the head unit language", ^{
+ SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ registerAppInterfaceResponse.success = @YES;
+ registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
+ registerAppInterfaceResponse.info = @"Language mismatch";
+ registerAppInterfaceResponse.language = SDLLanguageEnGb;
+ registerAppInterfaceResponse.hmiDisplayLanguage = SDLLanguageEnGb;
+ testManager.registerResponse = registerAppInterfaceResponse;
+
+ SDLLifecycleConfigurationUpdate *update = [[SDLLifecycleConfigurationUpdate alloc] initWithAppName:@"EnGb" shortAppName:@"E" ttsName:[SDLTTSChunk textChunksFromString:@"EnGb ttsName"] voiceRecognitionCommandNames:nil];
+ OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]).andReturn(update);
- OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]).andReturn(nil);
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
+ // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
- setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
- // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
- [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnGb));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"EnGb"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"E"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(equal([SDLTTSChunk textChunksFromString:@"EnGb ttsName"]));
- expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnUs));
- expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"Test App"));
- expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"Short Name"));
- expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(beNil());
+ OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]);
+ });
+
+ it(@"should not update the configuration when the app does not support the head unit language", ^{
+ SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ registerAppInterfaceResponse.success = @YES;
+ registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
+ registerAppInterfaceResponse.info = @"Language mismatch";
+ registerAppInterfaceResponse.language = SDLLanguageDeDe;
+ registerAppInterfaceResponse.hmiDisplayLanguage = SDLLanguageDeDe;
+ testManager.registerResponse = registerAppInterfaceResponse;
+
+ OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]).andReturn(nil);
+
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
+ // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
+
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnUs));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"Test App"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"Short Name"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(beNil());
+
+ OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]);
+ });
+
+ it(@"should update if the hmi display language changes", ^{
+ SDLRegisterAppInterfaceResponse *registerAppInterfaceResponse = [[SDLRegisterAppInterfaceResponse alloc] init];
+ registerAppInterfaceResponse.success = @YES;
+ registerAppInterfaceResponse.resultCode = SDLResultWrongLanguage;
+ registerAppInterfaceResponse.info = @"Language mismatch";
+ registerAppInterfaceResponse.language = SDLLanguageEnUs;
+ registerAppInterfaceResponse.hmiDisplayLanguage = SDLLanguageEnGb;
+ testManager.registerResponse = registerAppInterfaceResponse;
+
+ OCMStub([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]).andReturn(nil);
- OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any]]);
+ setToStateWithEnterTransition(SDLLifecycleStateRegistered, SDLLifecycleStateUpdatingConfiguration);
+ // Transition to StateSettingUpManagers to prevent assert error from the lifecycle machine
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateSettingUpManagers fromOldState:SDLLifecycleStateUpdatingConfiguration callEnterTransition:NO];
+
+ expect(testManager.configuration.lifecycleConfig.language).toEventually(equal(SDLLanguageEnUs));
+ expect(testManager.configuration.lifecycleConfig.appName).toEventually(equal(@"Test App"));
+ expect(testManager.configuration.lifecycleConfig.shortAppName).toEventually(equal(@"Short Name"));
+ expect(testManager.configuration.lifecycleConfig.ttsName).toEventually(beNil());
+
+ OCMVerify([testManager.delegate managerShouldUpdateLifecycleToLanguage:[OCMArg any] hmiLanguage:[OCMArg any]]);
+ });
});
});
});
@@ -479,33 +575,30 @@ describe(@"a lifecycle manager", ^{
it(@"can send an RPC of type Request", ^{
SDLShow *testShow = [[SDLShow alloc] initWithMainField1:@"test" mainField2:nil alignment:nil];
+ OCMExpect([protocolMock sendRPC:testShow]);
[testManager sendRPC:testShow];
- [NSThread sleepForTimeInterval:0.1];
-
- OCMVerify([proxyMock sendRPC:[OCMArg isKindOfClass:SDLShow.class]]);
+ OCMVerifyAllWithDelay(protocolMock, 0.1);
});
it(@"can send an RPC of type Response", ^{
SDLPerformAppServiceInteractionResponse *testResponse = [[SDLPerformAppServiceInteractionResponse alloc] init];
+ OCMExpect([protocolMock sendRPC:testResponse]);
[testManager sendRPC:testResponse];
testResponse.correlationID = @(2);
testResponse.success = @(true);
testResponse.resultCode = SDLResultSuccess;
testResponse.info = @"testResponse info";
- [NSThread sleepForTimeInterval:0.1];
-
- OCMVerify([proxyMock sendRPC:[OCMArg isKindOfClass:SDLPerformAppServiceInteractionResponse.class]]);
+ OCMVerifyAllWithDelay(protocolMock, 0.1);
});
it(@"can send an RPC of type Notification", ^{
SDLOnAppServiceData *testNotification = [[SDLOnAppServiceData alloc] initWithServiceData:[[SDLAppServiceData alloc] init]];
+ OCMExpect([protocolMock sendRPC:testNotification]);
[testManager sendRPC:testNotification];
- [NSThread sleepForTimeInterval:0.1];
-
- OCMVerify([proxyMock sendRPC:[OCMArg isKindOfClass:SDLOnAppServiceData.class]]);
+ OCMVerifyAllWithDelay(protocolMock, 0.1);
});
it(@"should throw an exception if the RPC is not of type `Request`, `Response` or `Notification`", ^{
@@ -546,7 +639,7 @@ describe(@"a lifecycle manager", ^{
});
it(@"should attempt to unregister", ^{
- OCMVerify([proxyMock sendRPC:[OCMArg isKindOfClass:[SDLUnregisterAppInterface class]]]);
+ OCMVerify([protocolMock sendRPC:[OCMArg isKindOfClass:[SDLUnregisterAppInterface class]]]);
expect(testManager.lifecycleState).toEventually(match(SDLLifecycleStateUnregistering));
});
@@ -698,26 +791,56 @@ describe(@"a lifecycle manager", ^{
});
});
});
-});
-
-describe(@"configuring the lifecycle manager", ^{
- __block SDLLifecycleConfiguration *lifecycleConfig = nil;
- __block SDLLifecycleManager *testManager = nil;
- beforeEach(^{
- lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test app" fullAppId:@"Test ID"];
- });
+ describe(@"configuring the lifecycle manager", ^{
+ __block SDLLifecycleConfiguration *lifecycleConfig = nil;
+ __block SDLLifecycleManager *testManager = nil;
- context(@"if no secondary transport is allowed", ^{
beforeEach(^{
- lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsNone;
+ lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test app" fullAppId:@"Test ID"];
+ });
+
+ context(@"if secondary transport is not allowed", ^{
+ beforeEach(^{
+ lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsNone;
+ SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil];
+ testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil];
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES];
+ });
+
+ it(@"should not create a secondary transport manager", ^{
+ expect(testManager.secondaryTransportManager).to(beNil());
+ });
+ });
- SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil];
- testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil];
+ context(@"if a secondary transport is allowed but app is NOT a navigation or projection app", ^{
+ beforeEach(^{
+ lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsTCP;
+ lifecycleConfig.appType = SDLAppHMITypeSocial;
+ SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil];
+ testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil];
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES];
+ });
+
+ it(@"should not create a secondary transport manager", ^{
+ expect(testManager.secondaryTransportManager).to(beNil());
+ });
});
- it(@"should not create a secondary transport manager", ^{
- expect(testManager.secondaryTransportManager).to(beNil());
+ context(@"if a secondary transport is allowed and app is a navigation or projection app", ^{
+ beforeEach(^{
+ lifecycleConfig.allowedSecondaryTransports = SDLSecondaryTransportsTCP;
+ lifecycleConfig.appType = SDLAppHMITypeProjection;
+ SDLConfiguration *config = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil streamingMedia:SDLStreamingMediaConfiguration.insecureConfiguration fileManager:nil];
+ testManager = [[SDLLifecycleManager alloc] initWithConfiguration:config delegate:nil];
+
+ [testManager.lifecycleStateMachine setToState:SDLLifecycleStateStarted fromOldState:nil callEnterTransition:YES];
+ });
+
+ it(@"should create a secondary transport manager", ^{
+ expect(testManager.streamManager).toNot(beNil());
+ expect(testManager.secondaryTransportManager).toNot(beNil());
+ });
});
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleMobileHMIStateHandlerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleMobileHMIStateHandlerSpec.m
new file mode 100644
index 000000000..f2ff80c99
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleMobileHMIStateHandlerSpec.m
@@ -0,0 +1,88 @@
+//
+// SDLLifecycleMobileHMIStateHandler.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/24/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLLifecycleMobileHMIStateHandler.h"
+#import "SDLNotificationConstants.h"
+#import "SDLRegisterAppInterfaceResponse.h"
+#import "SDLRPCResponseNotification.h"
+#import "SDLMsgVersion.h"
+
+#import "TestConnectionManager.h"
+
+QuickSpecBegin(SDLLifecycleMobileHMIStateHandlerSpec)
+
+describe(@"SDLLifecycleMobileHMIStateHandler tests", ^{
+ __block TestConnectionManager *mockConnectionManager = nil;
+ __block SDLLifecycleMobileHMIStateHandler *testManager = nil;
+
+ beforeEach(^{
+ mockConnectionManager = [[TestConnectionManager alloc] init];
+ testManager = [[SDLLifecycleMobileHMIStateHandler alloc] initWithConnectionManager:mockConnectionManager];
+ });
+
+ context(@"before a RAIR", ^{
+ it(@"should do nothing if the app changes foreground states", ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ context(@"after a RAIR", ^{
+ context(@"with msg version < 4", ^{
+ beforeEach(^{
+ SDLRegisterAppInterfaceResponse *rair = [[SDLRegisterAppInterfaceResponse alloc] init];
+ rair.sdlMsgVersion = [[SDLMsgVersion alloc] initWithMajorVersion:3 minorVersion:0 patchVersion:0];
+
+ SDLRPCResponseNotification *responseNotification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:nil rpcResponse:rair];
+ [[NSNotificationCenter defaultCenter] postNotification:responseNotification];
+ });
+
+ it(@"should do nothing if the app changes foreground states", ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ context(@"with msg version >= 4", ^{
+ beforeEach(^{
+ SDLRegisterAppInterfaceResponse *rair = [[SDLRegisterAppInterfaceResponse alloc] init];
+ rair.sdlMsgVersion = [[SDLMsgVersion alloc] initWithMajorVersion:5 minorVersion:0 patchVersion:0];
+
+ SDLRPCResponseNotification *responseNotification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:nil rpcResponse:rair];
+ [[NSNotificationCenter defaultCenter] postNotification:responseNotification];
+ });
+
+ it(@"should send an OnHMIStatus as well as another if the app changes foreground states", ^{
+ expect(mockConnectionManager.receivedRequests).to(haveCount(1));
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+ expect(mockConnectionManager.receivedRequests).to(haveCount(2));
+ });
+
+ describe(@"after the manager is stopped", ^{
+ beforeEach(^{
+ [mockConnectionManager.receivedRequests removeAllObjects];
+ [testManager stop];
+ });
+
+ it(@"should do nothing if the app changes foreground states", ^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleProtocolHandlerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleProtocolHandlerSpec.m
new file mode 100644
index 000000000..681ec9cc5
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleProtocolHandlerSpec.m
@@ -0,0 +1,233 @@
+//
+// SDLLifecycleProtocolHandler.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/25/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLConfiguration.h"
+#import "SDLFunctionID.h"
+#import "SDLLifecycleConfiguration.h"
+#import "SDLLifecycleProtocolHandler.h"
+#import "SDLNotificationConstants.h"
+#import "SDLNotificationDispatcher.h"
+#import "SDLProtocol.h"
+#import "SDLProtocolDelegate.h"
+#import "SDLProtocolHeader.h"
+#import "SDLProtocolMessage.h"
+#import "SDLRPCPayload.h"
+#import "SDLShow.h"
+#import "SDLTimer.h"
+
+@interface SDLLifecycleProtocolHandler ()
+
+@property (weak, nonatomic) SDLNotificationDispatcher *notificationDispatcher;
+@property (strong, nonatomic) SDLTimer *rpcStartServiceTimeoutTimer;
+@property (copy, nonatomic) NSString *appId;
+
+@end
+
+QuickSpecBegin(SDLLifecycleProtocolHandlerSpec)
+
+describe(@"SDLLifecycleProtocolHandler tests", ^{
+ __block SDLLifecycleProtocolHandler *testHandler = nil;
+ __block id mockProtocol = nil;
+ __block id mockNotificationDispatcher = nil;
+ __block id mockTimer = nil;
+
+ beforeEach(^{
+ mockProtocol = OCMClassMock([SDLProtocol class]);
+ mockNotificationDispatcher = OCMClassMock([SDLNotificationDispatcher class]);
+ mockTimer = OCMClassMock([SDLTimer class]);
+
+ SDLLifecycleConfiguration *testLifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"test" fullAppId:@"appid"];
+ SDLConfiguration *testConfig = [[SDLConfiguration alloc] initWithLifecycle:testLifecycleConfig lockScreen:nil logging:nil fileManager:nil encryption:nil];
+
+ testHandler = [[SDLLifecycleProtocolHandler alloc] initWithProtocol:mockProtocol notificationDispatcher:mockNotificationDispatcher configuration:testConfig];
+ testHandler.rpcStartServiceTimeoutTimer = mockTimer;
+ });
+
+ describe(@"when started", ^{
+ beforeEach(^{
+ OCMExpect([(SDLProtocol *)mockProtocol start]);
+ [testHandler start];
+ });
+
+ it(@"should start the protocol", ^{
+ OCMVerifyAll(mockProtocol);
+ });
+ });
+
+ describe(@"when stopped", ^{
+ beforeEach(^{
+ OCMExpect([(SDLProtocol *)mockProtocol stopWithCompletionHandler:[OCMArg any]]);
+ [testHandler stopWithCompletionHandler:^{}];
+ });
+
+ it(@"should stop the protocol", ^{
+ OCMVerifyAll(mockProtocol);
+ });
+ });
+
+ describe(@"when the protocol notifies us", ^{
+ context(@"of the transport opening", ^{
+ beforeEach(^{
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLTransportDidConnect] infoObject:[OCMArg isNil]]);
+ OCMExpect([mockProtocol startServiceWithType:0 payload:[OCMArg any]]).ignoringNonObjectArgs();
+ OCMExpect([(SDLTimer *)mockTimer start]);
+ [testHandler protocolDidOpen:mockProtocol];
+ });
+
+ it(@"should set everything up", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ OCMVerifyAll(mockProtocol);
+ OCMVerifyAll(mockTimer);
+ });
+ });
+
+ context(@"of the transport closing", ^{
+ beforeEach(^{
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLTransportDidDisconnect] infoObject:[OCMArg isNil]]);
+ [testHandler protocolDidClose:mockProtocol];
+ });
+
+ it(@"should send a notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ });
+ });
+
+ context(@"of the transport erroring", ^{
+ beforeEach(^{
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLTransportConnectError] infoObject:[OCMArg isNotNil]]);
+ [testHandler protocol:mockProtocol transportDidError:[NSError errorWithDomain:@"test" code:1 userInfo:nil]];
+ });
+
+ it(@"should send a notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ });
+ });
+
+ context(@"of an RPC Start Service ACK", ^{
+ beforeEach(^{
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:4];
+ header.serviceType = SDLServiceTypeRPC;
+ header.frameData = SDLFrameInfoStartServiceACK;
+ SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLRPCServiceDidConnect] infoObject:[OCMArg isNil]]);
+ OCMExpect([(SDLTimer *)mockTimer cancel]);
+
+ [testHandler protocol:mockProtocol didReceiveStartServiceACK:message];
+ });
+
+ it(@"should stop the timer and send a notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ OCMVerifyAll(mockTimer);
+ });
+ });
+
+ context(@"of an RPC Start Service NAK", ^{
+ beforeEach(^{
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:4];
+ header.serviceType = SDLServiceTypeRPC;
+ header.frameData = SDLFrameInfoStartServiceNACK;
+ SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLRPCServiceConnectionDidError] infoObject:[OCMArg isNil]]);
+ OCMExpect([(SDLTimer *)mockTimer cancel]);
+
+ [testHandler protocol:mockProtocol didReceiveStartServiceNAK:message];
+ });
+
+ it(@"should stop the timer and send a notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ OCMVerifyAll(mockTimer);
+ });
+ });
+
+ context(@"no response from the module to the RPC Start Service", ^{
+ beforeEach(^{
+ testHandler.rpcStartServiceTimeoutTimer = nil;
+ });
+
+ it(@"should send a transport disconnected notification when the timer elapses", ^{
+ OCMExpect([mockProtocol stopWithCompletionHandler:[OCMArg any]]);
+
+ [testHandler protocolDidOpen:mockProtocol];
+
+ OCMVerifyAllWithDelay(mockProtocol, 11.0);
+ });
+ });
+
+ context(@"of an RPC End Service ACK", ^{
+ beforeEach(^{
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:4];
+ header.serviceType = SDLServiceTypeRPC;
+ header.frameData = SDLFrameInfoEndServiceACK;
+ SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLRPCServiceDidDisconnect] infoObject:[OCMArg isNil]]);
+ OCMExpect([(SDLTimer *)mockTimer cancel]);
+
+ [testHandler protocol:mockProtocol didReceiveEndServiceACK:message];
+ });
+
+ it(@"should stop the timer and send a notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ OCMVerifyAll(mockTimer);
+ });
+ });
+
+ context(@"of an RPC End Service NAK", ^{
+ beforeEach(^{
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:4];
+ header.serviceType = SDLServiceTypeRPC;
+ header.frameData = SDLFrameInfoEndServiceNACK;
+ SDLProtocolMessage *message = [SDLProtocolMessage messageWithHeader:header andPayload:nil];
+
+ OCMExpect([mockNotificationDispatcher postNotificationName:[OCMArg isEqual:SDLRPCServiceConnectionDidError] infoObject:[OCMArg any]]);
+
+ [testHandler protocol:mockProtocol didReceiveEndServiceNAK:message];
+ });
+
+ it(@"should send a RPC service connection error notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ });
+ });
+
+ context(@"of a protocol message", ^{
+ beforeEach(^{
+ SDLShow *showRPC = [[SDLShow alloc] initWithMainField1:@"Test1" mainField2:@"Test2" alignment:SDLTextAlignmentLeft];
+
+ SDLProtocolHeader *header = [SDLProtocolHeader headerForVersion:4];
+ header.serviceType = SDLServiceTypeRPC;
+ header.frameData = SDLFrameInfoSingleFrame;
+
+ NSDictionary *dict = [showRPC serializeAsDictionary:4];
+ NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:nil];
+ SDLRPCPayload *messagePayload = [[SDLRPCPayload alloc] init];
+ messagePayload.jsonData = data;
+ messagePayload.rpcType = SDLRPCMessageTypeRequest;
+ messagePayload.correlationID = 1;
+ messagePayload.functionID = [[SDLFunctionID sharedInstance] functionIdForName:SDLRPCFunctionNameShow].unsignedIntValue;
+
+ SDLProtocolMessage *testMessage = [SDLProtocolMessage messageWithHeader:header andPayload:messagePayload.data];
+
+ OCMExpect([mockNotificationDispatcher postRPCRequestNotification:[OCMArg isEqual:SDLDidReceiveShowRequest] request:[OCMArg isNotNil]]);
+
+ [testHandler protocol:mockProtocol didReceiveMessage:testMessage];
+ });
+
+ it(@"should send the notification", ^{
+ OCMVerifyAll(mockNotificationDispatcher);
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleRPCAdapterSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleRPCAdapterSpec.m
new file mode 100644
index 000000000..e589c2a71
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleRPCAdapterSpec.m
@@ -0,0 +1,306 @@
+//
+// SDLLifecycleRPCAdapterSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/23/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLGlobals.h"
+#import "SDLLifecycleRPCAdapter.h"
+#import "SDLOnButtonEvent.h"
+#import "SDLOnButtonPress.h"
+#import "SDLShow.h"
+#import "SDLSubscribeButton.h"
+#import "SDLUnsubscribeButton.h"
+#import "SDLVersion.h"
+
+QuickSpecBegin(SDLLifecycleRPCAdapterSpec)
+
+describe(@"the lifecycle RPC adapter", ^{
+ beforeEach(^{
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:1 minor:0 patch:0];
+ });
+
+ describe(@"adapt subscribe button request", ^{
+ __block SDLSubscribeButton *testRPC = nil;
+ beforeEach(^{
+ testRPC = [[SDLSubscribeButton alloc] init];
+
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:1 minor:0 patch:0];
+ });
+
+ context(@"before RPC v5.0", ^{
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should change it to an OK message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ expect(((SDLSubscribeButton *)result[0]).buttonName).to(equal(SDLButtonNameOk));
+ });
+ });
+
+ context(@"if the button name is not PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should not do anything to the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ });
+ });
+ });
+
+ context(@"after or equal to RPC v5.0", ^{
+ beforeEach(^{
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:5 minor:0 patch:0];
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional PlayPause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLSubscribeButton *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+
+ context(@"if the button name is not OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should not do anything to the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ });
+ });
+ });
+ });
+
+ describe(@"adapt unsubscribe button request", ^{
+ __block SDLUnsubscribeButton *testRPC = nil;
+ beforeEach(^{
+ testRPC = [[SDLUnsubscribeButton alloc] init];
+ });
+
+ context(@"before RPC v5.0", ^{
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should change it to an OK message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ expect(((SDLUnsubscribeButton *)result[0]).buttonName).to(equal(SDLButtonNameOk));
+ });
+ });
+
+ context(@"if the button name is not PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should not do anything to the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ });
+ });
+ });
+
+ context(@"after or equal to RPC v5.0", ^{
+ beforeEach(^{
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:5 minor:0 patch:0];
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional PlayPause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLUnsubscribeButton *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+
+ context(@"if the button name is not OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should not do anything to the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionOutgoing];
+
+ expect(result).to(haveCount(1));
+ });
+ });
+ });
+ });
+
+ describe(@"adapt onButtonPress notification", ^{
+ __block SDLOnButtonPress *testRPC = nil;
+ beforeEach(^{
+ testRPC = [[SDLOnButtonPress alloc] init];
+ });
+
+ context(@"before RPC v5.0", ^{
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should drop the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(beEmpty());
+ });
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional play-pause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonPress *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+ });
+
+ context(@"after or equal to RPC v5.0", ^{
+ beforeEach(^{
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:5 minor:0 patch:0];
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional PlayPause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonPress *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should create an additional OK message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonPress *)result[1]).buttonName).to(equal(SDLButtonNameOk));
+ });
+ });
+ });
+ });
+
+ describe(@"adapt onButtonEvent notification", ^{
+ __block SDLOnButtonEvent *testRPC = nil;
+ beforeEach(^{
+ testRPC = [[SDLOnButtonEvent alloc] init];
+ });
+
+ context(@"before RPC v5.0", ^{
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should drop the message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(beEmpty());
+ });
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional play-pause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonEvent *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+ });
+
+ context(@"after or equal to RPC v5.0", ^{
+ beforeEach(^{
+ [SDLGlobals sharedGlobals].rpcVersion = [SDLVersion versionWithMajor:5 minor:0 patch:0];
+ });
+
+ context(@"if the button name is OK", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNameOk;
+ });
+
+ it(@"should create an additional PlayPause message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonEvent *)result[1]).buttonName).to(equal(SDLButtonNamePlayPause));
+ });
+ });
+
+ context(@"if the button name is PlayPause", ^{
+ beforeEach(^{
+ testRPC.buttonName = SDLButtonNamePlayPause;
+ });
+
+ it(@"should create an additional OK message", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(2));
+ expect(((SDLOnButtonEvent *)result[1]).buttonName).to(equal(SDLButtonNameOk));
+ });
+ });
+ });
+ });
+
+ describe(@"an RPC that is not handled", ^{
+ __block SDLShow *testRPC = nil;
+ beforeEach(^{
+ testRPC = [[SDLShow alloc] init];
+ });
+
+ it(@"should not do anything to the RPC", ^{
+ NSArray<SDLRPCMessage *> *result = [SDLLifecycleRPCAdapter adaptRPC:testRPC direction:SDLRPCDirectionIncoming];
+
+ expect(result).to(haveCount(1));
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSyncPDataHandlerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSyncPDataHandlerSpec.m
new file mode 100644
index 000000000..9c38944b2
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSyncPDataHandlerSpec.m
@@ -0,0 +1,78 @@
+//
+// SDLLifecycleSyncPDataHandler.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/24/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLEncodedSyncPData.h"
+#import "SDLLifecycleSyncPDataHandler.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnEncodedSyncPData.h"
+#import "SDLRPCNotificationNotification.h"
+
+#import "TestConnectionManager.h"
+
+@interface SDLLifecycleSyncPDataHandler ()
+
+@property (strong, nonatomic) NSURLSession *urlSession;
+
+@end
+
+QuickSpecBegin(SDLLifecycleSyncPDataHandlerSpec)
+
+describe(@"Test SDLLifecycleSyncPDataHandler", ^{
+ __block SDLLifecycleSyncPDataHandler *testHandler = nil;
+ __block TestConnectionManager *mockConnectionManager = nil;
+ __block NSURLSession *mockSession = nil;
+
+ beforeEach(^{
+ mockSession = OCMClassMock([NSURLSession class]);
+
+ NSData *receivedData = [NSJSONSerialization dataWithJSONObject:@{@"data": @[@"1234"]} options:kNilOptions error:nil];
+ OCMStub([mockSession uploadTaskWithRequest:[OCMArg any] fromData:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:receivedData, [[NSURLResponse alloc] init], [NSNull null], nil])]);
+
+ mockConnectionManager = [[TestConnectionManager alloc] init];
+ testHandler = [[SDLLifecycleSyncPDataHandler alloc] initWithConnectionManager:mockConnectionManager];
+ testHandler.urlSession = mockSession;
+ });
+
+ describe(@"when a OnEncodedSyncPData request comes in", ^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ __block SDLOnEncodedSyncPData *testRPC = nil;
+#pragma clang diagnostic pop
+ beforeEach(^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testRPC = [[SDLOnEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
+ testRPC.URL = @"https://www.google.com";
+ testRPC.Timeout = @(30);
+ testRPC.data = @[@"1234/5678"];
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveEncodedDataNotification object:nil rpcNotification:testRPC];
+#pragma clang diagnostic pop
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should send a EncodedSyncPData request", ^{
+ expect(mockConnectionManager.receivedRequests).to(haveCount(1));
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLEncodedSyncPData *sentRequest = mockConnectionManager.receivedRequests[0];
+#pragma clang diagnostic pop
+ expect(sentRequest.data).to(equal(@[@"1234"]));
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSystemRequestHandlerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSystemRequestHandlerSpec.m
new file mode 100644
index 000000000..01211e324
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLifecycleSystemRequestHandlerSpec.m
@@ -0,0 +1,235 @@
+//
+// SDLLifecycleSystemRequestHandlerSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/24/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLCacheFileManager.h"
+#import "SDLFileType.h"
+#import "SDLLifecycleSystemRequestHandler.h"
+#import "SDLNotificationConstants.h"
+#import "SDLOnSystemRequest.h"
+#import "SDLPutFile.h"
+#import "SDLRequestType.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSystemRequest.h"
+
+#import "TestConnectionManager.h"
+
+@interface SDLLifecycleSystemRequestHandler ()
+
+@property (strong, nonatomic) SDLCacheFileManager *cacheFileManager;
+@property (strong, nonatomic) NSURLSession *urlSession;
+
+@end
+
+QuickSpecBegin(SDLLifecycleSystemRequestHandlerSpec)
+
+describe(@"SDLLifecycleSystemRequestHandler tests", ^{
+ __block TestConnectionManager *mockConnectionManager = nil;
+ __block SDLLifecycleSystemRequestHandler *testManager = nil;
+ __block id mockSession = nil;
+ __block id mockCacheManager = nil;
+
+ beforeEach(^{
+ mockCacheManager = OCMClassMock([SDLCacheFileManager class]);
+ mockSession = OCMClassMock([NSURLSession class]);
+
+ mockConnectionManager = [[TestConnectionManager alloc] init];
+
+ testManager = [[SDLLifecycleSystemRequestHandler alloc] initWithConnectionManager:mockConnectionManager];
+ testManager.urlSession = mockSession;
+ testManager.cacheFileManager = mockCacheManager;
+ });
+
+ describe(@"when receiving an OnSystemRequest", ^{
+ __block SDLOnSystemRequest *receivedSystemRequest = nil;
+ beforeEach(^{
+ receivedSystemRequest = [[SDLOnSystemRequest alloc] init];
+ });
+
+ context(@"of type PROPRIETARY", ^{
+ __block NSData *urlReceivedData = nil;
+
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeProprietary;
+ receivedSystemRequest.url = @"https://www.google.com";
+ receivedSystemRequest.fileType = SDLFileTypeJSON;
+
+ urlReceivedData = [@"5678" dataUsingEncoding:NSASCIIStringEncoding];
+ receivedSystemRequest.bulkData = [NSJSONSerialization dataWithJSONObject:@{@"data": @"1234"} options:kNilOptions error:nil];
+
+ OCMStub([mockSession uploadTaskWithRequest:[OCMArg any] fromData:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:urlReceivedData, [[NSURLResponse alloc] init], [NSNull null], nil])]).andReturn(nil);
+ });
+
+ context(@"when the file type is not JSON", ^{
+ beforeEach(^{
+ receivedSystemRequest.fileType = SDLFileTypeBMP;
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should not send a SystemRequest", ^{
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ context(@"when the url is nil", ^{
+ beforeEach(^{
+ receivedSystemRequest.url = nil;
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should not send a SystemRequest", ^{
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ context(@"when the bulkdata is not JSON", ^{
+ beforeEach(^{
+ receivedSystemRequest.bulkData = [@"1234" dataUsingEncoding:NSASCIIStringEncoding];
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should not send a SystemRequest", ^{
+ expect(mockConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ context(@"when formed correctly", ^{
+ beforeEach(^{
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should send a SystemRequest", ^{
+ expect(mockConnectionManager.receivedRequests).to(haveCount(1));
+ expect(mockConnectionManager.receivedRequests[0]).to(beAnInstanceOf([SDLSystemRequest class]));
+ expect(((SDLSystemRequest *)mockConnectionManager.receivedRequests[0]).requestType).to(equal(SDLRequestTypeProprietary));
+ expect(((SDLSystemRequest *)mockConnectionManager.receivedRequests[0]).bulkData).to(equal([@"5678" dataUsingEncoding:NSASCIIStringEncoding]));
+ });
+ });
+ });
+
+ context(@"of type LOCK_SCREEN_URL", ^{
+ __block id lockScreenIconObserver = nil;
+
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeLockScreenIconURL;
+
+ UIImage *testImage = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
+ OCMStub([mockCacheManager retrieveImageForRequest:[OCMArg any] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+
+ lockScreenIconObserver = OCMObserverMock();
+ [[NSNotificationCenter defaultCenter] addMockObserver:lockScreenIconObserver name:SDLDidReceiveLockScreenIcon object:nil];
+ [[lockScreenIconObserver expect] notificationWithName:SDLDidReceiveLockScreenIcon object:[OCMArg any] userInfo:[OCMArg any]];
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should pass the url to the cache manager and then send a notification", ^{
+ OCMVerifyAll(lockScreenIconObserver);
+ });
+
+ afterEach(^{
+ lockScreenIconObserver = nil;
+ });
+ });
+
+ context(@"of type ICON_URL", ^{
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeIconURL;
+ receivedSystemRequest.url = @"https://www.google.com";
+
+ NSData *data = [@"1234" dataUsingEncoding:NSASCIIStringEncoding];
+ OCMStub([mockSession dataTaskWithURL:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:data, [NSURLResponse new], [NSNull null], nil])]);
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should send a SystemRequest", ^{
+ expect(mockConnectionManager.receivedRequests).to(haveCount(1));
+ expect(mockConnectionManager.receivedRequests[0]).to(beAnInstanceOf([SDLSystemRequest class]));
+ });
+ });
+
+ context(@"of type HTTP", ^{
+ __block NSData *urlReceivedData = nil;
+
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeHTTP;
+ receivedSystemRequest.url = @"https://www.google.com";
+ receivedSystemRequest.bulkData = [@"1234" dataUsingEncoding:NSASCIIStringEncoding];
+
+ urlReceivedData = [NSJSONSerialization dataWithJSONObject:@{@"data": @[@"1234"]} options:kNilOptions error:nil];
+ OCMStub([mockSession uploadTaskWithRequest:[OCMArg any] fromData:[OCMArg any] completionHandler:([OCMArg invokeBlockWithArgs:urlReceivedData, [[NSURLResponse alloc] init], [NSNull null], nil])]).andReturn(nil);
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should send a PutFile after receiving a response", ^{
+ expect(mockConnectionManager.receivedRequests).to(haveCount(1));
+
+ SDLPutFile *putFile = mockConnectionManager.receivedRequests[0];
+ expect(putFile.fileType).to(equal(SDLFileTypeJSON));
+ expect(putFile.sdlFileName).to(equal(@"response_data"));
+ expect(putFile.bulkData).to(equal(urlReceivedData));
+ });
+ });
+
+ context(@"of type LAUNCH_APP", ^{
+ __block id mockedApplication = nil;
+
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeLaunchApp;
+ receivedSystemRequest.url = @"myApp://";
+
+ mockedApplication = OCMClassMock([UIApplication class]);
+ OCMStub([mockedApplication sharedApplication]).andReturn(mockedApplication);
+ OCMExpect([mockedApplication openURL:[OCMArg checkWithBlock:^BOOL(id obj) {
+ return [((NSURL *)obj).absoluteString isEqualToString:@"myApp://"];
+ }]]);
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should have attempted to open the URL", ^{
+ OCMVerifyAllWithDelay(mockedApplication, 0.5);
+ });
+
+ afterEach(^{
+ [mockedApplication stopMocking];
+ });
+ });
+
+ context(@"of another type", ^{
+ beforeEach(^{
+ receivedSystemRequest.requestType = SDLRequestTypeFOTA;
+
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveSystemRequestNotification object:nil rpcNotification:receivedSystemRequest];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should do nothing", ^{
+ OCMReject([mockSession uploadTaskWithRequest:[OCMArg any] fromData:[OCMArg any] completionHandler:[OCMArg any]]).andReturn(nil);
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
index 30949168a..7357b9e9f 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLLockScreenManagerSpec.m
@@ -6,6 +6,7 @@
#import "SDLLockScreenConfiguration.h"
#import "SDLLockScreenManager.h"
#import "SDLLockScreenStatus.h"
+#import "SDLLockScreenStatusManager.h"
#import "SDLLockScreenViewController.h"
#import "SDLNotificationConstants.h"
#import "SDLNotificationDispatcher.h"
@@ -18,6 +19,7 @@
@property (assign, nonatomic) BOOL canPresent;
@property (strong, nonatomic, readwrite) SDLLockScreenConfiguration *config;
@property (strong, nonatomic) id<SDLViewControllerPresentable> presenter;
+@property (strong, nonatomic) SDLLockScreenStatusManager *statusManager;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -34,21 +36,22 @@ QuickSpecBegin(SDLLockScreenManagerSpec)
describe(@"a lock screen manager", ^{
__block SDLLockScreenManager *testManager = nil;
- __block SDLFakeViewControllerPresenter *fakePresenter = nil;
- __block SDLNotificationDispatcher *testNotificationDispatcher = nil;
+ __block SDLFakeViewControllerPresenter *fakeViewControllerPresenter = nil;
+ __block SDLNotificationDispatcher *dispatcherMock = nil;
beforeEach(^{
- fakePresenter = [[SDLFakeViewControllerPresenter alloc] init];
+ fakeViewControllerPresenter = [[SDLFakeViewControllerPresenter alloc] init];
+ dispatcherMock = OCMClassMock([SDLNotificationDispatcher class]);
});
context(@"with a disabled configuration", ^{
beforeEach(^{
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration disabledConfiguration] notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration disabledConfiguration] notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
});
it(@"should set properties correctly", ^{
// Note: We can't check the "lockScreenPresented" flag on the Lock Screen Manager because it's a computer property checking the window
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).to(beNil());
});
@@ -58,7 +61,7 @@ describe(@"a lock screen manager", ^{
});
it(@"should not have a lock screen controller", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).to(beNil());
});
@@ -66,21 +69,16 @@ describe(@"a lock screen manager", ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
__block SDLOnLockScreenStatus *testRequiredStatus = nil;
-#pragma clang diagnostic pop
beforeEach(^{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testRequiredStatus = [[SDLOnLockScreenStatus alloc] init];
-#pragma clang diagnostic pop
-
testRequiredStatus.lockScreenStatus = SDLLockScreenStatusRequired;
-
- [testNotificationDispatcher postNotificationName:SDLDidChangeLockScreenStatusNotification infoObject:testRequiredStatus];
+ [dispatcherMock postNotificationName:SDLDidChangeLockScreenStatusNotification infoObject:testRequiredStatus];
+#pragma clang diagnostic pop
});
it(@"should not have presented the lock screen", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
});
});
});
@@ -88,11 +86,11 @@ describe(@"a lock screen manager", ^{
context(@"with an enabled configuration", ^{
beforeEach(^{
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfiguration] notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfiguration] notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
});
it(@"should set properties correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).to(beNil());
});
@@ -102,7 +100,7 @@ describe(@"a lock screen manager", ^{
});
it(@"should set up the view controller correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).toNot(beNil());
expect(testManager.lockScreenViewController).to(beAnInstanceOf([SDLLockScreenViewController class]));
});
@@ -118,35 +116,20 @@ describe(@"a lock screen manager", ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testRequiredStatus = [[SDLOnLockScreenStatus alloc] init];
-#pragma clang diagnostic pop
testRequiredStatus.lockScreenStatus = SDLLockScreenStatusRequired;
-
- SDLRPCNotificationNotification *testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testRequiredStatus];
+ SDLRPCNotificationNotification *testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:testManager.statusManager rpcNotification:testRequiredStatus];
+#pragma clang diagnostic pop
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
});
it(@"should have presented the lock screen", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beTrue());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beTrue());
});
it(@"should not have a vehicle icon", ^{
expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).to(beNil());
});
-
- describe(@"when a vehicle icon is received", ^{
- __block UIImage *testIcon = nil;
-
- beforeEach(^{
- testIcon = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:@{ SDLNotificationUserInfoObject: testIcon }];
- });
-
- it(@"should have a vehicle icon", ^{
- expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).toNot(beNil());
- expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).to(equal(testIcon));
- });
- });
-
+
describe(@"when a driver distraction notification is posted with lockScreenDismissableEnabled as true", ^{
__block SDLRPCNotificationNotification *testDriverDistractionNotification = nil;
@@ -154,7 +137,7 @@ describe(@"a lock screen manager", ^{
testDriverDistraction = [[SDLOnDriverDistraction alloc] init];
testDriverDistraction.lockScreenDismissalEnabled = @YES;
- testDriverDistractionNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeDriverDistractionStateNotification object:nil rpcNotification:testDriverDistraction];
+ testDriverDistractionNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeDriverDistractionStateNotification object:dispatcherMock rpcNotification:testDriverDistraction];
[[NSNotificationCenter defaultCenter] postNotification:testDriverDistractionNotification];
});
@@ -205,7 +188,7 @@ describe(@"a lock screen manager", ^{
});
it(@"should have dismissed the lock screen", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
});
});
@@ -213,49 +196,61 @@ describe(@"a lock screen manager", ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
__block SDLOnLockScreenStatus *testOffStatus = nil;
-#pragma clang diagnostic pop
-
+
beforeEach(^{
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testOffStatus = [[SDLOnLockScreenStatus alloc] init];
-#pragma clang diagnostic pop
testOffStatus.lockScreenStatus = SDLLockScreenStatusOff;
-
SDLRPCNotificationNotification *testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testOffStatus];
+#pragma clang diagnostic pop
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
});
it(@"should have dismissed the lock screen", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
});
});
});
});
});
- context(@"with showDeviceLogo as NO", ^{
+ context(@"when a vehicle icon is received", ^{
+ __block UIImage *testIcon = nil;
+ SDLLockScreenConfiguration *testsConfig = [SDLLockScreenConfiguration enabledConfiguration];
+
beforeEach(^{
- SDLLockScreenConfiguration *config = [SDLLockScreenConfiguration enabledConfiguration];
- config.showDeviceLogo = NO;
+ testIcon = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
+ });
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:config notificationDispatcher:nil presenter:fakePresenter];
- [testManager start];
+ it(@"should should set the vehicle icon on the default lockscreen if showDeviceLogo set to true", ^{
+ testsConfig.showDeviceLogo = YES;
+ fakeViewControllerPresenter.lockViewController = [[SDLLockScreenViewController alloc] init];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:testsConfig notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:@{ SDLNotificationUserInfoObject: testIcon }];
+
+ expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).toEventually(equal(testIcon));
});
- describe(@"when a vehicle icon is received", ^{
- __block UIImage *testIcon = nil;
+ it(@"should should not set the vehicle icon on the default lockscreen if showDeviceLogo set to false", ^{
+ testsConfig.showDeviceLogo = NO;
+ fakeViewControllerPresenter.lockViewController = [[SDLLockScreenViewController alloc] init];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:testsConfig notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
- beforeEach(^{
- testIcon = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:@{ SDLNotificationUserInfoObject: testIcon }];
- });
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:@{ SDLNotificationUserInfoObject: testIcon }];
- it(@"should not have a vehicle icon if showDeviceLogo is set to NO", ^{
- expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).to(beNil());
- });
+ expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).vehicleIcon).toEventually(beNil());
});
+ it(@"should should not modify a custom lockscreen", ^{
+ testsConfig.showDeviceLogo = YES;
+ UIViewController *customLockScreen = [[UIViewController alloc] init];
+ fakeViewControllerPresenter.lockViewController = customLockScreen;
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:testsConfig notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidReceiveLockScreenIcon object:nil userInfo:@{ SDLNotificationUserInfoObject: testIcon }];
+
+ expect(fakeViewControllerPresenter.lockViewController).toEventually(equal(customLockScreen));
+ });
});
context(@"with a custom color configuration", ^{
@@ -266,11 +261,11 @@ describe(@"a lock screen manager", ^{
testColor = [UIColor blueColor];
testImage = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:testImage backgroundColor:testColor] notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfigurationWithAppIcon:testImage backgroundColor:testColor] notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
});
it(@"should set properties correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).to(beNil());
});
@@ -280,7 +275,7 @@ describe(@"a lock screen manager", ^{
});
it(@"should set up the view controller correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).toNot(beNil());
expect(testManager.lockScreenViewController).to(beAnInstanceOf([SDLLockScreenViewController class]));
expect(((SDLLockScreenViewController *)testManager.lockScreenViewController).backgroundColor).to(equal(testColor));
@@ -294,11 +289,11 @@ describe(@"a lock screen manager", ^{
beforeEach(^{
testViewController = [[UIViewController alloc] init];
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfigurationWithViewController:testViewController] notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:[SDLLockScreenConfiguration enabledConfigurationWithViewController:testViewController] notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
});
it(@"should set properties correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).to(beNil());
});
@@ -308,7 +303,7 @@ describe(@"a lock screen manager", ^{
});
it(@"should set up the view controller correctly", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beFalse());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beFalse());
expect(testManager.lockScreenViewController).toNot(beNil());
expect(testManager.lockScreenViewController).toNot(beAnInstanceOf([SDLLockScreenViewController class]));
expect(testManager.lockScreenViewController).to(equal(testViewController));
@@ -321,7 +316,7 @@ describe(@"a lock screen manager", ^{
SDLLockScreenConfiguration *config = [SDLLockScreenConfiguration enabledConfiguration];
config.enableDismissGesture = NO;
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:config notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:config notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
[testManager start];
});
@@ -332,8 +327,8 @@ describe(@"a lock screen manager", ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnLockScreenStatus *status = [[SDLOnLockScreenStatus alloc] init];
-#pragma clang diagnostic pop
status.lockScreenStatus = SDLLockScreenStatusRequired;
+#pragma clang diagnostic pop
testManager.lastLockNotification = status;
SDLOnDriverDistraction *testDriverDistraction = [[SDLOnDriverDistraction alloc] init];
@@ -351,7 +346,7 @@ describe(@"a lock screen manager", ^{
});
describe(@"with an always enabled configuration", ^{
- __block SDLFakeViewControllerPresenter *fakePresenter = nil;
+ __block SDLFakeViewControllerPresenter *fakeViewControllerPresenter = nil;
__block SDLRPCNotificationNotification *testLockStatusNotification = nil;
#pragma clang diagnostic push
@@ -360,7 +355,7 @@ describe(@"a lock screen manager", ^{
#pragma clang diagnostic pop
beforeEach(^{
- fakePresenter = [[SDLFakeViewControllerPresenter alloc] init];
+ fakeViewControllerPresenter = [[SDLFakeViewControllerPresenter alloc] init];
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -370,51 +365,50 @@ describe(@"a lock screen manager", ^{
SDLLockScreenConfiguration *config = [SDLLockScreenConfiguration enabledConfiguration];
config.displayMode = SDLLockScreenConfigurationDisplayModeAlways;
- testManager = [[SDLLockScreenManager alloc] initWithConfiguration:config notificationDispatcher:nil presenter:fakePresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:config notificationDispatcher:dispatcherMock presenter:fakeViewControllerPresenter];
[testManager start];
});
context(@"receiving a lock screen status of required", ^{
beforeEach(^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testStatus.lockScreenStatus = SDLLockScreenStatusRequired;
- testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testStatus];
+ testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:testManager.statusManager rpcNotification:testStatus];
+#pragma clang diagnostic pop
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
});
it(@"should present the lock screen if not already presented", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beTrue());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beTrue());
});
});
context(@"receiving a lock screen status of off", ^{
beforeEach(^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testStatus.lockScreenStatus = SDLLockScreenStatusOff;
- testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testStatus];
+ testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:testManager.statusManager rpcNotification:testStatus];
+#pragma clang diagnostic pop
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
});
it(@"should present the lock screen if not already presented", ^{
- expect(fakePresenter.shouldShowLockScreen).toEventually(beTrue());
+ expect(fakeViewControllerPresenter.shouldShowLockScreen).toEventually(beTrue());
});
});
});
describe(@"A lock screen status of OPTIONAL", ^{
- __block SDLLockScreenManager *testLockScreenManager = nil;
__block SDLLockScreenConfiguration *testLockScreenConfig = nil;
__block id mockViewControllerPresenter = nil;
__block SDLRPCNotificationNotification *testLockStatusNotification = nil;
beforeEach(^{
mockViewControllerPresenter = OCMClassMock([SDLFakeViewControllerPresenter class]);
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLOnLockScreenStatus *testOptionalStatus = [[SDLOnLockScreenStatus alloc] init];
-#pragma clang diagnostic pop
- testOptionalStatus.lockScreenStatus = SDLLockScreenStatusOptional;
- testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:nil rpcNotification:testOptionalStatus];
testLockScreenConfig = [SDLLockScreenConfiguration enabledConfiguration];
});
@@ -425,19 +419,24 @@ describe(@"a lock screen manager", ^{
testLockScreenConfig.showInOptionalState = true;
#pragma clang diagnostic pop
- testLockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:nil presenter:mockViewControllerPresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:dispatcherMock presenter:mockViewControllerPresenter];
+ testManager.canPresent = YES;
- [testLockScreenManager start]; // Sets `canPresent` to `true`
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLOnLockScreenStatus *testOptionalStatus = [[SDLOnLockScreenStatus alloc] init];
+ testOptionalStatus.lockScreenStatus = SDLLockScreenStatusOptional;
+ testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:testManager.statusManager rpcNotification:testOptionalStatus];
+#pragma clang diagnostic pop
});
it(@"should present the lock screen if not already presented", ^{
OCMStub([mockViewControllerPresenter lockViewController]).andReturn([OCMArg any]);
+ OCMExpect([mockViewControllerPresenter updateLockScreenToShow:YES withCompletionHandler:[OCMArg any]]).ignoringNonObjectArgs();
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
- // Since lock screen must be presented/dismissed on the main thread, force the test to execute manually on the main thread. If this is not done, the test case may fail.
- [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
- OCMVerify([mockViewControllerPresenter updateLockScreenToShow:YES withCompletionHandler:nil]);
+ OCMVerifyAllWithDelay(mockViewControllerPresenter, 0.5);
});
});
@@ -448,19 +447,24 @@ describe(@"a lock screen manager", ^{
testLockScreenConfig.showInOptionalState = false;
#pragma clang diagnostic pop
- testLockScreenManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:nil presenter:mockViewControllerPresenter];
+ testManager = [[SDLLockScreenManager alloc] initWithConfiguration:testLockScreenConfig notificationDispatcher:dispatcherMock presenter:mockViewControllerPresenter];
+ testManager.canPresent = YES;
- [testLockScreenManager start]; // Sets `canPresent` to `true`
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLOnLockScreenStatus *testOptionalStatus = [[SDLOnLockScreenStatus alloc] init];
+ testOptionalStatus.lockScreenStatus = SDLLockScreenStatusOptional;
+ testLockStatusNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeLockScreenStatusNotification object:testManager.statusManager rpcNotification:testOptionalStatus];
+#pragma clang diagnostic pop
});
it(@"should dismiss the lock screen if already presented", ^{
OCMStub([mockViewControllerPresenter lockViewController]).andReturn([OCMArg any]);
+ OCMExpect([mockViewControllerPresenter updateLockScreenToShow:NO withCompletionHandler:[OCMArg any]]).ignoringNonObjectArgs();
[[NSNotificationCenter defaultCenter] postNotification:testLockStatusNotification];
- // Since lock screen must be presented/dismissed on the main thread, force the test to execute manually on the main thread. If this is not done, the test case may fail.
- [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];
- OCMVerify([mockViewControllerPresenter updateLockScreenToShow:NO withCompletionHandler:nil]);
+ OCMVerifyAllWithDelay(mockViewControllerPresenter, 0.5);
});
});
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
index ab0640a26..ff9c4e7bb 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLMenuManagerSpec.m
@@ -30,6 +30,7 @@
@property (assign, nonatomic) BOOL hasQueuedUpdate;
@property (assign, nonatomic) BOOL waitingOnHMIUpdate;
@property (copy, nonatomic) NSArray<SDLMenuCell *> *waitingUpdateMenuCells;
+@property (strong, nonatomic, nullable) SDLWindowCapability *windowCapability;
@property (assign, nonatomic) UInt32 lastMenuId;
@property (copy, nonatomic) NSArray<SDLMenuCell *> *oldMenuCells;
@@ -79,12 +80,7 @@ describe(@"menu manager", ^{
windowCapability.imageFields = @[commandIconField];
windowCapability.imageTypeSupported = @[SDLImageTypeDynamic, SDLImageTypeStatic];
windowCapability.menuLayoutsAvailable = @[SDLMenuLayoutList, SDLMenuLayoutTiles];
-
- SDLDisplayCapability *displayCapability = [[SDLDisplayCapability alloc] initWithDisplayName:SDLDisplayTypeGeneric];
- displayCapability.windowCapabilities = @[windowCapability];
-
- OCMStub(mockSystemCapabilityManager.defaultMainWindowCapability).andReturn(windowCapability);
- OCMStub(mockSystemCapabilityManager.displays).andReturn(@[displayCapability]);
+ testManager.windowCapability = windowCapability;
});
it(@"should instantiate correctly", ^{
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionFilterSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionFilterSpec.m
index be190c40d..757c6411b 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionFilterSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionFilterSpec.m
@@ -2,6 +2,7 @@
#import <Nimble/Nimble.h>
#import "SDLPermissionConstants.h"
+#import "SDLPermissionElement.h"
#import "SDLPermissionFilter.h"
QuickSpecBegin(SDLPermissionFilterSpec)
@@ -9,141 +10,148 @@ QuickSpecBegin(SDLPermissionFilterSpec)
describe(@"A filter", ^{
__block NSString *testRPCName1 = nil;
__block NSString *testRPCName2 = nil;
-
+ __block SDLPermissionElement *testPermissionElement1 = nil;
+ __block SDLPermissionElement *testPermissionElement2 = nil;
+
beforeEach(^{
testRPCName1 = @"testRPCName1";
testRPCName2 = @"testRPCName2";
+ testPermissionElement1 = [[SDLPermissionElement alloc] initWithRPCName:testRPCName1 parameterPermissions:nil];
+ testPermissionElement2 = [[SDLPermissionElement alloc] initWithRPCName:testRPCName2 parameterPermissions:nil];
});
-
+
describe(@"should initialize correctly", ^{
- __block NSArray<SDLPermissionRPCName> *testRPCNames = nil;
+ __block NSArray<SDLPermissionElement *> *testPermissionElements = nil;
__block SDLPermissionGroupType testGroupType = SDLPermissionGroupTypeAny;
__block SDLPermissionFilter *testFilter = nil;
-
+
__block NSDictionary<SDLPermissionRPCName, NSNumber<SDLBool> *> *testObserverReturnChangedDict = nil;
-
+ __block NSDictionary<SDLPermissionRPCName, SDLRPCPermissionStatus *> *testRPCPermissionStatusReturnChangedDict = nil;
+
beforeEach(^{
- testRPCNames = @[testRPCName1, testRPCName2];
+ testPermissionElements = @[testPermissionElement1, testPermissionElement2];
testGroupType = SDLPermissionGroupTypeAny;
});
-
- context(@"using initWithRPCNames:changeType:observer:", ^{
- beforeEach(^{
- testFilter = [[SDLPermissionFilter alloc] initWithRPCNames:testRPCNames groupType:testGroupType observer:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
- testObserverReturnChangedDict = changedDict;
- }];
- });
-
- it(@"should set the rpcNames array correctly", ^{
- expect(testFilter.rpcNames).to(equal(testRPCNames));
- });
-
- describe(@"it should set up the observer correctly", ^{
- __block NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> *testObserverChangedDict = nil;
- __block NSNumber<SDLBool> *testRPCName1Bool = nil;
- __block NSNumber<SDLBool> *testRPCName2Bool = nil;
- __block SDLPermissionGroupStatus testObserverGroupStatus = SDLPermissionGroupStatusUnknown;
-
+
+ context(@"using initWithRPCNames:changeType:permissionsHandler:rpcPermissionStatusHandler", ^{
+ context(@"using SDLPermissionsChangedHandler init", ^{
beforeEach(^{
- testRPCName1Bool = @YES;
- testRPCName2Bool = @NO;
- testObserverChangedDict = @{testRPCName1: testRPCName1Bool,
- testRPCName2: testRPCName2Bool};
- testObserverGroupStatus = SDLPermissionGroupStatusMixed;
-
- testFilter.handler(testObserverChangedDict, testObserverGroupStatus);
+ testFilter = [[SDLPermissionFilter alloc] initWithPermissions:testPermissionElements groupType:testGroupType permissionsHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
+ testObserverReturnChangedDict = change;
+ }];
});
-
- it(@"should call the changedDict correctly", ^{
- expect(testObserverReturnChangedDict).to(equal(testObserverChangedDict));
+
+ it(@"should set the rpcNames array correctly", ^{
+ expect([testFilter rpcNamesFromPermissionElements:testPermissionElements]).to(equal([testFilter rpcNamesFromPermissionElements:testPermissionElements]));
});
-
- it(@"should call the status correctly", ^{
- expect(@(testObserverGroupStatus)).to(equal(@(testObserverGroupStatus)));
+
+ describe(@"it should set up the observer correctly", ^{
+ __block NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> *testObserverChangedDict = nil;
+ __block NSNumber<SDLBool> *testRPCName1Bool = nil;
+ __block NSNumber<SDLBool> *testRPCName2Bool = nil;
+ __block SDLPermissionGroupStatus testObserverGroupStatus = SDLPermissionGroupStatusUnknown;
+
+ beforeEach(^{
+ testRPCName1Bool = @YES;
+ testRPCName2Bool = @NO;
+ testObserverChangedDict = @{testRPCName1: testRPCName1Bool,
+ testRPCName2: testRPCName2Bool};
+ testObserverGroupStatus = SDLPermissionGroupStatusMixed;
+
+ testFilter.handler(testObserverChangedDict, testObserverGroupStatus);
+ });
+
+ it(@"should call the changedDict correctly", ^{
+ expect(testObserverReturnChangedDict).to(equal(testObserverChangedDict));
+ });
+
+ it(@"should call the status correctly", ^{
+ expect(@(testObserverGroupStatus)).to(equal(@(testObserverGroupStatus)));
+ });
});
});
- });
-
- context(@"using filterWithRPCNames:changeType:observer:", ^{
- beforeEach(^{
- testFilter = [SDLPermissionFilter filterWithRPCNames:testRPCNames groupType:testGroupType observer:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
- testObserverReturnChangedDict = changedDict;
- }];
- });
-
- it(@"should set the rpcNames array correctly", ^{
- expect(testFilter.rpcNames).to(equal(testRPCNames));
- });
-
- describe(@"it should set up the observer correctly", ^{
- __block NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> *testObserverChangedDict = nil;
- __block NSNumber<SDLBool> *testRPCName1Bool = nil;
- __block NSNumber<SDLBool> *testRPCName2Bool = nil;
- __block SDLPermissionGroupStatus testObserverGroupStatus = SDLPermissionGroupStatusUnknown;
-
+
+ context(@"using the SDLRPCPermissionStatusChangedHandler init", ^{
beforeEach(^{
- testRPCName1Bool = @YES;
- testRPCName2Bool = @NO;
- testObserverChangedDict = @{testRPCName1: testRPCName1Bool,
- testRPCName2: testRPCName2Bool};
- testObserverGroupStatus = SDLPermissionGroupStatusMixed;
-
- testFilter.handler(testObserverChangedDict, testObserverGroupStatus);
+ testFilter = [[SDLPermissionFilter alloc] initWithPermissions:testPermissionElements groupType:testGroupType permissionStatusHandler:^(NSDictionary<SDLRPCFunctionName,SDLRPCPermissionStatus *> * _Nonnull change, SDLPermissionGroupStatus status) {
+ testRPCPermissionStatusReturnChangedDict = change;
+ }];
});
-
- it(@"should call the changedDict correctly", ^{
- expect(testObserverReturnChangedDict).to(equal(testObserverChangedDict));
+
+ it(@"should set the permission elements array correctly", ^{
+ expect(testFilter.permissionElements).to(equal(testPermissionElements));
});
-
- it(@"should call the status correctly", ^{
- expect(@(testObserverGroupStatus)).to(equal(@(testObserverGroupStatus)));
+
+ describe(@"it should set up the observer correctly", ^{
+ __block NSDictionary<SDLPermissionRPCName, SDLRPCPermissionStatus *> *testObserverChangedDict = nil;
+ __block SDLRPCPermissionStatus *rpcPermissionStatus1 = nil;
+ __block SDLRPCPermissionStatus *rpcPermissionStatus2 = nil;
+ __block SDLPermissionGroupStatus testObserverGroupStatus = SDLPermissionGroupStatusUnknown;
+
+ beforeEach(^{
+ rpcPermissionStatus1 = [[SDLRPCPermissionStatus alloc] initWithRPCName:testRPCName1 isRPCAllowed:YES rpcParameters:nil];
+ rpcPermissionStatus2 = [[SDLRPCPermissionStatus alloc] initWithRPCName:testRPCName2 isRPCAllowed:NO rpcParameters:nil];
+ testObserverChangedDict = @{testRPCName1: rpcPermissionStatus1,
+ testRPCName2: rpcPermissionStatus2};
+ testObserverGroupStatus = SDLPermissionGroupStatusMixed;
+
+ testFilter.rpcPermissionStatusHandler(testObserverChangedDict, testObserverGroupStatus);
+ });
+
+ it(@"should call the changedDict correctly", ^{
+ expect(testRPCPermissionStatusReturnChangedDict).to(equal(testObserverChangedDict));
+ });
+
+ it(@"should call the status correctly", ^{
+ expect(@(testObserverGroupStatus)).to(equal(@(testObserverGroupStatus)));
+ });
});
});
});
});
-
+
describe(@"copying a filter", ^{
__block SDLPermissionFilter *testFilter = nil;
__block SDLPermissionFilter *testCopiedFilter = nil;
-
+
beforeEach(^{
- testFilter = [SDLPermissionFilter filterWithRPCNames:@[testRPCName1] groupType:SDLPermissionGroupTypeAny observer:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {}];
+ testFilter = [[SDLPermissionFilter alloc] initWithPermissions:@[testPermissionElement1] groupType:SDLPermissionGroupTypeAny permissionsHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {}];
testCopiedFilter = [testFilter copy];
});
-
+
it(@"should say copied filters are not the same instance", ^{
expect(testCopiedFilter).toNot(beIdenticalTo(testFilter));
});
-
+
it(@"should copy the identifier correctly", ^{
expect(testCopiedFilter.identifier).to(equal(testFilter.identifier));
});
-
+
it(@"should copy the filter array correctly", ^{
- expect(testCopiedFilter.rpcNames).to(equal(testFilter.rpcNames));
+ expect(testCopiedFilter.permissionElements).to(equal(testFilter.permissionElements));
});
-
+
it(@"should copy the change type correctly", ^{
expect(@(testCopiedFilter.groupType)).to(equal(@(testFilter.groupType)));
});
});
-
+
describe(@"testing equality", ^{
__block SDLPermissionFilter *testSameFilter1 = nil;
__block SDLPermissionFilter *testSameFilter2 = nil;
__block SDLPermissionFilter *testDifferentFilter = nil;
-
+
beforeEach(^{
- testSameFilter1 = [SDLPermissionFilter filterWithRPCNames:@[testRPCName1] groupType:SDLPermissionGroupTypeAny observer:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {}];
+ testSameFilter1 = [[SDLPermissionFilter alloc] initWithPermissions:@[testPermissionElement1] groupType:(SDLPermissionGroupType)SDLPermissionGroupTypeAny permissionsHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {}];
testSameFilter2 = [testSameFilter1 copy];
-
- testDifferentFilter = [SDLPermissionFilter filterWithRPCNames:@[testRPCName1] groupType:SDLPermissionGroupTypeAny observer:^(NSDictionary<SDLPermissionRPCName,NSNumber<SDLBool> *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {}];
+
+ testDifferentFilter = [[SDLPermissionFilter alloc] initWithPermissions:@[testPermissionElement1] groupType:(SDLPermissionGroupType)SDLPermissionGroupTypeAny permissionsHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {}];
});
-
+
it(@"should say copied filters are the same", ^{
expect(testSameFilter1).to(equal(testSameFilter2));
});
-
+
it(@"should say new filters are different", ^{
expect(testSameFilter1).toNot(equal(testDifferentFilter));
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionsManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionsManagerSpec.m
index eaf657595..05020ef37 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionsManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLPermissionsManagerSpec.m
@@ -11,6 +11,7 @@
#import "SDLPermissionFilter.h"
#import "SDLPermissionItem.h"
#import "SDLPermissionManager.h"
+#import "SDLRPCFunctionNames.h"
#import "SDLRPCNotificationNotification.h"
#import "SDLRPCResponseNotification.h"
@@ -27,12 +28,20 @@ QuickSpecBegin(SDLPermissionsManagerSpec)
describe(@"SDLPermissionsManager", ^{
__block SDLPermissionManager *testPermissionsManager = nil;
-
+
__block NSString *testRPCNameAllAllowed = nil;
__block NSString *testRPCNameAllDisallowed = nil;
__block NSString *testRPCNameFullLimitedAllowed = nil;
__block NSString *testRPCNameFullLimitedBackgroundAllowed = nil;
-
+
+ __block NSString *testRPCParameterNameAllAllowed = nil;
+ __block NSString *testRPCParameterNameAllDisallowed = nil;
+ __block NSString *testRPCParameterNameFullLimitedAllowed = nil;
+
+ __block SDLParameterPermissions *testParameterPermissionAllowed = nil;
+ __block SDLParameterPermissions *testParameterPermissionUserDisallowed = nil;
+ __block SDLParameterPermissions *testParameterPermissionFullLimitedAllowed = nil;
+
__block SDLPermissionItem *testPermissionAllAllowed = nil;
__block SDLHMIPermissions *testHMIPermissionsAllAllowed = nil;
__block SDLPermissionItem *testPermissionAllDisallowed = nil;
@@ -41,85 +50,109 @@ describe(@"SDLPermissionsManager", ^{
__block SDLHMIPermissions *testHMIPermissionsFullLimitedAllowed = nil;
__block SDLPermissionItem *testPermissionFullLimitedBackgroundAllowed = nil;
__block SDLHMIPermissions *testHMIPermissionsFullLimitedBackgroundAllowed = nil;
-
+
__block SDLOnPermissionsChange *testPermissionsChange = nil;
-
+
__block SDLOnHMIStatus *testLimitedHMIStatus = nil;
__block SDLOnHMIStatus *testBackgroundHMIStatus = nil;
__block SDLOnHMIStatus *testNoneHMIStatus = nil;
-
+
__block SDLRPCNotificationNotification *testPermissionsNotification = nil;
__block SDLRPCNotificationNotification *limitedHMINotification = nil;
__block SDLRPCNotificationNotification *backgroundHMINotification = nil;
__block SDLRPCNotificationNotification *noneHMINotification = nil;
-
+
+ __block SDLPermissionElement *testPermissionElementAllAllowed = nil;
+ __block SDLPermissionElement *testPermissionElementFullLimitedAllowed = nil;
+ __block SDLPermissionElement *testPermissionElementDisallowed = nil;
+
beforeEach(^{
// Permission Names
testRPCNameAllAllowed = @"AllAllowed";
testRPCNameAllDisallowed = @"AllDisallowed";
testRPCNameFullLimitedAllowed = @"FullAndLimitedAllowed";
testRPCNameFullLimitedBackgroundAllowed = @"FullAndLimitedAndBackgroundAllowed";
-
+
+ // Parameter Permission Names
+ testRPCParameterNameAllAllowed = @"AllAllowed";
+ testRPCParameterNameAllDisallowed = @"AllDisallowed";
+ testRPCParameterNameFullLimitedAllowed = @"FullAndLimitedAllowed";
+
// Create a manager
testPermissionsManager = [[SDLPermissionManager alloc] init];
-
+
// Permission states
testHMIPermissionsAllAllowed = [[SDLHMIPermissions alloc] init];
testHMIPermissionsAllAllowed.allowed = @[SDLHMILevelBackground, SDLHMILevelFull, SDLHMILevelLimited, SDLHMILevelNone];
-
+
testHMIPermissionsAllDisallowed = [[SDLHMIPermissions alloc] init];
testHMIPermissionsAllDisallowed.userDisallowed = @[SDLHMILevelBackground, SDLHMILevelFull, SDLHMILevelLimited, SDLHMILevelNone];
-
+
testHMIPermissionsFullLimitedAllowed = [[SDLHMIPermissions alloc] init];
testHMIPermissionsFullLimitedAllowed.allowed = @[SDLHMILevelFull, SDLHMILevelLimited];
testHMIPermissionsFullLimitedAllowed.userDisallowed = @[SDLHMILevelBackground, SDLHMILevelNone];
-
+
testHMIPermissionsFullLimitedBackgroundAllowed = [[SDLHMIPermissions alloc] init];
testHMIPermissionsFullLimitedBackgroundAllowed.allowed = @[SDLHMILevelFull, SDLHMILevelLimited, SDLHMILevelBackground];
testHMIPermissionsFullLimitedBackgroundAllowed.userDisallowed = @[SDLHMILevelNone];
-
+
+ // Assemble Parameter Permissions
+ testParameterPermissionAllowed = [[SDLParameterPermissions alloc] init];
+ testParameterPermissionAllowed.allowed = @[testRPCParameterNameAllAllowed];
+
+ testParameterPermissionUserDisallowed = [[SDLParameterPermissions alloc] init];
+ testParameterPermissionUserDisallowed.userDisallowed = @[testRPCParameterNameAllDisallowed];
+
+ testParameterPermissionFullLimitedAllowed = [[SDLParameterPermissions alloc] init];
+ testParameterPermissionFullLimitedAllowed.allowed = @[testRPCParameterNameAllAllowed, testRPCParameterNameFullLimitedAllowed];
+
// Assemble Permissions
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
-
+
testPermissionAllAllowed = [[SDLPermissionItem alloc] init];
testPermissionAllAllowed.rpcName = testRPCNameAllAllowed;
testPermissionAllAllowed.hmiPermissions = testHMIPermissionsAllAllowed;
- testPermissionAllAllowed.parameterPermissions = testParameterPermissions;
-
+ testPermissionAllAllowed.parameterPermissions = testParameterPermissionAllowed;
+
testPermissionAllDisallowed = [[SDLPermissionItem alloc] init];
testPermissionAllDisallowed.rpcName = testRPCNameAllDisallowed;
testPermissionAllDisallowed.hmiPermissions = testHMIPermissionsAllDisallowed;
- testPermissionAllDisallowed.parameterPermissions = testParameterPermissions;
-
+ testPermissionAllDisallowed.parameterPermissions = testParameterPermissionUserDisallowed;
+
testPermissionFullLimitedAllowed = [[SDLPermissionItem alloc] init];
testPermissionFullLimitedAllowed.rpcName = testRPCNameFullLimitedAllowed;
testPermissionFullLimitedAllowed.hmiPermissions = testHMIPermissionsFullLimitedAllowed;
- testPermissionFullLimitedAllowed.parameterPermissions = testParameterPermissions;
-
+ testPermissionFullLimitedAllowed.parameterPermissions = testParameterPermissionFullLimitedAllowed;
+
testPermissionFullLimitedBackgroundAllowed = [[SDLPermissionItem alloc] init];
testPermissionFullLimitedBackgroundAllowed.rpcName = testRPCNameFullLimitedBackgroundAllowed;
testPermissionFullLimitedBackgroundAllowed.hmiPermissions = testHMIPermissionsFullLimitedBackgroundAllowed;
testPermissionFullLimitedBackgroundAllowed.parameterPermissions = testParameterPermissions;
-
+
// Create OnHMIStatus objects
testLimitedHMIStatus = [[SDLOnHMIStatus alloc] init];
testLimitedHMIStatus.hmiLevel = SDLHMILevelLimited;
-
+
testBackgroundHMIStatus = [[SDLOnHMIStatus alloc] init];
testBackgroundHMIStatus.hmiLevel = SDLHMILevelBackground;
-
+
testNoneHMIStatus = [[SDLOnHMIStatus alloc] init];
testNoneHMIStatus.hmiLevel = SDLHMILevelNone;
-
+
// Create OnPermissionsChange object
testPermissionsChange = [[SDLOnPermissionsChange alloc] init];
testPermissionsChange.permissionItem = @[testPermissionAllAllowed, testPermissionAllDisallowed, testPermissionFullLimitedAllowed, testPermissionFullLimitedBackgroundAllowed];
-
+
// Permission Notifications
testPermissionsNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionsChange];
limitedHMINotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:testLimitedHMIStatus];
backgroundHMINotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:testBackgroundHMIStatus];
noneHMINotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:nil rpcNotification:testNoneHMIStatus];
+
+ // Permission Elements
+ testPermissionElementAllAllowed = [[SDLPermissionElement alloc] initWithRPCName:testRPCNameAllAllowed parameterPermissions:@[testRPCParameterNameAllAllowed]];
+ testPermissionElementFullLimitedAllowed = [[SDLPermissionElement alloc] initWithRPCName:testRPCNameFullLimitedAllowed parameterPermissions:@[testRPCParameterNameFullLimitedAllowed]];
+ testPermissionElementDisallowed = [[SDLPermissionElement alloc] initWithRPCName:testRPCNameAllDisallowed parameterPermissions:@[testRPCParameterNameAllDisallowed]];
});
it(@"should clear when stopped", ^{
@@ -130,165 +163,367 @@ describe(@"SDLPermissionsManager", ^{
expect(testPermissionsManager.currentHMILevel).to(beNil());
expect(testPermissionsManager.requiresEncryption).to(beFalse());
});
-
+
describe(@"checking if a permission is allowed", ^{
__block NSString *someRPCName = nil;
+ __block SDLRPCFunctionName someRPCFunctionName = nil;
__block BOOL testResultBOOL = NO;
-
+
context(@"when no permissions exist", ^{
- beforeEach(^{
- someRPCName = @"some rpc name";
-
- testResultBOOL = [testPermissionsManager isRPCAllowed:someRPCName];
+ context(@"deprecated isRPCAllowed: method", ^{
+ beforeEach(^{
+ someRPCName = @"some rpc name";
+
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultBOOL = [testPermissionsManager isRPCAllowed:someRPCName];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
});
-
- it(@"should not be allowed", ^{
- expect(@(testResultBOOL)).to(equal(@NO));
+
+ context(@"isRPCNameAllowed: method", ^{
+ beforeEach(^{
+ someRPCFunctionName = @"SomeRPCFunctionName";
+ testResultBOOL = [testPermissionsManager isRPCNameAllowed:someRPCName];
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
});
});
-
+
context(@"when permissions exist but no HMI level", ^{
- beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultBOOL = [testPermissionsManager isRPCAllowed:testRPCNameAllAllowed];
- });
-
- it(@"should not be allowed", ^{
- expect(@(testResultBOOL)).to(equal(@NO));
- });
- });
-
- context(@"when permissions exist", ^{
- context(@"and the permission is allowed", ^{
+ context(@"deprecated isRPCAllowed: method", ^{
beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
testResultBOOL = [testPermissionsManager isRPCAllowed:testRPCNameAllAllowed];
+ #pragma clang diagnostic pop
});
-
- it(@"should be allowed", ^{
- expect(@(testResultBOOL)).to(equal(@YES));
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
});
});
-
- context(@"and the permission is denied", ^{
+
+ context(@"isRPCNameAllowed: method", ^{
beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultBOOL = [testPermissionsManager isRPCAllowed:testRPCNameAllDisallowed];
+ testResultBOOL = [testPermissionsManager isRPCNameAllowed:someRPCName];
});
-
- it(@"should be denied", ^{
- expect(@(testResultBOOL)).to(equal(@NO));
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+ });
+
+ context(@"when permissions exist", ^{
+ context(@"deprecated isRPCAllowed: method", ^{
+ context(@"and the permission is allowed", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultBOOL = [testPermissionsManager isRPCAllowed:testRPCNameAllAllowed];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should be allowed", ^{
+ expect(testResultBOOL).to(beTrue());
+ });
+ });
+
+ context(@"and the permission is denied", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultBOOL = [testPermissionsManager isRPCAllowed:testRPCNameAllDisallowed];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should be denied", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+ });
+
+ context(@"isRPCNameAllowed: method", ^{
+ context(@"and the permission is allowed", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isRPCNameAllowed:testRPCNameAllAllowed];
+ });
+
+ it(@"should be allowed", ^{
+ expect(testResultBOOL).to(beTrue());
+ });
+ });
+
+ context(@"and the permission is denied", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isRPCNameAllowed:testRPCNameAllDisallowed];
+ });
+
+ it(@"should be denied", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
});
});
});
});
-
+
describe(@"checking the group status of RPCs", ^{
__block SDLPermissionGroupStatus testResultStatus = SDLPermissionGroupStatusUnknown;
-
+
context(@"with no permissions data", ^{
- beforeEach(^{
- testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ context(@"deprecated groupStatusOfRPCs: method", ^{
+ beforeEach(^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return unknown", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusUnknown)));
+ });
});
-
- it(@"should return unknown", ^{
- expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusUnknown)));
+
+ context(@"groupStatusOfRPCPermissions: method", ^{
+ beforeEach(^{
+ testResultStatus = [testPermissionsManager groupStatusOfRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementFullLimitedAllowed]];
+ });
+
+ it(@"should return unknown", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusUnknown)));
+ });
});
});
-
+
context(@"for an all allowed group", ^{
- beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
- [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed]];
+ context(@"deprecated groupStatusOfRPCs: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return allowed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusAllowed)));
+ });
});
-
- it(@"should return mixed", ^{
- expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusAllowed)));
+
+ context(@"groupStatusOfRPCPermissions: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultStatus = [testPermissionsManager groupStatusOfRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementFullLimitedAllowed]];
+ });
+
+ it(@"should return allowed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusAllowed)));
+ });
});
});
-
+
context(@"for an all disallowed group", ^{
- beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
- [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameFullLimitedAllowed, testRPCNameAllDisallowed]];
+ context(@"deprecated groupStatusOfRPCs: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameFullLimitedAllowed, testRPCNameAllDisallowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return disallowed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusDisallowed)));
+ });
});
-
- it(@"should return mixed", ^{
- expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusDisallowed)));
+
+ context(@"groupStatusOfRPCPermissions: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultStatus = [testPermissionsManager groupStatusOfRPCPermissions:@[testPermissionElementFullLimitedAllowed, testPermissionElementDisallowed]];
+ });
+
+ it(@"should return disallowed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusDisallowed)));
+ });
});
});
-
+
context(@"for a mixed group", ^{
- beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
- [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ context(@"deprecated groupStatusOfRPCs: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultStatus = [testPermissionsManager groupStatusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return mixed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusMixed)));
+ });
});
-
- it(@"should return mixed", ^{
- expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusMixed)));
+
+ context(@"groupStatusOfRPCPermissions: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultStatus = [testPermissionsManager groupStatusOfRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementDisallowed]];
+ });
+
+ it(@"should return mixed", ^{
+ expect(@(testResultStatus)).to(equal(@(SDLPermissionGroupStatusMixed)));
+ });
});
});
});
-
+
describe(@"checking the status of RPCs", ^{
__block NSDictionary<SDLPermissionRPCName, NSNumber *> *testResultPermissionStatusDict = nil;
-
+ __block NSDictionary<SDLRPCFunctionName, SDLRPCPermissionStatus *> *testResultRPCPermissionStatusDict = nil;
+ __block SDLRPCPermissionStatus *allowedResultStatus = nil;
+ __block SDLRPCPermissionStatus *disallowedResultStatus = nil;
+
+ __block NSDictionary *testAllowedDict = nil;
+ __block SDLRPCPermissionStatus *testAllowedStatus = nil;
+ __block NSDictionary *testDisallowedDict = nil;
+ __block SDLRPCPermissionStatus *testDisallowedStatus = nil;
+
context(@"with no permissions data", ^{
- beforeEach(^{
- testResultPermissionStatusDict = [testPermissionsManager statusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ context(@"deprecated statusOfRPCs: method", ^{
+ beforeEach(^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultPermissionStatusDict = [testPermissionsManager statusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return correct permission statuses", ^{
+ expect(testResultPermissionStatusDict[testRPCNameAllAllowed]).to(equal(@NO));
+ expect(testResultPermissionStatusDict[testRPCNameAllDisallowed]).to(equal(@NO));
+ });
});
-
- it(@"should return correct permission statuses", ^{
- expect(testResultPermissionStatusDict[testRPCNameAllAllowed]).to(equal(@NO));
- expect(testResultPermissionStatusDict[testRPCNameAllDisallowed]).to(equal(@NO));
+
+ context(@"statusesOfRPCPermissions: method", ^{
+ beforeEach(^{
+ testResultRPCPermissionStatusDict = [testPermissionsManager statusesOfRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementDisallowed]];
+ allowedResultStatus = testResultRPCPermissionStatusDict[testPermissionElementAllAllowed.rpcName];
+ disallowedResultStatus = testResultRPCPermissionStatusDict[testPermissionElementDisallowed.rpcName];
+
+ testAllowedDict = [[NSDictionary alloc] initWithObjectsAndKeys:@(0), testRPCParameterNameAllAllowed, nil];
+ testAllowedStatus = [[SDLRPCPermissionStatus alloc] initWithRPCName:testPermissionElementAllAllowed.rpcName isRPCAllowed:YES rpcParameters:testAllowedDict];
+ testDisallowedDict = [[NSDictionary alloc] initWithObjectsAndKeys:@(0), testRPCParameterNameAllDisallowed, nil];
+ testDisallowedStatus = [[SDLRPCPermissionStatus alloc] initWithRPCName:testPermissionElementDisallowed.rpcName isRPCAllowed:YES rpcParameters:testDisallowedDict];
+ });
+
+ it(@"should return the correct permission statuses", ^{
+ expect(allowedResultStatus.rpcName).to(equal(testAllowedStatus.rpcName));
+ expect(allowedResultStatus.rpcParameters).to(equal(testAllowedStatus.rpcParameters));
+ expect(allowedResultStatus.rpcAllowed).to(equal(@NO));
+
+ expect(disallowedResultStatus.rpcName).to(equal(testDisallowedStatus.rpcName));
+ expect(disallowedResultStatus.rpcParameters).to(equal(testDisallowedStatus.rpcParameters));
+ expect(disallowedResultStatus.rpcAllowed).to(equal(@NO));
+ });
});
});
-
+
context(@"with permissions data", ^{
- beforeEach(^{
- [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
- [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
- testResultPermissionStatusDict = [testPermissionsManager statusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ context(@"deprecated statusOfRPCs: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResultPermissionStatusDict = [testPermissionsManager statusOfRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed]];
+ #pragma clang diagnostic pop
+ });
+
+ it(@"should return correct permission statuses", ^{
+ expect(testResultPermissionStatusDict[testRPCNameAllAllowed]).to(equal(@YES));
+ expect(testResultPermissionStatusDict[testRPCNameAllDisallowed]).to(equal(@NO));
+ });
});
-
- it(@"should return correct permission statuses", ^{
- expect(testResultPermissionStatusDict[testRPCNameAllAllowed]).to(equal(@YES));
- expect(testResultPermissionStatusDict[testRPCNameAllDisallowed]).to(equal(@NO));
+
+ context(@"statusesOfRPCPermissions: method", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultRPCPermissionStatusDict = [testPermissionsManager statusesOfRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementDisallowed]];
+
+ allowedResultStatus = testResultRPCPermissionStatusDict[testPermissionElementAllAllowed.rpcName];
+ disallowedResultStatus = testResultRPCPermissionStatusDict[testPermissionElementDisallowed.rpcName];
+
+ testAllowedDict = [[NSDictionary alloc] initWithObjectsAndKeys:@(1), testRPCParameterNameAllAllowed, nil];
+ testAllowedStatus = [[SDLRPCPermissionStatus alloc] initWithRPCName:testPermissionElementAllAllowed.rpcName isRPCAllowed:YES rpcParameters:testAllowedDict];
+
+ testDisallowedDict = [[NSDictionary alloc] initWithObjectsAndKeys:@(0), testRPCParameterNameAllDisallowed, nil];
+ testDisallowedStatus = [[SDLRPCPermissionStatus alloc] initWithRPCName:testPermissionElementDisallowed.rpcName isRPCAllowed:NO rpcParameters:testDisallowedDict];
+ });
+
+ it(@"should return the correct permission statuses", ^{
+ expect(allowedResultStatus.rpcName).to(equal(testAllowedStatus.rpcName));
+ expect(allowedResultStatus.rpcParameters).to(equal(testAllowedStatus.rpcParameters));
+ expect(allowedResultStatus.rpcAllowed).to(equal(testAllowedStatus.rpcAllowed));
+
+ expect(disallowedResultStatus.rpcName).to(equal(testDisallowedStatus.rpcName));
+ expect(disallowedResultStatus.rpcParameters).to(equal(testDisallowedStatus.rpcParameters));
+ expect(disallowedResultStatus.rpcAllowed).to(equal(testDisallowedStatus.rpcAllowed));
+ });
});
});
});
-
+
describe(@"adding and using observers", ^{
describe(@"adding new observers", ^{
context(@"when no data is present", ^{
__block BOOL testObserverCalled = NO;
__block SDLPermissionGroupStatus testObserverStatus = SDLPermissionGroupStatusUnknown;
__block NSDictionary<SDLPermissionRPCName,NSNumber *> *testObserverChangeDict = nil;
-
+
beforeEach(^{
testObserverCalled = NO;
testObserverStatus = SDLPermissionGroupStatusUnknown;
testObserverChangeDict = nil;
-
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
testObserverChangeDict = change;
testObserverStatus = status;
testObserverCalled = YES;
}];
+ #pragma clang diagnostic pop
});
-
+
it(@"should return correct permission statuses", ^{
expect(@(testObserverCalled)).to(equal(@YES));
expect(@(testObserverStatus)).to(equal(@(SDLPermissionGroupStatusUnknown)));
@@ -296,30 +531,33 @@ describe(@"SDLPermissionsManager", ^{
expect(testObserverChangeDict[testRPCNameAllDisallowed]).to(equal(@NO));
});
});
-
+
context(@"when data is already present", ^{
__block NSInteger numberOfTimesObserverCalled = 0;
__block NSDictionary<SDLPermissionRPCName,NSNumber *> *testObserverBlockChangedDict = nil;
__block SDLPermissionGroupStatus testObserverReturnStatus = SDLPermissionGroupStatusUnknown;
-
+
context(@"to match an ANY observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+
// This should be called twice, once for each RPC being observed. It should be called immediately since data should already be present
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName, NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
testObserverBlockChangedDict = changedDict;
testObserverReturnStatus = status;
}];
+ #pragma clang diagnostic pop
});
-
+
it(@"should call the observer with proper status", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(testObserverBlockChangedDict[testRPCNameAllAllowed]).to(equal(@YES));
@@ -328,25 +566,28 @@ describe(@"SDLPermissionsManager", ^{
expect(@(testObserverReturnStatus)).to(equal(@(SDLPermissionGroupStatusMixed)));
});
});
-
+
context(@"to match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level LIMITED
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+
// This should be called twice, once for each RPC being observed. It should be called immediately since data should already be present
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
testObserverBlockChangedDict = change;
testObserverReturnStatus = status;
}];
+ #pragma clang diagnostic pop
});
-
+
it(@"should call the observer with proper status", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(testObserverBlockChangedDict[testRPCNameAllAllowed]).to(equal(@YES));
@@ -355,24 +596,27 @@ describe(@"SDLPermissionsManager", ^{
expect(@(testObserverReturnStatus)).to(equal(@(SDLPermissionGroupStatusAllowed)));
});
});
-
+
context(@"that does not match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level NONE
[[NSNotificationCenter defaultCenter] postNotification:noneHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+
// This should be called twice, once for each RPC being observed. It should be called immediately since data should already be present
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllDisallowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
testObserverReturnStatus = status;
}];
+ #pragma clang diagnostic pop
});
-
+
it(@"should call the observer with status Disallowed", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(@(testObserverReturnStatus)).to(equal(@(SDLPermissionGroupStatusDisallowed)));
@@ -380,74 +624,116 @@ describe(@"SDLPermissionsManager", ^{
});
});
});
-
+
+ describe(@"adding a new observer with subscribeToRPCPermissions:groupType:Handler", ^{
+ context(@"when no data is present", ^{
+ __block BOOL testObserverCalled = NO;
+
+ beforeEach(^{
+ testObserverCalled = NO;
+ [testPermissionsManager subscribeToRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
+ testObserverCalled = YES;
+ }];
+ });
+
+ it(@"should be called", ^{
+ expect(testObserverCalled).to(beTrue());
+ });
+ });
+
+ context(@"when data is present", ^{
+ __block BOOL testObserverCalled = NO;
+
+ beforeEach(^{
+ testObserverCalled = NO;
+
+ // Post the notification before setting the observer to make sure data is already present
+ // HMI Full & Limited allowed
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ // This should not be called even with data currently present, the handler will only be called when an permissions update occurs after the RPC is subscribed to
+ [testPermissionsManager subscribeToRPCPermissions:@[testPermissionElementAllAllowed, testPermissionElementDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
+ testObserverCalled = YES;
+ }];
+ });
+
+ it(@"should be called", ^{
+ expect(@(testObserverCalled)).to(beTrue());
+ });
+ });
+ });
+
context(@"updating an observer with new permission data", ^{
__block NSInteger numberOfTimesObserverCalled = 0;
-
+
__block SDLOnPermissionsChange *testPermissionChangeUpdate = nil;
__block SDLPermissionItem *testPermissionUpdated = nil;
__block NSMutableArray<NSDictionary<SDLPermissionRPCName,NSNumber*> *> *changeDicts = nil;
__block NSMutableArray<NSNumber<SDLUInt> *> *testStatuses = nil;
-
+
context(@"to match an ANY observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level LIMITED
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
}];
-
+ #pragma clang diagnostic pop
+
// Create a permission update disallowing our current HMI level for the observed permission
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
SDLHMIPermissions *testHMIPermissionsUpdated = [[SDLHMIPermissions alloc] init];
testHMIPermissionsUpdated.allowed = @[SDLHMILevelBackground, SDLHMILevelFull];
testHMIPermissionsUpdated.userDisallowed = @[SDLHMILevelLimited, SDLHMILevelNone];
-
+
testPermissionUpdated = [[SDLPermissionItem alloc] init];
testPermissionUpdated.rpcName = testRPCNameAllAllowed;
testPermissionUpdated.hmiPermissions = testHMIPermissionsUpdated;
testPermissionUpdated.parameterPermissions = testParameterPermissions;
-
+
testPermissionChangeUpdate = [[SDLOnPermissionsChange alloc] init];
testPermissionChangeUpdate.permissionItem = [NSArray arrayWithObject:testPermissionUpdated];
-
+
// Send the permission update
SDLRPCNotificationNotification *updatedNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionChangeUpdate];
[[NSNotificationCenter defaultCenter] postNotification:updatedNotification];
});
-
+
it(@"should call the observer twice", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
-
+
it(@"should have proper data in the first change dict", ^{
expect(changeDicts[0].allKeys).to(contain(testRPCNameAllAllowed));
expect(changeDicts[0].allKeys).to(contain(testRPCNameAllDisallowed));
-
+
NSNumber<SDLBool> *allAllowed = changeDicts[0][testRPCNameAllAllowed];
expect(allAllowed).to(equal(@YES));
-
+
NSNumber<SDLBool> *allDisallowed = changeDicts[0][testRPCNameAllDisallowed];
expect(allDisallowed).to(equal(@NO));
});
-
+
it(@"should have the proper data in the second change dict", ^{
expect(changeDicts[1].allKeys).to(contain(testRPCNameAllAllowed));
expect(changeDicts[1].allKeys).to(contain(testRPCNameAllDisallowed));
-
+
NSNumber<SDLBool> *allAllowed = changeDicts[1][testRPCNameAllAllowed];
expect(allAllowed).to(equal(@NO));
-
+
NSNumber<SDLBool> *allDisallowed = changeDicts[1][testRPCNameAllDisallowed];
expect(allDisallowed).to(equal(@NO));
});
@@ -483,188 +769,200 @@ describe(@"SDLPermissionsManager", ^{
});
});
});
-
+
context(@"to match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level BACKGROUND
[[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
context(@"so that it becomes All Allowed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllDisallowed, testRPCNameFullLimitedBackgroundAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:change];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
// Create a permission update allowing our current HMI level for the observed permission
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
SDLHMIPermissions *testHMIPermissionsUpdated = [[SDLHMIPermissions alloc] init];
testHMIPermissionsUpdated.allowed = @[SDLHMILevelLimited, SDLHMILevelNone, SDLHMILevelBackground, SDLHMILevelFull];
testHMIPermissionsUpdated.userDisallowed = @[];
-
+
testPermissionUpdated = [[SDLPermissionItem alloc] init];
testPermissionUpdated.rpcName = testRPCNameAllDisallowed;
testPermissionUpdated.hmiPermissions = testHMIPermissionsUpdated;
testPermissionUpdated.parameterPermissions = testParameterPermissions;
-
+
testPermissionChangeUpdate = [[SDLOnPermissionsChange alloc] init];
testPermissionChangeUpdate.permissionItem = [NSArray arrayWithObject:testPermissionUpdated];
-
+
// Send the permission update
SDLRPCNotificationNotification *updatedNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionChangeUpdate];
[[NSNotificationCenter defaultCenter] postNotification:updatedNotification];
});
-
+
it(@"should call the observer twice", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
-
+
it(@"should have proper data in the first change dict", ^{
expect(changeDicts[0].allKeys).to(haveCount(@2));
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusMixed)));
});
-
+
it(@"should have the proper data in the second change dict", ^{
expect(changeDicts[1].allKeys).to(haveCount(@2));
expect(testStatuses[1]).to(equal(@(SDLPermissionGroupStatusAllowed)));
});
});
-
+
context(@"so that it goes from All Allowed to mixed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:change];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
// Create a permission update disallowing our current HMI level for the observed permission
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
SDLHMIPermissions *testHMIPermissionsUpdated = [[SDLHMIPermissions alloc] init];
testHMIPermissionsUpdated.allowed = @[];
testHMIPermissionsUpdated.userDisallowed = @[SDLHMILevelBackground, SDLHMILevelFull, SDLHMILevelLimited, SDLHMILevelNone];
-
+
testPermissionUpdated = [[SDLPermissionItem alloc] init];
testPermissionUpdated.rpcName = testRPCNameAllAllowed;
testPermissionUpdated.hmiPermissions = testHMIPermissionsUpdated;
testPermissionUpdated.parameterPermissions = testParameterPermissions;
-
+
testPermissionChangeUpdate = [[SDLOnPermissionsChange alloc] init];
testPermissionChangeUpdate.permissionItem = [NSArray arrayWithObject:testPermissionUpdated];
-
+
// Send the permission update
SDLRPCNotificationNotification *updatedNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionChangeUpdate];
[[NSNotificationCenter defaultCenter] postNotification:updatedNotification];
});
-
+
it(@"should call the observer twice", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
-
+
it(@"should have proper data in the first change dict", ^{
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusAllowed)));
expect(changeDicts[0].allKeys).to(contain(testRPCNameAllAllowed));
-
+
NSNumber<SDLBool> *isAllowed = changeDicts[0][testRPCNameAllAllowed];
expect(isAllowed).to(equal(@YES));
});
-
+
it(@"should have the proper data in the second change dict", ^{
expect(testStatuses[1]).to(equal(@(SDLPermissionGroupStatusDisallowed)));
expect(changeDicts[1].allKeys).to(contain(testRPCNameAllAllowed));
-
+
NSNumber<SDLBool> *isAllowed = changeDicts[1][testRPCNameAllAllowed];
expect(isAllowed).to(equal(@NO));
});
});
});
-
+
context(@"to not match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level BACKGROUND
[[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
context(@"from mixed to disallowed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:change];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
// Create a permission update disallowing our current HMI level for the observed permission
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
SDLHMIPermissions *testHMIPermissionsUpdated = [[SDLHMIPermissions alloc] init];
testHMIPermissionsUpdated.allowed = @[];
testHMIPermissionsUpdated.userDisallowed = @[SDLHMILevelBackground, SDLHMILevelFull, SDLHMILevelLimited, SDLHMILevelNone];
-
+
testPermissionUpdated = [[SDLPermissionItem alloc] init];
testPermissionUpdated.rpcName = testRPCNameAllAllowed;
testPermissionUpdated.hmiPermissions = testHMIPermissionsUpdated;
testPermissionUpdated.parameterPermissions = testParameterPermissions;
-
+
testPermissionChangeUpdate = [[SDLOnPermissionsChange alloc] init];
testPermissionChangeUpdate.permissionItem = [NSArray arrayWithObject:testPermissionUpdated];
-
+
// Send the permission update
SDLRPCNotificationNotification *updatedNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionChangeUpdate];
[[NSNotificationCenter defaultCenter] postNotification:updatedNotification];
});
-
+
it(@"should call the observer with a mixed status", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusMixed)));
});
});
-
+
context(@"from disallowed to mixed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameFullLimitedAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull change, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:change];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
// Create a permission update disallowing our current HMI level for the observed permission
SDLParameterPermissions *testParameterPermissions = [[SDLParameterPermissions alloc] init];
SDLHMIPermissions *testHMIPermissionsUpdated = [[SDLHMIPermissions alloc] init];
testHMIPermissionsUpdated.allowed = @[SDLHMILevelLimited, SDLHMILevelBackground];
testHMIPermissionsUpdated.userDisallowed = @[SDLHMILevelFull, SDLHMILevelNone];
-
+
testPermissionUpdated = [[SDLPermissionItem alloc] init];
testPermissionUpdated.rpcName = testRPCNameAllAllowed;
testPermissionUpdated.hmiPermissions = testHMIPermissionsUpdated;
testPermissionUpdated.parameterPermissions = testParameterPermissions;
-
+
testPermissionChangeUpdate = [[SDLOnPermissionsChange alloc] init];
testPermissionChangeUpdate.permissionItem = [NSArray arrayWithObject:testPermissionUpdated];
-
+
// Send the permission update
SDLRPCNotificationNotification *updatedNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangePermissionsNotification object:nil rpcNotification:testPermissionChangeUpdate];
[[NSNotificationCenter defaultCenter] postNotification:updatedNotification];
});
-
+
it(@"should call the observer", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusDisallowed)));
@@ -672,173 +970,188 @@ describe(@"SDLPermissionsManager", ^{
});
});
});
-
+
context(@"updating an observer with a new HMI level", ^{
__block NSInteger numberOfTimesObserverCalled = 0;
__block NSMutableArray<NSDictionary<SDLPermissionRPCName,NSNumber *> *> *changeDicts = nil;
__block NSMutableArray<NSNumber<SDLUInt> *> *testStatuses = nil;
-
+
context(@"to match an ANY observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level BACKGROUND
[[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
-
+
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
// Upgrade the HMI level to LIMITED
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
});
-
+
it(@"should call the observer twice", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
-
+
it(@"should have proper data in the first change dict", ^{
NSNumber<SDLBool> *allAllowed = changeDicts[0][testRPCNameAllAllowed];
expect(allAllowed).to(equal(@YES));
-
+
NSNumber<SDLBool> *fullLimitedAllowed = changeDicts[0][testRPCNameFullLimitedAllowed];
expect(fullLimitedAllowed).to(equal(@NO));
-
+
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusMixed)));
});
-
+
it(@"should have the proper data in the second change dict", ^{
NSNumber<SDLBool> *allAllowed = changeDicts[1][testRPCNameAllAllowed];
expect(allAllowed).to(equal(@YES));
-
+
NSNumber<SDLBool> *fullLimitedAllowed = changeDicts[1][testRPCNameFullLimitedAllowed];
expect(fullLimitedAllowed).to(equal(@YES));
-
+
expect(testStatuses[1]).to(equal(@(SDLPermissionGroupStatusAllowed)));
});
});
-
+
context(@"to match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level BACKGROUND
[[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
context(@"so that it becomes All Allowed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
});
-
+
it(@"should call the observer", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
-
+
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusDisallowed)));
expect(testStatuses[1]).to(equal(@(SDLPermissionGroupStatusAllowed)));
});
});
-
+
context(@"so that it goes from All Allowed to at least some disallowed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameFullLimitedBackgroundAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
[[NSNotificationCenter defaultCenter] postNotification:noneHMINotification];
});
-
+
it(@"should call the observer twice", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
-
+
it(@"should have proper data in the first change dict", ^{
expect(changeDicts[0].allKeys).to(contain(testRPCNameFullLimitedBackgroundAllowed));
-
+
NSNumber<SDLBool> *isAllowed = changeDicts[0][testRPCNameFullLimitedBackgroundAllowed];
expect(isAllowed).to(equal(@YES));
-
+
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusAllowed)));
});
-
+
it(@"should have the proper data in the second change dict", ^{
expect(changeDicts[1].allKeys).to(contain(testRPCNameFullLimitedBackgroundAllowed));
-
+
NSNumber<SDLBool> *isAllowed = changeDicts[1][testRPCNameFullLimitedBackgroundAllowed];
expect(isAllowed).to(equal(@NO));
-
+
expect(testStatuses[1]).to(equal(@(SDLPermissionGroupStatusDisallowed)));
});
});
});
-
+
context(@"to not match an all allowed observer", ^{
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
changeDicts = [NSMutableArray array];
testStatuses = [NSMutableArray array];
-
+
// Post the notification before setting the observer to make sure data is already present
// HMI Full & Limited allowed, hmi level BACKGROUND
[[NSNotificationCenter defaultCenter] postNotification:backgroundHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
context(@"that goes from disallowed to mixed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameFullLimitedAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
});
-
+
it(@"should call the observer", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
-
+
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusDisallowed)));
});
});
-
+
context(@"that goes from mixed to disallowed", ^{
beforeEach(^{
// Set an observer that should be called immediately for the preexisting data, then called again when new data is sent
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameFullLimitedAllowed, testRPCNameFullLimitedBackgroundAllowed] groupType:SDLPermissionGroupTypeAllAllowed withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
[changeDicts addObject:changedDict];
[testStatuses addObject:@(status)];
}];
-
+ #pragma clang diagnostic pop
+
[[NSNotificationCenter defaultCenter] postNotification:noneHMINotification];
});
-
+
it(@"should call the observer", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
expect(testStatuses[0]).to(equal(@(SDLPermissionGroupStatusMixed)));
@@ -847,86 +1160,180 @@ describe(@"SDLPermissionsManager", ^{
});
});
});
-
+
+ describe(@"checking parameter permissions", ^{
+ __block SDLRPCFunctionName someRPCFunctionName = nil;
+ __block NSString *someRPCParameterName = nil;
+ __block BOOL testResultBOOL = NO;
+
+ context(@"when no permissions exist", ^{
+ beforeEach(^{
+ someRPCFunctionName = @"SomeRPCFunctionName";
+ someRPCParameterName = @"SomeRPCParameterName";
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:someRPCFunctionName parameter:someRPCParameterName];
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+
+ context(@"when permissions exist but no HMI level", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:testRPCNameAllAllowed parameter:testRPCParameterNameAllAllowed];
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+
+ context(@"when permissions exist and HMI level exists", ^{
+ context(@"and the parameter permission is allowed", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:testRPCNameAllAllowed parameter:testRPCParameterNameAllAllowed];
+ });
+
+ it(@"should be allowed", ^{
+ expect(testResultBOOL).to(beTrue());
+ });
+ });
+
+ context(@"and the parameter permission is denied", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:testRPCNameAllDisallowed parameter:testRPCParameterNameAllDisallowed];
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+
+ context(@"when user disallowed parameter permissions is not nil", ^{
+ context(@"and the parameter is disallowed", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:testRPCNameFullLimitedAllowed parameter:testRPCParameterNameAllDisallowed];
+ });
+
+ it(@"should not be allowed", ^{
+ expect(testResultBOOL).to(beFalse());
+ });
+ });
+
+ context(@"and the parameter is allowed", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
+ [[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
+
+ testResultBOOL = [testPermissionsManager isPermissionParameterAllowed:testRPCNameFullLimitedAllowed parameter:testRPCParameterNameAllAllowed];
+ });
+
+ it(@"should be allowed", ^{
+ expect(testResultBOOL).to(beTrue());
+ });
+ });
+ });
+ });
+ });
+
describe(@"removing observers", ^{
context(@"removing the only observer", ^{
__block NSInteger numberOfTimesObserverCalled = 0;
-
+
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Add two observers
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSUUID *observerId = [testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName, NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
}];
-
+ #pragma clang diagnostic pop
+
// Remove one observer
[testPermissionsManager removeObserverForIdentifier:observerId];
-
+
// Post a notification
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
it(@"should only call the observer once", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@1));
});
});
-
+
context(@"removing a single observer and leaving one remaining", ^{
__block NSUInteger numberOfTimesObserverCalled = 0;
-
+
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Add two observers
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
NSUUID *testRemovedObserverId = [testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
}];
-
+
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameFullLimitedAllowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
}];
-
+ #pragma clang diagnostic pop
+
// Remove one observer
[testPermissionsManager removeObserverForIdentifier:testRemovedObserverId];
-
+
// Post a notification
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
it(@"should call three observers", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@3));
});
});
-
+
context(@"removing all observers", ^{
__block NSInteger numberOfTimesObserverCalled = 0;
-
+
beforeEach(^{
// Reset vars
numberOfTimesObserverCalled = 0;
-
+
// Add two observers
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
}];
-
+
[testPermissionsManager addObserverForRPCs:@[testRPCNameAllAllowed, testRPCNameAllDisallowed] groupType:SDLPermissionGroupTypeAny withHandler:^(NSDictionary<SDLPermissionRPCName,NSNumber *> * _Nonnull changedDict, SDLPermissionGroupStatus status) {
numberOfTimesObserverCalled++;
}];
-
+ #pragma clang diagnostic pop
+
// Remove all observers
[testPermissionsManager removeAllObservers];
-
+
// Add some permissions
[[NSNotificationCenter defaultCenter] postNotification:limitedHMINotification];
[[NSNotificationCenter defaultCenter] postNotification:testPermissionsNotification];
});
-
+
it(@"should not call the observer", ^{
expect(@(numberOfTimesObserverCalled)).to(equal(@2));
});
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLSequentialRPCRequestOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLSequentialRPCRequestOperationSpec.m
index 0c121d22c..9f3f5cc93 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLSequentialRPCRequestOperationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLSequentialRPCRequestOperationSpec.m
@@ -51,9 +51,9 @@ describe(@"Sending sequential requests", ^{
testOperation = [[SDLSequentialRPCRequestOperation alloc] initWithConnectionManager:testConnectionManager requests:sendRequests.copy progressHandler:^BOOL(__kindof SDLRPCRequest * _Nonnull request, __kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error, float percentComplete) {
TestRequestProgressResponse *progressResponse = testProgressResponses[request.correlationID];
- expect(progressResponse.percentComplete).to(beCloseTo(percentComplete));
- expect(response).toNot(beNil());
- expect(error).to(beNil());
+ expect(progressResponse.percentComplete).toEventually(beCloseTo(percentComplete));
+ expect(response).toEventuallyNot(beNil());
+ expect(error).toEventually(beNil());
[resultResponses addObject:response];
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m
index 730af59f7..4f708087b 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonManagerSpec.m
@@ -167,6 +167,7 @@ describe(@"a soft button manager", ^{
testObject2 = [[SDLSoftButtonObject alloc] initWithName:object2Name state:object2State1 handler:nil];
testManager.softButtonObjects = @[testObject1, testObject2];
+ [NSThread sleepForTimeInterval:0.1];
});
it(@"should set soft buttons correctly", ^{
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonStateSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonStateSpec.m
index e62a9256f..0d89b53b0 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonStateSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLSoftButtonStateSpec.m
@@ -51,7 +51,7 @@ describe(@"soft button state", ^{
SDLSoftButton *testSoftButton = testState.softButton;
expect(testSoftButton.type).to(equal(SDLSoftButtonTypeBoth));
-// expect(testSoftButton.handler).to(beNil());
+ expect((id)testSoftButton.handler).to(beNil());
expect(testSoftButton.softButtonID).to(equal(0));
expect(testSoftButton.isHighlighted).to(beFalsy());
expect(testSoftButton.systemAction).to(equal(SDLSystemActionDefaultAction));
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m
index 69e9cea80..93d5e5829 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingAudioLifecycleManagerSpec.m
@@ -2,6 +2,7 @@
#import <Nimble/Nimble.h>
#import <OCMock/OCMock.h>
+#import "SDLAudioStreamManager.h"
#import "SDLConfiguration.h"
#import "SDLControlFramePayloadAudioStartServiceAck.h"
#import "SDLDisplayCapabilities.h"
@@ -22,9 +23,12 @@
#import "SDLVehicleType.h"
#import "TestConnectionManager.h"
+
@interface SDLStreamingAudioLifecycleManager()
-@property (copy, nonatomic) NSString *connectedVehicleMake;
+@property (weak, nonatomic) SDLProtocol *protocol;
+@property (copy, nonatomic, nullable) NSString *connectedVehicleMake;
+@property (nonatomic, strong, readwrite) SDLAudioStreamManager *audioTranscodingManager;
@end
@@ -34,6 +38,7 @@ describe(@"the streaming audio manager", ^{
__block SDLStreamingAudioLifecycleManager *streamingLifecycleManager = nil;
__block SDLConfiguration *testConfig = nil;
__block TestConnectionManager *testConnectionManager = nil;
+ __block SDLAudioStreamManager *mockAudioStreamManager = nil;
__block SDLSystemCapabilityManager *testSystemCapabilityManager = nil;
__block void (^sendNotificationForHMILevel)(SDLHMILevel hmiLevel) = ^(SDLHMILevel hmiLevel) {
@@ -41,19 +46,20 @@ describe(@"the streaming audio manager", ^{
hmiStatus.hmiLevel = hmiLevel;
SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:self rpcNotification:hmiStatus];
[[NSNotificationCenter defaultCenter] postNotification:notification];
-
- [NSThread sleepForTimeInterval:0.3];
};
beforeEach(^{
testConfig = OCMClassMock([SDLConfiguration class]);
testConnectionManager = [[TestConnectionManager alloc] init];
+
testSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]);
streamingLifecycleManager = [[SDLStreamingAudioLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:testSystemCapabilityManager];
+ mockAudioStreamManager = OCMClassMock([SDLAudioStreamManager class]);
+ streamingLifecycleManager.audioTranscodingManager = mockAudioStreamManager;
});
it(@"should initialize properties", ^{
- expect(streamingLifecycleManager.audioManager).toNot(beNil());
+ expect(streamingLifecycleManager.audioTranscodingManager).toNot(beNil());
expect(@(streamingLifecycleManager.isStreamingSupported)).to(equal(@NO));
expect(@(streamingLifecycleManager.isAudioConnected)).to(equal(@NO));
expect(@(streamingLifecycleManager.isAudioEncrypted)).to(equal(@NO));
@@ -105,11 +111,10 @@ describe(@"the streaming audio manager", ^{
SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse];
[[NSNotificationCenter defaultCenter] postNotification:notification];
- [NSThread sleepForTimeInterval:0.1];
});
it(@"should should save the connected vehicle make", ^{
- expect(streamingLifecycleManager.connectedVehicleMake).to(equal(testVehicleType.make));
+ expect(streamingLifecycleManager.connectedVehicleMake).toEventually(equal(testVehicleType.make));
});
});
@@ -141,7 +146,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should close the streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateShuttingDown));
});
});
@@ -151,7 +156,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateShuttingDown));
});
});
@@ -161,7 +166,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateReady));
});
});
@@ -171,7 +176,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateReady));
});
});
});
@@ -200,7 +205,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should close the streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateShuttingDown));
});
});
@@ -210,7 +215,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateShuttingDown));
});
});
@@ -220,7 +225,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateReady));
});
});
@@ -230,7 +235,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateReady));
});
});
});
@@ -252,7 +257,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not start the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateStopped));
});
});
@@ -262,7 +267,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should not start the stream", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateStopped));
});
});
@@ -272,7 +277,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should start the streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStarting));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateStarting));
});
});
@@ -282,7 +287,7 @@ describe(@"the streaming audio manager", ^{
});
it(@"should start the streams", ^{
- expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStarting));
+ expect(streamingLifecycleManager.currentAudioStreamState).toEventually(equal(SDLAudioStreamManagerStateStarting));
});
});
});
@@ -306,7 +311,7 @@ describe(@"the streaming audio manager", ^{
testAudioStartServicePayload = [[SDLControlFramePayloadAudioStartServiceAck alloc] initWithMTU:testMTU];
testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:testAudioStartServicePayload.data];
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testAudioMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testAudioMessage];
});
it(@"should have set all the right properties", ^{
@@ -330,7 +335,7 @@ describe(@"the streaming audio manager", ^{
testAudioHeader.serviceType = SDLServiceTypeAudio;
testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceACKMessage:testAudioMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testAudioMessage];
});
it(@"should have set all the right properties", ^{
@@ -352,7 +357,7 @@ describe(@"the streaming audio manager", ^{
testAudioHeader.serviceType = SDLServiceTypeAudio;
testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceACKMessage:testAudioMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testAudioMessage];
});
it(@"should have set all the right properties", ^{
@@ -374,7 +379,7 @@ describe(@"the streaming audio manager", ^{
testAudioHeader.serviceType = SDLServiceTypeAudio;
testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceNAKMessage:testAudioMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceNAK:testAudioMessage];
});
it(@"should have set all the right properties", ^{
@@ -382,6 +387,112 @@ describe(@"the streaming audio manager", ^{
});
});
});
+
+ describe(@"attempting to stop the manager", ^{
+ __block BOOL handlerCalled = NO;
+
+ beforeEach(^{
+ handlerCalled = NO;
+ [streamingLifecycleManager endAudioServiceWithCompletionHandler:^ {
+ handlerCalled = YES;
+ }];
+ streamingLifecycleManager.connectedVehicleMake = @"OEM_make_2";
+ });
+
+ context(@"when the manager is READY", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateReady fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager stop];
+ });
+
+ it(@"should transition to the stopped state and reset the saved properties", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+
+ expect(streamingLifecycleManager.protocol).to(beNil());
+ expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone));
+ expect(streamingLifecycleManager.connectedVehicleMake).to(beNil());
+ OCMVerify([mockAudioStreamManager stop]);
+ expect(handlerCalled).to(beTrue());
+ });
+ });
+
+ context(@"when the manager is already stopped", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateStopped fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager stop];
+ });
+
+ it(@"should stay in the stopped state", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+
+ expect(streamingLifecycleManager.protocol).to(beNil());
+ expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone));
+ expect(streamingLifecycleManager.connectedVehicleMake).to(beNil());
+ OCMReject([mockAudioStreamManager stop]);
+ expect(handlerCalled).to(beFalse());
+ });
+ });
+ });
+
+ describe(@"starting the manager when it's STOPPED", ^{
+ __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]);
+
+ beforeEach(^{
+ [streamingLifecycleManager startWithProtocol:protocolMock];
+ [streamingLifecycleManager endAudioServiceWithCompletionHandler:^{}];
+ });
+
+ context(@"when stopping the audio service due to a secondary transport shutdown", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.audioStreamStateMachine setToState:SDLAudioStreamManagerStateReady fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should reset the audio stream manger and send an end audio service control frame", ^{
+ OCMVerify([mockAudioStreamManager stop]);
+ OCMVerify([protocolMock endServiceWithType:SDLServiceTypeAudio]);
+ });
+
+ context(@"when the end audio service ACKs", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+
+ beforeEach(^{
+ testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testAudioHeader.frameType = SDLFrameTypeSingle;
+ testAudioHeader.frameData = SDLFrameInfoEndServiceACK;
+ testAudioHeader.encrypted = NO;
+ testAudioHeader.serviceType = SDLServiceTypeAudio;
+ testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
+
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testAudioMessage];
+ });
+
+ it(@"should transistion to the stopped state", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+
+ context(@"when the end audio service NAKs", ^{
+ __block SDLProtocolHeader *testAudioHeader = nil;
+ __block SDLProtocolMessage *testAudioMessage = nil;
+
+ beforeEach(^{
+ testAudioHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testAudioHeader.frameType = SDLFrameTypeSingle;
+ testAudioHeader.frameData = SDLFrameInfoEndServiceNACK;
+ testAudioHeader.encrypted = NO;
+ testAudioHeader.serviceType = SDLServiceTypeAudio;
+ testAudioMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testAudioHeader andPayload:nil];
+
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceNAK:testAudioMessage];
+ });
+
+ it(@"should transistion to the stopped state", ^{
+ expect(streamingLifecycleManager.currentAudioStreamState).to(equal(SDLAudioStreamManagerStateStopped));
+ });
+ });
+ });
+ });
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
index 079945a5f..f138e873d 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLStreamingVideoLifecycleManagerSpec.m
@@ -37,16 +37,20 @@
#import "SDLSystemCapabilityManager.h"
#import "SDLV2ProtocolHeader.h"
#import "SDLV2ProtocolMessage.h"
+#import "SDLVehicleType.h"
#import "SDLVideoStreamingCapability.h"
#import "SDLVideoStreamingState.h"
-#import "TestConnectionManager.h"
#import "SDLVehicleType.h"
-#import "SDLVersion.h"
+#import "TestConnectionManager.h"
+
@interface SDLStreamingVideoLifecycleManager ()
+
+@property (weak, nonatomic) SDLProtocol *protocol;
@property (copy, nonatomic, readonly) NSString *appName;
@property (copy, nonatomic, readonly) NSString *videoStreamBackgroundString;
-@property (copy, nonatomic) NSString *connectedVehicleMake;
+@property (copy, nonatomic, nullable) NSString *connectedVehicleMake;
+
@end
QuickSpecBegin(SDLStreamingVideoLifecycleManagerSpec)
@@ -68,8 +72,6 @@ describe(@"the streaming video manager", ^{
hmiStatus.videoStreamingState = streamState;
SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:self rpcNotification:hmiStatus];
[[NSNotificationCenter defaultCenter] postNotification:notification];
-
- [NSThread sleepForTimeInterval:0.3];
};
beforeEach(^{
@@ -82,7 +84,7 @@ describe(@"the streaming video manager", ^{
testLifecycleConfiguration.appType = SDLAppHMITypeNavigation;
- testConfig = [SDLConfiguration configurationWithLifecycle:testLifecycleConfiguration lockScreen:SDLLockScreenConfiguration.enabledConfiguration logging:SDLLogConfiguration.debugConfiguration streamingMedia:testConfiguration fileManager:SDLFileManagerConfiguration.defaultConfiguration];
+ testConfig = [[SDLConfiguration alloc] initWithLifecycle:testLifecycleConfiguration lockScreen:[SDLLockScreenConfiguration enabledConfiguration] logging:[SDLLogConfiguration debugConfiguration] streamingMedia:testConfiguration fileManager:[SDLFileManagerConfiguration defaultConfiguration] encryption:nil];
testSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]);
streamingLifecycleManager = [[SDLStreamingVideoLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfig systemCapabilityManager:testSystemCapabilityManager];
@@ -179,12 +181,11 @@ describe(@"the streaming video manager", ^{
SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse];
[[NSNotificationCenter defaultCenter] postNotification:notification];
- [NSThread sleepForTimeInterval:0.1];
});
it(@"should save the connected vehicle make but not the screen size", ^{
- expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).to(equal(@YES));
- expect(streamingLifecycleManager.connectedVehicleMake).to(equal(testVehicleType.make));
+ expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).toEventually(equal(@YES));
+ expect(streamingLifecycleManager.connectedVehicleMake).toEventually(equal(testVehicleType.make));
});
});
@@ -204,14 +205,15 @@ describe(@"the streaming video manager", ^{
#pragma clang diagnostic pop
someRegisterAppInterfaceResponse.vehicleType = testVehicleType;
+ someRegisterAppInterfaceResponse.vehicleType = testVehicleType;
+
SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:self rpcResponse:someRegisterAppInterfaceResponse];
[[NSNotificationCenter defaultCenter] postNotification:notification];
- [NSThread sleepForTimeInterval:0.1];
});
it(@"should save the connected vehicle make and the screen size", ^{
- expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeMake(600, 100)))).to(equal(@YES));
+ expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeMake(600, 100)))).toEventually(equal(@YES));
expect(streamingLifecycleManager.connectedVehicleMake).toEventually(equal(testVehicleType.make));
});
});
@@ -244,7 +246,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -254,7 +256,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -264,7 +266,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -274,7 +276,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -284,7 +286,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
});
@@ -313,7 +315,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the streams", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -323,7 +325,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -333,7 +335,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -343,7 +345,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateReady));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateReady));
});
});
@@ -353,7 +355,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -364,7 +366,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
@@ -375,7 +377,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should close the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateShuttingDown));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateShuttingDown));
});
});
});
@@ -397,7 +399,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not start the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateStopped));
});
});
@@ -407,7 +409,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not start the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateStopped));
});
});
@@ -417,7 +419,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should start the streams", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStarting));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateStarting));
});
});
@@ -427,7 +429,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should start the streams", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStarting));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateStarting));
});
});
@@ -437,7 +439,7 @@ describe(@"the streaming video manager", ^{
});
it(@"should not start the stream", ^{
- expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ expect(streamingLifecycleManager.currentVideoStreamState).toEventually(equal(SDLVideoStreamManagerStateStopped));
});
});
});
@@ -550,7 +552,7 @@ describe(@"the streaming video manager", ^{
beforeEach(^{
testVideoStartServicePayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithMTU:testMTU height:testVideoHeight width:testVideoWidth protocol:testVideoProtocol codec:testVideoCodec];
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartServicePayload.data];
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testVideoMessage];
});
it(@"should have set all the right properties", ^{
@@ -566,7 +568,7 @@ describe(@"the streaming video manager", ^{
beforeEach(^{
testVideoStartServicePayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithMTU:testMTU height:testVideoHeight width:testVideoWidth protocol:nil codec:nil];
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartServicePayload.data];
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testVideoMessage];
});
it(@"should fall back correctly", ^{
@@ -579,7 +581,7 @@ describe(@"the streaming video manager", ^{
context(@"with missing screen height and screen width values", ^{
beforeEach(^{
streamingLifecycleManager.preferredResolutions = @[];
-
+
testVideoStartServicePayload = [[SDLControlFramePayloadVideoStartServiceAck alloc] initWithMTU:testMTU height:SDLControlFrameInt32NotFound width:SDLControlFrameInt32NotFound protocol:nil codec:nil];
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartServicePayload.data];
expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).to(equal(@YES));
@@ -587,7 +589,7 @@ describe(@"the streaming video manager", ^{
context(@"If no preferred resolutions were set in the data source", ^{
beforeEach(^{
streamingLifecycleManager.dataSource = nil;
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testVideoMessage];
});
it(@"should not replace the existing screen resolution", ^{
expect(@(CGSizeEqualToSize(streamingLifecycleManager.videoScaleManager.displayViewportResolution, CGSizeZero))).to(beTrue());
@@ -597,14 +599,14 @@ describe(@"the streaming video manager", ^{
context(@"If the preferred resolution was set in the data source", ^{
__block SDLImageResolution *preferredResolutionLow = nil;
__block SDLImageResolution *preferredResolutionHigh = nil;
-
+
beforeEach(^{
preferredResolutionLow = [[SDLImageResolution alloc] initWithWidth:10 height:10];
preferredResolutionHigh = [[SDLImageResolution alloc] initWithWidth:100 height:100];
streamingLifecycleManager.dataSource = testDataSource;
streamingLifecycleManager.preferredResolutions = @[preferredResolutionLow, preferredResolutionHigh];
-
- [streamingLifecycleManager handleProtocolStartServiceACKMessage:testVideoMessage];
+
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testVideoMessage];
});
it(@"should set the screen size using the first provided preferred resolution", ^{
CGSize preferredFormat = CGSizeMake(preferredResolutionLow.resolutionWidth.floatValue, preferredResolutionLow.resolutionHeight.floatValue);
@@ -619,6 +621,8 @@ describe(@"the streaming video manager", ^{
__block SDLProtocolHeader *testVideoHeader = nil;
__block SDLProtocolMessage *testVideoMessage = nil;
__block SDLControlFramePayloadNak *testVideoStartNakPayload = nil;
+ __block NSArray<SDLVideoStreamingFormat *> *testPreferredFormats = nil;
+ __block NSArray<SDLImageResolution *> *testPreferredResolutions = nil;
beforeEach(^{
[streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateStarting fromOldState:nil callEnterTransition:NO];
@@ -630,11 +634,21 @@ describe(@"the streaming video manager", ^{
testVideoHeader.serviceType = SDLServiceTypeVideo;
});
- context(@"with data", ^{
+ context(@"with rejected parameters for resolution and codec and there is more than one supported resolution and video codec", ^{
beforeEach(^{
+ SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecTheora protocol:SDLVideoStreamingProtocolWebM];
+ SDLVideoStreamingFormat *testVideoFormat2 = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP];
+ testPreferredFormats = @[testVideoFormat, testVideoFormat2];
+ streamingLifecycleManager.preferredFormats = testPreferredFormats;
+
+ SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200];
+ SDLImageResolution *testImageResolution2 = [[SDLImageResolution alloc] initWithWidth:500 height:800];
+ testPreferredResolutions = @[testImageResolution, testImageResolution2];
+ streamingLifecycleManager.preferredResolutions = testPreferredResolutions;
+
testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameHeightKey], [NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]];
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data];
- [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceNAK:testVideoMessage];
});
it(@"should have retried with new properties", ^{
@@ -643,11 +657,56 @@ describe(@"the streaming video manager", ^{
});
});
+ context(@"with rejected parameters for codec and there is more than one supported video codec", ^{
+ beforeEach(^{
+ SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecTheora protocol:SDLVideoStreamingProtocolWebM];
+ SDLVideoStreamingFormat *testVideoFormat2 = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP];
+ testPreferredFormats = @[testVideoFormat, testVideoFormat2];
+ streamingLifecycleManager.preferredFormats = testPreferredFormats;
+
+ SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200];
+ testPreferredResolutions = @[testImageResolution];
+ streamingLifecycleManager.preferredResolutions = testPreferredResolutions;
+
+ testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]];
+ testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceNAK:testVideoMessage];
+ });
+
+ it(@"should have retried with new properties", ^{
+ expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0));
+ expect(streamingLifecycleManager.preferredFormatIndex).to(equal(1));
+ });
+ });
+
+ context(@"with rejected parameters for codec and there are no more supported video codecs", ^{
+ beforeEach(^{
+ SDLVideoStreamingFormat *testVideoFormat = [[SDLVideoStreamingFormat alloc] initWithCodec:SDLVideoStreamingCodecH264 protocol:SDLVideoStreamingProtocolRTP];
+ testPreferredFormats = @[testVideoFormat];
+ streamingLifecycleManager.preferredFormats = testPreferredFormats;
+
+ SDLImageResolution *testImageResolution = [[SDLImageResolution alloc] initWithWidth:400 height:200];
+ testPreferredResolutions = @[testImageResolution];
+ streamingLifecycleManager.preferredResolutions = testPreferredResolutions;
+
+ testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:@[[NSString stringWithUTF8String:SDLControlFrameVideoCodecKey]]];
+ testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceNAK:testVideoMessage];
+ });
+
+ it(@"should end the service", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ });
+ });
+
context(@"with missing data", ^{
beforeEach(^{
+ streamingLifecycleManager.preferredFormats = testPreferredFormats;
+ streamingLifecycleManager.preferredResolutions = testPreferredResolutions;
+
testVideoStartNakPayload = [[SDLControlFramePayloadNak alloc] initWithRejectedParams:nil];
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:testVideoStartNakPayload.data];
- [streamingLifecycleManager handleProtocolStartServiceNAKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveStartServiceNAK:testVideoMessage];
});
it(@"should end the service", ^{
@@ -670,7 +729,7 @@ describe(@"the streaming video manager", ^{
testVideoHeader.serviceType = SDLServiceTypeVideo;
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceACKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testVideoMessage];
});
it(@"should have set all the right properties", ^{
@@ -692,7 +751,7 @@ describe(@"the streaming video manager", ^{
testVideoHeader.serviceType = SDLServiceTypeVideo;
testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil];
- [streamingLifecycleManager handleProtocolEndServiceNAKMessage:testVideoMessage];
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceNAK:testVideoMessage];
});
it(@"should have set all the right properties", ^{
@@ -702,6 +761,112 @@ describe(@"the streaming video manager", ^{
});
});
+ describe(@"stopping the manager", ^{
+ __block BOOL handlerCalled = NO;
+
+ beforeEach(^{
+ handlerCalled = NO;
+ [streamingLifecycleManager endVideoServiceWithCompletionHandler:^ {
+ handlerCalled = YES;
+ }];
+ streamingLifecycleManager.connectedVehicleMake = @"OEM_make_2";
+ });
+
+ context(@"when the manager is not stopped", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLVideoStreamManagerStateReady fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager stop];
+ });
+
+ it(@"should transition to the stopped state", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ expect(streamingLifecycleManager.protocol).to(beNil());
+ expect(streamingLifecycleManager.connectedVehicleMake).to(beNil());
+ expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone));
+ expect(streamingLifecycleManager.videoStreamingState).to(equal(SDLVideoStreamingStateNotStreamable));
+ expect(streamingLifecycleManager.preferredFormatIndex).to(equal(0));
+ expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0));
+ expect(handlerCalled).to(beTrue());
+ });
+ });
+
+ context(@"when the manager is already stopped", ^{
+ beforeEach(^{
+ [streamingLifecycleManager.videoStreamStateMachine setToState:SDLAudioStreamManagerStateStopped fromOldState:nil callEnterTransition:NO];
+ [streamingLifecycleManager stop];
+ });
+
+ it(@"should stay in the stopped state", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ expect(streamingLifecycleManager.protocol).to(beNil());
+ expect(streamingLifecycleManager.connectedVehicleMake).to(beNil());
+ expect(streamingLifecycleManager.hmiLevel).to(equal(SDLHMILevelNone));
+ expect(streamingLifecycleManager.videoStreamingState).to(equal(SDLVideoStreamingStateNotStreamable));
+ expect(streamingLifecycleManager.preferredFormatIndex).to(equal(0));
+ expect(streamingLifecycleManager.preferredResolutionIndex).to(equal(0));
+ expect(handlerCalled).to(beFalse());
+ });
+ });
+ });
+
+ describe(@"starting the manager", ^{
+ __block SDLProtocol *protocolMock = OCMClassMock([SDLProtocol class]);
+
+ beforeEach(^{
+ [streamingLifecycleManager startWithProtocol:protocolMock];
+ });
+
+ describe(@"then ending the video service through the secondary transport", ^{
+ beforeEach(^{
+ [streamingLifecycleManager endVideoServiceWithCompletionHandler:^{}];
+ });
+
+ it(@"should send an end video service control frame", ^{
+ OCMVerify([protocolMock endServiceWithType:SDLServiceTypeVideo]);
+ });
+
+ context(@"when the end video service ACKs", ^{
+ __block SDLProtocolHeader *testVideoHeader = nil;
+ __block SDLProtocolMessage *testVideoMessage = nil;
+
+ beforeEach(^{
+ testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testVideoHeader.frameType = SDLFrameTypeSingle;
+ testVideoHeader.frameData = SDLFrameInfoEndServiceACK;
+ testVideoHeader.encrypted = NO;
+ testVideoHeader.serviceType = SDLServiceTypeVideo;
+ testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil];
+
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testVideoMessage];
+ });
+
+ it(@"should transistion to the stopped state", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ });
+ });
+
+ context(@"when the end audio service NAKs", ^{
+ __block SDLProtocolHeader *testVideoHeader = nil;
+ __block SDLProtocolMessage *testVideoMessage = nil;
+
+ beforeEach(^{
+ testVideoHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ testVideoHeader.frameType = SDLFrameTypeSingle;
+ testVideoHeader.frameData = SDLFrameInfoEndServiceNACK;
+ testVideoHeader.encrypted = NO;
+ testVideoHeader.serviceType = SDLServiceTypeVideo;
+ testVideoMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testVideoHeader andPayload:nil];
+
+ [streamingLifecycleManager protocol:protocolMock didReceiveEndServiceNAK:testVideoMessage];
+ });
+
+ it(@"should transistion to the stopped state", ^{
+ expect(streamingLifecycleManager.currentVideoStreamState).to(equal(SDLVideoStreamManagerStateStopped));
+ });
+ });
+ });
+ });
+
describe(@"Creating a background video stream string", ^{
__block NSString *expectedVideoStreamBackgroundString = [NSString stringWithFormat:@"When it is safe to do so, open %@ on your phone", testAppName];
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
index fb7298988..99aa9dbb5 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLTextAndGraphicManagerSpec.m
@@ -6,6 +6,7 @@
#import "SDLFileManager.h"
#import "SDLHMILevel.h"
#import "SDLImage.h"
+#import "SDLImageField.h"
#import "SDLMetadataTags.h"
#import "SDLPutFileResponse.h"
#import "SDLShow.h"
@@ -37,6 +38,8 @@
@property (assign, nonatomic) BOOL isDirty;
+- (void)sdl_displayCapabilityDidUpdate:(SDLSystemCapability *)systemCapability;
+
@end
QuickSpecBegin(SDLTextAndGraphicManagerSpec)
@@ -375,7 +378,7 @@ describe(@"text and graphic manager", ^{
testManager.windowCapability = [[SDLWindowCapability alloc] init];
});
- it(@"should send everything", ^{
+ it(@"should send nothing", ^{
testManager.mediaTrackTextField = textMediaTrack;
testManager.title = textTitle;
testManager.textField1 = textLine1;
@@ -386,12 +389,12 @@ describe(@"text and graphic manager", ^{
testManager.batchUpdates = NO;
[testManager updateWithCompletionHandler:nil];
- expect(testManager.inProgressUpdate.mediaTrack).to(equal(textMediaTrack));
- expect(testManager.inProgressUpdate.templateTitle).to(equal(textTitle));
- expect(testManager.inProgressUpdate.mainField1).to(equal(textLine1));
- expect(testManager.inProgressUpdate.mainField2).to(equal(textLine2));
- expect(testManager.inProgressUpdate.mainField3).to(equal(textLine3));
- expect(testManager.inProgressUpdate.mainField4).to(equal(textLine4));
+ expect(testManager.inProgressUpdate.mediaTrack).toNot(equal(textMediaTrack));
+ expect(testManager.inProgressUpdate.templateTitle).toNot(equal(textTitle));
+ expect(testManager.inProgressUpdate.mainField1).toNot(equal(textLine1));
+ expect(testManager.inProgressUpdate.mainField2).toNot(equal(textLine2));
+ expect(testManager.inProgressUpdate.mainField3).toNot(equal(textLine3));
+ expect(testManager.inProgressUpdate.mainField4).toNot(equal(textLine4));
});
});
@@ -863,10 +866,38 @@ describe(@"text and graphic manager", ^{
__block NSString *testTextFieldText = @"mainFieldText";
beforeEach(^{
+ testManager.windowCapability = [[SDLWindowCapability alloc] init];
+ SDLImageField *primaryImageField = [[SDLImageField alloc] init];
+ primaryImageField.name = SDLImageFieldNameGraphic;
+ SDLImageField *secondaryImageField = [[SDLImageField alloc] init];
+ secondaryImageField.name = SDLImageFieldNameSecondaryGraphic;
+ testManager.windowCapability.imageFields = @[primaryImageField, secondaryImageField];
+
+ SDLTextField *lineOneField = [[SDLTextField alloc] init];
+ lineOneField.name = SDLTextFieldNameMainField1;
+ testManager.windowCapability.textFields = @[lineOneField];
+
testManager.batchUpdates = YES;
testManager.textField1 = testTextFieldText;
});
+ context(@"when imageFields are nil", ^{
+ beforeEach(^{
+ testManager.windowCapability.imageFields = nil;
+ });
+
+ it(@"should send nothing", ^{
+ testManager.primaryGraphic = testArtwork;
+ testManager.secondaryGraphic = testArtwork;
+ testManager.batchUpdates = NO;
+ [testManager updateWithCompletionHandler:nil];
+
+ expect(testManager.inProgressUpdate.graphic).to(beNil());
+ expect(testManager.inProgressUpdate.secondaryGraphic).to(beNil());
+ expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText));
+ });
+ });
+
context(@"when the image is already on the head unit", ^{
beforeEach(^{
OCMStub([mockFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(YES);
@@ -882,23 +913,6 @@ describe(@"text and graphic manager", ^{
expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtworkName));
expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText));
});
-
- context(@"when imageFields are nil", ^{
- beforeEach(^{
- testManager.windowCapability = [[SDLWindowCapability alloc] init];
- });
-
- it(@"should send everything", ^{
- testManager.primaryGraphic = testArtwork;
- testManager.secondaryGraphic = testArtwork;
- testManager.batchUpdates = NO;
- [testManager updateWithCompletionHandler:nil];
-
- expect(testManager.inProgressUpdate.graphic.value).to(equal(testArtworkName));
- expect(testManager.inProgressUpdate.secondaryGraphic.value).to(equal(testArtworkName));
- expect(testManager.inProgressUpdate.mainField1).to(equal(testTextFieldText));
- });
- });
});
context(@"when the image is a static icon", ^{
diff --git a/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m b/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
index 93254ca78..570d2bd9e 100644
--- a/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
+++ b/SmartDeviceLinkTests/DevAPISpecs/SDLUploadFileOperationSpec.m
@@ -31,7 +31,7 @@
expect(putFile.offset).to(equal(@(index * mtuSize)));
expect(putFile.persistentFile).to(equal(@NO));
- expect(putFile.syncFileName).to(equal(testFile.name));
+ expect(putFile.sdlFileName).to(equal(testFile.name));
expect(putFile.bulkData).to(equal(testBulkFileData));
expect(putFile.crc).to(equal([NSNumber numberWithUnsignedLong:testBulkFileDataCrc]));
diff --git a/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.h b/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.h
new file mode 100644
index 000000000..f527decea
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.h
@@ -0,0 +1,19 @@
+//
+// TestOldConfigurationUpdateManagerDelegate.h
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/4/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLManagerDelegate.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TestOldConfigurationUpdateManagerDelegate : NSObject <SDLManagerDelegate>
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.m b/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.m
new file mode 100644
index 000000000..765df8172
--- /dev/null
+++ b/SmartDeviceLinkTests/DevAPISpecs/TestOldConfigurationUpdateManagerDelegate.m
@@ -0,0 +1,24 @@
+//
+// TestOldConfigurationUpdateManagerDelegate.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/4/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "TestOldConfigurationUpdateManagerDelegate.h"
+
+@implementation TestOldConfigurationUpdateManagerDelegate
+
+- (void)hmiLevel:(nonnull SDLHMILevel)oldLevel didChangeToLevel:(nonnull SDLHMILevel)newLevel { }
+
+- (void)managerDidDisconnect { }
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
+- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language {
+ return nil;
+}
+#pragma mark diagnostic pop
+
+@end
diff --git a/SmartDeviceLinkTests/Notifications/SDLNotificationDispatcherSpec.m b/SmartDeviceLinkTests/Notifications/SDLNotificationDispatcherSpec.m
index cfa34340d..435cea569 100644
--- a/SmartDeviceLinkTests/Notifications/SDLNotificationDispatcherSpec.m
+++ b/SmartDeviceLinkTests/Notifications/SDLNotificationDispatcherSpec.m
@@ -18,146 +18,6 @@ describe(@"a notification dispatcher", ^{
beforeEach(^{
testDispatcher = [[SDLNotificationDispatcher alloc] init];
});
-
- it(@"should conform to SDLProxyListener", ^{
- expect(@([testDispatcher conformsToProtocol:@protocol(SDLProxyListener)])).to(beTruthy());
-
- // Responses
- expect(@([testDispatcher respondsToSelector:@selector(onOnDriverDistraction:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnHMIStatus:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onProxyClosed)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onProxyOpened)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAddCommandResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAddSubMenuResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAlertManeuverResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAlertResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onButtonPressResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onChangeRegistrationResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onCreateInteractionChoiceSetResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteCommandResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteInteractionChoiceSetResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteSubMenuResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDiagnosticMessageResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDialNumberResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onEncodedSyncPDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onEndAudioPassThruResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onError:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGenericResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetAppServiceDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetDTCsResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetFileResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetInteriorVehicleDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetSystemCapabilityResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetVehicleDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetWayPointsResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onReceivedLockScreenIcon:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformAppServiceInteractionResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformAudioPassThruResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformInteractionResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPublishAppServiceResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPutFileResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onReadDIDResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onRegisterAppInterfaceResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onResetGlobalPropertiesResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onScrollableMessageResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSendHapticDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSendLocationResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetAppIconResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetDisplayLayoutResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetGlobalPropertiesResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetInteriorVehicleDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetMediaClockTimerResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShowConstantTBTResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShowResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShowAppMenuResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSliderResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSpeakResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeButtonResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeVehicleDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeWayPointsResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSyncPDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUpdateTurnListResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnregisterAppInterfaceResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeButtonResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeVehicleDataResponse:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeWayPointsResponse:)])).to(beTruthy());
-
- // Requests
- expect(@([testDispatcher respondsToSelector:@selector(onAddCommand:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAddSubMenu:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAlert:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onAlertManeuver:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onButtonPress:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onChangeRegistration:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onCreateInteractionChoiceSet:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteCommand:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteFile:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteInteractionChoiceSet:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDeleteSubMenu:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDiagnosticMessage:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onDialNumber:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onEncodedSyncPData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onEndAudioPassThru:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetAppServiceData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetDTCs:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetFile:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetInteriorVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetSystemCapability:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onGetWayPoints:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onListFiles:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformAppServiceInteraction:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformAudioPassThru:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPerformInteraction:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPublishAppService:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onPutFile:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onReadDID:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onRegisterAppInterface:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onResetGlobalProperties:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onScrollableMessage:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSendHapticData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSendLocation:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetAppIcon:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetDisplayLayout:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetGlobalProperties:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetInteriorVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSetMediaClockTimer:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShow:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShowAppMenu:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onShowConstantTBT:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSlider:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSpeak:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeButton:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSubscribeWayPoints:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSyncPData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onSystemRequest:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnregisterAppInterface:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeButton:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUnsubscribeWayPoints:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onUpdateTurnList:)])).to(beTruthy());
-
- // Notifications
- expect(@([testDispatcher respondsToSelector:@selector(onOnAppInterfaceUnregistered:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnAppServiceData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnAudioPassThru:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnButtonEvent:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnButtonPress:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnCommand:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnEncodedSyncPData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnHashChange:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnLanguageChange:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnLockScreenNotification:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnRCStatus:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnSyncPData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnSystemCapabilityUpdated:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnSystemRequest:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnTBTClientState:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnTouchEvent:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnVehicleData:)])).to(beTruthy());
- expect(@([testDispatcher respondsToSelector:@selector(onOnWayPointChange:)])).to(beTruthy());
- });
describe(@"when told to post a notification", ^{
__block NSString *testNotificationName = nil;
diff --git a/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m b/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m
index dc713cb06..150e07168 100644
--- a/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m
+++ b/SmartDeviceLinkTests/Notifications/SDLResponseDispatcherSpec.m
@@ -701,7 +701,7 @@ describe(@"a response dispatcher", ^{
});
context(@"storing an audio pass thru handler", ^{
- __block SDLPerformAudioPassThru* testPerformAudioPassThru = nil;
+ __block SDLPerformAudioPassThru *testPerformAudioPassThru = nil;
__block NSUInteger numTimesHandlerCalled = 0;
context(@"with a handler", ^{
@@ -713,10 +713,10 @@ describe(@"a response dispatcher", ^{
testPerformAudioPassThru.correlationID = @1;
[testDispatcher storeRequest:testPerformAudioPassThru handler:nil];
});
-
+
it(@"should store the handler" ,^{
-// expect(testDispatcher.audioPassThruHandler).toNot(beNil());
-// expect(testDispatcher.audioPassThruHandler).to(equal(testPerformAudioPassThru.audioDataHandler));
+ expect((id)testDispatcher.audioPassThruHandler).toNot(beNil());
+ expect((id)testDispatcher.audioPassThruHandler).to(equal((id)testPerformAudioPassThru.audioDataHandler));
});
describe(@"when an on audio data notification arrives", ^{
@@ -728,21 +728,22 @@ describe(@"a response dispatcher", ^{
});
it(@"should run the handler", ^{
- expect(@(numTimesHandlerCalled)).to(equal(@1));
+ expect(numTimesHandlerCalled).to(equal(1));
});
});
-
+
describe(@"when an on audio data response arrives", ^{
beforeEach(^{
SDLPerformAudioPassThruResponse *performAudioPassThruResponse = [[SDLPerformAudioPassThruResponse alloc] init];
performAudioPassThruResponse.success = @YES;
-
+
SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceivePerformAudioPassThruResponse object:nil rpcResponse:performAudioPassThruResponse];
[[NSNotificationCenter defaultCenter] postNotification:notification];
});
-
+
it(@"should clear the handler", ^{
-// expect(testDispatcher.audioPassThruHandler).to(beNil());
+ expect((id)testDispatcher.audioPassThruHandler).to(beNil());
+ expect(@(numTimesHandlerCalled)).to(equal(1));
});
});
});
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
index a8901a2a0..b4e542012 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/MessageSpecs/SDLProtocolSpec.m
@@ -36,13 +36,11 @@ NSDictionary* dictionaryV1 = @{SDLRPCParameterNameRequest:
NSDictionary* dictionaryV2 = @{SDLRPCParameterNameCommandId:@55};
describe(@"Send StartService Tests", ^ {
- context(@"Unsecure", ^{
+ context(@"Insecure", ^{
it(@"Should send the correct data", ^ {
// Reset max protocol version before test. (This test case expects V1 header. If other test ran
// prior to this one, SDLGlobals would keep the max protocol version and this test case would fail.)
[SDLGlobals sharedGlobals].maxHeadUnitProtocolVersion = [SDLVersion versionWithString:@"1.0.0"];
-
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
@@ -57,11 +55,11 @@ describe(@"Send StartService Tests", ^ {
const char testHeader[8] = {0x10 | SDLFrameTypeControl, SDLServiceTypeBulkData, SDLFrameInfoStartService, 0x00, 0x00, 0x00, 0x00, 0x00};
expect(dataSent).to(equal([NSData dataWithBytes:testHeader length:8]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
[testProtocol startServiceWithType:SDLServiceTypeBulkData payload:nil];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
it(@"Should reuse stored header of RPC service when starting other service", ^{
@@ -82,8 +80,6 @@ describe(@"Send StartService Tests", ^ {
header.frameData = SDLFrameInfoStartService;
NSData *headerData = [header data];
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -94,12 +90,12 @@ describe(@"Send StartService Tests", ^ {
NSData* dataSent = [data copy];
expect(dataSent).to(equal(headerData));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
[testProtocol storeHeader:header forServiceType:SDLServiceTypeRPC];
[testProtocol startServiceWithType:serviceTypeToStart payload:nil];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
@@ -115,12 +111,6 @@ describe(@"Send StartService Tests", ^ {
describe(@"Send EndSession Tests", ^ {
context(@"During V1 session", ^ {
it(@"Should send the correct data", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
- SDLV1ProtocolHeader *testHeader = [[SDLV1ProtocolHeader alloc] init];
- testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.sessionID = 0x03;
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -134,22 +124,21 @@ describe(@"Send EndSession Tests", ^ {
const char testHeader[8] = {0x10 | SDLFrameTypeControl, SDLServiceTypeRPC, SDLFrameInfoEndService, 0x03, 0x00, 0x00, 0x00, 0x00};
expect(dataSent).to(equal([NSData dataWithBytes:testHeader length:8]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ SDLV1ProtocolHeader *testHeader = [[SDLV1ProtocolHeader alloc] init];
+ testHeader.serviceType = SDLServiceTypeRPC;
+ testHeader.sessionID = 0x03;
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
[testProtocol endServiceWithType:SDLServiceTypeRPC];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
context(@"During V2 session", ^ {
it(@"Should send the correct data", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
- SDLV2ProtocolHeader *testHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:2];
- testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.sessionID = 0x61;
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -163,30 +152,22 @@ describe(@"Send EndSession Tests", ^ {
const char testHeader[12] = {0x20 | SDLFrameTypeControl, SDLServiceTypeRPC, SDLFrameInfoEndService, 0x61, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
expect(dataSent).to(equal([NSData dataWithBytes:testHeader length:12]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ SDLV2ProtocolHeader *testHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:2];
+ testHeader.serviceType = SDLServiceTypeRPC;
+ testHeader.sessionID = 0x61;
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
[testProtocol endServiceWithType:SDLServiceTypeRPC];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
});
describe(@"Send Register Secondary Transport Tests", ^ {
it(@"Should send the correct data", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- // receive a Start Service ACK frame of RPC to configure protocol version
- SDLV2ProtocolHeader *refHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
- refHeader.frameType = SDLFrameTypeControl;
- refHeader.serviceType = SDLServiceTypeRPC;
- refHeader.frameData = SDLFrameInfoStartServiceACK;
- refHeader.sessionID = 0x11;
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:refHeader andPayload:nil]];
-
- // store the header to apply Session ID value to Register Secondary Transport frame
- [testProtocol storeHeader:refHeader forServiceType:SDLServiceTypeControl];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -199,11 +180,22 @@ describe(@"Send Register Secondary Transport Tests", ^ {
const char testHeader[12] = {0x50 | SDLFrameTypeControl, SDLServiceTypeControl, SDLFrameInfoRegisterSecondaryTransport, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01};
expect(dataSent).to(equal([NSData dataWithBytes:testHeader length:12]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ // receive a Start Service ACK frame of RPC to configure protocol version
+ SDLV2ProtocolHeader *refHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:5];
+ refHeader.frameType = SDLFrameTypeControl;
+ refHeader.serviceType = SDLServiceTypeRPC;
+ refHeader.frameData = SDLFrameInfoStartServiceACK;
+ refHeader.sessionID = 0x11;
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:[SDLProtocolMessage messageWithHeader:refHeader andPayload:nil]];
+
+ // store the header to apply Session ID value to Register Secondary Transport frame
+ [testProtocol storeHeader:refHeader forServiceType:SDLServiceTypeControl];
[testProtocol registerSecondaryTransport];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
@@ -217,12 +209,6 @@ describe(@"SendRPCRequest Tests", ^ {
it(@"Should send the correct data", ^ {
[[[[mockRequest stub] andReturn:dictionaryV1] ignoringNonObjectArgs] serializeAsDictionary:1];
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
- SDLV1ProtocolHeader *testHeader = [[SDLV1ProtocolHeader alloc] init];
- testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.sessionID = 0xFF;
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -242,11 +228,16 @@ describe(@"SendRPCRequest Tests", ^ {
expect(dataSent).to(equal([testData copy]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ SDLV1ProtocolHeader *testHeader = [[SDLV1ProtocolHeader alloc] init];
+ testHeader.serviceType = SDLServiceTypeRPC;
+ testHeader.sessionID = 0xFF;
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
[testProtocol sendRPC:mockRequest];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
@@ -257,12 +248,6 @@ describe(@"SendRPCRequest Tests", ^ {
[[[mockRequest stub] andReturn:@"DeleteCommand"] name];
[[[mockRequest stub] andReturn:[NSData dataWithBytes:"COMMAND" length:strlen("COMMAND")]] bulkData];
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
- SDLV2ProtocolHeader *testHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:2];
- testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.sessionID = 0x01;
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
-
__block BOOL verified = NO;
id transportMock = OCMProtocolMock(@protocol(SDLTransportType));
[[[transportMock stub] andDo:^(NSInvocation* invocation) {
@@ -289,11 +274,16 @@ describe(@"SendRPCRequest Tests", ^ {
expect(dataSent).to(equal([testData copy]));
}] sendData:[OCMArg any]];
- testProtocol.transport = transportMock;
+ SDLProtocol *testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ SDLV2ProtocolHeader *testHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:2];
+ testHeader.serviceType = SDLServiceTypeRPC;
+ testHeader.sessionID = 0x01;
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
[testProtocol sendRPC:mockRequest];
- expect(@(verified)).toEventually(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
});
@@ -406,12 +396,14 @@ describe(@"HandleBytesFromTransport Tests", ^ {
});
describe(@"HandleProtocolSessionStarted tests", ^ {
+ __block id transportMock = nil;
__block SDLProtocol *testProtocol = nil;
__block id delegateMock = nil;
beforeEach(^{
- testProtocol = [[SDLProtocol alloc] init];
- delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+ delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-value"
[[SDLGlobals sharedGlobals] init]; // Make sure to reset between tests
@@ -437,10 +429,13 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
expect(testProtocol.authToken).to(equal(testAuthToken));
expect([SDLGlobals sharedGlobals].protocolVersion.stringVersion).to(equal(@"5.2.0"));
@@ -458,10 +453,13 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
expect(testProtocol.authToken).to(beNil());
expect([SDLGlobals sharedGlobals].protocolVersion.stringVersion).to(equal(@"5.1.0"));
@@ -479,10 +477,13 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
expect(testProtocol.authToken).to(beNil());
expect([SDLGlobals sharedGlobals].protocolVersion.stringVersion).to(equal(@"5.0.0"));
@@ -502,10 +503,13 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
// Should keep their default values
expect(testProtocol.authToken).to(beNil());
@@ -528,10 +532,13 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
expect([SDLGlobals sharedGlobals].protocolVersion.stringVersion).to(equal(@"3.1.0"));
expect([SDLGlobals sharedGlobals].maxHeadUnitProtocolVersion.stringVersion).to(equal(@"3.1.0"));
@@ -550,24 +557,32 @@ describe(@"HandleProtocolSessionStarted tests", ^ {
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = (UInt32)testData.length;
- [testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:testData]];
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:testData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveStartServiceACK:ackMessage]);
- OCMExpect([delegateMock handleProtocolStartServiceACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ [testProtocol.protocolDelegateTable addObject:delegateMock];
+ [testProtocol protocol:testProtocol didReceiveStartServiceACK:ackMessage];
// Should keep their default values
expect([SDLGlobals sharedGlobals].protocolVersion.stringVersion).to(equal(@"1.0.0"));
expect([SDLGlobals sharedGlobals].maxHeadUnitProtocolVersion.stringVersion).to(equal(@"0.0.0"));
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
});
});
});
});
-xdescribe(@"HandleProtocolRegisterSecondaryTransport Tests", ^ {
- it(@"Should pass information along to delegate when ACKed", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
+describe(@"HandleProtocolRegisterSecondaryTransport Tests", ^{
+ __block id transportMock = nil;
+ __block SDLProtocol *testProtocol = nil;
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+ beforeEach(^{
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+ });
+
+ it(@"Should pass information along to delegate when ACKed", ^ {
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
testHeader.frameType = SDLFrameTypeControl;
@@ -577,16 +592,17 @@ xdescribe(@"HandleProtocolRegisterSecondaryTransport Tests", ^ {
testHeader.messageID = 2;
testHeader.bytesInPayload = 0;
+ SDLProtocolMessage *ackMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:nil];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveRegisterSecondaryTransportACK:ackMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]];
+ [testProtocol protocol:testProtocol didReceiveRegisterSecondaryTransportACK:ackMessage];
- OCMExpect([delegateMock handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:nil]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
});
it(@"Should pass information along to delegate when NAKed", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
testHeader.frameType = SDLFrameTypeControl;
@@ -598,83 +614,102 @@ xdescribe(@"HandleProtocolRegisterSecondaryTransport Tests", ^ {
SDLControlFramePayloadRegisterSecondaryTransportNak *payload = [[SDLControlFramePayloadRegisterSecondaryTransportNak alloc] initWithReason:@"Sample reason"];
NSData *payloadData = payload.data;
+ SDLProtocolMessage *nakMessage = [SDLProtocolMessage messageWithHeader:testHeader andPayload:payloadData];
+ OCMExpect([delegateMock protocol:testProtocol didReceiveRegisterSecondaryTransportNAK:nakMessage]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol handleProtocolRegisterSecondaryTransportACKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:payloadData]];
+ [testProtocol protocol:testProtocol didReceiveRegisterSecondaryTransportNAK:nakMessage];
- OCMExpect([delegateMock handleProtocolRegisterSecondaryTransportNAKMessage:[SDLProtocolMessage messageWithHeader:testHeader andPayload:payloadData]]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
});
});
-xdescribe(@"HandleHeartbeatForSession Tests", ^{
- // TODO: Test automatically sending data to head unit (dependency injection?)
- it(@"Should pass information along to delegate", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
+describe(@"HandleHeartbeatForSession Tests", ^{
+ __block id transportMock = nil;
+ __block SDLProtocol *testProtocol = nil;
+ __block id delegateMock = nil;
+
+ beforeEach(^{
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
+ OCMExpect([delegateMock handleHeartbeatForSession:0x44]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
[testProtocol handleHeartbeatForSession:0x44];
-
- OCMExpect([delegateMock handleHeartbeatForSession:0]);
});
-});
-xdescribe(@"OnProtocolMessageReceived Tests", ^ {
it(@"Should pass information along to delegate", ^ {
- SDLProtocol *testProtocol = [[SDLProtocol alloc] init];
-
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
+ });
+});
+
+describe(@"OnProtocolMessageReceived Tests", ^ {
+ __block id transportMock = nil;
+ __block SDLProtocol *testProtocol = nil;
+ __block id delegateMock = nil;
+
+ beforeEach(^{
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
SDLProtocolMessage *testMessage = [[SDLProtocolMessage alloc] init];
SDLV2ProtocolHeader *testHeader = [[SDLV2ProtocolHeader alloc] initWithVersion:3];
testHeader.serviceType = SDLServiceTypeRPC;
testMessage.header = testHeader;
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
+
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
+ OCMExpect([delegateMock protocol:testProtocol didReceiveMessage:[OCMArg any]]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol onProtocolMessageReceived:testMessage];
-
- OCMExpect([delegateMock onProtocolMessageReceived:[OCMArg any]]);
+ [testProtocol protocol:testProtocol didReceiveMessage:testMessage];
});
-});
-xdescribe(@"OnProtocolOpened Tests", ^ {
it(@"Should pass information along to delegate", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
- [testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol onProtocolOpened];
-
- OCMExpect([delegateMock onProtocolOpened]);
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
});
});
-xdescribe(@"OnProtocolClosed Tests", ^ {
- it(@"Should pass information along to delegate", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
+describe(@"OnProtocolOpened Tests", ^ {
+ __block id transportMock = nil;
+ __block SDLProtocol *testProtocol = nil;
+ __block id delegateMock = nil;
+
+ beforeEach(^{
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ id delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
+ OCMExpect([delegateMock protocolDidOpen:testProtocol]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol onProtocolClosed];
-
- OCMExpect([delegateMock onProtocolClosed]);
+ [testProtocol onTransportConnected];
});
-});
-xdescribe(@"OnError Tests", ^ {
it(@"Should pass information along to delegate", ^ {
- SDLProtocol* testProtocol = [[SDLProtocol alloc] init];
-
- NSException* testException = [[NSException alloc] initWithName:@"Name" reason:@"No Reason" userInfo:@{}];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
+ });
+});
+
+describe(@"OnProtocolClosed Tests", ^ {
+ __block id transportMock = nil;
+ __block SDLProtocol *testProtocol = nil;
+ __block id delegateMock = nil;
+
+ beforeEach(^{
+ transportMock = OCMProtocolMock(@protocol(SDLTransportType));
+ testProtocol = [[SDLProtocol alloc] initWithTransport:transportMock encryptionManager:nil];
+
+ delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
+ OCMExpect([delegateMock protocolDidClose:testProtocol]);
+
[testProtocol.protocolDelegateTable addObject:delegateMock];
- [testProtocol onError:@"Nothing actually happened" exception:testException];
-
- OCMExpect([delegateMock onError:[OCMArg any] exception:[OCMArg any]]);
+ [testProtocol onTransportDisconnected];
+ });
+
+ it(@"Should pass information along to delegate", ^ {
+ OCMVerifyAllWithDelay(delegateMock, 0.1);
});
});
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
index 277ccd7f2..32599856d 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/SDLFunctionIDSpec.m
@@ -91,11 +91,14 @@ describe(@"GetFunctionName Tests", ^ {
expect([functionID functionNameForId:32787]).to(equal(SDLRPCFunctionNameOnSystemCapabilityUpdated));
//Not listed in Spec
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect([functionID functionNameForId:65536]).to(equal(SDLRPCFunctionNameEncodedSyncPData));
expect([functionID functionNameForId:65537]).to(equal(SDLRPCFunctionNameSyncPData));
expect([functionID functionNameForId:98304]).to(equal(SDLRPCFunctionNameOnEncodedSyncPData));
expect([functionID functionNameForId:98305]).to(equal(SDLRPCFunctionNameOnSyncPData));
+#pragma clang diagnostic pop
});
});
@@ -152,6 +155,8 @@ describe(@"GetFunctionID Tests", ^ {
expect([functionID functionIdForName:SDLRPCFunctionNameGetAppServiceData]).to(equal(@53));
expect([functionID functionIdForName:SDLRPCFunctionNameGetFile]).to(equal(@54));
expect([functionID functionIdForName:SDLRPCFunctionNamePerformAppServiceInteraction]).to(equal(@55));
+ expect([functionID functionIdForName:SDLRPCFunctionNameCreateWindow]).to(equal(@60));
+ expect([functionID functionIdForName:SDLRPCFunctionNameDeleteWindow]).to(equal(@61));
expect([functionID functionIdForName:SDLRPCFunctionNameOnHMIStatus]).to(equal(@32768));
expect([functionID functionIdForName:SDLRPCFunctionNameOnAppInterfaceUnregistered]).to(equal(@32769));
expect([functionID functionIdForName:SDLRPCFunctionNameOnButtonEvent]).to(equal(@32770));
@@ -173,13 +178,14 @@ describe(@"GetFunctionID Tests", ^ {
expect([functionID functionIdForName:SDLRPCFunctionNameOnSystemCapabilityUpdated]).to(equal(@32787));
//Not listed in Spec
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect([functionID functionIdForName:SDLRPCFunctionNameEncodedSyncPData]).to(equal(@65536));
expect([functionID functionIdForName:SDLRPCFunctionNameSyncPData]).to(equal(@65537));
expect([functionID functionIdForName:SDLRPCFunctionNameOnEncodedSyncPData]).to(equal(@98304));
expect([functionID functionIdForName:SDLRPCFunctionNameOnSyncPData]).to(equal(@98305));
- expect([functionID functionIdForName:SDLRPCFunctionNameCreateWindow]).to(equal(@60));
- expect([functionID functionIdForName:SDLRPCFunctionNameDeleteWindow]).to(equal(@61));
+#pragma clang diagnostic pop
});
});
diff --git a/SmartDeviceLinkTests/ProtocolSpecs/SDLProtocolReceivedMessageRouterSpec.m b/SmartDeviceLinkTests/ProtocolSpecs/SDLProtocolReceivedMessageRouterSpec.m
index ab91a5de2..c1e9f6f1e 100644
--- a/SmartDeviceLinkTests/ProtocolSpecs/SDLProtocolReceivedMessageRouterSpec.m
+++ b/SmartDeviceLinkTests/ProtocolSpecs/SDLProtocolReceivedMessageRouterSpec.m
@@ -9,107 +9,187 @@
#import <Nimble/Nimble.h>
#import <OCMock/OCMock.h>
+#import "SDLProtocol.h"
#import "SDLProtocolReceivedMessageRouter.h"
+#import "SDLRPCParameterNames.h"
#import "SDLV2ProtocolHeader.h"
#import "SDLV2ProtocolMessage.h"
-#import "SDLRPCParameterNames.h"
QuickSpecBegin(SDLProtocolReceivedMessageRouterSpec)
-// TODO: This should be rewritten using an actual mock (i.e. SDLProtocolListenerDelegateMock class to avoid OCMock)
-describe(@"HandleReceivedMessage Tests", ^ {
- xcontext(@"When handling control message", ^ {
- it(@"Should route message correctly", ^ {
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
- SDLV2ProtocolMessage* testMessage = [[SDLV2ProtocolMessage alloc] init];
- SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
-
+describe(@"Handle received message tests", ^{
+ __block SDLProtocolReceivedMessageRouter *router = nil;
+ __block id delegateMock = nil;
+ __block SDLProtocol *mockProtocol = nil;
+
+ beforeEach(^{
+ router = [[SDLProtocolReceivedMessageRouter alloc] init];
+ delegateMock = OCMProtocolMock(@protocol(SDLProtocolDelegate));
+ router.delegate = delegateMock;
+ mockProtocol = OCMStrictClassMock([SDLProtocol class]);
+ });
+
+ context(@"When handling a control message", ^{
+ __block SDLV2ProtocolMessage *testMessage = nil;
+ __block SDLV2ProtocolHeader *testHeader = nil;
+
+ beforeEach(^{
+ testHeader = [[SDLV2ProtocolHeader alloc] init];
testHeader.frameType = SDLFrameTypeControl;
testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.frameData = SDLFrameInfoStartServiceACK;
testHeader.sessionID = 0x93;
testHeader.bytesInPayload = 0;
+
+ testMessage = [[SDLV2ProtocolMessage alloc] init];
+ testMessage.payload = [NSData data];
+ testMessage.header = testHeader;
+ });
+
+ it(@"Should route a start service ACK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoStartServiceACK;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveStartServiceACK:testMessage]);
+ });
+
+ it(@"Should route a start service NAK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoStartServiceNACK;
testMessage.header = testHeader;
- testMessage.payload = [NSData data];
- SDLProtocolReceivedMessageRouter* router = [[SDLProtocolReceivedMessageRouter alloc] init];
- router.delegate = delegateMock;
- [router handleReceivedMessage:testMessage];
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
- OCMVerify([delegateMock handleProtocolStartServiceACKMessage:testMessage]);
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveStartServiceNAK:testMessage]);
});
- });
-
- xcontext(@"When handling single frame message", ^ {
- it(@"Should route message correctly", ^ {
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
+
+ it(@"Should route an end service ACK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoEndServiceACK;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveEndServiceACK:testMessage]);
+ });
+
+ it(@"Should route an end service NAK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoEndServiceNACK;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveEndServiceNAK:testMessage]);
+ });
+
+ it(@"Should route register secondary transport ACK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoRegisterSecondaryTransportACK;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveRegisterSecondaryTransportACK:testMessage]);
+ });
+
+ it(@"Should route register secondary transport NAK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoRegisterSecondaryTransportNACK;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveRegisterSecondaryTransportNAK:testMessage]);
+ });
+
+ it(@"Should route a transport event update message correctly", ^{
+ testHeader.frameData = SDLFrameInfoTransportEventUpdate;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock protocol:mockProtocol didReceiveTransportEventUpdate:testMessage]);
+ });
+
+ it(@"Should route a heartbeat message correctly", ^{
+ testHeader.frameData = SDLFrameInfoHeartbeat;
+ testMessage.header = testHeader;
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+
+ OCMVerify([delegateMock handleHeartbeatForSession:testHeader.sessionID]);
+ });
+
+ it(@"Should route a heartbeat ACK message correctly", ^{
+ testHeader.frameData = SDLFrameInfoHeartbeatACK;
+ testMessage.header = testHeader;
- SDLV2ProtocolMessage* testMessage = [[SDLV2ProtocolMessage alloc] init];
- SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
+ OCMVerify([delegateMock handleHeartbeatACK]);
+ });
+ });
+
+ context(@"When handling a single frame message", ^{
+ __block SDLV2ProtocolMessage *testMessage = nil;
+ __block SDLV2ProtocolHeader *testHeader = nil;
+
+ beforeEach(^{
+ testHeader = [[SDLV2ProtocolHeader alloc] init];
testHeader.frameType = SDLFrameTypeSingle;
testHeader.serviceType = SDLServiceTypeRPC;
- testHeader.frameData = SDLFrameInfoSingleFrame;
testHeader.sessionID = 0x07;
testHeader.bytesInPayload = 0;
-
- testMessage.header = testHeader;
-
+
+ testMessage = [[SDLV2ProtocolMessage alloc] init];
testMessage.payload = [NSData data];
-
+ testMessage.header = testHeader;
+ });
+
+ it(@"Should route the message correctly", ^{
__block BOOL verified = NO;
- [[[[delegateMock stub] andDo: ^(NSInvocation* invocation) {
+ [OCMStub([delegateMock protocol:mockProtocol didReceiveMessage:testMessage]) andDo:^(NSInvocation *invocation) {
verified = YES;
-
- __unsafe_unretained SDLProtocolMessage* message;
-
- [invocation getArgument:&message atIndex:2];
-
- SDLV2ProtocolMessage* messageReceived = (SDLV2ProtocolMessage *)message;
-
+ __unsafe_unretained SDLProtocolMessage *message;
+ [invocation getArgument:&message atIndex:3];
+ SDLV2ProtocolMessage *messageReceived = (SDLV2ProtocolMessage *)message;
+
expect(messageReceived).to(beIdenticalTo(testMessage));
- }] ignoringNonObjectArgs] onProtocolMessageReceived:[OCMArg any]];
-
- SDLProtocolReceivedMessageRouter* router = [[SDLProtocolReceivedMessageRouter alloc] init];
- router.delegate = delegateMock;
-
- [router handleReceivedMessage:testMessage];
+ }];
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
- expect(@(verified)).to(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
- xcontext(@"When handling multi-frame message", ^ {
- it(@"Should route message correctly", ^ {
- //Allocate 2000 bytes and use it as test data
+ context(@"When handling a multi-frame message", ^{
+ __block SDLV2ProtocolMessage *testMessage = nil;
+ __block SDLV2ProtocolHeader *testHeader = nil;
+
+ beforeEach(^{
+ testMessage = [[SDLV2ProtocolMessage alloc] init];
+ testHeader = [[SDLV2ProtocolHeader alloc] init];
+ });
+
+ it(@"Should route the message correctly", ^{
+ // Allocate 2000 bytes and use it as test data
const NSUInteger dataLength = 2000;
char dummyBytes[dataLength];
const char testPayloadHeader[12] = {0x20, 0x55, 0x64, 0x73, 0x12, 0x34, 0x43, 0x21, (dataLength >> 24) & 0xFF, (dataLength >> 16) & 0xFF, (dataLength >> 8) & 0xFF, dataLength & 0xFF};
-
- NSMutableData* payloadData = [NSMutableData dataWithBytes:testPayloadHeader length:12];
+ NSMutableData *payloadData = [NSMutableData dataWithBytes:testPayloadHeader length:12];
[payloadData appendBytes:dummyBytes length:dataLength];
-
- SDLV2ProtocolMessage* testMessage = [[SDLV2ProtocolMessage alloc] init];
- SDLV2ProtocolHeader* testHeader = [[SDLV2ProtocolHeader alloc] init];
-
- //First frame
+
+ // First frame
testHeader.frameType = SDLFrameTypeFirst;
testHeader.serviceType = SDLServiceTypeBulkData;
testHeader.frameData = 1;
testHeader.sessionID = 0x33;
testHeader.bytesInPayload = 8;
-
testMessage.header = testHeader;
const char firstPayload[8] = {(payloadData.length >> 24) & 0xFF, (payloadData.length >> 16) & 0xFF, (payloadData.length >> 8) & 0xFF, payloadData.length & 0xFF, 0x00, 0x00, 0x00, ceil(payloadData.length / 500.0)};
testMessage.payload = [NSData dataWithBytes:firstPayload length:8];
- SDLProtocolReceivedMessageRouter* router = [[SDLProtocolReceivedMessageRouter alloc] init];
-
- [router handleReceivedMessage:testMessage];
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
testMessage.header.frameType = SDLFrameTypeConsecutive;
testMessage.header.bytesInPayload = 500;
@@ -117,29 +197,27 @@ describe(@"HandleReceivedMessage Tests", ^ {
NSUInteger frameNumber = 1;
NSUInteger offset = 0;
while ((offset + 500) < payloadData.length) {
- //Consectutive frames
+ // Consectutive frames
testMessage.header.frameData = frameNumber;
testMessage.payload = [payloadData subdataWithRange:NSMakeRange(offset, 500)];
- [router handleReceivedMessage:testMessage];
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
frameNumber++;
offset += 500;
}
- //Final frame
+ // Final frame
testMessage.header.frameData = 0;
testMessage.payload = [payloadData subdataWithRange:NSMakeRange(offset, payloadData.length - offset)];
-
- id delegateMock = OCMProtocolMock(@protocol(SDLProtocolListener));
-
+
__block BOOL verified = NO;
- [[[delegateMock stub] andDo:^(NSInvocation* invocation) {
+ [OCMStub([delegateMock protocol:mockProtocol didReceiveMessage:[OCMArg any]]) andDo:^(NSInvocation *invocation) {
verified = YES;
- //Without the __unsafe_unretained, a double release will occur. More information: https://github.com/erikdoe/ocmock/issues/123
- __unsafe_unretained SDLProtocolMessage* message;
- [invocation getArgument:&message atIndex:2];
- SDLProtocolMessage* assembledMessage = message;
+ // Without the __unsafe_unretained, a double release will occur. More information: https://github.com/erikdoe/ocmock/issues/123
+ __unsafe_unretained SDLProtocolMessage *message;
+ [invocation getArgument:&message atIndex:3];
+ SDLProtocolMessage *assembledMessage = message;
expect(assembledMessage.payload).to(equal(payloadData));
expect(@(assembledMessage.header.frameType)).to(equal(@(SDLFrameTypeSingle)));
@@ -147,12 +225,11 @@ describe(@"HandleReceivedMessage Tests", ^ {
expect(@(assembledMessage.header.frameData)).to(equal(@(SDLFrameInfoSingleFrame)));
expect(@(assembledMessage.header.sessionID)).to(equal(@0x33));
expect(@(assembledMessage.header.bytesInPayload)).to(equal(@(payloadData.length)));
- }] onProtocolMessageReceived:[OCMArg any]];
-
- router.delegate = delegateMock;
- [router handleReceivedMessage:testMessage];
+ }];
+
+ [router handleReceivedMessage:testMessage protocol:mockProtocol];
- expect(@(verified)).to(beTruthy());
+ expect(verified).toEventually(beTrue());
});
});
});
diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLHapticManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLHapticManagerSpec.m
index 77a658a86..c5e50301f 100644
--- a/SmartDeviceLinkTests/ProxySpecs/SDLHapticManagerSpec.m
+++ b/SmartDeviceLinkTests/ProxySpecs/SDLHapticManagerSpec.m
@@ -367,27 +367,64 @@ describe(@"the haptic manager", ^{
[hapticManager updateInterfaceLayout];
viewRect2 = CGRectMake(201, 201, 50, 50);
- UITextField *textField2 = [[UITextField alloc] initWithFrame:viewRect2];
+ UITextField *textField2 = [[UITextField alloc] initWithFrame:viewRect2];
[uiViewController.view addSubview:textField2];
+ });
+
+ context(@"when not started", ^{
+ beforeEach(^{
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidUpdateProjectionView object:nil];
+ });
+
+ it(@"should have one view", ^{
+ int expectedCount = 1;
+ expect(sentHapticRequest.hapticRectData.count).toEventually(equal(expectedCount));
- [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidUpdateProjectionView object:nil];
+ if(sentHapticRequest.hapticRectData.count == expectedCount) {
+ NSArray<SDLHapticRect *> *hapticRectData = sentHapticRequest.hapticRectData;
+ SDLHapticRect *sdlhapticRect1 = hapticRectData[0];
+ SDLRectangle *sdlRect1 = sdlhapticRect1.rect;
+
+ compareRectangle(sdlRect1, viewRect1);
+ }
+ });
});
- it(@"should have two views", ^{
- int expectedCount = 2;
- expect(sentHapticRequest.hapticRectData.count).toEventually(equal(expectedCount));
+ context(@"when started", ^{
+ beforeEach(^{
+ [hapticManager start];
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidUpdateProjectionView object:nil];
+ });
- if(sentHapticRequest.hapticRectData.count == expectedCount) {
- NSArray<SDLHapticRect *> *hapticRectData = sentHapticRequest.hapticRectData;
- SDLHapticRect *sdlhapticRect1 = hapticRectData[0];
- SDLRectangle *sdlRect1 = sdlhapticRect1.rect;
+ it(@"should have two views", ^{
+ int expectedCount = 2;
+ expect(sentHapticRequest.hapticRectData.count).toEventually(equal(expectedCount));
- SDLHapticRect *sdlhapticRect2 = hapticRectData[1];
- SDLRectangle *sdlRect2 = sdlhapticRect2.rect;
+ if(sentHapticRequest.hapticRectData.count == expectedCount) {
+ NSArray<SDLHapticRect *> *hapticRectData = sentHapticRequest.hapticRectData;
+ SDLHapticRect *sdlhapticRect1 = hapticRectData[0];
+ SDLRectangle *sdlRect1 = sdlhapticRect1.rect;
- compareRectangle(sdlRect1, viewRect2);
- compareRectangle(sdlRect2, viewRect1);
- }
+ SDLHapticRect *sdlhapticRect2 = hapticRectData[1];
+ SDLRectangle *sdlRect2 = sdlhapticRect2.rect;
+
+ compareRectangle(sdlRect1, viewRect2);
+ compareRectangle(sdlRect2, viewRect1);
+ }
+ });
+
+ context(@"when stopped", ^{
+ beforeEach(^{
+ [hapticManager stop];
+ for (UIView *subview in uiViewController.view.subviews) { [subview removeFromSuperview]; }
+ [[NSNotificationCenter defaultCenter] postNotificationName:SDLDidUpdateProjectionView object:nil];
+ });
+
+ it(@"should have two views", ^{
+ int expectedCount = 2;
+ expect(sentHapticRequest.hapticRectData.count).toEventually(equal(expectedCount));
+ });
+ });
});
});
diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m
index acf64f0b8..758da74d9 100644
--- a/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m
+++ b/SmartDeviceLinkTests/ProxySpecs/SDLLockScreenStatusManagerSpec.m
@@ -4,90 +4,99 @@
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+#import "SDLOnDriverDistraction.h"
#import "SDLHMILevel.h"
-#import "SDLOnLockScreenStatus.h"
#import "SDLLockScreenStatusManager.h"
#import "SDLLockScreenStatus.h"
+#import "SDLNotificationConstants.h"
+#import "SDLNotificationDispatcher.h"
+#import "SDLOnHMIStatus.h"
+#import "SDLOnLockScreenStatus.h"
+#import "SDLRPCNotificationNotification.h"
QuickSpecBegin(SDLLockScreenStatusManagerSpec)
describe(@"the lockscreen status manager", ^{
- __block SDLLockScreenStatusManager *lockScreenManager;
+ __block SDLLockScreenStatusManager *testManager;
+ __block SDLNotificationDispatcher *mockDispatcher;
+
beforeEach(^{
- lockScreenManager = [[SDLLockScreenStatusManager alloc] init];
+ mockDispatcher = OCMClassMock([SDLNotificationDispatcher class]);
+ testManager = [[SDLLockScreenStatusManager alloc] initWithNotificationDispatcher:mockDispatcher];
});
it(@"should properly initialize user selected app boolean to false", ^{
- expect(@(lockScreenManager.userSelected)).to(beFalse());
+ expect(@(testManager.userSelected)).to(beFalse());
});
it(@"should properly initialize driver is distracted boolean to false", ^{
- expect(@(lockScreenManager.driverDistracted)).to(beFalse());
+ expect(@(testManager.driverDistracted)).to(beFalse());
});
it(@"should properly initialize hmi level object to nil", ^{
- expect(lockScreenManager.hmiLevel).to(beNil());
+ expect(testManager.hmiLevel).to(beNil());
});
describe(@"when setting HMI level", ^{
context(@"to FULL", ^{
beforeEach(^{
- lockScreenManager.userSelected = NO;
- lockScreenManager.hmiLevel = SDLHMILevelFull;
+ testManager.userSelected = NO;
+ testManager.hmiLevel = SDLHMILevelFull;
});
it(@"should set user selected to true", ^{
- expect(@(lockScreenManager.userSelected)).to(beTrue());
+ expect(@(testManager.userSelected)).to(beTrue());
});
});
context(@"to LIMITED", ^{
beforeEach(^{
- lockScreenManager.userSelected = NO;
- lockScreenManager.hmiLevel = SDLHMILevelLimited;
+ testManager.userSelected = NO;
+ testManager.hmiLevel = SDLHMILevelLimited;
});
it(@"should set user selected to true", ^{
- expect(@(lockScreenManager.userSelected)).to(beTrue());
+ expect(@(testManager.userSelected)).to(beTrue());
});
});
context(@"to BACKGROUND", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = SDLHMILevelBackground;
+ testManager.hmiLevel = SDLHMILevelBackground;
});
context(@"when user selected is false", ^{
beforeEach(^{
- lockScreenManager.userSelected = NO;
+ testManager.userSelected = NO;
});
it(@"should not alter the value", ^{
- expect(@(lockScreenManager.userSelected)).to(beFalse());
+ expect(@(testManager.userSelected)).to(beFalse());
});
});
context(@"when user selected is true", ^{
beforeEach(^{
- lockScreenManager.userSelected = YES;
+ testManager.userSelected = YES;
});
it(@"should not alter the value", ^{
- expect(@(lockScreenManager.userSelected)).to(beTrue());
+ expect(@(testManager.userSelected)).to(beTrue());
});
});
});
context(@"to NONE", ^{
beforeEach(^{
- lockScreenManager.userSelected = YES;
- lockScreenManager.hmiLevel = SDLHMILevelNone;
+ testManager.userSelected = YES;
+ testManager.hmiLevel = SDLHMILevelNone;
});
it(@"should set user selected to false", ^{
- expect(@(lockScreenManager.userSelected)).to(beFalse());
+ expect(@(testManager.userSelected)).to(beFalse());
});
});
});
@@ -95,149 +104,185 @@ describe(@"the lockscreen status manager", ^{
describe(@"when getting lock screen status", ^{
context(@"when HMI level is nil", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = nil;
+ testManager.hmiLevel = nil;
});
it(@"should return lock screen off", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic pop
});
});
context(@"when HMI level is NONE", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = SDLHMILevelNone;
+ testManager.hmiLevel = SDLHMILevelNone;
});
it(@"should return lock screen off", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic pop
});
});
context(@"when HMI level is BACKGROUND", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = SDLHMILevelBackground;
+ testManager.hmiLevel = SDLHMILevelBackground;
});
context(@"when user selected is true", ^{
beforeEach(^{
- lockScreenManager.userSelected = YES;
+ testManager.userSelected = YES;
});
context(@"if we do not set the driver distraction state", ^{
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to false", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = NO;
+ testManager.driverDistracted = NO;
});
it(@"should return lock screen optional", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to true", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = YES;
+ testManager.driverDistracted = YES;
});
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
});
context(@"when user selected is false", ^{
beforeEach(^{
- lockScreenManager.userSelected = NO;
+ testManager.userSelected = NO;
});
it(@"should return lock screen off", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOff));
+#pragma clang diagnostic pop
});
});
});
context(@"when HMI level is LIMITED", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = SDLHMILevelLimited;
+ testManager.hmiLevel = SDLHMILevelLimited;
});
context(@"if we do not set the driver distraction state", ^{
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to false", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = NO;
+ testManager.driverDistracted = NO;
});
it(@"should return lock screen optional", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to true", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = YES;
+ testManager.driverDistracted = YES;
});
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
});
context(@"when HMI level is FULL", ^{
beforeEach(^{
- lockScreenManager.hmiLevel = SDLHMILevelFull;
+ testManager.hmiLevel = SDLHMILevelFull;
});
context(@"if we do not set the driver distraction state", ^{
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to false", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = NO;
+ testManager.driverDistracted = NO;
});
it(@"should return lock screen optional", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic pop
});
});
context(@"if we set the driver distraction state to true", ^{
beforeEach(^{
- lockScreenManager.driverDistracted = YES;
+ testManager.driverDistracted = YES;
});
it(@"should return lock screen required", ^{
- expect(lockScreenManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testManager.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
});
});
});
});
- describe(@"when getting lock screen status notification", ^{
+ describe(@"when sending a lock screen status notification", ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
__block SDLOnLockScreenStatus *onLockScreenStatusNotification = nil;
#pragma clang diagnostic pop
beforeEach(^{
- lockScreenManager.userSelected = YES;
- lockScreenManager.driverDistracted = NO;
- lockScreenManager.hmiLevel = SDLHMILevelLimited;
+ testManager.userSelected = YES;
+ testManager.driverDistracted = NO;
+ testManager.hmiLevel = SDLHMILevelLimited;
- onLockScreenStatusNotification = lockScreenManager.lockScreenStatusNotification;
+ onLockScreenStatusNotification = testManager.lockScreenStatusNotification;
});
it(@"should properly return user selected", ^{
@@ -253,7 +298,55 @@ describe(@"the lockscreen status manager", ^{
});
it(@"should properly return lock screen status", ^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(onLockScreenStatusNotification.lockScreenStatus).to(equal(SDLLockScreenStatusOptional));
+#pragma clang diagnostic pop
+ });
+ });
+
+ describe(@"when receiving an HMI status", ^{
+ __block id lockScreenIconObserver = nil;
+ beforeEach(^{
+ SDLOnHMIStatus *hmiStatus = [[SDLOnHMIStatus alloc] initWithHMILevel:SDLHMILevelFull systemContext:SDLSystemContextMain audioStreamingState:SDLAudioStreamingStateAudible videoStreamingState:nil windowID:nil];
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:mockDispatcher rpcNotification:hmiStatus];
+
+ lockScreenIconObserver = OCMObserverMock();
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ [[NSNotificationCenter defaultCenter] addMockObserver:lockScreenIconObserver name:SDLDidChangeLockScreenStatusNotification object:testManager];
+ [[lockScreenIconObserver expect] notificationWithName:SDLDidChangeLockScreenStatusNotification object:[OCMArg any] userInfo:[OCMArg any]];
+#pragma clang diagnostic pop
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should update the driver distraction status and send a notification", ^{
+ expect(testManager.hmiLevel).to(equal(SDLHMILevelFull));
+ OCMVerifyAll(lockScreenIconObserver);
+ });
+ });
+
+ describe(@"when receiving a driver distraction status", ^{
+ __block id lockScreenIconObserver = nil;
+ beforeEach(^{
+ SDLOnDriverDistraction *driverDistraction = [[SDLOnDriverDistraction alloc] init];
+ driverDistraction.state = SDLDriverDistractionStateOn;
+ SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeDriverDistractionStateNotification object:mockDispatcher rpcNotification:driverDistraction];
+
+ lockScreenIconObserver = OCMObserverMock();
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ [[NSNotificationCenter defaultCenter] addMockObserver:lockScreenIconObserver name:SDLDidChangeLockScreenStatusNotification object:testManager];
+ [[lockScreenIconObserver expect] notificationWithName:SDLDidChangeLockScreenStatusNotification object:[OCMArg any] userInfo:[OCMArg any]];
+#pragma clang diagnostic pop
+
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should update the driver distraction status and send a notification", ^{
+ expect(testManager.driverDistracted).to(beTrue());
+ OCMVerifyAll(lockScreenIconObserver);
});
});
});
diff --git a/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m
index 2c4abf093..b7279a352 100644
--- a/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m
+++ b/SmartDeviceLinkTests/ProxySpecs/SDLSecondaryTransportManagerSpec.m
@@ -10,21 +10,22 @@
#import <Nimble/Nimble.h>
#import <OCMock/OCMock.h>
+#import "SDLBackgroundTaskManager.h"
#import "SDLControlFramePayloadRegisterSecondaryTransportNak.h"
#import "SDLControlFramePayloadRPCStartServiceAck.h"
#import "SDLControlFramePayloadTransportEventUpdate.h"
+#import "SDLFakeSecurityManager.h"
#import "SDLHMILevel.h"
#import "SDLIAPTransport.h"
#import "SDLNotificationConstants.h"
-#import "SDLRPCNotificationNotification.h"
+#import "SDLOnHMIStatus.h"
#import "SDLProtocol.h"
+#import "SDLRPCNotificationNotification.h"
#import "SDLSecondaryTransportManager.h"
#import "SDLStateMachine.h"
#import "SDLTCPTransport.h"
+#import "SDLTimer.h"
#import "SDLV2ProtocolMessage.h"
-#import "SDLFakeSecurityManager.h"
-#import "SDLHMILevel.h"
-#import "SDLOnHMIStatus.h"
/* copied from SDLSecondaryTransportManager.m */
typedef NSNumber SDLServiceTypeBox;
@@ -43,13 +44,15 @@ typedef NS_ENUM(NSInteger, SDLSecondaryTransportType) {
};
// should be in sync with SDLSecondaryTransportManager.m
-static const float RetryConnectionDelay = 5.0;
+static const float RetryConnectionDelay = 5.25;
+static const float RegisterTransportTime = 10.25;
static const int TCPPortUnspecified = -1;
@interface SDLSecondaryTransportManager ()
// we need to reach to private properties for the tests
+@property (strong, nonatomic) SDLStateMachine *stateMachine;
@property (assign, nonatomic) SDLSecondaryTransportType secondaryTransportType;
@property (nullable, strong, nonatomic) SDLProtocol *primaryProtocol;
@property (nullable, strong, nonatomic) id<SDLTransportType> secondaryTransport;
@@ -60,28 +63,14 @@ static const int TCPPortUnspecified = -1;
@property (strong, nonatomic, nullable) NSString *ipAddress;
@property (assign, nonatomic) int tcpPort;
@property (strong, nonatomic, nullable) SDLHMILevel currentHMILevel;
+@property (assign, nonatomic) UIApplicationState currentApplicationState;
+@property (strong, nonatomic) SDLBackgroundTaskManager *backgroundTaskManager;
+@property (strong, nonatomic, nullable) SDLTimer *registerTransportTimer;
-@end
+- (nullable BOOL (^)(void))sdl_backgroundTaskEndedHandler;
-@interface SDLSecondaryTransportManager (ForTest)
-// Swap sdl_getAppState method to dummy implementation.
-// Since the test runs on the main thread, dispatch_sync()-ing to the main thread doesn't work.
-+ (void)swapGetAppStateMethod;
@end
-@implementation SDLSecondaryTransportManager (ForTest)
-- (UIApplicationState)dummyGetAppState {
- NSLog(@"Testing: app state for secondary transport manager is always ACTIVE");
- return UIApplicationStateActive;
-}
-
-+ (void)swapGetAppStateMethod {
- SEL selector = NSSelectorFromString(@"sdl_getAppState");
- Method from = class_getInstanceMethod(self, selector);
- Method to = class_getInstanceMethod(self, @selector(dummyGetAppState));
- method_exchangeImplementations(from, to);
-}
-@end
@interface SDLTCPTransport (ConnectionDisabled)
// Disable connect and disconnect methods
@@ -101,12 +90,13 @@ static const int TCPPortUnspecified = -1;
Method to = class_getInstanceMethod(self, @selector(dummyConnect));
method_exchangeImplementations(from, to);
- from = class_getInstanceMethod(self, @selector(disconnect));
+ from = class_getInstanceMethod(self, @selector(disconnectWithCompletionHandler:));
to = class_getInstanceMethod(self, @selector(dummyDisconnect));
method_exchangeImplementations(from, to);
}
@end
+
@interface SDLIAPTransport (ConnectionDisabled)
// Disable connect and disconnect methods
+ (void)swapConnectionMethods;
@@ -125,7 +115,7 @@ static const int TCPPortUnspecified = -1;
Method to = class_getInstanceMethod(self, @selector(dummyConnect));
method_exchangeImplementations(from, to);
- from = class_getInstanceMethod(self, @selector(disconnect));
+ from = class_getInstanceMethod(self, @selector(disconnectWithCompletionHandler:));
to = class_getInstanceMethod(self, @selector(dummyDisconnect));
method_exchangeImplementations(from, to);
}
@@ -146,12 +136,9 @@ describe(@"the secondary transport manager ", ^{
hmiStatus.hmiLevel = hmiLevel;
SDLRPCNotificationNotification *notification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidChangeHMIStatusNotification object:self rpcNotification:hmiStatus];
[[NSNotificationCenter defaultCenter] postNotification:notification];
-
- [NSThread sleepForTimeInterval:0.3];
};
beforeEach(^{
- [SDLSecondaryTransportManager swapGetAppStateMethod];
[SDLTCPTransport swapConnectionMethods];
[SDLIAPTransport swapConnectionMethods];
@@ -159,22 +146,19 @@ describe(@"the secondary transport manager ", ^{
testStreamingProtocolDelegate = OCMStrictProtocolMock(@protocol(SDLStreamingProtocolDelegate));
testStateMachineQueue = dispatch_queue_create("com.sdl.testsecondarytransportmanager", DISPATCH_QUEUE_SERIAL);
manager = [[SDLSecondaryTransportManager alloc] initWithStreamingProtocolDelegate:testStreamingProtocolDelegate serialQueue:testStateMachineQueue];
+
+ manager.currentApplicationState = UIApplicationStateActive;
});
afterEach(^{
// it is possible that manager calls methods of SDLStreamingProtocolDelegate while stopping, so accept them
// (Don't put OCMVerifyAll() after calling stop.)
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:OCMOCK_ANY toNewProtocol:nil]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:OCMOCK_ANY toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:OCMOCK_ANY toNewVideoProtocol:nil fromOldAudioProtocol:OCMOCK_ANY toNewAudioProtocol:nil]);
- dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
- });
manager = nil;
[SDLIAPTransport swapConnectionMethods];
[SDLTCPTransport swapConnectionMethods];
- [SDLSecondaryTransportManager swapGetAppStateMethod];
});
@@ -190,35 +174,52 @@ describe(@"the secondary transport manager ", ^{
expect(manager.tcpPort).to(equal(TCPPortUnspecified));
});
-
describe(@"when started", ^{
beforeEach(^{
- testPrimaryProtocol = [[SDLProtocol alloc] init];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
});
- it(@"should transition to Started state", ^{
+ it(@"if in the stopped state, it should transition to state started", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateStopped fromOldState:nil callEnterTransition:YES];
+
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
});
expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStarted));
- OCMVerifyAll(testStreamingProtocolDelegate);
});
- });
+ it(@"if not in the stopped state, it should stay in the same state", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:YES];
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ });
+ });
describe(@"In Started state", ^{
beforeEach(^{
// In the tests, we assume primary transport is iAP
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
- testPrimaryProtocol.transport = testPrimaryTransport;
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
});
});
+ it(@"should ignore the primary transport being opened before the secondary transport is established", ^{
+ manager.secondaryProtocol = nil;
+
+ [testPrimaryProtocol onTransportConnected];
+
+ expect(manager.registerTransportTimer).to(beNil());
+ });
+
describe(@"when received Start Service ACK on primary transport", ^{
__block SDLProtocolHeader *testStartServiceACKHeader = nil;
__block SDLProtocolMessage *testStartServiceACKMessage = nil;
@@ -249,25 +250,22 @@ describe(@"the secondary transport manager ", ^{
testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu authToken:nil protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data];
-
});
it(@"should configure its properties and transition to Configured state", ^{
// in this configuration, only audio service is allowed on primary transport
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
-
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:nil fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionTCP));
NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary), @(SDLTransportClassPrimary)];
- expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ expect(manager.transportsForAudioService).toEventually(equal(expectedTransportsForAudioService));
NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
- expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
+ expect(manager.transportsForVideoService).toEventually(equal(expectedTransportsForVideoService));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -282,19 +280,16 @@ describe(@"the secondary transport manager ", ^{
it(@"should configure its properties and transition to Configured state", ^{
// in this case, audio and video services start on primary transport (for compatibility)
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
-
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
- expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
- expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionTCP));
+ expect(manager.transportsForAudioService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -309,22 +304,17 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state with transport type disabled", ^{
- // Since primary transport is iAP, we cannot use iAP for secondary transport.
- // So both services run on primary transport.
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
+ // Since primary transport is iAP, we cannot use iAP for secondary transport. This means both services run on primary transport.
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]);
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
- // see the comment above
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
- expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
- expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -336,19 +326,16 @@ describe(@"the secondary transport manager ", ^{
it(@"should transition to Configured state with transport type disabled", ^{
// both services run on primary transport
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:testPrimaryProtocol]);
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:testPrimaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:testPrimaryProtocol]);
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
-
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
- expect(manager.transportsForAudioService).to(equal(@[@(SDLTransportClassPrimary)]));
- expect(manager.transportsForVideoService).to(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
+ expect(manager.transportsForVideoService).toEventually(equal(@[@(SDLTransportClassPrimary)]));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
});
@@ -373,18 +360,18 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should configure its properties but stay in Started state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ OCMReject([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:[OCMArg any] fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:[OCMArg any]]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStarted));
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionDisabled));
- expect(manager.transportsForAudioService).to(equal(@[]));
- expect(manager.transportsForVideoService).to(equal(@[]));
- expect(manager.ipAddress).to(equal(testTcpIpAddress));
- expect(manager.tcpPort).to(equal(testTcpPort));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateStarted));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionDisabled));
+ expect(manager.transportsForAudioService).toEventually(equal(@[]));
+ expect(manager.transportsForVideoService).toEventually(equal(@[]));
+ expect(manager.ipAddress).toEventually(equal(testTcpIpAddress));
+ expect(manager.tcpPort).toEventually(equal(testTcpPort));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -427,30 +414,31 @@ describe(@"the secondary transport manager ", ^{
testStartServiceACKPayload = [[SDLControlFramePayloadRPCStartServiceAck alloc] initWithHashId:testHashId mtu:testMtu authToken:nil protocolVersion:testProtocolVersion secondaryTransports:testSecondaryTransports audioServiceTransports:testAudioServiceTransports videoServiceTransports:testVideoServiceTransports];
testStartServiceACKMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testStartServiceACKHeader andPayload:testStartServiceACKPayload.data];
manager.currentHMILevel = SDLHMILevelFull;
+ manager.currentApplicationState = UIApplicationStateActive;
});
it(@"should configure its properties and immediately transition to Connecting state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ // audio and video services will not start until secondary transport is established
+ OCMReject([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:[OCMArg any] fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:[OCMArg any]]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionTCP));
NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary)];
- expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ expect(manager.transportsForAudioService).toEventually(equal(expectedTransportsForAudioService));
NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
- expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
- expect(manager.ipAddress).to(equal(testTcpIpAddress));
- expect(manager.tcpPort).to(equal(testTcpPort));
+ expect(manager.transportsForVideoService).toEventually(equal(expectedTransportsForVideoService));
+ expect(manager.ipAddress).toEventually(equal(testTcpIpAddress));
+ expect(manager.tcpPort).toEventually(equal(testTcpPort));
SDLTCPTransport *secondaryTransport = (SDLTCPTransport *)manager.secondaryTransport;
- expect(secondaryTransport.hostName).to(equal(testTcpIpAddress));
+ expect(secondaryTransport.hostName).toEventually(equal(testTcpIpAddress));
NSString *portNumberString = [NSString stringWithFormat:@"%d", testTcpPort];
- expect(secondaryTransport.portNumber).to(equal(portNumberString));
+ expect(secondaryTransport.portNumber).toEventually(equal(portNumberString));
- // audio and video services will not start until secondary transport is established
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -467,36 +455,37 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should configure its properties and transition to Configured state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [testPrimaryProtocol handleBytesFromTransport:testStartServiceACKMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ // audio and video services will not start until secondary transport is established
+ OCMReject([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:[OCMArg any] fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:[OCMArg any]]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ [testPrimaryProtocol onDataReceived:testStartServiceACKMessage.data];
- expect((NSInteger)manager.secondaryTransportType).to(equal(SDLTransportSelectionTCP));
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ expect((NSInteger)manager.secondaryTransportType).toEventually(equal(SDLTransportSelectionTCP));
NSArray<SDLTransportClassBox *> *expectedTransportsForAudioService = @[@(SDLTransportClassSecondary)];
- expect(manager.transportsForAudioService).to(equal(expectedTransportsForAudioService));
+ expect(manager.transportsForAudioService).toEventually(equal(expectedTransportsForAudioService));
NSArray<SDLTransportClassBox *> *expectedTransportsForVideoService = @[@(SDLTransportClassSecondary)];
- expect(manager.transportsForVideoService).to(equal(expectedTransportsForVideoService));
- expect(manager.ipAddress).to(equal(testTcpIpAddress));
- expect(manager.tcpPort).to(equal(testTcpPort));
-
- expect(manager.secondaryTransport).to(beNil());
+ expect(manager.transportsForVideoService).toEventually(equal(expectedTransportsForVideoService));
+ expect(manager.ipAddress).toEventually(equal(testTcpIpAddress));
+ expect(manager.tcpPort).toEventually(equal(testTcpPort));
+ expect(manager.secondaryTransport).toEventually(beNil());
- // audio and video services will not start until secondary transport is established
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
});
describe(@"when stopped", ^{
- it(@"should transition to Stopped state", ^{
- dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
+ it(@"should transition to the Stopped state", ^{
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
});
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
- OCMVerifyAll(testStreamingProtocolDelegate);
});
});
});
@@ -505,9 +494,9 @@ describe(@"the secondary transport manager ", ^{
describe(@"if secondary transport is iAP", ^{
beforeEach(^{
// in this case we assume the primary transport is TCP
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLTCPTransport alloc] init];
- testPrimaryProtocol.transport = testPrimaryTransport;
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ testPrimaryProtocol.securityManager = OCMClassMock([SDLFakeSecurityManager class]);
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
@@ -524,8 +513,7 @@ describe(@"the secondary transport manager ", ^{
it(@"should stay in state Configured", ^{
expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
expect(manager.currentHMILevel).to(beNil());
-
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.secondaryProtocol.securityManager).to(beNil());
});
});
@@ -537,16 +525,15 @@ describe(@"the secondary transport manager ", ^{
it(@"should transition to Connecting state", ^{
expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
expect(manager.currentHMILevel).to(equal(SDLHMILevelFull));
-
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.secondaryProtocol.securityManager).to(equal(testPrimaryProtocol.securityManager));
});
});
});
describe(@"if secondary transport is TCP", ^{
beforeEach(^{
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
testPrimaryProtocol.transport = testPrimaryTransport;
dispatch_sync(testStateMachineQueue, ^{
@@ -565,8 +552,6 @@ describe(@"the secondary transport manager ", ^{
describe(@"and Transport Event Update is not received", ^{
it(@"should stay in Configured state", ^{
expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
-
- OCMVerifyAll(testStreamingProtocolDelegate);
});
});
@@ -588,17 +573,15 @@ describe(@"the secondary transport manager ", ^{
testTransportEventUpdatePayload = [[SDLControlFramePayloadTransportEventUpdate alloc] initWithTcpIpAddress:testTcpIpAddress tcpPort:testTcpPort];
testTransportEventUpdateMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testTransportEventUpdateHeader andPayload:testTransportEventUpdatePayload.data];
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
+ testPrimaryProtocol.securityManager = OCMClassMock([SDLFakeSecurityManager class]);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
});
context(@"before the app context is HMI FULL", ^{
it(@"should stay in Configured state", ^{
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
- expect(manager.currentHMILevel).to(beNil());
-
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ expect(manager.currentHMILevel).toEventually(beNil());
+ expect(manager.secondaryProtocol.securityManager).toEventually(beNil());
});
});
@@ -608,10 +591,9 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Connecting", ^{
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
- expect(manager.currentHMILevel).to(equal(SDLHMILevelFull));
-
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
+ expect(manager.currentHMILevel).toEventually(equal(SDLHMILevelFull));
+ expect(manager.secondaryProtocol.securityManager).toEventually(equal(testPrimaryProtocol.securityManager));
});
});
});
@@ -619,8 +601,8 @@ describe(@"the secondary transport manager ", ^{
describe(@"when stopped", ^{
beforeEach(^{
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
testPrimaryProtocol.transport = testPrimaryTransport;
dispatch_sync(testStateMachineQueue, ^{
@@ -630,12 +612,14 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Stopped state", ^{
- dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
});
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
- OCMVerifyAll(testStreamingProtocolDelegate);
});
});
});
@@ -645,12 +629,11 @@ describe(@"the secondary transport manager ", ^{
__block id testSecondaryProtocolMock = nil;
beforeEach(^{
- secondaryProtocol = [[SDLProtocol alloc] init];
+ secondaryProtocol = [[SDLProtocol alloc] initWithTransport:[[SDLTCPTransport alloc] init] encryptionManager:nil];
testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
- testPrimaryProtocol.transport = testPrimaryTransport;
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
});
@@ -667,13 +650,11 @@ describe(@"the secondary transport manager ", ^{
it(@"should send out Register Secondary Transport frame", ^{
OCMExpect([testSecondaryProtocolMock registerSecondaryTransport]);
- [testSecondaryProtocolMock onProtocolOpened];
- [NSThread sleepForTimeInterval:0.1];
+ [testSecondaryProtocolMock onTransportConnected];
- OCMVerifyAll(testSecondaryProtocolMock);
- OCMVerifyAll(testStreamingProtocolDelegate);
+ OCMVerifyAllWithDelay(testSecondaryProtocolMock, 0.5);
- // Note: cannot test the timeout scenario since the timer fires on main thread
+ expect(manager.registerTransportTimer).toNot(beNil());
});
describe(@"and Register Secondary Transport ACK is received", ^{
@@ -696,14 +677,12 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Registered state", ^{
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:nil toNewProtocol:secondaryProtocol]);
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:secondaryProtocol fromOldAudioProtocol:nil toNewAudioProtocol:secondaryProtocol]);
- [testSecondaryProtocolMock handleBytesFromTransport:testRegisterSecondaryTransportAckMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ [testSecondaryProtocolMock onDataReceived:testRegisterSecondaryTransportAckMessage.data];
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateRegistered));
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -724,22 +703,64 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Reconnecting state", ^{
- [testSecondaryProtocolMock handleBytesFromTransport:testRegisterSecondaryTransportNakMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ [testSecondaryProtocolMock onDataReceived:testRegisterSecondaryTransportNakMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+ });
+
+ describe(@"and timeout occurs while waiting for the module to respond to the Register Secondary Transport request", ^{
+ beforeEach(^{
+ // assume audio and video services are allowed only on secondary transport
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(SDLTransportClassSecondary);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(SDLTransportClassSecondary);
+ });
+
+ it(@"if in the Connecting state it should transition to Reconnecting state", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO];
+ });
+
+ [testSecondaryProtocolMock onTransportConnected];
+
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ // Wait for the timer to elapse
+ float waitTime = RegisterTransportTime;
+ NSLog(@"Please wait for register transport timer to elapse... (for %.02f seconds)", waitTime);
+ [NSThread sleepForTimeInterval:waitTime];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+
+ it(@"if not in the Connecting state it should not try to reconnect", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateReconnecting fromOldState:nil callEnterTransition:NO];
+ });
+
+ [testSecondaryProtocolMock onTransportConnected];
+
+ // Wait for the timer to elapse
+ float waitTime = RegisterTransportTime;
+ NSLog(@"Please wait for register transport timer to elapse... (for %.02f seconds)", waitTime);
+ [NSThread sleepForTimeInterval:waitTime];
+
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
});
});
});
describe(@"when transport is closed", ^{
it(@"should transition to Reconnecting state", ^{
- [testSecondaryProtocolMock onProtocolClosed];
- [NSThread sleepForTimeInterval:0.1];
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onTransportDisconnected];
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -771,11 +792,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should ignore the frame and stay in Connecting state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
});
});
@@ -790,11 +808,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state, then transition to Connecting state again", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
});
});
@@ -808,11 +823,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
});
});
@@ -820,27 +832,28 @@ describe(@"the secondary transport manager ", ^{
describe(@"when stopped", ^{
it(@"should transition to Stopped state", ^{
- dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
});
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
- OCMVerifyAll(testStreamingProtocolDelegate);
});
});
});
-
describe(@"In Registered state", ^{
__block SDLProtocol *secondaryProtocol = nil;
__block id testSecondaryProtocolMock = nil;
beforeEach(^{
- secondaryProtocol = [[SDLProtocol alloc] init];
+ secondaryProtocol = [[SDLProtocol alloc] initWithTransport:[[SDLTCPTransport alloc] init] encryptionManager:nil];
testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
testPrimaryProtocol.transport = testPrimaryTransport;
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
@@ -889,11 +902,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should ignore the frame and stay in Registered state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateRegistered));
});
});
@@ -907,14 +917,11 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state, then transition to Connecting state again", ^{
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
-
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -928,14 +935,11 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state", ^{
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
-
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
});
@@ -950,14 +954,12 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Reconnecting state", ^{
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
- [testSecondaryProtocolMock onProtocolClosed];
- [NSThread sleepForTimeInterval:0.1];
+ [testSecondaryProtocolMock onTransportDisconnected];
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
@@ -971,24 +973,24 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Stopped state", ^{
- OCMExpect([testStreamingProtocolDelegate audioServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
- OCMExpect([testStreamingProtocolDelegate videoServiceProtocolDidUpdateFromOldProtocol:secondaryProtocol toNewProtocol:nil]);
-
- dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:secondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:secondaryProtocol toNewAudioProtocol:nil]);
+
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
});
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
- OCMVerifyAll(testStreamingProtocolDelegate);
});
});
});
-
describe(@"In Reconnecting state", ^{
beforeEach(^{
- testPrimaryProtocol = [[SDLProtocol alloc] init];
testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
testPrimaryProtocol.transport = testPrimaryTransport;
dispatch_sync(testStateMachineQueue, ^{
[manager startWithPrimaryProtocol:testPrimaryProtocol];
@@ -1010,12 +1012,11 @@ describe(@"the secondary transport manager ", ^{
});
// wait for the timer
- float waitTime = RetryConnectionDelay + 5.0;
- NSLog(@"Please wait for reconnection timeout ... (for %f seconds)", waitTime);
+ float waitTime = RetryConnectionDelay;
+ NSLog(@"Please wait for reconnection timeout... (for %.02f seconds)", waitTime);
[NSThread sleepForTimeInterval:waitTime];
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
});
});
@@ -1047,11 +1048,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should ignore the frame and stay in Reconnecting state", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateReconnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
});
});
@@ -1066,11 +1064,8 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state before timeout, then transition to Connecting state again", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConnecting));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
});
});
@@ -1084,24 +1079,390 @@ describe(@"the secondary transport manager ", ^{
});
it(@"should transition to Configured state before timeout", ^{
- [testPrimaryProtocol handleBytesFromTransport:testTransportEventUpdateMessage.data];
- [NSThread sleepForTimeInterval:0.1];
-
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ [testPrimaryProtocol onDataReceived:testTransportEventUpdateMessage.data];
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
});
});
});
describe(@"when stopped", ^{
it(@"should transition to Stopped state", ^{
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
+ });
+ });
+ });
+ });
+
+ describe(@"app lifecycle state change", ^{
+ __block id mockBackgroundTaskManager = nil;
+
+ beforeEach(^{
+ // In the tests, we assume primary transport is iAP
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ testPrimaryProtocol.transport = testPrimaryTransport;
+
+ mockBackgroundTaskManager = OCMClassMock([SDLBackgroundTaskManager class]);
+ manager.backgroundTaskManager = mockBackgroundTaskManager;
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+ });
+
+ context(@"app enters the background", ^{
+ beforeEach(^{
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ });
+
+ describe(@"if the secondary transport is connected", ^{
+ beforeEach(^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should start a background task and stay connected", ^{
+ OCMExpect([mockBackgroundTaskManager startBackgroundTask]);
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationWillResignActiveNotification object:nil];
+
+ OCMVerifyAllWithDelay(mockBackgroundTaskManager, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateRegistered));
+
+ });
+ });
+
+ describe(@"if the secondary transport has not yet connected", ^{
+ beforeEach(^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should ignore the state change notification", ^{
+ OCMReject([mockBackgroundTaskManager startBackgroundTask]);
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationWillResignActiveNotification object:nil];
+
+ OCMVerifyAllWithDelay(mockBackgroundTaskManager, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+
+ });
+ });
+ });
+
+ context(@"app enters the foreground", ^{
+ describe(@"if the secondary transport is still connected", ^{
+ beforeEach(^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should end the background task and stay in the connected state", ^{
+ OCMExpect([mockBackgroundTaskManager endBackgroundTask]);
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ OCMVerifyAllWithDelay(mockBackgroundTaskManager, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateRegistered));
+
+ });
+ });
+
+ describe(@"if the secondary transport is not connected but is configured", ^{
+ beforeEach(^{
+ manager.ipAddress = @"192.555.23.1";
+ manager.tcpPort = 54321;
+ manager.currentHMILevel = SDLHMILevelFull;
+
+ manager.secondaryTransportType = SDLTransportSelectionTCP;
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should end the background task and try to restart the TCP transport", ^{
+ OCMExpect([mockBackgroundTaskManager endBackgroundTask]);
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ OCMVerifyAllWithDelay(mockBackgroundTaskManager, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
+ });
+ });
+
+ describe(@"if the secondary transport not connected and is not configured", ^{
+ beforeEach(^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO];
+ });
+
+ it(@"should ignore the state change notification", ^{
+ OCMReject([mockBackgroundTaskManager endBackgroundTask]);
+
+ [[NSNotificationCenter defaultCenter] postNotificationName:UIApplicationDidBecomeActiveNotification object:nil];
+
+ OCMVerifyAllWithDelay(mockBackgroundTaskManager, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConnecting));
+ });
+ });
+ });
+
+ describe(@"When the background task expires", ^{
+ context(@"If the app is still in the background", ^{
+ beforeEach(^{
+ manager.currentApplicationState = UIApplicationStateBackground;
+ });
+
+ it(@"should stop the TCP transport if the app is still in the background and perform cleanup before ending the background task", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+
+ BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler();
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateConfigured));
+ expect(waitForCleanupToFinish).to(beTrue());
+ });
+
+ it(@"should ignore the notification if the manager has stopped before the background task ended and immediately end the background task", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateStopped fromOldState:nil callEnterTransition:NO];
+
+ BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler();
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ expect(waitForCleanupToFinish).to(beFalse());
+ });
+
+ afterEach(^{
+ manager.currentApplicationState = UIApplicationStateActive;
+ });
+ });
+
+ context(@"If the app is has entered the foreground", ^{
+ it(@"should ignore the notification if the app has returned to the foreground and immediately end the background task", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+
+ BOOL waitForCleanupToFinish = manager.sdl_backgroundTaskEndedHandler();
+
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateRegistered));
+ expect(waitForCleanupToFinish).to(beFalse());
+ });
+ });
+ });
+ });
+
+ describe(@"when the secondary transport is closed", ^{
+ __block SDLProtocol *secondaryProtocol = nil;
+ __block id testSecondaryProtocolMock = nil;
+
+ beforeEach(^{
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ secondaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ [secondaryProtocol.protocolDelegateTable addObject:manager];
+ manager.secondaryProtocol = secondaryProtocol;
+ });
+
+ it(@"should transition to Reconnecting state if in state connecting", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onTransportDisconnected];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+
+ it(@"should transition to Reconnecting state if in state registered", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onTransportDisconnected];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+
+ it(@"should stay in the same state if not in the connecting or registered states", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMReject([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onTransportDisconnected];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ });
+ });
+
+ describe(@"when the secondary transport errors (wifi turned off or socket breaks)", ^{
+ __block SDLProtocol *secondaryProtocol = nil;
+ __block id testSecondaryProtocolMock = nil;
+
+ beforeEach(^{
+ secondaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ testSecondaryProtocolMock = OCMPartialMock(secondaryProtocol);
+ testPrimaryProtocol = [[SDLProtocol alloc] initWithTransport:testPrimaryTransport encryptionManager:nil];
+ testPrimaryTransport = [[SDLIAPTransport alloc] init];
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+
+ [secondaryProtocol.protocolDelegateTable addObject:manager];
+ manager.secondaryProtocol = secondaryProtocol;
+ });
+
+ it(@"should transition to Reconnecting state if in state connecting", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConnecting fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onError:[OCMArg any]];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+
+ it(@"should transition to Reconnecting state if in state registered", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMExpect([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onError:[OCMArg any]];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateReconnecting));
+ });
+
+ it(@"should stay in the same state if not in the connecting or registered states", ^{
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateConfigured fromOldState:nil callEnterTransition:NO];
+ });
+
+ OCMReject([testStreamingProtocolDelegate transportClosed]);
+
+ [testSecondaryProtocolMock onError:[OCMArg any]];
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ expect(manager.stateMachine.currentState).toEventually(equal(SDLSecondaryTransportStateConfigured));
+ });
+ });
+
+ describe(@"when the secondary transport is disconnected", ^{
+ __block id mockSecondaryTransport = nil;
+ __block id mockBackgroundTaskManager = nil;
+
+ beforeEach(^{
+ mockSecondaryTransport = OCMProtocolMock(@protocol(SDLTransportType));
+ mockBackgroundTaskManager = OCMClassMock([SDLBackgroundTaskManager class]);
+
+ manager.backgroundTaskManager = mockBackgroundTaskManager;
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(2);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(2);
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+ });
+
+ it(@"should return early if the secondary transport has not yet been established", ^{
+ manager.secondaryTransport = nil;
+
+ waitUntilTimeout(1, ^(void (^done)(void)){
dispatch_sync(testStateMachineQueue, ^{
- [manager stop];
+ [manager disconnectSecondaryTransportWithCompletionHandler:^{
+ done();
+ }];
});
+ });
+ });
+
+ it(@"should shutdown the secondary transport", ^{
+ manager.secondaryTransport = mockSecondaryTransport;
+ OCMExpect([mockSecondaryTransport disconnectWithCompletionHandler:[OCMArg invokeBlock]]);
- expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
- OCMVerifyAll(testStreamingProtocolDelegate);
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager disconnectSecondaryTransportWithCompletionHandler:^{\
+ expect(manager.secondaryTransport).to(beNil());
+ expect(manager.secondaryProtocol).to(beNil());
+ expect(manager.streamingServiceTransportMap).to(beEmpty());
+ OCMVerify([manager.backgroundTaskManager endBackgroundTask]);
+ done();
+ }];
+ });
});
+
+ OCMVerifyAllWithDelay(mockSecondaryTransport, 0.5);
+ });
+ });
+
+ describe(@"when stopped", ^{
+ __block SDLProtocol *testSecondaryProtocol = nil;
+
+ beforeEach(^{
+ testSecondaryProtocol = OCMClassMock([SDLProtocol class]);
+ manager.secondaryProtocol = testSecondaryProtocol;
+
+ manager.transportsForAudioService = @[@(SDLTransportClassSecondary)];
+ manager.transportsForVideoService = @[@(SDLTransportClassSecondary)];
+ manager.streamingServiceTransportMap[@(SDLServiceTypeAudio)] = @(2);
+ manager.streamingServiceTransportMap[@(SDLServiceTypeVideo)] = @(2);
+
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager startWithPrimaryProtocol:testPrimaryProtocol];
+ });
+ });
+
+ it(@"if not in the stopped state, it should transition to stopped state", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateRegistered fromOldState:nil callEnterTransition:NO];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:testSecondaryProtocol toNewVideoProtocol:nil fromOldAudioProtocol:testSecondaryProtocol toNewAudioProtocol:nil]);
+
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
+ });
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
+ });
+
+ it(@"if already in the stopped state, it should stay in the stopped state", ^{
+ [manager.stateMachine setToState:SDLSecondaryTransportStateStopped fromOldState:nil callEnterTransition:NO];
+ OCMExpect([testStreamingProtocolDelegate didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:nil fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:nil]);
+
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ dispatch_sync(testStateMachineQueue, ^{
+ [manager stopWithCompletionHandler:^{
+ expect(manager.stateMachine.currentState).to(equal(SDLSecondaryTransportStateStopped));
+ done();
+ }];
+ });
+ });
+
+ OCMVerifyAllWithDelay(testStreamingProtocolDelegate, 0.5);
});
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppHMITypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppHMITypeSpec.m
index f00bfa300..7efc466bb 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppHMITypeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppHMITypeSpec.m
@@ -26,6 +26,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLAppHMITypeTesting).to(equal(@"TESTING"));
expect(SDLAppHMITypeSystem).to(equal(@"SYSTEM"));
expect(SDLAppHMITypeRemoteControl).to(equal(@"REMOTE_CONTROL"));
+ expect(SDLAppHMITypeWebView).to(equal(@"WEB_VIEW"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppInterfaceUnregisteredReasonSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppInterfaceUnregisteredReasonSpec.m
index e92d3d81d..4685476b1 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppInterfaceUnregisteredReasonSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLAppInterfaceUnregisteredReasonSpec.m
@@ -29,6 +29,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLAppInterfaceUnregisteredReasonAppUnauthorized).to(equal(@"APP_UNAUTHORIZED"));
expect(SDLAppInterfaceUnregisteredReasonProtocolViolation).to(equal(@"PROTOCOL_VIOLATION"));
expect(SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource).to(equal(@"UNSUPPORTED_HMI_RESOURCE"));
+ expect(SDLAppInterfaceUnregisteredReasonResourceConstraint).to(equal(@"RESOURCE_CONSTRAINT"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCapacityUnitSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCapacityUnitSpec.m
new file mode 100644
index 000000000..8dc19f03e
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCapacityUnitSpec.m
@@ -0,0 +1,21 @@
+//
+// SDLCapacityUnitSpec.m
+// SmartDeviceLinkTests
+//
+
+#import <Nimble/Nimble.h>
+#import <Quick/Quick.h>
+
+#import "SDLCapacityUnit.h"
+
+QuickSpecBegin(SDLCapacityUnitSpec)
+
+describe(@"Individual Enum Value Tests", ^ {
+ it(@"Should match internal values", ^ {
+ expect(SDLCapacityUnitKilograms).to(equal(@"KILOGRAMS"));
+ expect(SDLCapacityUnitKilowatthours).to(equal(@"KILOWATTHOURS"));
+ expect(SDLCapacityUnitLiters).to(equal(@"LITERS"));
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCharacterSetSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCharacterSetSpec.m
index 293b2f3fe..58440e51d 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCharacterSetSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLCharacterSetSpec.m
@@ -14,10 +14,16 @@ QuickSpecBegin(SDLCharacterSetSpec)
describe(@"Individual Enum Value Tests", ^ {
it(@"Should match internal values", ^ {
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLCharacterSetType2).to(equal(@"TYPE2SET"));
expect(SDLCharacterSetType5).to(equal(@"TYPE5SET"));
expect(SDLCharacterSetCID1).to(equal(@"CID1SET"));
expect(SDLCharacterSetCID2).to(equal(@"CID2SET"));
+ #pragma clang diagnostic pop
+ expect(SDLCharacterSetAscii).to(equal(@"ASCII"));
+ expect(SDLCharacterSetIso88591).to(equal(@"ISO_8859_1"));
+ expect(SDLCharacterSetUtf8).to(equal(@"UTF_8"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m
index 0761cbed3..d6aaf4036 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLLockScreenStatusSpec.m
@@ -14,9 +14,12 @@ QuickSpecBegin(SDLLockScreenStatusSpec)
describe(@"Individual Enum Value Tests", ^ {
it(@"Should match internal values", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLLockScreenStatusOff).to(equal(@"OFF"));
expect(SDLLockScreenStatusOptional).to(equal(@"OPTIONAL"));
expect(SDLLockScreenStatusRequired).to(equal(@"REQUIRED"));
+#pragma clang diagnostic pop
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPredefinedLayoutSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPredefinedLayoutSpec.m
index 1635f7741..884f3fa78 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPredefinedLayoutSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLPredefinedLayoutSpec.m
@@ -34,6 +34,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLPredefinedLayoutLargeGraphicWithSoftButtons).to(equal(@"LARGE_GRAPHIC_WITH_SOFTBUTTONS"));
expect(SDLPredefinedLayoutDoubleGraphicWithSoftButtons).to(equal(@"DOUBLE_GRAPHIC_WITH_SOFTBUTTONS"));
expect(SDLPredefinedLayoutLargeGraphicOnly).to(equal(@"LARGE_GRAPHIC_ONLY"));
+ expect(SDLPredefinedLayoutWebView).to(equal(@"WEB_VIEW"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSystemCapabilityTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSystemCapabilityTypeSpec.m
index 58bb889dc..ff6fe1656 100755
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSystemCapabilityTypeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLSystemCapabilityTypeSpec.m
@@ -15,6 +15,9 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLSystemCapabilityTypePhoneCall).to(equal(@"PHONE_CALL"));
expect(SDLSystemCapabilityTypeVideoStreaming).to(equal(@"VIDEO_STREAMING"));
expect(SDLSystemCapabilityTypeRemoteControl).to(equal(@"REMOTE_CONTROL"));
+ expect(SDLSystemCapabilityTypeDisplays).to(equal(@"DISPLAYS"));
+ expect(SDLSystemCapabilityTypeSeatLocation).to(equal(@"SEAT_LOCATION"));
+ expect(SDLSystemCapabilityTypeDriverDistraction).to(equal(@"DRIVER_DISTRACTION"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
index 16f87d613..7daa898ce 100644
--- a/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/EnumSpecs/SDLVehicleDataTypeSpec.m
@@ -17,8 +17,11 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLVehicleDataTypeGPS).to(equal(@"VEHICLEDATA_GPS"));
expect(SDLVehicleDataTypeSpeed).to(equal(@"VEHICLEDATA_SPEED"));
expect(SDLVehicleDataTypeRPM).to(equal(@"VEHICLEDATA_RPM"));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLVehicleDataTypeFuelLevel).to(equal(@"VEHICLEDATA_FUELLEVEL"));
expect(SDLVehicleDataTypeFuelLevelState).to(equal(@"VEHICLEDATA_FUELLEVEL_STATE"));
+#pragma clang diagnostic pop
expect(SDLVehicleDataTypeFuelConsumption).to(equal(@"VEHICLEDATA_FUELCONSUMPTION"));
expect(SDLVehicleDataTypeFuelRange).to(equal(@"VEHICLEDATA_FUELRANGE"));
expect(SDLVehicleDataTypeExternalTemperature).to(equal(@"VEHICLEDATA_EXTERNTEMP"));
@@ -45,6 +48,7 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLVehicleDataTypeElectronicParkBrakeStatus).to(equal(@"VEHICLEDATA_ELECTRONICPARKBRAKESTATUS"));
expect(SDLVehicleDataTypeTurnSignal).to(equal(@"VEHICLEDATA_TURNSIGNAL"));
expect(SDLVehicleDataTypeCloudAppVehicleID).to(equal(@"VEHICLEDATA_CLOUDAPPVEHICLEID"));
+ expect(SDLVehicleDataTypeHandsOffSteering).to(equal(@"VEHICLEDATA_HANDSOFFSTEERING"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m
index 9078bbf16..d89f62f5b 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnEncodedSyncPDataSpec.m
@@ -16,7 +16,10 @@ QuickSpecBegin(SDLOnEncodedSyncPDataSpec)
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
testNotification.data = [@[@"0"] mutableCopy];
testNotification.URL = @"www.zombo.com";
@@ -28,12 +31,16 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLRPCParameterNameNotification:
- @{SDLRPCParameterNameParameters:
- @{SDLRPCParameterNameData:[@[@"0"] mutableCopy],
- SDLRPCParameterNameURLUppercase:@"www.zombo.com",
- SDLRPCParameterNameTimeoutCapitalized:@564},
- SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnEncodedSyncPData}} mutableCopy];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameNotification:
+ @{SDLRPCParameterNameParameters:
+ @{SDLRPCParameterNameData:@[@"0"],
+ SDLRPCParameterNameURLUppercase:@"www.zombo.com",
+ SDLRPCParameterNameTimeoutCapitalized:@564},
+ SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnEncodedSyncPData}};
+#pragma clang diagnostic pop
+
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] initWithDictionary:dict];
@@ -45,7 +52,10 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should return nil if not set", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnEncodedSyncPData* testNotification = [[SDLOnEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
expect(testNotification.data).to(beNil());
expect(testNotification.URL).to(beNil());
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m
index 4f4a574ee..da9c091df 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnLockScreenStatusSpec.m
@@ -22,15 +22,20 @@ describe(@"Getter/Setter Tests", ^ {
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnLockScreenStatus* testNotification = [[SDLOnLockScreenStatus alloc] init];
#pragma clang diagnostic pop
-
testNotification.driverDistractionStatus = @NO;
testNotification.userSelected = @3;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testNotification.lockScreenStatus = SDLLockScreenStatusRequired;
+#pragma clang diagnostic pop
testNotification.hmiLevel = SDLHMILevelNone;
expect(testNotification.driverDistractionStatus).to(equal(@NO));
expect(testNotification.userSelected).to(equal(@3));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testNotification.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
expect(testNotification.hmiLevel).to(equal(SDLHMILevelNone));
});
@@ -39,7 +44,10 @@ describe(@"Getter/Setter Tests", ^ {
@{SDLRPCParameterNameParameters:
@{@"driverDistractionStatus":@NO,
@"userSelected":@3,
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@"OnLockScreenStatus":SDLLockScreenStatusRequired,
+#pragma clang diagnostic pop
@"hmiLevel":SDLHMILevelNone},
SDLRPCParameterNameOperationName:@"OnLockScreenStatus"}} mutableCopy];
#pragma clang diagnostic push
@@ -49,7 +57,10 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.driverDistractionStatus).to(equal(@NO));
expect(testNotification.userSelected).to(equal(@3));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testNotification.lockScreenStatus).to(equal(SDLLockScreenStatusRequired));
+#pragma clang diagnostic pop
expect(testNotification.hmiLevel).to(equal(SDLHMILevelNone));
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m
index 197b77fbe..b2bda1f18 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSyncPDataSpec.m
@@ -16,7 +16,10 @@ QuickSpecBegin(SDLOnSyncPDataSpec)
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] init];
+#pragma clang diagnostic pop
testNotification.URL = @"https://www.youtube.com/watch?v=ygr5AHufBN4";
testNotification.Timeout = @8357;
@@ -26,11 +29,15 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLRPCParameterNameNotification:
- @{SDLRPCParameterNameParameters:
- @{SDLRPCParameterNameURLUppercase:@"https://www.youtube.com/watch?v=ygr5AHufBN4",
- SDLRPCParameterNameTimeoutCapitalized:@8357},
- SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnSyncPData}} mutableCopy];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameNotification:
+ @{SDLRPCParameterNameParameters:
+ @{SDLRPCParameterNameURLUppercase:@"https://www.youtube.com/watch?v=ygr5AHufBN4",
+ SDLRPCParameterNameTimeoutCapitalized:@8357},
+ SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnSyncPData}};
+#pragma clang diagnostic pop
+
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] initWithDictionary:dict];
@@ -41,7 +48,10 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should return nil if not set", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnSyncPData* testNotification = [[SDLOnSyncPData alloc] init];
+#pragma clang diagnostic pop
expect(testNotification.URL).to(beNil());
expect(testNotification.Timeout).to(beNil());
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
index 63b2bbd58..a4a21e7c4 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnSystemRequestSpec.m
@@ -2,18 +2,17 @@
// SDLOnSystemRequestSpec.m
// SmartDeviceLink
-
#import <Foundation/Foundation.h>
-
-#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import <Quick/Quick.h>
#import "SDLFileType.h"
-#import "SDLRPCParameterNames.h"
-#import "SDLRPCFunctionNames.h"
#import "SDLOnSystemRequest.h"
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCParameterNames.h"
#import "SDLRequestType.h"
+static NSString *const SDLTestURL = @"https://www.smartdevicelink.com";
QuickSpecBegin(SDLOnSystemRequestSpec)
@@ -23,7 +22,7 @@ describe(@"Getter/Setter Tests", ^ {
testNotification.requestType = SDLRequestTypeFileResume;
testNotification.requestSubType = @"subtype";
- testNotification.url = @"www.google.com";
+ testNotification.url = SDLTestURL;
testNotification.timeout = @52345;
testNotification.fileType = SDLFileTypePNG;
testNotification.offset = @2532678684;
@@ -31,7 +30,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.requestType).to(equal(SDLRequestTypeFileResume));
expect(testNotification.requestSubType).to(equal(@"subtype"));
- expect(testNotification.url).to(equal(@"www.google.com"));
+ expect(testNotification.url).to(equal(SDLTestURL));
expect(testNotification.timeout).to(equal(@52345));
expect(testNotification.fileType).to(equal(SDLFileTypePNG));
expect(testNotification.offset).to(equal(@2532678684));
@@ -43,7 +42,7 @@ describe(@"Getter/Setter Tests", ^ {
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameRequestType:SDLRequestTypeFileResume,
SDLRPCParameterNameRequestSubType: @"subtype",
- SDLRPCParameterNameURL:@"www.google.com",
+ SDLRPCParameterNameURL:SDLTestURL,
SDLRPCParameterNameTimeout:@52345,
SDLRPCParameterNameFileType:SDLFileTypePNG,
SDLRPCParameterNameOffset:@2532678684,
@@ -56,7 +55,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.requestType).to(equal(SDLRequestTypeFileResume));
expect(testNotification.requestSubType).to(equal(@"subtype"));
- expect(testNotification.url).to(equal([@"www.google.com" mutableCopy]));
+ expect(testNotification.url).to(equal(SDLTestURL));
expect(testNotification.timeout).to(equal(@52345));
expect(testNotification.fileType).to(equal(SDLFileTypePNG));
expect(testNotification.offset).to(equal(@2532678684));
@@ -74,6 +73,57 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.offset).to(beNil());
expect(testNotification.length).to(beNil());
});
+
+ it(@"Should set and get url correctly (zero length url)", ^{
+ SDLOnSystemRequest *testRequest = [[SDLOnSystemRequest alloc] init];
+ NSString *testURL = @"";
+ testRequest.url = testURL;
+ expect(testRequest.url).to(equal(testURL));
+
+ NSURL *nsurl = [NSURL URLWithString:testURL];
+ expect(nsurl).notTo(beNil());
+ expect(nsurl.absoluteString).to(equal(testURL));
+ });
+
+ it(@"Should set and get url correctly (1000 sym long url)", ^{
+ const int size = 1000;
+ SDLOnSystemRequest* testRequest = [[SDLOnSystemRequest alloc] init];
+ NSMutableString *testURL = [NSMutableString stringWithCapacity:1024];
+ [testURL setString:SDLTestURL];
+ while(size > testURL.length) {
+ [testURL appendString:@"/testcomponent"];
+ }
+ if (size < testURL.length) {
+ const NSRange range = NSMakeRange(size, testURL.length - size);
+ [testURL deleteCharactersInRange:range];
+ }
+ testRequest.url = testURL;
+ expect(testRequest.url).to(equal(testURL));
+
+ NSURL *nsurl = [NSURL URLWithString:testURL];
+ expect(nsurl).notTo(beNil());
+ expect(nsurl.absoluteString).to(equal(testURL));
+ });
+
+ it(@"Should set and get url correctly (extra long url)", ^{
+ const int size = 1024 * 1024;
+ SDLOnSystemRequest *testRequest = [[SDLOnSystemRequest alloc] init];
+ NSMutableString *testURL = [NSMutableString stringWithCapacity:size + 20];
+ [testURL setString:SDLTestURL];
+ while(size > testURL.length) {
+ [testURL appendString:@"/testcomponent"];
+ }
+ if (size < testURL.length) {
+ const NSRange range = NSMakeRange(size, testURL.length - size);
+ [testURL deleteCharactersInRange:range];
+ }
+ testRequest.url = testURL;
+ expect(testRequest.url).to(equal(testURL));
+
+ NSURL *nsurl = [NSURL URLWithString:testURL];
+ expect(nsurl).notTo(beNil());
+ expect(nsurl.absoluteString).to(equal(testURL));
+ });
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
index c2f9afbf2..fedeaae96 100644
--- a/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/NotificationSpecs/SDLOnVehicleDataSpec.m
@@ -14,42 +14,44 @@
QuickSpecBegin(SDLOnVehicleDataSpec)
+SDLGPSData* gps = [[SDLGPSData alloc] init];
+SDLTireStatus* tires = [[SDLTireStatus alloc] init];
+SDLBeltStatus* belt = [[SDLBeltStatus alloc] init];
+SDLBodyInformation* body = [[SDLBodyInformation alloc] init];
+SDLDeviceStatus* device = [[SDLDeviceStatus alloc] init];
+SDLHeadLampStatus* headLamp = [[SDLHeadLampStatus alloc] init];
+SDLECallInfo* eCall = [[SDLECallInfo alloc] init];
+SDLAirbagStatus* airbag = [[SDLAirbagStatus alloc] init];
+SDLEmergencyEvent* event = [[SDLEmergencyEvent alloc] init];
+SDLClusterModeStatus* clusterMode = [[SDLClusterModeStatus alloc] init];
+SDLMyKey* myKey = [[SDLMyKey alloc] init];
+SDLFuelRange* fuelRange = [[SDLFuelRange alloc] init];
+NSArray *fuelRangeArray = @[fuelRange, fuelRange];
+NSString *const cloudAppVehicleID = @"testCloudAppVehicleID";
+NSString *const vin = @"6574839201a";
+const float speed = 123.45;
+const NSUInteger rpm = 3500;
+const float instantFuelConsumption = 67.88;
+const float externalTemperature = 37.7;
+SDLTurnSignal turnSignal = SDLTurnSignalLeft;
+SDLPRNDL prndl = SDLPRNDLPark;
+const NSUInteger odometer = 98765;
+SDLVehicleDataEventStatus driverBraking = SDLVehicleDataEventStatusNoEvent;
+SDLWiperStatus wiperStatus = SDLWiperStatusManualLow;
+const float fuelLevel = 98.76;
+SDLComponentVolumeStatus fuelLevel_State = SDLComponentVolumeStatusNormal;
+const float engineTorque = 765.56;
+const float accPedalPosition = 34.56;
+const float steeringWheelAngle = 56.78;
+const float engineOilLife = 67.89;
+SDLElectronicParkBrakeStatus electronicParkBrakeStatus = SDLElectronicParkBrakeStatusClosed;
+const BOOL handsOffSteering = YES;
-describe(@"Getter/Setter Tests", ^ {
- __block SDLGPSData* gps = nil;
- __block SDLTireStatus* tires = nil;
- __block SDLBeltStatus* belt = nil;
- __block SDLBodyInformation* body = nil;
- __block SDLDeviceStatus* device = nil;
- __block SDLHeadLampStatus* headLamp = nil;
- __block SDLECallInfo* eCall = nil;
- __block SDLAirbagStatus* airbag = nil;
- __block SDLEmergencyEvent* event = nil;
- __block SDLClusterModeStatus* clusterMode = nil;
- __block SDLMyKey* myKey = nil;
- __block SDLFuelRange* fuelRange = nil;
- __block NSString* cloudAppVehicleID = nil;
-
- beforeEach(^{
- gps = [[SDLGPSData alloc] init];
- tires = [[SDLTireStatus alloc] init];
- belt = [[SDLBeltStatus alloc] init];
- body = [[SDLBodyInformation alloc] init];
- device = [[SDLDeviceStatus alloc] init];
- headLamp = [[SDLHeadLampStatus alloc] init];
- eCall = [[SDLECallInfo alloc] init];
- airbag = [[SDLAirbagStatus alloc] init];
- event = [[SDLEmergencyEvent alloc] init];
- clusterMode = [[SDLClusterModeStatus alloc] init];
- myKey = [[SDLMyKey alloc] init];
- fuelRange = [[SDLFuelRange alloc] init];
- cloudAppVehicleID = @"testCloudAppVehicleID";
- });
-
+describe(@"getter/setter tests", ^ {
it(@"should correctly initialize with init", ^ {
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] init];
- testNotification.accPedalPosition = @99.99999999;
+ testNotification.accPedalPosition = @(accPedalPosition);
testNotification.airbagStatus = airbag;
testNotification.beltStatus = belt;
testNotification.bodyInformation = body;
@@ -60,27 +62,31 @@ describe(@"Getter/Setter Tests", ^ {
testNotification.eCallInfo = eCall;
testNotification.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive;
testNotification.emergencyEvent = event;
- testNotification.engineOilLife = @34.45;
- testNotification.engineTorque = @-200.124;
- testNotification.externalTemperature = @-10;
- testNotification.fuelLevel = @10.3;
- testNotification.fuelLevel_State = SDLComponentVolumeStatusAlert;
- testNotification.fuelRange = @[fuelRange, fuelRange];
+ testNotification.engineOilLife = @(engineOilLife);
+ testNotification.engineTorque = @(engineTorque);
+ testNotification.externalTemperature = @(externalTemperature);
testNotification.gps = gps;
+ testNotification.handsOffSteering = @YES;
testNotification.headLampStatus = headLamp;
- testNotification.instantFuelConsumption = @4000.63;
+ testNotification.instantFuelConsumption = @(instantFuelConsumption);
testNotification.myKey = myKey;
- testNotification.odometer = @100050;
- testNotification.prndl = SDLPRNDLDrive;
- testNotification.rpm = @4242;
- testNotification.speed = @70.1;
- testNotification.steeringWheelAngle = @0.000000001;
+ testNotification.odometer = @(odometer);
+ testNotification.prndl = prndl;
+ testNotification.rpm = @(rpm);
+ testNotification.speed = @(speed);
+ testNotification.steeringWheelAngle = @(steeringWheelAngle);
testNotification.tirePressure = tires;
- testNotification.turnSignal = SDLTurnSignalRight;
- testNotification.vin = @"222222222722";
- testNotification.wiperStatus = SDLWiperStatusStalled;
+ testNotification.turnSignal = turnSignal;
+ testNotification.vin = vin;
+ testNotification.wiperStatus = wiperStatus;
+ testNotification.fuelRange = fuelRangeArray;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testNotification.fuelLevel = @(fuelLevel);
+ testNotification.fuelLevel_State = fuelLevel_State;
+#pragma clang diagnostic pop
- expect(testNotification.accPedalPosition).to(equal(@99.99999999));
+ expect(testNotification.accPedalPosition).to(equal(@(accPedalPosition)));
expect(testNotification.airbagStatus).to(equal(airbag));
expect(testNotification.beltStatus).to(equal(belt));
expect(testNotification.bodyInformation).to(equal(body));
@@ -91,99 +97,109 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.eCallInfo).to(equal(eCall));
expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
expect(testNotification.emergencyEvent).to(equal(event));
- expect(testNotification.engineOilLife).to(equal(@34.45));
- expect(testNotification.engineTorque).to(equal(@-200.124));
- expect(testNotification.externalTemperature).to(equal(@-10));
- expect(testNotification.fuelLevel).to(equal(@10.3));
- expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
- expect(testNotification.fuelRange).to(equal(@[fuelRange, fuelRange]));
+ expect(testNotification.engineOilLife).to(equal(@(engineOilLife)));
+ expect(testNotification.engineTorque).to(equal(@(engineTorque)));
+ expect(testNotification.externalTemperature).to(equal(@(externalTemperature)));
expect(testNotification.gps).to(equal(gps));
expect(testNotification.headLampStatus).to(equal(headLamp));
- expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
+ expect(testNotification.instantFuelConsumption).to(equal(@(instantFuelConsumption)));
expect(testNotification.myKey).to(equal(myKey));
- expect(testNotification.odometer).to(equal(@100050));
- expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
- expect(testNotification.rpm).to(equal(@4242));
- expect(testNotification.speed).to(equal(@70.1));
- expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
+ expect(testNotification.odometer).to(equal(@(odometer)));
+ expect(testNotification.prndl).to(equal(prndl));
+ expect(testNotification.rpm).to(equal(@(rpm)));
+ expect(testNotification.speed).to(equal(@(speed)));
+ expect(testNotification.steeringWheelAngle).to(equal(@(steeringWheelAngle)));
expect(testNotification.tirePressure).to(equal(tires));
- expect(testNotification.turnSignal).to(equal(SDLTurnSignalRight));
- expect(testNotification.vin).to(equal(@"222222222722"));
- expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
+ expect(testNotification.turnSignal).to(equal(turnSignal));
+ expect(testNotification.vin).to(equal(vin));
+ expect(testNotification.wiperStatus).to(equal(wiperStatus));
+ expect(testNotification.handsOffSteering).to(equal(@(handsOffSteering)));
+ expect(testNotification.fuelRange).to(equal(fuelRangeArray));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testNotification.fuelLevel).to(equal(@(fuelLevel)));
+ expect(testNotification.fuelLevel_State).to(equal(fuelLevel_State));
+#pragma clang diagnostic pop
});
- it(@"Should get correctly when initialized", ^ {
+ it(@"should get correctly when initialized", ^ {
NSDictionary* dict = @{SDLRPCParameterNameNotification:
@{SDLRPCParameterNameParameters:
- @{SDLRPCParameterNameAccelerationPedalPosition:@99.99999999,
+ @{SDLRPCParameterNameAccelerationPedalPosition:@(accPedalPosition),
SDLRPCParameterNameAirbagStatus:airbag,
SDLRPCParameterNameBeltStatus:belt,
SDLRPCParameterNameBodyInformation:body,
SDLRPCParameterNameCloudAppVehicleID:cloudAppVehicleID,
SDLRPCParameterNameClusterModeStatus:clusterMode,
SDLRPCParameterNameDeviceStatus:device,
- SDLRPCParameterNameDriverBraking:SDLVehicleDataEventStatusYes,
+ SDLRPCParameterNameDriverBraking:driverBraking,
SDLRPCParameterNameECallInfo:eCall,
- SDLRPCParameterNameElectronicParkBrakeStatus:SDLElectronicParkBrakeStatusDriveActive,
+ SDLRPCParameterNameElectronicParkBrakeStatus:electronicParkBrakeStatus,
SDLRPCParameterNameEmergencyEvent:event,
- SDLRPCParameterNameEngineOilLife:@45.1,
- SDLRPCParameterNameEngineTorque:@-200.124,
- SDLRPCParameterNameExternalTemperature:@-10,
- SDLRPCParameterNameFuelLevel:@10.3,
- SDLRPCParameterNameFuelLevelState:SDLComponentVolumeStatusAlert,
- SDLRPCParameterNameFuelRange:@[fuelRange],
+ SDLRPCParameterNameEngineOilLife:@(engineOilLife),
+ SDLRPCParameterNameEngineTorque:@(engineTorque),
+ SDLRPCParameterNameExternalTemperature:@(externalTemperature),
+ SDLRPCParameterNameFuelLevel:@(fuelLevel),
+ SDLRPCParameterNameFuelLevelState:fuelLevel_State,
+ SDLRPCParameterNameFuelRange:fuelRangeArray,
SDLRPCParameterNameGPS:gps,
SDLRPCParameterNameHeadLampStatus:headLamp,
- SDLRPCParameterNameInstantFuelConsumption:@4000.63,
+ SDLRPCParameterNameInstantFuelConsumption:@(instantFuelConsumption),
SDLRPCParameterNameMyKey:myKey,
- SDLRPCParameterNameOdometer:@100050,
- SDLRPCParameterNamePRNDL:SDLPRNDLDrive,
- SDLRPCParameterNameRPM:@4242,
- SDLRPCParameterNameSpeed:@70.1,
- SDLRPCParameterNameSteeringWheelAngle:@0.000000001,
+ SDLRPCParameterNameOdometer:@(odometer),
+ SDLRPCParameterNamePRNDL:prndl,
+ SDLRPCParameterNameRPM:@(rpm),
+ SDLRPCParameterNameSpeed:@(speed),
+ SDLRPCParameterNameSteeringWheelAngle:@(steeringWheelAngle),
SDLRPCParameterNameTirePressure:tires,
- SDLRPCParameterNameTurnSignal:SDLTurnSignalOff,
- SDLRPCParameterNameVIN:@"222222222722",
- SDLRPCParameterNameWiperStatus:SDLWiperStatusStalled},
+ SDLRPCParameterNameTurnSignal:turnSignal,
+ SDLRPCParameterNameVIN:vin,
+ SDLRPCParameterNameWiperStatus:wiperStatus,
+ SDLRPCParameterNameHandsOffSteering:@(handsOffSteering)
+ },
SDLRPCParameterNameOperationName:SDLRPCFunctionNameOnVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] initWithDictionary:dict];
#pragma clang diagnostic pop
- expect(testNotification.accPedalPosition).to(equal(@99.99999999));
+ expect(testNotification.accPedalPosition).to(equal(@(accPedalPosition)));
expect(testNotification.airbagStatus).to(equal(airbag));
expect(testNotification.beltStatus).to(equal(belt));
expect(testNotification.bodyInformation).to(equal(body));
expect(testNotification.cloudAppVehicleID).to(equal(cloudAppVehicleID));
expect(testNotification.clusterModeStatus).to(equal(clusterMode));
expect(testNotification.deviceStatus).to(equal(device));
- expect(testNotification.driverBraking).to(equal(SDLVehicleDataEventStatusYes));
+ expect(testNotification.driverBraking).to(equal(driverBraking));
expect(testNotification.eCallInfo).to(equal(eCall));
- expect(testNotification.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
+ expect(testNotification.electronicParkBrakeStatus).to(equal(electronicParkBrakeStatus));
expect(testNotification.emergencyEvent).to(equal(event));
- expect(testNotification.engineOilLife).to(equal(@45.1));
- expect(testNotification.engineTorque).to(equal(@-200.124));
- expect(testNotification.externalTemperature).to(equal(@-10));
- expect(testNotification.fuelLevel).to(equal(@10.3));
- expect(testNotification.fuelLevel_State).to(equal(SDLComponentVolumeStatusAlert));
- expect(testNotification.fuelRange).to(equal(@[fuelRange]));
+ expect(testNotification.engineOilLife).to(equal(@(engineOilLife)));
+ expect(testNotification.engineTorque).to(equal(@(engineTorque)));
+ expect(testNotification.externalTemperature).to(equal(@(externalTemperature)));
expect(testNotification.gps).to(equal(gps));
+ expect(testNotification.handsOffSteering).to(equal(@(handsOffSteering)));
expect(testNotification.headLampStatus).to(equal(headLamp));
- expect(testNotification.instantFuelConsumption).to(equal(@4000.63));
+ expect(testNotification.instantFuelConsumption).to(equal(@(instantFuelConsumption)));
expect(testNotification.myKey).to(equal(myKey));
- expect(testNotification.odometer).to(equal(@100050));
- expect(testNotification.prndl).to(equal(SDLPRNDLDrive));
- expect(testNotification.rpm).to(equal(@4242));
- expect(testNotification.speed).to(equal(@70.1));
- expect(testNotification.steeringWheelAngle).to(equal(@0.000000001));
+ expect(testNotification.odometer).to(equal(@(odometer)));
+ expect(testNotification.prndl).to(equal(prndl));
+ expect(testNotification.rpm).to(equal(@(rpm)));
+ expect(testNotification.speed).to(equal(@(speed)));
+ expect(testNotification.steeringWheelAngle).to(equal(@(steeringWheelAngle)));
expect(testNotification.tirePressure).to(equal(tires));
- expect(testNotification.turnSignal).to(equal(SDLTurnSignalOff));
- expect(testNotification.vin).to(equal(@"222222222722"));
- expect(testNotification.wiperStatus).to(equal(SDLWiperStatusStalled));
+ expect(testNotification.turnSignal).to(equal(turnSignal));
+ expect(testNotification.vin).to(equal(vin));
+ expect(testNotification.wiperStatus).to(equal(wiperStatus));
+ expect(testNotification.fuelRange).to(equal(fuelRangeArray));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testNotification.fuelLevel).to(equal(@(fuelLevel)));
+ expect(testNotification.fuelLevel_State).to(equal(fuelLevel_State));
+#pragma clang diagnostic pop
});
- it(@"Should return nil if not set", ^ {
+ it(@"should return nil if not set", ^ {
SDLOnVehicleData* testNotification = [[SDLOnVehicleData alloc] init];
expect(testNotification.accPedalPosition).to(beNil());
@@ -200,10 +216,8 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.engineOilLife).to(beNil());
expect(testNotification.engineTorque).to(beNil());
expect(testNotification.externalTemperature).to(beNil());
- expect(testNotification.fuelLevel).to(beNil());
- expect(testNotification.fuelLevel_State).to(beNil());
- expect(testNotification.fuelRange).to(beNil());
expect(testNotification.gps).to(beNil());
+ expect(testNotification.handsOffSteering).to(beNil());
expect(testNotification.headLampStatus).to(beNil());
expect(testNotification.instantFuelConsumption).to(beNil());
expect(testNotification.myKey).to(beNil());
@@ -216,15 +230,59 @@ describe(@"Getter/Setter Tests", ^ {
expect(testNotification.turnSignal).to(beNil());
expect(testNotification.vin).to(beNil());
expect(testNotification.wiperStatus).to(beNil());
+ expect(testNotification.fuelRange).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testNotification.fuelLevel).to(beNil());
+ expect(testNotification.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
});
- it(@"Should set and get generic Network Signal Data", ^{
- SDLOnVehicleData *testRequest = [[SDLOnVehicleData alloc] init];
-
- [testRequest setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:@"oemVehicleData"];
+ context(@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering:", ^{
+ SDLOnVehicleData *onVehicleData = [[SDLOnVehicleData alloc] initWithGps:gps speed:speed rpm:@(rpm) instantFuelConsumption:instantFuelConsumption fuelRange:fuelRangeArray externalTemperature:externalTemperature turnSignal:turnSignal vin:vin prndl:prndl tirePressure:tires odometer:@(odometer) beltStatus:belt bodyInformation:body deviceStatus:device driverBraking:driverBraking wiperStatus:wiperStatus headLampStatus:headLamp engineTorque:engineTorque accPedalPosition:accPedalPosition steeringWheelAngle:steeringWheelAngle engineOilLife:engineOilLife electronicParkBrakeStatus:electronicParkBrakeStatus cloudAppVehicleID:cloudAppVehicleID eCallInfo:eCall airbagStatus:airbag emergencyEvent:event clusterModeStatus:clusterMode myKey:myKey handsOffSteering:@(handsOffSteering)];
+ it(@"should initialize an object correctly", ^{
+ expect(onVehicleData.accPedalPosition).to(equal(@(accPedalPosition)));
+ expect(onVehicleData.airbagStatus).to(equal(airbag));
+ expect(onVehicleData.beltStatus).to(equal(belt));
+ expect(onVehicleData.bodyInformation).to(equal(body));
+ expect(onVehicleData.cloudAppVehicleID).to(equal(cloudAppVehicleID));
+ expect(onVehicleData.clusterModeStatus).to(equal(clusterMode));
+ expect(onVehicleData.deviceStatus).to(equal(device));
+ expect(onVehicleData.driverBraking).to(equal(driverBraking));
+ expect(onVehicleData.eCallInfo).to(equal(eCall));
+ expect(onVehicleData.electronicParkBrakeStatus).to(equal(electronicParkBrakeStatus));
+ expect(onVehicleData.emergencyEvent).to(equal(event));
+ expect(onVehicleData.engineOilLife).to(equal(@(engineOilLife)));
+ expect(onVehicleData.engineTorque).to(equal(@(engineTorque)));
+ expect(onVehicleData.externalTemperature).to(equal(@(externalTemperature)));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(onVehicleData.fuelLevel).to(beNil());
+ expect(onVehicleData.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(onVehicleData.fuelRange).to(equal(fuelRangeArray));
+ expect(onVehicleData.gps).to(equal(gps));
+ expect(onVehicleData.handsOffSteering).to(equal(@(handsOffSteering)));
+ expect(onVehicleData.headLampStatus).to(equal(headLamp));
+ expect(onVehicleData.instantFuelConsumption).to(equal(@(instantFuelConsumption)));
+ expect(onVehicleData.myKey).to(equal(myKey));
+ expect(onVehicleData.odometer).to(equal(@(odometer)));
+ expect(onVehicleData.prndl).to(equal(prndl));
+ expect(onVehicleData.rpm).to(equal(@(rpm)));
+ expect(onVehicleData.speed).to(equal(@(speed)));
+ expect(onVehicleData.steeringWheelAngle).to(equal((steeringWheelAngle)));
+ expect(onVehicleData.tirePressure).to(equal(tires));
+ expect(onVehicleData.turnSignal).to(equal(turnSignal));
+ expect(onVehicleData.vin).to(equal(vin));
+ expect(onVehicleData.wiperStatus).to(equal(wiperStatus));
+ });
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(equal(@"oemVehicleData"));
+ it(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLOnVehicleData *testRequest = [[SDLOnVehicleData alloc] init];
+ [testRequest setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:@"oemVehicleData"];
+ expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(equal(@"oemVehicleData"));
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
index 5c5e98547..ca0ab6f28 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLAddSubMenuSpec.m
@@ -21,18 +21,33 @@ describe(@"Getter/Setter Tests", ^ {
__block NSString *menuName = @"Welcome to the menu";
__block SDLImage *image = nil;
__block SDLMenuLayout testLayout = SDLMenuLayoutList;
+ __block NSNumber *parentID = @44;
beforeEach(^{
image = [[SDLImage alloc] initWithName:@"Test" isTemplate:false];
});
it(@"should correctly initialize with initWithId:menuName:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithId:menuId menuName:menuName];
+ #pragma clang diagnostic pop
expect(testRequest.menuID).to(equal(@(menuId)));
expect(testRequest.position).to(beNil());
expect(testRequest.menuName).to(equal(menuName));
expect(testRequest.menuIcon).to(beNil());
+ expect(testRequest.parentID).to(beNil());
+ });
+
+ it(@"should correctly initialize with initWithMenuID:menuName:", ^{
+ SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithMenuID:menuId menuName:menuName];
+
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(beNil());
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(beNil());
+ expect(testRequest.parentID).to(beNil());
});
it(@"should correctly initialize with initWithId:menuName:position:", ^{
@@ -44,6 +59,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.position).to(equal(@(position)));
expect(testRequest.menuName).to(equal(menuName));
expect(testRequest.menuIcon).to(beNil());
+ expect(testRequest.parentID).to(beNil());
#pragma clang diagnostic pop
});
@@ -56,17 +72,33 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.position).to(equal(@(position)));
expect(testRequest.menuName).to(equal(menuName));
expect(testRequest.menuIcon).to(equal(image));
+ expect(testRequest.parentID).to(beNil());
#pragma clang diagnostic pop
});
it(@"should correctly initialize with initWithId:menuName:menuLayout:menuIcon:position:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithId:menuId menuName:menuName menuLayout:testLayout menuIcon:image position:position];
+ #pragma clang diagnostic pop
expect(testRequest.menuID).to(equal(@(menuId)));
expect(testRequest.position).to(equal(@(position)));
expect(testRequest.menuName).to(equal(menuName));
expect(testRequest.menuIcon).to(equal(image));
expect(testRequest.menuLayout).to(equal(testLayout));
+ expect(testRequest.parentID).to(beNil());
+ });
+
+ it(@"should correctly initialize with initWithMenuID:menuName:menuLayout:menuIcon:position:parentID:", ^{
+ SDLAddSubMenu *testRequest = [[SDLAddSubMenu alloc] initWithMenuID:menuId menuName:menuName position:@(position) menuIcon:image menuLayout:testLayout parentID:parentID];
+
+ expect(testRequest.menuID).to(equal(@(menuId)));
+ expect(testRequest.position).to(equal(@(position)));
+ expect(testRequest.menuName).to(equal(menuName));
+ expect(testRequest.menuIcon).to(equal(image));
+ expect(testRequest.menuLayout).to(equal(testLayout));
+ expect(testRequest.parentID).to(equal(parentID));
});
it(@"Should set and get correctly", ^ {
@@ -88,13 +120,14 @@ describe(@"Getter/Setter Tests", ^ {
it(@"Should get correctly when initialized", ^ {
NSMutableDictionary<NSString *, id> *dict = [@{SDLRPCParameterNameRequest:
@{SDLRPCParameterNameParameters:
- @{SDLRPCParameterNameMenuId:@4345645,
- SDLRPCParameterNamePosition:@27,
- SDLRPCParameterNameMenuName:@"Welcome to the menu",
+ @{SDLRPCParameterNameMenuId: @(menuId),
+ SDLRPCParameterNamePosition: @(position),
+ SDLRPCParameterNameMenuName: menuName,
SDLRPCParameterNameMenuIcon: @{
- SDLRPCParameterNameValue: @"Test"
- },
- SDLRPCParameterNameMenuLayout: testLayout
+ SDLRPCParameterNameValue: image.value
+ },
+ SDLRPCParameterNameMenuLayout: testLayout,
+ SDLRPCParameterNameParentID: parentID
},
SDLRPCParameterNameOperationName:SDLRPCFunctionNameAddSubMenu}} mutableCopy];
#pragma clang diagnostic push
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLButtonPressSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLButtonPressSpec.m
index 23f2b4916..d9a49d20c 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLButtonPressSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLButtonPressSpec.m
@@ -53,12 +53,32 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.buttonPressMode).to(equal(SDLButtonPressModeShort));
});
- it(@"Should get correctly using initializer", ^ {
+ it(@"Should get correctly when initialized with initWithButtonName:moduleType:", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLButtonPress *testRequest = [[SDLButtonPress alloc] initWithButtonName:SDLButtonNameAC moduleType:SDLModuleTypeClimate];
+#pragma clang diagnostic pop
+ expect(testRequest.buttonName).to(equal(SDLButtonNameAC));
+ expect(testRequest.moduleType).to(equal(SDLModuleTypeClimate));
+ });
+
+ it(@"Should get correctly when initialized with initWithButtonName:moduleType:moduleId:", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLButtonPress *testRequest = [[SDLButtonPress alloc] initWithButtonName:SDLButtonNameAC moduleType:SDLModuleTypeClimate moduleId:@"123"];
+#pragma clang diagnostic pop
+ expect(testRequest.buttonName).to(equal(SDLButtonNameAC));
+ expect(testRequest.moduleType).to(equal(SDLModuleTypeClimate));
+ expect(testRequest.moduleId).to(equal(@"123"));
+ });
+
+ it(@"Should get correctly when initialized with initWithButtonName:moduleType:moduleId:buttonPressMode:", ^ {
+ SDLButtonPress *testRequest = [[SDLButtonPress alloc] initWithButtonName:SDLButtonNameAC moduleType:SDLModuleTypeClimate moduleId:@"123" buttonPressMode:SDLButtonPressModeShort];
expect(testRequest.buttonName).to(equal(SDLButtonNameAC));
expect(testRequest.moduleType).to(equal(SDLModuleTypeClimate));
expect(testRequest.moduleId).to(equal(@"123"));
+ expect(testRequest.buttonPressMode).to(equal(SDLButtonPressModeShort));
});
it(@"Should return nil if not set", ^ {
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m
index 95d110a1f..5525258b3 100755
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLEncodedSyncPDataSpec.m
@@ -16,7 +16,10 @@ QuickSpecBegin(SDLEncodedSyncPDataSpec)
describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
testRequest.data = [@[@"2", @"2", @"2"] mutableCopy];
@@ -24,10 +27,14 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLRPCParameterNameRequest:
- @{SDLRPCParameterNameParameters:
- @{SDLRPCParameterNameData:[@[@"2", @"2", @"2"] mutableCopy]},
- SDLRPCParameterNameOperationName:SDLRPCFunctionNameEncodedSyncPData}} mutableCopy];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameRequest:
+ @{SDLRPCParameterNameParameters:
+ @{SDLRPCParameterNameData:@[@"2", @"2", @"2"]},
+ SDLRPCParameterNameOperationName:SDLRPCFunctionNameEncodedSyncPData}};
+#pragma clang diagnostic pop
+
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] initWithDictionary:dict];
@@ -37,7 +44,10 @@ describe(@"Getter/Setter Tests", ^ {
});
it(@"Should return nil if not set", ^ {
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLEncodedSyncPData* testRequest = [[SDLEncodedSyncPData alloc] init];
+#pragma clang diagnostic pop
expect(testRequest.data).to(beNil());
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
index bcf32d76c..b2b2bf913 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLGetVehicleDataSpec.m
@@ -14,72 +14,80 @@
QuickSpecBegin(SDLGetVehicleDataSpec)
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^{
+ it(@"should set and get correctly", ^{
SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] init];
testRequest.accPedalPosition = @YES;
- testRequest.airbagStatus = @NO;
- testRequest.beltStatus = @NO;
+ testRequest.airbagStatus = @YES;
+ testRequest.beltStatus = @YES;
testRequest.bodyInformation = @YES;
testRequest.cloudAppVehicleID = @YES;
- testRequest.clusterModeStatus = @NO;
- testRequest.deviceStatus = @NO;
+ testRequest.clusterModeStatus = @YES;
+ testRequest.deviceStatus = @YES;
testRequest.driverBraking = @YES;
testRequest.eCallInfo = @YES;
testRequest.electronicParkBrakeStatus = @YES;
testRequest.emergencyEvent = @YES;
testRequest.engineOilLife = @YES;
- testRequest.engineTorque = @NO;
+ testRequest.engineTorque = @YES;
testRequest.externalTemperature = @YES;
- testRequest.fuelLevel = @NO;
- testRequest.fuelLevel_State = @YES;
- testRequest.fuelRange = @YES;
- testRequest.gps = @NO;
+ testRequest.gps = @YES;
testRequest.headLampStatus = @YES;
- testRequest.instantFuelConsumption = @NO;
+ testRequest.instantFuelConsumption = @YES;
testRequest.myKey = @YES;
testRequest.odometer = @YES;
testRequest.prndl = @YES;
testRequest.rpm = @YES;
- testRequest.speed = @NO;
- testRequest.steeringWheelAngle = @NO;
- testRequest.tirePressure = @NO;
+ testRequest.speed = @YES;
+ testRequest.steeringWheelAngle = @YES;
+ testRequest.tirePressure = @YES;
testRequest.turnSignal = @YES;
- testRequest.wiperStatus = @NO;
+ testRequest.wiperStatus = @YES;
+ testRequest.handsOffSteering = @YES;
+ testRequest.fuelRange = @YES;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testRequest.fuelLevel = @YES;
+ testRequest.fuelLevel_State = @YES;
+#pragma clang diagnostic pop
expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@NO));
- expect(testRequest.beltStatus).to(equal(@NO));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
expect(testRequest.bodyInformation).to(equal(@YES));
expect(testRequest.cloudAppVehicleID).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@NO));
- expect(testRequest.deviceStatus).to(equal(@NO));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
expect(testRequest.driverBraking).to(equal(@YES));
expect(testRequest.eCallInfo).to(equal(@YES));
expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
expect(testRequest.emergencyEvent).to(equal(@YES));
expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@NO));
+ expect(testRequest.engineTorque).to(equal(@YES));
expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@NO));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@NO));
+#pragma clang diagnostic pop
+ expect(testRequest.gps).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@NO));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
expect(testRequest.odometer).to(equal(@YES));
expect(testRequest.prndl).to(equal(@YES));
expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@NO));
- expect(testRequest.steeringWheelAngle).to(equal(@NO));
- expect(testRequest.tirePressure).to(equal(@NO));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
+ expect(testRequest.fuelRange).to(equal(@YES));
});
- it(@"Should get correctly when initialized", ^ {
+ it(@"should get correctly when initialized", ^ {
NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameRequest:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameAccelerationPedalPosition:@YES,
@@ -92,10 +100,10 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNameDriverBraking:@YES,
SDLRPCParameterNameECallInfo:@YES,
SDLRPCParameterNameElectronicParkBrakeStatus:@YES,
- SDLRPCParameterNameEmergencyEvent:@NO,
+ SDLRPCParameterNameEmergencyEvent:@YES,
SDLRPCParameterNameEngineOilLife:@YES,
SDLRPCParameterNameEngineTorque:@YES,
- SDLRPCParameterNameExternalTemperature:@NO,
+ SDLRPCParameterNameExternalTemperature:@YES,
SDLRPCParameterNameFuelLevel:@YES,
SDLRPCParameterNameFuelLevelState:@YES,
SDLRPCParameterNameFuelRange:@YES,
@@ -107,10 +115,12 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNamePRNDL:@YES,
SDLRPCParameterNameRPM:@YES,
SDLRPCParameterNameSpeed:@YES,
- SDLRPCParameterNameSteeringWheelAngle:@NO,
+ SDLRPCParameterNameSteeringWheelAngle:@YES,
SDLRPCParameterNameTirePressure:@YES,
- SDLRPCParameterNameTurnSignal:@NO,
- SDLRPCParameterNameWiperStatus:@YES},
+ SDLRPCParameterNameTurnSignal:@YES,
+ SDLRPCParameterNameWiperStatus:@YES,
+ SDLRPCParameterNameHandsOffSteering:@YES
+ },
SDLRPCParameterNameOperationName:SDLRPCFunctionNameGetVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -127,14 +137,18 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.driverBraking).to(equal(@YES));
expect(testRequest.eCallInfo).to(equal(@YES));
expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@NO));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
expect(testRequest.engineOilLife).to(equal(@YES));
expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@NO));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
@@ -142,9 +156,9 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.prndl).to(equal(@YES));
expect(testRequest.rpm).to(equal(@YES));
expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@NO));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.turnSignal).to(equal(@YES));
expect(testRequest.wiperStatus).to(equal(@YES));
});
});
@@ -153,155 +167,221 @@ describe(@"initializers", ^{
context(@"init", ^{
SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] init];
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
- expect(testRequest.beltStatus).to(beNil());
- expect(testRequest.bodyInformation).to(beNil());
- expect(testRequest.cloudAppVehicleID).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
- expect(testRequest.deviceStatus).to(beNil());
- expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.electronicParkBrakeStatus).to(beNil());
- expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.engineOilLife).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.fuelRange).to(beNil());
- expect(testRequest.gps).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.myKey).to(beNil());
- expect(testRequest.odometer).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.turnSignal).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
+ it(@"expect all properties to be nil", ^{
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.beltStatus).to(beNil());
+ expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.deviceStatus).to(beNil());
+ expect(testRequest.driverBraking).to(beNil());
+ expect(testRequest.eCallInfo).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
+ expect(testRequest.emergencyEvent).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
+ expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
});
-
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:NO beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES vin:YES wiperStatus:YES];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES vin:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@NO));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@NO));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@NO));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@NO));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
-
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES vin:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic push
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
+
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES cloudAppVehicleID:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES vin:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
- context(@"Should set and get Generic Network Signal Data", ^{
- SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] init];
+ context(@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering:", ^{
+ SDLGetVehicleData *testRequest = [[SDLGetVehicleData alloc] initWithGps:@YES speed:@YES rpm:@YES instantFuelConsumption:@YES fuelRange:@YES externalTemperature:@YES turnSignal:@YES vin:@YES prndl:@YES tirePressure:@YES odometer:@YES beltStatus:@YES bodyInformation:@YES deviceStatus:@YES driverBraking:@YES wiperStatus:@YES headLampStatus:@YES engineTorque:@YES accPedalPosition:@YES steeringWheelAngle:@YES engineOilLife:@YES electronicParkBrakeStatus:@YES cloudAppVehicleID:@YES eCallInfo:@YES airbagStatus:@YES emergencyEvent:@YES clusterModeStatus:@YES myKey:@YES handsOffSteering:@YES];
+ it(@"expect all properties to be set to YES", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+ });
+
+ context(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLGetVehicleData* testRequest = [[SDLGetVehicleData alloc] init];
[testRequest setOEMCustomVehicleData:@"OEMCustomVehicleData" withVehicleDataState:NO];
[testRequest setOEMCustomVehicleData:@"OEMCustomVehicleData1" withVehicleDataState:YES];
- expect([testRequest getOEMCustomVehicleData:@"OEMCustomVehicleData"]).to(beFalse());
- expect([testRequest getOEMCustomVehicleData:@"OEMCustomVehicleData1"]).to(beTrue());
-
+ it(@"expect all properties to be set properly", ^{
+ expect([testRequest getOEMCustomVehicleData:@"OEMCustomVehicleData"]).to(equal(@NO));
+ expect([testRequest getOEMCustomVehicleData:@"OEMCustomVehicleData1"]).to(equal(@YES));
+ });
});
-
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
index 4d5a6948d..890cb9ff0 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLPutFileSpec.m
@@ -26,7 +26,7 @@ describe(@"Getter/Setter Tests", ^ {
it(@"Should set and get correctly", ^ {
SDLPutFile* testRequest = [[SDLPutFile alloc] init];
- testRequest.syncFileName = @"fileName";
+ testRequest.sdlFileName = @"fileName";
testRequest.fileType = SDLFileTypeJPEG;
testRequest.persistentFile = @YES;
testRequest.systemFile = @NO;
@@ -34,13 +34,18 @@ describe(@"Getter/Setter Tests", ^ {
testRequest.length = @123456789;
testRequest.crc = @0xffffffff;
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeJPEG));
expect(testRequest.persistentFile).to(equal(@YES));
expect(testRequest.systemFile).to(equal(@NO));
expect(testRequest.offset).to(equal(@987654321));
expect(testRequest.length).to(equal(@123456789));
expect(testRequest.crc).to(equal(0xffffffff));
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
it(@"Should get and set correctly when initialized", ^ {
@@ -59,13 +64,18 @@ describe(@"Getter/Setter Tests", ^ {
SDLPutFile* testRequest = [[SDLPutFile alloc] initWithDictionary:dict];
#pragma clang diagnostic pop
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeJPEG));
expect(testRequest.persistentFile).to(equal(@YES));
expect(testRequest.systemFile).to(equal(@NO));
expect(testRequest.offset).to(equal(@987654321));
expect(testRequest.length).to(equal(@123456789));
expect(testRequest.crc).to(equal(@0xffffffff));
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
});
@@ -96,7 +106,7 @@ describe(@"initializers", ^{
context(@"init", ^{
SDLPutFile *testRequest = [[SDLPutFile alloc] init];
- expect(testRequest.syncFileName).to(beNil());
+ expect(testRequest.sdlFileName).to(beNil());
expect(testRequest.fileType).to(beNil());
expect(testRequest.persistentFile).to(beNil());
expect(testRequest.systemFile).to(beNil());
@@ -104,12 +114,17 @@ describe(@"initializers", ^{
expect(testRequest.length).to(beNil());
expect(testRequest.crc).to(beNil());
expect(testRequest.bulkData).to(beNil());
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(beNil());
+#pragma clang diagnostic pop
});
context(@"initWithFileName:fileType:", ^{
SDLPutFile *testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeWAV];
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeWAV));
expect(testRequest.persistentFile).to(beNil());
expect(testRequest.systemFile).to(beNil());
@@ -117,12 +132,17 @@ describe(@"initializers", ^{
expect(testRequest.length).to(beNil());
expect(testRequest.crc).to(beNil());
expect(testRequest.bulkData).to(beNil());
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
context(@"initWithFileName:fileType:persistentFile:", ^{
SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypePNG persistentFile:false];
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypePNG));
expect(testRequest.persistentFile).to(beFalse());
expect(testRequest.systemFile).to(beNil());
@@ -130,14 +150,20 @@ describe(@"initializers", ^{
expect(testRequest.length).to(beNil());
expect(testRequest.crc).to(beNil());
expect(testRequest.bulkData).to(beNil());
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLPutFile *testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeMP3 persistentFile:true systemFile:true offset:45 length:34];
+#pragma clang diagnostic pop
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeMP3));
expect(testRequest.persistentFile).to(beTrue());
expect(testRequest.systemFile).to(beTrue());
@@ -145,13 +171,17 @@ describe(@"initializers", ^{
expect(testRequest.length).to(equal(34));
expect(testRequest.crc).to(beNil());
expect(testRequest.bulkData).to(beNil());
- #pragma clang diagnostic pop
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:", ^{
SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeMP3 persistentFile:true systemFile:true offset:45 length:34 crc:0xffffffff];
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeMP3));
expect(testRequest.persistentFile).to(beTrue());
expect(testRequest.systemFile).to(beTrue());
@@ -159,6 +189,11 @@ describe(@"initializers", ^{
expect(testRequest.length).to(equal(@34));
expect(testRequest.crc).to(equal(0xffffffff));
expect(testRequest.bulkData).to(beNil());
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
context(@"initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:", ^{
@@ -167,7 +202,7 @@ describe(@"initializers", ^{
SDLPutFile* testRequest = [[SDLPutFile alloc] initWithFileName:@"fileName" fileType:SDLFileTypeAAC persistentFile:true systemFile:true offset:5 length:4 bulkData:testFileData];
- expect(testRequest.syncFileName).to(equal(@"fileName"));
+ expect(testRequest.sdlFileName).to(equal(@"fileName"));
expect(testRequest.fileType).to(equal(SDLFileTypeAAC));
expect(testRequest.persistentFile).to(beTrue());
expect(testRequest.systemFile).to(beTrue());
@@ -175,6 +210,11 @@ describe(@"initializers", ^{
expect(testRequest.length).to(equal(@4));
expect(testRequest.bulkData).to(equal(testFileData));
expect(testRequest.crc).to(equal(testFileCRC32Checksum));
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.syncFileName).to(equal(@"fileName"));
+#pragma clang diagnostic pop
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
index a867ecef6..9905b9ebf 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLRegisterAppInterfaceSpec.m
@@ -49,9 +49,9 @@ describe(@"RegisterAppInterface Tests", ^{
__block SDLTemplateColorScheme *colorScheme = nil;
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- __block SDLSyncMsgVersion *currentSyncMsgVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:6 minorVersion:0 patchVersion:0];
+ __block SDLSyncMsgVersion *currentSyncMsgVersion = [[SDLSyncMsgVersion alloc] initWithMajorVersion:7 minorVersion:0 patchVersion:0];
#pragma clang diagnostic pop
- __block SDLMsgVersion * currentSDLMsgVersion = [[SDLMsgVersion alloc] initWithMajorVersion:6 minorVersion:0 patchVersion:0];
+ __block SDLMsgVersion * currentSDLMsgVersion = [[SDLMsgVersion alloc] initWithMajorVersion:7 minorVersion:0 patchVersion:0];
beforeEach(^{
testRegisterAppInterface = nil;
@@ -116,7 +116,7 @@ describe(@"RegisterAppInterface Tests", ^{
dict = @{SDLRPCParameterNameRequest:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameSyncMessageVersion:@{
- SDLRPCParameterNameMajorVersion: @6,
+ SDLRPCParameterNameMajorVersion: @7,
SDLRPCParameterNameMinorVersion: @0,
SDLRPCParameterNamePatchVersion: @0
},
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
index b69336d23..a2f2038a0 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLSubscribeVehicleDataSpec.m
@@ -14,8 +14,8 @@
QuickSpecBegin(SDLSubscribeVehicleDataSpec)
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^{
+ it(@"should set and get correctly", ^{
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] init];
testRequest.accPedalPosition = @YES;
@@ -32,10 +32,14 @@ describe(@"Getter/Setter Tests", ^ {
testRequest.engineOilLife = @YES;
testRequest.engineTorque = @NO;
testRequest.externalTemperature = @YES;
- testRequest.fuelLevel = @NO;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testRequest.fuelLevel = @YES;
testRequest.fuelLevel_State = @YES;
+#pragma clang diagnostic pop
testRequest.fuelRange = @YES;
testRequest.gps = @YES;
+ testRequest.handsOffSteering = @YES;
testRequest.headLampStatus = @YES;
testRequest.instantFuelConsumption = @NO;
testRequest.myKey = @YES;
@@ -62,10 +66,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.engineOilLife).to(equal(@YES));
expect(testRequest.engineTorque).to(equal(@NO));
expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@NO));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@NO));
expect(testRequest.myKey).to(equal(@YES));
@@ -79,7 +87,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.wiperStatus).to(equal(@NO));
});
- it(@"Should get correctly when initialized with a dictionary", ^ {
+ it(@"should get correctly when initialized with a dictionary", ^ {
NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameRequest:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameAccelerationPedalPosition:@YES,
@@ -110,13 +118,15 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNameSteeringWheelAngle:@NO,
SDLRPCParameterNameTirePressure:@YES,
SDLRPCParameterNameTurnSignal:@NO,
- SDLRPCParameterNameWiperStatus:@NO},
+ SDLRPCParameterNameWiperStatus:@NO,
+ SDLRPCParameterNameHandsOffSteering:@YES
+ },
SDLRPCParameterNameOperationName:SDLRPCFunctionNameSubscribeVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithDictionary:dict];
#pragma clang diagnostic pop
-
+
expect(testRequest.accPedalPosition).to(equal(@YES));
expect(testRequest.airbagStatus).to(equal(@YES));
expect(testRequest.beltStatus).to(equal(@YES));
@@ -131,10 +141,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.engineOilLife).to(equal(@YES));
expect(testRequest.engineTorque).to(equal(@YES));
expect(testRequest.externalTemperature).to(equal(@NO));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
@@ -153,153 +167,178 @@ describe(@"initializers", ^{
context(@"init", ^{
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] init];
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
- expect(testRequest.beltStatus).to(beNil());
- expect(testRequest.bodyInformation).to(beNil());
- expect(testRequest.cloudAppVehicleID).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
- expect(testRequest.deviceStatus).to(beNil());
- expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.electronicParkBrakeStatus).to(beNil());
- expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.engineOilLife).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.fuelRange).to(beNil());
- expect(testRequest.gps).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.myKey).to(beNil());
- expect(testRequest.odometer).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.turnSignal).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.beltStatus).to(beNil());
+ expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.deviceStatus).to(beNil());
+ expect(testRequest.driverBraking).to(beNil());
+ expect(testRequest.eCallInfo).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
+ expect(testRequest.emergencyEvent).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
+ expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
});
- context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES cloudAppVehicleID:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
-
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- });
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
- });
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+ });
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
- SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:NO gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES wiperStatus:YES];
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@NO));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@NO));
- expect(testRequest.fuelRange).to(equal(@NO));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@NO));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@NO));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@NO));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(equal(@NO));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@NO));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
- context(@"Should set and get Generic Network Signal Data", ^{
- SDLSubscribeVehicleData *testRequest = [[SDLSubscribeVehicleData alloc] init];
+ context(@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering:", ^{
+ SDLSubscribeVehicleData* testRequest = [[SDLSubscribeVehicleData alloc] initWithGps:@YES speed:@YES rpm:@YES instantFuelConsumption:@YES fuelRange:@YES externalTemperature:@YES turnSignal:@YES prndl:@YES tirePressure:@YES odometer:@YES beltStatus:@YES bodyInformation:@YES deviceStatus:@YES driverBraking:@YES wiperStatus:@YES headLampStatus:@YES engineTorque:@YES accPedalPosition:@YES steeringWheelAngle:@YES engineOilLife:@YES electronicParkBrakeStatus:@YES cloudAppVehicleID:@YES eCallInfo:@YES airbagStatus:@YES emergencyEvent:@YES clusterModeStatus:@YES myKey:@YES handsOffSteering:@YES];
+ it(@"should set all the parameters properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+ });
+
+ context(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLSubscribeVehicleData *testRequest = [[SDLSubscribeVehicleData alloc] init];
[testRequest setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:NO];
[testRequest setOEMCustomVehicleData:@"customVehicleData1" withVehicleDataState:YES];
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(beFalse());
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData1"]).to(beTrue());
-
+ it(@"expect OEM Custom Vehicle Data to be set properly", ^{
+ expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(equal(@NO));
+ expect([testRequest getOEMCustomVehicleData:@"customVehicleData1"]).to(equal(@YES));
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
index 9795f6a29..4d4efc93a 100644
--- a/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/RequestSpecs/SDLUnsubscribeVehicleDataSpec.m
@@ -14,8 +14,8 @@
QuickSpecBegin(SDLUnsubscribeVehicleDataSpec)
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^{
+ it(@"should set and get correctly", ^{
SDLUnsubscribeVehicleData* testRequest = [[SDLUnsubscribeVehicleData alloc] init];
testRequest.accPedalPosition = @YES;
@@ -32,10 +32,14 @@ describe(@"Getter/Setter Tests", ^ {
testRequest.engineOilLife = @YES;
testRequest.engineTorque = @YES;
testRequest.externalTemperature = @YES;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testRequest.fuelLevel = @YES;
testRequest.fuelLevel_State = @YES;
+#pragma clang diagnostic pop
testRequest.fuelRange = @YES;
testRequest.gps = @YES;
+ testRequest.handsOffSteering = @YES;
testRequest.headLampStatus = @YES;
testRequest.instantFuelConsumption = @YES;
testRequest.myKey = @YES;
@@ -62,10 +66,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.engineOilLife).to(equal(@YES));
expect(testRequest.engineTorque).to(equal(@YES));
expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
@@ -79,7 +87,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.wiperStatus).to(equal(@YES));
});
- it(@"Should get correctly when initialized with a dictionary", ^ {
+ it(@"should get correctly when initialized with a dictionary", ^ {
NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameRequest:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameAccelerationPedalPosition:@YES,
@@ -110,7 +118,9 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNameSteeringWheelAngle:@YES,
SDLRPCParameterNameTirePressure:@YES,
SDLRPCParameterNameTurnSignal:@YES,
- SDLRPCParameterNameWiperStatus:@YES},
+ SDLRPCParameterNameWiperStatus:@YES,
+ SDLRPCParameterNameHandsOffSteering:@YES
+ },
SDLRPCParameterNameOperationName:SDLRPCFunctionNameUnsubscribeVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -131,10 +141,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testRequest.engineOilLife).to(equal(@YES));
expect(testRequest.engineTorque).to(equal(@YES));
expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testRequest.fuelLevel).to(equal(@YES));
expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic pop
expect(testRequest.fuelRange).to(equal(@YES));
expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
expect(testRequest.headLampStatus).to(equal(@YES));
expect(testRequest.instantFuelConsumption).to(equal(@YES));
expect(testRequest.myKey).to(equal(@YES));
@@ -153,151 +167,224 @@ describe(@"initializers", ^{
context(@"init", ^{
SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] init];
- expect(testRequest.accPedalPosition).to(beNil());
- expect(testRequest.airbagStatus).to(beNil());
- expect(testRequest.beltStatus).to(beNil());
- expect(testRequest.bodyInformation).to(beNil());
- expect(testRequest.cloudAppVehicleID).to(beNil());
- expect(testRequest.clusterModeStatus).to(beNil());
- expect(testRequest.deviceStatus).to(beNil());
- expect(testRequest.driverBraking).to(beNil());
- expect(testRequest.eCallInfo).to(beNil());
- expect(testRequest.electronicParkBrakeStatus).to(beNil());
- expect(testRequest.emergencyEvent).to(beNil());
- expect(testRequest.engineOilLife).to(beNil());
- expect(testRequest.engineTorque).to(beNil());
- expect(testRequest.externalTemperature).to(beNil());
- expect(testRequest.fuelLevel).to(beNil());
- expect(testRequest.fuelLevel_State).to(beNil());
- expect(testRequest.fuelRange).to(beNil());
- expect(testRequest.gps).to(beNil());
- expect(testRequest.headLampStatus).to(beNil());
- expect(testRequest.instantFuelConsumption).to(beNil());
- expect(testRequest.myKey).to(beNil());
- expect(testRequest.odometer).to(beNil());
- expect(testRequest.prndl).to(beNil());
- expect(testRequest.rpm).to(beNil());
- expect(testRequest.speed).to(beNil());
- expect(testRequest.steeringWheelAngle).to(beNil());
- expect(testRequest.tirePressure).to(beNil());
- expect(testRequest.turnSignal).to(beNil());
- expect(testRequest.wiperStatus).to(beNil());
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(beNil());
+ expect(testRequest.airbagStatus).to(beNil());
+ expect(testRequest.beltStatus).to(beNil());
+ expect(testRequest.bodyInformation).to(beNil());
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(beNil());
+ expect(testRequest.deviceStatus).to(beNil());
+ expect(testRequest.driverBraking).to(beNil());
+ expect(testRequest.eCallInfo).to(beNil());
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
+ expect(testRequest.emergencyEvent).to(beNil());
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(beNil());
+ expect(testRequest.externalTemperature).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(beNil());
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(beNil());
+ expect(testRequest.instantFuelConsumption).to(beNil());
+ expect(testRequest.myKey).to(beNil());
+ expect(testRequest.odometer).to(beNil());
+ expect(testRequest.prndl).to(beNil());
+ expect(testRequest.rpm).to(beNil());
+ expect(testRequest.speed).to(beNil());
+ expect(testRequest.steeringWheelAngle).to(beNil());
+ expect(testRequest.tirePressure).to(beNil());
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(beNil());
+ });
});
- context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:", ^{
- SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES cloudAppVehicleID:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- });
context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.cloudAppVehicleID).to(equal(@NO));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@YES));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@YES));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@YES));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@YES));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic push
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
- context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
- #pragma clang diagnostic push
- #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ context(@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:", ^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES cloudAppVehicleID:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES electronicParkBrakeStatus:YES emergencyEvent:YES engineOilLife:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES fuelRange:YES gps:YES headLampStatus:YES instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES turnSignal:YES wiperStatus:YES];
+#pragma clang diagnostic pop
+
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic push
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+ });
+
+ context (@"initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:", ^{
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithAccelerationPedalPosition:YES airbagStatus:YES beltStatus:YES bodyInformation:YES clusterModeStatus:YES deviceStatus:YES driverBraking:YES eCallInfo:YES emergencyEvent:YES engineTorque:YES externalTemperature:YES fuelLevel:YES fuelLevelState:YES gps:YES headLampStatus:NO instantFuelConsumption:YES myKey:YES odometer:YES prndl:YES rpm:YES speed:YES steeringWheelAngle:YES tirePressure:YES wiperStatus:YES];
+#pragma clang diagnostic pop
- expect(testRequest.accPedalPosition).to(equal(@YES));
- expect(testRequest.airbagStatus).to(equal(@YES));
- expect(testRequest.beltStatus).to(equal(@YES));
- expect(testRequest.bodyInformation).to(equal(@YES));
- expect(testRequest.clusterModeStatus).to(equal(@YES));
- expect(testRequest.deviceStatus).to(equal(@YES));
- expect(testRequest.driverBraking).to(equal(@YES));
- expect(testRequest.eCallInfo).to(equal(@YES));
- expect(testRequest.electronicParkBrakeStatus).to(equal(@NO));
- expect(testRequest.emergencyEvent).to(equal(@YES));
- expect(testRequest.engineOilLife).to(equal(@NO));
- expect(testRequest.engineTorque).to(equal(@YES));
- expect(testRequest.externalTemperature).to(equal(@YES));
- expect(testRequest.fuelLevel).to(equal(@YES));
- expect(testRequest.fuelLevel_State).to(equal(@YES));
- expect(testRequest.fuelRange).to(equal(@NO));
- expect(testRequest.gps).to(equal(@YES));
- expect(testRequest.headLampStatus).to(equal(@NO));
- expect(testRequest.instantFuelConsumption).to(equal(@YES));
- expect(testRequest.myKey).to(equal(@YES));
- expect(testRequest.odometer).to(equal(@YES));
- expect(testRequest.prndl).to(equal(@YES));
- expect(testRequest.rpm).to(equal(@YES));
- expect(testRequest.speed).to(equal(@YES));
- expect(testRequest.steeringWheelAngle).to(equal(@YES));
- expect(testRequest.tirePressure).to(equal(@YES));
- expect(testRequest.turnSignal).to(equal(@NO));
- expect(testRequest.wiperStatus).to(equal(@YES));
- #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(beNil());
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(beNil());
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(beNil());
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(equal(@YES));
+ expect(testRequest.fuelLevel_State).to(equal(@YES));
+#pragma clang diagnostic push
+ expect(testRequest.fuelRange).to(beNil());
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(beNil());
+ expect(testRequest.headLampStatus).to(equal(@NO));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(beNil());
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
});
- context(@"Should set and get Generic Network Signal Data", ^{
- SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] init];
+ context (@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:handsOffSteering:", ^{
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] initWithGps:@YES speed:@YES rpm:@YES instantFuelConsumption:@YES fuelRange:@YES externalTemperature:@YES turnSignal:@YES prndl:@YES tirePressure:@YES odometer:@YES beltStatus:@YES bodyInformation:@YES deviceStatus:@YES driverBraking:@YES wiperStatus:@YES headLampStatus:@YES engineTorque:@YES accPedalPosition:@YES steeringWheelAngle:@YES engineOilLife:@YES electronicParkBrakeStatus:@YES cloudAppVehicleID:@YES eCallInfo:@YES airbagStatus:@YES emergencyEvent:@YES clusterModeStatus:@YES myKey:@YES handsOffSteering:@YES];
+ #pragma clang diagnostic pop
+ it(@"expect all properties to be set properly", ^{
+ expect(testRequest.accPedalPosition).to(equal(@YES));
+ expect(testRequest.airbagStatus).to(equal(@YES));
+ expect(testRequest.beltStatus).to(equal(@YES));
+ expect(testRequest.bodyInformation).to(equal(@YES));
+ expect(testRequest.cloudAppVehicleID).to(equal(@YES));
+ expect(testRequest.clusterModeStatus).to(equal(@YES));
+ expect(testRequest.deviceStatus).to(equal(@YES));
+ expect(testRequest.driverBraking).to(equal(@YES));
+ expect(testRequest.eCallInfo).to(equal(@YES));
+ expect(testRequest.electronicParkBrakeStatus).to(equal(@YES));
+ expect(testRequest.emergencyEvent).to(equal(@YES));
+ expect(testRequest.engineOilLife).to(equal(@YES));
+ expect(testRequest.engineTorque).to(equal(@YES));
+ expect(testRequest.externalTemperature).to(equal(@YES));
+ #pragma clang diagnostic push
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testRequest.fuelLevel).to(beNil());
+ expect(testRequest.fuelLevel_State).to(beNil());
+ #pragma clang diagnostic push
+ expect(testRequest.fuelRange).to(equal(@YES));
+ expect(testRequest.gps).to(equal(@YES));
+ expect(testRequest.handsOffSteering).to(equal(@YES));
+ expect(testRequest.headLampStatus).to(equal(@YES));
+ expect(testRequest.instantFuelConsumption).to(equal(@YES));
+ expect(testRequest.myKey).to(equal(@YES));
+ expect(testRequest.odometer).to(equal(@YES));
+ expect(testRequest.prndl).to(equal(@YES));
+ expect(testRequest.rpm).to(equal(@YES));
+ expect(testRequest.speed).to(equal(@YES));
+ expect(testRequest.steeringWheelAngle).to(equal(@YES));
+ expect(testRequest.tirePressure).to(equal(@YES));
+ expect(testRequest.turnSignal).to(equal(@YES));
+ expect(testRequest.wiperStatus).to(equal(@YES));
+ });
+ });
+
+ context(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLUnsubscribeVehicleData *testRequest = [[SDLUnsubscribeVehicleData alloc] init];
[testRequest setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:NO];
[testRequest setOEMCustomVehicleData:@"customVehicleData1" withVehicleDataState:YES];
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(beFalse());
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData1"]).to(beTrue());
-
+ it(@"expect OEM Custom Vehicle Data to be set properly", ^{
+ expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(beFalse());
+ expect([testRequest getOEMCustomVehicleData:@"customVehicleData1"]).to(beTrue());
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetInteriorVehicleDataConsentResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetInteriorVehicleDataConsentResponseSpec.m
index 479220441..4d92cd188 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetInteriorVehicleDataConsentResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetInteriorVehicleDataConsentResponseSpec.m
@@ -19,7 +19,7 @@
QuickSpecBegin(SDLGetInteriorVehicleDataConsentResponseSpec)
describe(@"Getter/Setter Tests", ^ {
- __block NSArray<NSNumber<SDLBool> *> *allowed = nil;
+ __block NSArray<NSNumber *> *allowed = nil;
beforeEach(^{
allowed = @[@YES, @NO];
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
index 72df4207b..539a061e5 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLGetVehicleDataResponseSpec.m
@@ -14,181 +14,198 @@
QuickSpecBegin(SDLGetVehicleDataResponseSpec)
+SDLGPSData* gps = [[SDLGPSData alloc] init];
+SDLTireStatus* tires = [[SDLTireStatus alloc] init];
+SDLBeltStatus* belt = [[SDLBeltStatus alloc] init];
+SDLBodyInformation* body = [[SDLBodyInformation alloc] init];
+SDLDeviceStatus* device = [[SDLDeviceStatus alloc] init];
+SDLHeadLampStatus* headLamp = [[SDLHeadLampStatus alloc] init];
+SDLECallInfo* eCall = [[SDLECallInfo alloc] init];
+SDLAirbagStatus* airbag = [[SDLAirbagStatus alloc] init];
+SDLEmergencyEvent* event = [[SDLEmergencyEvent alloc] init];
+SDLClusterModeStatus* clusterMode = [[SDLClusterModeStatus alloc] init];
+SDLMyKey* myKey = [[SDLMyKey alloc] init];
+SDLFuelRange* fuelRange = [[SDLFuelRange alloc] init];
+NSArray *fuelRangeArray = @[fuelRange, fuelRange];
+NSString *const vin = @"6574839201a";
+NSString *const cloudAppVehicleID = @"cloudAppVehicleID";
+const float speed = 123.45;
+const NSUInteger rpm = 42;
+const float fuelLevel = 10.3;
+SDLComponentVolumeStatus fuelLevel_State = SDLComponentVolumeStatusAlert;
+const float instantFuelConsumption = 4000.63;
+const float externalTemperature = -10.5;
+SDLTurnSignal turnSignal = SDLTurnSignalOff;
+SDLPRNDL prndl = SDLPRNDLDrive;
+NSUInteger odometer = 100500;
+SDLVehicleDataEventStatus driverBraking = SDLVehicleDataEventStatusYes;
+SDLWiperStatus wiperStatus = SDLWiperStatusStalled;
+const float engineTorque = -200.124;
+const float accPedalPosition = 99.99999999;
+const float steeringWheelAngle = M_PI_4;
+const float engineOilLife = 34.45;
+SDLElectronicParkBrakeStatus electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive;
+const BOOL handsOffSteering = YES;
-describe(@"Getter/Setter Tests", ^ {
- __block SDLGPSData* gps = nil;
- __block SDLTireStatus* tires = nil;
- __block SDLBeltStatus* belt = nil;
- __block SDLBodyInformation* body = nil;
- __block SDLDeviceStatus* device = nil;
- __block SDLHeadLampStatus* headLamp = nil;
- __block SDLECallInfo* eCall = nil;
- __block SDLAirbagStatus* airbag = nil;
- __block SDLEmergencyEvent* event = nil;
- __block SDLClusterModeStatus* clusterMode = nil;
- __block SDLMyKey* myKey = nil;
- __block SDLFuelRange* fuelRange = nil;
- __block NSString* vin = nil;
- __block NSString* cloudAppVehicleID = nil;
-
- beforeEach(^{
- gps = [[SDLGPSData alloc] init];
- tires = [[SDLTireStatus alloc] init];
- belt = [[SDLBeltStatus alloc] init];
- body = [[SDLBodyInformation alloc] init];
- device = [[SDLDeviceStatus alloc] init];
- headLamp = [[SDLHeadLampStatus alloc] init];
- eCall = [[SDLECallInfo alloc] init];
- airbag = [[SDLAirbagStatus alloc] init];
- event = [[SDLEmergencyEvent alloc] init];
- clusterMode = [[SDLClusterModeStatus alloc] init];
- myKey = [[SDLMyKey alloc] init];
- fuelRange = [[SDLFuelRange alloc] init];
- vin = @"6574839201a";
- cloudAppVehicleID = @"cloudAppVehicleID";
- });
-
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^{
+ context(@"init", ^{
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] init];
+ it(@"should set and get correctly", ^{
- testResponse.accPedalPosition = @0;
- testResponse.airbagStatus = airbag;
- testResponse.beltStatus = belt;
- testResponse.bodyInformation = body;
- testResponse.cloudAppVehicleID = cloudAppVehicleID;
- testResponse.clusterModeStatus = clusterMode;
- testResponse.deviceStatus = device;
- testResponse.driverBraking = SDLVehicleDataEventStatusNoEvent;
- testResponse.eCallInfo = eCall;
- testResponse.electronicParkBrakeStatus = SDLElectronicParkBrakeStatusDriveActive;
- testResponse.emergencyEvent = event;
- testResponse.engineOilLife = @56.3;
- testResponse.engineTorque = @630.4;
- testResponse.externalTemperature = @0;
- testResponse.fuelLevel = @99.9999;
- testResponse.fuelLevel_State = SDLComponentVolumeStatusFault;
- testResponse.fuelRange = @[fuelRange, fuelRange];
- testResponse.gps = gps;
- testResponse.headLampStatus = headLamp;
- testResponse.instantFuelConsumption = @40.7;
- testResponse.myKey = myKey;
- testResponse.odometer = @70000;
- testResponse.prndl = SDLPRNDLPark;
- testResponse.rpm = @3;
- testResponse.speed = @100;
- testResponse.steeringWheelAngle = @-1500;
- testResponse.tirePressure = tires;
- testResponse.turnSignal = SDLTurnSignalBoth;
- testResponse.vin = vin;
- testResponse.wiperStatus = SDLWiperStatusAutomaticHigh;
+ testResponse.accPedalPosition = @(accPedalPosition);
+ testResponse.airbagStatus = airbag;
+ testResponse.beltStatus = belt;
+ testResponse.bodyInformation = body;
+ testResponse.cloudAppVehicleID = cloudAppVehicleID;
+ testResponse.clusterModeStatus = clusterMode;
+ testResponse.deviceStatus = device;
+ testResponse.driverBraking = driverBraking;
+ testResponse.eCallInfo = eCall;
+ testResponse.electronicParkBrakeStatus = electronicParkBrakeStatus;
+ testResponse.emergencyEvent = event;
+ testResponse.engineOilLife = @(engineOilLife);
+ testResponse.engineTorque = @(engineTorque);
+ testResponse.externalTemperature = @(externalTemperature);
+ testResponse.gps = gps;
+ testResponse.handsOffSteering = @(handsOffSteering);
+ testResponse.headLampStatus = headLamp;
+ testResponse.instantFuelConsumption = @(instantFuelConsumption);
+ testResponse.myKey = myKey;
+ testResponse.odometer = @(odometer);
+ testResponse.prndl = prndl;
+ testResponse.rpm = @(rpm);
+ testResponse.speed = @(speed);
+ testResponse.steeringWheelAngle = @(steeringWheelAngle);
+ testResponse.tirePressure = tires;
+ testResponse.turnSignal = turnSignal;
+ testResponse.vin = vin;
+ testResponse.wiperStatus = wiperStatus;
+ testResponse.fuelRange = fuelRangeArray;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ testResponse.fuelLevel = @(fuelLevel);
+ testResponse.fuelLevel_State = fuelLevel_State;
+#pragma clang diagnostic pop
- expect(testResponse.accPedalPosition).to(equal(@0));
- expect(testResponse.airbagStatus).to(equal(airbag));
- expect(testResponse.beltStatus).to(equal(belt));
- expect(testResponse.bodyInformation).to(equal(body));
- expect(testResponse.cloudAppVehicleID).to(equal(cloudAppVehicleID));
- expect(testResponse.clusterModeStatus).to(equal(clusterMode));
- expect(testResponse.deviceStatus).to(equal(device));
- expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent));
- expect(testResponse.eCallInfo).to(equal(eCall));
- expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
- expect(testResponse.emergencyEvent).to(equal(event));
- expect(testResponse.engineOilLife).to(equal(@56.3));
- expect(testResponse.engineTorque).to(equal(@630.4));
- expect(testResponse.externalTemperature).to(equal(@0));
- expect(testResponse.fuelLevel).to(equal(@99.9999));
- expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
- expect(testResponse.fuelRange).to(equal(@[fuelRange, fuelRange]));
- expect(testResponse.gps).to(equal(gps));
- expect(testResponse.headLampStatus).to(equal(headLamp));
- expect(testResponse.instantFuelConsumption).to(equal(@40.7));
- expect(testResponse.myKey).to(equal(myKey));
- expect(testResponse.odometer).to(equal(@70000));
- expect(testResponse.prndl).to(equal(SDLPRNDLPark));
- expect(testResponse.rpm).to(equal(@3));
- expect(testResponse.speed).to(equal(@100));
- expect(testResponse.steeringWheelAngle).to(equal(@-1500));
- expect(testResponse.tirePressure).to(equal(tires));
- expect(testResponse.turnSignal).to(equal(SDLTurnSignalBoth));
- expect(testResponse.vin).to(equal(vin));
- expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
+ expect(testResponse.accPedalPosition).to(equal(@(accPedalPosition)));
+ expect(testResponse.airbagStatus).to(equal(airbag));
+ expect(testResponse.beltStatus).to(equal(belt));
+ expect(testResponse.bodyInformation).to(equal(body));
+ expect(testResponse.cloudAppVehicleID).to(equal(cloudAppVehicleID));
+ expect(testResponse.clusterModeStatus).to(equal(clusterMode));
+ expect(testResponse.deviceStatus).to(equal(device));
+ expect(testResponse.driverBraking).to(equal(driverBraking));
+ expect(testResponse.eCallInfo).to(equal(eCall));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
+ expect(testResponse.emergencyEvent).to(equal(event));
+ expect(testResponse.engineOilLife).to(equal(@(engineOilLife)));
+ expect(testResponse.engineTorque).to(equal(@(engineTorque)));
+ expect(testResponse.externalTemperature).to(equal(@(externalTemperature)));
+ expect(testResponse.gps).to(equal(gps));
+ expect(testResponse.handsOffSteering).to(equal(@(handsOffSteering)));
+ expect(testResponse.headLampStatus).to(equal(headLamp));
+ expect(testResponse.instantFuelConsumption).to(equal(@(instantFuelConsumption)));
+ expect(testResponse.myKey).to(equal(myKey));
+ expect(testResponse.odometer).to(equal(@(odometer)));
+ expect(testResponse.prndl).to(equal(prndl));
+ expect(testResponse.rpm).to(equal(@(rpm)));
+ expect(testResponse.speed).to(equal(@(speed)));
+ expect(testResponse.steeringWheelAngle).to(equal(@(steeringWheelAngle)));
+ expect(testResponse.tirePressure).to(equal(tires));
+ expect(testResponse.turnSignal).to(equal(turnSignal));
+ expect(testResponse.vin).to(equal(vin));
+ expect(testResponse.wiperStatus).to(equal(wiperStatus));
+ expect(testResponse.fuelRange).to(equal(fuelRangeArray));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testResponse.fuelLevel).to(equal(@(fuelLevel)));
+ expect(testResponse.fuelLevel_State).to(equal(fuelLevel_State));
+#pragma clang diagnostic pop
+ });
});
+
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary* dict = [@{SDLRPCParameterNameNotification:
+ it(@"should get correctly when initialized", ^ {
+ NSDictionary* dict = @{SDLRPCParameterNameNotification:
@{SDLRPCParameterNameParameters:
@{
- SDLRPCParameterNameAccelerationPedalPosition:@0,
+ SDLRPCParameterNameAccelerationPedalPosition:@(accPedalPosition),
SDLRPCParameterNameAirbagStatus:airbag,
SDLRPCParameterNameBeltStatus:belt,
SDLRPCParameterNameBodyInformation:body,
SDLRPCParameterNameCloudAppVehicleID:cloudAppVehicleID,
SDLRPCParameterNameClusterModeStatus:clusterMode,
SDLRPCParameterNameDeviceStatus:device,
- SDLRPCParameterNameDriverBraking:SDLVehicleDataEventStatusNoEvent,
+ SDLRPCParameterNameDriverBraking:driverBraking,
SDLRPCParameterNameECallInfo:eCall,
- SDLRPCParameterNameElectronicParkBrakeStatus:SDLElectronicParkBrakeStatusDriveActive,
+ SDLRPCParameterNameElectronicParkBrakeStatus:electronicParkBrakeStatus,
SDLRPCParameterNameEmergencyEvent:event,
- SDLRPCParameterNameEngineOilLife:@23.22,
- SDLRPCParameterNameEngineTorque:@630.4,
- SDLRPCParameterNameExternalTemperature:@0,
- SDLRPCParameterNameFuelLevel:@99.9999,
- SDLRPCParameterNameFuelLevelState:SDLComponentVolumeStatusFault,
- SDLRPCParameterNameFuelRange:@[fuelRange],
+ SDLRPCParameterNameEngineOilLife:@(engineOilLife),
+ SDLRPCParameterNameEngineTorque:@(engineTorque),
+ SDLRPCParameterNameExternalTemperature:@(externalTemperature),
+ SDLRPCParameterNameFuelLevel:@(fuelLevel),
+ SDLRPCParameterNameFuelLevelState:fuelLevel_State,
+ SDLRPCParameterNameFuelRange:fuelRangeArray,
SDLRPCParameterNameGPS:gps,
+ SDLRPCParameterNameHandsOffSteering:@(handsOffSteering),
SDLRPCParameterNameHeadLampStatus:headLamp,
- SDLRPCParameterNameInstantFuelConsumption:@40.7,
+ SDLRPCParameterNameInstantFuelConsumption:@(instantFuelConsumption),
SDLRPCParameterNameMyKey:myKey,
- SDLRPCParameterNameOdometer:@70000,
- SDLRPCParameterNamePRNDL:SDLPRNDLPark,
- SDLRPCParameterNameRPM:@3,
- SDLRPCParameterNameSpeed:@100,
- SDLRPCParameterNameSteeringWheelAngle:@-1500,
+ SDLRPCParameterNameOdometer:@(odometer),
+ SDLRPCParameterNamePRNDL:prndl,
+ SDLRPCParameterNameRPM:@(rpm),
+ SDLRPCParameterNameSpeed:@(speed),
+ SDLRPCParameterNameSteeringWheelAngle:@(steeringWheelAngle),
SDLRPCParameterNameTirePressure:tires,
- SDLRPCParameterNameTurnSignal:SDLTurnSignalOff,
+ SDLRPCParameterNameTurnSignal:turnSignal,
SDLRPCParameterNameVIN:vin,
- SDLRPCParameterNameWiperStatus:SDLWiperStatusAutomaticHigh},
- SDLRPCParameterNameOperationName:SDLRPCFunctionNameGetVehicleData}} mutableCopy];
+ SDLRPCParameterNameWiperStatus:wiperStatus,
+ },
+ SDLRPCParameterNameOperationName:SDLRPCFunctionNameGetVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] initWithDictionary:dict];
#pragma clang diagnostic pop
- expect(testResponse.accPedalPosition).to(equal(@0));
+ expect(testResponse.accPedalPosition).to(equal(@(accPedalPosition)));
expect(testResponse.airbagStatus).to(equal(airbag));
expect(testResponse.beltStatus).to(equal(belt));
expect(testResponse.bodyInformation).to(equal(body));
expect(testResponse.cloudAppVehicleID).to(equal(cloudAppVehicleID));
expect(testResponse.clusterModeStatus).to(equal(clusterMode));
expect(testResponse.deviceStatus).to(equal(device));
- expect(testResponse.driverBraking).to(equal(SDLVehicleDataEventStatusNoEvent));
+ expect(testResponse.driverBraking).to(equal(driverBraking));
expect(testResponse.eCallInfo).to(equal(eCall));
- expect(testResponse.electronicParkBrakeStatus).to(equal(SDLElectronicParkBrakeStatusDriveActive));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(electronicParkBrakeStatus));
expect(testResponse.emergencyEvent).to(equal(event));
- expect(testResponse.engineOilLife).to(equal(@23.22));
- expect(testResponse.engineTorque).to(equal(@630.4));
- expect(testResponse.externalTemperature).to(equal(@0));
- expect(testResponse.fuelLevel).to(equal(@99.9999));
- expect(testResponse.fuelLevel_State).to(equal(SDLComponentVolumeStatusFault));
- expect(testResponse.fuelRange).to(equal(@[fuelRange]));
+ expect(testResponse.engineOilLife).to(equal(@(engineOilLife)));
+ expect(testResponse.engineTorque).to(equal(@(engineTorque)));
+ expect(testResponse.externalTemperature).to(equal(@(externalTemperature)));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testResponse.fuelLevel).to(equal(@(fuelLevel)));
+ expect(testResponse.fuelLevel_State).to(equal(fuelLevel_State));
+#pragma clang diagnostic pop
+ expect(testResponse.fuelRange).to(equal(fuelRangeArray));
expect(testResponse.gps).to(equal(gps));
+ expect(testResponse.handsOffSteering).to(equal(@(handsOffSteering)));
expect(testResponse.headLampStatus).to(equal(headLamp));
- expect(testResponse.instantFuelConsumption).to(equal(@40.7));
+ expect(testResponse.instantFuelConsumption).to(equal(@(instantFuelConsumption)));
expect(testResponse.myKey).to(equal(myKey));
- expect(testResponse.odometer).to(equal(@70000));
- expect(testResponse.prndl).to(equal(SDLPRNDLPark));
- expect(testResponse.rpm).to(equal(@3));
- expect(testResponse.speed).to(equal(@100));
- expect(testResponse.steeringWheelAngle).to(equal(@-1500));
+ expect(testResponse.odometer).to(equal(@(odometer)));
+ expect(testResponse.prndl).to(equal(prndl));
+ expect(testResponse.rpm).to(equal(@(rpm)));
+ expect(testResponse.speed).to(equal(@(speed)));
+ expect(testResponse.steeringWheelAngle).to(equal(@(steeringWheelAngle)));
expect(testResponse.tirePressure).to(equal(tires));
- expect(testResponse.turnSignal).to(equal(SDLTurnSignalOff));
+ expect(testResponse.turnSignal).to(equal(turnSignal));
expect(testResponse.vin).to(equal(vin));
- expect(testResponse.wiperStatus).to(equal(SDLWiperStatusAutomaticHigh));
+ expect(testResponse.wiperStatus).to(equal(wiperStatus));
});
- it(@"Should return nil if not set", ^ {
+ it(@"should return nil if not set", ^ {
SDLGetVehicleDataResponse* testResponse = [[SDLGetVehicleDataResponse alloc] init];
-
+
expect(testResponse.accPedalPosition).to(beNil());
expect(testResponse.airbagStatus).to(beNil());
expect(testResponse.beltStatus).to(beNil());
@@ -203,10 +220,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.engineOilLife).to(beNil());
expect(testResponse.engineTorque).to(beNil());
expect(testResponse.externalTemperature).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(beNil());
expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(beNil());
expect(testResponse.gps).to(beNil());
+ expect(testResponse.handsOffSteering).to(beNil());
expect(testResponse.headLampStatus).to(beNil());
expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.myKey).to(beNil());
@@ -221,12 +242,51 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.wiperStatus).to(beNil());
});
- it(@"Should set and get Generic Network Signal Data", ^{
- SDLGetVehicleDataResponse *testRequest = [[SDLGetVehicleDataResponse alloc] init];
+ context(@"initWithGps:speed:rpm:fuelLevel:fuelLevel_State:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:vin:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModeStatus:myKey:", ^{
+ SDLGetVehicleDataResponse *testResponse = [[SDLGetVehicleDataResponse alloc] initWithGps:gps speed:speed rpm:@(rpm) instantFuelConsumption:instantFuelConsumption fuelRange:fuelRangeArray externalTemperature:externalTemperature turnSignal:turnSignal vin:vin prndl:prndl tirePressure:tires odometer:@(odometer) beltStatus:belt bodyInformation:body deviceStatus:device driverBraking:driverBraking wiperStatus:wiperStatus headLampStatus:headLamp engineTorque:engineTorque accPedalPosition:accPedalPosition steeringWheelAngle:steeringWheelAngle engineOilLife:engineOilLife electronicParkBrakeStatus:electronicParkBrakeStatus cloudAppVehicleID:cloudAppVehicleID eCallInfo:eCall airbagStatus:airbag emergencyEvent:event clusterModeStatus:clusterMode myKey:myKey handsOffSteering:@(handsOffSteering)];
+ it(@"should set all properties properly", ^{
+ expect(testResponse.accPedalPosition).to(equal(accPedalPosition));
+ expect(testResponse.airbagStatus).to(equal(airbag));
+ expect(testResponse.beltStatus).to(equal(belt));
+ expect(testResponse.bodyInformation).to(equal(body));
+ expect(testResponse.cloudAppVehicleID).to(equal(cloudAppVehicleID));
+ expect(testResponse.clusterModeStatus).to(equal(clusterMode));
+ expect(testResponse.deviceStatus).to(equal(device));
+ expect(testResponse.driverBraking).to(equal(driverBraking));
+ expect(testResponse.eCallInfo).to(equal(eCall));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(electronicParkBrakeStatus));
+ expect(testResponse.emergencyEvent).to(equal(event));
+ expect(testResponse.engineOilLife).to(equal(engineOilLife));
+ expect(testResponse.engineTorque).to(equal(engineTorque));
+ expect(testResponse.externalTemperature).to(equal(externalTemperature));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testResponse.fuelLevel).to(beNil());
+ expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testResponse.fuelRange).to(equal(fuelRangeArray));
+ expect(testResponse.gps).to(equal(gps));
+ expect(testResponse.handsOffSteering).to(equal(@(handsOffSteering)));
+ expect(testResponse.headLampStatus).to(equal(headLamp));
+ expect(testResponse.instantFuelConsumption).to(equal(instantFuelConsumption));
+ expect(testResponse.myKey).to(equal(myKey));
+ expect(testResponse.odometer).to(equal(odometer));
+ expect(testResponse.prndl).to(equal(prndl));
+ expect(testResponse.rpm).to(equal(rpm));
+ expect(testResponse.speed).to(equal(speed));
+ expect(testResponse.steeringWheelAngle).to(equal(steeringWheelAngle));
+ expect(testResponse.tirePressure).to(equal(tires));
+ expect(testResponse.turnSignal).to(equal(turnSignal));
+ expect(testResponse.vin).to(equal(vin));
+ expect(testResponse.wiperStatus).to(equal(wiperStatus));
+ });
+ });
- [testRequest setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:@"oemVehicleData"];
+ it(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLGetVehicleDataResponse *testResponse = [[SDLGetVehicleDataResponse alloc] init];
+ [testResponse setOEMCustomVehicleData:@"customVehicleData" withVehicleDataState:@"oemVehicleData"];
- expect([testRequest getOEMCustomVehicleData:@"customVehicleData"]).to(equal(@"oemVehicleData"));
+ expect([testResponse getOEMCustomVehicleData:@"customVehicleData"]).to(equal(@"oemVehicleData"));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
index 1b8dc5b6d..db8dbeec9 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLSubscribeVehicleDataResponseSpec.m
@@ -20,9 +20,8 @@ QuickSpecBegin(SDLSubscribeVehicleDataResponseSpec)
SDLVehicleDataResult* vehicleDataResult = [[SDLVehicleDataResult alloc] init];
SDLVehicleDataResult* customOEMvehicleDataResult = [[SDLVehicleDataResult alloc] initWithCustomOEMDataType:@"customOEMVehicleData" resultCode:SDLVehicleDataResultCodeSuccess];
-
describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+ it(@"should set and get correctly", ^ {
SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] init];
testResponse.accPedalPosition = vehicleDataResult;
@@ -39,10 +38,14 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.engineOilLife = vehicleDataResult;
testResponse.engineTorque = vehicleDataResult;
testResponse.externalTemperature = vehicleDataResult;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testResponse.fuelLevel = vehicleDataResult;
testResponse.fuelLevel_State = vehicleDataResult;
+#pragma clang diagnostic pop
testResponse.fuelRange = vehicleDataResult;
testResponse.gps = vehicleDataResult;
+ testResponse.handsOffSteering = vehicleDataResult;
testResponse.headLampStatus = vehicleDataResult;
testResponse.instantFuelConsumption = vehicleDataResult;
testResponse.myKey = vehicleDataResult;
@@ -69,10 +72,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
expect(testResponse.engineTorque).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
@@ -86,7 +93,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
});
- it(@"Should get correctly when initialized", ^ {
+ it(@"should get correctly when initialized", ^ {
NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameResponse:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameAccelerationPedalPosition:vehicleDataResult,
@@ -117,7 +124,9 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNameSteeringWheelAngle:vehicleDataResult,
SDLRPCParameterNameTirePressure:vehicleDataResult,
SDLRPCParameterNameTurnSignal:vehicleDataResult,
- SDLRPCParameterNameWiperStatus:vehicleDataResult},
+ SDLRPCParameterNameWiperStatus:vehicleDataResult,
+ SDLRPCParameterNameHandsOffSteering:vehicleDataResult
+ },
SDLRPCParameterNameOperationName:SDLRPCFunctionNameSubscribeVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -138,10 +147,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
expect(testResponse.engineTorque).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.myKey).to(equal(vehicleDataResult));
@@ -155,7 +168,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
});
- it(@"Should return nil if not set", ^ {
+ it(@"should return nil if not set", ^ {
SDLSubscribeVehicleDataResponse* testResponse = [[SDLSubscribeVehicleDataResponse alloc] init];
expect(testResponse.accPedalPosition).to(beNil());
@@ -172,10 +185,14 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.engineOilLife).to(beNil());
expect(testResponse.engineTorque).to(beNil());
expect(testResponse.externalTemperature).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(beNil());
expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(beNil());
expect(testResponse.gps).to(beNil());
+ expect(testResponse.handsOffSteering).to(beNil());
expect(testResponse.headLampStatus).to(beNil());
expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.myKey).to(beNil());
@@ -189,12 +206,51 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.wiperStatus).to(beNil());
});
- it(@"Should set and get Generic Network Signal Data", ^{
- SDLSubscribeVehicleDataResponse *testRequest = [[SDLSubscribeVehicleDataResponse alloc] init];
+ context(@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModes:myKey:handsOffSteering:", ^{
+ SDLSubscribeVehicleDataResponse *testResponse = [[SDLSubscribeVehicleDataResponse alloc] initWithGps:vehicleDataResult speed:vehicleDataResult rpm:vehicleDataResult instantFuelConsumption:vehicleDataResult fuelRange:vehicleDataResult externalTemperature:vehicleDataResult turnSignal:vehicleDataResult prndl:vehicleDataResult tirePressure:vehicleDataResult odometer:vehicleDataResult beltStatus:vehicleDataResult bodyInformation:vehicleDataResult deviceStatus:vehicleDataResult driverBraking:vehicleDataResult wiperStatus:vehicleDataResult headLampStatus:vehicleDataResult engineTorque:vehicleDataResult accPedalPosition:vehicleDataResult steeringWheelAngle:vehicleDataResult engineOilLife:vehicleDataResult electronicParkBrakeStatus:vehicleDataResult cloudAppVehicleID:vehicleDataResult eCallInfo:vehicleDataResult airbagStatus:vehicleDataResult emergencyEvent:vehicleDataResult clusterModes:vehicleDataResult myKey:vehicleDataResult handsOffSteering:vehicleDataResult];
+
+ it(@"expect all properties to be set properly", ^{
+ expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
+ expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
+ expect(testResponse.beltStatus).to(equal(vehicleDataResult));
+ expect(testResponse.bodyInformation).to(equal(vehicleDataResult));
+ expect(testResponse.cloudAppVehicleID).to(equal(vehicleDataResult));
+ expect(testResponse.clusterModes).to(equal(vehicleDataResult));
+ expect(testResponse.deviceStatus).to(equal(vehicleDataResult));
+ expect(testResponse.driverBraking).to(equal(vehicleDataResult));
+ expect(testResponse.eCallInfo).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
+ expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
+ expect(testResponse.engineTorque).to(equal(vehicleDataResult));
+ expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testResponse.fuelLevel).to(beNil());
+ expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
+ expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
+ expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
+ expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.odometer).to(equal(vehicleDataResult));
+ expect(testResponse.prndl).to(equal(vehicleDataResult));
+ expect(testResponse.rpm).to(equal(vehicleDataResult));
+ expect(testResponse.speed).to(equal(vehicleDataResult));
+ expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
+ expect(testResponse.tirePressure).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
+ expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
+ });
+ });
- [testRequest setOEMCustomVehicleData:@"customOEMVehicleData" withVehicleDataState:customOEMvehicleDataResult];
+ it(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLSubscribeVehicleDataResponse *testRequest = [[SDLSubscribeVehicleDataResponse alloc] init];
+ [testRequest setOEMCustomVehicleData:@"customOEMVehicleData" withVehicleDataState:customOEMvehicleDataResult];
- expect([testRequest getOEMCustomVehicleData:@"customOEMVehicleData"]).to(equal(customOEMvehicleDataResult));
+ expect([testRequest getOEMCustomVehicleData:@"customOEMVehicleData"]).to(equal(customOEMvehicleDataResult));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
index 3f6302e4b..a0bd1bf11 100644
--- a/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/ResponseSpecs/SDLUnsubscribeVehicleDataResponseSpec.m
@@ -19,15 +19,18 @@ QuickSpecBegin(SDLUnsubscribeVehicleDataResponseSpec)
SDLVehicleDataResult* vehicleDataResult = [[SDLVehicleDataResult alloc] init];
SDLVehicleDataResult* customOEMvehicleDataResult = [[SDLVehicleDataResult alloc] initWithCustomOEMDataType:@"customOEMVehicleData" resultCode:SDLVehicleDataResultCodeSuccess];
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^ {
+ it(@"should set and get correctly", ^ {
SDLUnsubscribeVehicleDataResponse* testResponse = [[SDLUnsubscribeVehicleDataResponse alloc] init];
testResponse.gps = vehicleDataResult;
testResponse.speed = vehicleDataResult;
testResponse.rpm = vehicleDataResult;
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
testResponse.fuelLevel = vehicleDataResult;
testResponse.fuelLevel_State = vehicleDataResult;
+#pragma clang diagnostic pop
testResponse.fuelRange = vehicleDataResult;
testResponse.instantFuelConsumption = vehicleDataResult;
testResponse.externalTemperature = vehicleDataResult;
@@ -52,12 +55,16 @@ describe(@"Getter/Setter Tests", ^ {
testResponse.electronicParkBrakeStatus = vehicleDataResult;
testResponse.turnSignal = vehicleDataResult;
testResponse.cloudAppVehicleID = vehicleDataResult;
-
+ testResponse.handsOffSteering = vehicleDataResult;
+
expect(testResponse.gps).to(equal(vehicleDataResult));
expect(testResponse.speed).to(equal(vehicleDataResult));
expect(testResponse.rpm).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
@@ -82,10 +89,11 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
expect(testResponse.turnSignal).to(equal(vehicleDataResult));
expect(testResponse.cloudAppVehicleID).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
});
- it(@"Should get correctly when initialized", ^ {
- NSMutableDictionary<NSString *, id> *dict = [@{SDLRPCParameterNameResponse:
+ it(@"should get correctly when initialized", ^ {
+ NSDictionary<NSString *, id> *dict = @{SDLRPCParameterNameResponse:
@{SDLRPCParameterNameParameters:
@{SDLRPCParameterNameGPS:vehicleDataResult,
SDLRPCParameterNameSpeed:vehicleDataResult,
@@ -115,9 +123,10 @@ describe(@"Getter/Setter Tests", ^ {
SDLRPCParameterNameMyKey:vehicleDataResult,
SDLRPCParameterNameElectronicParkBrakeStatus:vehicleDataResult,
SDLRPCParameterNameTurnSignal:vehicleDataResult,
- SDLRPCParameterNameCloudAppVehicleID:vehicleDataResult
+ SDLRPCParameterNameCloudAppVehicleID:vehicleDataResult,
+ SDLRPCParameterNameHandsOffSteering:vehicleDataResult,
},
- SDLRPCParameterNameOperationName:SDLRPCFunctionNameUnsubscribeVehicleData}} mutableCopy];
+ SDLRPCParameterNameOperationName:SDLRPCFunctionNameUnsubscribeVehicleData}};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLUnsubscribeVehicleDataResponse* testResponse = [[SDLUnsubscribeVehicleDataResponse alloc] initWithDictionary:dict];
@@ -126,8 +135,11 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.gps).to(equal(vehicleDataResult));
expect(testResponse.speed).to(equal(vehicleDataResult));
expect(testResponse.rpm).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(equal(vehicleDataResult));
expect(testResponse.fuelLevel_State).to(equal(vehicleDataResult));
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(equal(vehicleDataResult));
expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
@@ -152,16 +164,20 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
expect(testResponse.turnSignal).to(equal(vehicleDataResult));
expect(testResponse.cloudAppVehicleID).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
});
- it(@"Should return nil if not set", ^ {
+ it(@"should return nil if not set", ^ {
SDLUnsubscribeVehicleDataResponse* testResponse = [[SDLUnsubscribeVehicleDataResponse alloc] init];
expect(testResponse.gps).to(beNil());
expect(testResponse.speed).to(beNil());
expect(testResponse.rpm).to(beNil());
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(testResponse.fuelLevel).to(beNil());
expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
expect(testResponse.fuelRange).to(beNil());
expect(testResponse.instantFuelConsumption).to(beNil());
expect(testResponse.externalTemperature).to(beNil());
@@ -186,11 +202,51 @@ describe(@"Getter/Setter Tests", ^ {
expect(testResponse.electronicParkBrakeStatus).to(beNil());
expect(testResponse.turnSignal).to(beNil());
expect(testResponse.cloudAppVehicleID).to(beNil());
+ expect(testResponse.handsOffSteering).to(beNil());
});
- it(@"Should set and get Generic Network Signal Data", ^{
- SDLUnsubscribeVehicleDataResponse *testRequest = [[SDLUnsubscribeVehicleDataResponse alloc] init];
+ context(@"initWithGps:speed:rpm:instantFuelConsumption:fuelRange:externalTemperature:turnSignal:prndl:tirePressure:odometer:beltStatus:bodyInformation:deviceStatus:driverBraking:wiperStatus:headLampStatus:engineTorque:accPedalPosition:steeringWheelAngle:engineOilLife:electronicParkBrakeStatus:cloudAppVehicleID:eCallInfo:airbagStatus:emergencyEvent:clusterModes:myKey:handsOffSteering:", ^{
+ SDLUnsubscribeVehicleDataResponse* testResponse = [[SDLUnsubscribeVehicleDataResponse alloc] initWithGps:vehicleDataResult speed:vehicleDataResult rpm:vehicleDataResult instantFuelConsumption:vehicleDataResult fuelRange:vehicleDataResult externalTemperature:vehicleDataResult turnSignal:vehicleDataResult prndl:vehicleDataResult tirePressure:vehicleDataResult odometer:vehicleDataResult beltStatus:vehicleDataResult bodyInformation:vehicleDataResult deviceStatus:vehicleDataResult driverBraking:vehicleDataResult wiperStatus:vehicleDataResult headLampStatus:vehicleDataResult engineTorque:vehicleDataResult accPedalPosition:vehicleDataResult steeringWheelAngle:vehicleDataResult engineOilLife:vehicleDataResult electronicParkBrakeStatus:vehicleDataResult cloudAppVehicleID:vehicleDataResult eCallInfo:vehicleDataResult airbagStatus:vehicleDataResult emergencyEvent:vehicleDataResult clusterModes:vehicleDataResult myKey:vehicleDataResult handsOffSteering:vehicleDataResult];
+
+ it(@"expect all properties to be set properly", ^{
+ expect(testResponse.gps).to(equal(vehicleDataResult));
+ expect(testResponse.speed).to(equal(vehicleDataResult));
+ expect(testResponse.rpm).to(equal(vehicleDataResult));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+ expect(testResponse.fuelLevel).to(beNil());
+ expect(testResponse.fuelLevel_State).to(beNil());
+#pragma clang diagnostic pop
+ expect(testResponse.fuelRange).to(equal(vehicleDataResult));
+ expect(testResponse.instantFuelConsumption).to(equal(vehicleDataResult));
+ expect(testResponse.externalTemperature).to(equal(vehicleDataResult));
+ expect(testResponse.prndl).to(equal(vehicleDataResult));
+ expect(testResponse.tirePressure).to(equal(vehicleDataResult));
+ expect(testResponse.odometer).to(equal(vehicleDataResult));
+ expect(testResponse.beltStatus).to(equal(vehicleDataResult));
+ expect(testResponse.bodyInformation).to(equal(vehicleDataResult));
+ expect(testResponse.deviceStatus).to(equal(vehicleDataResult));
+ expect(testResponse.driverBraking).to(equal(vehicleDataResult));
+ expect(testResponse.wiperStatus).to(equal(vehicleDataResult));
+ expect(testResponse.headLampStatus).to(equal(vehicleDataResult));
+ expect(testResponse.engineOilLife).to(equal(vehicleDataResult));
+ expect(testResponse.engineTorque).to(equal(vehicleDataResult));
+ expect(testResponse.accPedalPosition).to(equal(vehicleDataResult));
+ expect(testResponse.steeringWheelAngle).to(equal(vehicleDataResult));
+ expect(testResponse.eCallInfo).to(equal(vehicleDataResult));
+ expect(testResponse.airbagStatus).to(equal(vehicleDataResult));
+ expect(testResponse.emergencyEvent).to(equal(vehicleDataResult));
+ expect(testResponse.clusterModes).to(equal(vehicleDataResult));
+ expect(testResponse.myKey).to(equal(vehicleDataResult));
+ expect(testResponse.electronicParkBrakeStatus).to(equal(vehicleDataResult));
+ expect(testResponse.turnSignal).to(equal(vehicleDataResult));
+ expect(testResponse.cloudAppVehicleID).to(equal(vehicleDataResult));
+ expect(testResponse.handsOffSteering).to(equal(vehicleDataResult));
+ });
+ });
+ it(@"should set and get OEM Custom Vehicle Data", ^{
+ SDLUnsubscribeVehicleDataResponse *testRequest = [[SDLUnsubscribeVehicleDataResponse alloc] init];
[testRequest setOEMCustomVehicleData:@"customOEMVehicleData" withVehicleDataState:customOEMvehicleDataResult];
expect([testRequest getOEMCustomVehicleData:@"customOEMVehicleData"]).to(equal(customOEMvehicleDataResult));
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDriverDistractionCapabilitySpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDriverDistractionCapabilitySpec.m
new file mode 100644
index 000000000..bd04b06ba
--- /dev/null
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLDriverDistractionCapabilitySpec.m
@@ -0,0 +1,60 @@
+//
+// SDLDriverDistractionCapabilitySpec.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 7/27/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLDriverDistractionCapability.h"
+#import "SDLRPCParameterNames.h"
+
+QuickSpecBegin(SDLDriverDistractionCapabilitySpec)
+
+describe(@"the driver distraction capability struct", ^{
+ __block SDLDriverDistractionCapability *testCapability = nil;
+ __block NSNumber *testMenuLength = @2;
+ __block NSNumber *testSubmenuDepth = @4;
+
+ beforeEach(^{
+ testCapability = [[SDLDriverDistractionCapability alloc] init];
+ });
+
+ describe(@"Getter/Setter Tests", ^ {
+ it(@"Should set and get correctly", ^ {
+ testCapability.menuLength = testMenuLength;
+ testCapability.subMenuDepth = testSubmenuDepth;
+
+ expect(testCapability.menuLength).to(equal(testMenuLength));
+ expect(testCapability.subMenuDepth).to(equal(testSubmenuDepth));
+ });
+
+ it(@"Should get correctly when initialized", ^ {
+ NSDictionary *dict = @{
+ SDLRPCParameterNameMenuLength: testMenuLength,
+ SDLRPCParameterNameSubMenuDepth: testSubmenuDepth
+ };
+ testCapability = [[SDLDriverDistractionCapability alloc] initWithDictionary:dict];
+
+ expect(testCapability.menuLength).to(equal(testMenuLength));
+ expect(testCapability.subMenuDepth).to(equal(testSubmenuDepth));
+ });
+
+ it(@"Should return nil if not set", ^ {
+ expect(testCapability.menuLength).to(beNil());
+ expect(testCapability.subMenuDepth).to(beNil());
+ });
+
+ it(@"should properly init with initWithMenuLength:subMenuDepth:", ^{
+ testCapability = [[SDLDriverDistractionCapability alloc] initWithMenuLength:testMenuLength subMenuDepth:testSubmenuDepth];
+
+ expect(testCapability.menuLength).to(equal(testMenuLength));
+ expect(testCapability.subMenuDepth).to(equal(testSubmenuDepth));
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m
index faad50b3b..bb4f31e36 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLFuelRangeSpec.m
@@ -15,36 +15,80 @@
#import "SDLRPCParameterNames.h"
QuickSpecBegin(SDLFuelRangeSpec)
+const float fuelLevel = 123.45f;
+const float fuelCapacity = 34.56f;
+const float range = 23.0f;
+SDLFuelType type = SDLFuelTypeDiesel;
+SDLComponentVolumeStatus levelState = SDLComponentVolumeStatusAlert;
+SDLCapacityUnit capacityUnit = SDLCapacityUnitKilowatthours;
-describe(@"Getter/Setter Tests", ^ {
- it(@"Should set and get correctly", ^ {
+describe(@"getter/setter tests", ^{
+ context(@"init and assign", ^{
SDLFuelRange *testStruct = [[SDLFuelRange alloc] init];
-
- testStruct.type = SDLFuelTypeDiesel;
- testStruct.range = @45;
-
- expect(testStruct.type).to(equal(SDLFuelTypeDiesel));
- expect(testStruct.range).to(equal(@45));
+ testStruct.type = type;
+ testStruct.range = @(range);
+ testStruct.level = @(fuelLevel);
+ testStruct.levelState = levelState;
+ testStruct.capacity = @(fuelCapacity);
+ testStruct.capacityUnit = capacityUnit;
+
+ it(@"expect all properties to be set properly", ^{
+ expect(testStruct.type).to(equal(type));
+ expect(testStruct.range).to(equal(@(range)));
+ expect(testStruct.level).to(equal(fuelLevel));
+ expect(testStruct.levelState).to(equal(levelState));
+ expect(testStruct.capacity).to(equal(fuelCapacity));
+ expect(testStruct.capacityUnit).to(equal(capacityUnit));
+ });
});
- it(@"Should get correctly when initialized", ^ {
- NSDictionary *dict = @{SDLRPCParameterNameType:SDLFuelTypeLPG,
- SDLRPCParameterNameRange:@23
+ context(@"should get correctly when initialized with dictionary", ^{
+ NSDictionary *dict = @{SDLRPCParameterNameType:type,
+ SDLRPCParameterNameRange:@(range),
+ SDLRPCParameterNameLevel:@(fuelLevel),
+ SDLRPCParameterNameLevelState:levelState,
+ SDLRPCParameterNameCapacity:@(fuelCapacity),
+ SDLRPCParameterNameCapacityUnit:capacityUnit
};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLFuelRange *testStruct = [[SDLFuelRange alloc] initWithDictionary:dict];
#pragma clang diagnostic pop
- expect(testStruct.type).to(equal(SDLFuelTypeLPG));
- expect(testStruct.range).to(equal(@23));
+ it(@"expect all properties to be set properly", ^{
+ expect(testStruct.type).to(equal(type));
+ expect(testStruct.range).to(equal(@(range)));
+ expect(testStruct.level).to(equal(fuelLevel));
+ expect(testStruct.levelState).to(equal(levelState));
+ expect(testStruct.capacity).to(equal(fuelCapacity));
+ expect(testStruct.capacityUnit).to(equal(capacityUnit));
+ });
});
- it(@"Should return nil if not set", ^ {
+ context(@"init", ^{
SDLFuelRange *testStruct = [[SDLFuelRange alloc] init];
- expect(testStruct.type).to(beNil());
- expect(testStruct.range).to(beNil());
+ it(@"expect all properties to be nil", ^{
+ expect(testStruct.type).to(beNil());
+ expect(testStruct.range).to(beNil());
+ expect(testStruct.level).to(beNil());
+ expect(testStruct.levelState).to(beNil());
+ expect(testStruct.capacity).to(beNil());
+ expect(testStruct.capacityUnit).to(beNil());
+ });
+ });
+
+ context(@"initWithType:range:level:levelState:capacity:capacityUnit:", ^{
+ SDLFuelRange *testStruct = [[SDLFuelRange alloc] initWithType:type range:range level:fuelLevel levelState:levelState capacity:fuelCapacity capacityUnit:capacityUnit];
+
+ it(@"expect all properties to be set properly", ^{
+ expect(testStruct.type).to(equal(type));
+ expect(testStruct.range).to(equal(@(range)));
+ expect(testStruct.level).to(equal(fuelLevel));
+ expect(testStruct.levelState).to(equal(levelState));
+ expect(testStruct.capacity).to(equal(fuelCapacity));
+ expect(testStruct.capacityUnit).to(equal(capacityUnit));
+ });
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMICapabilitiesSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMICapabilitiesSpec.m
index 8ecd92e6c..c5c18cd6a 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMICapabilitiesSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLHMICapabilitiesSpec.m
@@ -19,9 +19,11 @@ describe(@"SDLHMICapabilities struct", ^{
__block NSNumber *someVideoStreamState = @NO;
__block NSNumber *someRemoteControlState = @YES;
__block NSNumber *someAppServicesState = @YES;
-
+ __block NSNumber *someDisplaysState = @YES;
+ __block NSNumber *someSeatLocationState = @NO;
+ __block NSNumber *someDriverDistractionState = @NO;
- context(@"When initialized with properties", ^{
+ context(@"when initialized with properties", ^{
beforeEach(^{
testStruct = [[SDLHMICapabilities alloc] init];
testStruct.phoneCall = somePhoneCallState;
@@ -29,6 +31,9 @@ describe(@"SDLHMICapabilities struct", ^{
testStruct.videoStreaming = someVideoStreamState;
testStruct.remoteControl = someRemoteControlState;
testStruct.appServices = someAppServicesState;
+ testStruct.displays = someDisplaysState;
+ testStruct.seatLocation = someSeatLocationState;
+ testStruct.driverDistraction = someDriverDistractionState;
});
it(@"should properly set properties", ^{
@@ -37,22 +42,26 @@ describe(@"SDLHMICapabilities struct", ^{
expect(testStruct.videoStreaming).to(equal(someVideoStreamState));
expect(testStruct.remoteControl).to(equal(someRemoteControlState));
expect(testStruct.appServices).to(equal(someAppServicesState));
+ expect(testStruct.displays).to(equal(someDisplaysState));
+ expect(testStruct.seatLocation).to(equal(someSeatLocationState));
+ expect(testStruct.driverDistraction).to(equal(someDriverDistractionState));
});
});
- context(@"When initialized with a dictionary", ^{
+ context(@"when initialized with a dictionary", ^{
beforeEach(^{
NSDictionary<NSString *, NSNumber *> *structInitDict = @{
SDLRPCParameterNameNavigation: someNavigationState,
SDLRPCParameterNamePhoneCall: somePhoneCallState,
SDLRPCParameterNameVideoStreaming: someVideoStreamState,
SDLRPCParameterNameRemoteControl: someRemoteControlState,
- SDLRPCParameterNameAppServices: someAppServicesState
+ SDLRPCParameterNameAppServices: someAppServicesState,
+ SDLRPCParameterNameDisplays: someDisplaysState,
+ SDLRPCParameterNameSeatLocation: someSeatLocationState,
+ SDLRPCParameterNameDriverDistraction: someDriverDistractionState
};
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
- testStruct = [[SDLHMICapabilities alloc] initWithDictionary:[structInitDict mutableCopy]];
-#pragma clang diagnostic pop
+
+ testStruct = [[SDLHMICapabilities alloc] initWithDictionary:structInitDict];
});
it(@"should properly set properties", ^{
@@ -61,20 +70,44 @@ describe(@"SDLHMICapabilities struct", ^{
expect(testStruct.videoStreaming).to(equal(someVideoStreamState));
expect(testStruct.remoteControl).to(equal(someRemoteControlState));
expect(testStruct.appServices).to(equal(someAppServicesState));
+ expect(testStruct.displays).to(equal(someDisplaysState));
+ expect(testStruct.seatLocation).to(equal(someSeatLocationState));
+ expect(testStruct.driverDistraction).to(equal(someDriverDistractionState));
});
});
- context(@"When not initialized", ^{
- beforeEach(^{
- testStruct = nil;
+ context(@"when initialized", ^{
+ context(@"with no parameters", ^{
+ beforeEach(^{
+ testStruct = [[SDLHMICapabilities alloc] init];
+ });
+
+ it(@"properties should be nil", ^{
+ expect(testStruct.phoneCall).to(beNil());
+ expect(testStruct.navigation).to(beNil());
+ expect(testStruct.videoStreaming).to(beNil());
+ expect(testStruct.remoteControl).to(beNil());
+ expect(testStruct.displays).to(beNil());
+ expect(testStruct.seatLocation).to(beNil());
+ expect(testStruct.appServices).to(beNil());
+ });
});
-
- it(@"properties should be nil", ^{
- expect(testStruct.phoneCall).to(beNil());
- expect(testStruct.navigation).to(beNil());
- expect(testStruct.videoStreaming).to(beNil());
- expect(testStruct.remoteControl).to(beNil());
- expect(testStruct.appServices).to(beNil());
+
+ context(@"with initWithNavigation:phoneCall:videoStreaming:remoteControl:appServices:displays:seatLocation:driverDistraction:", ^{
+ beforeEach(^{
+ testStruct = [[SDLHMICapabilities alloc] initWithNavigation:someNavigationState phoneCall:somePhoneCallState videoStreaming:someVideoStreamState remoteControl:someRemoteControlState appServices:someAppServicesState displays:someDisplaysState seatLocation:someSeatLocationState driverDistraction:someDriverDistractionState];
+ });
+
+ it(@"properties should be nil", ^{
+ expect(testStruct.phoneCall).to(equal(somePhoneCallState));
+ expect(testStruct.navigation).to(equal(someNavigationState));
+ expect(testStruct.videoStreaming).to(equal(someVideoStreamState));
+ expect(testStruct.remoteControl).to(equal(someRemoteControlState));
+ expect(testStruct.appServices).to(equal(someAppServicesState));
+ expect(testStruct.displays).to(equal(someDisplaysState));
+ expect(testStruct.seatLocation).to(equal(someSeatLocationState));
+ expect(testStruct.driverDistraction).to(equal(someDriverDistractionState));
+ });
});
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMenuParamsSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMenuParamsSpec.m
index 95af8629e..2736f3500 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMenuParamsSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLMenuParamsSpec.m
@@ -27,9 +27,9 @@ describe(@"Initialization tests", ^{
});
it(@"should properly initialize initWithDictionary", ^{
- NSMutableDictionary* dict = [@{SDLRPCParameterNameParentId:@(testParentId),
+ NSDictionary *dict = @{SDLRPCParameterNameParentID:@(testParentId),
SDLRPCParameterNamePosition:@(testPosition),
- SDLRPCParameterNameMenuName:testMenuName} mutableCopy];
+ SDLRPCParameterNameMenuName:testMenuName};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
SDLMenuParams* testStruct = [[SDLMenuParams alloc] initWithDictionary:dict];
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSystemCapabilitySpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSystemCapabilitySpec.m
index d41f553b6..68bd020f0 100755
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSystemCapabilitySpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLSystemCapabilitySpec.m
@@ -6,17 +6,18 @@
#import "SDLSystemCapability.h"
#import "SDLAppServicesCapabilities.h"
+#import "SDLDriverDistractionCapability.h"
#import "SDLImageResolution.h"
#import "SDLNavigationCapability.h"
#import "SDLPhoneCapability.h"
-#import "SDLSystemCapabilityType.h"
#import "SDLRemoteControlCapabilities.h"
#import "SDLRPCParameterNames.h"
+#import "SDLSeatLocationCapability.h"
+#import "SDLSystemCapabilityType.h"
#import "SDLVideoStreamingCapability.h"
#import "SDLVideoStreamingCodec.h"
#import "SDLVideoStreamingFormat.h"
#import "SDLVideoStreamingProtocol.h"
-#import "SDLSeatLocationCapability.h"
#import "SDLRPCParameterNames.h"
@@ -29,6 +30,7 @@ describe(@"Getter/Setter Tests", ^ {
__block SDLRemoteControlCapabilities *testRemoteControlCapabilities = nil;
__block SDLVideoStreamingCapability *testVideoStreamingCapability = nil;
__block SDLSeatLocationCapability *testSeatLocationCapability = nil;
+ __block SDLDriverDistractionCapability *testDriverDistractionCapability = nil;
beforeEach(^{
testAppServicesCapabilities = [[SDLAppServicesCapabilities alloc] initWithAppServices:nil];
@@ -37,6 +39,7 @@ describe(@"Getter/Setter Tests", ^ {
testRemoteControlCapabilities = [[SDLRemoteControlCapabilities alloc] initWithClimateControlCapabilities:nil radioControlCapabilities:nil buttonCapabilities:nil seatControlCapabilities:nil audioControlCapabilities:nil hmiSettingsControlCapabilities:nil lightControlCapabilities:nil];
testVideoStreamingCapability = [[SDLVideoStreamingCapability alloc] initWithPreferredResolution:[[SDLImageResolution alloc] initWithWidth:50 height:50] maxBitrate:5 supportedFormats:@[] hapticDataSupported:false diagonalScreenSize:23 pixelPerInch:119 scale:1.4];
testSeatLocationCapability = [[SDLSeatLocationCapability alloc] init];
+ testDriverDistractionCapability = [[SDLDriverDistractionCapability alloc] initWithMenuLength:@2 subMenuDepth:@4];
});
it(@"Should set and get correctly", ^ {
@@ -48,6 +51,7 @@ describe(@"Getter/Setter Tests", ^ {
testStruct.videoStreamingCapability = testVideoStreamingCapability;
testStruct.remoteControlCapability = testRemoteControlCapabilities;
testStruct.seatLocationCapability = testSeatLocationCapability;
+ testStruct.driverDistractionCapability = testDriverDistractionCapability;
expect(testStruct.systemCapabilityType).to(equal(SDLSystemCapabilityTypeNavigation));
expect(testStruct.appServicesCapabilities).to(equal(testAppServicesCapabilities));
@@ -56,17 +60,19 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.videoStreamingCapability).to(equal(testVideoStreamingCapability));
expect(testStruct.remoteControlCapability).to(equal(testRemoteControlCapabilities));
expect(testStruct.seatLocationCapability).to(equal(testSeatLocationCapability));
+ expect(testStruct.driverDistractionCapability).to(equal(testDriverDistractionCapability));
});
it(@"Should get correctly when initialized with a dictionary", ^ {
NSDictionary *dict = @{
- SDLRPCParameterNameSystemCapabilityType:SDLSystemCapabilityTypeNavigation,
- SDLRPCParameterNameAppServicesCapabilities:testAppServicesCapabilities,
- SDLRPCParameterNameNavigationCapability:testNavigationCapability,
- SDLRPCParameterNamePhoneCapability:testPhoneCapability,
- SDLRPCParameterNameRemoteControlCapability:testRemoteControlCapabilities,
- SDLRPCParameterNameVideoStreamingCapability:testVideoStreamingCapability,
- SDLRPCParameterNameSeatLocationCapability:testSeatLocationCapability
+ SDLRPCParameterNameSystemCapabilityType: SDLSystemCapabilityTypeNavigation,
+ SDLRPCParameterNameAppServicesCapabilities: testAppServicesCapabilities,
+ SDLRPCParameterNameNavigationCapability: testNavigationCapability,
+ SDLRPCParameterNamePhoneCapability: testPhoneCapability,
+ SDLRPCParameterNameRemoteControlCapability: testRemoteControlCapabilities,
+ SDLRPCParameterNameVideoStreamingCapability: testVideoStreamingCapability,
+ SDLRPCParameterNameSeatLocationCapability: testSeatLocationCapability,
+ SDLRPCParameterNameDriverDistractionCapability: testDriverDistractionCapability
};
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
@@ -80,6 +86,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(equal(testRemoteControlCapabilities));
expect(testStruct.videoStreamingCapability).to(equal(testVideoStreamingCapability));
expect(testStruct.seatLocationCapability).to(equal(testSeatLocationCapability));
+ expect(testStruct.driverDistractionCapability).to(equal(testDriverDistractionCapability));
});
it(@"Should return nil if not set", ^ {
@@ -92,6 +99,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithAppServicesCapabilities:", ^{
@@ -104,6 +112,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithPhoneCapability:", ^{
@@ -117,6 +126,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithNavigationCapability:", ^{
@@ -130,6 +140,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithVideoStreamingCapability:", ^{
@@ -160,6 +171,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.videoStreamingCapability).to(equal(testVidStruct));
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithRemoteControlCapability:", ^{
@@ -172,6 +184,7 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(equal(testRemoteControlCapabilities));
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(beNil());
});
it(@"should initialize correctly with initWithSeatLocationCapability:", ^{
@@ -184,6 +197,20 @@ describe(@"Getter/Setter Tests", ^ {
expect(testStruct.remoteControlCapability).to(beNil());
expect(testStruct.videoStreamingCapability).to(beNil());
expect(testStruct.seatLocationCapability).to(equal(testSeatLocationCapability));
+ expect(testStruct.driverDistractionCapability).to(beNil());
+ });
+
+ it(@"should initialize correctly with initWithDriverDistractionCapability:", ^{
+ SDLSystemCapability *testStruct = [[SDLSystemCapability alloc] initWithDriverDistractionCapability:testDriverDistractionCapability];
+
+ expect(testStruct.systemCapabilityType).to(equal(SDLSystemCapabilityTypeDriverDistraction));
+ expect(testStruct.appServicesCapabilities).to(beNil());
+ expect(testStruct.navigationCapability).to(beNil());
+ expect(testStruct.phoneCapability).to(beNil());
+ expect(testStruct.remoteControlCapability).to(beNil());
+ expect(testStruct.videoStreamingCapability).to(beNil());
+ expect(testStruct.seatLocationCapability).to(beNil());
+ expect(testStruct.driverDistractionCapability).to(equal(testDriverDistractionCapability));
});
});
diff --git a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m
index fcde49e1e..d8b6e8983 100644
--- a/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m
+++ b/SmartDeviceLinkTests/RPCSpecs/StructSpecs/SDLTextFieldSpec.m
@@ -18,7 +18,7 @@ QuickSpecBegin(SDLTextFieldSpec)
describe(@"Getter/Setter Tests", ^ {
__block SDLTextFieldName testName = SDLTextFieldNameETA;
- __block SDLCharacterSet testCharacterSet = SDLCharacterSetCID1;
+ __block SDLCharacterSet testCharacterSet = SDLCharacterSetUtf8;
__block NSUInteger testWidth = 100;
__block NSUInteger testRows = 4;
diff --git a/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m b/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m
new file mode 100644
index 000000000..e320a76ad
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLCacheFileManagerSpec.m
@@ -0,0 +1,317 @@
+//
+// SDLCacheFileManagerSpec.m
+// SmartDeviceLinkTests
+//
+// Created by James Lapinski on 3/23/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLCacheFileManager.h"
+#import "SDLIconArchiveFile.h"
+#import "SDLOnSystemRequest.h"
+
+@interface SDLCacheFileManager ()
+
++ (nullable NSString *)sdl_writeImage:(UIImage *)icon toFilePath:(NSString *)filePath imageURL:(NSString *)urlString;
+- (void)sdl_downloadIconFromRequestURL:(NSString *)requestURL withCompletionHandler:(ImageRetrievalCompletionHandler)completion;
+
+@property (weak, nonatomic, nullable) NSURLSession *urlSession;
+@property (strong, nonatomic, nullable) NSURLSessionDataTask *dataTask;
+@property (strong, nonatomic) NSFileManager *fileManager;
+
+@end
+
+QuickSpecBegin(SDLCacheFileManagerSpec)
+
+describe(@"a cache file manager", ^{
+ __block SDLCacheFileManager *testManager = nil;
+ __block id testManagerMock = nil;
+ __block NSFileManager *mockFileManager = nil;
+ __block id mockUnarchiver = nil;
+ __block id mockUIImage = nil;
+ __block id mockURLSession = nil;
+ __block id mockArchiver = nil;
+ __block SDLOnSystemRequest *testRequest = nil;
+ __block NSString *testURL = nil;
+ __block SDLOnSystemRequest *expiredTestRequest = nil;
+ __block NSString *testFilePath = nil;
+ __block NSString *expiredTestURL = nil;
+ __block UIImage *testImage = nil;
+ __block SDLIconArchiveFile *testArchiveFile = nil;
+ __block SDLLockScreenIconCache *testIconCache = nil;
+ __block SDLLockScreenIconCache *testExpiredIconCache = nil;
+ __block NSArray<SDLLockScreenIconCache *> *testArchiveFileLockScreenCacheArray = nil;
+
+ beforeEach(^{
+ testManager = [[SDLCacheFileManager alloc] init];
+ testManagerMock = OCMPartialMock(testManager);
+
+ testFilePath = [[NSBundle bundleForClass:self.class] pathForResource:@"testImagePNG" ofType:@"png"];
+ testImage = [UIImage imageNamed:@"testImagePNG" inBundle:[NSBundle bundleForClass:self.class] compatibleWithTraitCollection:nil];
+
+ mockFileManager = OCMStrictClassMock([NSFileManager class]);
+ testManager.fileManager = mockFileManager;
+ mockUnarchiver = OCMClassMock([NSKeyedUnarchiver class]);
+
+ mockUIImage = OCMClassMock([UIImage class]);
+ mockURLSession = OCMClassMock([NSURLSession class]);
+
+ mockArchiver = OCMClassMock([NSKeyedArchiver class]);
+ });
+
+ it(@"should initialize properties", ^{
+ expect(testManager.urlSession).toNot(beNil());
+ expect(testManager.fileManager).toNot(beNil());
+ });
+
+ describe(@"request with existing icon", ^{
+ beforeEach(^{
+ testURL = @"testURL";
+ testRequest = [[SDLOnSystemRequest alloc] init];
+ testRequest.url = testURL;
+ testIconCache = [[SDLLockScreenIconCache alloc] initWithIconUrl:testURL iconFilePath:testFilePath];
+
+ expiredTestURL = @"expiredTestURL";
+ expiredTestRequest = [[SDLOnSystemRequest alloc] init];
+ expiredTestRequest.url = expiredTestURL;
+ testExpiredIconCache = [[SDLLockScreenIconCache alloc] initWithIconUrl:expiredTestURL iconFilePath:testFilePath];
+ testExpiredIconCache.lastModifiedDate = [[NSDate date] dateByAddingTimeInterval:-31*24*60*60];
+
+ testArchiveFileLockScreenCacheArray = @[testIconCache,testExpiredIconCache];
+
+ testArchiveFile = [[SDLIconArchiveFile alloc] init];
+ testArchiveFile.lockScreenIconCaches = testArchiveFileLockScreenCacheArray;
+
+ OCMStub(ClassMethod([mockUnarchiver unarchiveObjectWithFile:[OCMArg any]])).andReturn(testArchiveFile);
+ OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES);
+ });
+
+ context(@"icon is not expired", ^{
+ __block UIImage *resultImage = nil;
+ __block NSError *resultError = nil;
+
+ context(@"failure to retrieve icon", ^{
+ beforeEach(^{
+ OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES);
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+ OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]);
+ OCMStub(ClassMethod([mockUIImage imageWithContentsOfFile:[OCMArg isNotNil]])).andReturn(nil);
+ [testManager retrieveImageForRequest:testRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"should download and return image with no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"retrieve icon success", ^{
+ beforeEach(^{
+ OCMStub(ClassMethod([mockUIImage imageWithContentsOfFile:[OCMArg isNotNil]])).andReturn(testImage);
+ [testManager retrieveImageForRequest:testRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"should return retrieved image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+ });
+
+ context(@"request with expired icon", ^{
+ __block UIImage *resultImage = nil;
+ __block NSError *resultError = nil;
+
+ context(@"image download succeeds", ^{
+ context(@"Failed to update archive object", ^{
+ beforeEach(^{
+ OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(NO);
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+
+ [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).toEventually(equal(testImage));
+ expect(resultError).toEventually(beNil());
+ });
+ });
+
+ context(@"write image to file path succeeds", ^{
+ beforeEach(^{
+ OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES);
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+
+ [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"write image to file path fails", ^{
+ beforeEach(^{
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(nil);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+
+ [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+ });
+
+ context(@"image download fails", ^{
+ __block NSError *imageDownloadError = [NSError errorWithDomain:@"test" code:0 userInfo:nil];
+
+ beforeEach(^{
+ OCMStub([mockURLSession dataTaskWithURL:[OCMArg isNotNil] completionHandler:([OCMArg invokeBlockWithArgs:[NSNull null], [NSNull null], imageDownloadError, nil])]);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:[NSNull null], imageDownloadError, nil])]);
+
+ [testManager retrieveImageForRequest:expiredTestRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return error and no image", ^{
+ expect(resultImage).to(beNil());
+ expect(resultError).toNot(beNil());
+ });
+ });
+ });
+ });
+
+ describe(@"Receiving a new icon", ^{
+ __block SDLOnSystemRequest *newIconRequest = nil;
+ __block NSString *newIconURL = nil;
+
+ beforeEach(^{
+ newIconURL = @"newURL";
+ newIconRequest = [[SDLOnSystemRequest alloc] init];
+ newIconRequest.url = newIconURL;
+ });
+
+ context(@"When no directory is present", ^{
+ __block UIImage *resultImage = nil;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES);
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+ OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]);
+ OCMStub([mockFileManager createDirectoryAtPath:[OCMArg isNotNil] withIntermediateDirectories:[OCMArg any] attributes:[OCMArg any] error:[OCMArg anyObjectRef]]).andReturn(YES);
+ OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(NO);
+
+ [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"When directory is present", ^{
+ __block UIImage *resultImage = nil;
+ __block NSError *resultError = nil;
+
+ beforeEach(^{
+ OCMStub(ClassMethod([mockArchiver archiveRootObject:[OCMArg isNotNil] toFile:[OCMArg isNotNil]])).andReturn(YES);
+ OCMStub(ClassMethod([testManagerMock sdl_writeImage:[OCMArg isNotNil] toFilePath:[OCMArg isNotNil] imageURL:[OCMArg isNotNil]])).andReturn(testFilePath);
+ OCMStub([testManagerMock sdl_downloadIconFromRequestURL:[OCMArg isNotNil] withCompletionHandler:([OCMArg invokeBlockWithArgs:testImage, [NSNull null], nil])]);
+
+ testArchiveFile = [[SDLIconArchiveFile alloc] init];
+ testArchiveFile.lockScreenIconCaches = testArchiveFileLockScreenCacheArray;
+ });
+
+ context(@"no archive file present", ^{
+ beforeEach(^{
+ OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(nil);
+ OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES);
+
+ [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"archive file present", ^{
+ context(@"remove item success", ^{
+ beforeEach(^{
+ OCMStub([mockFileManager removeItemAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(YES);
+ OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(@[@"iconArchiveFile"]);
+ OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES);
+
+ [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+
+ context(@"remove item fails", ^{
+ beforeEach(^{
+ OCMStub([mockFileManager removeItemAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(NO);
+ OCMStub([mockFileManager contentsOfDirectoryAtPath:[OCMArg isNotNil] error:[OCMArg anyObjectRef]]).andReturn(@[@"iconArchiveFile"]);
+ OCMStub([mockFileManager fileExistsAtPath:[OCMArg any]]).andReturn(YES);
+
+ [testManager retrieveImageForRequest:newIconRequest withCompletionHandler:^(UIImage * _Nullable image, NSError * _Nullable error) {
+ resultImage = image;
+ resultError = error;
+ }];
+ });
+
+ it(@"it should return downloaded image and no error", ^{
+ expect(resultImage).to(equal(testImage));
+ expect(resultError).to(beNil());
+ });
+ });
+ });
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLEncryptionLifecycleManagerSpec.m b/SmartDeviceLinkTests/SDLEncryptionLifecycleManagerSpec.m
index 5ae9101a3..15295118b 100644
--- a/SmartDeviceLinkTests/SDLEncryptionLifecycleManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLEncryptionLifecycleManagerSpec.m
@@ -11,30 +11,34 @@
#import <OCMock/OCMock.h>
#import "SDLDisplayCapabilities.h"
+#import "SDLConfiguration.h"
+#import "SDLEncryptionConfiguration.h"
+#import "SDLEncryptionLifecycleManager.h"
+#import "SDLEncryptionManagerConstants.h"
+#import "SDLFakeSecurityManager.h"
#import "SDLGlobals.h"
+#import "SDLLifecycleConfiguration.h"
#import "SDLOnHMIStatus.h"
#import "SDLProtocol.h"
#import "SDLRegisterAppInterfaceResponse.h"
#import "SDLRPCNotificationNotification.h"
#import "SDLRPCResponseNotification.h"
#import "SDLStateMachine.h"
-#import "SDLEncryptionConfiguration.h"
-#import "SDLEncryptionLifecycleManager.h"
#import "SDLV2ProtocolHeader.h"
#import "SDLV2ProtocolMessage.h"
+#import "SDLVehicleType.h"
#import "TestConnectionManager.h"
-#import "SDLFakeSecurityManager.h"
-#import "SDLEncryptionManagerConstants.h"
@interface SDLEncryptionLifecycleManager()
@property (strong, nonatomic, readwrite) SDLStateMachine *encryptionStateMachine;
+@property (nonatomic, strong) NSMutableDictionary<NSString *, Class> *securityManagers;
@end
QuickSpecBegin(SDLEncryptionLifecycleManagerSpec)
describe(@"the encryption lifecycle manager", ^{
__block SDLEncryptionLifecycleManager *encryptionLifecycleManager = nil;
- __block SDLEncryptionConfiguration *testConfiguration = nil;
+ __block SDLConfiguration *testConfiguration = nil;
__block TestConnectionManager *testConnectionManager = nil;
__block SDLFakeSecurityManager *testFakeSecurityManager = nil;
__block NSOperationQueue *testRPCOperationQueue = nil;
@@ -42,14 +46,18 @@ describe(@"the encryption lifecycle manager", ^{
beforeEach(^{
testConnectionManager = [[TestConnectionManager alloc] init];
testFakeSecurityManager = [[SDLFakeSecurityManager alloc] init];
- testConfiguration = [[SDLEncryptionConfiguration alloc] initWithSecurityManagers:@[testFakeSecurityManager.class] delegate:nil];
+
+ SDLEncryptionConfiguration *encryptionConfig = [[SDLEncryptionConfiguration alloc] initWithSecurityManagers:@[testFakeSecurityManager.class] delegate:nil];
+ SDLLifecycleConfiguration *lifecycleConfig = [SDLLifecycleConfiguration defaultConfigurationWithAppName:@"Test" fullAppId:@"1234"];
+ testConfiguration = [[SDLConfiguration alloc] initWithLifecycle:lifecycleConfig lockScreen:nil logging:nil fileManager:nil encryption:encryptionConfig];
testRPCOperationQueue = OCMClassMock([NSOperationQueue class]);
encryptionLifecycleManager = [[SDLEncryptionLifecycleManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration];
});
it(@"should initialize properties", ^{
- expect(@(encryptionLifecycleManager.isEncryptionReady)).to(equal(@NO));
+ expect(encryptionLifecycleManager.isEncryptionReady).to(beFalse());
+ expect(encryptionLifecycleManager.securityManagers).toNot(beEmpty());
});
describe(@"when started", ^{
@@ -65,8 +73,8 @@ describe(@"the encryption lifecycle manager", ^{
[encryptionLifecycleManager startWithProtocol:protocolMock];
});
- it(@"should not be ready to stream", ^{
- expect(@(encryptionLifecycleManager.isEncryptionReady)).to(equal(@NO));
+ it(@"should not be ready to encrypt", ^{
+ expect(encryptionLifecycleManager.isEncryptionReady).to(beFalse());
});
describe(@"after receiving an RPC Start ACK", ^{
@@ -83,7 +91,7 @@ describe(@"the encryption lifecycle manager", ^{
testRPCHeader.serviceType = SDLServiceTypeRPC;
testRPCMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRPCHeader andPayload:nil];
- [encryptionLifecycleManager handleProtocolStartServiceACKMessage:testRPCMessage];
+ [encryptionLifecycleManager protocol:protocolMock didReceiveStartServiceACK:testRPCMessage];
});
it(@"should have set all the right properties", ^{
@@ -106,7 +114,7 @@ describe(@"the encryption lifecycle manager", ^{
testRPCHeader.serviceType = SDLServiceTypeRPC;
testRPCMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRPCHeader andPayload:nil];
- [encryptionLifecycleManager handleProtocolEndServiceACKMessage:testRPCMessage];
+ [encryptionLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testRPCMessage];
});
it(@"should have set all the right properties", ^{
@@ -128,7 +136,7 @@ describe(@"the encryption lifecycle manager", ^{
testRPCHeader.serviceType = SDLServiceTypeRPC;
testRPCMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRPCHeader andPayload:nil];
- [encryptionLifecycleManager handleProtocolEndServiceACKMessage:testRPCMessage];
+ [encryptionLifecycleManager protocol:protocolMock didReceiveEndServiceACK:testRPCMessage];
});
it(@"should have set all the right properties", ^{
@@ -150,13 +158,55 @@ describe(@"the encryption lifecycle manager", ^{
testRPCHeader.serviceType = SDLServiceTypeRPC;
testRPCMessage = [[SDLV2ProtocolMessage alloc] initWithHeader:testRPCHeader andPayload:nil];
- [encryptionLifecycleManager handleProtocolEndServiceNAKMessage:testRPCMessage];
+ [encryptionLifecycleManager protocol:protocolMock didReceiveEndServiceNAK:testRPCMessage];
});
it(@"should have set all the right properties", ^{
expect(encryptionLifecycleManager.encryptionStateMachine.currentState).to(equal(SDLEncryptionLifecycleManagerStateStopped));
});
});
+
+ describe(@"when a register app interface response is received", ^{
+ beforeEach(^{
+ OCMExpect([protocolMock setSecurityManager:[OCMArg any]]);
+
+ SDLRegisterAppInterfaceResponse *rair = [[SDLRegisterAppInterfaceResponse alloc] init];
+ rair.vehicleType = [[SDLVehicleType alloc] init];
+ rair.vehicleType.make = @"SDL";
+ SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveRegisterAppInterfaceResponse object:nil rpcResponse:rair];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should set the protocol's security manager", ^{
+ OCMVerifyAll((id)protocolMock);
+ });
+ });
+ });
+
+ describe(@"when stopped", ^{
+ it(@"if the encryption manager is ready it should transition to the stopped state", ^{
+ [encryptionLifecycleManager.encryptionStateMachine setToState:SDLEncryptionLifecycleManagerStateReady fromOldState:nil callEnterTransition:NO];
+
+ [encryptionLifecycleManager stop];
+
+ expect(encryptionLifecycleManager.encryptionStateMachine.currentState).to(equal(SDLEncryptionLifecycleManagerStateStopped));
+ });
+
+ it(@"if the encryption manager is starting it should stay in the stopped state", ^{
+ [encryptionLifecycleManager.encryptionStateMachine setToState:SDLEncryptionLifecycleManagerStateStarting fromOldState:nil callEnterTransition:NO];
+
+ [encryptionLifecycleManager stop];
+
+ expect(encryptionLifecycleManager.encryptionStateMachine.currentState).to(equal(SDLEncryptionLifecycleManagerStateStopped));
+ });
+
+ it(@"if the encryption manager is stopped it should stay in the stopped state", ^{
+ [encryptionLifecycleManager.encryptionStateMachine setToState:SDLEncryptionLifecycleManagerStateStopped fromOldState:nil callEnterTransition:NO];
+
+ [encryptionLifecycleManager stop];
+
+ expect(encryptionLifecycleManager.encryptionStateMachine.currentState).to(equal(SDLEncryptionLifecycleManagerStateStopped));
+ });
});
});
diff --git a/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m b/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m
index f79085706..cc662f47c 100644
--- a/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m
+++ b/SmartDeviceLinkTests/SDLH264VideoEncoderSpec.m
@@ -18,6 +18,12 @@
#import "SDLRTPH264Packetizer.h"
#import "SDLVideoStreamingProtocol.h"
+@interface SDLH264VideoEncoder ()
+@property (assign, nonatomic) NSUInteger currentFrameNumber;
+@property (assign, nonatomic) double timestampOffset;
+@property (assign, nonatomic, nullable) VTCompressionSessionRef compressionSession;
+@end
+
QuickSpecBegin(SDLH264VideoEncoderSpec)
describe(@"a video encoder", ^{
@@ -55,9 +61,11 @@ describe(@"a video encoder", ^{
beforeEach(^{
[testVideoEncoder stop];
});
-
- it(@"should have a nil pixel buffer pool", ^{
- expect(@(testVideoEncoder.pixelBufferPool == NULL)).to(equal(@YES));
+
+ it(@"should reset the saved properties", ^{
+ expect(testVideoEncoder.currentFrameNumber).to(equal(0));
+ expect(testVideoEncoder.timestampOffset).to(equal(0.0));
+ expect((id)testVideoEncoder.compressionSession).to(beNil());
});
});
});
diff --git a/SmartDeviceLinkTests/SDLPermissionElementSpec.m b/SmartDeviceLinkTests/SDLPermissionElementSpec.m
new file mode 100644
index 000000000..2fac3a7c2
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLPermissionElementSpec.m
@@ -0,0 +1,59 @@
+//
+// SDLPermissionElementSpec.m
+// SmartDeviceLinkTests
+//
+// Created by James Lapinski on 6/24/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLParameterPermissions.h"
+#import "SDLPermissionElement.h"
+
+QuickSpecBegin(SDLPermissionElementSpec)
+
+describe(@"A permission element", ^{
+ __block NSString *testRPCName1 = nil;
+ __block NSArray<NSString *> *parameterPermissions = nil;
+ __block NSString *testParameterRPCName = nil;
+
+ beforeEach(^{
+ testRPCName1 = @"testRPCName1";
+ testParameterRPCName = @"testParameterRPCName";
+ parameterPermissions = @[testParameterRPCName];
+ });
+
+ describe(@"it should initialize correctly", ^{
+ __block SDLPermissionElement *testPermissionElement = nil;
+
+ beforeEach(^{
+ testPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:testRPCName1 parameterPermissions:parameterPermissions];
+ });
+
+ it(@"should set the rpcName and parameterPermissions correctly", ^{
+ expect(testPermissionElement.rpcName).to(equal(testRPCName1));
+ expect(testPermissionElement.parameterPermissions).to(equal(parameterPermissions));
+ });
+ });
+
+ describe(@"copying a permission element", ^{
+ __block SDLPermissionElement *testPermissionElement = nil;
+ __block SDLPermissionElement *testPermissionElementCopy = nil;
+
+ beforeEach(^{
+ testPermissionElement = [[SDLPermissionElement alloc] initWithRPCName:testRPCName1 parameterPermissions:parameterPermissions];
+ testPermissionElementCopy = [testPermissionElement copy];
+ });
+
+ it(@"should copy correctly", ^{
+ expect(testPermissionElementCopy).toNot(beIdenticalTo(testPermissionElement));
+ expect(testPermissionElementCopy.rpcName).to(equal(testPermissionElement.rpcName));
+ expect(testPermissionElementCopy.parameterPermissions).to(equal(testPermissionElement.parameterPermissions));
+ });
+ });
+});
+
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m b/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m
index e68db2e7d..604482751 100644
--- a/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m
+++ b/SmartDeviceLinkTests/SDLRPCFunctionNamesSpec.m
@@ -29,7 +29,10 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLRPCFunctionNameDeleteSubMenu).to(equal(@"DeleteSubMenu"));
expect(SDLRPCFunctionNameDiagnosticMessage).to(equal(@"DiagnosticMessage"));
expect(SDLRPCFunctionNameDialNumber).to(equal(@"DialNumber"));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLRPCFunctionNameEncodedSyncPData).to(equal(@"EncodedSyncPData"));
+#pragma clang diagnostic pop
expect(SDLRPCFunctionNameEndAudioPassThru).to(equal(@"EndAudioPassThru"));
expect(SDLRPCFunctionNameGenericResponse).to(equal(@"GenericResponse"));
expect(SDLRPCFunctionNameGetAppServiceData).to(equal(@"GetAppServiceData"));
@@ -47,7 +50,10 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLRPCFunctionNameOnButtonPress).to(equal(@"OnButtonPress"));
expect(SDLRPCFunctionNameOnCommand).to(equal(@"OnCommand"));
expect(SDLRPCFunctionNameOnDriverDistraction).to(equal(@"OnDriverDistraction"));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLRPCFunctionNameOnEncodedSyncPData).to(equal(@"OnEncodedSyncPData"));
+#pragma clang diagnostic pop
expect(SDLRPCFunctionNameOnHashChange).to(equal(@"OnHashChange"));
expect(SDLRPCFunctionNameOnHMIStatus).to(equal(@"OnHMIStatus"));
expect(SDLRPCFunctionNameOnInteriorVehicleData).to(equal(@"OnInteriorVehicleData"));
@@ -55,7 +61,10 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLRPCFunctionNameOnLanguageChange).to(equal(@"OnLanguageChange"));
expect(SDLRPCFunctionNameOnPermissionsChange).to(equal(@"OnPermissionsChange"));
expect(SDLRPCFunctionNameOnRCStatus).to(equal(@"OnRCStatus"));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLRPCFunctionNameOnSyncPData).to(equal(@"OnSyncPData"));
+#pragma clang diagnostic pop
expect(SDLRPCFunctionNameOnSystemCapabilityUpdated).to(equal(@"OnSystemCapabilityUpdated"));
expect(SDLRPCFunctionNameOnSystemRequest).to(equal(@"OnSystemRequest"));
expect(SDLRPCFunctionNameOnTBTClientState).to(equal(@"OnTBTClientState"));
@@ -86,7 +95,10 @@ describe(@"Individual Enum Value Tests", ^ {
expect(SDLRPCFunctionNameSubscribeButton).to(equal(@"SubscribeButton"));
expect(SDLRPCFunctionNameSubscribeVehicleData).to(equal(@"SubscribeVehicleData"));
expect(SDLRPCFunctionNameSubscribeWayPoints).to(equal(@"SubscribeWayPoints"));
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
expect(SDLRPCFunctionNameSyncPData).to(equal(@"SyncPData"));
+#pragma clang diagnostic pop
expect(SDLRPCFunctionNameSystemRequest).to(equal(@"SystemRequest"));
expect(SDLRPCFunctionNameUnpublishAppService).to(equal(@"UnpublishAppService"));
expect(SDLRPCFunctionNameUnregisterAppInterface).to(equal(@"UnregisterAppInterface"));
diff --git a/SmartDeviceLinkTests/SDLRPCPermissionStatusSpec.m b/SmartDeviceLinkTests/SDLRPCPermissionStatusSpec.m
new file mode 100644
index 000000000..f0c0082c5
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLRPCPermissionStatusSpec.m
@@ -0,0 +1,43 @@
+//
+// SDLRPCPermissionStatusSpec.m
+// SmartDeviceLinkTests
+//
+// Created by James Lapinski on 6/29/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLRPCPermissionStatus.h"
+
+QuickSpecBegin(SDLRPCPermissionStatusSpec)
+
+describe(@"A rpc permission status", ^{
+ __block NSString *testRPCName = nil;
+ __block NSString *testParameterName = nil;
+ __block BOOL isRPCAllowed = NO;
+ __block NSMutableDictionary<NSString *,NSNumber *> *allowedParameters = nil;
+
+ beforeEach(^{
+ testRPCName = @"testRPCName";
+ testParameterName = @"testParameterRPCName";
+ allowedParameters = [@{ testParameterName: @0 } mutableCopy];
+ });
+
+ describe(@"it should initialize correctly", ^{
+ __block SDLRPCPermissionStatus *testSDLRPCPermissionStatusSpec = nil;
+
+ beforeEach(^{
+ testSDLRPCPermissionStatusSpec = [[SDLRPCPermissionStatus alloc] initWithRPCName:testRPCName isRPCAllowed:isRPCAllowed rpcParameters:allowedParameters];
+ });
+
+ it(@"should set rpcName, isRPCAllowed, rpcParameters correctly", ^{
+ expect(testSDLRPCPermissionStatusSpec.rpcName).to(equal(testRPCName));
+ expect(testSDLRPCPermissionStatusSpec.isRPCAllowed).to(equal(isRPCAllowed));
+ expect(testSDLRPCPermissionStatusSpec.rpcParameters[testParameterName]).to(equal(@NO));
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLSoftButtonReplaceOperationSpec.m b/SmartDeviceLinkTests/SDLSoftButtonReplaceOperationSpec.m
index f2b09c66e..623ec427c 100644
--- a/SmartDeviceLinkTests/SDLSoftButtonReplaceOperationSpec.m
+++ b/SmartDeviceLinkTests/SDLSoftButtonReplaceOperationSpec.m
@@ -21,7 +21,7 @@ describe(@"a soft button replace operation", ^{
__block SDLSoftButtonReplaceOperation *testOp = nil;
__block TestConnectionManager *testConnectionManager = nil;
- __block SDLFileManager *testFileManager = nil;
+ __block id testFileManager = nil;
__block BOOL hasCalledOperationCompletionHandler = NO;
__block NSError *resultError = nil;
@@ -33,15 +33,20 @@ describe(@"a soft button replace operation", ^{
__block NSString *object1State2Text = @"O1S2 Text";
__block SDLSoftButtonState *object1State1 = nil;
__block SDLSoftButtonState *object1State2 = nil;
- __block SDLSoftButtonObject *button1 = nil;
+ __block SDLSoftButtonObject *buttonWithText = nil;
__block NSString *object2Name = @"O2 Name";
__block NSString *object2State1Name = @"O2S1 Name";
+ __block NSString *object2State2Name = @"O2S2 Name";
__block NSString *object2State1Text = @"O2S1 Text";
+ __block NSString *object2State2Text = @"O2S2 Text";
__block NSString *object2State1ArtworkName = @"O2S1 Artwork";
+ __block NSString *object2State2ArtworkName = @"O2S2 Artwork";
__block SDLArtwork *object2State1Art = nil;
+ __block SDLArtwork *object2State2Art = nil;
__block SDLSoftButtonState *object2State1 = nil;
- __block SDLSoftButtonObject *button2 = nil;
+ __block SDLSoftButtonState *object2State2 = nil;
+ __block SDLSoftButtonObject *buttonWithTextAndImage = nil;
__block NSString *object3Name = @"O3 Name";
__block NSString *object3State1Name = @"O3S1 Name";
@@ -49,14 +54,30 @@ describe(@"a soft button replace operation", ^{
__block NSString *object3State1IconName = SDLStaticIconNameRSS;
__block SDLArtwork *object3State1Art = nil;
__block SDLSoftButtonState *object3State1 = nil;
- __block SDLSoftButtonObject *button3 = nil;
+ __block SDLSoftButtonObject *buttonWithTextAndStaticImage = nil;
__block NSString *object4Name = @"O4 Name";
__block NSString *object4State1Name = @"O4S1 Name";
__block NSString *object4State1IconName = SDLStaticIconNameAlbum;
__block SDLArtwork *object4State1Art = nil;
__block SDLSoftButtonState *object4State1 = nil;
- __block SDLSoftButtonObject *button4 = nil;
+ __block SDLSoftButtonObject *buttonWithImage = nil;
+
+ __block NSString *object5Name = @"O5 Name";
+ __block NSString *object5State1Name = @"O5S1 Name";
+ __block NSString *object5State2Name = @"O5S2 Name";
+ __block NSString *object5State3Name = @"O5S3 Name";
+ __block NSString *object5State2IconName = @"O5S2 Name";
+ __block NSString *object5State3IconName = @"O5S3 Name";
+ __block NSString *object5State1Text = @"O5S1 Text";
+ __block NSString *object5State2Text = @"O5S2 Text";
+ __block NSString *object5State3Text = @"O5S3 Text";
+ __block SDLArtwork *object5State2Art = nil;
+ __block SDLArtwork *object5State3Art = nil;
+ __block SDLSoftButtonState *object5State1 = nil;
+ __block SDLSoftButtonState *object5State2 = nil;
+ __block SDLSoftButtonState *object5State3 = nil;
+ __block SDLSoftButtonObject *buttonWithTextAndImage2 = nil;
__block NSString *testMainField1 = @"Test main field 1";
@@ -68,25 +89,32 @@ describe(@"a soft button replace operation", ^{
hasCalledOperationCompletionHandler = NO;
testConnectionManager = [[TestConnectionManager alloc] init];
- testFileManager = OCMClassMock([SDLFileManager class]);
+ testFileManager = OCMStrictClassMock([SDLFileManager class]);
object1State1 = [[SDLSoftButtonState alloc] initWithStateName:object1State1Name text:object1State1Text artwork:nil];
object1State2 = [[SDLSoftButtonState alloc] initWithStateName:object1State2Name text:object1State2Text artwork:nil];
- button1 = [[SDLSoftButtonObject alloc] initWithName:object1Name state:object1State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
+ buttonWithText = [[SDLSoftButtonObject alloc] initWithName:object1Name state:object1State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
object2State1Art = [[SDLArtwork alloc] initWithData:[@"TestData" dataUsingEncoding:NSUTF8StringEncoding] name:object2State1ArtworkName fileExtension:@"png" persistent:YES];
+ object2State2Art = [[SDLArtwork alloc] initWithData:[@"TestData2" dataUsingEncoding:NSUTF8StringEncoding] name:object2State2ArtworkName fileExtension:@"png" persistent:YES];
object2State1 = [[SDLSoftButtonState alloc] initWithStateName:object2State1Name text:object2State1Text artwork:object2State1Art];
- button2 = [[SDLSoftButtonObject alloc] initWithName:object2Name state:object2State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
+ object2State2 = [[SDLSoftButtonState alloc] initWithStateName:object2State2Name text:object2State2Text artwork:object2State2Art];
+ buttonWithTextAndImage = [[SDLSoftButtonObject alloc] initWithName:object2Name states:@[object2State1, object2State2] initialStateName:object2State1.name handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
object3State1Art = [[SDLArtwork alloc] initWithStaticIcon:object3State1IconName];
object3State1 = [[SDLSoftButtonState alloc] initWithStateName:object3State1Name text:object3State1Text artwork:object3State1Art];
- button3 = [[SDLSoftButtonObject alloc] initWithName:object3Name state:object3State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
+ buttonWithTextAndStaticImage = [[SDLSoftButtonObject alloc] initWithName:object3Name state:object3State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
object4State1Art = [[SDLArtwork alloc] initWithStaticIcon:object4State1IconName];
object4State1 = [[SDLSoftButtonState alloc] initWithStateName:object4State1Name text:nil artwork:object4State1Art];;
- button4 = [[SDLSoftButtonObject alloc] initWithName:object4Name state:object4State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];;
+ buttonWithImage = [[SDLSoftButtonObject alloc] initWithName:object4Name state:object4State1 handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
- OCMStub([testFileManager uploadArtworks:[OCMArg any] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+ object5State2Art = [[SDLArtwork alloc] initWithData:[@"object5State2Art" dataUsingEncoding:NSUTF8StringEncoding] name:object5State2IconName fileExtension:@"png" persistent:YES];
+ object5State3Art = [[SDLArtwork alloc] initWithData:[@"object5State3Art" dataUsingEncoding:NSUTF8StringEncoding] name:object5State3IconName fileExtension:@"png" persistent:YES];
+ object5State1 = [[SDLSoftButtonState alloc] initWithStateName:object5State1Name text:object5State1Text artwork:nil];
+ object5State2 = [[SDLSoftButtonState alloc] initWithStateName:object5State2Name text:object5State2Text artwork:object5State2Art];
+ object5State3 = [[SDLSoftButtonState alloc] initWithStateName:object5State3Name text:object5State3Text artwork:object5State3Art];
+ buttonWithTextAndImage2 = [[SDLSoftButtonObject alloc] initWithName:object5Name states:@[object5State1, object5State2, object5State3] initialStateName:object5State1.name handler:^(SDLOnButtonPress * _Nullable buttonPress, SDLOnButtonEvent * _Nullable buttonEvent) {}];
successResponse = [[SDLRPCResponse alloc] init];
successResponse.success = @YES;
@@ -99,23 +127,29 @@ describe(@"a soft button replace operation", ^{
it(@"should have a priority of 'normal'", ^{
testOp = [[SDLSoftButtonReplaceOperation alloc] init];
-
expect(@(testOp.queuePriority)).to(equal(@(NSOperationQueuePriorityNormal)));
});
describe(@"running the operation", ^{
context(@"without artworks", ^{
+ __block NSArray<SDLSoftButtonObject *> *testSoftButtonObjects = nil;
+ __block SDLSoftButtonCapabilities *capabilities = nil;
+
beforeEach(^{
- SDLSoftButtonCapabilities *capabilities = [[SDLSoftButtonCapabilities alloc] init];
+ testSoftButtonObjects = @[buttonWithText];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
+
+ capabilities = [[SDLSoftButtonCapabilities alloc] init];
capabilities.imageSupported = @YES;
+ });
- NSArray<SDLSoftButtonObject *> *testSoftButtonObjects = @[button1];
+ it(@"should send the correct RPCs", ^{
+ OCMReject([testFileManager uploadArtworks:[OCMArg any] progressHandler:nil completionHandler:nil]);
- testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
[testOp start];
- });
- it(@"should send the correct RPCs", ^{
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(1));
expect(sentRequests.firstObject.mainField1).to(equal(testMainField1));
@@ -126,7 +160,11 @@ describe(@"a soft button replace operation", ^{
expect(sentRequests.firstObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeText));
});
- context(@"When a response is received to the text upload", ^{
+ context(@"When a response is received to the upload", ^{
+ beforeEach(^{
+ [testOp start];
+ });
+
it(@"should finish the operation on a successful response", ^{
[testConnectionManager respondToLastRequestWithResponse:successResponse];
@@ -145,25 +183,27 @@ describe(@"a soft button replace operation", ^{
context(@"with artworks", ^{
__block NSArray<SDLSoftButtonObject *> *testSoftButtonObjects = nil;
+ __block SDLSoftButtonCapabilities *capabilities = nil;
beforeEach(^{
- testSoftButtonObjects = @[button1, button2];
+ testSoftButtonObjects = @[buttonWithText, buttonWithTextAndImage];
});
context(@"but the HMI does not support artworks", ^{
beforeEach(^{
- SDLSoftButtonCapabilities *capabilities = [[SDLSoftButtonCapabilities alloc] init];
+ capabilities = [[SDLSoftButtonCapabilities alloc] init];
capabilities.imageSupported = @NO;
testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
- [testOp start];
- });
-
- it(@"should not upload any artworks", ^{
- OCMReject([testFileManager uploadArtworks:[OCMArg any] completionHandler:[OCMArg any]]);
});
it(@"should send the button text", ^{
+ OCMReject([testFileManager uploadArtworks:[OCMArg any] progressHandler:nil completionHandler:nil]);
+
+ [testOp start];
+
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(1));
expect(sentRequests.firstObject.mainField1).to(equal(testMainField1));
@@ -177,7 +217,11 @@ describe(@"a soft button replace operation", ^{
expect(sentRequests.firstObject.softButtons.lastObject.type).to(equal(SDLSoftButtonTypeText));
});
- context(@"When a response is received to the text upload", ^{
+ context(@"When a response is received to the upload", ^{
+ beforeEach(^{
+ [testOp start];
+ });
+
it(@"should finish the operation on a successful response", ^{
[testConnectionManager respondToLastRequestWithResponse:successResponse];
@@ -195,52 +239,49 @@ describe(@"a soft button replace operation", ^{
});
context(@"but the HMI does not support artworks and some buttons are image-only", ^{
- __block NSArray<SDLSoftButtonObject *> *testImageOnlySoftButtonObjects = nil;
-
beforeEach(^{
- testImageOnlySoftButtonObjects = @[button3, button4];
- });
+ testSoftButtonObjects = @[buttonWithTextAndStaticImage, buttonWithImage];
- beforeEach(^{
- SDLSoftButtonCapabilities *capabilities = [[SDLSoftButtonCapabilities alloc] init];
+ capabilities = [[SDLSoftButtonCapabilities alloc] init];
capabilities.imageSupported = @NO;
- testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testImageOnlySoftButtonObjects mainField1:testMainField1];
- [testOp start];
- });
-
- it(@"should not send artworks", ^{
- OCMReject([testFileManager uploadArtworks:[OCMArg any] completionHandler:[OCMArg any]]);
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
});
it(@"should not send any buttons", ^{
+ OCMReject([testFileManager uploadArtworks:[OCMArg any] progressHandler:nil completionHandler:nil]);
+
+ [testOp start];
+
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(0));
- });
- it(@"should have set the operation to finished", ^ {
expect(testOp.isFinished).to(beTrue());
});
});
- context(@"and the HMI supports artworks", ^{
- __block SDLSoftButtonCapabilities *buttonCapabilities = nil;
-
+ context(@"and the module supports artworks", ^{
beforeEach(^{
- buttonCapabilities = [[SDLSoftButtonCapabilities alloc] init];
- buttonCapabilities.imageSupported = @YES;
+ capabilities = [[SDLSoftButtonCapabilities alloc] init];
+ capabilities.imageSupported = @YES;
});
context(@"when artworks are already on the system", ^{
beforeEach(^{
OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(YES);
- testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:buttonCapabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
- [testOp start];
+ testSoftButtonObjects = @[buttonWithText, buttonWithTextAndImage];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
});
it(@"should not upload artworks", ^{
- OCMReject([testFileManager uploadArtworks:[OCMArg any] completionHandler:[OCMArg any]]);
+ OCMReject([testFileManager uploadArtworks:[OCMArg any] progressHandler:nil completionHandler:nil]);
+
+ [testOp start];
+
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(1));
@@ -255,7 +296,11 @@ describe(@"a soft button replace operation", ^{
expect(sentRequests.firstObject.softButtons.lastObject.type).to(equal(SDLSoftButtonTypeBoth));
});
- context(@"When a response is received to the text upload", ^{
+ context(@"When a response is received to the upload", ^{
+ beforeEach(^{
+ [testOp start];
+ });
+
it(@"should finish the operation on a successful response", ^{
[testConnectionManager respondToLastRequestWithResponse:successResponse];
@@ -273,23 +318,23 @@ describe(@"a soft button replace operation", ^{
});
context(@"when the artworks need uploading", ^{
- __block SDLSoftButtonCapabilities *buttonCapabilities = nil;
-
beforeEach(^{
- buttonCapabilities = [[SDLSoftButtonCapabilities alloc] init];
- buttonCapabilities.imageSupported = @YES;
+ OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO);
});
context(@"when artworks are static icons", ^{
beforeEach(^{
- testSoftButtonObjects = @[button3];
+ testSoftButtonObjects = @[buttonWithTextAndStaticImage];
- testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:buttonCapabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
- [testOp start];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
});
it(@"should skip uploading artwork", ^{
- OCMReject([testFileManager uploadArtwork:[OCMArg any] completionHandler:[OCMArg any]]);
+ OCMReject([testFileManager uploadArtworks:[OCMArg any] progressHandler:nil completionHandler:nil]);
+
+ [testOp start];
+
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(1));
@@ -301,7 +346,11 @@ describe(@"a soft button replace operation", ^{
expect(sentRequests.firstObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeBoth));
});
- context(@"When a response is received to the text upload", ^{
+ context(@"When a response is received to the upload", ^{
+ beforeEach(^{
+ [testOp start];
+ });
+
it(@"should finish the operation on a successful response", ^{
[testConnectionManager respondToLastRequestWithResponse:successResponse];
@@ -318,20 +367,20 @@ describe(@"a soft button replace operation", ^{
});
});
- context(@"when artwork are not already on the system", ^{
- beforeEach(^{
- OCMStub([testFileManager hasUploadedFile:[OCMArg isNotNil]]).andReturn(NO);
-
- testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:buttonCapabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
+ context(@"when artworks are dynamic icons", ^{
+ it(@"should upload all artworks", ^{
+ // Check that the artworks in the initial button states are uploaded
+ OCMExpect([testFileManager uploadArtworks:@[buttonWithTextAndImage.states[0].artwork] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+ testSoftButtonObjects = @[buttonWithText, buttonWithTextAndImage];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
[testOp start];
- });
-
- it(@"should upload artworks", ^{
- OCMVerify([testFileManager uploadArtworks:[OCMArg checkWithBlock:^BOOL(id obj) {
- NSArray<SDLArtwork *> *artworks = (NSArray<SDLArtwork *> *)obj;
- return (artworks.count == 1);
- }] progressHandler:[OCMArg any] completionHandler:[OCMArg any]]);
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+ // Check that the artworks in the other states (i.e. the non-first states) are uploaded
+ OCMExpect([testFileManager uploadArtworks:@[buttonWithTextAndImage.states[1].artwork] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+ [testConnectionManager respondToLastRequestWithResponse:successResponse];
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
// Both the text only buttons and the image buttons should be sent
NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
expect(sentRequests).to(haveCount(2));
@@ -350,23 +399,76 @@ describe(@"a soft button replace operation", ^{
expect(sentRequests.lastObject.softButtons).to(haveCount(2));
expect(sentRequests.lastObject.softButtons.firstObject.text).to(equal(object1State1Text));
expect(sentRequests.lastObject.softButtons.firstObject.image).to(beNil());
- expect(sentRequests.firstObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeText));
+ expect(sentRequests.lastObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeText));
expect(sentRequests.lastObject.softButtons.lastObject.text).to(equal(object2State1Text));
expect(sentRequests.lastObject.softButtons.lastObject.image).toNot(beNil());
expect(sentRequests.lastObject.softButtons.lastObject.type).to(equal(SDLSoftButtonTypeBoth));
});
- context(@"When a response is received to the text upload", ^{
+ it(@"should upload all artworks even if the initial state does not have artworks", ^{
+ OCMReject([testFileManager uploadFiles:[OCMArg any] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+
+ // buttonWithTextAndImage2 has text in the first state and an text and image in the second & third states
+ testSoftButtonObjects = @[buttonWithTextAndStaticImage, buttonWithTextAndImage2];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
+ [testOp start];
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
+ NSArray<SDLArtwork *> *testArtworkUploads = @[buttonWithTextAndImage2.states[1].artwork, buttonWithTextAndImage2.states[2].artwork];
+ OCMExpect([testFileManager uploadArtworks:testArtworkUploads progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+ [testConnectionManager respondToLastRequestWithResponse:successResponse];
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+
+ // Both the text only buttons and the image buttons should be sent
+ NSArray<SDLShow *> *sentRequests = testConnectionManager.receivedRequests;
+ expect(sentRequests).to(haveCount(2));
+ expect(sentRequests.firstObject.mainField1).to(equal(testMainField1));
+ expect(sentRequests.firstObject.mainField2).to(beNil());
+ expect(sentRequests.firstObject.softButtons).to(haveCount(2));
+ expect(sentRequests.firstObject.softButtons.firstObject.text).to(equal(object3State1Text));
+ expect(sentRequests.firstObject.softButtons.firstObject.image).to(beNil());
+ expect(sentRequests.firstObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeText));
+ expect(sentRequests.firstObject.softButtons.lastObject.text).to(equal(object5State1Text));
+ expect(sentRequests.firstObject.softButtons.lastObject.image).to(beNil());
+ expect(sentRequests.firstObject.softButtons.lastObject.type).to(equal(SDLSoftButtonTypeText));
+
+ expect(sentRequests.lastObject.mainField1).to(equal(testMainField1));
+ expect(sentRequests.lastObject.mainField2).to(beNil());
+ expect(sentRequests.lastObject.softButtons).to(haveCount(2));
+ expect(sentRequests.lastObject.softButtons.firstObject.text).to(equal(object3State1Text));
+ expect(sentRequests.lastObject.softButtons.firstObject.image).to(equal(object3State1Art.imageRPC));
+ expect(sentRequests.lastObject.softButtons.firstObject.type).to(equal(SDLSoftButtonTypeBoth));
+ expect(sentRequests.lastObject.softButtons.lastObject.text).to(equal(object5State1Text));
+ expect(sentRequests.lastObject.softButtons.lastObject.image).to(beNil());
+ expect(sentRequests.lastObject.softButtons.lastObject.type).to(equal(SDLSoftButtonTypeText));
+ });
+
+ context(@"When a response is received to the upload", ^{
+ beforeEach(^{
+ OCMExpect([testFileManager uploadArtworks:[OCMArg isNotNil] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+
+ testSoftButtonObjects = @[buttonWithTextAndImage];
+ testOp = [[SDLSoftButtonReplaceOperation alloc] initWithConnectionManager:testConnectionManager fileManager:testFileManager capabilities:capabilities softButtonObjects:testSoftButtonObjects mainField1:testMainField1];
+ [testOp start];
+
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
+ });
+
it(@"should finish the operation on a successful response", ^{
+ OCMExpect([testFileManager uploadArtworks:[OCMArg isNotNil] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
+
[testConnectionManager respondToLastRequestWithResponse:successResponse];
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
expect(testOp.isFinished).to(beTrue());
expect(testOp.isExecuting).to(beFalse());
});
it(@"should finish the operation on a failed response", ^{
+ OCMExpect([testFileManager uploadArtworks:[OCMArg isNotNil] progressHandler:[OCMArg invokeBlock] completionHandler:[OCMArg invokeBlock]]);
[testConnectionManager respondToLastRequestWithResponse:failedResponse];
+ OCMVerifyAllWithDelay(testFileManager, 0.5);
expect(testOp.isFinished).to(beTrue());
expect(testOp.isExecuting).to(beFalse());
});
diff --git a/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m b/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m
index 404fa1f05..cfab13eec 100644
--- a/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLStreamingMediaManagerSpec.m
@@ -4,13 +4,355 @@
//
#import <Quick/Quick.h>
#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+#import "SDLConfiguration.h"
+#import "SDLProtocol.h"
+#import "SDLSecondaryTransportManager.h"
+#import "SDLStreamingAudioLifecycleManager.h"
#import "SDLStreamingMediaManager.h"
+#import "SDLStreamingVideoLifecycleManager.h"
+#import "SDLStreamingVideoScaleManager.h"
+#import "SDLSystemCapabilityManager.h"
+#import "TestConnectionManager.h"
+
+@interface SDLStreamingMediaManager()
+
+@property (strong, nonatomic) SDLStreamingAudioLifecycleManager *audioLifecycleManager;
+@property (strong, nonatomic) SDLStreamingVideoLifecycleManager *videoLifecycleManager;
+@property (assign, nonatomic) BOOL audioStarted;
+@property (assign, nonatomic) BOOL videoStarted;
+@property (strong, nonatomic, nullable) SDLProtocol *audioProtocol;
+@property (strong, nonatomic, nullable) SDLProtocol *videoProtocol;
+
+@property (strong, nonatomic, nullable) SDLSecondaryTransportManager *secondaryTransportManager;
+
+- (void)startSecondaryTransportWithProtocol:(SDLProtocol *)protocol;
+- (void)didUpdateFromOldVideoProtocol:(nullable SDLProtocol *)oldVideoProtocol toNewVideoProtocol:(nullable SDLProtocol *)newVideoProtocol fromOldAudioProtocol:(nullable SDLProtocol *)oldAudioProtocol toNewAudioProtocol:(nullable SDLProtocol *)newAudioProtocol;
+
+@end
QuickSpecBegin(SDLStreamingMediaManagerSpec)
describe(@"the streaming media manager", ^{
+ __block SDLStreamingMediaManager *testStreamingMediaManager = nil;
+ __block TestConnectionManager *testConnectionManager = nil;
+ __block SDLConfiguration *testConfiguration = nil;
+ __block SDLSystemCapabilityManager *mockSystemCapabilityManager = nil;
+
+ // Need to use `id` data type in order to use `OCMVerifyAllWithDelay`
+ __block id mockSecondaryTransportManager = nil;
+ __block id mockVideoLifecycleManager = nil;
+ __block id mockAudioLifecycleManager = nil;
+
+ beforeEach(^{
+ mockSystemCapabilityManager = OCMClassMock([SDLSystemCapabilityManager class]);
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testStreamingMediaManager = [[SDLStreamingMediaManager alloc] initWithConnectionManager:testConnectionManager configuration:testConfiguration systemCapabilityManager:mockSystemCapabilityManager];
+
+ mockVideoLifecycleManager = OCMClassMock([SDLStreamingVideoLifecycleManager class]);
+ testStreamingMediaManager.videoLifecycleManager = mockVideoLifecycleManager;
+
+ mockAudioLifecycleManager = OCMClassMock([SDLStreamingAudioLifecycleManager class]);
+ testStreamingMediaManager.audioLifecycleManager = mockAudioLifecycleManager;
+
+ mockSecondaryTransportManager = OCMStrictClassMock([SDLSecondaryTransportManager class]);
+ testStreamingMediaManager.secondaryTransportManager = mockSecondaryTransportManager;
+ });
+
+ context(@"when stop is called", ^{
+ it(@"should stop both the audio and video stream managers", ^{
+ [testStreamingMediaManager stop];
+ OCMVerify([mockAudioLifecycleManager stop]);
+ OCMVerify([mockVideoLifecycleManager stop]);
+ expect(testStreamingMediaManager.audioStarted).to(beFalse());
+ expect(testStreamingMediaManager.videoStarted).to(beFalse());
+ });
+ });
+
+ describe(@"when stop video is called", ^{
+ beforeEach(^{
+ testStreamingMediaManager.audioStarted = YES;
+ testStreamingMediaManager.videoStarted = YES;
+ });
+
+ it(@"should only stop the video stream manager", ^{
+ [testStreamingMediaManager stopVideo];
+ OCMVerify([mockVideoLifecycleManager stop]);
+ expect(testStreamingMediaManager.videoStarted).to(beFalse());
+
+ OCMReject([mockAudioLifecycleManager stop]);
+ expect(testStreamingMediaManager.audioStarted).to(beTrue());
+ });
+ });
+
+ describe(@"when stop audio is called", ^{
+ beforeEach(^{
+ testStreamingMediaManager.audioStarted = YES;
+ testStreamingMediaManager.videoStarted = YES;
+
+ [testStreamingMediaManager stopAudio];
+ });
+
+ it(@"should only stop the audio stream manager", ^{
+ OCMVerify([mockAudioLifecycleManager stop]);
+ expect(testStreamingMediaManager.audioStarted).to(beFalse());
+
+ OCMReject([mockVideoLifecycleManager stop]);
+ expect(testStreamingMediaManager.videoStarted).to(beTrue());
+ });
+ });
+
+ describe(@"when sending audio data", ^{
+ __block NSData *testAudioData = nil;
+
+ beforeEach(^{
+ testAudioData = [[NSData alloc] initWithBase64EncodedString:@"test data" options:kNilOptions];
+ [testStreamingMediaManager sendAudioData:testAudioData];
+ });
+
+ it(@"should pass the audio data to the audio streaming manager", ^{
+ OCMVerify([mockAudioLifecycleManager sendAudioData:testAudioData]);
+ });
+ });
+
+ describe(@"when sending video data", ^{
+ __block CVPixelBufferRef testPixelBuffer = nil;
+
+ beforeEach(^{
+ CVPixelBufferCreate(kCFAllocatorDefault, 100, 50, kCVPixelFormatType_14Bayer_GRBG, nil, &testPixelBuffer);
+ });
+
+ context(@"without a timestamp", ^{
+ beforeEach(^{
+ [testStreamingMediaManager sendVideoData:testPixelBuffer];
+ });
+
+ it(@"should pass the video data to the video streaming manager", ^{
+ OCMVerify([mockVideoLifecycleManager sendVideoData:testPixelBuffer]);
+ });
+ });
+
+ context(@"with a timestamp", ^{
+ __block CMTime testTimestamp = CMTimeMake(1, NSEC_PER_SEC);
+
+ beforeEach(^{
+ [testStreamingMediaManager sendVideoData:testPixelBuffer presentationTimestamp:testTimestamp];
+ });
+
+ it(@"should pass the video data to the video streaming manager", ^{
+ OCMVerify([mockVideoLifecycleManager sendVideoData:testPixelBuffer presentationTimestamp:testTimestamp]);
+ });
+ });
+ });
+
+ describe(@"getters", ^{
+ it(@"should return the audio lifecycle manager's properties correctly", ^{
+ [testStreamingMediaManager audioManager];
+ OCMVerify([mockAudioLifecycleManager audioTranscodingManager]);
+
+ [testStreamingMediaManager isAudioConnected];
+ OCMVerify([mockAudioLifecycleManager isAudioConnected]);
+
+ [testStreamingMediaManager isAudioEncrypted];
+ OCMVerify([mockAudioLifecycleManager isAudioEncrypted]);
+ });
+
+ it(@"should return the video lifecycle manager's properties correctly", ^{
+ [testStreamingMediaManager touchManager];
+ OCMVerify([mockVideoLifecycleManager touchManager]);
+
+ [testStreamingMediaManager rootViewController];
+ OCMVerify([mockVideoLifecycleManager rootViewController]);
+
+ [testStreamingMediaManager focusableItemManager];
+ OCMVerify([mockVideoLifecycleManager focusableItemManager]);
+
+ [testStreamingMediaManager isVideoConnected];
+ OCMVerify([mockVideoLifecycleManager isVideoConnected]);
+
+ [testStreamingMediaManager isVideoEncrypted];
+ OCMVerify([mockVideoLifecycleManager isVideoEncrypted]);
+
+ [testStreamingMediaManager isVideoStreamingPaused];
+ OCMVerify([mockVideoLifecycleManager isVideoStreamingPaused]);
+
+ [testStreamingMediaManager screenSize];
+ SDLStreamingVideoLifecycleManager *streamingVideoLifecycleManager = (SDLStreamingVideoLifecycleManager *)mockVideoLifecycleManager;
+ OCMVerify([streamingVideoLifecycleManager.videoScaleManager displayViewportResolution]);
+
+ [testStreamingMediaManager videoFormat];
+ OCMVerify([mockVideoLifecycleManager videoFormat]);
+
+ [testStreamingMediaManager supportedFormats];
+ OCMVerify([mockVideoLifecycleManager supportedFormats]);
+
+ [testStreamingMediaManager pixelBufferPool];
+ OCMVerify([mockVideoLifecycleManager pixelBufferPool]);
+
+ [testStreamingMediaManager requestedEncryptionType];
+ OCMVerify([mockVideoLifecycleManager requestedEncryptionType]);
+
+ [testStreamingMediaManager showVideoBackgroundDisplay];
+ OCMVerify([mockVideoLifecycleManager showVideoBackgroundDisplay]);
+
+ [testStreamingMediaManager isStreamingSupported];
+ OCMVerify([mockVideoLifecycleManager isStreamingSupported]);
+ });
+ });
+
+ describe(@"setters", ^{
+ it(@"should set the encryption flag on both the audio and video managers", ^{
+ SDLStreamingEncryptionFlag testEncryptionFlag = SDLStreamingEncryptionFlagNone;
+ [testStreamingMediaManager setRequestedEncryptionType:testEncryptionFlag];
+
+ OCMVerify([mockAudioLifecycleManager setRequestedEncryptionType:testEncryptionFlag]);
+ OCMVerify([mockVideoLifecycleManager setRequestedEncryptionType:testEncryptionFlag]);
+ });
+
+ it(@"should set the video manager properties correctly", ^{
+ UIViewController *testViewController = [[UIViewController alloc] init];
+ [testStreamingMediaManager setRootViewController:testViewController];
+ OCMVerify([mockVideoLifecycleManager setRootViewController:testViewController]);
+
+ [testStreamingMediaManager setShowVideoBackgroundDisplay:NO];
+ OCMVerify([mockVideoLifecycleManager setShowVideoBackgroundDisplay:NO]);
+ });
+ });
+
+ describe(@"when using the secondary transport", ^{
+ describe(@"starting a service on a transport when none is running", ^{
+ __block SDLProtocol *mockNewProtocol = nil;
+
+ beforeEach(^{
+ mockNewProtocol = OCMClassMock([SDLProtocol class]);
+ [testStreamingMediaManager startWithProtocol:mockNewProtocol];
+ });
+
+ it(@"should start both the audio and video stream managers with the protocol", ^{
+ OCMExpect([mockAudioLifecycleManager startWithProtocol:mockNewProtocol]);
+ OCMExpect([mockVideoLifecycleManager startWithProtocol:mockNewProtocol]);
+ OCMReject([mockSecondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:[OCMArg any]]);
+ OCMReject([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]);
+ OCMReject([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]);
+
+ [testStreamingMediaManager startWithProtocol:mockNewProtocol];
+
+ OCMVerifyAllWithDelay(mockAudioLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockVideoLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockSecondaryTransportManager, 0.5);
+
+ expect(testStreamingMediaManager.audioStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.videoStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.audioProtocol).toEventually(equal(mockNewProtocol));
+ expect(testStreamingMediaManager.videoProtocol).toEventually(equal(mockNewProtocol));
+ });
+ });
+
+ describe(@"stopping a running service on a transport", ^{
+ it(@"should stop both the audio and video stream managers", ^{
+ OCMExpect([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockSecondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMReject([mockAudioLifecycleManager startWithProtocol:[OCMArg any]]);
+ OCMReject([mockVideoLifecycleManager startWithProtocol:[OCMArg any]]);
+
+ [testStreamingMediaManager didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:nil fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:nil];
+
+ OCMVerifyAllWithDelay(mockAudioLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockVideoLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockSecondaryTransportManager, 0.5);
+
+ expect(testStreamingMediaManager.audioStarted).toEventually(beFalse());
+ expect(testStreamingMediaManager.videoStarted).toEventually(beFalse());
+ expect(testStreamingMediaManager.audioProtocol).toEventually(beNil());
+ expect(testStreamingMediaManager.videoProtocol).toEventually(beNil());
+ });
+ });
+
+ describe(@"switching both the video and audio services to a different transport", ^{
+ __block SDLProtocol *mockNewVideoProtocol = nil;
+ __block SDLProtocol *mockNewAudioProtocol = nil;
+
+ beforeEach(^{
+ mockNewVideoProtocol = OCMClassMock([SDLProtocol class]);
+ mockNewAudioProtocol = OCMClassMock([SDLProtocol class]);
+ });
+
+ it(@"should stop both the audio and video stream managers and call the delegate then start a new session", ^{
+ OCMExpect([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockSecondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockAudioLifecycleManager startWithProtocol:mockNewAudioProtocol]);
+ OCMExpect([mockVideoLifecycleManager startWithProtocol:mockNewVideoProtocol]);
+
+ [testStreamingMediaManager didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:mockNewVideoProtocol fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:mockNewAudioProtocol];
+
+ OCMVerifyAllWithDelay(mockAudioLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockVideoLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockSecondaryTransportManager, 0.5);
+
+ expect(testStreamingMediaManager.audioStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.videoStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.audioProtocol).toEventually(equal(mockNewAudioProtocol));
+ expect(testStreamingMediaManager.videoProtocol).toEventually(equal(mockNewVideoProtocol));
+ });
+ });
+
+ describe(@"switching only the video service to a different transport", ^{
+ __block SDLProtocol *mockNewProtocol = nil;
+
+ beforeEach(^{
+ mockNewProtocol = OCMClassMock([SDLProtocol class]);
+ });
+
+ it(@"should stop the video stream manager but not the audio stream manager", ^{
+ OCMExpect([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMReject([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg any]]);
+ OCMExpect([mockSecondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockVideoLifecycleManager startWithProtocol:mockNewProtocol]);
+ OCMReject([mockAudioLifecycleManager startWithProtocol:[OCMArg any]]);
+
+ [testStreamingMediaManager didUpdateFromOldVideoProtocol:[OCMArg any] toNewVideoProtocol:mockNewProtocol fromOldAudioProtocol:nil toNewAudioProtocol:nil];
+
+ OCMVerifyAllWithDelay(mockAudioLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockVideoLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockSecondaryTransportManager, 0.5);
+
+ expect(testStreamingMediaManager.videoStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.audioStarted).toEventually(beFalse());
+ expect(testStreamingMediaManager.audioProtocol).toEventually(beNil());
+ expect(testStreamingMediaManager.videoProtocol).toEventually(equal(mockNewProtocol));
+ });
+ });
+
+ describe(@"switching only the audio service to a different transport", ^{
+ __block SDLProtocol *mockNewProtocol = nil;
+
+ beforeEach(^{
+ mockNewProtocol = OCMClassMock([SDLProtocol class]);
+ });
+
+ it(@"should stop the audio stream manager but not the video stream manager", ^{
+ OCMExpect([mockAudioLifecycleManager endAudioServiceWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMReject([mockVideoLifecycleManager endVideoServiceWithCompletionHandler:[OCMArg any]]);
+ OCMExpect([mockSecondaryTransportManager disconnectSecondaryTransportWithCompletionHandler:[OCMArg invokeBlock]]);
+ OCMExpect([mockAudioLifecycleManager startWithProtocol:mockNewProtocol]);
+ OCMReject([mockVideoLifecycleManager startWithProtocol:[OCMArg any]]);
+
+ [testStreamingMediaManager didUpdateFromOldVideoProtocol:nil toNewVideoProtocol:nil fromOldAudioProtocol:[OCMArg any] toNewAudioProtocol:mockNewProtocol];
+
+ OCMVerifyAllWithDelay(mockAudioLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockVideoLifecycleManager, 0.5);
+ OCMVerifyAllWithDelay(mockSecondaryTransportManager, 0.5);
+ expect(testStreamingMediaManager.videoStarted).toEventually(beFalse());
+ expect(testStreamingMediaManager.audioStarted).toEventually(beTrue());
+ expect(testStreamingMediaManager.audioProtocol).toEventually(equal(mockNewProtocol));
+ expect(testStreamingMediaManager.videoProtocol).toEventually(beNil());
+ });
+ });
+ });
});
QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m
new file mode 100644
index 000000000..55151ad05
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLSubscribeButtonManagerSpec.m
@@ -0,0 +1,787 @@
+//
+// SDLSubscribeButtonManagerSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 5/22/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+#import <OCMock/OCMock.h>
+
+#import "SDLError.h"
+#import "SDLOnButtonEvent.h"
+#import "SDLOnButtonPress.h"
+#import "SDLRPCNotificationNotification.h"
+#import "SDLSubscribeButtonManager.h"
+#import "SDLSubscribeButtonObserver.h"
+#import "SDLSubscribeButtonResponse.h"
+#import "SDLSubscribebutton.h"
+#import "SDLUnsubscribeButton.h"
+#import "SDLUnsubscribeButtonResponse.h"
+#import "TestConnectionManager.h"
+#import "TestSubscribeButtonObserver.h"
+
+@interface SDLSubscribeButtonManager()
+
+@property (weak, nonatomic) id<SDLConnectionManagerType> connectionManager;
+@property (strong, nonatomic) NSMutableDictionary<SDLButtonName, NSMutableArray<SDLSubscribeButtonObserver *> *> *subscribeButtonObservers;
+
+@end
+
+QuickSpecBegin(SDLSubscribeButtonManagerSpec)
+
+describe(@"subscribe button manager", ^{
+ __block SDLSubscribeButtonManager *testManager = nil;
+ __block TestConnectionManager *testConnectionManager = nil;
+
+ __block SDLSubscribeButtonResponse *testSubscribeSuccessResponse = nil;
+ __block SDLSubscribeButtonResponse *testSubscribeFailureResponse = nil;
+ __block SDLUnsubscribeButtonResponse *testUnSubscribeSuccessResponse = nil;
+ __block SDLUnsubscribeButtonResponse *testUnSubscribeFailureResponse = nil;
+
+ beforeEach(^{
+ testSubscribeSuccessResponse = [[SDLSubscribeButtonResponse alloc] init];
+ testSubscribeSuccessResponse.success = @YES;
+ testUnSubscribeSuccessResponse.resultCode = SDLResultSuccess;
+
+ testSubscribeFailureResponse = [[SDLSubscribeButtonResponse alloc] init];
+ testSubscribeFailureResponse.success = @NO;
+ testUnSubscribeSuccessResponse.resultCode = SDLResultDisallowed;
+
+ testUnSubscribeSuccessResponse = [[SDLUnsubscribeButtonResponse alloc] init];
+ testUnSubscribeSuccessResponse.success = @YES;
+ testUnSubscribeSuccessResponse.resultCode = SDLResultSuccess;
+
+ testUnSubscribeFailureResponse = [[SDLUnsubscribeButtonResponse alloc] init];
+ testUnSubscribeFailureResponse.success = @NO;
+ testUnSubscribeFailureResponse.resultCode = SDLResultDisallowed;
+
+ testConnectionManager = [[TestConnectionManager alloc] init];
+ testManager = [[SDLSubscribeButtonManager alloc] initWithConnectionManager:testConnectionManager];
+ });
+
+ it(@"should instantiate correctly with initWithConnectionManager:", ^{
+ expect(testManager.connectionManager).to(equal(testConnectionManager));
+ expect(testManager.subscribeButtonObservers).toNot(beNil());
+ expect(testManager.subscribeButtonObservers.count).to(equal(0));
+ });
+
+ it(@"should do nothing when Start is called", ^{
+ [testManager start];
+
+ expect(testManager.subscribeButtonObservers).toNot(beNil());
+ expect(testManager.subscribeButtonObservers.count).to(equal(0));
+ });
+
+ it(@"should clear, but not destroy, the list of observers when Stop is called", ^{
+ SDLSubscribeButtonUpdateHandler testUpdateBlock = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {};
+ testManager.subscribeButtonObservers[SDLButtonNameTuneUp] = [NSMutableArray arrayWithObject:[[SDLSubscribeButtonObserver alloc] initWithObserver:[[NSObject alloc] init] updateHandler:testUpdateBlock]];
+ expect(testManager.subscribeButtonObservers.count).to(equal(1));
+
+ [testManager stop];
+
+ expect(testManager.subscribeButtonObservers).toNot(beNil());
+ expect(testManager.subscribeButtonObservers.count).to(equal(0));
+ });
+
+ describe(@"should subscribe with a block handler", ^{
+ __block SDLButtonName testButtonName = nil;
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler1 = nil;
+ __block BOOL testHandler1Called = NO;
+ __block NSError *testHandle1Error = nil;
+ __block SDLOnButtonPress *testHandler1OnButtonPress = nil;
+ __block SDLOnButtonEvent *testHandler1OnButtonEvent = nil;
+
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler2 = nil;
+ __block BOOL testHandler2Called = NO;
+ __block NSError *testHandler2Error = nil;
+ __block SDLOnButtonPress *testHandler2OnButtonPress = nil;
+ __block SDLOnButtonEvent *testHandler2OnButtonEvent = nil;
+
+ beforeEach(^{
+ testButtonName = SDLButtonNameTuneUp;
+ testUpdateHandler1 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {
+ testHandler1Called = YES;
+ testHandle1Error = error;
+ testHandler1OnButtonPress = buttonPress;
+ testHandler1OnButtonEvent = buttonEvent;
+ };
+ testUpdateHandler2 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {
+ testHandler2Called = YES;
+ testHandler2Error = error;
+ testHandler2OnButtonPress = buttonPress;
+ testHandler2OnButtonEvent = buttonEvent;
+ };
+ });
+
+ it(@"should send a subscription request to the module if adding the first observer for that button name but it should not send a subscription request to the module if adding a subsequent observer for the same button name", ^{
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ id subscriptionID2 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+ expect(subscriptionID1).toNot(beNil());
+ expect(subscriptionID2).toNot(beNil());
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).toEventually(equal(2));
+ expect((id)observers[0].updateBlock).toEventually(equal((id)testUpdateHandler1));
+ expect((id)observers[1].updateBlock).toEventually(equal((id)testUpdateHandler2));
+
+ expect(testConnectionManager.receivedRequests.count).toEventually(equal(1));
+ expect(testConnectionManager.receivedRequests[0]).toEventually(beAKindOf(SDLSubscribeButton.class));
+ });
+
+ it(@"should send two subscription request for the same button name to the module if the second request is sent before the module responds to the first request and it should add both observers if the second request fails with a result code of IGNORED", ^{
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ id subscriptionID2 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+ expect(subscriptionID1).toNot(beNil());
+ expect(subscriptionID2).toNot(beNil());
+
+ // Respond to first request with a success response
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ // Respond to second request with a failure response and a result code of `IGNORED`
+ SDLSubscribeButtonResponse *testSubscribeIgnoredResponse = [[SDLSubscribeButtonResponse alloc] init];
+ testSubscribeIgnoredResponse.success = @NO;
+ testSubscribeIgnoredResponse.resultCode = SDLResultIgnored;
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeIgnoredResponse];
+
+ // Both observers should be added
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).toEventually(equal(2));
+
+ expect(testConnectionManager.receivedRequests.count).toEventually(equal(2));
+ expect(testConnectionManager.receivedRequests[0]).toEventually(beAKindOf(SDLSubscribeButton.class));
+ expect(testConnectionManager.receivedRequests[1]).toEventually(beAKindOf(SDLSubscribeButton.class));
+ });
+
+ it(@"should not notify the observer when a success response is received for the subscribe button request", ^{
+ [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ expect(testHandler1Called).to(beFalse());
+ });
+
+ it(@"should notify the observer with the error and remove the observer when a failure response is received for the subscribe button request", ^{
+ [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{@"subscribe button error":@"error 2"}];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeFailureResponse error:testError];
+
+ expect(testHandler1Called).to(beTrue());
+ expect(testHandle1Error).to(equal(testError));
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(0));
+ });
+ });
+
+ describe(@"should subscribe with an observer and selector", ^{
+ __block SDLButtonName testButtonName = nil;
+ __block TestSubscribeButtonObserver *testSubscribeButtonObserver1 = nil;
+ __block SEL testSelector1 = @selector(buttonPressEvent);
+
+ __block TestSubscribeButtonObserver *testSubscribeButtonObserver2 = nil;
+ __block SEL testSelector2 = @selector(buttonPressEvent);
+
+ beforeEach(^{
+ testButtonName = SDLButtonNameSeekLeft;
+ testSubscribeButtonObserver1 = [[TestSubscribeButtonObserver alloc] init];
+ testSubscribeButtonObserver2 = [[TestSubscribeButtonObserver alloc] init];
+
+ testSelector1 = @selector(buttonPressEvent);
+ testSelector2 = @selector(buttonPressEventWithButtonName:error:);
+ });
+
+ it(@"should send a subscription request to the module if adding the first observer for that button name", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect(NSStringFromSelector(observers[0].selector)).to(equal(NSStringFromSelector(testSelector1)));
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ expect([testConnectionManager.receivedRequests[0] isKindOfClass:SDLSubscribeButton.class]);
+ });
+
+ it(@"should not send a subscription request to the module if adding a subsequent observer for that button name", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver2 selector:testSelector2];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(2));
+ expect(NSStringFromSelector(observers[0].selector)).to(equal(NSStringFromSelector(testSelector1)));
+ expect(NSStringFromSelector(observers[1].selector)).to(equal(NSStringFromSelector(testSelector2)));
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ expect([testConnectionManager.receivedRequests[0] isKindOfClass:SDLSubscribeButton.class]);
+ });
+
+ it(@"should not notify the observer when a success response is received for the subscribe button request", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ expect(testSubscribeButtonObserver1.selectorCalledCount).to(equal(0));
+ });
+
+ it(@"should notify the observer with the error and remove the observer when a failure response is received for the subscribe button request", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector2];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{@"subscribe button error":@"error 2"}];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeFailureResponse error:testError];
+
+ expect(testSubscribeButtonObserver1.selectorCalledCount).to(equal(1));
+ expect(testSubscribeButtonObserver1.buttonErrorsReceived.count).to(equal(1));
+ expect(testSubscribeButtonObserver1.buttonErrorsReceived[0]).to(equal(testError));
+ expect(testSubscribeButtonObserver1.buttonNamesReceived[0]).to(equal(testButtonName));
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(0));
+ });
+
+ it(@"should ignore a subscription attempt with an invalid selector (selector has too many parameters)", ^{
+ SEL testInvalidSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:extraParameter:);
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testInvalidSelector];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers).to(beNil());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(0));
+ });
+
+ it(@"should ignore a subscription attempt with an nil observer", ^{
+ SEL testValidSelector = @selector(buttonPressEventWithButtonName:error:);
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wnonnull"
+ [testManager subscribeButton:testButtonName withObserver:nil selector:testValidSelector];
+#pragma GCC diagnostic pop
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers).to(beNil());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(0));
+ });
+ });
+
+ describe(@"notifying subscribers of subscribe button presses and events", ^{
+ __block SDLButtonName testButtonName = nil;
+ __block SDLOnButtonPress *testButtonPress = nil;
+ __block SDLOnButtonEvent *testButtonEvent = nil;
+ __block SDLRPCNotificationNotification *buttonEventNotification = nil;
+ __block SDLRPCNotificationNotification *buttonPressNotification = nil;
+
+ beforeEach(^{
+ testButtonName = SDLButtonNameTuneUp;
+
+ testButtonPress = [[SDLOnButtonPress alloc] init];
+ testButtonPress.buttonPressMode = SDLButtonPressModeLong;
+ testButtonPress.buttonName = testButtonName;
+
+ testButtonEvent = [[SDLOnButtonEvent alloc] init];
+ testButtonEvent.buttonEventMode = SDLButtonEventModeButtonUp;
+ testButtonEvent.buttonName = testButtonName;
+
+ buttonEventNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonEventNotification object:nil rpcNotification:testButtonEvent];
+ buttonPressNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonPressNotification object:nil rpcNotification:testButtonPress];
+ });
+
+ describe(@"all subscribers should be notified", ^{
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler1 = nil;
+ __block BOOL testHandler1Called = NO;
+ __block NSError *testHandle1Error = nil;
+ __block SDLOnButtonPress *testHandler1OnButtonPress = nil;
+ __block SDLOnButtonEvent *testHandler1OnButtonEvent = nil;
+
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler2 = nil;
+ __block BOOL testHandler2Called = NO;
+ __block NSError *testHandler2Error = nil;
+ __block SDLOnButtonPress *testHandler2OnButtonPress = nil;
+ __block SDLOnButtonEvent *testHandler2OnButtonEvent = nil;
+
+ __block TestSubscribeButtonObserver *testObserver1 = nil;
+ __block SEL testSelector1 = nil;
+
+ __block TestSubscribeButtonObserver *testObserver2 = nil;
+ __block SEL testSelector2 = nil;
+
+ beforeEach(^{
+ testUpdateHandler1 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {
+ testHandler1Called = YES;
+ testHandle1Error = error;
+ testHandler1OnButtonPress = buttonPress;
+ testHandler1OnButtonEvent = buttonEvent;
+ };
+
+ testUpdateHandler2 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {
+ testHandler2Called = YES;
+ testHandler2Error = error;
+ testHandler2OnButtonPress = buttonPress;
+ testHandler2OnButtonEvent = buttonEvent;
+ };
+
+ testObserver1 = [[TestSubscribeButtonObserver alloc] init];
+ testSelector1 = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:);
+
+ testObserver2 = [[TestSubscribeButtonObserver alloc] init];
+ testSelector2 = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:);
+
+ [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+ [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+ [testManager subscribeButton:testButtonName withObserver:testObserver1 selector:testSelector1];
+ [testManager subscribeButton:testButtonName withObserver:testObserver2 selector:testSelector2];
+ });
+
+ it(@"should notify block handler and observer/selector subscribers when a button event notification is received", ^{
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testHandler1Called).toEventually(beTrue());
+ expect(testHandle1Error).toEventually(beNil());
+ expect(testHandler1OnButtonEvent).toEventually(equal(testButtonEvent));
+ expect(testHandler1OnButtonPress).toEventually(beNil());
+
+ expect(testHandler2Called).toEventually(beTrue());
+ expect(testHandler2Error).toEventually(beNil());
+ expect(testHandler2OnButtonEvent).toEventually(equal(testButtonEvent));
+ expect(testHandler2OnButtonPress).toEventually(beNil());
+
+ expect(testObserver1.buttonNamesReceived.count).to(equal(1));
+ expect(testObserver1.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver1.buttonPressesReceived).to(beEmpty());
+ expect(testObserver1.buttonEventsReceived[0]).to(equal(testButtonEvent));
+
+ expect(testObserver2.buttonNamesReceived.count).to(equal(1));
+ expect(testObserver2.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver2.buttonPressesReceived).to(beEmpty());
+ expect(testObserver2.buttonEventsReceived[0]).to(equal(testButtonEvent));
+ });
+
+ it(@"should notify block handler and observer/selector subscribers when a button press notification is received", ^{
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testHandler1Called).toEventually(beTrue());
+ expect(testHandle1Error).toEventually(beNil());
+ expect(testHandler1OnButtonEvent).toEventually(beNil());
+ expect(testHandler1OnButtonPress).toEventually(equal(testButtonPress));
+
+ expect(testHandler2Called).toEventually(beTrue());
+ expect(testHandler2Error).toEventually(beNil());
+ expect(testHandler2OnButtonEvent).toEventually(beNil());
+ expect(testHandler2OnButtonPress).toEventually(equal(testButtonPress));
+
+ expect(testObserver1.buttonNamesReceived.count).to(equal(1));
+ expect(testObserver1.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver1.buttonPressesReceived[0]).to(equal(testButtonPress));
+ expect(testObserver1.buttonEventsReceived).to(beEmpty());
+
+ expect(testObserver2.buttonNamesReceived.count).to(equal(1));
+ expect(testObserver2.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver2.buttonPressesReceived[0]).to(equal(testButtonPress));
+ expect(testObserver2.buttonEventsReceived).to(beEmpty());
+ });
+ });
+
+ describe(@"All selector/observers subscribers with 0-4 parameters in the selector should be notified of button presses", ^{
+ it(@"should notify the observer of a button press when the selector has no parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEvent);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect(testObserver.buttonNamesReceived).to(beEmpty());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should notify the observer of a button press when the selector has one parameter", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should notify the observer of a button press when the selector has two parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should notify the observer of a button press when the selector has three parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived[0]).to(equal(testButtonPress));
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should notify the observer of a button press when the selector has four parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived[0]).to(equal(testButtonPress));
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+ });
+
+ describe(@"Only selector/observer subscribers with four parameters in the selector should be notified of button events", ^{
+ it(@"should not notify the observer of a button event when the selector has no parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEvent);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(0));
+ expect(testObserver.buttonNamesReceived).to(beEmpty());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should not notify the observer of a button event when the selector has one parameter", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(0));
+ expect(testObserver.buttonNamesReceived).to(beEmpty());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should not notify the observer of a button event when the selector has two parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(0));
+ expect(testObserver.buttonNamesReceived).to(beEmpty());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should not notify the observer of a button event when the selector has three parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(0));
+ expect(testObserver.buttonNamesReceived).to(beEmpty());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived).to(beEmpty());
+ });
+
+ it(@"should notify the observer of a button event when the selector has four parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:);
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [[NSNotificationCenter defaultCenter] postNotification:buttonEventNotification];
+
+ expect(testObserver.selectorCalledCount).to(equal(1));
+ expect([testObserver.buttonNamesReceived containsObject:testButtonName]).to(beTrue());
+ expect(testObserver.buttonErrorsReceived).to(beEmpty());
+ expect(testObserver.buttonPressesReceived).to(beEmpty());
+ expect(testObserver.buttonEventsReceived[0]).to(equal(testButtonEvent));
+ });
+ });
+
+ describe(@"Handling invalid selectors", ^{
+ __block SDLRPCNotificationNotification *buttonPressNotification = nil;
+
+ beforeEach(^{
+ testButtonName = SDLButtonNameOk;
+ testButtonPress = [[SDLOnButtonPress alloc] init];
+ testButtonPress.buttonPressMode = SDLButtonPressModeLong;
+ testButtonPress.buttonName = testButtonName;
+ buttonPressNotification = [[SDLRPCNotificationNotification alloc] initWithName:SDLDidReceiveButtonPressNotification object:nil rpcNotification:testButtonPress];
+ });
+
+ it(@"should throw an exception if the selector does not exist for the observer", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wundeclared-selector"
+ SEL testInvalidSelector = @selector(invalidSelector:);
+#pragma GCC diagnostic pop
+ [testManager subscribeButton:testButtonName withObserver:testObserver selector:testInvalidSelector];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ expectAction(^{
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+ }).to(raiseException().named([NSException sdl_invalidSubscribeButtonSelectorExceptionWithSelector:testInvalidSelector].name));
+ });
+
+ it(@"should throw an assert if the selector has too many parameters", ^{
+ TestSubscribeButtonObserver *testObserver = [[TestSubscribeButtonObserver alloc] init];
+ SEL testInvalidSelector = @selector(buttonPressEventWithButtonName:error:buttonPress:buttonEvent:extraParameter:);
+
+ // Set the invalid selector manually as using `subscribeButton:withObserver:selector:` will not add an invalid selector to the list of `subscribeButtonObservers`
+ testManager.subscribeButtonObservers[testButtonName] = [NSMutableArray arrayWithObject:[[SDLSubscribeButtonObserver alloc] initWithObserver:testObserver selector:testInvalidSelector]];
+
+ expectAction(^{
+ [[NSNotificationCenter defaultCenter] postNotification:buttonPressNotification];
+ }).to(raiseException().named([NSException sdl_invalidSubscribeButtonSelectorExceptionWithSelector:testInvalidSelector].name));
+ });
+
+ afterEach(^{
+ [testManager.subscribeButtonObservers removeAllObjects];
+ });
+ });
+ });
+
+ describe(@"should unsubscribe with an update handler", ^{
+ __block SDLButtonName testButtonName = nil;
+
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler1 = nil;
+ __block SDLSubscribeButtonUpdateCompletionHandler testCompletionHandler1 = nil;
+ __block BOOL testCompletionHandler1Called = NO;
+ __block NSError *testCompletionHandler1Error = nil;
+
+ __block SDLSubscribeButtonUpdateHandler testUpdateHandler2 = nil;
+ __block SDLSubscribeButtonUpdateCompletionHandler testCompletionHandler2 = nil;
+ __block BOOL testCompletionHandler2Called = NO;
+ __block NSError *testCompletionHandler2Error = nil;
+
+ beforeEach(^{
+ testButtonName = SDLButtonNameTuneUp;
+
+ testUpdateHandler1 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {};
+ testCompletionHandler1 = ^(NSError *__nullable error) {
+ testCompletionHandler1Called = YES;
+ testCompletionHandler1Error = error;
+ };
+ testCompletionHandler1Called = NO;
+ testCompletionHandler2Error = nil;
+
+ testUpdateHandler2 = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {};
+ testCompletionHandler2 = ^(NSError *__nullable error) {
+ testCompletionHandler2Called = YES;
+ testCompletionHandler2Error = error;
+ };
+ testCompletionHandler2Called = NO;
+ testCompletionHandler2Error = nil;
+ });
+
+ it(@"should unsubscribe the observer if there are multiple observers subscribed to the button", ^{
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+ id subscriptionID2 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+
+ [testManager unsubscribeButton:testButtonName withObserver:subscriptionID1 withCompletionHandler:testCompletionHandler1];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect((id)observers[0].updateBlock).to(equal((id)testUpdateHandler2));
+ expect(observers[0].observer).to(equal(subscriptionID2));
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler2Called).to(beFalse());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ expect(testConnectionManager.receivedRequests.firstObject).to(beAKindOf(SDLSubscribeButton.class));
+ });
+
+ it(@"should send an unsubscribe button request when the last observer is removed and it should notify the observer that the unsubscribe request succeeded", ^{
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+ id subscriptionID2 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler2];
+
+ [testManager unsubscribeButton:testButtonName withObserver:subscriptionID1 withCompletionHandler:testCompletionHandler1];
+ [testManager unsubscribeButton:testButtonName withObserver:subscriptionID2 withCompletionHandler:testCompletionHandler2];
+ [testConnectionManager respondToLastRequestWithResponse:testUnSubscribeSuccessResponse];
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler1Error).to(beNil());
+ expect(testCompletionHandler2Called).to(beTrue());
+ expect(testCompletionHandler2Error).to(beNil());
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers).to(beEmpty());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(2));
+ expect(testConnectionManager.receivedRequests[1]).to(beAKindOf(SDLUnsubscribeButton.class));
+ });
+
+ it(@"should notify the observer with the error when a failure response is received for the unsubscribe button request and it should not remove the observer", ^{
+ id subscriptionID1 = [testManager subscribeButton:testButtonName withUpdateHandler:testUpdateHandler1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [testManager unsubscribeButton:testButtonName withObserver:subscriptionID1 withCompletionHandler:testCompletionHandler1];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{@"subscribe button error":@"error 2"}];
+ [testConnectionManager respondToLastRequestWithResponse:testUnSubscribeFailureResponse error:testError];
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler1Error).to(equal(testError));
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect((id)observers[0].updateBlock).to(equal((id)testUpdateHandler1));
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(2));
+ expect(testConnectionManager.receivedRequests[1]).to(beAKindOf(SDLUnsubscribeButton.class));
+ });
+
+ it(@"should return an error if the observer is not subscribed to the button", ^{
+ [testManager unsubscribeButton:testButtonName withObserver:[[NSObject alloc] init] withCompletionHandler:testCompletionHandler1];
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler1Error).to(equal([NSError sdl_subscribeButtonManager_notSubscribed]));
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers).to(beNil());
+ expect(testConnectionManager.receivedRequests).to(beEmpty());
+ });
+ });
+
+ describe(@"should unsubscribe with an observer and selector", ^{
+ __block SDLButtonName testButtonName = nil;
+
+ __block TestSubscribeButtonObserver *testSubscribeButtonObserver1 = nil;
+ __block SEL testSelector1 = @selector(buttonPressEvent);
+ __block SDLSubscribeButtonUpdateCompletionHandler testCompletionHandler1 = nil;
+ __block BOOL testCompletionHandler1Called = NO;
+ __block NSError *testCompletionHandler1Error = nil;
+
+ __block TestSubscribeButtonObserver *testSubscribeButtonObserver2 = nil;
+ __block SEL testSelector2 = @selector(buttonPressEvent);
+ __block SDLSubscribeButtonUpdateCompletionHandler testCompletionHandler2 = nil;
+ __block BOOL testCompletionHandler2Called = NO;
+ __block NSError *testCompletionHandler2Error = nil;
+
+ beforeEach(^{
+ testButtonName = SDLButtonNamePlayPause;
+
+ testSubscribeButtonObserver1 = [[TestSubscribeButtonObserver alloc] init];
+ testCompletionHandler1 = ^(NSError *__nullable error) {
+ testCompletionHandler1Called = YES;
+ testCompletionHandler1Error = error;
+ };
+ testSelector1 = @selector(buttonPressEvent);
+ testCompletionHandler1Called = NO;
+ testCompletionHandler2Error = nil;
+
+ testSubscribeButtonObserver2 = [[TestSubscribeButtonObserver alloc] init];
+ testSelector2 = @selector(buttonPressEventWithButtonName:error:);
+ testCompletionHandler2 = ^(NSError *__nullable error) {
+ testCompletionHandler2Called = YES;
+ testCompletionHandler2Error = error;
+ };
+ testCompletionHandler2Called = NO;
+ testCompletionHandler2Error = nil;
+ });
+
+ it(@"should unsubscribe the observer if there are multiple observers subscribed to the button", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver2 selector:testSelector2];
+
+ [testManager unsubscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 withCompletionHandler:testCompletionHandler1];
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect(NSStringFromSelector(observers[0].selector)).to(equal(NSStringFromSelector(testSelector2)));
+ expect((id)observers[0].observer).to(equal((id)testSubscribeButtonObserver2));
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler2Called).to(beFalse());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(1));
+ expect(testConnectionManager.receivedRequests.firstObject).to(beAKindOf(SDLSubscribeButton.class));
+ });
+
+ it(@"should send an unsubscribe button request when the last observer is removed and it should notify the observer that the unsubscribe request succeeded", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver2 selector:testSelector2];
+
+ [testManager unsubscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 withCompletionHandler:testCompletionHandler1];
+ [testManager unsubscribeButton:testButtonName withObserver:testSubscribeButtonObserver2 withCompletionHandler:testCompletionHandler2];
+ [testConnectionManager respondToLastRequestWithResponse:testUnSubscribeSuccessResponse];
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler1Error).to(beNil());
+ expect(testCompletionHandler2Called).to(beTrue());
+ expect(testCompletionHandler2Error).to(beNil());
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers).to(beEmpty());
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(2));
+ expect(testConnectionManager.receivedRequests[1]).to(beAKindOf(SDLUnsubscribeButton.class));
+ });
+
+ it(@"should notify the observer with the error when a failure response is received for the unsubscribe button request and it should not remove the observer", ^{
+ [testManager subscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 selector:testSelector1];
+ [testConnectionManager respondToLastRequestWithResponse:testSubscribeSuccessResponse];
+
+ [testManager unsubscribeButton:testButtonName withObserver:testSubscribeButtonObserver1 withCompletionHandler:testCompletionHandler1];
+ NSError *testError = [NSError errorWithDomain:@"errorDomain" code:9 userInfo:@{@"subscribe button error":@"error 2"}];
+ [testConnectionManager respondToLastRequestWithResponse:testUnSubscribeFailureResponse error:testError];
+
+ expect(testCompletionHandler1Called).to(beTrue());
+ expect(testCompletionHandler1Error).to(equal(testError));
+
+ NSArray<SDLSubscribeButtonObserver *> *observers = testManager.subscribeButtonObservers[testButtonName];
+ expect(observers.count).to(equal(1));
+ expect(NSStringFromSelector(observers[0].selector)).to(equal(NSStringFromSelector(testSelector1)));
+
+ expect(testConnectionManager.receivedRequests.count).to(equal(2));
+ expect([testConnectionManager.receivedRequests[1] isKindOfClass:SDLUnsubscribeButton.class]);
+ });
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLSubscribeButtonObserverSpec.m b/SmartDeviceLinkTests/SDLSubscribeButtonObserverSpec.m
new file mode 100644
index 000000000..b99e36139
--- /dev/null
+++ b/SmartDeviceLinkTests/SDLSubscribeButtonObserverSpec.m
@@ -0,0 +1,64 @@
+//
+// SDLSubscribeButtonObserverSpec.m
+// SmartDeviceLinkTests
+//
+// Created by Nicole on 5/22/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Quick/Quick.h>
+#import <Nimble/Nimble.h>
+
+#import "SDLSubscribeButtonObserver.h"
+#import "TestSubscribeButtonObserver.h"
+
+QuickSpecBegin(SDLSubscribeButtonObserverSpec)
+
+describe(@"subscribe button observer", ^{
+ __block TestSubscribeButtonObserver *testObserver = nil;
+ __block SEL testSelector = nil;
+ __block SDLSubscribeButtonUpdateHandler testUpdateBlock = nil;
+
+ beforeEach(^{
+ testObserver = [[TestSubscribeButtonObserver alloc] init];
+ testSelector = @selector(buttonPressEvent);
+ testUpdateBlock = ^(SDLOnButtonPress *_Nullable buttonPress, SDLOnButtonEvent *_Nullable buttonEvent, NSError *_Nullable error) {};
+ });
+
+ it(@"Should set and get correctly", ^{
+ SDLSubscribeButtonObserver *testSubscribeButtonObserver = [[SDLSubscribeButtonObserver alloc] init];
+ testSubscribeButtonObserver.observer = testObserver;
+ testSubscribeButtonObserver.selector = testSelector;
+ testSubscribeButtonObserver.updateBlock = testUpdateBlock;
+
+ expect(testSubscribeButtonObserver.observer).to(equal(testObserver));
+ expect(NSStringFromSelector(testSubscribeButtonObserver.selector)).to(equal(NSStringFromSelector(testSelector)));
+ expect((id)testSubscribeButtonObserver.updateBlock).to(equal((id)testUpdateBlock));
+ });
+
+ it(@"Should initialize correctly with initWithObserver:selector:", ^{
+ SDLSubscribeButtonObserver *testSubscribeButtonObserver = [[SDLSubscribeButtonObserver alloc] initWithObserver:testObserver selector:testSelector];
+
+ expect(testSubscribeButtonObserver.observer).to(equal(testObserver));
+ expect(NSStringFromSelector(testSubscribeButtonObserver.selector)).to(equal(NSStringFromSelector(testSelector)));
+ expect((id)testSubscribeButtonObserver.updateBlock).to(beNil());
+ });
+
+ it(@"Should initialize correctly with initWithObserver:updateHandler:", ^{
+ SDLSubscribeButtonObserver *testSubscribeButtonObserver = [[SDLSubscribeButtonObserver alloc] initWithObserver:testObserver updateHandler:testUpdateBlock];
+
+ expect(testSubscribeButtonObserver.observer).to(equal(testObserver));
+ expect(NSStringFromSelector(testSubscribeButtonObserver.selector)).to(beNil());
+ expect((id)testSubscribeButtonObserver.updateBlock).to(equal((id)testUpdateBlock));
+ });
+
+ it(@"Should return nil if not set", ^{
+ SDLSubscribeButtonObserver *testSubscribeButtonObserver = [[SDLSubscribeButtonObserver alloc] init];
+
+ expect(testSubscribeButtonObserver.observer).to(beNil());
+ expect(NSStringFromSelector(testSubscribeButtonObserver.selector)).to(beNil());
+ expect((id)testSubscribeButtonObserver.updateBlock).to(beNil());
+ });
+});
+
+QuickSpecEnd
diff --git a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
index 4336f7eab..798a1499a 100644
--- a/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
+++ b/SmartDeviceLinkTests/SDLSystemCapabilityManagerSpec.m
@@ -64,6 +64,7 @@ typedef NSString * SDLServiceID;
@property (nullable, strong, nonatomic, readwrite) SDLVideoStreamingCapability *videoStreamingCapability;
@property (nullable, strong, nonatomic, readwrite) SDLRemoteControlCapabilities *remoteControlCapability;
@property (nullable, strong, nonatomic, readwrite) SDLSeatLocationCapability *seatLocationCapability;
+@property (nullable, strong, nonatomic, readwrite) SDLDriverDistractionCapability *driverDistractionCapability;
@property (nullable, strong, nonatomic) NSMutableDictionary<SDLServiceID, SDLAppServiceCapability *> *appServicesCapabilitiesDictionary;
@@ -104,7 +105,7 @@ describe(@"System capability manager", ^{
#pragma clang diagnostic pop
SDLTextField *textField = [[SDLTextField alloc] init];
textField.name = SDLTextFieldNameMainField1;
- textField.characterSet = SDLCharacterSetCID1;
+ textField.characterSet = SDLCharacterSetUtf8;
textField.width = @(123);
textField.rows = @(1);
testDisplayCapabilities.textFields = @[textField];
@@ -172,6 +173,7 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
expect(testSystemCapabilityManager.seatLocationCapability).to(beNil());
+ expect(testSystemCapabilityManager.driverDistractionCapability).to(beNil());
expect(testSystemCapabilityManager.currentHMILevel).to(equal(SDLHMILevelNone));
});
@@ -390,6 +392,12 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.vrCapability).to(beFalse());
expect(testSystemCapabilityManager.audioPassThruCapabilities).to(beNil());
expect(testSystemCapabilityManager.pcmStreamCapability).to(beNil());
+
+ expect(testSystemCapabilityManager.phoneCapability).to(beNil());
+ expect(testSystemCapabilityManager.navigationCapability).to(beNil());
+ expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
+ expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
+ expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
});
});
@@ -416,16 +424,13 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.vrCapability).to(beTrue());
expect(testSystemCapabilityManager.audioPassThruCapabilities).to(equal(testAudioPassThruCapabilities));
expect(testSystemCapabilityManager.pcmStreamCapability).to(equal(testPCMStreamCapability));
- });
- });
- afterEach(^{
- // Make sure the system capabilities properties were not inadverdently set
- expect(testSystemCapabilityManager.phoneCapability).to(beNil());
- expect(testSystemCapabilityManager.navigationCapability).to(beNil());
- expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
- expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
- expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.phoneCapability).to(beNil());
+ expect(testSystemCapabilityManager.navigationCapability).to(beNil());
+ expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
+ expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
+ expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
+ });
});
});
@@ -456,6 +461,19 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.buttonCapabilities).to(beNil());
expect(testSystemCapabilityManager.presetBankCapabilities).to(beNil());
#pragma clang diagnostic pop
+
+ expect(testSystemCapabilityManager.hmiCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.hmiZoneCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.speechCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.prerecordedSpeechCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.vrCapability).to(beFalse());
+ expect(testSystemCapabilityManager.audioPassThruCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.pcmStreamCapability).to(beNil());
+ expect(testSystemCapabilityManager.phoneCapability).to(beNil());
+ expect(testSystemCapabilityManager.navigationCapability).to(beNil());
+ expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
+ expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
+ expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
});
});
@@ -475,23 +493,35 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.buttonCapabilities).to(equal(testButtonCapabilities));
expect(testSystemCapabilityManager.presetBankCapabilities).to(equal(testPresetBankCapabilities));
#pragma clang diagnostic pop
+
+ expect(testSystemCapabilityManager.hmiCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.hmiZoneCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.speechCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.prerecordedSpeechCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.vrCapability).to(beFalse());
+ expect(testSystemCapabilityManager.audioPassThruCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.pcmStreamCapability).to(beNil());
+ expect(testSystemCapabilityManager.phoneCapability).to(beNil());
+ expect(testSystemCapabilityManager.navigationCapability).to(beNil());
+ expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
+ expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
+ expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
});
});
- afterEach(^{
- // Make sure the other RAIR properties and system capabilities were not inadverdently set
- expect(testSystemCapabilityManager.hmiCapabilities).to(beNil());
- expect(testSystemCapabilityManager.hmiZoneCapabilities).to(beNil());
- expect(testSystemCapabilityManager.speechCapabilities).to(beNil());
- expect(testSystemCapabilityManager.prerecordedSpeechCapabilities).to(beNil());
- expect(testSystemCapabilityManager.vrCapability).to(beFalse());
- expect(testSystemCapabilityManager.audioPassThruCapabilities).to(beNil());
- expect(testSystemCapabilityManager.pcmStreamCapability).to(beNil());
- expect(testSystemCapabilityManager.phoneCapability).to(beNil());
- expect(testSystemCapabilityManager.navigationCapability).to(beNil());
- expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
- expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
- expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
+ describe(@"if the setdisplaylayout has nil displaycapabilities", ^{
+ beforeEach(^{
+ testSetDisplayLayoutResponse.success = @YES;
+ testSetDisplayLayoutResponse.displayCapabilities = nil;
+ SDLRPCResponseNotification *notification = [[SDLRPCResponseNotification alloc] initWithName:SDLDidReceiveSetDisplayLayoutResponse object:self rpcResponse:testSetDisplayLayoutResponse];
+ [[NSNotificationCenter defaultCenter] postNotification:notification];
+ });
+
+ it(@"should should save the capabilities", ^{
+ // All the text fields and image fields should be available
+ expect(testSystemCapabilityManager.defaultMainWindowCapability.textFields).to(haveCount(29));
+ expect(testSystemCapabilityManager.defaultMainWindowCapability.imageFields).to(haveCount(14));
+ });
});
});
@@ -883,6 +913,7 @@ describe(@"System capability manager", ^{
expect(testSystemCapabilityManager.videoStreamingCapability).to(beNil());
expect(testSystemCapabilityManager.remoteControlCapability).to(beNil());
expect(testSystemCapabilityManager.appServicesCapabilities).to(beNil());
+ expect(testSystemCapabilityManager.driverDistractionCapability).to(beNil());
expect(testSystemCapabilityManager.seatLocationCapability).to(beNil());
});
});
diff --git a/SmartDeviceLinkTests/TestMultipleFilesConnectionManager.m b/SmartDeviceLinkTests/TestMultipleFilesConnectionManager.m
index ef4756bda..e134d3eb5 100644
--- a/SmartDeviceLinkTests/TestMultipleFilesConnectionManager.m
+++ b/SmartDeviceLinkTests/TestMultipleFilesConnectionManager.m
@@ -24,7 +24,7 @@ NS_ASSUME_NONNULL_BEGIN
if ([[request name] isEqualToString:SDLRPCFunctionNamePutFile]) {
SDLPutFile *putfileRequest = (SDLPutFile *)request;
- TestResponse *response = self.responses[putfileRequest.syncFileName];
+ TestResponse *response = self.responses[putfileRequest.sdlFileName];
if (response == nil || handler == nil) { return; }
handler(request, response.testResponse, response.testError);
diff --git a/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.h b/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.h
new file mode 100644
index 000000000..67e3c8948
--- /dev/null
+++ b/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.h
@@ -0,0 +1,19 @@
+//
+// TestNewConfigurationUpdateManagerDelegate.h
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/4/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+#import "SDLManagerDelegate.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface TestNewConfigurationUpdateManagerDelegate : NSObject <SDLManagerDelegate>
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.m b/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.m
new file mode 100644
index 000000000..fee42d105
--- /dev/null
+++ b/SmartDeviceLinkTests/TestNewConfigurationUpdateManagerDelegate.m
@@ -0,0 +1,21 @@
+//
+// TestNewConfigurationUpdateManagerDelegate.m
+// SmartDeviceLinkTests
+//
+// Created by Joel Fischer on 6/4/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "TestNewConfigurationUpdateManagerDelegate.h"
+
+@implementation TestNewConfigurationUpdateManagerDelegate
+
+- (void)hmiLevel:(nonnull SDLHMILevel)oldLevel didChangeToLevel:(nonnull SDLHMILevel)newLevel { }
+
+- (void)managerDidDisconnect { }
+
+- (nullable SDLLifecycleConfigurationUpdate *)managerShouldUpdateLifecycleToLanguage:(SDLLanguage)language hmiLanguage:(SDLLanguage)hmiLanguage {
+ return nil;
+}
+
+@end
diff --git a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
index 4f823a4e6..ded122d0a 100644
--- a/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
+++ b/SmartDeviceLinkTests/TestUtilities/TestConnectionManager.m
@@ -42,6 +42,10 @@ NS_ASSUME_NONNULL_BEGIN
[self sendConnectionRequest:request withResponseHandler:handler];
}
+- (void)sendConnectionManagerRPC:(__kindof SDLRPCMessage *)rpc {
+ [self sendConnectionRPC:rpc];
+}
+
- (void)sendRequests:(nonnull NSArray<SDLRPCRequest *> *)requests progressHandler:(nullable SDLMultipleAsyncRequestProgressHandler)progressHandler completionHandler:(nullable SDLMultipleRequestCompletionHandler)completionHandler {
[requests enumerateObjectsUsingBlock:^(SDLRPCRequest * _Nonnull request, NSUInteger idx, BOOL * _Nonnull stop) {
[self sendConnectionRequest:request withResponseHandler:nil];
diff --git a/SmartDeviceLinkTests/TransportSpecs/TCP/SDLTCPTransportSpec.m b/SmartDeviceLinkTests/TransportSpecs/TCP/SDLTCPTransportSpec.m
index e9a25f834..a23fec3e5 100644
--- a/SmartDeviceLinkTests/TransportSpecs/TCP/SDLTCPTransportSpec.m
+++ b/SmartDeviceLinkTests/TransportSpecs/TCP/SDLTCPTransportSpec.m
@@ -48,7 +48,6 @@ describe(@"SDLTCPTransport", ^ {
transport.delegate = nil;
server.delegate = nil;
- [transport disconnect];
transport = nil;
transportDelegateMock = nil;
@@ -73,11 +72,15 @@ describe(@"SDLTCPTransport", ^ {
expect(transport.inputStream != nil);
expect(transport.outputStream != nil);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
- expect(transport.ioThread == nil);
- expect(transport.inputStream == nil);
- expect(transport.outputStream == nil);
+ done();
+ }];
+ });
});
it(@"Should invoke onError delegate when connection is refused", ^ {
@@ -101,11 +104,15 @@ describe(@"SDLTCPTransport", ^ {
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
- expect(transport.ioThread == nil);
- expect(transport.inputStream == nil);
- expect(transport.outputStream == nil);
+ done();
+ }];
+ });
});
it(@"Should invoke onError delegate when connection is timed out", ^ {
@@ -121,13 +128,17 @@ describe(@"SDLTCPTransport", ^ {
[transport connect];
// timeout value should be longer than 'ConnectionTimeoutSecs' in SDLTCPTransport
- OCMVerifyAllWithDelay(transportDelegateMock, 60.0);
+ OCMVerifyAllWithDelay(transportDelegateMock, 30.5);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
- expect(transport.ioThread == nil);
- expect(transport.inputStream == nil);
- expect(transport.outputStream == nil);
+ done();
+ }];
+ });
});
it(@"Should invoke onError delegate when input parameter is invalid", ^ {
@@ -144,11 +155,15 @@ describe(@"SDLTCPTransport", ^ {
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
- expect(transport.ioThread == nil);
- expect(transport.inputStream == nil);
- expect(transport.outputStream == nil);
+ done();
+ }];
+ });
});
it(@"Should send out data when send is called", ^ {
@@ -175,11 +190,17 @@ describe(@"SDLTCPTransport", ^ {
OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
-
- [NSThread sleepForTimeInterval:0.5];
expect([receivedData isEqualToData:testData]);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
+
+ done();
+ }];
+ });
});
it(@"Should send out data even if send is called some time after", ^ {
@@ -209,20 +230,25 @@ describe(@"SDLTCPTransport", ^ {
[transport connect];
// check that transport still sends out data long after NSStreamEventHasSpaceAvailable event
- [NSThread sleepForTimeInterval:1.0];
[transport sendData:testData1];
[transport sendData:testData2];
OCMVerifyAllWithDelay(serverDelegateMock, 0.5);
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
-
- [NSThread sleepForTimeInterval:0.5];
expect([receivedData isEqualToData:expectedData]);
// don't receive further delegate events
server.delegate = nil;
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
+
+ done();
+ }];
+ });
});
it(@"Should invoke onDataReceived delegate when received some data", ^ {
@@ -257,11 +283,17 @@ describe(@"SDLTCPTransport", ^ {
[server send:testData2];
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
-
- [NSThread sleepForTimeInterval:0.5];
expect([receivedData isEqualToData:expectedData]);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
+
+ done();
+ }];
+ });
});
it(@"Should generate disconnected event after peer closed connection", ^ {
@@ -284,7 +316,15 @@ describe(@"SDLTCPTransport", ^ {
OCMVerifyAllWithDelay(transportDelegateMock, 0.5);
- [transport disconnect];
+ waitUntilTimeout(1, ^(void (^done)(void)){
+ [transport disconnectWithCompletionHandler:^{
+ expect(transport.ioThread.isCancelled).to(beTrue());
+ expect(transport.inputStream).to(beNil());
+ expect(transport.outputStream).to(beNil());
+
+ done();
+ }];
+ });
});
});
diff --git a/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPDataSessionSpec.m b/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPDataSessionSpec.m
index 1d980b139..5c6112373 100644
--- a/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPDataSessionSpec.m
+++ b/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPDataSessionSpec.m
@@ -23,7 +23,6 @@
@property (weak, nonatomic) id<SDLIAPDataSessionDelegate> delegate;
@property (nonatomic, strong) SDLMutableDataQueue *sendDataQueue;
-@property (nonatomic, strong) dispatch_semaphore_t canceledSemaphore;
@end
@@ -47,7 +46,6 @@ describe(@"SDLIAPDataSession", ^{
it(@"Should init correctly", ^{
expect(dataSession.delegate).to(equal(mockDelegate));
expect(dataSession.sendDataQueue).toNot(beNil());
- expect(dataSession.canceledSemaphore).toNot(beNil());
});
it(@"Should get correctly", ^{
diff --git a/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPTransportSpec.m b/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPTransportSpec.m
index 24d4943c1..808ba33bf 100644
--- a/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPTransportSpec.m
+++ b/SmartDeviceLinkTests/TransportSpecs/iAP/SDLIAPTransportSpec.m
@@ -42,7 +42,7 @@ describe(@"SDLIAPTransport", ^{
__block EAAccessory *mockAccessory = nil;
beforeEach(^{
- transport = [SDLIAPTransport new];
+ transport = [[SDLIAPTransport alloc] init];
mockTransportDelegate = OCMProtocolMock(@protocol(SDLTransportDelegate));
transport.delegate = mockTransportDelegate;
mockAccessory = [EAAccessory.class sdlCoreMock];
@@ -142,26 +142,22 @@ describe(@"SDLIAPTransport", ^{
__block SDLIAPDataSession *mockDataSession = nil;
beforeEach(^{
- mockDataSession = OCMClassMock([SDLIAPDataSession class]);
+ mockDataSession = OCMStrictClassMock([SDLIAPDataSession class]);
OCMStub([mockDataSession isSessionInProgress]).andReturn(YES);
OCMStub([mockDataSession connectionID]).andReturn(mockAccessory.connectionID);
transport.dataSession = mockDataSession;
transport.controlSession = nil;
-
- [[NSNotificationCenter defaultCenter] postNotification:accessoryDisconnectedNotification];
});
- it(@"It should cleanup on disconnect", ^{
- expect(transport.retryCounter).to(equal(0));
- expect(transport.sessionSetupInProgress).to(beFalse());
- expect(transport.transportDestroyed).to(beTrue());
- });
+ it(@"It should cleanup on disconnect, close and destroy data session, and notify the lifecycle manager that the transport disconnected", ^{
+ OCMExpect([mockDataSession destroySessionWithCompletionHandler:[OCMArg invokeBlock]]);
- it(@"It should close and destroy data session", ^{
- OCMVerify([mockDataSession destroySession]);
- });
+ [[NSNotificationCenter defaultCenter] postNotification:accessoryDisconnectedNotification];
+
+ expect(transport.retryCounter).toEventually(equal(0));
+ expect(transport.sessionSetupInProgress).toEventually(beFalse());
+ expect(transport.transportDestroyed).toEventually(beTrue());
- it(@"It should notify the lifecycle manager that the transport disconnected ", ^{
OCMVerify([mockTransportDelegate onTransportDisconnected]);
});
});
@@ -170,26 +166,22 @@ describe(@"SDLIAPTransport", ^{
__block SDLIAPControlSession *mockControlSession = nil;
beforeEach(^{
- mockControlSession = OCMClassMock([SDLIAPControlSession class]);
+ mockControlSession = OCMStrictClassMock([SDLIAPControlSession class]);
OCMStub([mockControlSession isSessionInProgress]).andReturn(YES);
OCMStub([mockControlSession connectionID]).andReturn(mockAccessory.connectionID);
transport.controlSession = mockControlSession;
transport.dataSession = nil;
-
- [[NSNotificationCenter defaultCenter] postNotification:accessoryDisconnectedNotification];
});
- it(@"It should cleanup on disconnect", ^{
- expect(transport.retryCounter).to(equal(0));
- expect(transport.sessionSetupInProgress).to(beFalse());
- expect(transport.transportDestroyed).to(beFalse());
- });
+ it(@"It should cleanup on disconnect, close and destroy data session, and should not tell the delegate that the transport closed", ^{
+ OCMExpect([mockControlSession destroySessionWithCompletionHandler:[OCMArg invokeBlock]]);
- it(@"It should close and destroy data session", ^{
- OCMVerify([mockControlSession destroySession]);
- });
+ [[NSNotificationCenter defaultCenter] postNotification:accessoryDisconnectedNotification];
+
+ expect(transport.retryCounter).toEventually(equal(0));
+ expect(transport.sessionSetupInProgress).toEventually(beFalse());
+ expect(transport.transportDestroyed).toEventually(beFalse());
- it(@"Should not tell the delegate that the transport closed", ^{
OCMReject([mockTransportDelegate onTransportDisconnected]);
});
});
diff --git a/SmartDeviceLink_Example/SubscribeButtonManager.h b/SmartDeviceLink_Example/SubscribeButtonManager.h
new file mode 100644
index 000000000..07ecc4c87
--- /dev/null
+++ b/SmartDeviceLink_Example/SubscribeButtonManager.h
@@ -0,0 +1,25 @@
+//
+// SubscribeButtonManager.h
+// SmartDeviceLink-Example-ObjC
+//
+// Created by Nicole on 6/19/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@class SDLManager;
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SubscribeButtonManager : NSObject
+
+- (instancetype)init NS_UNAVAILABLE;
+- (instancetype)initWithManager:(SDLManager *)manager;
+
+/// Subscribe to all available preset buttons. An alert will be shown when a preset button is short pressed or long pressed.
+- (void)subscribeToAllPresetButtons;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink_Example/SubscribeButtonManager.m b/SmartDeviceLink_Example/SubscribeButtonManager.m
new file mode 100644
index 000000000..80512a7b2
--- /dev/null
+++ b/SmartDeviceLink_Example/SubscribeButtonManager.m
@@ -0,0 +1,69 @@
+//
+// SubscribeButtonManager.m
+// SmartDeviceLink-Example-ObjC
+//
+// Created by Nicole on 6/19/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+#import "SubscribeButtonManager.h"
+
+#import "AlertManager.h"
+#import "SmartDeviceLink.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface SubscribeButtonManager()
+
+@property (strong, nonatomic) SDLManager *sdlManager;
+
+@end
+
+@implementation SubscribeButtonManager
+
+- (instancetype)initWithManager:(SDLManager *)manager {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+
+ _sdlManager = manager;
+
+ return self;
+}
+
+- (void)subscribeToAllPresetButtons {
+ if (self.sdlManager.systemCapabilityManager.defaultMainWindowCapability.numCustomPresetsAvailable.intValue == 0) {
+ SDLLogW(@"The module does not support preset buttons");
+ return;
+ }
+
+ for (SDLButtonName buttonName in [self.class sdlex_allPresetButtons]) {
+ [self.sdlManager.screenManager subscribeButton:buttonName withObserver:self selector:@selector(sdlex_buttonPressEventWithButtonName:error:buttonPress:)];
+ }
+}
+
+- (void)sdlex_buttonPressEventWithButtonName:(SDLButtonName)buttonName error:(NSError *)error buttonPress:(SDLOnButtonPress *)buttonPress {
+ if (error != nil) {
+ SDLLogE(@"There was an error subscribing to the preset button: %@", error.localizedDescription);
+ return;
+ }
+
+ NSString *alertMessage = nil;
+ if ([buttonPress.buttonPressMode isEqualToEnum:SDLButtonPressModeShort]) {
+ alertMessage = [NSString stringWithFormat:@"%@ short pressed", buttonName];
+ } else {
+ alertMessage = [NSString stringWithFormat:@"%@ long pressed", buttonName];
+ }
+
+ SDLAlert *alert = [AlertManager alertWithMessageAndCloseButton:alertMessage textField2:nil iconName:nil];
+ [self.sdlManager sendRPC:alert];
+}
+
++ (NSArray<SDLButtonName> *)sdlex_allPresetButtons {
+ return @[SDLButtonNamePreset0, SDLButtonNamePreset1, SDLButtonNamePreset2, SDLButtonNamePreset3, SDLButtonNamePreset4, SDLButtonNamePreset5, SDLButtonNamePreset6, SDLButtonNamePreset7];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/SmartDeviceLink_Example/SubscribeButtonManager.swift b/SmartDeviceLink_Example/SubscribeButtonManager.swift
new file mode 100644
index 000000000..6567d9e64
--- /dev/null
+++ b/SmartDeviceLink_Example/SubscribeButtonManager.swift
@@ -0,0 +1,53 @@
+//
+// SubscribeButtonManager.swift
+// SmartDeviceLink
+//
+// Created by Nicole on 6/19/20.
+// Copyright © 2020 smartdevicelink. All rights reserved.
+//
+
+import Foundation
+import SmartDeviceLink
+import SmartDeviceLinkSwift
+
+class SubscribeButtonManager: NSObject {
+ private let sdlManager: SDLManager!
+ private let presetButtons: [SDLButtonName] = [.preset0, .preset1, .preset2, .preset3, .preset4, .preset5, .preset6, .preset7]
+
+ init(sdlManager: SDLManager) {
+ self.sdlManager = sdlManager
+ }
+
+ /// Subscribe to all available preset buttons. An alert will be shown when a preset button is short pressed or long pressed.
+ func subscribeToPresetButtons() {
+ guard (sdlManager.systemCapabilityManager.defaultMainWindowCapability?.numCustomPresetsAvailable?.intValue ?? 0) > 0 else {
+ SDLLog.w("The module does not support preset buttons")
+ return
+ }
+
+ presetButtons.forEach { buttonName in
+ sdlManager.screenManager.subscribeButton(buttonName, withObserver: self, selector: #selector(buttonPressEvent(buttonName:error:buttonPress:)))
+ }
+ }
+
+ @objc private func buttonPressEvent(buttonName: SDLButtonName, error: Error?, buttonPress: SDLOnButtonPress?) {
+ if let error = error {
+ SDLLog.e("There was an error subscribing to the preset button: \(error)")
+ return
+ }
+
+ guard let buttonPress = buttonPress else { return }
+
+ let alert: SDLAlert
+ let buttonNameString = buttonName.rawValue.rawValue
+ switch buttonPress.buttonPressMode {
+ case .short:
+ alert = AlertManager.alertWithMessageAndCloseButton("\(buttonNameString) short pressed")
+ case .long:
+ alert = AlertManager.alertWithMessageAndCloseButton("\(buttonNameString) long pressed")
+ default: fatalError()
+ }
+
+ sdlManager.send(alert)
+ }
+}
diff --git a/bson_c_lib b/bson_c_lib
-Subproject 5e79ef239b88246504ca8efa017479bf417c516
+Subproject 9cacdaffa64bba1231489e2a28d2045e0c6e93a
diff --git a/codecov.yml b/codecov.yml
index dbf6a6562..482cfbe10 100644
--- a/codecov.yml
+++ b/codecov.yml
@@ -5,7 +5,8 @@ coverage:
ignore:
- Carthage/.*
- SmartDeviceLinkTests/.*
- - SmartDeviceLinkExample/.*
+ - Example Apps/.*
+ - bson_c_lib/.*
status:
project: false
patch:
diff --git a/docs/Classes.html b/docs/Classes.html
index 8b7670743..c6781fd86 100644
--- a/docs/Classes.html
+++ b/docs/Classes.html
@@ -180,6 +180,7 @@
<li><a href="#section-SDLPerformAudioPassThruResponse">SDLPerformAudioPassThruResponse</a></li>
<li><a href="#section-SDLPerformInteraction">SDLPerformInteraction</a></li>
<li><a href="#section-SDLPerformInteractionResponse">SDLPerformInteractionResponse</a></li>
+ <li><a href="#section-SDLPermissionElement">SDLPermissionElement</a></li>
<li><a href="#section-SDLPermissionItem">SDLPermissionItem</a></li>
<li><a href="#section-SDLPermissionManager">SDLPermissionManager</a></li>
<li><a href="#section-SDLPhoneCapability">SDLPhoneCapability</a></li>
@@ -194,6 +195,7 @@
<li><a href="#section-SDLRPCMessage">SDLRPCMessage</a></li>
<li><a href="#section-SDLRPCNotification">SDLRPCNotification</a></li>
<li><a href="#section-SDLRPCNotificationNotification">SDLRPCNotificationNotification</a></li>
+ <li><a href="#section-SDLRPCPermissionStatus">SDLRPCPermissionStatus</a></li>
<li><a href="#section-SDLRPCRequest">SDLRPCRequest</a></li>
<li><a href="#section-SDLRPCRequestNotification">SDLRPCRequestNotification</a></li>
<li><a href="#section-SDLRPCResponse">SDLRPCResponse</a></li>
@@ -1742,7 +1744,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLEncodedSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCRequest.html">SDLRPCRequest</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLEncodedSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCRequest.html">SDLRPCRequest</a></span></code></pre>
<h4>Swift</h4>
@@ -1762,7 +1765,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLEncodedSyncPDataResponse</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCResponse.html">SDLRPCResponse</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLEncodedSyncPDataResponse</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCResponse.html">SDLRPCResponse</a></span></code></pre>
<h4>Swift</h4>
@@ -3545,7 +3549,8 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLOnEncodedSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLOnEncodedSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
<h4>Swift</h4>
@@ -3743,7 +3748,8 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLOnSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLOnSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span></code></pre>
<h4>Swift</h4>
@@ -4042,6 +4048,25 @@ A keyboard can be used for searches. For example, the user could be asked to ent
+ <h3 id="section-SDLPermissionElement">
+ SDLPermissionElement
+ </h3>
+
+ <p>An object containing the RPC name and its parameter names that should be checked when checking permissions</p>
+
+ <a href="Classes/SDLPermissionElement.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLPermissionElement</span> <span class="p">:</span> <span class="nc">NSObject</span> <span class="o">&lt;</span><span class="n">NSCopying</span><span class="o">&gt;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLPermissionElement</span> <span class="p">:</span> <span class="kt">NSObject</span><span class="p">,</span> <span class="kt">NSCopying</span></code></pre>
+
+
+
+
<h3 id="section-SDLPermissionItem">
SDLPermissionItem
</h3>
@@ -4325,6 +4350,25 @@ Subsequent calls with the same service type will update the manifest for that se
+ <h3 id="section-SDLRPCPermissionStatus">
+ SDLRPCPermissionStatus
+ </h3>
+
+ <p>An object containing the result status of a permission element request</p>
+
+ <a href="Classes/SDLRPCPermissionStatus.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLRPCPermissionStatus</span> <span class="p">:</span> <span class="nc">NSObject</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">class</span> <span class="kt">SDLRPCPermissionStatus</span> <span class="p">:</span> <span class="kt">NSObject</span></code></pre>
+
+
+
+
<h3 id="section-SDLRPCRequest">
SDLRPCRequest
</h3>
@@ -5632,7 +5676,7 @@ change the settings of a specific remote control module.</p>
SDLStreamingMediaManager
</h3>
- <p>Manager to help control streaming media services.</p>
+ <p>Manager to help control streaming (video and audio) media services.</p>
<a href="Classes/SDLStreamingMediaManager.html" class="slightly-smaller">See more</a>
@@ -5879,7 +5923,8 @@ change the settings of a specific remote control module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCRequest.html">SDLRPCRequest</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLSyncPData</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCRequest.html">SDLRPCRequest</a></span></code></pre>
<h4>Swift</h4>
@@ -5899,7 +5944,8 @@ change the settings of a specific remote control module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@interface</span> <span class="nc">SDLSyncPDataResponse</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCResponse.html">SDLRPCResponse</a></span></code></pre>
+ <pre class="highlight objective_c"><code>
+<span class="k">@interface</span> <span class="nc">SDLSyncPDataResponse</span> <span class="p">:</span> <span class="nc"><a href="Classes/SDLRPCResponse.html">SDLRPCResponse</a></span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAddCommand.html b/docs/Classes/SDLAddCommand.html
index f67ca926f..adfa80839 100644
--- a/docs/Classes/SDLAddCommand.html
+++ b/docs/Classes/SDLAddCommand.html
@@ -322,8 +322,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler">SDLRPCCommandNotificationHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -345,7 +344,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -367,7 +366,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMenuParams.html">SDLMenuParams</a></span> <span class="o">*</span><span class="n">menuParams</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMenuParams.html">SDLMenuParams</a></span> <span class="o">*</span><span class="n">menuParams</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -389,8 +388,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -412,7 +410,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">cmdIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">cmdIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAddSubMenu.html b/docs/Classes/SDLAddSubMenu.html
index 4f5c11ea0..24f1ce665 100644
--- a/docs/Classes/SDLAddSubMenu.html
+++ b/docs/Classes/SDLAddSubMenu.html
@@ -180,7 +180,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -213,7 +213,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">position</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">position</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -232,7 +232,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -250,7 +250,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">menuIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">menuIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -268,7 +268,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">menuLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">menuLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAirbagStatus.html b/docs/Classes/SDLAirbagStatus.html
index 498e1c3b6..19c43a0e2 100644
--- a/docs/Classes/SDLAirbagStatus.html
+++ b/docs/Classes/SDLAirbagStatus.html
@@ -30,8 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -51,8 +50,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverSideAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverSideAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,8 +70,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverCurtainAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverCurtainAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -93,8 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,8 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerCurtainAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerCurtainAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -135,8 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverKneeAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverKneeAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,8 +150,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerSideAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerSideAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -177,8 +170,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerKneeAirbagDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerKneeAirbagDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAlert.html b/docs/Classes/SDLAlert.html
index 396ccbe1c..f6fd6122e 100644
--- a/docs/Classes/SDLAlert.html
+++ b/docs/Classes/SDLAlert.html
@@ -523,7 +523,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -547,7 +547,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -570,7 +570,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText3</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">alertText3</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -594,8 +594,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsChunks</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsChunks</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -617,7 +616,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">duration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">duration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -639,7 +638,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">playTone</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">playTone</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -661,8 +660,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">progressIndicator</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">progressIndicator</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -684,8 +682,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -711,7 +708,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -732,7 +729,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">alertIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">alertIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAlertManeuver.html b/docs/Classes/SDLAlertManeuver.html
index f7d08ba55..d3535b883 100644
--- a/docs/Classes/SDLAlertManeuver.html
+++ b/docs/Classes/SDLAlertManeuver.html
@@ -95,8 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsChunks</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsChunks</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -121,8 +120,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAlertResponse.html b/docs/Classes/SDLAlertResponse.html
index f01d5d510..d69ffc454 100644
--- a/docs/Classes/SDLAlertResponse.html
+++ b/docs/Classes/SDLAlertResponse.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tryAgainTime</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tryAgainTime</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppInfo.html b/docs/Classes/SDLAppInfo.html
index 2aa01a84b..a72c38363 100644
--- a/docs/Classes/SDLAppInfo.html
+++ b/docs/Classes/SDLAppInfo.html
@@ -48,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appDisplayName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appDisplayName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -68,7 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appBundleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appBundleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -88,7 +88,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppServiceCapability.html b/docs/Classes/SDLAppServiceCapability.html
index eaf60a358..17df8fbe6 100644
--- a/docs/Classes/SDLAppServiceCapability.html
+++ b/docs/Classes/SDLAppServiceCapability.html
@@ -88,8 +88,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason">SDLServiceUpdateReason</a></span> <span class="n">updateReason</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason">SDLServiceUpdateReason</a></span> <span class="n">updateReason</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -109,8 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServiceRecord.html">SDLAppServiceRecord</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">updatedAppServiceRecord</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceRecord.html">SDLAppServiceRecord</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">updatedAppServiceRecord</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppServiceData.html b/docs/Classes/SDLAppServiceData.html
index 9a4cfcf7d..b7c6214c1 100644
--- a/docs/Classes/SDLAppServiceData.html
+++ b/docs/Classes/SDLAppServiceData.html
@@ -201,7 +201,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -221,7 +221,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -241,8 +241,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLMediaServiceData.html">SDLMediaServiceData</a></span> <span class="o">*</span><span class="n">mediaServiceData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMediaServiceData.html">SDLMediaServiceData</a></span> <span class="o">*</span><span class="n">mediaServiceData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -262,8 +261,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLWeatherServiceData.html">SDLWeatherServiceData</a></span> <span class="o">*</span><span class="n">weatherServiceData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLWeatherServiceData.html">SDLWeatherServiceData</a></span> <span class="o">*</span><span class="n">weatherServiceData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -283,8 +281,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLNavigationServiceData.html">SDLNavigationServiceData</a></span> <span class="o">*</span><span class="n">navigationServiceData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLNavigationServiceData.html">SDLNavigationServiceData</a></span> <span class="o">*</span><span class="n">navigationServiceData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppServiceManifest.html b/docs/Classes/SDLAppServiceManifest.html
index bd6863bf6..25370a759 100644
--- a/docs/Classes/SDLAppServiceManifest.html
+++ b/docs/Classes/SDLAppServiceManifest.html
@@ -449,7 +449,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">serviceName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">serviceName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -469,7 +469,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -489,7 +489,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">serviceIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">serviceIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -509,8 +509,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowAppConsumers</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowAppConsumers</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -530,8 +529,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">rpcSpecVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">rpcSpecVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -551,8 +549,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">maxRPCSpecVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">maxRPCSpecVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -572,12 +569,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">handledRPCs</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">handledRPCs</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">handledRPCs</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">handledRPCs</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -593,8 +589,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes.html#/c:objc(cs)SDLMediaServiceManifest">SDLMediaServiceManifest</a></span> <span class="o">*</span><span class="n">mediaServiceManifest</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes.html#/c:objc(cs)SDLMediaServiceManifest">SDLMediaServiceManifest</a></span> <span class="o">*</span><span class="n">mediaServiceManifest</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -614,8 +609,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLWeatherServiceManifest.html">SDLWeatherServiceManifest</a></span> <span class="o">*</span><span class="n">weatherServiceManifest</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLWeatherServiceManifest.html">SDLWeatherServiceManifest</a></span> <span class="o">*</span><span class="n">weatherServiceManifest</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -635,8 +629,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLNavigationServiceManifest.html">SDLNavigationServiceManifest</a></span> <span class="o">*</span><span class="n">navigationServiceManifest</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLNavigationServiceManifest.html">SDLNavigationServiceManifest</a></span> <span class="o">*</span><span class="n">navigationServiceManifest</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppServiceRecord.html b/docs/Classes/SDLAppServiceRecord.html
index dbd78a845..58e11ee7c 100644
--- a/docs/Classes/SDLAppServiceRecord.html
+++ b/docs/Classes/SDLAppServiceRecord.html
@@ -66,7 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -86,8 +86,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServiceManifest.html">SDLAppServiceManifest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceManifest</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceManifest.html">SDLAppServiceManifest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceManifest</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -107,8 +106,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">servicePublished</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">servicePublished</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -128,8 +126,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAppServicesCapabilities.html b/docs/Classes/SDLAppServicesCapabilities.html
index 7b16e99e7..0143879b6 100644
--- a/docs/Classes/SDLAppServicesCapabilities.html
+++ b/docs/Classes/SDLAppServicesCapabilities.html
@@ -54,8 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAppServiceCapability.html">SDLAppServiceCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">appServices</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAppServiceCapability.html">SDLAppServiceCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">appServices</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLArtwork.html b/docs/Classes/SDLArtwork.html
index 886f71595..fc03ce8e5 100644
--- a/docs/Classes/SDLArtwork.html
+++ b/docs/Classes/SDLArtwork.html
@@ -32,7 +32,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -50,7 +50,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageRPC</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageRPC</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAudioControlCapabilities.html b/docs/Classes/SDLAudioControlCapabilities.html
index 6a5105a3d..706d774b4 100644
--- a/docs/Classes/SDLAudioControlCapabilities.html
+++ b/docs/Classes/SDLAudioControlCapabilities.html
@@ -178,7 +178,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -198,8 +198,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sourceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sourceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -219,8 +218,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContextAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContextAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,8 +238,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volumeAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volumeAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -261,8 +258,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -283,8 +279,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerMaxChannelId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">equalizerMaxChannelId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -304,7 +299,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAudioControlData.html b/docs/Classes/SDLAudioControlData.html
index d086add35..0b87d5883 100644
--- a/docs/Classes/SDLAudioControlData.html
+++ b/docs/Classes/SDLAudioControlData.html
@@ -70,7 +70,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">source</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">source</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -94,8 +94,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContext</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">keepContext</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -115,7 +114,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volume</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">volume</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -135,8 +134,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">equalizerSettings</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLEqualizerSettings.html">SDLEqualizerSettings</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">equalizerSettings</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAudioFile.html b/docs/Classes/SDLAudioFile.html
index ee86b5ada..9218be08b 100644
--- a/docs/Classes/SDLAudioFile.html
+++ b/docs/Classes/SDLAudioFile.html
@@ -27,7 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">inputFileURL</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">inputFileURL</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -45,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">outputFileURL</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">outputFileURL</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -63,7 +63,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt32</span> <span class="n">estimatedDuration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt32</span> <span class="n">estimatedDuration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -81,7 +81,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -99,7 +99,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">fileSize</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">fileSize</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAudioPassThruCapabilities.html b/docs/Classes/SDLAudioPassThruCapabilities.html
index 0594eb79e..72ed567c0 100644
--- a/docs/Classes/SDLAudioPassThruCapabilities.html
+++ b/docs/Classes/SDLAudioPassThruCapabilities.html
@@ -27,7 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate">SDLSamplingRate</a></span> <span class="n">_Nonnull</span> <span class="n">samplingRate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate">SDLSamplingRate</a></span> <span class="n">_Nonnull</span> <span class="n">samplingRate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample">SDLBitsPerSample</a></span> <span class="n">_Nonnull</span> <span class="n">bitsPerSample</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample">SDLBitsPerSample</a></span> <span class="n">_Nonnull</span> <span class="n">bitsPerSample</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -67,7 +67,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType">SDLAudioType</a></span> <span class="n">_Nonnull</span> <span class="n">audioType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType">SDLAudioType</a></span> <span class="n">_Nonnull</span> <span class="n">audioType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLAudioStreamManager.html b/docs/Classes/SDLAudioStreamManager.html
index 807ea8372..71ca06503 100644
--- a/docs/Classes/SDLAudioStreamManager.html
+++ b/docs/Classes/SDLAudioStreamManager.html
@@ -29,8 +29,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLAudioStreamManagerDelegate.html">SDLAudioStreamManagerDelegate</a></span><span class="o">&gt;</span> <span class="n">_Nullable</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLAudioStreamManagerDelegate.html">SDLAudioStreamManagerDelegate</a></span><span class="o">&gt;</span> <span class="n">_Nullable</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
@@ -45,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isPlaying</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">playing</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isPlaying</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">playing</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -63,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioFile.html">SDLAudioFile</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">queue</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioFile.html">SDLAudioFile</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">queue</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLBeltStatus.html b/docs/Classes/SDLBeltStatus.html
index 1ca7b063f..55bd37aa8 100644
--- a/docs/Classes/SDLBeltStatus.html
+++ b/docs/Classes/SDLBeltStatus.html
@@ -37,8 +37,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverBeltDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverBeltDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -58,8 +57,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerBeltDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerBeltDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -79,8 +77,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerBuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerBuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -100,8 +97,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverBuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">driverBuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -121,8 +117,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRow2BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRow2BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -142,8 +137,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerChildDetected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">passengerChildDetected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -163,8 +157,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRow2BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRow2BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -184,8 +177,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow2BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow2BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -205,8 +197,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow3BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow3BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -226,8 +217,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRow3BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRow3BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -247,8 +237,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRow3BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRow3BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -268,8 +257,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRearInflatableBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">leftRearInflatableBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -289,8 +277,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRearInflatableBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rightRearInflatableBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -310,8 +297,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow1BeltDeployed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow1BeltDeployed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -331,8 +317,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow1BuckleBelted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">middleRow1BuckleBelted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLBodyInformation.html b/docs/Classes/SDLBodyInformation.html
index b0bb7d388..6c566088c 100644
--- a/docs/Classes/SDLBodyInformation.html
+++ b/docs/Classes/SDLBodyInformation.html
@@ -32,8 +32,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parkBrakeActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parkBrakeActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -56,8 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus">SDLIgnitionStableStatus</a></span> <span class="n">_Nonnull</span> <span class="n">ignitionStableStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus">SDLIgnitionStableStatus</a></span> <span class="n">_Nonnull</span> <span class="n">ignitionStableStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,8 +78,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus">SDLIgnitionStatus</a></span> <span class="n">_Nonnull</span> <span class="n">ignitionStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus">SDLIgnitionStatus</a></span> <span class="n">_Nonnull</span> <span class="n">ignitionStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -104,8 +101,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverDoorAjar</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverDoorAjar</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -128,8 +124,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">passengerDoorAjar</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">passengerDoorAjar</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -152,8 +147,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rearLeftDoorAjar</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rearLeftDoorAjar</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -176,8 +170,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rearRightDoorAjar</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rearRightDoorAjar</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLButtonCapabilities.html b/docs/Classes/SDLButtonCapabilities.html
index de7128817..718c990bc 100644
--- a/docs/Classes/SDLButtonCapabilities.html
+++ b/docs/Classes/SDLButtonCapabilities.html
@@ -32,7 +32,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">shortPressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">shortPressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -73,8 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longPressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longPressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -94,8 +92,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">upDownAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">upDownAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -115,7 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLButtonPress.html b/docs/Classes/SDLButtonPress.html
index 79456472b..488290b33 100644
--- a/docs/Classes/SDLButtonPress.html
+++ b/docs/Classes/SDLButtonPress.html
@@ -5,6 +5,7 @@
<ul>
<li><a href="#section--initWithButtonName:moduleType:">-initWithButtonName:moduleType:</a></li>
<li><a href="#section--initWithButtonName:moduleType:moduleId:">-initWithButtonName:moduleType:moduleId:</a></li>
+ <li><a href="#section--initWithButtonName:moduleType:moduleId:buttonPressMode:">-initWithButtonName:moduleType:moduleId:buttonPressMode:</a></li>
<li><a href="#section-moduleType">moduleType</a></li>
<li><a href="#section-moduleId">moduleId</a></li>
<li><a href="#section-buttonName">buttonName</a></li>
@@ -82,6 +83,43 @@
<p>An instance of the SDLButtonPress class.</p>
</div>
+ <h3 id="section--initWithButtonName:moduleType:moduleId:buttonPressMode:">
+ -initWithButtonName:moduleType:moduleId:buttonPressMode:
+ </h3>
+
+ <p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithButtonName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">)</span><span class="nv">buttonName</span>
+ <span class="nf">moduleType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span><span class="p">)</span><span class="nv">moduleType</span>
+ <span class="nf">moduleId</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">moduleId</span>
+ <span class="nf">buttonPressMode</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span><span class="p">)</span><span class="nv">buttonPressMode</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">buttonName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">,</span> <span class="nv">moduleType</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span><span class="p">,</span> <span class="nv">moduleId</span><span class="p">:</span> <span class="kt">String</span><span class="p">?,</span> <span class="nv">buttonPressMode</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>buttonName</dt>
+ <dd><p>the name of the button</p></dd>
+ <dt>moduleType</dt>
+ <dd><p>the module where the button should be pressed</p></dd>
+ <dt>moduleId</dt>
+ <dd><p>the id of the module</p></dd>
+ <dt>buttonPressMode</dt>
+ <dd><p>indicates LONG or SHORT button press event</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLButtonPress class.</p>
+ </div>
+
<h3 id="section-moduleType">
moduleType
</h3>
@@ -91,7 +129,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -111,7 +149,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -129,7 +167,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -147,8 +185,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonPressMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonPressMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLCancelInteraction.html b/docs/Classes/SDLCancelInteraction.html
index fe63b1368..181dc792f 100644
--- a/docs/Classes/SDLCancelInteraction.html
+++ b/docs/Classes/SDLCancelInteraction.html
@@ -292,7 +292,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -314,7 +314,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">functionID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">functionID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLCarWindowViewController.html b/docs/Classes/SDLCarWindowViewController.html
index dceafca81..0d8c23a49 100644
--- a/docs/Classes/SDLCarWindowViewController.html
+++ b/docs/Classes/SDLCarWindowViewController.html
@@ -21,8 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">UIInterfaceOrientation</span> <span class="n">supportedOrientation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">UIInterfaceOrientation</span> <span class="n">supportedOrientation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLChangeRegistration.html b/docs/Classes/SDLChangeRegistration.html
index 70cf53039..ea1968447 100644
--- a/docs/Classes/SDLChangeRegistration.html
+++ b/docs/Classes/SDLChangeRegistration.html
@@ -106,7 +106,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -124,7 +124,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -144,7 +144,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -164,7 +164,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -184,7 +184,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">ngnMediaScreenAppName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">ngnMediaScreenAppName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -204,7 +204,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrSynonyms</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrSynonyms</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLChoice.html b/docs/Classes/SDLChoice.html
index cd8b7e4be..6d02238bb 100644
--- a/docs/Classes/SDLChoice.html
+++ b/docs/Classes/SDLChoice.html
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choiceID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choiceID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,8 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -174,7 +173,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -194,7 +193,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -214,7 +213,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -234,7 +233,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">secondaryImage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">secondaryImage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLChoiceCell.html b/docs/Classes/SDLChoiceCell.html
index d21f83c13..6f912d8a7 100644
--- a/docs/Classes/SDLChoiceCell.html
+++ b/docs/Classes/SDLChoiceCell.html
@@ -30,7 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">secondaryText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -66,7 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tertiaryText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -84,8 +84,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -103,7 +102,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -121,7 +120,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryArtwork</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryArtwork</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLChoiceSet.html b/docs/Classes/SDLChoiceSet.html
index 1d738b36b..abf190393 100644
--- a/docs/Classes/SDLChoiceSet.html
+++ b/docs/Classes/SDLChoiceSet.html
@@ -35,7 +35,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">defaultTimeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">defaultTimeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -53,7 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">defaultLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">defaultLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -71,7 +71,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">title</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">title</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,8 +89,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,7 +107,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">layout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLChoiceSetLayout.html">SDLChoiceSetLayout</a></span> <span class="n">layout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -126,7 +125,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSTimeInterval</span> <span class="n">timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -144,8 +143,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -163,8 +161,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -187,8 +184,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpList</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpList</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -206,7 +202,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span> <span class="n">_Nullable</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLChoiceSetDelegate.html">SDLChoiceSetDelegate</a></span><span class="o">&gt;</span> <span class="n">_Nullable</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
@@ -223,8 +219,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choices</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choices</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLClimateControlCapabilities.html b/docs/Classes/SDLClimateControlCapabilities.html
index 95112f2f5..5a3da5c40 100644
--- a/docs/Classes/SDLClimateControlCapabilities.html
+++ b/docs/Classes/SDLClimateControlCapabilities.html
@@ -311,7 +311,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -332,8 +332,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fanSpeedAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fanSpeedAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -354,8 +353,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">desiredTemperatureAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">desiredTemperatureAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -376,8 +374,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -398,8 +395,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acMaxEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acMaxEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -420,8 +416,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">circulateAirEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">circulateAirEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -442,8 +437,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">autoModeEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">autoModeEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -464,8 +458,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dualModeEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dualModeEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -486,8 +479,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">defrostZoneAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">defrostZoneAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -507,8 +499,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">defrostZone</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">defrostZone</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -529,8 +520,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ventilationModeAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ventilationModeAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -551,8 +541,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ventilationMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ventilationMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -573,8 +562,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -595,8 +583,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -617,8 +604,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -639,8 +625,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -661,8 +646,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">climateEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">climateEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -682,7 +666,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLClimateControlData.html b/docs/Classes/SDLClimateControlData.html
index 450843dbb..8862520e6 100644
--- a/docs/Classes/SDLClimateControlData.html
+++ b/docs/Classes/SDLClimateControlData.html
@@ -229,7 +229,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fanSpeed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fanSpeed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -254,8 +254,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">currentTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">currentTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -275,8 +274,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">desiredTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">desiredTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -296,7 +294,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -316,8 +314,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">circulateAirEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">circulateAirEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -337,8 +334,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">autoModeEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">autoModeEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -358,7 +354,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span> <span class="n">defrostZone</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone">SDLDefrostZone</a></span> <span class="n">defrostZone</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -378,8 +374,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dualModeEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dualModeEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -399,8 +394,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acMaxEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acMaxEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -420,8 +414,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span> <span class="n">ventilationMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode">SDLVentilationMode</a></span> <span class="n">ventilationMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -441,8 +434,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedSteeringWheelEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -462,8 +454,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedWindshieldEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -483,8 +474,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedRearWindowEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -504,8 +494,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatedMirrorsEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -525,8 +514,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">climateEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">climateEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLCloudAppProperties.html b/docs/Classes/SDLCloudAppProperties.html
index f6e8e52de..ff33b6302 100644
--- a/docs/Classes/SDLCloudAppProperties.html
+++ b/docs/Classes/SDLCloudAppProperties.html
@@ -104,8 +104,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">nicknames</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">nicknames</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -125,7 +124,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -145,7 +144,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">enabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">enabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -165,7 +164,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">authToken</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">authToken</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -185,7 +184,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudTransportType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudTransportType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -205,8 +204,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference">SDLHybridAppPreference</a></span> <span class="n">hybridAppPreference</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference">SDLHybridAppPreference</a></span> <span class="n">hybridAppPreference</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -226,7 +224,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">endpoint</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">endpoint</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLClusterModeStatus.html b/docs/Classes/SDLClusterModeStatus.html
index f97370ea1..2cc6537c0 100644
--- a/docs/Classes/SDLClusterModeStatus.html
+++ b/docs/Classes/SDLClusterModeStatus.html
@@ -26,8 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">powerModeActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">powerModeActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,8 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus">SDLPowerModeQualificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">powerModeQualificationStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus">SDLPowerModeQualificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">powerModeQualificationStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -68,7 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus">SDLCarModeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">carModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus">SDLCarModeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">carModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -88,8 +86,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus">SDLPowerModeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">powerModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus">SDLPowerModeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">powerModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLConfiguration.html b/docs/Classes/SDLConfiguration.html
index 607c38900..09593f5e0 100644
--- a/docs/Classes/SDLConfiguration.html
+++ b/docs/Classes/SDLConfiguration.html
@@ -9,16 +9,16 @@
<li><a href="#section-streamingMediaConfig">streamingMediaConfig</a></li>
<li><a href="#section-fileManagerConfig">fileManagerConfig</a></li>
<li><a href="#section-encryptionConfig">encryptionConfig</a></li>
+ <li><a href="#section--initWithLifecycle:lockScreen:logging:fileManager:encryption:">-initWithLifecycle:lockScreen:logging:fileManager:encryption:</a></li>
+ <li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:">-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:">-initWithLifecycle:lockScreen:logging:</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:fileManager:">-initWithLifecycle:lockScreen:logging:fileManager:</a></li>
- <li><a href="#section--initWithLifecycle:lockScreen:logging:fileManager:encryption:">-initWithLifecycle:lockScreen:logging:fileManager:encryption:</a></li>
- <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:">+configurationWithLifecycle:lockScreen:logging:</a></li>
- <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:fileManager:">+configurationWithLifecycle:lockScreen:logging:fileManager:</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:">-initWithLifecycle:lockScreen:logging:streamingMedia:</a></li>
<li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:</a></li>
- <li><a href="#section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:">-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:</a></li>
- <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:">+configurationWithLifecycle:lockScreen:logging:streamingMedia:</a></li>
+ <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:fileManager:">+configurationWithLifecycle:lockScreen:logging:fileManager:</a></li>
<li><a href="#section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:</a></li>
+ <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:">+configurationWithLifecycle:lockScreen:logging:streamingMedia:</a></li>
+ <li><a href="#section-+configurationWithLifecycle:lockScreen:logging:">+configurationWithLifecycle:lockScreen:logging:</a></li>
</ul>
<h3>Overview</h3>
@@ -36,8 +36,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lifecycleConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lifecycleConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -55,8 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,8 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">loggingConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">loggingConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -93,12 +90,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">streamingMediaConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="n">streamingMediaConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">streamingMediaConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">streamingMediaConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
@@ -112,8 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileManagerConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileManagerConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,8 +126,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">encryptionConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">encryptionConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,45 +135,11 @@
- <h3 id="section--initWithLifecycle:lockScreen:logging:">
- -initWithLifecycle:lockScreen:logging:
- </h3>
-
- <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
- <span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
- <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
- <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?)</span></code></pre>
-
-
-
- <h4>Parameters</h4>
- <dl>
- <dt>lifecycleConfig</dt>
- <dd><p>The lifecycle configuration to be used.</p></dd>
- <dt>lockScreenConfig</dt>
- <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
- <dt>logConfig</dt>
- <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
- </dl>
- <div>
- <h4>Return Value</h4>
- <p>The configuration</p>
- </div>
-
- <h3 id="section--initWithLifecycle:lockScreen:logging:fileManager:">
- -initWithLifecycle:lockScreen:logging:fileManager:
+ <h3 id="section--initWithLifecycle:lockScreen:logging:fileManager:encryption:">
+ -initWithLifecycle:lockScreen:logging:fileManager:encryption:
</h3>
- <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.</p>
@@ -188,11 +148,12 @@
<span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
<span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
<span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
- <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+ <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span>
+ <span class="nf">encryption</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">encryptionConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?)</span></code></pre>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?,</span> <span class="n">encryption</span> <span class="nv">encryptionConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span><span class="p">?)</span></code></pre>
@@ -206,17 +167,19 @@
<dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
<dt>fileManagerConfig</dt>
<dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
+ <dt>encryptionConfig</dt>
+ <dd><p>The encryption configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
<p>The configuration</p>
</div>
- <h3 id="section--initWithLifecycle:lockScreen:logging:fileManager:encryption:">
- -initWithLifecycle:lockScreen:logging:fileManager:encryption:
+ <h3 id="section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:">
+ -initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:
</h3>
- <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.</p>
@@ -225,12 +188,14 @@
<span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
<span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
<span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">streamingMedia</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span>
<span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span>
<span class="nf">encryption</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">encryptionConfig</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?,</span> <span class="n">encryption</span> <span class="nv">encryptionConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span><span class="p">?)</span></code></pre>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">streamingMedia</span> <span class="nv">streamingMediaConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?,</span> <span class="n">encryption</span> <span class="nv">encryptionConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span><span class="p">?)</span></code></pre>
@@ -242,6 +207,8 @@
<dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
<dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>streamingMediaConfig</dt>
+ <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
<dt>fileManagerConfig</dt>
<dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
<dt>encryptionConfig</dt>
@@ -252,8 +219,8 @@
<p>The configuration</p>
</div>
- <h3 id="section-+configurationWithLifecycle:lockScreen:logging:">
- +configurationWithLifecycle:lockScreen:logging:
+ <h3 id="section--initWithLifecycle:lockScreen:logging:">
+ -initWithLifecycle:lockScreen:logging:
</h3>
<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>
@@ -261,14 +228,15 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
- <span class="nf">configurationWithLifecycle</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
- <span class="nf">lockScreen</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
- <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span><span class="p">;</span></code></pre>
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?)</span></code></pre>
+
<h4>Parameters</h4>
@@ -285,8 +253,8 @@
<p>The configuration</p>
</div>
- <h3 id="section-+configurationWithLifecycle:lockScreen:logging:fileManager:">
- +configurationWithLifecycle:lockScreen:logging:fileManager:
+ <h3 id="section--initWithLifecycle:lockScreen:logging:fileManager:">
+ -initWithLifecycle:lockScreen:logging:fileManager:
</h3>
<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>
@@ -294,16 +262,16 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
- <span class="nf">configurationWithLifecycle</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
- <span class="nf">lockScreen</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
- <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
- <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig">fileManagerConfig</a></span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span><span class="p">;</span></code></pre>
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?)</span></code></pre>
+
<h4>Parameters</h4>
@@ -401,30 +369,66 @@
<p>The configuration</p>
</div>
- <h3 id="section--initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:">
- -initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:
+ <h3 id="section-+configurationWithLifecycle:lockScreen:logging:fileManager:">
+ +configurationWithLifecycle:lockScreen:logging:fileManager:
</h3>
- <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
- <span class="nf">initWithLifecycle</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
- <span class="nf">lockScreen</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
- <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
- <span class="nf">streamingMedia</span><span class="p">:</span>
- <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">streamingMediaConfig</span>
- <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">fileManagerConfig</span>
- <span class="nf">encryption</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">encryptionConfig</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">configurationWithLifecycle</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">fileManager</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig">fileManagerConfig</a></span><span class="p">;</span></code></pre>
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">lifecycle</span> <span class="nv">lifecycleConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span><span class="p">,</span> <span class="n">lockScreen</span> <span class="nv">lockScreenConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span><span class="p">?,</span> <span class="n">logging</span> <span class="nv">logConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span><span class="p">?,</span> <span class="n">streamingMedia</span> <span class="nv">streamingMediaConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span><span class="p">?,</span> <span class="n">fileManager</span> <span class="nv">fileManagerConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span><span class="p">?,</span> <span class="n">encryption</span> <span class="nv">encryptionConfig</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLEncryptionConfiguration.html">SDLEncryptionConfiguration</a></span><span class="p">?)</span></code></pre>
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>lifecycleConfig</dt>
+ <dd><p>The lifecycle configuration to be used.</p></dd>
+ <dt>lockScreenConfig</dt>
+ <dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
+ <dt>logConfig</dt>
+ <dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
+ <dt>fileManagerConfig</dt>
+ <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>The configuration</p>
+ </div>
+
+ <h3 id="section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">
+ +configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:
+ </h3>
+
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">+</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">configurationWithLifecycle</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
+ <span class="nf">lockScreen</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
+ <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig">streamingMediaConfig</a></span>
+ <span class="n">fileManager</span><span class="o">:</span><span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig">fileManagerConfig</a></span><span class="p">;</span></code></pre>
+
<h4>Parameters</h4>
<dl>
<dt>lifecycleConfig</dt>
@@ -437,8 +441,6 @@
<dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
<dt>fileManagerConfig</dt>
<dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
- <dt>encryptionConfig</dt>
- <dd><p>The encryption configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
@@ -482,11 +484,11 @@
<p>The configuration</p>
</div>
- <h3 id="section-+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:">
- +configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:
+ <h3 id="section-+configurationWithLifecycle:lockScreen:logging:">
+ +configurationWithLifecycle:lockScreen:logging:
</h3>
- <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>
+ <p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>
@@ -496,11 +498,7 @@
<span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLLifecycleConfiguration.html">SDLLifecycleConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lifecycleConfig</span>
<span class="nf">lockScreen</span><span class="p">:</span>
<span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLockScreenConfiguration.html">SDLLockScreenConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">lockScreenConfig</span>
- <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span>
- <span class="nf">streamingMedia</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLStreamingMediaConfiguration.html">SDLStreamingMediaConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig">streamingMediaConfig</a></span>
- <span class="n">fileManager</span><span class="o">:</span><span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLFileManagerConfiguration.html">SDLFileManagerConfiguration</a></span> <span class="o">*</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig">fileManagerConfig</a></span><span class="p">;</span></code></pre>
+ <span class="nf">logging</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLogConfiguration.html">SDLLogConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">logConfig</span><span class="p">;</span></code></pre>
@@ -513,10 +511,6 @@
<dd><p>The lockscreen configuration to be used. If nil, the <code>enabledConfiguration</code> will be used.</p></dd>
<dt>logConfig</dt>
<dd><p>The logging configuration to be used. If nil, the <code>defaultConfiguration</code> will be used.</p></dd>
- <dt>streamingMediaConfig</dt>
- <dd><p>The streaming media configuration to be used or nil if not used.</p></dd>
- <dt>fileManagerConfig</dt>
- <dd><p>The file manager configuration to be used or <code>defaultConfiguration</code> if nil.</p></dd>
</dl>
<div>
<h4>Return Value</h4>
diff --git a/docs/Classes/SDLCreateInteractionChoiceSet.html b/docs/Classes/SDLCreateInteractionChoiceSet.html
index 2ad0e3b8e..8f7016208 100644
--- a/docs/Classes/SDLCreateInteractionChoiceSet.html
+++ b/docs/Classes/SDLCreateInteractionChoiceSet.html
@@ -68,8 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,8 +88,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoice.html">SDLChoice</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choiceSet</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoice.html">SDLChoice</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">choiceSet</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLCreateWindow.html b/docs/Classes/SDLCreateWindow.html
index 2549f0f35..72a8b4982 100644
--- a/docs/Classes/SDLCreateWindow.html
+++ b/docs/Classes/SDLCreateWindow.html
@@ -95,7 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,7 +114,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -132,7 +132,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType">SDLWindowType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType">SDLWindowType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -151,8 +151,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">associatedServiceType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">associatedServiceType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -170,8 +169,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">duplicateUpdatesFromWindowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">duplicateUpdatesFromWindowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDIDResult.html b/docs/Classes/SDLDIDResult.html
index 36ccafc4b..bfae6968e 100644
--- a/docs/Classes/SDLDIDResult.html
+++ b/docs/Classes/SDLDIDResult.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode">SDLVehicleDataResultCode</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode">SDLVehicleDataResultCode</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">didLocation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">didLocation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -66,7 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDateTime.html b/docs/Classes/SDLDateTime.html
index 039387c47..0e91a9ff5 100644
--- a/docs/Classes/SDLDateTime.html
+++ b/docs/Classes/SDLDateTime.html
@@ -196,7 +196,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">millisecond</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">millisecond</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -216,7 +216,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">second</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">second</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -236,7 +236,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minute</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minute</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -256,7 +256,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hour</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hour</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -276,7 +276,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">day</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">day</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -296,7 +296,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">month</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">month</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -316,7 +316,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">year</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">year</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -336,8 +336,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timezoneMinuteOffset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timezoneMinuteOffset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -357,8 +356,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timezoneHourOffset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timezoneHourOffset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteCommand.html b/docs/Classes/SDLDeleteCommand.html
index 770b27f78..2c8ace3b6 100644
--- a/docs/Classes/SDLDeleteCommand.html
+++ b/docs/Classes/SDLDeleteCommand.html
@@ -61,7 +61,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteFile.html b/docs/Classes/SDLDeleteFile.html
index 2fa755b00..0717e658d 100644
--- a/docs/Classes/SDLDeleteFile.html
+++ b/docs/Classes/SDLDeleteFile.html
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncFileName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncFileName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteFileResponse.html b/docs/Classes/SDLDeleteFileResponse.html
index 4f3bf864f..a1329cf6a 100644
--- a/docs/Classes/SDLDeleteFileResponse.html
+++ b/docs/Classes/SDLDeleteFileResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteInteractionChoiceSet.html b/docs/Classes/SDLDeleteInteractionChoiceSet.html
index 697afcf3a..8c6a97bd2 100644
--- a/docs/Classes/SDLDeleteInteractionChoiceSet.html
+++ b/docs/Classes/SDLDeleteInteractionChoiceSet.html
@@ -63,8 +63,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteSubMenu.html b/docs/Classes/SDLDeleteSubMenu.html
index 4c34c4bb4..2b31e02fa 100644
--- a/docs/Classes/SDLDeleteSubMenu.html
+++ b/docs/Classes/SDLDeleteSubMenu.html
@@ -59,7 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeleteWindow.html b/docs/Classes/SDLDeleteWindow.html
index 1ebe44a0c..50ebcf47a 100644
--- a/docs/Classes/SDLDeleteWindow.html
+++ b/docs/Classes/SDLDeleteWindow.html
@@ -53,7 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">windowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeviceInfo.html b/docs/Classes/SDLDeviceInfo.html
index b0b4f5267..b4b28a9dd 100644
--- a/docs/Classes/SDLDeviceInfo.html
+++ b/docs/Classes/SDLDeviceInfo.html
@@ -51,7 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">hardware</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">hardware</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -71,7 +71,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">firmwareRev</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">firmwareRev</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -91,7 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">os</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">os</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">osVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">osVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">carrier</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">carrier</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,8 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxNumberRFCOMMPorts</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxNumberRFCOMMPorts</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDeviceStatus.html b/docs/Classes/SDLDeviceStatus.html
index c30c1b060..b8a5dc0d5 100644
--- a/docs/Classes/SDLDeviceStatus.html
+++ b/docs/Classes/SDLDeviceStatus.html
@@ -35,7 +35,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceRecOn</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceRecOn</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">btIconOn</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">btIconOn</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,7 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">callActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">callActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,8 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">phoneRoaming</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">phoneRoaming</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,8 +115,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">textMsgAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">textMsgAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -142,8 +140,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus">SDLDeviceLevelStatus</a></span> <span class="n">_Nonnull</span> <span class="n">battLevelStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus">SDLDeviceLevelStatus</a></span> <span class="n">_Nonnull</span> <span class="n">battLevelStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -163,8 +160,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">stereoAudioOutputMuted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">stereoAudioOutputMuted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -184,8 +180,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">monoAudioOutputMuted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">monoAudioOutputMuted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -210,8 +205,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus">SDLDeviceLevelStatus</a></span> <span class="n">_Nonnull</span> <span class="n">signalLevelStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus">SDLDeviceLevelStatus</a></span> <span class="n">_Nonnull</span> <span class="n">signalLevelStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -236,8 +230,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">_Nonnull</span> <span class="n">primaryAudioSource</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></span> <span class="n">_Nonnull</span> <span class="n">primaryAudioSource</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -257,8 +250,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">eCallEventActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">eCallEventActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDiagnosticMessage.html b/docs/Classes/SDLDiagnosticMessage.html
index 3dc731a64..890498e92 100644
--- a/docs/Classes/SDLDiagnosticMessage.html
+++ b/docs/Classes/SDLDiagnosticMessage.html
@@ -62,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targetID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targetID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -82,8 +82,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageLength</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageLength</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -103,12 +102,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">messageData</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">messageData</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLDiagnosticMessageResponse.html b/docs/Classes/SDLDiagnosticMessageResponse.html
index fb555aa2a..02cfd6e51 100644
--- a/docs/Classes/SDLDiagnosticMessageResponse.html
+++ b/docs/Classes/SDLDiagnosticMessageResponse.html
@@ -25,12 +25,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">messageDataResult</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">messageDataResult</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">messageDataResult</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">messageDataResult</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLDialNumber.html b/docs/Classes/SDLDialNumber.html
index 8984e64ba..06384fdbb 100644
--- a/docs/Classes/SDLDialNumber.html
+++ b/docs/Classes/SDLDialNumber.html
@@ -51,7 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">number</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">number</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDisplayCapabilities.html b/docs/Classes/SDLDisplayCapabilities.html
index 007216f05..311981bc0 100644
--- a/docs/Classes/SDLDisplayCapabilities.html
+++ b/docs/Classes/SDLDisplayCapabilities.html
@@ -33,7 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType">SDLDisplayType</a></span> <span class="n">_Nonnull</span> <span class="n">displayType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"See `displayName` instead"</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType">SDLDisplayType</a></span> <span class="n">displayType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -53,7 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">displayName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">displayName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,8 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTextField.html">SDLTextField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">textFields</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTextField.html">SDLTextField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">textFields</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,8 +107,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLImageField.html">SDLImageField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">imageFields</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLImageField.html">SDLImageField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">imageFields</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,8 +132,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat">SDLMediaClockFormat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">mediaClockFormats</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat">SDLMediaClockFormat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">mediaClockFormats</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -157,8 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">graphicSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">graphicSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -180,8 +176,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">templatesAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">templatesAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -201,7 +196,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLScreenParams.html">SDLScreenParams</a></span> <span class="o">*</span><span class="n">screenParams</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLScreenParams.html">SDLScreenParams</a></span> <span class="o">*</span><span class="n">screenParams</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -221,8 +216,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">numCustomPresetsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">numCustomPresetsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLDisplayCapability.html b/docs/Classes/SDLDisplayCapability.html
index ebe4fb8e2..e4aef6bb2 100644
--- a/docs/Classes/SDLDisplayCapability.html
+++ b/docs/Classes/SDLDisplayCapability.html
@@ -5,6 +5,7 @@
<ul>
<li><a href="#section--initWithDisplayName:">-initWithDisplayName:</a></li>
<li><a href="#section--initWithDisplayName:windowTypeSupported:windowCapabilities:">-initWithDisplayName:windowTypeSupported:windowCapabilities:</a></li>
+ <li><a href="#section--initWithDisplayName:windowCapabilities:windowTypeSupported:">-initWithDisplayName:windowCapabilities:windowTypeSupported:</a></li>
<li><a href="#section-displayName">displayName</a></li>
<li><a href="#section-windowTypeSupported">windowTypeSupported</a></li>
<li><a href="#section-windowCapabilities">windowCapabilities</a></li>
@@ -45,7 +46,7 @@
-initWithDisplayName:windowTypeSupported:windowCapabilities:
</h3>
- <p>Init with all the properities</p>
+ <p>This method is broken (the types don&rsquo;t match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead.</p>
@@ -63,14 +64,37 @@
+
+ <h3 id="section--initWithDisplayName:windowCapabilities:windowTypeSupported:">
+ -initWithDisplayName:windowCapabilities:windowTypeSupported:
+ </h3>
+
+ <p>Init with all the properities</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithDisplayName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">displayName</span>
+ <span class="nf">windowCapabilities</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">windowCapabilities</span>
+ <span class="nf">windowTypeSupported</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowTypeCapabilities.html">SDLWindowTypeCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">windowTypeSupported</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">displayName</span><span class="p">:</span> <span class="kt">String</span><span class="p">,</span> <span class="nv">windowCapabilities</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span><span class="p">]?,</span> <span class="nv">windowTypeSupported</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLWindowTypeCapabilities.html">SDLWindowTypeCapabilities</a></span><span class="p">]?)</span></code></pre>
+
+
+
<h4>Parameters</h4>
<dl>
<dt>displayName</dt>
<dd><p>Name of the display.</p></dd>
- <dt>windowTypeSupported</dt>
- <dd><p>Informs the application how many windows the app is allowed to create per type.</p></dd>
<dt>windowCapabilities</dt>
<dd><p>Contains a list of capabilities of all windows related to the app. - see: windowCapabilities</p></dd>
+ <dt>windowTypeSupported</dt>
+ <dd><p>Informs the application how many windows the app is allowed to create per type.</p></dd>
</dl>
<h3 id="section-displayName">
@@ -82,7 +106,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">displayName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">displayName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -103,8 +127,7 @@ Max size 100</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowTypeCapabilities.html">SDLWindowTypeCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">windowTypeSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowTypeCapabilities.html">SDLWindowTypeCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">windowTypeSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,8 +154,7 @@ Max size 100</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">windowCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">windowCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLECallInfo.html b/docs/Classes/SDLECallInfo.html
index e6a04aad9..4dbcbd365 100644
--- a/docs/Classes/SDLECallInfo.html
+++ b/docs/Classes/SDLECallInfo.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus">SDLVehicleDataNotificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">eCallNotificationStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus">SDLVehicleDataNotificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">eCallNotificationStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,8 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus">SDLVehicleDataNotificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">auxECallNotificationStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus">SDLVehicleDataNotificationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">auxECallNotificationStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -67,8 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus">SDLECallConfirmationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">eCallConfirmationStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus">SDLECallConfirmationStatus</a></span> <span class="n">_Nonnull</span> <span class="n">eCallConfirmationStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLEmergencyEvent.html b/docs/Classes/SDLEmergencyEvent.html
index feb815ae9..7b7b38b87 100644
--- a/docs/Classes/SDLEmergencyEvent.html
+++ b/docs/Classes/SDLEmergencyEvent.html
@@ -27,8 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType">SDLEmergencyEventType</a></span> <span class="n">_Nonnull</span> <span class="n">emergencyEventType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType">SDLEmergencyEventType</a></span> <span class="n">_Nonnull</span> <span class="n">emergencyEventType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,8 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus">SDLFuelCutoffStatus</a></span> <span class="n">_Nonnull</span> <span class="n">fuelCutoffStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus">SDLFuelCutoffStatus</a></span> <span class="n">_Nonnull</span> <span class="n">fuelCutoffStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -69,8 +67,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rolloverEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">rolloverEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,8 +92,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maximumChangeVelocity</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maximumChangeVelocity</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,8 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">multipleEvents</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">_Nonnull</span> <span class="n">multipleEvents</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLEncodedSyncPData.html b/docs/Classes/SDLEncodedSyncPData.html
index 78093ff7e..59eb114f5 100644
--- a/docs/Classes/SDLEncodedSyncPData.html
+++ b/docs/Classes/SDLEncodedSyncPData.html
@@ -30,7 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLEncryptionConfiguration.html b/docs/Classes/SDLEncryptionConfiguration.html
index 454e45062..5ac6b6558 100644
--- a/docs/Classes/SDLEncryptionConfiguration.html
+++ b/docs/Classes/SDLEncryptionConfiguration.html
@@ -24,8 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">Class</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLSecurityType.html">SDLSecurityType</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">securityManagers</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">Class</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLSecurityType.html">SDLSecurityType</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">securityManagers</span><span class="p">;</span></code></pre>
@@ -40,12 +39,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLServiceEncryptionDelegate.html">SDLServiceEncryptionDelegate</a></span><span class="o">&gt;</span>
- <span class="n">delegate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLServiceEncryptionDelegate.html">SDLServiceEncryptionDelegate</a></span><span class="o">&gt;</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">@NSCopying</span> <span class="k">var</span> <span class="nv">delegate</span><span class="p">:</span> <span class="kt"><a href="../Protocols/SDLServiceEncryptionDelegate.html">SDLServiceEncryptionDelegate</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">weak</span> <span class="k">var</span> <span class="nv">delegate</span><span class="p">:</span> <span class="kt"><a href="../Protocols/SDLServiceEncryptionDelegate.html">SDLServiceEncryptionDelegate</a></span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLEqualizerSettings.html b/docs/Classes/SDLEqualizerSettings.html
index 20c01a697..88734ede5 100644
--- a/docs/Classes/SDLEqualizerSettings.html
+++ b/docs/Classes/SDLEqualizerSettings.html
@@ -53,7 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">channelName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">channelName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -73,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelSetting</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelSetting</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -94,7 +93,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">channelId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLFile.html b/docs/Classes/SDLFile.html
index 372483807..728ca6a0b 100644
--- a/docs/Classes/SDLFile.html
+++ b/docs/Classes/SDLFile.html
@@ -36,7 +36,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isPersistent</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">persistent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isPersistent</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">persistent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">overwrite</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">overwrite</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,7 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">fileURL</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSURL</span> <span class="o">*</span><span class="n">fileURL</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,7 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -126,7 +126,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">fileSize</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="kt">unsigned</span> <span class="kt">long</span> <span class="kt">long</span> <span class="n">fileSize</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -144,7 +144,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">_Nonnull</span> <span class="n">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">_Nonnull</span> <span class="n">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -162,7 +162,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSInputStream</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">inputStream</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSInputStream</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">inputStream</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -184,7 +184,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isStaticIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isStaticIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLFileManager.html b/docs/Classes/SDLFileManager.html
index 59165bc09..0012a3875 100644
--- a/docs/Classes/SDLFileManager.html
+++ b/docs/Classes/SDLFileManager.html
@@ -40,8 +40,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName">SDLFileName</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">remoteFileNames</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName">SDLFileName</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">remoteFileNames</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -59,7 +58,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">bytesAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">bytesAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -77,7 +76,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,8 +94,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">__kindof</span> <span class="n">NSOperation</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pendingTransactions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">__kindof</span> <span class="n">NSOperation</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pendingTransactions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,7 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">suspended</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">suspended</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLFileManagerConfiguration.html b/docs/Classes/SDLFileManagerConfiguration.html
index 1691f0b95..8473e4c65 100644
--- a/docs/Classes/SDLFileManagerConfiguration.html
+++ b/docs/Classes/SDLFileManagerConfiguration.html
@@ -27,7 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">artworkRetryCount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">artworkRetryCount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">fileRetryCount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt8</span> <span class="n">fileRetryCount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLFuelRange.html b/docs/Classes/SDLFuelRange.html
index 1be22f0ae..f875c5bc4 100644
--- a/docs/Classes/SDLFuelRange.html
+++ b/docs/Classes/SDLFuelRange.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType">SDLFuelType</a></span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">range</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">range</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGPSData.html b/docs/Classes/SDLGPSData.html
index ec799b15a..7137c1493 100644
--- a/docs/Classes/SDLGPSData.html
+++ b/docs/Classes/SDLGPSData.html
@@ -43,8 +43,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -64,8 +63,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -85,7 +83,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcYear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcYear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -105,7 +103,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMonth</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMonth</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -125,7 +123,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcDay</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcDay</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -145,7 +143,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcHours</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcHours</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -165,7 +163,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMinutes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcMinutes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -185,7 +183,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcSeconds</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">utcSeconds</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -203,8 +201,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span> <span class="n">compassDirection</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection">SDLCompassDirection</a></span> <span class="n">compassDirection</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -226,7 +223,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -248,7 +245,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -270,7 +267,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vdop</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vdop</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -292,7 +289,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">actual</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">actual</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -312,7 +309,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">satellites</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">satellites</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -332,7 +329,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span> <span class="n">dimension</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension">SDLDimension</a></span> <span class="n">dimension</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -352,7 +349,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">altitude</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">altitude</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -374,7 +371,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heading</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heading</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -394,7 +391,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -416,7 +413,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">shifted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">shifted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetAppServiceData.html b/docs/Classes/SDLGetAppServiceData.html
index 135c9be00..0fc245693 100644
--- a/docs/Classes/SDLGetAppServiceData.html
+++ b/docs/Classes/SDLGetAppServiceData.html
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetAppServiceDataResponse.html b/docs/Classes/SDLGetAppServiceDataResponse.html
index 26231fa12..951782543 100644
--- a/docs/Classes/SDLGetAppServiceDataResponse.html
+++ b/docs/Classes/SDLGetAppServiceDataResponse.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServiceData.html">SDLAppServiceData</a></span> <span class="o">*</span><span class="n">serviceData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceData.html">SDLAppServiceData</a></span> <span class="o">*</span><span class="n">serviceData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetCloudAppProperties.html b/docs/Classes/SDLGetCloudAppProperties.html
index 076344dfe..df8667923 100644
--- a/docs/Classes/SDLGetCloudAppProperties.html
+++ b/docs/Classes/SDLGetCloudAppProperties.html
@@ -51,7 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetCloudAppPropertiesResponse.html b/docs/Classes/SDLGetCloudAppPropertiesResponse.html
index 7ff78fb4f..084701e11 100644
--- a/docs/Classes/SDLGetCloudAppPropertiesResponse.html
+++ b/docs/Classes/SDLGetCloudAppPropertiesResponse.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLCloudAppProperties.html">SDLCloudAppProperties</a></span> <span class="o">*</span><span class="n">properties</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLCloudAppProperties.html">SDLCloudAppProperties</a></span> <span class="o">*</span><span class="n">properties</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetDTCs.html b/docs/Classes/SDLGetDTCs.html
index b30db8062..783fca605 100644
--- a/docs/Classes/SDLGetDTCs.html
+++ b/docs/Classes/SDLGetDTCs.html
@@ -90,7 +90,7 @@ Function Group: ProprietaryData
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ecuName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ecuName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,7 +108,7 @@ Function Group: ProprietaryData
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dtcMask</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">dtcMask</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetDTCsResponse.html b/docs/Classes/SDLGetDTCsResponse.html
index f7330bdba..ee20364a6 100644
--- a/docs/Classes/SDLGetDTCsResponse.html
+++ b/docs/Classes/SDLGetDTCsResponse.html
@@ -26,7 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ecuHeader</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">ecuHeader</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">dtc</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">dtc</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetFile.html b/docs/Classes/SDLGetFile.html
index ee50e34b5..28ba9b84c 100644
--- a/docs/Classes/SDLGetFile.html
+++ b/docs/Classes/SDLGetFile.html
@@ -129,7 +129,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -149,7 +149,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appServiceId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appServiceId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -169,7 +169,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -189,7 +189,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -209,7 +209,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetFileResponse.html b/docs/Classes/SDLGetFileResponse.html
index 5ae4b3218..f6a5a4198 100644
--- a/docs/Classes/SDLGetFileResponse.html
+++ b/docs/Classes/SDLGetFileResponse.html
@@ -65,7 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -85,7 +85,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -105,7 +105,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -125,7 +125,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">crc</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">crc</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetInteriorVehicleData.html b/docs/Classes/SDLGetInteriorVehicleData.html
index f12549a55..79e299a41 100644
--- a/docs/Classes/SDLGetInteriorVehicleData.html
+++ b/docs/Classes/SDLGetInteriorVehicleData.html
@@ -208,7 +208,7 @@ whenever new data is available for the module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -228,7 +228,7 @@ whenever new data is available for the module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -250,7 +250,7 @@ whenever new data is available for the module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetInteriorVehicleDataConsent.html b/docs/Classes/SDLGetInteriorVehicleDataConsent.html
index d263425f8..30e243295 100644
--- a/docs/Classes/SDLGetInteriorVehicleDataConsent.html
+++ b/docs/Classes/SDLGetInteriorVehicleDataConsent.html
@@ -58,7 +58,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,7 +78,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleIds</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleIds</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html b/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html
index 0ff40315b..d9b26748c 100644
--- a/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html
+++ b/docs/Classes/SDLGetInteriorVehicleDataConsentResponse.html
@@ -22,17 +22,16 @@
&ldquo;true&rdquo; - if SDL grants the permission for the requested module
&ldquo;false&rdquo; - SDL denies the permission for the requested module.</p>
-<p>Optional</p>
+<p>Optional, contains a boolean</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">allowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">allowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">allowed</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">allowed</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLGetInteriorVehicleDataResponse.html b/docs/Classes/SDLGetInteriorVehicleDataResponse.html
index bc6a2aef6..49779236d 100644
--- a/docs/Classes/SDLGetInteriorVehicleDataResponse.html
+++ b/docs/Classes/SDLGetInteriorVehicleDataResponse.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">moduleData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">moduleData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,8 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isSubscribed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isSubscribed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetSystemCapability.html b/docs/Classes/SDLGetSystemCapability.html
index 3d91671e8..c4bf08a3c 100644
--- a/docs/Classes/SDLGetSystemCapability.html
+++ b/docs/Classes/SDLGetSystemCapability.html
@@ -85,8 +85,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span> <span class="n">_Nonnull</span> <span class="n">systemCapabilityType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span> <span class="n">_Nonnull</span> <span class="n">systemCapabilityType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -106,7 +105,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">subscribe</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetSystemCapabilityResponse.html b/docs/Classes/SDLGetSystemCapabilityResponse.html
index b73061458..9e2e07bc8 100644
--- a/docs/Classes/SDLGetSystemCapabilityResponse.html
+++ b/docs/Classes/SDLGetSystemCapabilityResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSystemCapability.html">SDLSystemCapability</a></span> <span class="o">*</span><span class="n">systemCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSystemCapability.html">SDLSystemCapability</a></span> <span class="o">*</span><span class="n">systemCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetVehicleData.html b/docs/Classes/SDLGetVehicleData.html
index f63a222d3..f5eee441d 100644
--- a/docs/Classes/SDLGetVehicleData.html
+++ b/docs/Classes/SDLGetVehicleData.html
@@ -387,7 +387,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -405,7 +405,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -423,7 +423,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -441,7 +441,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -459,8 +459,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -478,7 +477,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -496,8 +495,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -515,8 +513,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -534,7 +531,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -552,7 +549,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -570,8 +567,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -589,7 +585,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -607,7 +603,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -625,8 +621,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -644,8 +639,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -663,8 +657,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -682,8 +675,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -701,8 +693,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -720,8 +711,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -739,8 +729,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -758,8 +747,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -777,8 +765,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -796,7 +783,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -814,8 +801,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -833,8 +819,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -852,8 +837,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -871,7 +855,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -889,8 +873,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -908,7 +891,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -926,8 +909,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetVehicleDataResponse.html b/docs/Classes/SDLGetVehicleDataResponse.html
index 86457a62e..5110ea891 100644
--- a/docs/Classes/SDLGetVehicleDataResponse.html
+++ b/docs/Classes/SDLGetVehicleDataResponse.html
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,7 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,7 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -126,8 +126,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -147,8 +146,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -166,8 +164,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -185,8 +182,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -204,7 +200,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -222,7 +218,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL">SDLPRNDL</a></span> <span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL">SDLPRNDL</a></span> <span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,7 +236,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTireStatus.html">SDLTireStatus</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTireStatus.html">SDLTireStatus</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -258,7 +254,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -276,7 +272,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBeltStatus.html">SDLBeltStatus</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBeltStatus.html">SDLBeltStatus</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -294,8 +290,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLBodyInformation.html">SDLBodyInformation</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBodyInformation.html">SDLBodyInformation</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -313,7 +308,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceStatus.html">SDLDeviceStatus</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceStatus.html">SDLDeviceStatus</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -331,8 +326,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -350,7 +344,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus">SDLWiperStatus</a></span> <span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus">SDLWiperStatus</a></span> <span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -368,8 +362,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHeadLampStatus.html">SDLHeadLampStatus</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHeadLampStatus.html">SDLHeadLampStatus</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -387,8 +380,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -406,8 +398,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -425,8 +416,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -444,8 +434,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -463,7 +452,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLECallInfo.html">SDLECallInfo</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLECallInfo.html">SDLECallInfo</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -481,7 +470,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAirbagStatus.html">SDLAirbagStatus</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAirbagStatus.html">SDLAirbagStatus</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -499,8 +488,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLEmergencyEvent.html">SDLEmergencyEvent</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLEmergencyEvent.html">SDLEmergencyEvent</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -518,8 +506,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLClusterModeStatus.html">SDLClusterModeStatus</a></span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLClusterModeStatus.html">SDLClusterModeStatus</a></span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -537,7 +524,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMyKey.html">SDLMyKey</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMyKey.html">SDLMyKey</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -555,8 +542,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -574,7 +560,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -592,7 +578,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetWaypoints.html b/docs/Classes/SDLGetWaypoints.html
index 4275e75a0..ab7d0c6c8 100644
--- a/docs/Classes/SDLGetWaypoints.html
+++ b/docs/Classes/SDLGetWaypoints.html
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType">SDLWayPointType</a></span> <span class="n">waypointType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType">SDLWayPointType</a></span> <span class="n">waypointType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGetWaypointsResponse.html b/docs/Classes/SDLGetWaypointsResponse.html
index a6bfee66d..3be118e18 100644
--- a/docs/Classes/SDLGetWaypointsResponse.html
+++ b/docs/Classes/SDLGetWaypointsResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">waypoints</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">waypoints</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLGrid.html b/docs/Classes/SDLGrid.html
index dd4ce9af3..de755ccaf 100644
--- a/docs/Classes/SDLGrid.html
+++ b/docs/Classes/SDLGrid.html
@@ -26,7 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">col</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">col</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">row</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">row</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -62,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">level</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">level</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,7 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colspan</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colspan</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -98,7 +98,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rowspan</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rowspan</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,7 +116,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">levelspan</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">levelspan</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHMICapabilities.html b/docs/Classes/SDLHMICapabilities.html
index 0a7cf6e6b..2593f2bb1 100644
--- a/docs/Classes/SDLHMICapabilities.html
+++ b/docs/Classes/SDLHMICapabilities.html
@@ -33,7 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">navigation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">navigation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">phoneCall</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">phoneCall</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -77,8 +77,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">videoStreaming</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">videoStreaming</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -100,8 +99,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">remoteControl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">remoteControl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -125,7 +123,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">appServices</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">appServices</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -147,7 +145,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displays</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displays</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -170,7 +168,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">seatLocation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">seatLocation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHMIPermissions.html b/docs/Classes/SDLHMIPermissions.html
index 07d875c73..197f96fc5 100644
--- a/docs/Classes/SDLHMIPermissions.html
+++ b/docs/Classes/SDLHMIPermissions.html
@@ -31,7 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -56,8 +56,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userDisallowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userDisallowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHMISettingsControlCapabilities.html b/docs/Classes/SDLHMISettingsControlCapabilities.html
index ffa23787e..4099bc2fb 100644
--- a/docs/Classes/SDLHMISettingsControlCapabilities.html
+++ b/docs/Classes/SDLHMISettingsControlCapabilities.html
@@ -166,7 +166,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -186,8 +186,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceUnitAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceUnitAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -207,8 +206,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">temperatureUnitAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">temperatureUnitAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -228,8 +226,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displayModeUnitAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">displayModeUnitAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -249,7 +246,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHMISettingsControlData.html b/docs/Classes/SDLHMISettingsControlData.html
index 037e816a5..d9cc7ad97 100644
--- a/docs/Classes/SDLHMISettingsControlData.html
+++ b/docs/Classes/SDLHMISettingsControlData.html
@@ -60,7 +60,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">displayMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode">SDLDisplayMode</a></span> <span class="n">displayMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,8 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span> <span class="n">temperatureUnit</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span> <span class="n">temperatureUnit</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,7 +100,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span> <span class="n">distanceUnit</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit">SDLDistanceUnit</a></span> <span class="n">distanceUnit</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHapticRect.html b/docs/Classes/SDLHapticRect.html
index e07240c38..d9aa7360c 100644
--- a/docs/Classes/SDLHapticRect.html
+++ b/docs/Classes/SDLHapticRect.html
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,7 +74,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRectangle.html">SDLRectangle</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rect</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRectangle.html">SDLRectangle</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rect</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLHeadLampStatus.html b/docs/Classes/SDLHeadLampStatus.html
index 15af26697..c3fad7650 100644
--- a/docs/Classes/SDLHeadLampStatus.html
+++ b/docs/Classes/SDLHeadLampStatus.html
@@ -25,7 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lowBeamsOn</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lowBeamsOn</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -45,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">highBeamsOn</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">highBeamsOn</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,8 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus">SDLAmbientLightStatus</a></span> <span class="n">ambientLightSensorStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus">SDLAmbientLightStatus</a></span> <span class="n">ambientLightSensorStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLImage.html b/docs/Classes/SDLImage.html
index 46a7677ba..bca8ff50f 100644
--- a/docs/Classes/SDLImage.html
+++ b/docs/Classes/SDLImage.html
@@ -208,7 +208,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">value</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">value</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -228,7 +228,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span> <span class="n">_Nonnull</span> <span class="n">imageType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span> <span class="n">_Nonnull</span> <span class="n">imageType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -246,7 +246,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">isTemplate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLImageField.html b/docs/Classes/SDLImageField.html
index 3f6a41bcb..d72531c2c 100644
--- a/docs/Classes/SDLImageField.html
+++ b/docs/Classes/SDLImageField.html
@@ -6,6 +6,7 @@
<li><a href="#section-name">name</a></li>
<li><a href="#section-imageTypeSupported">imageTypeSupported</a></li>
<li><a href="#section-imageResolution">imageResolution</a></li>
+ <li><a href="#section--initWithName:imageTypeSupported:imageResolution:">-initWithName:imageTypeSupported:imageResolution:</a></li>
</ul>
<h3>Overview</h3>
@@ -25,7 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -45,8 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageTypeSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageTypeSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -66,8 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">imageResolution</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">imageResolution</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -76,4 +75,34 @@
+ <h3 id="section--initWithName:imageTypeSupported:imageResolution:">
+ -initWithName:imageTypeSupported:imageResolution:
+ </h3>
+
+ <p>Convenience initalizer for the ImageField RPC struct</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">imageTypeSupported</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">imageTypeSupported</span>
+ <span class="nf">imageResolution</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">imageResolution</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName">SDLImageFieldName</a></span><span class="p">,</span> <span class="nv">imageTypeSupported</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span><span class="p">],</span> <span class="nv">imageResolution</span><span class="p">:</span> <span class="kt"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span><span class="p">?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The name identifying this image field</p></dd>
+ <dt>imageTypeSupported</dt>
+ <dd><p>The image data types this field supports</p></dd>
+ <dt>imageResolution</dt>
+ <dd><p>The native resolution of this image field</p></dd>
+ </dl>
+
</section>
diff --git a/docs/Classes/SDLImageResolution.html b/docs/Classes/SDLImageResolution.html
index ca646ccc0..8de04e640 100644
--- a/docs/Classes/SDLImageResolution.html
+++ b/docs/Classes/SDLImageResolution.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolutionWidth</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolutionWidth</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,8 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolutionHeight</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolutionHeight</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLKeyboardProperties.html b/docs/Classes/SDLKeyboardProperties.html
index fe8428f8f..cd4bbadb3 100644
--- a/docs/Classes/SDLKeyboardProperties.html
+++ b/docs/Classes/SDLKeyboardProperties.html
@@ -113,7 +113,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">language</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">language</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -133,8 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout">SDLKeyboardLayout</a></span> <span class="n">keyboardLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout">SDLKeyboardLayout</a></span> <span class="n">keyboardLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,7 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode">SDLKeypressMode</a></span> <span class="n">keypressMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode">SDLKeypressMode</a></span> <span class="n">keypressMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -176,8 +175,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">limitedCharacterList</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">limitedCharacterList</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -197,7 +195,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">autoCompleteText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">autoCompleteText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -217,8 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">autoCompleteList</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">autoCompleteList</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLifecycleConfiguration.html b/docs/Classes/SDLLifecycleConfiguration.html
index 46a4dcf68..ccb29aa51 100644
--- a/docs/Classes/SDLLifecycleConfiguration.html
+++ b/docs/Classes/SDLLifecycleConfiguration.html
@@ -197,7 +197,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">tcpDebugMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">tcpDebugMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -215,8 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">tcpDebugIPAddress</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">tcpDebugIPAddress</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -234,7 +233,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UInt16</span> <span class="n">tcpDebugPort</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">UInt16</span> <span class="n">tcpDebugPort</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -252,7 +251,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -277,7 +276,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -299,7 +298,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -317,7 +316,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">resumeHash</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">resumeHash</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -335,7 +334,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isMedia</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isMedia</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -353,7 +352,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span> <span class="n">appType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span> <span class="n">appType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -371,8 +370,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">additionalAppTypes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">additionalAppTypes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -390,7 +388,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -408,8 +406,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">languagesSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">languagesSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -427,7 +424,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLFile.html">SDLFile</a></span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLFile.html">SDLFile</a></span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -445,7 +442,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">shortAppName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">shortAppName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -463,7 +460,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -481,8 +478,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceRecognitionCommandNames</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceRecognitionCommandNames</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -500,8 +496,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -519,8 +514,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -538,8 +532,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVersion.html">SDLVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minimumProtocolVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVersion.html">SDLVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minimumProtocolVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -557,7 +550,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVersion.html">SDLVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minimumRPCVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVersion.html">SDLVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minimumRPCVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -579,8 +572,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLSecondaryTransports.html">SDLSecondaryTransports</a></span> <span class="n">allowedSecondaryTransports</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLSecondaryTransports.html">SDLSecondaryTransports</a></span> <span class="n">allowedSecondaryTransports</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLifecycleConfigurationUpdate.html b/docs/Classes/SDLLifecycleConfigurationUpdate.html
index 73f05c59c..ef32e4520 100644
--- a/docs/Classes/SDLLifecycleConfigurationUpdate.html
+++ b/docs/Classes/SDLLifecycleConfigurationUpdate.html
@@ -26,7 +26,7 @@ cases the language of the head unit changes or does not match the app language.<
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">appName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@ cases the language of the head unit changes or does not match the app language.<
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">shortAppName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">shortAppName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -62,7 +62,7 @@ cases the language of the head unit changes or does not match the app language.<
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,8 +80,7 @@ cases the language of the head unit changes or does not match the app language.<
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceRecognitionCommandNames</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceRecognitionCommandNames</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLightCapabilities.html b/docs/Classes/SDLLightCapabilities.html
index b4b35a03a..92608379f 100644
--- a/docs/Classes/SDLLightCapabilities.html
+++ b/docs/Classes/SDLLightCapabilities.html
@@ -93,7 +93,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -113,8 +113,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">densityAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">densityAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,8 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colorAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">colorAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,8 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">statusAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">statusAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLightControlCapabilities.html b/docs/Classes/SDLLightControlCapabilities.html
index ed1ab49b9..c62841b10 100644
--- a/docs/Classes/SDLLightControlCapabilities.html
+++ b/docs/Classes/SDLLightControlCapabilities.html
@@ -97,7 +97,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -117,8 +117,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">supportedLights</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightCapabilities.html">SDLLightCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">supportedLights</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -138,7 +137,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLightControlData.html b/docs/Classes/SDLLightControlData.html
index 5eec57094..79fdcf081 100644
--- a/docs/Classes/SDLLightControlData.html
+++ b/docs/Classes/SDLLightControlData.html
@@ -55,8 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lightState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightState.html">SDLLightState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lightState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLightState.html b/docs/Classes/SDLLightState.html
index 193efd0fd..1a2254efa 100644
--- a/docs/Classes/SDLLightState.html
+++ b/docs/Classes/SDLLightState.html
@@ -133,7 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName">SDLLightName</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,7 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">_Nonnull</span> <span class="n">status</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus">SDLLightStatus</a></span> <span class="n">_Nonnull</span> <span class="n">status</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -173,7 +173,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">density</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">density</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -193,7 +193,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">color</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">color</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLListFilesResponse.html b/docs/Classes/SDLListFilesResponse.html
index 772828c83..3d05fb086 100644
--- a/docs/Classes/SDLListFilesResponse.html
+++ b/docs/Classes/SDLListFilesResponse.html
@@ -24,8 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">filenames</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">filenames</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -43,8 +42,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLocationCoordinate.html b/docs/Classes/SDLLocationCoordinate.html
index 860d59928..cce54b67b 100644
--- a/docs/Classes/SDLLocationCoordinate.html
+++ b/docs/Classes/SDLLocationCoordinate.html
@@ -55,8 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -76,8 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLocationDetails.html b/docs/Classes/SDLLocationDetails.html
index 237691179..7e89c9292 100644
--- a/docs/Classes/SDLLocationDetails.html
+++ b/docs/Classes/SDLLocationDetails.html
@@ -110,8 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLocationCoordinate.html">SDLLocationCoordinate</a></span> <span class="o">*</span><span class="n">coordinate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationCoordinate.html">SDLLocationCoordinate</a></span> <span class="o">*</span><span class="n">coordinate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -151,8 +150,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">addressLines</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">addressLines</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -172,7 +170,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationDescription</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationDescription</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -192,7 +190,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">phoneNumber</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">phoneNumber</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -217,7 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">locationImage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">locationImage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -242,8 +240,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLOasisAddress.html">SDLOasisAddress</a></span> <span class="o">*</span><span class="n">searchAddress</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLOasisAddress.html">SDLOasisAddress</a></span> <span class="o">*</span><span class="n">searchAddress</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLockScreenConfiguration.html b/docs/Classes/SDLLockScreenConfiguration.html
index 1835aef07..65ea188a1 100644
--- a/docs/Classes/SDLLockScreenConfiguration.html
+++ b/docs/Classes/SDLLockScreenConfiguration.html
@@ -33,8 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLLockScreenConfigurationDisplayMode.html">SDLLockScreenConfigurationDisplayMode</a></span> <span class="n">displayMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLockScreenConfigurationDisplayMode.html">SDLLockScreenConfigurationDisplayMode</a></span> <span class="n">displayMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -63,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showInOptionalState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showInOptionalState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -81,7 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableDismissGesture</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableDismissGesture</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -99,7 +98,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showDeviceLogo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showDeviceLogo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -119,7 +118,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableAutomaticLockScreen</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableAutomaticLockScreen</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -137,7 +136,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">UIColor</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">backgroundColor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">UIColor</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">backgroundColor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -155,7 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -173,8 +172,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">UIViewController</span> <span class="o">*</span><span class="n">customViewController</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIViewController</span> <span class="o">*</span><span class="n">customViewController</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLockScreenViewController.html b/docs/Classes/SDLLockScreenViewController.html
index caee72ccb..309c1162b 100644
--- a/docs/Classes/SDLLockScreenViewController.html
+++ b/docs/Classes/SDLLockScreenViewController.html
@@ -26,7 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">appIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">vehicleIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIImage</span> <span class="o">*</span><span class="n">vehicleIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -62,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIColor</span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIColor</span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,7 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">lockedLabelText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">lockedLabelText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLogConfiguration.html b/docs/Classes/SDLLogConfiguration.html
index fb3a7db00..98e829fcc 100644
--- a/docs/Classes/SDLLogConfiguration.html
+++ b/docs/Classes/SDLLogConfiguration.html
@@ -30,8 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFileModule.html">SDLLogFileModule</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">modules</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFileModule.html">SDLLogFileModule</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">modules</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -49,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLLogTarget.html">SDLLogTarget</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targets</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLLogTarget.html">SDLLogTarget</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targets</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -67,7 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFilter.html">SDLLogFilter</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">filters</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFilter.html">SDLLogFilter</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">filters</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -85,7 +84,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogFormatType.html">SDLLogFormatType</a></span> <span class="n">formatType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogFormatType.html">SDLLogFormatType</a></span> <span class="n">formatType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -103,8 +102,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">isAsynchronous</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">asynchronous</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isAsynchronous</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">asynchronous</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -122,8 +121,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">areErrorsAsynchronous</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">errorsAsynchronous</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">areErrorsAsynchronous</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">errorsAsynchronous</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,8 +140,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">areAssertionsDisabled</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">disableAssertions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">areAssertionsDisabled</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">disableAssertions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -161,7 +160,7 @@ Do not specify Default for this parameter.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">globalLogLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">globalLogLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLogFileModule.html b/docs/Classes/SDLLogFileModule.html
index d96be7558..0988a7f50 100644
--- a/docs/Classes/SDLLogFileModule.html
+++ b/docs/Classes/SDLLogFileModule.html
@@ -28,7 +28,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,7 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">files</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">files</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -64,7 +64,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">logLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">logLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLogFilter.html b/docs/Classes/SDLLogFilter.html
index b0d6b201f..c07c16ff6 100644
--- a/docs/Classes/SDLLogFilter.html
+++ b/docs/Classes/SDLLogFilter.html
@@ -31,7 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock">SDLLogFilterBlock</a></span> <span class="n">_Nonnull</span> <span class="n">filter</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock">SDLLogFilterBlock</a></span> <span class="n">_Nonnull</span> <span class="n">filter</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLLogManager.html b/docs/Classes/SDLLogManager.html
index b3fc6ae59..181d90f5d 100644
--- a/docs/Classes/SDLLogManager.html
+++ b/docs/Classes/SDLLogManager.html
@@ -41,8 +41,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFileModule.html">SDLLogFileModule</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">modules</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFileModule.html">SDLLogFileModule</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">modules</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -60,7 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLLogTarget.html">SDLLogTarget</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targets</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLLogTarget.html">SDLLogTarget</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">targets</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,7 +77,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFilter.html">SDLLogFilter</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">filters</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLogFilter.html">SDLLogFilter</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">filters</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -96,7 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">globalLogLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogLevel.html">SDLLogLevel</a></span> <span class="n">globalLogLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,7 +113,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogFormatType.html">SDLLogFormatType</a></span> <span class="n">formatType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLLogFormatType.html">SDLLogFormatType</a></span> <span class="n">formatType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,7 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isAsynchronous</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">asynchronous</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isAsynchronous</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">asynchronous</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -154,8 +153,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">areErrorsAsynchronous</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">errorsAsynchronous</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">areErrorsAsynchronous</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">errorsAsynchronous</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -173,8 +172,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">areAssertionsDisabled</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">disableAssertions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">areAssertionsDisabled</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">disableAssertions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -192,8 +191,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span>
- <span class="n">NSDateFormatter</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">dateFormatter</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSDateFormatter</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">dateFormatter</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -211,8 +209,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">class</span><span class="p">)</span>
- <span class="n">dispatch_queue_t</span> <span class="n">_Nonnull</span> <span class="n">logQueue</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">class</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">dispatch_queue_t</span> <span class="n">_Nonnull</span> <span class="n">logQueue</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLManager.html b/docs/Classes/SDLManager.html
index 269ac8d66..728e0bfac 100644
--- a/docs/Classes/SDLManager.html
+++ b/docs/Classes/SDLManager.html
@@ -16,7 +16,6 @@
<li><a href="#section-authToken">authToken</a></li>
<li><a href="#section-delegate">delegate</a></li>
<li><a href="#section-pendingRPCTransactions">pendingRPCTransactions</a></li>
- <li><a href="#section-proxy">proxy</a></li>
<li><a href="#section--initWithConfiguration:delegate:">-initWithConfiguration:delegate:</a></li>
<li><a href="#section--startWithReadyHandler:">-startWithReadyHandler:</a></li>
<li><a href="#section--stop">-stop</a></li>
@@ -46,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLConfiguration.html">SDLConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">configuration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLConfiguration.html">SDLConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">configuration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -64,7 +63,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -82,8 +81,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span> <span class="n">_Nonnull</span> <span class="n">audioStreamingState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span> <span class="n">_Nonnull</span> <span class="n">audioStreamingState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,7 +99,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span> <span class="n">_Nonnull</span> <span class="n">systemContext</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span> <span class="n">_Nonnull</span> <span class="n">systemContext</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -119,7 +117,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLFileManager.html">SDLFileManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLFileManager.html">SDLFileManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">fileManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -137,8 +135,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPermissionManager.html">SDLPermissionManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">permissionManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPermissionManager.html">SDLPermissionManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">permissionManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,8 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLStreamingMediaManager.html">SDLStreamingMediaManager</a></span> <span class="o">*</span><span class="n">streamManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStreamingMediaManager.html">SDLStreamingMediaManager</a></span> <span class="o">*</span><span class="n">streamManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -175,7 +171,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLScreenManager.html">SDLScreenManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">screenManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLScreenManager.html">SDLScreenManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">screenManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -193,8 +189,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSystemCapabilityManager.html">SDLSystemCapabilityManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">systemCapabilityManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSystemCapabilityManager.html">SDLSystemCapabilityManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">systemCapabilityManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -212,8 +207,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLRegisterAppInterfaceResponse.html">SDLRegisterAppInterfaceResponse</a></span> <span class="o">*</span><span class="n">registerResponse</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRegisterAppInterfaceResponse.html">SDLRegisterAppInterfaceResponse</a></span> <span class="o">*</span><span class="n">registerResponse</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -231,7 +225,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">authToken</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">authToken</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -249,7 +243,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLManagerDelegate.html">SDLManagerDelegate</a></span><span class="o">&gt;</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLManagerDelegate.html">SDLManagerDelegate</a></span><span class="o">&gt;</span> <span class="n">delegate</span><span class="p">;</span></code></pre>
@@ -264,8 +258,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">__kindof</span> <span class="n">NSOperation</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pendingRPCTransactions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">__kindof</span> <span class="n">NSOperation</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pendingRPCTransactions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -274,25 +267,6 @@
- <h3 id="section-proxy">
- proxy
- </h3>
-
- <p>Deprecated internal proxy object. This should only be accessed when the Manager is READY. This property may go to nil at any time.
-All the other functionality exists on managers in sdl_ios 4.3+.</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">SDLProxy</span> <span class="o">*</span><span class="n">proxy</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">proxy</span><span class="p">:</span> <span class="kt">SDLProxy</span><span class="p">?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
-
-
-
-
<h3 id="section--initWithConfiguration:delegate:">
-initWithConfiguration:delegate:
</h3>
diff --git a/docs/Classes/SDLMassageCushionFirmness.html b/docs/Classes/SDLMassageCushionFirmness.html
index e70d0b228..c405ab0cf 100644
--- a/docs/Classes/SDLMassageCushionFirmness.html
+++ b/docs/Classes/SDLMassageCushionFirmness.html
@@ -59,7 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">_Nonnull</span> <span class="n">cushion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion">SDLMassageCushion</a></span> <span class="n">_Nonnull</span> <span class="n">cushion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -79,7 +79,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">firmness</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">firmness</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMassageModeData.html b/docs/Classes/SDLMassageModeData.html
index a54492fb0..7d0826a08 100644
--- a/docs/Classes/SDLMassageModeData.html
+++ b/docs/Classes/SDLMassageModeData.html
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">_Nonnull</span> <span class="n">massageMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode">SDLMassageMode</a></span> <span class="n">_Nonnull</span> <span class="n">massageMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -70,7 +70,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="n">_Nonnull</span> <span class="n">massageZone</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone">SDLMassageZone</a></span> <span class="n">_Nonnull</span> <span class="n">massageZone</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMediaServiceData.html b/docs/Classes/SDLMediaServiceData.html
index dc5ca39eb..acac7a03d 100644
--- a/docs/Classes/SDLMediaServiceData.html
+++ b/docs/Classes/SDLMediaServiceData.html
@@ -163,7 +163,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">mediaImage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">mediaImage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -183,7 +183,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType">SDLMediaType</a></span> <span class="n">mediaType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType">SDLMediaType</a></span> <span class="n">mediaType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -205,7 +205,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTitle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTitle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -227,7 +227,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaArtist</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaArtist</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -249,7 +249,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaAlbum</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaAlbum</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -271,7 +271,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">playlistName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">playlistName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -291,7 +291,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isExplicit</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isExplicit</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -313,8 +313,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trackPlaybackProgress</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trackPlaybackProgress</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -336,8 +335,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trackPlaybackDuration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trackPlaybackDuration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -359,8 +357,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queuePlaybackProgress</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queuePlaybackProgress</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -382,8 +379,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queuePlaybackDuration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queuePlaybackDuration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -405,8 +401,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queueCurrentTrackNumber</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queueCurrentTrackNumber</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -428,8 +423,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queueTotalTrackCount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">queueTotalTrackCount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMenuCell.html b/docs/Classes/SDLMenuCell.html
index 84aa5e43a..d69f73b19 100644
--- a/docs/Classes/SDLMenuCell.html
+++ b/docs/Classes/SDLMenuCell.html
@@ -30,7 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">title</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">title</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">icon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">icon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -66,8 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">voiceCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -85,8 +84,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler">SDLMenuCellSelectionHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -104,7 +102,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">subCells</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">SDLMenuCell</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">subCells</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -122,7 +120,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">submenuLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">submenuLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMenuConfiguration.html b/docs/Classes/SDLMenuConfiguration.html
index 9bfff1caa..75789e292 100644
--- a/docs/Classes/SDLMenuConfiguration.html
+++ b/docs/Classes/SDLMenuConfiguration.html
@@ -23,7 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">_Nonnull</span> <span class="n">mainMenuLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">_Nonnull</span> <span class="n">mainMenuLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -41,8 +41,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">_Nonnull</span> <span class="n">defaultSubmenuLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">_Nonnull</span> <span class="n">defaultSubmenuLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMenuParams.html b/docs/Classes/SDLMenuParams.html
index 696d91658..3d58ca5ad 100644
--- a/docs/Classes/SDLMenuParams.html
+++ b/docs/Classes/SDLMenuParams.html
@@ -91,7 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">parentID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">parentID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -119,7 +119,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">position</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">position</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -139,7 +139,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMetadataTags.html b/docs/Classes/SDLMetadataTags.html
index 1fda03d92..53966ef12 100644
--- a/docs/Classes/SDLMetadataTags.html
+++ b/docs/Classes/SDLMetadataTags.html
@@ -72,8 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,8 +94,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -118,8 +116,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField3</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField3</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,8 +138,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField4</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">mainField4</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLModuleData.html b/docs/Classes/SDLModuleData.html
index 40a392045..6c43c42c3 100644
--- a/docs/Classes/SDLModuleData.html
+++ b/docs/Classes/SDLModuleData.html
@@ -206,7 +206,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -226,7 +226,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -246,8 +246,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLRadioControlData.html">SDLRadioControlData</a></span> <span class="o">*</span><span class="n">radioControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRadioControlData.html">SDLRadioControlData</a></span> <span class="o">*</span><span class="n">radioControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -267,8 +266,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLClimateControlData.html">SDLClimateControlData</a></span> <span class="o">*</span><span class="n">climateControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLClimateControlData.html">SDLClimateControlData</a></span> <span class="o">*</span><span class="n">climateControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -288,8 +286,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span> <span class="o">*</span><span class="n">seatControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatControlData.html">SDLSeatControlData</a></span> <span class="o">*</span><span class="n">seatControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -309,8 +306,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span> <span class="o">*</span><span class="n">audioControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAudioControlData.html">SDLAudioControlData</a></span> <span class="o">*</span><span class="n">audioControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -330,8 +326,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span> <span class="o">*</span><span class="n">lightControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLightControlData.html">SDLLightControlData</a></span> <span class="o">*</span><span class="n">lightControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -351,8 +346,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span> <span class="o">*</span><span class="n">hmiSettingsControlData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHMISettingsControlData.html">SDLHMISettingsControlData</a></span> <span class="o">*</span><span class="n">hmiSettingsControlData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLModuleInfo.html b/docs/Classes/SDLModuleInfo.html
index 9a8174c2c..de9762fdf 100644
--- a/docs/Classes/SDLModuleInfo.html
+++ b/docs/Classes/SDLModuleInfo.html
@@ -31,7 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -50,7 +50,7 @@ Optional</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">location</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">location</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -69,7 +69,7 @@ Optional</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">serviceArea</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">serviceArea</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,8 +89,7 @@ Optional</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowMultipleAccess</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowMultipleAccess</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMsgVersion.html b/docs/Classes/SDLMsgVersion.html
index 09bff69e2..29336589a 100644
--- a/docs/Classes/SDLMsgVersion.html
+++ b/docs/Classes/SDLMsgVersion.html
@@ -61,7 +61,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">majorVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">majorVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -81,7 +81,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minorVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minorVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,8 +101,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">patchVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">patchVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLMyKey.html b/docs/Classes/SDLMyKey.html
index e5a87835a..99705211d 100644
--- a/docs/Classes/SDLMyKey.html
+++ b/docs/Classes/SDLMyKey.html
@@ -21,8 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus">SDLVehicleDataStatus</a></span> <span class="n">_Nonnull</span> <span class="n">e911Override</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus">SDLVehicleDataStatus</a></span> <span class="n">_Nonnull</span> <span class="n">e911Override</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLNavigationCapability.html b/docs/Classes/SDLNavigationCapability.html
index f66ad5dbd..67cee4997 100644
--- a/docs/Classes/SDLNavigationCapability.html
+++ b/docs/Classes/SDLNavigationCapability.html
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">sendLocationEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">sendLocationEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,7 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">getWayPointsEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">getWayPointsEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLNavigationInstruction.html b/docs/Classes/SDLNavigationInstruction.html
index a340ab4b0..cd92064e3 100644
--- a/docs/Classes/SDLNavigationInstruction.html
+++ b/docs/Classes/SDLNavigationInstruction.html
@@ -112,8 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">locationDetails</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">locationDetails</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -133,7 +132,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction">SDLNavigationAction</a></span> <span class="n">_Nonnull</span> <span class="n">action</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction">SDLNavigationAction</a></span> <span class="n">_Nonnull</span> <span class="n">action</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,7 +152,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">eta</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">eta</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -173,7 +172,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bearing</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bearing</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -193,8 +192,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction">SDLNavigationJunction</a></span> <span class="n">junctionType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction">SDLNavigationJunction</a></span> <span class="n">junctionType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -214,7 +212,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection">SDLDirection</a></span> <span class="n">drivingSide</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection">SDLDirection</a></span> <span class="n">drivingSide</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -234,7 +232,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">details</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">details</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -254,7 +252,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLNavigationServiceData.html b/docs/Classes/SDLNavigationServiceData.html
index 1ef687192..eae0fa475 100644
--- a/docs/Classes/SDLNavigationServiceData.html
+++ b/docs/Classes/SDLNavigationServiceData.html
@@ -114,7 +114,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timestamp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timestamp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,7 +134,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">origin</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">origin</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -154,8 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">destination</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">destination</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -175,7 +174,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">destinationETA</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">destinationETA</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -195,8 +194,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLNavigationInstruction.html">SDLNavigationInstruction</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">instructions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLNavigationInstruction.html">SDLNavigationInstruction</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">instructions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -216,8 +214,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">nextInstructionETA</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">nextInstructionETA</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -237,8 +234,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nextInstructionDistance</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nextInstructionDistance</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -258,8 +254,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nextInstructionDistanceScale</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nextInstructionDistanceScale</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -279,7 +274,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">prompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">prompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLNavigationServiceManifest.html b/docs/Classes/SDLNavigationServiceManifest.html
index 10cd6a0a2..dfc7bf842 100644
--- a/docs/Classes/SDLNavigationServiceManifest.html
+++ b/docs/Classes/SDLNavigationServiceManifest.html
@@ -51,8 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acceptsWayPoints</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">acceptsWayPoints</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOasisAddress.html b/docs/Classes/SDLOasisAddress.html
index fbc65c018..37f0d16a4 100644
--- a/docs/Classes/SDLOasisAddress.html
+++ b/docs/Classes/SDLOasisAddress.html
@@ -118,7 +118,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">countryName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">countryName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -138,7 +138,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">countryCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">countryCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -158,7 +158,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">postalCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">postalCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -178,7 +178,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">administrativeArea</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">administrativeArea</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -198,7 +198,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subAdministrativeArea</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subAdministrativeArea</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -218,7 +218,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locality</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locality</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -238,7 +238,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subLocality</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subLocality</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -258,7 +258,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">thoroughfare</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">thoroughfare</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -278,7 +278,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subThoroughfare</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">subThoroughfare</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnAppInterfaceUnregistered.html b/docs/Classes/SDLOnAppInterfaceUnregistered.html
index f9192897d..c018c12ff 100644
--- a/docs/Classes/SDLOnAppInterfaceUnregistered.html
+++ b/docs/Classes/SDLOnAppInterfaceUnregistered.html
@@ -30,8 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason">SDLAppInterfaceUnregisteredReason</a></span> <span class="n">_Nonnull</span> <span class="n">reason</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason">SDLAppInterfaceUnregisteredReason</a></span> <span class="n">_Nonnull</span> <span class="n">reason</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnAppServiceData.html b/docs/Classes/SDLOnAppServiceData.html
index 7a41fea67..fd3369862 100644
--- a/docs/Classes/SDLOnAppServiceData.html
+++ b/docs/Classes/SDLOnAppServiceData.html
@@ -52,7 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceData.html">SDLAppServiceData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceData.html">SDLAppServiceData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnButtonEvent.html b/docs/Classes/SDLOnButtonEvent.html
index 97be7f300..56db7b761 100644
--- a/docs/Classes/SDLOnButtonEvent.html
+++ b/docs/Classes/SDLOnButtonEvent.html
@@ -56,7 +56,7 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,8 +74,7 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode">SDLButtonEventMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonEventMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode">SDLButtonEventMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonEventMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -97,8 +96,7 @@ the application has subscribed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customButtonID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customButtonID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnButtonPress.html b/docs/Classes/SDLOnButtonPress.html
index 65dd5ff60..877258357 100644
--- a/docs/Classes/SDLOnButtonPress.html
+++ b/docs/Classes/SDLOnButtonPress.html
@@ -45,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,8 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonPressMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode">SDLButtonPressMode</a></span> <span class="n">_Nonnull</span> <span class="n">buttonPressMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -88,8 +87,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customButtonID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customButtonID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnCommand.html b/docs/Classes/SDLOnCommand.html
index c7d94bdc6..7f4af1dbe 100644
--- a/docs/Classes/SDLOnCommand.html
+++ b/docs/Classes/SDLOnCommand.html
@@ -31,7 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">cmdID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -49,7 +49,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span> <span class="n">_Nonnull</span> <span class="n">triggerSource</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span> <span class="n">_Nonnull</span> <span class="n">triggerSource</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnDriverDistraction.html b/docs/Classes/SDLOnDriverDistraction.html
index d70c53247..26ad20c90 100644
--- a/docs/Classes/SDLOnDriverDistraction.html
+++ b/docs/Classes/SDLOnDriverDistraction.html
@@ -33,8 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState">SDLDriverDistractionState</a></span> <span class="n">_Nonnull</span> <span class="n">state</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState">SDLDriverDistractionState</a></span> <span class="n">_Nonnull</span> <span class="n">state</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -54,8 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenDismissalEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenDismissalEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenDismissalWarning</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">lockScreenDismissalWarning</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnEncodedSyncPData.html b/docs/Classes/SDLOnEncodedSyncPData.html
index dc28f7f84..50c14b59f 100644
--- a/docs/Classes/SDLOnEncodedSyncPData.html
+++ b/docs/Classes/SDLOnEncodedSyncPData.html
@@ -23,7 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -41,7 +41,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">URL</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">URL</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -59,7 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">Timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">Timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnHMIStatus.html b/docs/Classes/SDLOnHMIStatus.html
index 395459237..434a51c42 100644
--- a/docs/Classes/SDLOnHMIStatus.html
+++ b/docs/Classes/SDLOnHMIStatus.html
@@ -8,6 +8,7 @@
<li><a href="#section-videoStreamingState">videoStreamingState</a></li>
<li><a href="#section-systemContext">systemContext</a></li>
<li><a href="#section-windowID">windowID</a></li>
+ <li><a href="#section--initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:">-initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:</a></li>
</ul>
<h3>Overview</h3>
@@ -34,7 +35,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">_Nonnull</span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">_Nonnull</span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -54,8 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span> <span class="n">_Nonnull</span> <span class="n">audioStreamingState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span> <span class="n">_Nonnull</span> <span class="n">audioStreamingState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -73,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span> <span class="n">videoStreamingState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span> <span class="n">videoStreamingState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -92,7 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span> <span class="n">_Nonnull</span> <span class="n">systemContext</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span> <span class="n">_Nonnull</span> <span class="n">systemContext</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -112,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -121,4 +120,40 @@
+ <h3 id="section--initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:">
+ -initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:
+ </h3>
+
+ <p>Initialize an SDLOnHMIStatus RPC with initial parameters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithHMILevel</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="p">)</span><span class="nv">hmiLevel</span>
+ <span class="nf">systemContext</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span><span class="p">)</span><span class="nv">systemContext</span>
+ <span class="nf">audioStreamingState</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span><span class="p">)</span><span class="nv">audioStreamingState</span>
+ <span class="nf">videoStreamingState</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">)</span><span class="nv">videoStreamingState</span>
+ <span class="nf">windowID</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">windowID</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">hmiLevel</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span><span class="p">,</span> <span class="nv">systemContext</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext">SDLSystemContext</a></span><span class="p">,</span> <span class="nv">audioStreamingState</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState">SDLAudioStreamingState</a></span><span class="p">,</span> <span class="nv">videoStreamingState</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">?,</span> <span class="nv">windowID</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>hmiLevel</dt>
+ <dd><p>The HMI level</p></dd>
+ <dt>systemContext</dt>
+ <dd><p>The system context</p></dd>
+ <dt>audioStreamingState</dt>
+ <dd><p>The ability for an audio app to be heard</p></dd>
+ <dt>videoStreamingState</dt>
+ <dd><p>The ability for a video straming app to stream</p></dd>
+ <dt>windowID</dt>
+ <dd><p>Which window this status relates to</p></dd>
+ </dl>
+
</section>
diff --git a/docs/Classes/SDLOnHashChange.html b/docs/Classes/SDLOnHashChange.html
index 634493b84..39733f9be 100644
--- a/docs/Classes/SDLOnHashChange.html
+++ b/docs/Classes/SDLOnHashChange.html
@@ -21,7 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hashID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hashID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnInteriorVehicleData.html b/docs/Classes/SDLOnInteriorVehicleData.html
index 28af023c6..71ba991fb 100644
--- a/docs/Classes/SDLOnInteriorVehicleData.html
+++ b/docs/Classes/SDLOnInteriorVehicleData.html
@@ -23,7 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnKeyboardInput.html b/docs/Classes/SDLOnKeyboardInput.html
index 85164f27f..8e34fcbf0 100644
--- a/docs/Classes/SDLOnKeyboardInput.html
+++ b/docs/Classes/SDLOnKeyboardInput.html
@@ -22,7 +22,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span> <span class="n">_Nonnull</span> <span class="n">event</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent">SDLKeyboardEvent</a></span> <span class="n">_Nonnull</span> <span class="n">event</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -40,7 +40,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">data</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnLanguageChange.html b/docs/Classes/SDLOnLanguageChange.html
index 055fd71f9..d86dacde4 100644
--- a/docs/Classes/SDLOnLanguageChange.html
+++ b/docs/Classes/SDLOnLanguageChange.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">language</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -42,7 +42,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnLockScreenStatus.html b/docs/Classes/SDLOnLockScreenStatus.html
index 14e778e69..81838fe5b 100644
--- a/docs/Classes/SDLOnLockScreenStatus.html
+++ b/docs/Classes/SDLOnLockScreenStatus.html
@@ -32,8 +32,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">driverDistractionStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">driverDistractionStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -51,8 +50,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userSelected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userSelected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -70,8 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus">SDLLockScreenStatus</a></span> <span class="n">_Nonnull</span> <span class="n">lockScreenStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus">SDLLockScreenStatus</a></span> <span class="n">_Nonnull</span> <span class="n">lockScreenStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,7 +86,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">_Nonnull</span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel">SDLHMILevel</a></span> <span class="n">_Nonnull</span> <span class="n">hmiLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnPermissionsChange.html b/docs/Classes/SDLOnPermissionsChange.html
index 53de650bb..380713c84 100644
--- a/docs/Classes/SDLOnPermissionsChange.html
+++ b/docs/Classes/SDLOnPermissionsChange.html
@@ -26,8 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLPermissionItem.html">SDLPermissionItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">permissionItem</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLPermissionItem.html">SDLPermissionItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">permissionItem</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,8 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requireEncryption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requireEncryption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnRCStatus.html b/docs/Classes/SDLOnRCStatus.html
index 024e238f2..6f8b77f19 100644
--- a/docs/Classes/SDLOnRCStatus.html
+++ b/docs/Classes/SDLOnRCStatus.html
@@ -34,8 +34,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allocatedModules</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allocatedModules</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -60,8 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">freeModules</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">freeModules</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -82,7 +80,7 @@ If &ldquo;true&rdquo; - RC is allowed; if &ldquo;false&rdquo; - RC is disallowed
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">allowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnSyncPData.html b/docs/Classes/SDLOnSyncPData.html
index f52e132d6..ca8c4b7cd 100644
--- a/docs/Classes/SDLOnSyncPData.html
+++ b/docs/Classes/SDLOnSyncPData.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">URL</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">URL</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">Timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">Timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnSystemCapabilityUpdated.html b/docs/Classes/SDLOnSystemCapabilityUpdated.html
index 6ee5129a8..c5ba1fb78 100644
--- a/docs/Classes/SDLOnSystemCapabilityUpdated.html
+++ b/docs/Classes/SDLOnSystemCapabilityUpdated.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSystemCapability.html">SDLSystemCapability</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">systemCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSystemCapability.html">SDLSystemCapability</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">systemCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnSystemRequest.html b/docs/Classes/SDLOnSystemRequest.html
index cbe5a9d90..4b4f44f03 100644
--- a/docs/Classes/SDLOnSystemRequest.html
+++ b/docs/Classes/SDLOnSystemRequest.html
@@ -27,7 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span> <span class="n">_Nonnull</span> <span class="n">requestType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span> <span class="n">_Nonnull</span> <span class="n">requestType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">requestSubType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">requestSubType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,7 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">url</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -83,7 +83,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,7 +101,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -119,7 +119,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -137,7 +137,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnTBTClientState.html b/docs/Classes/SDLOnTBTClientState.html
index 21e196924..71978975f 100644
--- a/docs/Classes/SDLOnTBTClientState.html
+++ b/docs/Classes/SDLOnTBTClientState.html
@@ -21,7 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState">SDLTBTState</a></span> <span class="n">_Nonnull</span> <span class="n">state</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState">SDLTBTState</a></span> <span class="n">_Nonnull</span> <span class="n">state</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnTouchEvent.html b/docs/Classes/SDLOnTouchEvent.html
index 2c3e11146..e0b186eae 100644
--- a/docs/Classes/SDLOnTouchEvent.html
+++ b/docs/Classes/SDLOnTouchEvent.html
@@ -22,7 +22,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType">SDLTouchType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType">SDLTouchType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -40,8 +40,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTouchEvent.html">SDLTouchEvent</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">event</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTouchEvent.html">SDLTouchEvent</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">event</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnVehicleData.html b/docs/Classes/SDLOnVehicleData.html
index cf5c7dfe2..15adc04f7 100644
--- a/docs/Classes/SDLOnVehicleData.html
+++ b/docs/Classes/SDLOnVehicleData.html
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,7 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,7 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -126,8 +126,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -147,8 +146,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLFuelRange.html">SDLFuelRange</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -166,8 +164,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -185,8 +182,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -204,7 +200,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vin</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -222,7 +218,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL">SDLPRNDL</a></span> <span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL">SDLPRNDL</a></span> <span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,7 +236,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTireStatus.html">SDLTireStatus</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTireStatus.html">SDLTireStatus</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -258,7 +254,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -276,7 +272,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBeltStatus.html">SDLBeltStatus</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBeltStatus.html">SDLBeltStatus</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -294,8 +290,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLBodyInformation.html">SDLBodyInformation</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLBodyInformation.html">SDLBodyInformation</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -313,7 +308,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceStatus.html">SDLDeviceStatus</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceStatus.html">SDLDeviceStatus</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -331,8 +326,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus">SDLVehicleDataEventStatus</a></span> <span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -350,7 +344,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus">SDLWiperStatus</a></span> <span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus">SDLWiperStatus</a></span> <span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -368,8 +362,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHeadLampStatus.html">SDLHeadLampStatus</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHeadLampStatus.html">SDLHeadLampStatus</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -387,8 +380,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -406,8 +398,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -425,8 +416,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -444,8 +434,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -463,7 +452,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLECallInfo.html">SDLECallInfo</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLECallInfo.html">SDLECallInfo</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -481,7 +470,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAirbagStatus.html">SDLAirbagStatus</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAirbagStatus.html">SDLAirbagStatus</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -499,8 +488,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLEmergencyEvent.html">SDLEmergencyEvent</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLEmergencyEvent.html">SDLEmergencyEvent</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -518,8 +506,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLClusterModeStatus.html">SDLClusterModeStatus</a></span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLClusterModeStatus.html">SDLClusterModeStatus</a></span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -537,7 +524,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMyKey.html">SDLMyKey</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMyKey.html">SDLMyKey</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -555,8 +542,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus">SDLElectronicParkBrakeStatus</a></span> <span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -574,7 +560,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal">SDLTurnSignal</a></span> <span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -592,7 +578,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLOnWaypointChange.html b/docs/Classes/SDLOnWaypointChange.html
index f2fc86610..35a2da3f5 100644
--- a/docs/Classes/SDLOnWaypointChange.html
+++ b/docs/Classes/SDLOnWaypointChange.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">waypoints</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">waypoints</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLParameterPermissions.html b/docs/Classes/SDLParameterPermissions.html
index 70fa7934e..33b318da3 100644
--- a/docs/Classes/SDLParameterPermissions.html
+++ b/docs/Classes/SDLParameterPermissions.html
@@ -26,7 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">allowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,8 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userDisallowed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">userDisallowed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPerformAppServiceInteraction.html b/docs/Classes/SDLPerformAppServiceInteraction.html
index f267feb90..254f9b9b5 100644
--- a/docs/Classes/SDLPerformAppServiceInteraction.html
+++ b/docs/Classes/SDLPerformAppServiceInteraction.html
@@ -107,7 +107,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceUri</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceUri</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -127,7 +127,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -147,7 +147,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">originApp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">originApp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -167,8 +167,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requestServiceActive</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requestServiceActive</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPerformAppServiceInteractionResponse.html b/docs/Classes/SDLPerformAppServiceInteractionResponse.html
index 39c96046f..159850065 100644
--- a/docs/Classes/SDLPerformAppServiceInteractionResponse.html
+++ b/docs/Classes/SDLPerformAppServiceInteractionResponse.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">serviceSpecificResult</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">serviceSpecificResult</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPerformAudioPassThru.html b/docs/Classes/SDLPerformAudioPassThru.html
index 187e5df3b..5f92ab191 100644
--- a/docs/Classes/SDLPerformAudioPassThru.html
+++ b/docs/Classes/SDLPerformAudioPassThru.html
@@ -216,8 +216,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,8 +239,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">audioPassThruDisplayText1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">audioPassThruDisplayText1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -264,8 +262,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">audioPassThruDisplayText2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">audioPassThruDisplayText2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -285,7 +282,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate">SDLSamplingRate</a></span> <span class="n">_Nonnull</span> <span class="n">samplingRate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate">SDLSamplingRate</a></span> <span class="n">_Nonnull</span> <span class="n">samplingRate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -309,7 +306,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maxDuration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maxDuration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -329,7 +326,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample">SDLBitsPerSample</a></span> <span class="n">_Nonnull</span> <span class="n">bitsPerSample</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample">SDLBitsPerSample</a></span> <span class="n">_Nonnull</span> <span class="n">bitsPerSample</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -347,7 +344,7 @@ thru session by SDL
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType">SDLAudioType</a></span> <span class="n">_Nonnull</span> <span class="n">audioType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType">SDLAudioType</a></span> <span class="n">_Nonnull</span> <span class="n">audioType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -366,7 +363,7 @@ muted during the APT session<br/></p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">muteAudio</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">muteAudio</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -384,8 +381,7 @@ muted during the APT session<br/></p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler">SDLAudioPassThruHandler</a></span> <span class="n">audioDataHandler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler">SDLAudioPassThruHandler</a></span> <span class="n">audioDataHandler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPerformInteraction.html b/docs/Classes/SDLPerformInteraction.html
index 8f764c20e..0fb69c74d 100644
--- a/docs/Classes/SDLPerformInteraction.html
+++ b/docs/Classes/SDLPerformInteraction.html
@@ -481,7 +481,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">initialText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">initialText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -503,8 +503,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">initialPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -526,8 +525,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span> <span class="n">_Nonnull</span> <span class="n">interactionMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode">SDLInteractionMode</a></span> <span class="n">_Nonnull</span> <span class="n">interactionMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -549,12 +547,11 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetIDList</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">interactionChoiceSetIDList</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">interactionChoiceSetIDList</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">interactionChoiceSetIDList</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -572,8 +569,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -595,8 +591,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -618,7 +613,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -640,8 +635,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrHelp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrHelp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -663,8 +657,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode">SDLLayoutMode</a></span> <span class="n">interactionLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode">SDLLayoutMode</a></span> <span class="n">interactionLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -690,7 +683,7 @@ A keyboard can be used for searches. For example, the user could be asked to ent
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPerformInteractionResponse.html b/docs/Classes/SDLPerformInteractionResponse.html
index a92c7c3c5..f5b73d284 100644
--- a/docs/Classes/SDLPerformInteractionResponse.html
+++ b/docs/Classes/SDLPerformInteractionResponse.html
@@ -27,7 +27,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">choiceID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">choiceID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">manualTextEntry</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">manualTextEntry</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,8 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span> <span class="n">triggerSource</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource">SDLTriggerSource</a></span> <span class="n">triggerSource</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPermissionElement.html b/docs/Classes/SDLPermissionElement.html
new file mode 100644
index 000000000..53fc592ec
--- /dev/null
+++ b/docs/Classes/SDLPermissionElement.html
@@ -0,0 +1,85 @@
+<h1>SDLPermissionElement Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-rpcName">rpcName</a></li>
+ <li><a href="#section-parameterPermissions">parameterPermissions</a></li>
+ <li><a href="#section--initWithRPCName:parameterPermissions:">-initWithRPCName:parameterPermissions:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>An object containing the RPC name and its parameter names that should be checked when checking permissions</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-rpcName">
+ rpcName
+ </h3>
+
+ <p>Name of the individual RPC.
+Required</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="n">_Nonnull</span> <span class="n">rpcName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-parameterPermissions">
+ parameterPermissions
+ </h3>
+
+ <p>RPC parameters for the individual RPC</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">parameterPermissions</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">parameterPermissions</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section--initWithRPCName:parameterPermissions:">
+ -initWithRPCName:parameterPermissions:
+ </h3>
+
+ <p>Creates a new permission element.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRPCName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span><span class="nv">rpcName</span>
+ <span class="nf">parameterPermissions</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">parameterPermissions</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">,</span> <span class="nv">parameterPermissions</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span><span class="p">]?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcName</dt>
+ <dd><p>The name of the RPC.</p></dd>
+ <dt>parameterPermissions</dt>
+ <dd><p>An array parameters for the RPC that should be checked if they are allowed. Note that not all head units may provide this data. If no parameter data is received, we assume that the parameter is not allowed.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of <code>SDLPermissionElement</code>.</p>
+ </div>
+
+</section>
diff --git a/docs/Classes/SDLPermissionItem.html b/docs/Classes/SDLPermissionItem.html
index 8097eacfc..ed9139dc9 100644
--- a/docs/Classes/SDLPermissionItem.html
+++ b/docs/Classes/SDLPermissionItem.html
@@ -28,7 +28,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rpcName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rpcName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,8 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHMIPermissions.html">SDLHMIPermissions</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hmiPermissions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHMIPermissions.html">SDLHMIPermissions</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hmiPermissions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -69,8 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLParameterPermissions.html">SDLParameterPermissions</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parameterPermissions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLParameterPermissions.html">SDLParameterPermissions</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parameterPermissions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -90,8 +88,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requireEncryption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">requireEncryption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPermissionManager.html b/docs/Classes/SDLPermissionManager.html
index 4eb9360be..2858dedb8 100644
--- a/docs/Classes/SDLPermissionManager.html
+++ b/docs/Classes/SDLPermissionManager.html
@@ -7,12 +7,18 @@
<li><a href="#section--startWithCompletionHandler:">-startWithCompletionHandler:</a></li>
<li><a href="#section--stop">-stop</a></li>
<li><a href="#section--isRPCAllowed:">-isRPCAllowed:</a></li>
+ <li><a href="#section--isRPCNameAllowed:">-isRPCNameAllowed:</a></li>
<li><a href="#section--groupStatusOfRPCs:">-groupStatusOfRPCs:</a></li>
+ <li><a href="#section--groupStatusOfRPCPermissions:">-groupStatusOfRPCPermissions:</a></li>
<li><a href="#section--statusOfRPCs:">-statusOfRPCs:</a></li>
+ <li><a href="#section--statusesOfRPCPermissions:">-statusesOfRPCPermissions:</a></li>
<li><a href="#section--addObserverForRPCs:groupType:withHandler:">-addObserverForRPCs:groupType:withHandler:</a></li>
+ <li><a href="#section--subscribeToRPCPermissions:groupType:withHandler:">-subscribeToRPCPermissions:groupType:withHandler:</a></li>
<li><a href="#section--removeAllObservers">-removeAllObservers</a></li>
<li><a href="#section--removeObserverForIdentifier:">-removeObserverForIdentifier:</a></li>
<li><a href="#section--rpcRequiresEncryption:">-rpcRequiresEncryption:</a></li>
+ <li><a href="#section--rpcNameRequiresEncryption:">-rpcNameRequiresEncryption:</a></li>
+ <li><a href="#section--isPermissionParameterAllowed:parameter:">-isPermissionParameterAllowed:parameter:</a></li>
</ul>
<h3>Overview</h3>
@@ -30,7 +36,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">requiresEncryption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">requiresEncryption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -108,6 +114,33 @@
<p>YES if the RPC is allowed at the current HMI level, NO if not</p>
</div>
+ <h3 id="section--isRPCNameAllowed:">
+ -isRPCNameAllowed:
+ </h3>
+
+ <p>Determine if an individual RPC is allowed for the current HMI level</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">BOOL</span><span class="p">)</span><span class="nf">isRPCNameAllowed</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span><span class="nv">rpcName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">isRPCNameAllowed</span><span class="p">(</span><span class="n">_</span> <span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcName</dt>
+ <dd><p>The name of the RPC to be tested, for example, SDLRPCFunctionNameShow</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>YES if the RPC is allowed at the current HMI level, NO if not</p>
+ </div>
+
<h3 id="section--groupStatusOfRPCs:">
-groupStatusOfRPCs:
</h3>
@@ -136,6 +169,34 @@
<p>AllAllowed if all of the permissions are allowed, AllDisallowed if all the permissions are disallowed, Any if some are allowed, and some are disallowed</p>
</div>
+ <h3 id="section--groupStatusOfRPCPermissions:">
+ -groupStatusOfRPCPermissions:
+ </h3>
+
+ <p>Determine if all RPCs are allowed for the current HMI level</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n"><a href="../Enums/SDLPermissionGroupStatus.html">SDLPermissionGroupStatus</a></span><span class="p">)</span><span class="nf">groupStatusOfRPCPermissions</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">rpcNames</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">groupStatus</span><span class="p">(</span><span class="n">ofRPCPermissions</span> <span class="nv">rpcNames</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span><span class="p">])</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Enums/SDLPermissionGroupStatus.html">SDLPermissionGroupStatus</a></span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcNames</dt>
+ <dd><p>The RPCs to check</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>AllAllowed if all of the permissions are allowed, AllDisallowed if all the permissions are disallowed, Any if some are allowed, and some are disallowed</p>
+ </div>
+
<h3 id="section--statusOfRPCs:">
-statusOfRPCs:
</h3>
@@ -164,6 +225,35 @@
<p>A dictionary specifying if the passed in RPC names are currently allowed or not</p>
</div>
+ <h3 id="section--statusesOfRPCPermissions:">
+ -statusesOfRPCPermissions:
+ </h3>
+
+ <p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">,</span> <span class="n"><a href="../Classes/SDLRPCPermissionStatus.html">SDLRPCPermissionStatus</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="nf">statusesOfRPCPermissions</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">rpcNames</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">statuses</span><span class="p">(</span><span class="n">ofRPCPermissions</span> <span class="nv">rpcNames</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span><span class="p">])</span> <span class="o">-&gt;</span> <span class="p">[</span><span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="p">:</span> <span class="kt"><a href="../Classes/SDLRPCPermissionStatus.html">SDLRPCPermissionStatus</a></span><span class="p">]</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcNames</dt>
+ <dd><p>An array of permission elements to check</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>A dictionary with specific RPC info contained in a SDLRPCPermissionStatus</p>
+ </div>
+
<h3 id="section--addObserverForRPCs:groupType:withHandler:">
-addObserverForRPCs:groupType:withHandler:
</h3>
@@ -198,6 +288,47 @@
<dt>rpcNames</dt>
<dd><p>The RPCs to be observed</p></dd>
<dt>groupType</dt>
+ <dd><p>Affects the times that the observer block will be called. If Any, any change to any RPC in rpcNames will cause the observer block to be called. If AllAllowed, the block will be called when: 1. The observer is first set regardless of RPC status 2. Every RPC in rpcNames becomes allowed 3. The group of rpcNames goes from all being allowed to some or all being disallowed.</p></dd>
+ <dt>handler</dt>
+ <dd><p>The block that will be called whenever permissions change.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An identifier that can be passed to removeObserverForIdentifer: to remove the observer</p>
+ </div>
+
+ <h3 id="section--subscribeToRPCPermissions:groupType:withHandler:">
+ -subscribeToRPCPermissions:groupType:withHandler:
+ </h3>
+
+ <p>Subscribe to specified RPC names, with a callback that will be called whenever the value changes. Unlike addObserverForRPCs:groupType:withHandler:, the callback will only return immediately if the groupType is set to SDLPermissionGroupTypeAny or if the groupType is set to SDLPermissionGroupTypeAllAllowed and all RPCs in the rpcNames parameter are allowed.</p>
+<div class="aside aside-warning">
+ <p class="aside-title">Warning</p>
+ <p>The observer may be called before this method returns, do not attempt to remove the observer from within the observer. That could send <code>nil</code> to removeObserverForIdentifier:. If you want functionality like that, call groupStatusOfRPCs: instead.</p>
+
+</div>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier">SDLPermissionObserverIdentifier</a></span><span class="p">)</span>
+ <span class="nf">subscribeToRPCPermissions</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">permissionElements</span>
+ <span class="nf">groupType</span><span class="p">:(</span><span class="n"><a href="../Enums/SDLPermissionGroupType.html">SDLPermissionGroupType</a></span><span class="p">)</span><span class="nv">groupType</span>
+ <span class="nf">withHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLRPCPermissionStatusChangedHandler">SDLRPCPermissionStatusChangedHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">subscribe</span><span class="p">(</span><span class="n">toRPCPermissions</span> <span class="nv">permissionElements</span><span class="p">:</span> <span class="p">[</span><span class="kt"><a href="../Classes/SDLPermissionElement.html">SDLPermissionElement</a></span><span class="p">],</span> <span class="nv">groupType</span><span class="p">:</span> <span class="kt"><a href="../Enums/SDLPermissionGroupType.html">SDLPermissionGroupType</a></span><span class="p">,</span> <span class="n">withHandler</span> <span class="nv">handler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLRPCPermissionStatusChangedHandler">SDLRPCPermissionStatusChangedHandler</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">UUID</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>permissionElements</dt>
+ <dd><p>The permission elements to be observed</p></dd>
+ <dt>groupType</dt>
<dd><p>Affects the times that the observer block will be called. If Any, any change to any RPC in rpcNames will cause the observer block to be called. If AllAllowed, the block will be called when: 1. Every RPC in rpcNames becomes allowed 2. The group of rpcNames goes from all being allowed to some or all being disallowed.</p></dd>
<dt>handler</dt>
<dd><p>The block that will be called whenever permissions change.</p></dd>
@@ -267,4 +398,52 @@
+ <h3 id="section--rpcNameRequiresEncryption:">
+ -rpcNameRequiresEncryption:
+ </h3>
+
+ <p>Check whether or not an RPC needs encryption.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">BOOL</span><span class="p">)</span><span class="nf">rpcNameRequiresEncryption</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span><span class="nv">rpcName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">rpcNameRequiresEncryption</span><span class="p">(</span><span class="n">_</span> <span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
+
+
+
+
+ <h3 id="section--isPermissionParameterAllowed:parameter:">
+ -isPermissionParameterAllowed:parameter:
+ </h3>
+
+ <p>Check whether a parameter of an RPC is allowed</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">BOOL</span><span class="p">)</span><span class="nf">isPermissionParameterAllowed</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span><span class="nv">rpcName</span>
+ <span class="nf">parameter</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">NSString</span> <span class="o">*</span><span class="p">)</span><span class="nv">parameter</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">isPermissionParameterAllowed</span><span class="p">(</span><span class="n">_</span> <span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">,</span> <span class="nv">parameter</span><span class="p">:</span> <span class="kt">String</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcName</dt>
+ <dd><p>The name of the RPC to be tested, for example, SDLRPCFunctionNameGetVehicleData</p></dd>
+ <dt>parameter</dt>
+ <dd><p>The name of the parameter to be tested, for example, rpm</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>True if the parameter is allowed, false if it is not</p>
+ </div>
+
</section>
diff --git a/docs/Classes/SDLPhoneCapability.html b/docs/Classes/SDLPhoneCapability.html
index 3e6a3d3f3..34b47f75e 100644
--- a/docs/Classes/SDLPhoneCapability.html
+++ b/docs/Classes/SDLPhoneCapability.html
@@ -51,7 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">dialNumberEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span> <span class="o">*</span><span class="n">dialNumberEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPinchGesture.html b/docs/Classes/SDLPinchGesture.html
index adfd09289..26a0a4c9d 100644
--- a/docs/Classes/SDLPinchGesture.html
+++ b/docs/Classes/SDLPinchGesture.html
@@ -59,7 +59,7 @@ Instance of SDLPinchGesture.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouch.html">SDLTouch</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">firstTouch</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouch.html">SDLTouch</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">firstTouch</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,7 +78,7 @@ Instance of SDLPinchGesture.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouch.html">SDLTouch</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">secondTouch</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouch.html">SDLTouch</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">secondTouch</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -97,7 +97,7 @@ Instance of SDLPinchGesture.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">distance</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">distance</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,7 +116,7 @@ Instance of SDLPinchGesture.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGPoint</span> <span class="n">center</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">CGPoint</span> <span class="n">center</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -136,7 +136,7 @@ Instance of SDLPinchGesture.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isValid</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isValid</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPresetBankCapabilities.html b/docs/Classes/SDLPresetBankCapabilities.html
index 44058381a..65c56610f 100644
--- a/docs/Classes/SDLPresetBankCapabilities.html
+++ b/docs/Classes/SDLPresetBankCapabilities.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">onScreenPresetsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">onScreenPresetsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPublishAppService.html b/docs/Classes/SDLPublishAppService.html
index 754e095ba..019b53ddc 100644
--- a/docs/Classes/SDLPublishAppService.html
+++ b/docs/Classes/SDLPublishAppService.html
@@ -54,8 +54,7 @@ Subsequent calls with the same service type will update the manifest for that se
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServiceManifest.html">SDLAppServiceManifest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appServiceManifest</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceManifest.html">SDLAppServiceManifest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appServiceManifest</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPublishAppServiceResponse.html b/docs/Classes/SDLPublishAppServiceResponse.html
index 63b9c6346..a848c215b 100644
--- a/docs/Classes/SDLPublishAppServiceResponse.html
+++ b/docs/Classes/SDLPublishAppServiceResponse.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServiceRecord.html">SDLAppServiceRecord</a></span> <span class="o">*</span><span class="n">appServiceRecord</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServiceRecord.html">SDLAppServiceRecord</a></span> <span class="o">*</span><span class="n">appServiceRecord</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPutFile.html b/docs/Classes/SDLPutFile.html
index a594558ad..52764784c 100644
--- a/docs/Classes/SDLPutFile.html
+++ b/docs/Classes/SDLPutFile.html
@@ -10,6 +10,7 @@
<li><a href="#section--initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:">-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:</a></li>
<li><a href="#section--initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:">-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:</a></li>
<li><a href="#section-syncFileName">syncFileName</a></li>
+ <li><a href="#section-sdlFileName">sdlFileName</a></li>
<li><a href="#section-fileType">fileType</a></li>
<li><a href="#section-persistentFile">persistentFile</a></li>
<li><a href="#section-systemFile">systemFile</a></li>
@@ -259,7 +260,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncFileName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">__deprecated_msg</span><span class="p">(</span><span class="s">"use sdlFileName instead"</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">syncFileName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -268,6 +269,26 @@
+ <h3 id="section-sdlFileName">
+ sdlFileName
+ </h3>
+
+ <p>File reference name</p>
+
+<p>Required, max length 255 characters</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">sdlFileName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">sdlFileName</span><span class="p">:</span> <span class="kt">String</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section-fileType">
fileType
</h3>
@@ -279,7 +300,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">_Nonnull</span> <span class="n">fileType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType">SDLFileType</a></span> <span class="n">_Nonnull</span> <span class="n">fileType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -299,8 +320,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">persistentFile</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">persistentFile</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -320,7 +340,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">systemFile</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">systemFile</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -340,7 +360,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">offset</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -360,7 +380,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">length</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -380,7 +400,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">crc</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">crc</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLPutFileResponse.html b/docs/Classes/SDLPutFileResponse.html
index ae9bbf73d..a8f51d9b4 100644
--- a/docs/Classes/SDLPutFileResponse.html
+++ b/docs/Classes/SDLPutFileResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">spaceAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRDSData.html b/docs/Classes/SDLRDSData.html
index 7bb3c369a..b4781060b 100644
--- a/docs/Classes/SDLRDSData.html
+++ b/docs/Classes/SDLRDSData.html
@@ -78,7 +78,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">programService</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">programService</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -98,7 +98,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">radioText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">radioText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -118,7 +118,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">clockText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">clockText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -138,8 +138,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">programIdentification</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">programIdentification</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -160,7 +159,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">programType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">programType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -180,8 +179,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trafficProgramIdentification</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trafficProgramIdentification</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -201,8 +199,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trafficAnnouncementIdentification</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">trafficAnnouncementIdentification</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -222,7 +219,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">region</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">region</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRGBColor.html b/docs/Classes/SDLRGBColor.html
index 4c2975354..b59fb788b 100644
--- a/docs/Classes/SDLRGBColor.html
+++ b/docs/Classes/SDLRGBColor.html
@@ -93,7 +93,7 @@ Required, Integer, 0-255</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">red</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">red</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -112,7 +112,7 @@ Required, Integer, 0-255</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">green</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">green</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@ Required, Integer, 0-255</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">blue</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">blue</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCMessage.html b/docs/Classes/SDLRPCMessage.html
index 385beb5cd..c98331625 100644
--- a/docs/Classes/SDLRPCMessage.html
+++ b/docs/Classes/SDLRPCMessage.html
@@ -156,7 +156,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">bulkData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSData</span> <span class="o">*</span><span class="n">bulkData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -174,7 +174,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -192,8 +192,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parameters</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">parameters</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -211,7 +210,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">messageType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCNotificationNotification.html b/docs/Classes/SDLRPCNotificationNotification.html
index f41f94c17..0db5328c9 100644
--- a/docs/Classes/SDLRPCNotificationNotification.html
+++ b/docs/Classes/SDLRPCNotificationNotification.html
@@ -24,8 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">__kindof</span> <span class="n"><a href="../Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">notification</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">__kindof</span> <span class="n"><a href="../Classes.html#/c:objc(cs)SDLRPCNotification">SDLRPCNotification</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">notification</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCPermissionStatus.html b/docs/Classes/SDLRPCPermissionStatus.html
new file mode 100644
index 000000000..ceb5ef912
--- /dev/null
+++ b/docs/Classes/SDLRPCPermissionStatus.html
@@ -0,0 +1,109 @@
+<h1>SDLRPCPermissionStatus Class Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-rpcName">rpcName</a></li>
+ <li><a href="#section-rpcAllowed">rpcAllowed</a></li>
+ <li><a href="#section-rpcParameters">rpcParameters</a></li>
+ <li><a href="#section--initWithRPCName:isRPCAllowed:rpcParameters:">-initWithRPCName:isRPCAllowed:rpcParameters:</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>An object containing the result status of a permission element request</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-rpcName">
+ rpcName
+ </h3>
+
+ <p>Name of the individual RPC.</p>
+
+<p>Required</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="n">_Nonnull</span> <span class="n">rpcName</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-rpcAllowed">
+ rpcAllowed
+ </h3>
+
+ <p>Whether or not the RPC is allowed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isRPCAllowed</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">rpcAllowed</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">isRPCAllowed</span><span class="p">:</span> <span class="kt">Bool</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section-rpcParameters">
+ rpcParameters
+ </h3>
+
+ <p>Holds a dictionary of RPC parameters and objects of an NSNumber<BOOL> specifying if that RPC parameter is currently allowed</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">rpcParameters</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">rpcParameters</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">NSNumber</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
+ <h3 id="section--initWithRPCName:isRPCAllowed:rpcParameters:">
+ -initWithRPCName:isRPCAllowed:rpcParameters:
+ </h3>
+
+ <p>Initializes a SDLRPCPermissionStatus object.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithRPCName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">)</span><span class="nv">rpcName</span>
+ <span class="nf">isRPCAllowed</span><span class="p">:(</span><span class="n">BOOL</span><span class="p">)</span><span class="nv">isRPCAllowed</span>
+ <span class="nf">rpcParameters</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="p">)</span>
+ <span class="n"><a href="../Classes/SDLRPCPermissionStatus.html#/c:objc(cs)SDLRPCPermissionStatus(py)rpcParameters">rpcParameters</a></span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">rpcName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">,</span> <span class="nv">isRPCAllowed</span><span class="p">:</span> <span class="kt">Bool</span><span class="p">,</span> <span class="nv">rpcParameters</span><span class="p">:</span> <span class="p">[</span><span class="kt">String</span> <span class="p">:</span> <span class="kt">NSNumber</span><span class="p">]?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>rpcName</dt>
+ <dd><p>The name of the RPC.</p></dd>
+ <dt>isRPCAllowed</dt>
+ <dd><p>The permission status for the RPC.</p></dd>
+ <dt>rpcParameters</dt>
+ <dd><p>A dictionary of RPC parameters and objects of an NSNumber<BOOL> specifying if that RPC parameter is currently allowed</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRPCPermissionStatus class.</p>
+ </div>
+
+</section>
diff --git a/docs/Classes/SDLRPCRequest.html b/docs/Classes/SDLRPCRequest.html
index 47badf66c..7cd555a76 100644
--- a/docs/Classes/SDLRPCRequest.html
+++ b/docs/Classes/SDLRPCRequest.html
@@ -21,8 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">correlationID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">correlationID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCRequestNotification.html b/docs/Classes/SDLRPCRequestNotification.html
index 4e7417c6a..553432c86 100644
--- a/docs/Classes/SDLRPCRequestNotification.html
+++ b/docs/Classes/SDLRPCRequestNotification.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">__kindof</span> <span class="n"><a href="../Classes/SDLRPCRequest.html">SDLRPCRequest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">request</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">__kindof</span> <span class="n"><a href="../Classes/SDLRPCRequest.html">SDLRPCRequest</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">request</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCResponse.html b/docs/Classes/SDLRPCResponse.html
index c2f3e1cdf..2c6322adb 100644
--- a/docs/Classes/SDLRPCResponse.html
+++ b/docs/Classes/SDLRPCResponse.html
@@ -24,8 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">correlationID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">correlationID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -43,7 +42,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">success</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">success</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -61,7 +60,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLResult.h@T@SDLResult">SDLResult</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLResult.h@T@SDLResult">SDLResult</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -79,7 +78,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">info</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">info</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCResponseNotification.html b/docs/Classes/SDLRPCResponseNotification.html
index 18a50b0c2..91bef4854 100644
--- a/docs/Classes/SDLRPCResponseNotification.html
+++ b/docs/Classes/SDLRPCResponseNotification.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">__kindof</span> <span class="n"><a href="../Classes/SDLRPCResponse.html">SDLRPCResponse</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">response</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">__kindof</span> <span class="n"><a href="../Classes/SDLRPCResponse.html">SDLRPCResponse</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">response</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRPCStruct.html b/docs/Classes/SDLRPCStruct.html
index 7a936dcce..f60b99857 100644
--- a/docs/Classes/SDLRPCStruct.html
+++ b/docs/Classes/SDLRPCStruct.html
@@ -24,8 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">store</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSMutableDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">store</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -43,8 +42,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">isPayloadProtected</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">payloadProtected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isPayloadProtected</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">payloadProtected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRadioControlCapabilities.html b/docs/Classes/SDLRadioControlCapabilities.html
index 398c95ea1..f2620b525 100644
--- a/docs/Classes/SDLRadioControlCapabilities.html
+++ b/docs/Classes/SDLRadioControlCapabilities.html
@@ -289,7 +289,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -311,8 +311,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -334,8 +333,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioBandAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioBandAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -357,8 +355,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioFrequencyAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioFrequencyAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -380,8 +377,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdChannelAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdChannelAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -403,8 +399,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rdsDataAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rdsDataAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -426,8 +421,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -449,8 +443,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDChannelsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDChannelsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -472,8 +465,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">stateAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">stateAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -495,8 +487,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalStrengthAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalStrengthAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -518,8 +509,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalChangeThresholdAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalChangeThresholdAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -540,8 +530,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnableAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnableAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -562,8 +551,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">siriusXMRadioAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">siriusXMRadioAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -584,8 +572,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sisDataAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sisDataAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -605,7 +592,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRadioControlData.html b/docs/Classes/SDLRadioControlData.html
index 8be9c976d..3050d9476 100644
--- a/docs/Classes/SDLRadioControlData.html
+++ b/docs/Classes/SDLRadioControlData.html
@@ -5,6 +5,9 @@
<ul>
<li><a href="#section--initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:">-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:</a></li>
<li><a href="#section--initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:">-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:</a></li>
+ <li><a href="#section--initFMWithFrequencyInteger:frequencyFraction:hdChannel:">-initFMWithFrequencyInteger:frequencyFraction:hdChannel:</a></li>
+ <li><a href="#section--initAMWithFrequencyInteger:hdChannel:">-initAMWithFrequencyInteger:hdChannel:</a></li>
+ <li><a href="#section--initXMWithFrequencyInteger:">-initXMWithFrequencyInteger:</a></li>
<li><a href="#section-frequencyInteger">frequencyInteger</a></li>
<li><a href="#section-frequencyFraction">frequencyFraction</a></li>
<li><a href="#section-band">band</a></li>
@@ -109,6 +112,99 @@
<p>An instance of the SDLRadioControlData class</p>
</div>
+ <h3 id="section--initFMWithFrequencyInteger:frequencyFraction:hdChannel:">
+ -initFMWithFrequencyInteger:frequencyFraction:hdChannel:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initFMWithFrequencyInteger</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span>
+ <span class="nf">frequencyFraction</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyFraction</span>
+ <span class="nf">hdChannel</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdChannel</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">fmWithFrequencyInteger</span> <span class="nv">frequencyInteger</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">frequencyFraction</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">hdChannel</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>frequencyInteger</dt>
+ <dd><p>Must be between 0 and 1710</p></dd>
+ <dt>frequencyFraction</dt>
+ <dd><p>Must be between 0 and 9</p></dd>
+ <dt>hdChannel</dt>
+ <dd><p>Must be between 0 and 7</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlData class</p>
+ </div>
+
+ <h3 id="section--initAMWithFrequencyInteger:hdChannel:">
+ -initAMWithFrequencyInteger:hdChannel:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initAMWithFrequencyInteger</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span>
+ <span class="nf">hdChannel</span><span class="p">:(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">hdChannel</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">amWithFrequencyInteger</span> <span class="nv">frequencyInteger</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?,</span> <span class="nv">hdChannel</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>frequencyInteger</dt>
+ <dd><p>Must be between 0 and 1710</p></dd>
+ <dt>hdChannel</dt>
+ <dd><p>Must be between 0 and 7</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlData class</p>
+ </div>
+
+ <h3 id="section--initXMWithFrequencyInteger:">
+ -initXMWithFrequencyInteger:
+ </h3>
+
+ <p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initXMWithFrequencyInteger</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="p">)</span><span class="nv">frequencyInteger</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="n">xmWithFrequencyInteger</span> <span class="nv">frequencyInteger</span><span class="p">:</span> <span class="p">(</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">)?)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>frequencyInteger</dt>
+ <dd><p>Must be between 1 and 1710</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An instance of the SDLRadioControlData class</p>
+ </div>
+
<h3 id="section-frequencyInteger">
frequencyInteger
</h3>
@@ -120,8 +216,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frequencyInteger</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frequencyInteger</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,8 +236,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frequencyFraction</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frequencyFraction</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -162,7 +256,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span> <span class="n">band</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand">SDLRadioBand</a></span> <span class="n">band</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -187,7 +281,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRDSData.html">SDLRDSData</a></span> <span class="o">*</span><span class="n">rdsData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRDSData.html">SDLRDSData</a></span> <span class="o">*</span><span class="n">rdsData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -212,8 +306,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDs</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDs</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -238,8 +331,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDChannels</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">availableHDChannels</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -259,7 +351,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdChannel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdChannel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -284,8 +376,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalStrength</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalStrength</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -310,8 +401,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalChangeThreshold</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">signalChangeThreshold</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -331,8 +421,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">radioEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -357,7 +446,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState">SDLRadioState</a></span> <span class="n">state</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState">SDLRadioState</a></span> <span class="n">state</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -377,8 +466,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hdRadioEnable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -400,7 +488,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSISData.html">SDLSISData</a></span> <span class="o">*</span><span class="n">sisData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSISData.html">SDLSISData</a></span> <span class="o">*</span><span class="n">sisData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLReadDID.html b/docs/Classes/SDLReadDID.html
index 3fbd4de86..1a15533a2 100644
--- a/docs/Classes/SDLReadDID.html
+++ b/docs/Classes/SDLReadDID.html
@@ -64,7 +64,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ecuName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ecuName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,24 +78,25 @@
</h3>
<p>Raw data from vehicle data DID location(s)
- <br/>a Vector<Integer> value representing raw data from vehicle
- data DID location(s)
- <p>
- <b>Notes: </b>
- <ul>
- <li>Minvalue:0; Maxvalue:65535</li>
- <li>ArrayMin:0; ArrayMax:1000</li>
- </ul></p>
+ <br/>a Vector<Integer> value representing raw data from vehicle
+ data DID location(s)
+ <p>
+ <b>Notes: </b>
+ <ul>
+ <li>Minvalue:0; Maxvalue:65535</li>
+ <li>ArrayMin:0; ArrayMax:1000</li>
+ </ul></p>
+
+<p>Mandatory, contains an integer</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">didLocation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">didLocation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">didLocation</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">didLocation</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
diff --git a/docs/Classes/SDLReadDIDResponse.html b/docs/Classes/SDLReadDIDResponse.html
index db93aff27..e11c0c27f 100644
--- a/docs/Classes/SDLReadDIDResponse.html
+++ b/docs/Classes/SDLReadDIDResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDIDResult.html">SDLDIDResult</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">didResult</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDIDResult.html">SDLDIDResult</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">didResult</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRectangle.html b/docs/Classes/SDLRectangle.html
index d8da44936..d10926194 100644
--- a/docs/Classes/SDLRectangle.html
+++ b/docs/Classes/SDLRectangle.html
@@ -91,7 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">x</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">x</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">y</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">y</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">width</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">width</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -151,7 +151,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">height</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">height</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRegisterAppInterface.html b/docs/Classes/SDLRegisterAppInterface.html
index ebdf2bf62..f3cc6a9d7 100644
--- a/docs/Classes/SDLRegisterAppInterface.html
+++ b/docs/Classes/SDLRegisterAppInterface.html
@@ -279,8 +279,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncMsgVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">__deprecated_msg</span><span class="p">((</span><span class="s">"Use sdlMsgVersion instead"</span><span class="p">))</span> <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">syncMsgVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -302,7 +301,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">sdlMsgVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">sdlMsgVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -331,7 +330,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -359,8 +358,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">ttsName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -384,8 +382,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">ngnMediaScreenAppName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">ngnMediaScreenAppName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -409,8 +406,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrSynonyms</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrSynonyms</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -432,8 +428,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">isMediaApplication</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">isMediaApplication</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -455,7 +450,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">languageDesired</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">languageDesired</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -477,8 +472,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguageDesired</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">_Nonnull</span> <span class="n">hmiDisplayLanguageDesired</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -500,8 +494,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">appHMIType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType">SDLAppHMIType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">appHMIType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -525,7 +518,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">hashID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">hashID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -547,7 +540,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceInfo.html">SDLDeviceInfo</a></span> <span class="o">*</span><span class="n">deviceInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDeviceInfo.html">SDLDeviceInfo</a></span> <span class="o">*</span><span class="n">deviceInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -574,7 +567,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -598,7 +591,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fullAppID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -620,7 +613,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppInfo.html">SDLAppInfo</a></span> <span class="o">*</span><span class="n">appInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppInfo.html">SDLAppInfo</a></span> <span class="o">*</span><span class="n">appInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -642,8 +635,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -665,8 +657,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRegisterAppInterfaceResponse.html b/docs/Classes/SDLRegisterAppInterfaceResponse.html
index 8ce009cac..c90bb43e0 100644
--- a/docs/Classes/SDLRegisterAppInterfaceResponse.html
+++ b/docs/Classes/SDLRegisterAppInterfaceResponse.html
@@ -46,8 +46,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">syncMsgVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSyncMsgVersion.html">SDLSyncMsgVersion</a></span> <span class="o">*</span><span class="n">syncMsgVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -69,7 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">sdlMsgVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMsgVersion.html">SDLMsgVersion</a></span> <span class="o">*</span><span class="n">sdlMsgVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -91,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">language</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">language</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -113,8 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span> <span class="n">hmiDisplayLanguage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -136,8 +134,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -159,8 +156,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -182,8 +178,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -205,8 +200,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -228,8 +222,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities">SDLHMIZoneCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hmiZoneCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities">SDLHMIZoneCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hmiZoneCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -251,8 +244,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speechCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speechCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -274,8 +266,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech">SDLPrerecordedSpeech</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prerecordedSpeech</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech">SDLPrerecordedSpeech</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prerecordedSpeech</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -297,8 +288,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities">SDLVRCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vrCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities">SDLVRCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">vrCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -320,8 +310,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioPassThruCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioPassThruCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -343,8 +332,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*</span><span class="n">pcmStreamCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*</span><span class="n">pcmStreamCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -366,7 +354,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleType.html">SDLVehicleType</a></span> <span class="o">*</span><span class="n">vehicleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleType.html">SDLVehicleType</a></span> <span class="o">*</span><span class="n">vehicleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -388,12 +376,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">supportedDiagModes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">supportedDiagModes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">supportedDiagModes</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">supportedDiagModes</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]?</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -411,8 +398,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHMICapabilities.html">SDLHMICapabilities</a></span> <span class="o">*</span><span class="n">hmiCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHMICapabilities.html">SDLHMICapabilities</a></span> <span class="o">*</span><span class="n">hmiCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -434,7 +420,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">sdlVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">sdlVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -456,8 +442,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">systemSoftwareVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">systemSoftwareVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -479,8 +464,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">iconResumed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">iconResumed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLReleaseInteriorVehicleDataModule.html b/docs/Classes/SDLReleaseInteriorVehicleDataModule.html
index 2dc93a0f6..6f447a94b 100644
--- a/docs/Classes/SDLReleaseInteriorVehicleDataModule.html
+++ b/docs/Classes/SDLReleaseInteriorVehicleDataModule.html
@@ -57,7 +57,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType">SDLModuleType</a></span> <span class="n">_Nonnull</span> <span class="n">moduleType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -77,7 +77,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">moduleId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLRemoteControlCapabilities.html b/docs/Classes/SDLRemoteControlCapabilities.html
index a8483af4f..fb937b57f 100644
--- a/docs/Classes/SDLRemoteControlCapabilities.html
+++ b/docs/Classes/SDLRemoteControlCapabilities.html
@@ -128,8 +128,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">climateControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLClimateControlCapabilities.html">SDLClimateControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">climateControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -150,8 +149,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">radioControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLRadioControlCapabilities.html">SDLRadioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">radioControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -171,8 +169,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -192,8 +189,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">seatControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatControlCapabilities.html">SDLSeatControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">seatControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -213,8 +209,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioControlCapabilities.html">SDLAudioControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -234,9 +229,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span> <span class="o">*&gt;</span>
- <span class="o">*</span><span class="n">hmiSettingsControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHMISettingsControlCapabilities.html">SDLHMISettingsControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">hmiSettingsControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -256,8 +249,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">lightControlCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLLightControlCapabilities.html">SDLLightControlCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">lightControlCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLResetGlobalProperties.html b/docs/Classes/SDLResetGlobalProperties.html
index 1a3c82969..45470a778 100644
--- a/docs/Classes/SDLResetGlobalProperties.html
+++ b/docs/Classes/SDLResetGlobalProperties.html
@@ -64,8 +64,7 @@ indicating which global properties to reset to their default value</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty">SDLGlobalProperty</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">properties</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty">SDLGlobalProperty</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">properties</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSISData.html b/docs/Classes/SDLSISData.html
index d2649122a..fbbcb9f5c 100644
--- a/docs/Classes/SDLSISData.html
+++ b/docs/Classes/SDLSISData.html
@@ -69,7 +69,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationShortName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationShortName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -90,8 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span> <span class="o">*</span><span class="n">stationIDNumber</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStationIDNumber.html">SDLStationIDNumber</a></span> <span class="o">*</span><span class="n">stationIDNumber</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -112,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationLongName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationLongName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -132,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">stationLocation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGPSData.html">SDLGPSData</a></span> <span class="o">*</span><span class="n">stationLocation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,7 +152,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationMessage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">stationMessage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLScreenManager.html b/docs/Classes/SDLScreenManager.html
index a50c19ee1..c10bd8585 100644
--- a/docs/Classes/SDLScreenManager.html
+++ b/docs/Classes/SDLScreenManager.html
@@ -30,6 +30,9 @@
<li><a href="#section--endUpdates">-endUpdates</a></li>
<li><a href="#section--endUpdatesWithCompletionHandler:">-endUpdatesWithCompletionHandler:</a></li>
<li><a href="#section--softButtonObjectNamed:">-softButtonObjectNamed:</a></li>
+ <li><a href="#section--subscribeButton:withUpdateHandler:">-subscribeButton:withUpdateHandler:</a></li>
+ <li><a href="#section--subscribeButton:withObserver:selector:">-subscribeButton:withObserver:selector:</a></li>
+ <li><a href="#section--unsubscribeButton:withObserver:withCompletionHandler:">-unsubscribeButton:withObserver:withCompletionHandler:</a></li>
<li><a href="#section--preloadChoices:withCompletionHandler:">-preloadChoices:withCompletionHandler:</a></li>
<li><a href="#section--deleteChoices:">-deleteChoices:</a></li>
<li><a href="#section--presentChoiceSet:mode:">-presentChoiceSet:mode:</a></li>
@@ -55,7 +58,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -73,7 +76,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -91,7 +94,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField3</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField3</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -109,7 +112,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField4</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">textField4</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -127,7 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTrackTextField</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTrackTextField</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -145,7 +148,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">primaryGraphic</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">primaryGraphic</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -163,7 +166,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryGraphic</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">secondaryGraphic</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -181,7 +184,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment">SDLTextAlignment</a></span> <span class="n">_Nonnull</span> <span class="n">textAlignment</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment">SDLTextAlignment</a></span> <span class="n">_Nonnull</span> <span class="n">textAlignment</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -199,7 +202,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField1Type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField1Type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -217,7 +220,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField2Type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField2Type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -235,7 +238,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField3Type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField3Type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -253,7 +256,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField4Type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType">SDLMetadataType</a></span> <span class="n">textField4Type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -271,7 +274,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">title</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">title</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -289,8 +292,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButtonObjects</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonObject.html">SDLSoftButtonObject</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButtonObjects</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -314,8 +316,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLMenuConfiguration.html">SDLMenuConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuConfiguration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMenuConfiguration.html">SDLMenuConfiguration</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menuConfiguration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -333,7 +334,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMenuCell.html">SDLMenuCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menu</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMenuCell.html">SDLMenuCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">menu</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -357,8 +358,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLDynamicMenuUpdatesMode.html">SDLDynamicMenuUpdatesMode</a></span> <span class="n">dynamicMenuUpdatesMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLDynamicMenuUpdatesMode.html">SDLDynamicMenuUpdatesMode</a></span> <span class="n">dynamicMenuUpdatesMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -376,8 +376,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVoiceCommand.html">SDLVoiceCommand</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVoiceCommand.html">SDLVoiceCommand</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -395,8 +394,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardConfiguration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">null_resettable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardConfiguration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -414,8 +412,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">preloadedChoices</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSSet</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLChoiceCell.html">SDLChoiceCell</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">preloadedChoices</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -617,6 +614,108 @@
<dd><p>The name of the button</p></dd>
</dl>
+ <h3 id="section--subscribeButton:withUpdateHandler:">
+ -subscribeButton:withUpdateHandler:
+ </h3>
+
+ <p>Subscribes to a subscribe button. The update handler will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the <code>error</code> parameter of the updateHandler.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span><span class="p">)</span><span class="nf">subscribeButton</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">)</span><span class="nv">buttonName</span>
+ <span class="nf">withUpdateHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLSubscribeButtonHandler">SDLSubscribeButtonHandler</a></span><span class="p">)</span><span class="nv">updateHandler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">subscribeButton</span><span class="p">(</span><span class="n">_</span> <span class="nv">buttonName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">,</span> <span class="n">withUpdateHandler</span> <span class="nv">updateHandler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLSubscribeButtonHandler">SDLSubscribeButtonHandler</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">NSObjectProtocol</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>buttonName</dt>
+ <dd><p>The name of the hard button to subscribe to</p></dd>
+ <dt>updateHandler</dt>
+ <dd><p>The block run when the subscribe button is selected</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An object that can be used to unsubscribe the block using <code>unsubscribeButtonWithObserver:withCompletionHandler:</code>.</p>
+ </div>
+
+ <h3 id="section--subscribeButton:withObserver:selector:">
+ -subscribeButton:withObserver:selector:
+ </h3>
+
+ <p>Subscribes to a subscribe button. The selector will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the <code>error</code> parameter of the selector.</p>
+
+<p>The selector supports the following parameters:</p>
+
+<ol>
+<li><p>A selector with no parameters. The observer will be notified when a button press occurs (it will not know if a short or long press has occurred).</p></li>
+<li><p>A selector with one parameter: (SDLButtonName). The observer will be notified when a button press occurs (both a short and long press will trigger the selector, but it will not be able to distinguish between them). It will not be notified of button events.</p></li>
+<li><p>A selector with two parameters: (SDLButtonName, NSError). The observer will be notified when a button press occurs (both a short and long press will trigger the selector, but it will not be able to distinguish between them). It will not be notified of button events.</p></li>
+<li><p>A selector with three parameters: (SDLButtonName, NSError, SDLOnButtonPress). The observer will be notified when a long or short button press occurs (and can distinguish between a short or long press), but will not be notified of individual button events.</p></li>
+<li><p>A selector with four parameters: (SDLButtonName, NSError, SDLOnButtonPress, SDLOnButtonEvent). The observer will be notified when any button press or any button event occurs (and can distinguish between them).</p></li>
+</ol>
+
+<p>To unsubscribe from the hard button, call <code>unsubscribeButton:withObserver:withCompletionHandler:</code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">subscribeButton</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">)</span><span class="nv">buttonName</span>
+ <span class="nf">withObserver</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span><span class="p">)</span><span class="nv">observer</span>
+ <span class="nf">selector</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SEL</span><span class="p">)</span><span class="nv">selector</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">subscribeButton</span><span class="p">(</span><span class="n">_</span> <span class="nv">buttonName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">,</span> <span class="n">withObserver</span> <span class="nv">observer</span><span class="p">:</span> <span class="kt">NSObjectProtocol</span><span class="p">,</span> <span class="nv">selector</span><span class="p">:</span> <span class="kt">Selector</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>buttonName</dt>
+ <dd><p>The name of the hard button to subscribe to</p></dd>
+ <dt>observer</dt>
+ <dd><p>The object that will have <code>selector</code> called whenever the button has been selected</p></dd>
+ <dt>selector</dt>
+ <dd><p>The selector on <code>observer</code> that will be called whenever the button has been selected</p></dd>
+ </dl>
+
+ <h3 id="section--unsubscribeButton:withObserver:withCompletionHandler:">
+ -unsubscribeButton:withObserver:withCompletionHandler:
+ </h3>
+
+ <p>Unsubscribes to a subscribe button. Please note that if a subscribe button has multiple subscribers the observer will no longer get notifications, however, the app will still be subscribed to the hard button until the last subscriber is removed.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">unsubscribeButton</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">)</span><span class="nv">buttonName</span>
+ <span class="nf">withObserver</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span><span class="p">)</span><span class="nv">observer</span>
+ <span class="nf">withCompletionHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler">SDLScreenManagerUpdateCompletionHandler</a></span><span class="p">)</span><span class="nv">completionHandler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">unsubscribeButton</span><span class="p">(</span><span class="n">_</span> <span class="nv">buttonName</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span><span class="p">,</span> <span class="n">withObserver</span> <span class="nv">observer</span><span class="p">:</span> <span class="kt">NSObjectProtocol</span><span class="p">,</span> <span class="n">withCompletionHandler</span> <span class="nv">completionHandler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler">SDLScreenManagerUpdateCompletionHandler</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>buttonName</dt>
+ <dd><p>The name of the hard button to subscribe to</p></dd>
+ <dt>observer</dt>
+ <dd><p>The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed</p></dd>
+ <dt>completionHandler</dt>
+ <dd><p>A handler called when the observer has been unsubscribed to the hard button</p></dd>
+ </dl>
+
<h3 id="section--preloadChoices:withCompletionHandler:">
-preloadChoices:withCompletionHandler:
</h3>
diff --git a/docs/Classes/SDLScreenParams.html b/docs/Classes/SDLScreenParams.html
index 6c185e4f2..956fa27b3 100644
--- a/docs/Classes/SDLScreenParams.html
+++ b/docs/Classes/SDLScreenParams.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolution</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">resolution</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,8 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTouchEventCapabilities.html">SDLTouchEventCapabilities</a></span> <span class="o">*</span><span class="n">touchEventAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouchEventCapabilities.html">SDLTouchEventCapabilities</a></span> <span class="o">*</span><span class="n">touchEventAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLScrollableMessage.html b/docs/Classes/SDLScrollableMessage.html
index 0feae8e2c..afb399e83 100644
--- a/docs/Classes/SDLScrollableMessage.html
+++ b/docs/Classes/SDLScrollableMessage.html
@@ -133,8 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">scrollableMessageBody</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">scrollableMessageBody</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,7 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -178,8 +177,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -205,7 +203,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSeatControlCapabilities.html b/docs/Classes/SDLSeatControlCapabilities.html
index c9fe835f0..fe36f633f 100644
--- a/docs/Classes/SDLSeatControlCapabilities.html
+++ b/docs/Classes/SDLSeatControlCapabilities.html
@@ -252,7 +252,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -272,8 +272,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabledAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabledAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -293,8 +292,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabledAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabledAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -314,8 +312,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevelAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevelAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -335,8 +332,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevelAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevelAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -356,8 +352,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -377,8 +372,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -398,8 +392,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -419,8 +412,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -440,8 +432,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngleAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngleAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -461,8 +452,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -482,8 +472,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPositionAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPositionAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -503,8 +492,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabledAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabledAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -524,8 +512,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageModeAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageModeAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -545,8 +532,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmnessAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmnessAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -566,8 +552,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">memoryAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">memoryAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -587,7 +572,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleInfo.html">SDLModuleInfo</a></span> <span class="o">*</span><span class="n">moduleInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSeatControlData.html b/docs/Classes/SDLSeatControlData.html
index 0b1375c2e..753de4faa 100644
--- a/docs/Classes/SDLSeatControlData.html
+++ b/docs/Classes/SDLSeatControlData.html
@@ -146,7 +146,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat">SDLSupportedSeat</a></span> <span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -166,8 +166,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -187,8 +186,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -208,8 +206,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">heatingLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -229,8 +226,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">coolingLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -250,8 +246,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">horizontalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -271,8 +266,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">verticalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -292,8 +286,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">frontVerticalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -313,8 +306,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backVerticalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -334,8 +326,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">backTiltAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -355,8 +346,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportHorizontalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -376,8 +366,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headSupportVerticalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -397,8 +386,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">massageEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -418,8 +406,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageModeData.html">SDLMassageModeData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -439,8 +426,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmness</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLMassageCushionFirmness.html">SDLMassageCushionFirmness</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">massageCushionFirmness</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -460,7 +446,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span> <span class="o">*</span><span class="n">memory</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatMemoryAction.html">SDLSeatMemoryAction</a></span> <span class="o">*</span><span class="n">memory</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSeatLocation.html b/docs/Classes/SDLSeatLocation.html
index f98fb2982..2973a9c29 100644
--- a/docs/Classes/SDLSeatLocation.html
+++ b/docs/Classes/SDLSeatLocation.html
@@ -21,7 +21,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">grid</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLGrid.html">SDLGrid</a></span> <span class="o">*</span><span class="n">grid</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSeatLocationCapability.html b/docs/Classes/SDLSeatLocationCapability.html
index 919074e02..4030d8860 100644
--- a/docs/Classes/SDLSeatLocationCapability.html
+++ b/docs/Classes/SDLSeatLocationCapability.html
@@ -62,7 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cols</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cols</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -80,7 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rows</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rows</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -98,7 +98,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">levels</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">levels</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -117,8 +117,7 @@ Optional</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatLocation.html">SDLSeatLocation</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">seats</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSeatLocation.html">SDLSeatLocation</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">seats</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSeatMemoryAction.html b/docs/Classes/SDLSeatMemoryAction.html
index f547b77c8..c05442e7a 100644
--- a/docs/Classes/SDLSeatMemoryAction.html
+++ b/docs/Classes/SDLSeatMemoryAction.html
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">id</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,7 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">label</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">label</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -130,7 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">_Nonnull</span> <span class="n">action</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></span> <span class="n">_Nonnull</span> <span class="n">action</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSendHapticData.html b/docs/Classes/SDLSendHapticData.html
index 7553f3ba7..52d87852e 100644
--- a/docs/Classes/SDLSendHapticData.html
+++ b/docs/Classes/SDLSendHapticData.html
@@ -48,8 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHapticRect.html">SDLHapticRect</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">hapticRectData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLHapticRect.html">SDLHapticRect</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">hapticRectData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSendLocation.html b/docs/Classes/SDLSendLocation.html
index ca2cabd4f..4032cee75 100644
--- a/docs/Classes/SDLSendLocation.html
+++ b/docs/Classes/SDLSendLocation.html
@@ -187,8 +187,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">longitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -208,8 +207,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">latitudeDegrees</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -229,7 +227,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -249,7 +247,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationDescription</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">locationDescription</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -269,8 +267,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">addressLines</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">addressLines</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -290,7 +287,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">phoneNumber</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">phoneNumber</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -310,7 +307,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">locationImage</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">locationImage</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -330,7 +327,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode">SDLDeliveryMode</a></span> <span class="n">deliveryMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode">SDLDeliveryMode</a></span> <span class="n">deliveryMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -350,7 +347,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">timeStamp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">timeStamp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -370,7 +367,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLOasisAddress.html">SDLOasisAddress</a></span> <span class="o">*</span><span class="n">address</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLOasisAddress.html">SDLOasisAddress</a></span> <span class="o">*</span><span class="n">address</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetAppIcon.html b/docs/Classes/SDLSetAppIcon.html
index c4e3c9c0e..578d9439c 100644
--- a/docs/Classes/SDLSetAppIcon.html
+++ b/docs/Classes/SDLSetAppIcon.html
@@ -56,7 +56,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncFileName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">syncFileName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetCloudAppProperties.html b/docs/Classes/SDLSetCloudAppProperties.html
index 0064af1ce..5a27bbb6d 100644
--- a/docs/Classes/SDLSetCloudAppProperties.html
+++ b/docs/Classes/SDLSetCloudAppProperties.html
@@ -52,8 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLCloudAppProperties.html">SDLCloudAppProperties</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">properties</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLCloudAppProperties.html">SDLCloudAppProperties</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">properties</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetDisplayLayout.html b/docs/Classes/SDLSetDisplayLayout.html
index 639e07ff4..e6da86528 100644
--- a/docs/Classes/SDLSetDisplayLayout.html
+++ b/docs/Classes/SDLSetDisplayLayout.html
@@ -121,7 +121,7 @@ presets. Currently defined for GEN2</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">displayLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">displayLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,8 +141,7 @@ presets. Currently defined for GEN2</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -162,8 +161,7 @@ presets. Currently defined for GEN2</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetDisplayLayoutResponse.html b/docs/Classes/SDLSetDisplayLayoutResponse.html
index 918f23ae7..5924fad9f 100644
--- a/docs/Classes/SDLSetDisplayLayoutResponse.html
+++ b/docs/Classes/SDLSetDisplayLayoutResponse.html
@@ -26,8 +26,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -45,8 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -64,8 +62,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -83,8 +80,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetGlobalProperties.html b/docs/Classes/SDLSetGlobalProperties.html
index 70c48c6b3..f8ee156c1 100644
--- a/docs/Classes/SDLSetGlobalProperties.html
+++ b/docs/Classes/SDLSetGlobalProperties.html
@@ -201,8 +201,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">helpPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -222,8 +221,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">timeoutPrompt</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -243,7 +241,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vrHelpTitle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">vrHelpTitle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -265,8 +263,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrHelp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVRHelpItem.html">SDLVRHelpItem</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">vrHelp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -286,7 +283,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">menuTitle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">menuTitle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -306,7 +303,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">menuIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">menuIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -326,8 +323,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardProperties</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLKeyboardProperties.html">SDLKeyboardProperties</a></span> <span class="o">*</span><span class="n">keyboardProperties</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -347,7 +343,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatLocation.html">SDLSeatLocation</a></span> <span class="o">*</span><span class="n">userLocation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatLocation.html">SDLSeatLocation</a></span> <span class="o">*</span><span class="n">userLocation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -365,7 +361,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">menuLayout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span> <span class="n">menuLayout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetInteriorVehicleData.html b/docs/Classes/SDLSetInteriorVehicleData.html
index 889c1176d..470539f49 100644
--- a/docs/Classes/SDLSetInteriorVehicleData.html
+++ b/docs/Classes/SDLSetInteriorVehicleData.html
@@ -50,7 +50,7 @@ change the settings of a specific remote control module.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">moduleData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetInteriorVehicleDataResponse.html b/docs/Classes/SDLSetInteriorVehicleDataResponse.html
index cdeb45324..3e9c16ff0 100644
--- a/docs/Classes/SDLSetInteriorVehicleDataResponse.html
+++ b/docs/Classes/SDLSetInteriorVehicleDataResponse.html
@@ -23,7 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">moduleData</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLModuleData.html">SDLModuleData</a></span> <span class="o">*</span><span class="n">moduleData</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSetMediaClockTimer.html b/docs/Classes/SDLSetMediaClockTimer.html
index 0dbcdb683..fc6eddec8 100644
--- a/docs/Classes/SDLSetMediaClockTimer.html
+++ b/docs/Classes/SDLSetMediaClockTimer.html
@@ -495,7 +495,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStartTime.html">SDLStartTime</a></span> <span class="o">*</span><span class="n">startTime</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStartTime.html">SDLStartTime</a></span> <span class="o">*</span><span class="n">startTime</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -515,7 +515,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStartTime.html">SDLStartTime</a></span> <span class="o">*</span><span class="n">endTime</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLStartTime.html">SDLStartTime</a></span> <span class="o">*</span><span class="n">endTime</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -543,7 +543,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode">SDLUpdateMode</a></span> <span class="n">_Nonnull</span> <span class="n">updateMode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode">SDLUpdateMode</a></span> <span class="n">_Nonnull</span> <span class="n">updateMode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -565,8 +565,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">audioStreamingIndicator</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator">SDLAudioStreamingIndicator</a></span> <span class="n">audioStreamingIndicator</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLShow.html b/docs/Classes/SDLShow.html
index b603d603e..f7a3a2111 100644
--- a/docs/Classes/SDLShow.html
+++ b/docs/Classes/SDLShow.html
@@ -340,7 +340,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -372,7 +372,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -405,7 +405,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField3</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField3</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -438,7 +438,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField4</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mainField4</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -468,7 +468,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment">SDLTextAlignment</a></span> <span class="n">alignment</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment">SDLTextAlignment</a></span> <span class="n">alignment</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -500,7 +500,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">statusBar</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">statusBar</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -531,7 +531,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaClock</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaClock</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -558,7 +558,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTrack</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">mediaTrack</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -582,7 +582,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">graphic</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">graphic</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -606,7 +606,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">secondaryGraphic</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">secondaryGraphic</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -637,8 +637,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -665,8 +664,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">customPresets</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">customPresets</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -688,7 +686,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMetadataTags.html">SDLMetadataTags</a></span> <span class="o">*</span><span class="n">metadataTags</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLMetadataTags.html">SDLMetadataTags</a></span> <span class="o">*</span><span class="n">metadataTags</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -708,7 +706,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -728,8 +726,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateConfiguration.html">SDLTemplateConfiguration</a></span> <span class="o">*</span><span class="n">templateConfiguration</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateConfiguration.html">SDLTemplateConfiguration</a></span> <span class="o">*</span><span class="n">templateConfiguration</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -751,7 +748,7 @@ line in a two-line display
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">templateTitle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">templateTitle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLShowAppMenu.html b/docs/Classes/SDLShowAppMenu.html
index 4cb34be70..96b7d2904 100644
--- a/docs/Classes/SDLShowAppMenu.html
+++ b/docs/Classes/SDLShowAppMenu.html
@@ -51,7 +51,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">menuID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">menuID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLShowConstantTBT.html b/docs/Classes/SDLShowConstantTBT.html
index 7d54e020e..ab92678d0 100644
--- a/docs/Classes/SDLShowConstantTBT.html
+++ b/docs/Classes/SDLShowConstantTBT.html
@@ -94,7 +94,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText1</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText1</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,7 +114,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText2</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText2</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -134,7 +134,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">eta</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">eta</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -154,7 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">timeToDestination</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">timeToDestination</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -174,7 +174,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">totalDistance</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">totalDistance</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -199,7 +199,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">turnIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">turnIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -224,7 +224,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">nextTurnIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">nextTurnIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -244,8 +244,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceToManeuver</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceToManeuver</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -265,8 +264,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceToManeuverScale</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">distanceToManeuverScale</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -286,8 +284,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maneuverComplete</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maneuverComplete</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -312,8 +309,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSingleTireStatus.html b/docs/Classes/SDLSingleTireStatus.html
index edf624651..fa9b3d1a0 100644
--- a/docs/Classes/SDLSingleTireStatus.html
+++ b/docs/Classes/SDLSingleTireStatus.html
@@ -30,8 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">status</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus">SDLComponentVolumeStatus</a></span> <span class="n">_Nonnull</span> <span class="n">status</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -51,8 +50,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">monitoringSystemStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS">SDLTPMS</a></span> <span class="n">monitoringSystemStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,7 +70,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSlider.html b/docs/Classes/SDLSlider.html
index 72ff6d739..52f9c7447 100644
--- a/docs/Classes/SDLSlider.html
+++ b/docs/Classes/SDLSlider.html
@@ -190,7 +190,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">numTicks</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">numTicks</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -212,7 +212,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">position</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">position</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -234,7 +234,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">sliderHeader</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">sliderHeader</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -261,8 +261,7 @@ If omitted on supported displays, no footer text shall be displayed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">sliderFooter</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">sliderFooter</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -284,7 +283,7 @@ If omitted on supported displays, no footer text shall be displayed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">timeout</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -310,7 +309,7 @@ If omitted on supported displays, no footer text shall be displayed.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cancelID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSliderResponse.html b/docs/Classes/SDLSliderResponse.html
index e9fe72714..cac09d497 100644
--- a/docs/Classes/SDLSliderResponse.html
+++ b/docs/Classes/SDLSliderResponse.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sliderPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">sliderPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSoftButton.html b/docs/Classes/SDLSoftButton.html
index 55457260f..f8f0d3337 100644
--- a/docs/Classes/SDLSoftButton.html
+++ b/docs/Classes/SDLSoftButton.html
@@ -95,8 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,7 +115,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType">SDLSoftButtonType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType">SDLSoftButtonType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -136,7 +135,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">text</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">text</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -156,7 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -176,8 +175,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isHighlighted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">isHighlighted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -197,7 +195,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButtonID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButtonID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -217,7 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction">SDLSystemAction</a></span> <span class="n">systemAction</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction">SDLSystemAction</a></span> <span class="n">systemAction</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSoftButtonCapabilities.html b/docs/Classes/SDLSoftButtonCapabilities.html
index d0b3efca7..eaf87160f 100644
--- a/docs/Classes/SDLSoftButtonCapabilities.html
+++ b/docs/Classes/SDLSoftButtonCapabilities.html
@@ -31,8 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">shortPressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">shortPressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -54,8 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longPressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">longPressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -77,8 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">upDownAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">upDownAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -98,8 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">imageSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -121,8 +117,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">textSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">textSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSoftButtonObject.html b/docs/Classes/SDLSoftButtonObject.html
index 6e526713c..00c851d9b 100644
--- a/docs/Classes/SDLSoftButtonObject.html
+++ b/docs/Classes/SDLSoftButtonObject.html
@@ -31,7 +31,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -49,8 +49,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonState.html">SDLSoftButtonState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">states</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonState.html">SDLSoftButtonState</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">states</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -68,7 +67,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSoftButtonState.html">SDLSoftButtonState</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentState</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSoftButtonState.html">SDLSoftButtonState</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentState</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -86,8 +85,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentStateSoftButton</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">currentStateSoftButton</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -105,8 +103,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">eventHandler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">eventHandler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSoftButtonState.html b/docs/Classes/SDLSoftButtonState.html
index b6d0edd52..93db804d0 100644
--- a/docs/Classes/SDLSoftButtonState.html
+++ b/docs/Classes/SDLSoftButtonState.html
@@ -29,7 +29,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLArtwork.html">SDLArtwork</a></span> <span class="o">*</span><span class="n">artwork</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,7 +65,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">text</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">text</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -83,7 +83,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">isHighlighted</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">highlighted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isHighlighted</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">highlighted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,7 +101,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction">SDLSystemAction</a></span> <span class="n">_Nonnull</span> <span class="n">systemAction</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction">SDLSystemAction</a></span> <span class="n">_Nonnull</span> <span class="n">systemAction</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -119,7 +119,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButton</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">softButton</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSpeak.html b/docs/Classes/SDLSpeak.html
index 9dec6e060..9eff421ec 100644
--- a/docs/Classes/SDLSpeak.html
+++ b/docs/Classes/SDLSpeak.html
@@ -121,8 +121,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ttsChunks</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTTSChunk.html">SDLTTSChunk</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">ttsChunks</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLStartTime.html b/docs/Classes/SDLStartTime.html
index b281b80eb..20f7ffc95 100644
--- a/docs/Classes/SDLStartTime.html
+++ b/docs/Classes/SDLStartTime.html
@@ -91,7 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hours</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">hours</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minutes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minutes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">seconds</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">seconds</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLStationIDNumber.html b/docs/Classes/SDLStationIDNumber.html
index ad1ea4a1e..392a42638 100644
--- a/docs/Classes/SDLStationIDNumber.html
+++ b/docs/Classes/SDLStationIDNumber.html
@@ -57,7 +57,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">countryCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">countryCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,8 +78,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fccFacilityId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fccFacilityId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLStreamingMediaConfiguration.html b/docs/Classes/SDLStreamingMediaConfiguration.html
index 077c26975..f353dad47 100644
--- a/docs/Classes/SDLStreamingMediaConfiguration.html
+++ b/docs/Classes/SDLStreamingMediaConfiguration.html
@@ -38,8 +38,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">Class</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLSecurityType.html">SDLSecurityType</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">securityManagers</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">Class</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLSecurityType.html">SDLSecurityType</a></span><span class="o">&gt;&gt;</span> <span class="o">*</span><span class="n">securityManagers</span><span class="p">;</span></code></pre>
@@ -54,8 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLStreamingEncryptionFlag.html">SDLStreamingEncryptionFlag</a></span> <span class="n">maximumDesiredEncryption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLStreamingEncryptionFlag.html">SDLStreamingEncryptionFlag</a></span> <span class="n">maximumDesiredEncryption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customVideoEncoderSettings</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*</span><span class="p">,</span> <span class="n">id</span><span class="o">&gt;</span> <span class="o">*</span><span class="n">customVideoEncoderSettings</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -94,8 +91,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLStreamingMediaManagerDataSource.html">SDLStreamingMediaManagerDataSource</a></span><span class="o">&gt;</span>
- <span class="n">dataSource</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLStreamingMediaManagerDataSource.html">SDLStreamingMediaManagerDataSource</a></span><span class="o">&gt;</span> <span class="n">dataSource</span><span class="p">;</span></code></pre>
@@ -133,8 +129,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -152,8 +147,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLCarWindowRenderingType.html">SDLCarWindowRenderingType</a></span> <span class="n">carWindowRenderingType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLCarWindowRenderingType.html">SDLCarWindowRenderingType</a></span> <span class="n">carWindowRenderingType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -171,7 +165,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableForcedFramerateSync</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableForcedFramerateSync</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -189,8 +183,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">allowMultipleViewControllerOrientations</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">allowMultipleViewControllerOrientations</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLStreamingMediaManager.html b/docs/Classes/SDLStreamingMediaManager.html
index 5f3dd0701..35a10d2c5 100644
--- a/docs/Classes/SDLStreamingMediaManager.html
+++ b/docs/Classes/SDLStreamingMediaManager.html
@@ -21,20 +21,21 @@
<li><a href="#section-showVideoBackgroundDisplay">showVideoBackgroundDisplay</a></li>
<li><a href="#section--init">-init</a></li>
<li><a href="#section--initWithConnectionManager:configuration:">-initWithConnectionManager:configuration:</a></li>
+ <li><a href="#section--initWithConnectionManager:configuration:systemCapabilityManager:">-initWithConnectionManager:configuration:systemCapabilityManager:</a></li>
<li><a href="#section--startWithProtocol:">-startWithProtocol:</a></li>
- <li><a href="#section--startAudioWithProtocol:">-startAudioWithProtocol:</a></li>
- <li><a href="#section--startVideoWithProtocol:">-startVideoWithProtocol:</a></li>
<li><a href="#section--stop">-stop</a></li>
<li><a href="#section--stopAudio">-stopAudio</a></li>
<li><a href="#section--stopVideo">-stopVideo</a></li>
<li><a href="#section--sendVideoData:">-sendVideoData:</a></li>
<li><a href="#section--sendVideoData:presentationTimestamp:">-sendVideoData:presentationTimestamp:</a></li>
<li><a href="#section--sendAudioData:">-sendAudioData:</a></li>
+ <li><a href="#section--startAudioWithProtocol:">-startAudioWithProtocol:</a></li>
+ <li><a href="#section--startVideoWithProtocol:">-startVideoWithProtocol:</a></li>
</ul>
<h3>Overview</h3>
-<p>Manager to help control streaming media services.</p>
+<p>Manager to help control streaming (video and audio) media services.</p>
<section class="section task-group-section">
@@ -47,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouchManager.html">SDLTouchManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">touchManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTouchManager.html">SDLTouchManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">touchManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,8 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAudioStreamManager.html">SDLAudioStreamManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">audioManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAudioStreamManager.html">SDLAudioStreamManager</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">audioManager</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -84,8 +84,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">UIViewController</span> <span class="o">*</span><span class="n">rootViewController</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -103,8 +102,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">SDLFocusableItemLocatorType</span><span class="o">&gt;</span>
- <span class="n">focusableItemManager</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">SDLFocusableItemLocatorType</span><span class="o">&gt;</span> <span class="n">focusableItemManager</span><span class="p">;</span></code></pre>
@@ -124,8 +122,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isStreamingSupported</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">streamingSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isStreamingSupported</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">streamingSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -143,8 +141,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isVideoConnected</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">videoConnected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isVideoConnected</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">videoConnected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -162,8 +160,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isVideoEncrypted</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">videoEncrypted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isVideoEncrypted</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">videoEncrypted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -181,8 +179,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isAudioConnected</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">audioConnected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isAudioConnected</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">audioConnected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -200,8 +198,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isAudioEncrypted</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">audioEncrypted</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isAudioEncrypted</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">audioEncrypted</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -219,8 +217,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isVideoStreamingPaused</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">videoStreamingPaused</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isVideoStreamingPaused</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">videoStreamingPaused</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -238,7 +236,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGSize</span> <span class="n">screenSize</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">CGSize</span> <span class="n">screenSize</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -256,8 +254,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*</span><span class="n">videoFormat</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*</span><span class="n">videoFormat</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -275,8 +272,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">supportedFormats</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">supportedFormats</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -292,7 +288,7 @@
<p>The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.</p>
<div class="aside aside-warning">
<p class="aside-title">Warning</p>
- This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
+ This will only return a valid pixel buffer pool after the encoder has been initialized (when the video session has started).
@discussion Clients may call this once and retain the resulting pool, this call is cheap enough that it&rsquo;s OK to call it once per frame.
</div>
@@ -300,8 +296,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">CVPixelBufferPoolRef</span> <span class="n">pixelBufferPool</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">CVPixelBufferPoolRef</span> <span class="n">pixelBufferPool</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -321,8 +316,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Enums/SDLStreamingEncryptionFlag.html">SDLStreamingEncryptionFlag</a></span> <span class="n">requestedEncryptionType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Enums/SDLStreamingEncryptionFlag.html">SDLStreamingEncryptionFlag</a></span> <span class="n">requestedEncryptionType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -340,7 +334,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showVideoBackgroundDisplay</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">showVideoBackgroundDisplay</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -368,7 +362,7 @@
-initWithConnectionManager:configuration:
</h3>
- <p>Create a new streaming media manager for navigation and VPM apps with a specified configuration</p>
+ <p>Create a new streaming media manager for navigation and projection apps with a specified configuration.</p>
@@ -388,61 +382,50 @@
<dt>configuration</dt>
<dd><p>This session&rsquo;s configuration</p></dd>
</dl>
- <div>
- <h4>Return Value</h4>
- <p>A new streaming manager</p>
- </div>
- <h3 id="section--startWithProtocol:">
- -startWithProtocol:
+ <h3 id="section--initWithConnectionManager:configuration:systemCapabilityManager:">
+ -initWithConnectionManager:configuration:systemCapabilityManager:
</h3>
- <p>Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+ <p>Create a new streaming media manager for navigation and projection apps with a specified configuration.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">start</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
-
-
-
-
- <h3 id="section--startAudioWithProtocol:">
- -startAudioWithProtocol:
- </h3>
-
- <p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span>
+ <span class="nf">initWithConnectionManager</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">SDLConnectionManagerType</span><span class="o">&gt;</span><span class="p">)</span><span class="nv">connectionManager</span>
+ <span class="nf">configuration</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Classes/SDLConfiguration.html">SDLConfiguration</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">configuration</span>
+ <span class="nf">systemCapabilityManager</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLSystemCapabilityManager.html">SDLSystemCapabilityManager</a></span> <span class="o">*</span><span class="p">)</span><span class="nv">systemCapabilityManager</span><span class="p">;</span></code></pre>
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startAudioWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startAudio</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
-
-
+ <h4>Parameters</h4>
+ <dl>
+ <dt>connectionManager</dt>
+ <dd><p>The pass-through for RPCs</p></dd>
+ <dt>configuration</dt>
+ <dd><p>This session&rsquo;s configuration</p></dd>
+ <dt>systemCapabilityManager</dt>
+ <dd><p>The system capability manager object for reading window capabilities</p></dd>
+ </dl>
- <h3 id="section--startVideoWithProtocol:">
- -startVideoWithProtocol:
+ <h3 id="section--startWithProtocol:">
+ -startWithProtocol:
</h3>
- <p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+ <p>Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startVideoWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startVideo</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">start</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
@@ -587,4 +570,40 @@
<p>Whether or not the data was successfully sent.</p>
</div>
+ <h3 id="section--startAudioWithProtocol:">
+ -startAudioWithProtocol:
+ </h3>
+
+ <p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startAudioWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startAudio</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
+
+
+
+
+ <h3 id="section--startVideoWithProtocol:">
+ -startVideoWithProtocol:
+ </h3>
+
+ <p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href="../Classes/SDLManager.html">SDLManager</a></code>.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">startVideoWithProtocol</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n">SDLProtocol</span> <span class="o">*</span><span class="p">)</span><span class="nv">protocol</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">startVideo</span><span class="p">(</span><span class="n">with</span> <span class="nv">protocol</span><span class="p">:</span> <span class="kt">SDLProtocol</span><span class="p">)</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Classes/SDLStreamingVideoScaleManager.html b/docs/Classes/SDLStreamingVideoScaleManager.html
index 66e04dc5f..58a144874 100644
--- a/docs/Classes/SDLStreamingVideoScaleManager.html
+++ b/docs/Classes/SDLStreamingVideoScaleManager.html
@@ -30,7 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="kt">float</span> <span class="n">scale</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="kt">float</span> <span class="n">scale</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -48,7 +48,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGSize</span> <span class="n">displayViewportResolution</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGSize</span> <span class="n">displayViewportResolution</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -66,7 +66,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGRect</span> <span class="n">appViewportFrame</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">CGRect</span> <span class="n">appViewportFrame</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSubscribeButton.html b/docs/Classes/SDLSubscribeButton.html
index 8f763893e..404652315 100644
--- a/docs/Classes/SDLSubscribeButton.html
+++ b/docs/Classes/SDLSubscribeButton.html
@@ -135,8 +135,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler">SDLRPCButtonNotificationHandler</a></span> <span class="n">_Nonnull</span> <span class="n">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -155,7 +154,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSubscribeVehicleData.html b/docs/Classes/SDLSubscribeVehicleData.html
index f88d54d04..b2f2d2f64 100644
--- a/docs/Classes/SDLSubscribeVehicleData.html
+++ b/docs/Classes/SDLSubscribeVehicleData.html
@@ -382,7 +382,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -400,7 +400,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -418,7 +418,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -436,7 +436,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -454,8 +454,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -473,7 +472,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -491,8 +490,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -510,8 +508,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -529,7 +526,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -547,8 +544,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -566,7 +562,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -584,7 +580,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -602,8 +598,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -621,8 +616,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -640,8 +634,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -659,8 +652,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -678,8 +670,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -697,8 +688,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -716,8 +706,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -735,8 +724,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -754,8 +742,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -773,7 +760,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -791,8 +778,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -810,8 +796,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -829,8 +814,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -848,7 +832,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -866,8 +850,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -885,7 +868,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -903,8 +886,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSubscribeVehicleDataResponse.html b/docs/Classes/SDLSubscribeVehicleDataResponse.html
index efb804048..d6a48b4c2 100644
--- a/docs/Classes/SDLSubscribeVehicleDataResponse.html
+++ b/docs/Classes/SDLSubscribeVehicleDataResponse.html
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,7 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,7 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -115,8 +115,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -136,8 +135,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -157,8 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -178,8 +175,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -199,8 +195,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -220,7 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,8 +235,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -261,8 +255,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -282,8 +275,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -303,8 +295,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -324,8 +315,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -345,8 +335,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -366,8 +355,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -387,8 +375,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -408,8 +395,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -429,8 +415,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -450,8 +435,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -471,8 +455,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -492,8 +475,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -513,8 +495,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -534,8 +515,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -555,8 +535,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">clusterModes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">clusterModes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -576,7 +555,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -596,8 +575,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -617,8 +595,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -638,8 +615,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSyncMsgVersion.html b/docs/Classes/SDLSyncMsgVersion.html
index ac6fa8d55..6ef12b852 100644
--- a/docs/Classes/SDLSyncMsgVersion.html
+++ b/docs/Classes/SDLSyncMsgVersion.html
@@ -61,7 +61,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">majorVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">majorVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -81,7 +81,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minorVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">minorVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -101,8 +101,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">patchVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">patchVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSystemCapability.html b/docs/Classes/SDLSystemCapability.html
index 7000c1682..ce53290ae 100644
--- a/docs/Classes/SDLSystemCapability.html
+++ b/docs/Classes/SDLSystemCapability.html
@@ -233,8 +233,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span> <span class="n">_Nonnull</span> <span class="n">systemCapabilityType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span> <span class="n">_Nonnull</span> <span class="n">systemCapabilityType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -254,8 +253,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServicesCapabilities.html">SDLAppServicesCapabilities</a></span> <span class="o">*</span><span class="n">appServicesCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServicesCapabilities.html">SDLAppServicesCapabilities</a></span> <span class="o">*</span><span class="n">appServicesCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -275,8 +273,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLNavigationCapability.html">SDLNavigationCapability</a></span> <span class="o">*</span><span class="n">navigationCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLNavigationCapability.html">SDLNavigationCapability</a></span> <span class="o">*</span><span class="n">navigationCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -296,8 +293,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPhoneCapability.html">SDLPhoneCapability</a></span> <span class="o">*</span><span class="n">phoneCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPhoneCapability.html">SDLPhoneCapability</a></span> <span class="o">*</span><span class="n">phoneCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -317,8 +313,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVideoStreamingCapability.html">SDLVideoStreamingCapability</a></span> <span class="o">*</span><span class="n">videoStreamingCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVideoStreamingCapability.html">SDLVideoStreamingCapability</a></span> <span class="o">*</span><span class="n">videoStreamingCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -338,8 +333,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html">SDLRemoteControlCapabilities</a></span> <span class="o">*</span><span class="n">remoteControlCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html">SDLRemoteControlCapabilities</a></span> <span class="o">*</span><span class="n">remoteControlCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -359,8 +353,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSeatLocationCapability.html">SDLSeatLocationCapability</a></span> <span class="o">*</span><span class="n">seatLocationCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatLocationCapability.html">SDLSeatLocationCapability</a></span> <span class="o">*</span><span class="n">seatLocationCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -382,8 +375,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDisplayCapability.html">SDLDisplayCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDisplayCapability.html">SDLDisplayCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLSystemCapabilityManager.html b/docs/Classes/SDLSystemCapabilityManager.html
index a31d5d5e7..d820c8c8b 100644
--- a/docs/Classes/SDLSystemCapabilityManager.html
+++ b/docs/Classes/SDLSystemCapabilityManager.html
@@ -3,7 +3,6 @@
<h3>Section Contents</h3>
<ul>
- <li><a href="#section-supportsSubscriptions">supportsSubscriptions</a></li>
<li><a href="#section-displays">displays</a></li>
<li><a href="#section-displayCapabilities">displayCapabilities</a></li>
<li><a href="#section-hmiCapabilities">hmiCapabilities</a></li>
@@ -23,15 +22,18 @@
<li><a href="#section-remoteControlCapability">remoteControlCapability</a></li>
<li><a href="#section-seatLocationCapability">seatLocationCapability</a></li>
<li><a href="#section-defaultMainWindowCapability">defaultMainWindowCapability</a></li>
+ <li><a href="#section-supportsSubscriptions">supportsSubscriptions</a></li>
<li><a href="#section--init">-init</a></li>
<li><a href="#section--initWithConnectionManager:">-initWithConnectionManager:</a></li>
<li><a href="#section--start">-start</a></li>
<li><a href="#section--stop">-stop</a></li>
+ <li><a href="#section--windowCapabilityWithWindowID:">-windowCapabilityWithWindowID:</a></li>
+ <li><a href="#section--isCapabilitySupported:">-isCapabilitySupported:</a></li>
<li><a href="#section--updateCapabilityType:completionHandler:">-updateCapabilityType:completionHandler:</a></li>
<li><a href="#section--subscribeToCapabilityType:withBlock:">-subscribeToCapabilityType:withBlock:</a></li>
+ <li><a href="#section--subscribeToCapabilityType:withUpdateHandler:">-subscribeToCapabilityType:withUpdateHandler:</a></li>
<li><a href="#section--subscribeToCapabilityType:withObserver:selector:">-subscribeToCapabilityType:withObserver:selector:</a></li>
<li><a href="#section--unsubscribeFromCapabilityType:withObserver:">-unsubscribeFromCapabilityType:withObserver:</a></li>
- <li><a href="#section--windowCapabilityWithWindowID:">-windowCapabilityWithWindowID:</a></li>
</ul>
<h3>Overview</h3>
@@ -40,24 +42,6 @@
<section class="section task-group-section">
- <h3 id="section-supportsSubscriptions">
- supportsSubscriptions
- </h3>
-
- <p>YES if subscriptions are available on the connected head unit. If NO, calls to <code>subscribeToCapabilityType:withBlock</code> and <code>subscribeToCapabilityType:withObserver:selector</code> will fail.</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">supportsSubscriptions</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">supportsSubscriptions</span><span class="p">:</span> <span class="kt">Bool</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
-
-
-
-
<h3 id="section-displays">
displays
</h3>
@@ -74,8 +58,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDisplayCapability.html">SDLDisplayCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">displays</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLDisplayCapability.html">SDLDisplayCapability</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">displays</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -99,8 +82,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDisplayCapabilities.html">SDLDisplayCapabilities</a></span> <span class="o">*</span><span class="n">displayCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -124,8 +106,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLHMICapabilities.html">SDLHMICapabilities</a></span> <span class="o">*</span><span class="n">hmiCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLHMICapabilities.html">SDLHMICapabilities</a></span> <span class="o">*</span><span class="n">hmiCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -150,8 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -175,8 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -201,8 +180,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPresetBankCapabilities.html">SDLPresetBankCapabilities</a></span> <span class="o">*</span><span class="n">presetBankCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -226,8 +204,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities">SDLHMIZoneCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hmiZoneCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities">SDLHMIZoneCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hmiZoneCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -251,8 +228,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speechCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speechCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -276,8 +252,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech">SDLPrerecordedSpeech</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prerecordedSpeechCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech">SDLPrerecordedSpeech</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prerecordedSpeechCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -301,7 +276,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">vrCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">vrCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -325,8 +300,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioPassThruCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">audioPassThruCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -350,8 +324,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*</span><span class="n">pcmStreamCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAudioPassThruCapabilities.html">SDLAudioPassThruCapabilities</a></span> <span class="o">*</span><span class="n">pcmStreamCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -376,8 +349,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLAppServicesCapabilities.html">SDLAppServicesCapabilities</a></span> <span class="o">*</span><span class="n">appServicesCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLAppServicesCapabilities.html">SDLAppServicesCapabilities</a></span> <span class="o">*</span><span class="n">appServicesCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -402,8 +374,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLNavigationCapability.html">SDLNavigationCapability</a></span> <span class="o">*</span><span class="n">navigationCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLNavigationCapability.html">SDLNavigationCapability</a></span> <span class="o">*</span><span class="n">navigationCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -428,8 +399,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLPhoneCapability.html">SDLPhoneCapability</a></span> <span class="o">*</span><span class="n">phoneCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLPhoneCapability.html">SDLPhoneCapability</a></span> <span class="o">*</span><span class="n">phoneCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -454,8 +424,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVideoStreamingCapability.html">SDLVideoStreamingCapability</a></span> <span class="o">*</span><span class="n">videoStreamingCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVideoStreamingCapability.html">SDLVideoStreamingCapability</a></span> <span class="o">*</span><span class="n">videoStreamingCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -480,8 +449,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html">SDLRemoteControlCapabilities</a></span> <span class="o">*</span><span class="n">remoteControlCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRemoteControlCapabilities.html">SDLRemoteControlCapabilities</a></span> <span class="o">*</span><span class="n">remoteControlCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -506,8 +474,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSeatLocationCapability.html">SDLSeatLocationCapability</a></span> <span class="o">*</span><span class="n">seatLocationCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSeatLocationCapability.html">SDLSeatLocationCapability</a></span> <span class="o">*</span><span class="n">seatLocationCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -527,8 +494,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*</span><span class="n">defaultMainWindowCapability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*</span><span class="n">defaultMainWindowCapability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -537,6 +503,24 @@
+ <h3 id="section-supportsSubscriptions">
+ supportsSubscriptions
+ </h3>
+
+ <p>YES if subscriptions are available on the connected module and you will automatically be notified if the value changes on the module. If NO, calls to <code>subscribe</code> methods will subscribe to updates, but the module will not automatically notify you. You will need to call <code>updateWithCapabilityType:completionHandler:</code> to force an update if you need one (though this should be rare). This does not apply to the <code>DISPLAYS</code> capability type which you can always subscribe to.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">supportsSubscriptions</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">supportsSubscriptions</span><span class="p">:</span> <span class="kt">Bool</span> <span class="p">{</span> <span class="k">get</span> <span class="p">}</span></code></pre>
+
+
+
+
<h3 id="section--init">
-init
</h3>
@@ -617,11 +601,65 @@
+ <h3 id="section--windowCapabilityWithWindowID:">
+ -windowCapabilityWithWindowID:
+ </h3>
+
+ <p>Returns the window capability of one of your app&rsquo;s windows with the specified window ID that is on the primary display (i.e. the head unit itself). This is a convenience method to easily access capabilities of windows such as your apps&rsquo; widget windows.</p>
+
+<p>To get the capabilities of the main window on the main display (i.e. your app&rsquo;s primary app screen on the head unit itself).</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">windowCapabilityWithWindowID</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="nv">windowID</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">windowCapability</span><span class="p">(</span><span class="n">withWindowID</span> <span class="nv">windowID</span><span class="p">:</span> <span class="kt">UInt</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span><span class="p">?</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>windowID</dt>
+ <dd><p>The ID of the window from which to get capabilities
+@returns The window window capabilities of the window with the specified windowID, or nil if the window is not known or no window capabilities exist.</p></dd>
+ </dl>
+
+ <h3 id="section--isCapabilitySupported:">
+ -isCapabilitySupported:
+ </h3>
+
+ <p>Returns whether or not the capability type is supported on the module. You can use this to check if subscribing to the capability will work. If this returns NO, then the feature is not supported by the head unit. If YES, the feature is supported by the head unit. You can subscribe to the capability type to get more information about the capability&rsquo;s support and features on the connected module.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">BOOL</span><span class="p">)</span><span class="nf">isCapabilitySupported</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span><span class="p">)</span><span class="nv">type</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">isCapabilitySupported</span><span class="p">(</span><span class="nv">type</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Bool</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>type</dt>
+ <dd><p>The SystemCapabilityType that will be checked.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>Whether or not <code>type</code> is supported by the connected head unit.</p>
+ </div>
+
<h3 id="section--updateCapabilityType:completionHandler:">
-updateCapabilityType:completionHandler:
</h3>
- <p>Retrieves a capability type from the remote system. This function must be called in order to retrieve the values for <code><a href="../Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability">navigationCapability</a></code>, <code><a href="../Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability">phoneCapability</a></code>, <code><a href="../Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability">videoStreamingCapability</a></code>, <code><a href="../Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability">remoteControlCapability</a></code>, and <code><a href="../Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities">appServicesCapabilities</a></code>. If you do not call this method first, those values will be nil. After calling this method, assuming there is no error in the handler, you may retrieve the capability you requested from the manager within the handler.</p>
+ <p>This method has been superseded by the <code>subscribeToCapabilityType:</code> methods. You should use one of those methods instead unless you only want a value once (you don&rsquo;t want to keep a long-lasting observer) and it must be current (most capabilities do not need to be updated). If you have a separate subscription observer and are connected to a head unit that does not support subscriptions, when this method returns, it will also call all subscription callbacks that you&rsquo;ve set up with the new value if there is one. Therefore, you can use this method to force an update to all subscriptions of that particular type on head units that don&rsquo;t support subscriptions (<code>supportsSubscriptions == NO</code>).</p>
@@ -647,7 +685,13 @@
-subscribeToCapabilityType:withBlock:
</h3>
- <p>Subscribe to a particular capability type using a block callback</p>
+ <p>Subscribe to a particular capability type using a block callback.</p>
+
+<p>On v5.1.0+ systems (where <code>supportsSubscriptions == YES</code>):
+This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.</p>
+
+<p>On sub-v5.1.0 systems (where <code>supportsSubscriptions == NO</code>):
+The method will be called immediately with the current value and will <em>not</em> be automatically called every time the value is updated, unless the <code>type</code> is <code>DISPLAYS</code> which is supported on every version. If <code>updateCapabilityType:completionHandler</code> is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this <code><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></code>, then the value will be retrieved and returned.</p>
@@ -671,21 +715,69 @@
</dl>
<div>
<h4>Return Value</h4>
- <p>An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if subscriptions aren&rsquo;t available on this head unit</p>
+ <p>An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can&rsquo;t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS).</p>
+ </div>
+
+ <h3 id="section--subscribeToCapabilityType:withUpdateHandler:">
+ -subscribeToCapabilityType:withUpdateHandler:
+ </h3>
+
+ <p>Subscribe to a particular capability type using a handler callback.</p>
+
+<p>On v5.1.0+ systems (where <code>supportsSubscriptions == YES</code>):
+This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.</p>
+
+<p>Note that when the cached value is returned, the <code>subscribed</code> flag on the handler will be false until the subscription completes successfully and a new value is retrieved.</p>
+
+<p>On sub-v5.1.0 systems (where <code>supportsSubscriptions == NO</code>):
+The method will be called immediately with the current value and will <em>not</em> be automatically called every time the value is updated, unless the <code>type</code> is <code>DISPLAYS</code> which is supported on every version. If <code>updateCapabilityType:completionHandler</code> is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this <code><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></code>, then the value will be retrieved and returned.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n">id</span><span class="o">&lt;</span><span class="n">NSObject</span><span class="o">&gt;</span><span class="p">)</span>
+ <span class="nf">subscribeToCapabilityType</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span><span class="p">)</span><span class="nv">type</span>
+ <span class="nf">withUpdateHandler</span><span class="p">:</span>
+ <span class="p">(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler">SDLCapabilityUpdateWithErrorHandler</a></span><span class="p">)</span><span class="nv">handler</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">subscribe</span><span class="p">(</span><span class="n">capabilityType</span> <span class="nv">type</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></span><span class="p">,</span> <span class="n">updateHandler</span> <span class="nv">handler</span><span class="p">:</span> <span class="kd">@escaping</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler">SDLCapabilityUpdateWithErrorHandler</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">NSObjectProtocol</span><span class="p">?</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>type</dt>
+ <dd><p>The type of capability to subscribe to</p></dd>
+ <dt>handler</dt>
+ <dd><p>The block to be called when the capability is updated with an error if one occurs</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An object that can be used to unsubscribe the block using unsubscribeFromCapabilityType:withObserver: by passing it in the observer callback, or nil if the manager can&rsquo;t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS).</p>
</div>
<h3 id="section--subscribeToCapabilityType:withObserver:selector:">
-subscribeToCapabilityType:withObserver:selector:
</h3>
- <p>Subscribe to a particular capability type with a selector callback. The selector supports the following parameters:</p>
+ <p>Subscribe to a particular capability type with a selector callback.</p>
+
+<p>The selector supports the following parameters:</p>
<ol>
-<li>No parameters e.g. <code>- (void)phoneCapabilityUpdated;</code></li>
-<li>One <code>SDLSystemCapability *</code> parameter e.g. <code>- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability</code></li>
+<li><p>No parameters e.g. <code>- (void)phoneCapabilityUpdated;</code></p></li>
+<li><p>One <code>SDLSystemCapability *</code> parameter, e.g. <code>- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability</code></p></li>
+<li><p>Two parameters, one <code>SDLSystemCapability *</code> parameter, and one <code>NSError</code> parameter, e.g. <code>- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error</code></p></li>
+<li><p>Three parameters, one <code>SDLSystemCapability *</code> parameter, one <code>NSError</code> parameter, and one <code>BOOL</code> parameter e.g. <code>- (void)phoneCapabilityUpdated:(SDLSystemCapability *)capability error:(NSError *)error subscribed:(BOOL)subscribed</code></p></li>
</ol>
-<p>This method will be called immediately with the current value and called every time the value is updated on RPC v5.1.0+ systems (<code>supportsSubscriptions == YES</code>). If this method is called on a sub-v5.1.0 system (<code>supportsSubscriptions == NO</code>), the method will return <code>NO</code> and the selector will never be called.</p>
+<p>On v5.1.0+ systems (where <code>supportsSubscriptions == YES</code>):
+This method will be called immediately with the current value if a subscription already exists and will be called every time the value is updated.</p>
+
+<p>On sub-v5.1.0 systems (where <code>supportsSubscriptions == NO</code>):
+The method will be called immediately with the current value and will <em>not</em> be automatically called every time the value is updated, unless the <code>type</code> is <code>DISPLAYS</code> which is supported on every version. If <code>updateCapabilityType:completionHandler</code> is called and a new value is retrieved, this value will be updated then. If this is the first subscription of this <code><a href="../Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType">SDLSystemCapabilityType</a></code>, then the value will be retrieved and returned.</p>
@@ -711,14 +803,14 @@
</dl>
<div>
<h4>Return Value</h4>
- <p>Whether or not the subscription succeeded. <code>NO</code> if the connected system doesn&rsquo;t support capability subscriptions, or if the <code>selector</code> doesn&rsquo;t support the correct parameters (see above)</p>
+ <p>YES if the manager is attempting the subscription, or NO if the manager can&rsquo;t attempt the subscription for some reason (such as the app being in HMI_NONE and the type is not DISPLAYS), or the selector doesn&rsquo;t contain the correct number of parameters.</p>
</div>
<h3 id="section--unsubscribeFromCapabilityType:withObserver:">
-unsubscribeFromCapabilityType:withObserver:
</h3>
- <p>Unsubscribe from a particular capability type. If it was subscribed with a block, the return value should be passed to the <code>observer</code> to unsubscribe the block. If it was subscribed with a selector, the <code>observer</code> object should be passed to unsubscribe the object selector.</p>
+ <p>Unsubscribe from a particular capability type. If it was subscribed with a block / handler, the return value should be passed to the <code>observer</code> to unsubscribe the block. If it was subscribed with a selector, the <code>observer</code> object (on which the selector exists and is called) should be passed to unsubscribe the object selector.</p>
@@ -740,29 +832,4 @@
<dd><p>The object that will be unsubscribed. If a block was subscribed, the return value should be passed. If a selector was subscribed, the observer object should be passed.</p></dd>
</dl>
- <h3 id="section--windowCapabilityWithWindowID:">
- -windowCapabilityWithWindowID:
- </h3>
-
- <p>Returns the window capability object of the primary display with the specified window ID. This is a convenient method to easily access capabilities of windows for instance widget windows of the main display.</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span> <span class="o">*</span><span class="p">)</span><span class="nf">windowCapabilityWithWindowID</span><span class="p">:</span>
- <span class="p">(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="nv">windowID</span><span class="p">;</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">func</span> <span class="nf">windowCapability</span><span class="p">(</span><span class="n">withWindowID</span> <span class="nv">windowID</span><span class="p">:</span> <span class="kt">UInt</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/SDLWindowCapability.html">SDLWindowCapability</a></span><span class="p">?</span></code></pre>
-
-
-
- <h4>Parameters</h4>
- <dl>
- <dt>windowID</dt>
- <dd><p>The ID of the window to get capabilities
-@returns The window capability object representing the window capabilities of the window with the specified window ID or nil if the window is not known or no window capabilities exist.</p></dd>
- </dl>
-
</section>
diff --git a/docs/Classes/SDLSystemRequest.html b/docs/Classes/SDLSystemRequest.html
index dc1c0ab0f..8f86d531e 100644
--- a/docs/Classes/SDLSystemRequest.html
+++ b/docs/Classes/SDLSystemRequest.html
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span> <span class="n">_Nonnull</span> <span class="n">requestType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType">SDLRequestType</a></span> <span class="n">_Nonnull</span> <span class="n">requestType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,7 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">requestSubType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">requestSubType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -130,7 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fileName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">fileName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTTSChunk.html b/docs/Classes/SDLTTSChunk.html
index 49e87d098..0b7d9a233 100644
--- a/docs/Classes/SDLTTSChunk.html
+++ b/docs/Classes/SDLTTSChunk.html
@@ -229,7 +229,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -249,7 +249,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities">SDLSpeechCapabilities</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTemperature.html b/docs/Classes/SDLTemperature.html
index 48f5932b2..f054b5c76 100644
--- a/docs/Classes/SDLTemperature.html
+++ b/docs/Classes/SDLTemperature.html
@@ -111,7 +111,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span> <span class="n">_Nonnull</span> <span class="n">unit</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit">SDLTemperatureUnit</a></span> <span class="n">_Nonnull</span> <span class="n">unit</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,7 +131,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">value</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">value</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTemplateColorScheme.html b/docs/Classes/SDLTemplateColorScheme.html
index d884c5fcc..b48650704 100644
--- a/docs/Classes/SDLTemplateColorScheme.html
+++ b/docs/Classes/SDLTemplateColorScheme.html
@@ -92,7 +92,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">primaryColor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">primaryColor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,7 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">secondaryColor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">secondaryColor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -128,7 +128,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLRGBColor.html">SDLRGBColor</a></span> <span class="o">*</span><span class="n">backgroundColor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTemplateConfiguration.html b/docs/Classes/SDLTemplateConfiguration.html
index 65aed20ac..7f258a053 100644
--- a/docs/Classes/SDLTemplateConfiguration.html
+++ b/docs/Classes/SDLTemplateConfiguration.html
@@ -105,7 +105,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">template</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">template</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -123,8 +123,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">dayColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -142,8 +141,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemplateColorScheme.html">SDLTemplateColorScheme</a></span> <span class="o">*</span><span class="n">nightColorScheme</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTextField.html b/docs/Classes/SDLTextField.html
index dc976cc43..aeb66601b 100644
--- a/docs/Classes/SDLTextField.html
+++ b/docs/Classes/SDLTextField.html
@@ -7,6 +7,7 @@
<li><a href="#section-characterSet">characterSet</a></li>
<li><a href="#section-width">width</a></li>
<li><a href="#section-rows">rows</a></li>
+ <li><a href="#section--initWithName:characterSet:width:rows:">-initWithName:characterSet:width:rows:</a></li>
</ul>
<h3>Overview</h3>
@@ -33,7 +34,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName">SDLTextFieldName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName">SDLTextFieldName</a></span> <span class="n">_Nonnull</span> <span class="n">name</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -58,7 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet">SDLCharacterSet</a></span> <span class="n">_Nonnull</span> <span class="n">characterSet</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet">SDLCharacterSet</a></span> <span class="n">_Nonnull</span> <span class="n">characterSet</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -78,7 +79,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">width</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">width</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -98,7 +99,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rows</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rows</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -107,4 +108,36 @@
+ <h3 id="section--initWithName:characterSet:width:rows:">
+ -initWithName:characterSet:width:rows:
+ </h3>
+
+ <p>Convenience initalizer for the TextField RPC struct</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nonnull</span> <span class="n">instancetype</span><span class="p">)</span><span class="nf">initWithName</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName">SDLTextFieldName</a></span><span class="p">)</span><span class="nv">name</span>
+ <span class="nf">characterSet</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet">SDLCharacterSet</a></span><span class="p">)</span><span class="nv">characterSet</span>
+ <span class="nf">width</span><span class="p">:(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="nv">width</span>
+ <span class="nf">rows</span><span class="p">:(</span><span class="n">NSUInteger</span><span class="p">)</span><span class="nv">rows</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="nf">init</span><span class="p">(</span><span class="nv">name</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName">SDLTextFieldName</a></span><span class="p">,</span> <span class="nv">characterSet</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet">SDLCharacterSet</a></span><span class="p">,</span> <span class="nv">width</span><span class="p">:</span> <span class="kt">UInt</span><span class="p">,</span> <span class="nv">rows</span><span class="p">:</span> <span class="kt">UInt</span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>name</dt>
+ <dd><p>The name identifying this text field</p></dd>
+ <dt>characterSet</dt>
+ <dd><p>The character set of this text field</p></dd>
+ <dt>width</dt>
+ <dd><p>The number of characters per row allowed in this text field</p></dd>
+ <dt>rows</dt>
+ <dd><p>The number of rows allowed in this text field</p></dd>
+ </dl>
+
</section>
diff --git a/docs/Classes/SDLTireStatus.html b/docs/Classes/SDLTireStatus.html
index 0c5c1f882..7f73d02ff 100644
--- a/docs/Classes/SDLTireStatus.html
+++ b/docs/Classes/SDLTireStatus.html
@@ -29,8 +29,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus">SDLWarningLightStatus</a></span> <span class="n">_Nonnull</span> <span class="n">pressureTelltale</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus">SDLWarningLightStatus</a></span> <span class="n">_Nonnull</span> <span class="n">pressureTelltale</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -50,7 +49,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">leftFront</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">leftFront</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -70,8 +69,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rightFront</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rightFront</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -91,7 +89,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">leftRear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">leftRear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -111,7 +109,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rightRear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">rightRear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,8 +129,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">innerLeftRear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">innerLeftRear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -152,8 +149,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">innerRightRear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLSingleTireStatus.html">SDLSingleTireStatus</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">innerRightRear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTouch.html b/docs/Classes/SDLTouch.html
index bce3f080a..239d26845 100644
--- a/docs/Classes/SDLTouch.html
+++ b/docs/Classes/SDLTouch.html
@@ -57,7 +57,7 @@ Instance of SDLTouch.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSInteger</span> <span class="n">identifier</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSInteger</span> <span class="n">identifier</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -76,7 +76,7 @@ Instance of SDLTouch.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGPoint</span> <span class="n">location</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">CGPoint</span> <span class="n">location</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,7 +95,7 @@ Instance of SDLTouch.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">timeStamp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">timeStamp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -114,7 +114,7 @@ Instance of SDLTouch.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isFirstFinger</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isFirstFinger</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -133,7 +133,7 @@ Instance of SDLTouch.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isSecondFinger</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">isSecondFinger</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTouchCoord.html b/docs/Classes/SDLTouchCoord.html
index 84ae1fced..9d22dcb6d 100644
--- a/docs/Classes/SDLTouchCoord.html
+++ b/docs/Classes/SDLTouchCoord.html
@@ -24,7 +24,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">x</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">x</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -44,7 +44,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">y</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">y</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTouchEvent.html b/docs/Classes/SDLTouchEvent.html
index 42b7fe38c..bda2ce7f3 100644
--- a/docs/Classes/SDLTouchEvent.html
+++ b/docs/Classes/SDLTouchEvent.html
@@ -29,7 +29,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">touchEventId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">touchEventId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -55,12 +55,11 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timeStamp</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSNumber</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">timeStamp</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">timeStamp</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span> <span class="o">&amp;</span> <span class="kt"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
+ <pre class="highlight swift"><code><span class="k">var</span> <span class="nv">timeStamp</span><span class="p">:</span> <span class="p">[</span><span class="kt">NSNumber</span><span class="p">]</span> <span class="p">{</span> <span class="k">get</span> <span class="k">set</span> <span class="p">}</span></code></pre>
@@ -76,8 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTouchCoord.html">SDLTouchCoord</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">coord</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTouchCoord.html">SDLTouchCoord</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">coord</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTouchEventCapabilities.html b/docs/Classes/SDLTouchEventCapabilities.html
index e12f55c7b..81ef83e22 100644
--- a/docs/Classes/SDLTouchEventCapabilities.html
+++ b/docs/Classes/SDLTouchEventCapabilities.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">pressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -42,8 +41,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">multiTouchAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">multiTouchAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -61,8 +59,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">doublePressAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">doublePressAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLTouchManager.html b/docs/Classes/SDLTouchManager.html
index 092e3a973..8ca1f3626 100644
--- a/docs/Classes/SDLTouchManager.html
+++ b/docs/Classes/SDLTouchManager.html
@@ -33,8 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLTouchManagerDelegate.html">SDLTouchManagerDelegate</a></span><span class="o">&gt;</span>
- <span class="n">touchEventDelegate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">weak</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">id</span><span class="o">&lt;</span><span class="n"><a href="../Protocols/SDLTouchManagerDelegate.html">SDLTouchManagerDelegate</a></span><span class="o">&gt;</span> <span class="n">touchEventDelegate</span><span class="p">;</span></code></pre>
@@ -44,14 +43,12 @@
touchEventHandler
</h3>
- <p>@abstract
- Returns all OnTouchEvent notifications as SDLTouch and SDLTouchType objects.</p>
+ <p>Returns all OnTouchEvent notifications as SDLTouch and SDLTouchType objects.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler">SDLTouchEventHandler</a></span> <span class="n">touchEventHandler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler">SDLTouchEventHandler</a></span> <span class="n">touchEventHandler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -65,16 +62,13 @@
</h3>
<p>Distance between two taps on the screen, in the head unit&rsquo;s coordinate system, used for registering double-tap callbacks.</p>
-<div class="aside aside-note">
- <p class="aside-title">Note</p>
- Defaults to 50 px.
-</div>
+<p>Defaults to 50 px.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">tapDistanceThreshold</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">tapDistanceThreshold</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -88,16 +82,13 @@
</h3>
<p>Minimum distance for a pan gesture in the head unit&rsquo;s coordinate system, used for registering pan callbacks.</p>
-<div class="aside aside-note">
- <p class="aside-title">Note</p>
- Defaults to 8 px.
-</div>
+<p>Defaults to 8 px.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">panDistanceThreshold</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">panDistanceThreshold</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,15 +101,14 @@
tapTimeThreshold
</h3>
- <p>@abstract
- Time (in seconds) between tap events to register a double-tap callback.
-@remark
- Default is 0.4 seconds.</p>
+ <p>Time (in seconds) between tap events to register a double-tap callback. This must be greater than 0.0.</p>
+
+<p>Default is 0.4 seconds.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">tapTimeThreshold</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">tapTimeThreshold</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,16 +121,14 @@
movementTimeThreshold
</h3>
- <p>@abstract
- Time (in seconds) between movement events to register panning or pinching
- callbacks.
-@remark
- Default is 0.05 seconds.</p>
+ <p>Time (in seconds) between movement events to register panning or pinching callbacks.</p>
+
+<p>Default is 0.05 seconds.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">movementTimeThreshold</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">CGFloat</span> <span class="n">movementTimeThreshold</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -158,7 +146,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableSyncedPanning</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">enableSyncedPanning</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -171,17 +159,15 @@
touchEnabled
</h3>
- <p>@abstract
- Boolean denoting whether or not the touch manager should deliver touch event
- callbacks.
-@remark
- Default is true.</p>
+ <p>Boolean denoting whether or not the touch manager should deliver touch event callbacks.</p>
+
+<p>Default is true.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">getter</span><span class="o">=</span><span class="n">isTouchEnabled</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">touchEnabled</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isTouchEnabled</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">touchEnabled</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -194,10 +180,9 @@
-cancelPendingTouches
</h3>
- <p>@abstract
- Cancels pending touch event timers that may be in progress.
-@remark
- Currently only impacts the timer used to register single taps.</p>
+ <p>Cancels pending touch event timers that may be in progress.</p>
+
+<p>Currently only impacts the timer used to register single taps.</p>
diff --git a/docs/Classes/SDLTurn.html b/docs/Classes/SDLTurn.html
index 94f57d50d..fdbddbde3 100644
--- a/docs/Classes/SDLTurn.html
+++ b/docs/Classes/SDLTurn.html
@@ -54,7 +54,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">navigationText</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -72,7 +72,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">turnIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">turnIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLUnpublishAppService.html b/docs/Classes/SDLUnpublishAppService.html
index 2a3668bad..2a44c58ff 100644
--- a/docs/Classes/SDLUnpublishAppService.html
+++ b/docs/Classes/SDLUnpublishAppService.html
@@ -47,7 +47,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">serviceID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLUnsubscribeButton.html b/docs/Classes/SDLUnsubscribeButton.html
index dfe8ef708..368186f98 100644
--- a/docs/Classes/SDLUnsubscribeButton.html
+++ b/docs/Classes/SDLUnsubscribeButton.html
@@ -61,7 +61,7 @@ See SDLSubscribeButton</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName">SDLButtonName</a></span> <span class="n">_Nonnull</span> <span class="n">buttonName</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLUnsubscribeVehicleData.html b/docs/Classes/SDLUnsubscribeVehicleData.html
index 22f90d1ad..56c32ebce 100644
--- a/docs/Classes/SDLUnsubscribeVehicleData.html
+++ b/docs/Classes/SDLUnsubscribeVehicleData.html
@@ -381,7 +381,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -399,7 +399,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -417,7 +417,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -435,7 +435,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -453,8 +453,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -472,7 +471,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -490,8 +489,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -509,8 +507,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -528,7 +525,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -546,8 +543,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -565,7 +561,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -583,7 +579,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -601,8 +597,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -620,8 +615,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -639,8 +633,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -658,8 +651,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -677,8 +669,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -696,8 +687,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -715,8 +705,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -734,8 +723,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -753,8 +741,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -772,7 +759,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -790,8 +777,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -809,8 +795,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -828,8 +813,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">clusterModeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -847,7 +831,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -865,8 +849,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -884,7 +867,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -902,8 +885,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
index c28752ae6..ca32631db 100644
--- a/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
+++ b/docs/Classes/SDLUnsubscribeVehicleDataResponse.html
@@ -55,7 +55,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">gps</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -75,7 +75,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">speed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,7 +95,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">rpm</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -115,8 +115,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -136,8 +135,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelLevel_State</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -157,8 +155,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">fuelRange</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -178,8 +175,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">instantFuelConsumption</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -199,8 +195,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">externalTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -220,7 +215,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">prndl</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -240,8 +235,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">tirePressure</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -261,8 +255,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">odometer</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -282,8 +275,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">beltStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -303,8 +295,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">bodyInformation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -324,8 +315,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">deviceStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -345,8 +335,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">driverBraking</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -366,8 +355,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">wiperStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -387,8 +375,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">headLampStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -408,8 +395,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineOilLife</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -429,8 +415,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">engineTorque</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -450,8 +435,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">accPedalPosition</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -471,8 +455,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">steeringWheelAngle</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -492,8 +475,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">eCallInfo</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -513,8 +495,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">airbagStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -534,8 +515,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">emergencyEvent</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -555,8 +535,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">clusterModes</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">clusterModes</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -576,7 +555,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">myKey</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -596,8 +575,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">electronicParkBrakeStatus</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -617,8 +595,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">turnSignal</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -638,8 +615,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLVehicleDataResult.html">SDLVehicleDataResult</a></span> <span class="o">*</span><span class="n">cloudAppVehicleID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLUpdateTurnList.html b/docs/Classes/SDLUpdateTurnList.html
index d16da92d7..e98cc7a63 100644
--- a/docs/Classes/SDLUpdateTurnList.html
+++ b/docs/Classes/SDLUpdateTurnList.html
@@ -56,7 +56,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTurn.html">SDLTurn</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">turnList</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTurn.html">SDLTurn</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">turnList</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,8 +74,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButton.html">SDLSoftButton</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtons</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVRHelpItem.html b/docs/Classes/SDLVRHelpItem.html
index 907775e12..acbf941e7 100644
--- a/docs/Classes/SDLVRHelpItem.html
+++ b/docs/Classes/SDLVRHelpItem.html
@@ -90,7 +90,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">text</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,7 +110,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">image</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -130,7 +130,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">position</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">position</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVehicleDataResult.html b/docs/Classes/SDLVehicleDataResult.html
index e0706fa0f..c5062b4fc 100644
--- a/docs/Classes/SDLVehicleDataResult.html
+++ b/docs/Classes/SDLVehicleDataResult.html
@@ -79,7 +79,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">_Nonnull</span> <span class="n">dataType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType">SDLVehicleDataType</a></span> <span class="n">_Nonnull</span> <span class="n">dataType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -99,7 +99,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">customOEMDataType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">customOEMDataType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -117,8 +117,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode">SDLVehicleDataResultCode</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode">SDLVehicleDataResultCode</a></span> <span class="n">_Nonnull</span> <span class="n">resultCode</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVehicleType.html b/docs/Classes/SDLVehicleType.html
index ec7846fd5..84f72b82c 100644
--- a/docs/Classes/SDLVehicleType.html
+++ b/docs/Classes/SDLVehicleType.html
@@ -30,7 +30,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">make</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">make</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -52,7 +52,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">model</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">model</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,7 +74,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">modelYear</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">modelYear</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -96,7 +96,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">trim</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">trim</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVersion.html b/docs/Classes/SDLVersion.html
index f40bb2386..f1c3af9b2 100644
--- a/docs/Classes/SDLVersion.html
+++ b/docs/Classes/SDLVersion.html
@@ -38,7 +38,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">major</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">major</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -56,7 +56,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">minor</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">minor</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,7 +74,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">assign</span><span class="p">,</span> <span class="n">readwrite</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">patch</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSUInteger</span> <span class="n">patch</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -92,7 +92,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">stringVersion</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">stringVersion</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVideoStreamingCapability.html b/docs/Classes/SDLVideoStreamingCapability.html
index 6ae4cd8f6..52ae2f525 100644
--- a/docs/Classes/SDLVideoStreamingCapability.html
+++ b/docs/Classes/SDLVideoStreamingCapability.html
@@ -118,8 +118,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">preferredResolution</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImageResolution.html">SDLImageResolution</a></span> <span class="o">*</span><span class="n">preferredResolution</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -139,7 +138,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxBitrate</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxBitrate</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -159,8 +158,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">supportedFormats</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLVideoStreamingFormat.html">SDLVideoStreamingFormat</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">supportedFormats</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -180,8 +178,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hapticSpatialDataSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">hapticSpatialDataSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -202,8 +199,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">diagonalScreenSize</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">diagonalScreenSize</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -224,8 +220,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pixelPerInch</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">pixelPerInch</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -246,7 +241,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">scale</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">scale</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVideoStreamingFormat.html b/docs/Classes/SDLVideoStreamingFormat.html
index b5b56e158..fb01f1d5c 100644
--- a/docs/Classes/SDLVideoStreamingFormat.html
+++ b/docs/Classes/SDLVideoStreamingFormat.html
@@ -25,8 +25,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol">SDLVideoStreamingProtocol</a></span> <span class="n">_Nonnull</span> <span class="n">protocol</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol">SDLVideoStreamingProtocol</a></span> <span class="n">_Nonnull</span> <span class="n">protocol</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -46,7 +45,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec">SDLVideoStreamingCodec</a></span> <span class="n">_Nonnull</span> <span class="n">codec</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec">SDLVideoStreamingCodec</a></span> <span class="n">_Nonnull</span> <span class="n">codec</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLVoiceCommand.html b/docs/Classes/SDLVoiceCommand.html
index 95bffce60..4b3d3236b 100644
--- a/docs/Classes/SDLVoiceCommand.html
+++ b/docs/Classes/SDLVoiceCommand.html
@@ -23,8 +23,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceCommands</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">voiceCommands</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -42,8 +41,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler">SDLVoiceCommandSelectionHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler">SDLVoiceCommandSelectionHandler</a></span> <span class="n">handler</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWeatherAlert.html b/docs/Classes/SDLWeatherAlert.html
index 5f1e37d7c..73136d50f 100644
--- a/docs/Classes/SDLWeatherAlert.html
+++ b/docs/Classes/SDLWeatherAlert.html
@@ -73,7 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">title</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">title</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -93,7 +93,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">summary</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">summary</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -113,7 +113,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">expires</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">expires</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -133,7 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">regions</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">regions</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -153,7 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">severity</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">severity</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -173,7 +173,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">timeIssued</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">timeIssued</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWeatherData.html b/docs/Classes/SDLWeatherData.html
index 1981f5cdb..cb151406c 100644
--- a/docs/Classes/SDLWeatherData.html
+++ b/docs/Classes/SDLWeatherData.html
@@ -139,8 +139,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">currentTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">currentTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -160,8 +159,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">temperatureHigh</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">temperatureHigh</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -181,8 +179,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">temperatureLow</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">temperatureLow</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -202,8 +199,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperature</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperature</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -223,8 +219,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperatureHigh</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperatureHigh</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -244,8 +239,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperatureLow</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLTemperature.html">SDLTemperature</a></span> <span class="o">*</span><span class="n">apparentTemperatureLow</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -265,7 +259,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">weatherSummary</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">weatherSummary</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -285,7 +279,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">time</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLDateTime.html">SDLDateTime</a></span> <span class="o">*</span><span class="n">time</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -305,7 +299,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">humidity</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">humidity</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -325,8 +319,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudCover</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">cloudCover</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -346,7 +339,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">moonPhase</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">moonPhase</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -366,7 +359,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windBearing</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windBearing</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -386,7 +379,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windGust</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windGust</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -406,7 +399,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windSpeed</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windSpeed</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -426,8 +419,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nearestStormBearing</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nearestStormBearing</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -447,8 +439,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nearestStormDistance</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">nearestStormDistance</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -468,8 +459,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipAccumulation</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipAccumulation</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -489,8 +479,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipIntensity</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipIntensity</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -510,8 +499,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipProbability</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">precipProbability</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -531,7 +519,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">precipType</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">precipType</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -551,8 +539,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">visibility</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLFloat">SDLFloat</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">visibility</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -572,7 +559,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">weatherIcon</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLImage.html">SDLImage</a></span> <span class="o">*</span><span class="n">weatherIcon</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWeatherServiceData.html b/docs/Classes/SDLWeatherServiceData.html
index 2076282d0..62be8afd0 100644
--- a/docs/Classes/SDLWeatherServiceData.html
+++ b/docs/Classes/SDLWeatherServiceData.html
@@ -100,7 +100,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">location</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLLocationDetails.html">SDLLocationDetails</a></span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">location</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -120,8 +120,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*</span><span class="n">currentForecast</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*</span><span class="n">currentForecast</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -141,8 +140,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">minuteForecast</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">minuteForecast</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -162,8 +160,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">hourlyForecast</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">hourlyForecast</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -183,8 +180,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">multidayForecast</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherData.html">SDLWeatherData</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">multidayForecast</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -204,8 +200,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherAlert.html">SDLWeatherAlert</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">alerts</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLWeatherAlert.html">SDLWeatherAlert</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">alerts</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWeatherServiceManifest.html b/docs/Classes/SDLWeatherServiceManifest.html
index 93c8c83e7..8af975252 100644
--- a/docs/Classes/SDLWeatherServiceManifest.html
+++ b/docs/Classes/SDLWeatherServiceManifest.html
@@ -68,8 +68,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">currentForecastSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">currentForecastSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -89,8 +88,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxMultidayForecastAmount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxMultidayForecastAmount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -110,8 +108,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxHourlyForecastAmount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxHourlyForecastAmount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -131,8 +128,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxMinutelyForecastAmount</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">maxMinutelyForecastAmount</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -152,8 +148,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">weatherForLocationSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLBool">SDLBool</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">weatherForLocationSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWindowCapability.html b/docs/Classes/SDLWindowCapability.html
index 755b668ba..dfd052462 100644
--- a/docs/Classes/SDLWindowCapability.html
+++ b/docs/Classes/SDLWindowCapability.html
@@ -33,7 +33,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLUInt">SDLUInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">windowID</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -53,8 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTextField.html">SDLTextField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">textFields</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLTextField.html">SDLTextField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">textFields</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -74,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLImageField.html">SDLImageField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">imageFields</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLImageField.html">SDLImageField</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">imageFields</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -95,8 +93,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">imageTypeSupported</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType">SDLImageType</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">imageTypeSupported</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -116,8 +113,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">templatesAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n">NSString</span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">templatesAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -137,8 +133,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">numCustomPresetsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">numCustomPresetsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -158,8 +153,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLButtonCapabilities.html">SDLButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">buttonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -179,8 +173,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Classes/SDLSoftButtonCapabilities.html">SDLSoftButtonCapabilities</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">softButtonCapabilities</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -200,8 +193,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span>
- <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">menuLayoutsAvailable</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nullable</span><span class="p">)</span> <span class="n">NSArray</span><span class="o">&lt;</span><span class="n"><a href="../Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout">SDLMenuLayout</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">menuLayoutsAvailable</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Classes/SDLWindowTypeCapabilities.html b/docs/Classes/SDLWindowTypeCapabilities.html
index 6e8ab9297..9b1ba9f01 100644
--- a/docs/Classes/SDLWindowTypeCapabilities.html
+++ b/docs/Classes/SDLWindowTypeCapabilities.html
@@ -53,7 +53,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType">SDLWindowType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType">SDLWindowType</a></span> <span class="n">_Nonnull</span> <span class="n">type</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
@@ -73,8 +73,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">strong</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maximumNumberOfWindows</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">strong</span><span class="p">)</span> <span class="n">NSNumber</span><span class="o">&lt;</span><span class="n"><a href="../Protocols.html#/c:objc(pl)SDLInt">SDLInt</a></span><span class="o">&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">maximumNumberOfWindows</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Constants.html b/docs/Constants.html
index 732ee7565..ec0037d77 100644
--- a/docs/Constants.html
+++ b/docs/Constants.html
@@ -38,7 +38,6 @@
<li><a href="#section-SDLAppServiceTypeMedia">SDLAppServiceTypeMedia</a></li>
<li><a href="#section-SDLAppServiceTypeWeather">SDLAppServiceTypeWeather</a></li>
<li><a href="#section-SDLAppServiceTypeNavigation">SDLAppServiceTypeNavigation</a></li>
- <li><a href="#section-SDLErrorDomainAudioStreamManager">SDLErrorDomainAudioStreamManager</a></li>
<li><a href="#section-SDLAudioStreamingIndicatorPlayPause">SDLAudioStreamingIndicatorPlayPause</a></li>
<li><a href="#section-SDLAudioStreamingIndicatorPlay">SDLAudioStreamingIndicatorPlay</a></li>
<li><a href="#section-SDLAudioStreamingIndicatorPause">SDLAudioStreamingIndicatorPause</a></li>
@@ -419,10 +418,14 @@
<li><a href="#section-SDLTransportDidDisconnect">SDLTransportDidDisconnect</a></li>
<li><a href="#section-SDLTransportDidConnect">SDLTransportDidConnect</a></li>
<li><a href="#section-SDLTransportConnectError">SDLTransportConnectError</a></li>
+ <li><a href="#section-SDLRPCServiceDidDisconnect">SDLRPCServiceDidDisconnect</a></li>
+ <li><a href="#section-SDLRPCServiceDidConnect">SDLRPCServiceDidConnect</a></li>
+ <li><a href="#section-SDLRPCServiceConnectionDidError">SDLRPCServiceConnectionDidError</a></li>
<li><a href="#section-SDLDidReceiveError">SDLDidReceiveError</a></li>
<li><a href="#section-SDLDidReceiveLockScreenIcon">SDLDidReceiveLockScreenIcon</a></li>
<li><a href="#section-SDLDidBecomeReady">SDLDidBecomeReady</a></li>
<li><a href="#section-SDLDidUpdateProjectionView">SDLDidUpdateProjectionView</a></li>
+ <li><a href="#section-SDLDidChangeLockScreenStatusNotification">SDLDidChangeLockScreenStatusNotification</a></li>
<li><a href="#section-SDLDidReceiveAddCommandResponse">SDLDidReceiveAddCommandResponse</a></li>
<li><a href="#section-SDLDidReceiveAddSubMenuResponse">SDLDidReceiveAddSubMenuResponse</a></li>
<li><a href="#section-SDLDidReceiveAlertResponse">SDLDidReceiveAlertResponse</a></li>
@@ -480,6 +483,7 @@
<li><a href="#section-SDLDidReceiveSubscribeVehicleDataResponse">SDLDidReceiveSubscribeVehicleDataResponse</a></li>
<li><a href="#section-SDLDidReceiveSubscribeWaypointsResponse">SDLDidReceiveSubscribeWaypointsResponse</a></li>
<li><a href="#section-SDLDidReceiveSyncPDataResponse">SDLDidReceiveSyncPDataResponse</a></li>
+ <li><a href="#section-SDLDidReceiveSystemRequestResponse">SDLDidReceiveSystemRequestResponse</a></li>
<li><a href="#section-SDLDidReceiveUpdateTurnListResponse">SDLDidReceiveUpdateTurnListResponse</a></li>
<li><a href="#section-SDLDidReceiveUnpublishAppServiceResponse">SDLDidReceiveUnpublishAppServiceResponse</a></li>
<li><a href="#section-SDLDidReceiveUnregisterAppInterfaceResponse">SDLDidReceiveUnregisterAppInterfaceResponse</a></li>
@@ -561,11 +565,11 @@
<li><a href="#section-SDLDidReceiveInteriorVehicleDataNotification">SDLDidReceiveInteriorVehicleDataNotification</a></li>
<li><a href="#section-SDLDidReceiveKeyboardInputNotification">SDLDidReceiveKeyboardInputNotification</a></li>
<li><a href="#section-SDLDidChangeLanguageNotification">SDLDidChangeLanguageNotification</a></li>
- <li><a href="#section-SDLDidChangeLockScreenStatusNotification">SDLDidChangeLockScreenStatusNotification</a></li>
<li><a href="#section-SDLDidReceiveNewHashNotification">SDLDidReceiveNewHashNotification</a></li>
<li><a href="#section-SDLDidReceiveVehicleIconNotification">SDLDidReceiveVehicleIconNotification</a></li>
<li><a href="#section-SDLDidChangePermissionsNotification">SDLDidChangePermissionsNotification</a></li>
<li><a href="#section-SDLDidReceiveRemoteControlStatusNotification">SDLDidReceiveRemoteControlStatusNotification</a></li>
+ <li><a href="#section-SDLDidReceiveSyncPDataNotification">SDLDidReceiveSyncPDataNotification</a></li>
<li><a href="#section-SDLDidReceiveSystemCapabilityUpdatedNotification">SDLDidReceiveSystemCapabilityUpdatedNotification</a></li>
<li><a href="#section-SDLDidReceiveSystemRequestNotification">SDLDidReceiveSystemRequestNotification</a></li>
<li><a href="#section-SDLDidChangeTurnByTurnStateNotification">SDLDidChangeTurnByTurnStateNotification</a></li>
@@ -730,6 +734,9 @@
<li><a href="#section-SDLRPCFunctionNameUpdateTurnList">SDLRPCFunctionNameUpdateTurnList</a></li>
<li><a href="#section-SDLRPCFunctionNameCreateWindow">SDLRPCFunctionNameCreateWindow</a></li>
<li><a href="#section-SDLRPCFunctionNameDeleteWindow">SDLRPCFunctionNameDeleteWindow</a></li>
+ <li><a href="#section-SDLRPCMessageTypeNameRequest">SDLRPCMessageTypeNameRequest</a></li>
+ <li><a href="#section-SDLRPCMessageTypeNameResponse">SDLRPCMessageTypeNameResponse</a></li>
+ <li><a href="#section-SDLRPCMessageTypeNameNotification">SDLRPCMessageTypeNameNotification</a></li>
<li><a href="#section-SDLRadioBandAM">SDLRadioBandAM</a></li>
<li><a href="#section-SDLRadioBandFM">SDLRadioBandFM</a></li>
<li><a href="#section-SDLRadioBandXM">SDLRadioBandXM</a></li>
@@ -1858,24 +1865,6 @@
- <h3 id="section-SDLErrorDomainAudioStreamManager">
- SDLErrorDomainAudioStreamManager
- </h3>
-
- <p>Error relates to AudioStreamManager</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">NSString</span> <span class="o">*</span><span class="k">const</span> <span class="n">_Nonnull</span> <span class="n">SDLErrorDomainAudioStreamManager</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLErrorDomainAudioStreamManager</span><span class="p">:</span> <span class="kt">String</span></code></pre>
-
-
-
-
<h3 id="section-SDLAudioStreamingIndicatorPlayPause">
SDLAudioStreamingIndicatorPlayPause
</h3>
@@ -8829,6 +8818,60 @@ For example, right puddle lights and spot lights.</p>
+ <h3 id="section-SDLRPCServiceDidDisconnect">
+ SDLRPCServiceDidDisconnect
+ </h3>
+
+ <p>Name for a disconnection notification</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLRPCServiceDidDisconnect</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLRPCServiceDidDisconnect</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLRPCServiceDidConnect">
+ SDLRPCServiceDidConnect
+ </h3>
+
+ <p>Name for a connection notification</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLRPCServiceDidConnect</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLRPCServiceDidConnect</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLRPCServiceConnectionDidError">
+ SDLRPCServiceConnectionDidError
+ </h3>
+
+ <p>Name for a error during connection notification</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLRPCServiceConnectionDidError</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLRPCServiceConnectionDidError</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveError">
SDLDidReceiveError
</h3>
@@ -8901,6 +8944,26 @@ For example, right puddle lights and spot lights.</p>
+ <h3 id="section-SDLDidChangeLockScreenStatusNotification">
+ SDLDidChangeLockScreenStatusNotification
+ </h3>
+
+ <p>Name for a LockScreenStatus notification RPC</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated_msg</span><span class="p">(</span>
+ <span class="s">"This will be replaced in a future version where a fake RPC is not sent"</span><span class="p">)</span>
+ <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">SDLDidChangeLockScreenStatusNotification</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">SDLDidChangeLockScreenStatus</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveAddCommandResponse">
SDLDidReceiveAddCommandResponse
</h3>
@@ -9216,7 +9279,8 @@ For example, right puddle lights and spot lights.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveEncodedSyncPDataResponse</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span>
+ <span class="n">SDLDidReceiveEncodedSyncPDataResponse</span></code></pre>
<h4>Swift</h4>
@@ -9918,7 +9982,7 @@ For example, right puddle lights and spot lights.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveSyncPDataResponse</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">SDLDidReceiveSyncPDataResponse</span></code></pre>
<h4>Swift</h4>
@@ -9927,6 +9991,24 @@ For example, right puddle lights and spot lights.</p>
+ <h3 id="section-SDLDidReceiveSystemRequestResponse">
+ SDLDidReceiveSystemRequestResponse
+ </h3>
+
+ <p>Name for a SystemRequest response RPC</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveSystemRequestResponse</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">let</span> <span class="nv">SDLDidReceiveSystemRequestResponse</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveUpdateTurnListResponse">
SDLDidReceiveUpdateTurnListResponse
</h3>
@@ -10350,7 +10432,8 @@ For example, right puddle lights and spot lights.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveEncodedSyncPDataRequest</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span>
+ <span class="n">SDLDidReceiveEncodedSyncPDataRequest</span></code></pre>
<h4>Swift</h4>
@@ -11034,7 +11117,7 @@ For example, right puddle lights and spot lights.</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveSyncPDataRequest</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">SDLDidReceiveSyncPDataRequest</span></code></pre>
<h4>Swift</h4>
@@ -11317,12 +11400,13 @@ For example, right puddle lights and spot lights.</p>
SDLDidReceiveEncodedDataNotification
</h3>
- <p>Name for a EncodedData notification RPC</p>
+ <p>Name for a EncodedSyncPData notification RPC</p>
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidReceiveEncodedDataNotification</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span>
+ <span class="n">SDLDidReceiveEncodedDataNotification</span></code></pre>
<h4>Swift</h4>
@@ -11385,24 +11469,6 @@ For example, right puddle lights and spot lights.</p>
- <h3 id="section-SDLDidChangeLockScreenStatusNotification">
- SDLDidChangeLockScreenStatusNotification
- </h3>
-
- <p>Name for a LockScreenStatus notification RPC</p>
-
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">_Nonnull</span> <span class="n">SDLDidChangeLockScreenStatusNotification</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">SDLDidChangeLockScreenStatus</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
-
-
-
-
<h3 id="section-SDLDidReceiveNewHashNotification">
SDLDidReceiveNewHashNotification
</h3>
@@ -11475,6 +11541,24 @@ For example, right puddle lights and spot lights.</p>
+ <h3 id="section-SDLDidReceiveSyncPDataNotification">
+ SDLDidReceiveSyncPDataNotification
+ </h3>
+
+ <p>Name for an OnSyncPData notification RPC</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="n">__deprecated</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName">SDLNotificationName</a></span> <span class="n">SDLDidReceiveSyncPDataNotification</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">SDLDidReceiveSyncPData</span><span class="p">:</span> <span class="kt">NSNotification</span><span class="o">.</span><span class="kt">Name</span></code></pre>
+
+
+
+
<h3 id="section-SDLDidReceiveSystemCapabilityUpdatedNotification">
SDLDidReceiveSystemCapabilityUpdatedNotification
</h3>
@@ -14433,6 +14517,60 @@ For example, right puddle lights and spot lights.</p>
+ <h3 id="section-SDLRPCMessageTypeNameRequest">
+ SDLRPCMessageTypeNameRequest
+ </h3>
+
+ <p>A request that will require a response</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span> <span class="n">SDLRPCMessageTypeNameRequest</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">request</span><span class="p">:</span> <span class="kt"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLRPCMessageTypeNameResponse">
+ SDLRPCMessageTypeNameResponse
+ </h3>
+
+ <p>A response to a request</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span> <span class="n">SDLRPCMessageTypeNameResponse</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">response</span><span class="p">:</span> <span class="kt"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span></code></pre>
+
+
+
+
+ <h3 id="section-SDLRPCMessageTypeNameNotification">
+ SDLRPCMessageTypeNameNotification
+ </h3>
+
+ <p>A message that does not have a response</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">extern</span> <span class="k">const</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span> <span class="n">SDLRPCMessageTypeNameNotification</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">static</span> <span class="k">let</span> <span class="nv">SDLRPCMessageTypeName</span><span class="p">:</span> <span class="kt"><a href="Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></span></code></pre>
+
+
+
+
<h3 id="section-SDLRadioBandAM">
SDLRadioBandAM
</h3>
diff --git a/docs/Enums.html b/docs/Enums.html
index 00c615c87..1ccc4f81e 100644
--- a/docs/Enums.html
+++ b/docs/Enums.html
@@ -4,17 +4,20 @@
<ul>
<li><a href="#section-SDLArtworkImageFormat">SDLArtworkImageFormat</a></li>
- <li><a href="#section-SDLAudioStreamManagerError">SDLAudioStreamManagerError</a></li>
<li><a href="#section-SDLChoiceSetLayout">SDLChoiceSetLayout</a></li>
<li><a href="#section-SDLEncryptionLifecycleManagerError">SDLEncryptionLifecycleManagerError</a></li>
<li><a href="#section-SDLManagerError">SDLManagerError</a></li>
<li><a href="#section-SDLFileManagerError">SDLFileManagerError</a></li>
<li><a href="#section-SDLTextAndGraphicManagerError">SDLTextAndGraphicManagerError</a></li>
<li><a href="#section-SDLSoftButtonManagerError">SDLSoftButtonManagerError</a></li>
+ <li><a href="#section-SDLSubscribeButtonManagerError">SDLSubscribeButtonManagerError</a></li>
<li><a href="#section-SDLMenuManagerError">SDLMenuManagerError</a></li>
<li><a href="#section-SDLChoiceSetManagerError">SDLChoiceSetManagerError</a></li>
+ <li><a href="#section-SDLSystemCapabilityManagerError">SDLSystemCapabilityManagerError</a></li>
<li><a href="#section-SDLTransportError">SDLTransportError</a></li>
<li><a href="#section-SDLRPCStoreError">SDLRPCStoreError</a></li>
+ <li><a href="#section-SDLCacheFileManagerError">SDLCacheFileManagerError</a></li>
+ <li><a href="#section-SDLAudioStreamManagerError">SDLAudioStreamManagerError</a></li>
<li><a href="#section-SDLSecondaryTransports">SDLSecondaryTransports</a></li>
<li><a href="#section-SDLLockScreenConfigurationDisplayMode">SDLLockScreenConfigurationDisplayMode</a></li>
<li><a href="#section-SDLLogBytesDirection">SDLLogBytesDirection</a></li>
@@ -32,6 +35,7 @@
<li><a href="#section-SDLRPCMessageType">SDLRPCMessageType</a></li>
<li><a href="#section-SDLCarWindowRenderingType">SDLCarWindowRenderingType</a></li>
<li><a href="#section-SDLStreamingEncryptionFlag">SDLStreamingEncryptionFlag</a></li>
+ <li><a href="#section-SDLTouchIdentifier">SDLTouchIdentifier</a></li>
</ul>
<h3>Overview</h3>
@@ -59,25 +63,6 @@
- <h3 id="section-SDLAudioStreamManagerError">
- SDLAudioStreamManagerError
- </h3>
-
- <p>AudioStreamManager errors</p>
-
- <a href="Enums/SDLAudioStreamManagerError.html" class="slightly-smaller">See more</a>
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLAudioStreamManagerError</span> <span class="p">{}</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLAudioStreamManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
-
-
-
-
<h3 id="section-SDLChoiceSetLayout">
SDLChoiceSetLayout
</h3>
@@ -177,7 +162,7 @@
SDLSoftButtonManagerError
</h3>
- <p>Errors associated with the ScreenManager class</p>
+ <p>Errors associated with the Soft Button Manager class</p>
<a href="Enums/SDLSoftButtonManagerError.html" class="slightly-smaller">See more</a>
@@ -192,6 +177,25 @@
+ <h3 id="section-SDLSubscribeButtonManagerError">
+ SDLSubscribeButtonManagerError
+ </h3>
+
+ <p>Errors associated with the Subscribe Button Manager class</p>
+
+ <a href="Enums/SDLSubscribeButtonManagerError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLSubscribeButtonManagerError</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLSubscribeButtonManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
<h3 id="section-SDLMenuManagerError">
SDLMenuManagerError
</h3>
@@ -230,6 +234,25 @@
+ <h3 id="section-SDLSystemCapabilityManagerError">
+ SDLSystemCapabilityManagerError
+ </h3>
+
+ <p>Errors associated with the system capability manager</p>
+
+ <a href="Enums/SDLSystemCapabilityManagerError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLSystemCapabilityManagerError</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLSystemCapabilityManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
<h3 id="section-SDLTransportError">
SDLTransportError
</h3>
@@ -268,6 +291,44 @@
+ <h3 id="section-SDLCacheFileManagerError">
+ SDLCacheFileManagerError
+ </h3>
+
+ <p>Errors related to the cache file manager</p>
+
+ <a href="Enums/SDLCacheFileManagerError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLCacheFileManagerError</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLCacheFileManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLAudioStreamManagerError">
+ SDLAudioStreamManagerError
+ </h3>
+
+ <p>Errors related to the audio stream manager</p>
+
+ <a href="Enums/SDLAudioStreamManagerError.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLAudioStreamManagerError</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLAudioStreamManagerError</span> <span class="p">:</span> <span class="kt">Int</span></code></pre>
+
+
+
+
<h3 id="section-SDLSecondaryTransports">
SDLSecondaryTransports
</h3>
@@ -597,4 +658,23 @@
+ <h3 id="section-SDLTouchIdentifier">
+ SDLTouchIdentifier
+ </h3>
+
+ <p>Identifies finger touch</p>
+
+ <a href="Enums/SDLTouchIdentifier.html" class="slightly-smaller">See more</a>
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="n">SDLTouchIdentifier</span> <span class="p">{}</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">enum</span> <span class="kt">SDLTouchIdentifier</span> <span class="p">:</span> <span class="kt">UInt</span></code></pre>
+
+
+
+
</section>
diff --git a/docs/Enums/SDLAudioStreamManagerError.html b/docs/Enums/SDLAudioStreamManagerError.html
index af59570d6..1189964c1 100644
--- a/docs/Enums/SDLAudioStreamManagerError.html
+++ b/docs/Enums/SDLAudioStreamManagerError.html
@@ -9,7 +9,7 @@
<h3>Overview</h3>
-<p>AudioStreamManager errors</p>
+<p>Errors related to the audio stream manager</p>
<section class="section task-group-section">
diff --git a/docs/Enums/SDLCacheFileManagerError.html b/docs/Enums/SDLCacheFileManagerError.html
new file mode 100644
index 000000000..e5949d4f9
--- /dev/null
+++ b/docs/Enums/SDLCacheFileManagerError.html
@@ -0,0 +1,33 @@
+<h1>SDLCacheFileManagerError Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLCacheManagerErrorUpdateIconArchiveFileFailure">SDLCacheManagerErrorUpdateIconArchiveFileFailure</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Errors related to the cache file manager</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLCacheManagerErrorUpdateIconArchiveFileFailure">
+ SDLCacheManagerErrorUpdateIconArchiveFileFailure
+ </h3>
+
+ <p>Failed to update archive file</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLCacheManagerErrorUpdateIconArchiveFileFailure</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">managerErrorUpdateIconArchiveFileFailure</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Enums/SDLSoftButtonManagerError.html b/docs/Enums/SDLSoftButtonManagerError.html
index 5d8b06214..1f837568d 100644
--- a/docs/Enums/SDLSoftButtonManagerError.html
+++ b/docs/Enums/SDLSoftButtonManagerError.html
@@ -8,7 +8,7 @@
<h3>Overview</h3>
-<p>Errors associated with the ScreenManager class</p>
+<p>Errors associated with the Soft Button Manager class</p>
<section class="section task-group-section">
diff --git a/docs/Enums/SDLSubscribeButtonManagerError.html b/docs/Enums/SDLSubscribeButtonManagerError.html
new file mode 100644
index 000000000..949a0432b
--- /dev/null
+++ b/docs/Enums/SDLSubscribeButtonManagerError.html
@@ -0,0 +1,33 @@
+<h1>SDLSubscribeButtonManagerError Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLSubscribeButtonManagerErrorNotSubscribed">SDLSubscribeButtonManagerErrorNotSubscribed</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Errors associated with the Subscribe Button Manager class</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLSubscribeButtonManagerErrorNotSubscribed">
+ SDLSubscribeButtonManagerErrorNotSubscribed
+ </h3>
+
+ <p>Attempting to unsubscribe to a subscribe button that has not yet been subscribed to yet.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLSubscribeButtonManagerErrorNotSubscribed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">notSubscribed</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Enums/SDLSystemCapabilityManagerError.html b/docs/Enums/SDLSystemCapabilityManagerError.html
new file mode 100644
index 000000000..5262f82ac
--- /dev/null
+++ b/docs/Enums/SDLSystemCapabilityManagerError.html
@@ -0,0 +1,71 @@
+<h1>SDLSystemCapabilityManagerError Enumeration Reference</h1>
+
+<h3>Section Contents</h3>
+
+<ul>
+ <li><a href="#section-SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities">SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities</a></li>
+ <li><a href="#section-SDLSystemCapabilityManagerErrorHMINone">SDLSystemCapabilityManagerErrorHMINone</a></li>
+ <li><a href="#section-SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays">SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays</a></li>
+</ul>
+
+<h3>Overview</h3>
+
+<p>Errors associated with the system capability manager</p>
+
+
+<section class="section task-group-section">
+ <h3 id="section-SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities">
+ SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities
+ </h3>
+
+ <p>The connected head unit does not support any system capabilities</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">moduleDoesNotSupportSystemCapabilities</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSystemCapabilityManagerErrorHMINone">
+ SDLSystemCapabilityManagerErrorHMINone
+ </h3>
+
+ <p>You must be in an HMI Level other than NONE to request or subscribe to capabilites other than DISPLAYS</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLSystemCapabilityManagerErrorHMINone</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">hmiNone</span> <span class="o">=</span> <span class="o">-</span><span class="mi">2</span></code></pre>
+
+
+
+
+ <h3 id="section-SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays">
+ SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays
+ </h3>
+
+ <p>You may not update the system capability type DISPLAYS because it is always subscribed</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="n">SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">cannotUpdateTypeDisplays</span> <span class="o">=</span> <span class="o">-</span><span class="mi">3</span></code></pre>
+
+
+
+
+</section>
diff --git a/docs/Type Definitions/SDLTouchIdentifier/.html b/docs/Enums/SDLTouchIdentifier.html
index af17753af..4e4247cc1 100644
--- a/docs/Type Definitions/SDLTouchIdentifier/.html
+++ b/docs/Enums/SDLTouchIdentifier.html
@@ -1,4 +1,4 @@
-<h1> Enumeration Reference</h1>
+<h1>SDLTouchIdentifier Enumeration Reference</h1>
<h3>Section Contents</h3>
@@ -25,6 +25,9 @@
<pre class="highlight objective_c"><code><span class="n">SDLTouchIdentifierFirstFinger</span> <span class="o">=</span> <span class="mi">0</span></code></pre>
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">firstFinger</span> <span class="o">=</span> <span class="mi">0</span></code></pre>
+
@@ -40,6 +43,9 @@
<pre class="highlight objective_c"><code><span class="n">SDLTouchIdentifierSecondFinger</span> <span class="o">=</span> <span class="mi">1</span></code></pre>
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="k">case</span> <span class="n">secondFinger</span> <span class="o">=</span> <span class="mi">1</span></code></pre>
+
diff --git a/docs/Protocols/SDLManagerDelegate.html b/docs/Protocols/SDLManagerDelegate.html
index 77754feb8..893450d6a 100644
--- a/docs/Protocols/SDLManagerDelegate.html
+++ b/docs/Protocols/SDLManagerDelegate.html
@@ -6,8 +6,10 @@
<li><a href="#section--managerDidDisconnect">-managerDidDisconnect</a></li>
<li><a href="#section--hmiLevel:didChangeToLevel:">-hmiLevel:didChangeToLevel:</a></li>
<li><a href="#section--audioStreamingState:didChangeToState:">-audioStreamingState:didChangeToState:</a></li>
+ <li><a href="#section--videoStreamingState:didChangetoState:">-videoStreamingState:didChangetoState:</a></li>
<li><a href="#section--systemContext:didChangeToContext:">-systemContext:didChangeToContext:</a></li>
<li><a href="#section--managerShouldUpdateLifecycleToLanguage:">-managerShouldUpdateLifecycleToLanguage:</a></li>
+ <li><a href="#section--managerShouldUpdateLifecycleToLanguage:hmiLanguage:">-managerShouldUpdateLifecycleToLanguage:hmiLanguage:</a></li>
</ul>
<h3>Overview</h3>
@@ -86,6 +88,34 @@
<dd><p>The current state.</p></dd>
</dl>
+ <h3 id="section--videoStreamingState:didChangetoState:">
+ -videoStreamingState:didChangetoState:
+ </h3>
+
+ <p>Called when the video streaming state of this application changes. This refers to streaming video for navigation purposes. If you are &ldquo;autostreaming&rdquo; via CarWindow, you should not do anything with this method. Everything should be handled for you automatically.</p>
+
+<p>Only supported on RPC v5.0+ connections.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="nf">videoStreamingState</span><span class="p">:(</span><span class="n">nullable</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">)</span><span class="nv">oldState</span>
+ <span class="nf">didChangetoState</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">)</span><span class="nv">newState</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">videoStreamingState</span><span class="p">(</span><span class="n">_</span> <span class="nv">oldState</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">?,</span> <span class="n">didChangetoState</span> <span class="nv">newState</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState">SDLVideoStreamingState</a></span><span class="p">)</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>oldState</dt>
+ <dd><p>The previous state</p></dd>
+ <dt>newState</dt>
+ <dd><p>The current state</p></dd>
+ </dl>
+
<h3 id="section--systemContext:didChangeToContext:">
-systemContext:didChangeToContext:
</h3>
@@ -140,4 +170,35 @@
<p>An object of SDLLifecycleConfigurationUpdate if the head unit language is supported, otherwise nil to indicate that the language is not supported.</p>
</div>
+ <h3 id="section--managerShouldUpdateLifecycleToLanguage:hmiLanguage:">
+ -managerShouldUpdateLifecycleToLanguage:hmiLanguage:
+ </h3>
+
+ <p>Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">-</span> <span class="p">(</span><span class="n">nullable</span> <span class="n"><a href="../Classes/SDLLifecycleConfigurationUpdate.html">SDLLifecycleConfigurationUpdate</a></span> <span class="o">*</span><span class="p">)</span>
+ <span class="nf">managerShouldUpdateLifecycleToLanguage</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">language</span>
+ <span class="nf">hmiLanguage</span><span class="p">:(</span><span class="n">nonnull</span> <span class="n"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span><span class="nv">hmiLanguage</span><span class="p">;</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">optional</span> <span class="kd">func</span> <span class="nf">managerShouldUpdateLifecycle</span><span class="p">(</span><span class="n">toLanguage</span> <span class="nv">language</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">,</span> <span class="nv">hmiLanguage</span><span class="p">:</span> <span class="kt"><a href="../Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage">SDLLanguage</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt"><a href="../Classes/SDLLifecycleConfigurationUpdate.html">SDLLifecycleConfigurationUpdate</a></span><span class="p">?</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>language</dt>
+ <dd><p>The VR+TTS language of the connected head unit the manager is trying to update the configuration.</p></dd>
+ <dt>hmiLanguage</dt>
+ <dd><p>The HMI display language of the connected head unit the manager is trying to update the configuration.</p></dd>
+ </dl>
+ <div>
+ <h4>Return Value</h4>
+ <p>An object of SDLLifecycleConfigurationUpdate if the head unit language is supported, otherwise nil to indicate that the language is not supported.</p>
+ </div>
+
</section>
diff --git a/docs/Protocols/SDLSecurityType.html b/docs/Protocols/SDLSecurityType.html
index b538f672d..42b474ef8 100644
--- a/docs/Protocols/SDLSecurityType.html
+++ b/docs/Protocols/SDLSecurityType.html
@@ -32,7 +32,7 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readwrite</span><span class="p">,</span> <span class="n">copy</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appId</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">copy</span><span class="p">)</span> <span class="n">NSString</span> <span class="o">*</span><span class="n">_Nonnull</span> <span class="n">appId</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Protocols/SDLStreamingAudioManagerType.html b/docs/Protocols/SDLStreamingAudioManagerType.html
index c12619e1b..2b1acd06c 100644
--- a/docs/Protocols/SDLStreamingAudioManagerType.html
+++ b/docs/Protocols/SDLStreamingAudioManagerType.html
@@ -22,8 +22,8 @@
<h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">readonly</span><span class="p">,</span> <span class="n">getter</span><span class="o">=</span><span class="n">isAudioConnected</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">nonatomic</span><span class="p">)</span>
- <span class="n">BOOL</span> <span class="n">audioConnected</span><span class="p">;</span></code></pre>
+ <pre class="highlight objective_c"><code><span class="k">@property</span> <span class="p">(</span><span class="n">nonatomic</span><span class="p">,</span> <span class="n">assign</span><span class="p">,</span> <span class="n">unsafe_unretained</span><span class="p">,</span> <span class="n">readonly</span><span class="p">,</span>
+ <span class="n">getter</span><span class="o">=</span><span class="n">isAudioConnected</span><span class="p">)</span> <span class="n">BOOL</span> <span class="n">audioConnected</span><span class="p">;</span></code></pre>
<h4>Swift</h4>
diff --git a/docs/Type Definitions.html b/docs/Type Definitions.html
index 355301984..2e1e1fa22 100644
--- a/docs/Type Definitions.html
+++ b/docs/Type Definitions.html
@@ -95,6 +95,7 @@
<li><a href="#section-SDLPermissionRPCName">SDLPermissionRPCName</a></li>
<li><a href="#section-SDLPermissionObserverIdentifier">SDLPermissionObserverIdentifier</a></li>
<li><a href="#section-SDLPermissionsChangedHandler">SDLPermissionsChangedHandler</a></li>
+ <li><a href="#section-SDLRPCPermissionStatusChangedHandler">SDLRPCPermissionStatusChangedHandler</a></li>
<li><a href="#section-SDLPermissionStatus">SDLPermissionStatus</a></li>
<li><a href="#section-SDLPowerModeQualificationStatus">SDLPowerModeQualificationStatus</a></li>
<li><a href="#section-SDLPowerModeStatus">SDLPowerModeStatus</a></li>
@@ -102,6 +103,7 @@
<li><a href="#section-SDLPrerecordedSpeech">SDLPrerecordedSpeech</a></li>
<li><a href="#section-SDLPrimaryAudioSource">SDLPrimaryAudioSource</a></li>
<li><a href="#section-SDLRPCFunctionName">SDLRPCFunctionName</a></li>
+ <li><a href="#section-SDLRPCMessageTypeName">SDLRPCMessageTypeName</a></li>
<li><a href="#section-SDLRadioBand">SDLRadioBand</a></li>
<li><a href="#section-SDLRadioState">SDLRadioState</a></li>
<li><a href="#section-SDLRequestType">SDLRequestType</a></li>
@@ -109,6 +111,7 @@
<li><a href="#section-SDLSamplingRate">SDLSamplingRate</a></li>
<li><a href="#section-SDLScreenManagerUpdateCompletionHandler">SDLScreenManagerUpdateCompletionHandler</a></li>
<li><a href="#section-SDLPreloadChoiceCompletionHandler">SDLPreloadChoiceCompletionHandler</a></li>
+ <li><a href="#section-SDLSubscribeButtonHandler">SDLSubscribeButtonHandler</a></li>
<li><a href="#section-SDLSeatMemoryActionType">SDLSeatMemoryActionType</a></li>
<li><a href="#section-SDLServiceUpdateReason">SDLServiceUpdateReason</a></li>
<li><a href="#section-SDLSoftButtonType">SDLSoftButtonType</a></li>
@@ -121,6 +124,7 @@
<li><a href="#section-SDLSystemAction">SDLSystemAction</a></li>
<li><a href="#section-SDLUpdateCapabilityHandler">SDLUpdateCapabilityHandler</a></li>
<li><a href="#section-SDLCapabilityUpdateHandler">SDLCapabilityUpdateHandler</a></li>
+ <li><a href="#section-SDLCapabilityUpdateWithErrorHandler">SDLCapabilityUpdateWithErrorHandler</a></li>
<li><a href="#section-SDLSystemCapabilityType">SDLSystemCapabilityType</a></li>
<li><a href="#section-SDLSystemContext">SDLSystemContext</a></li>
<li><a href="#section-SDLTBTState">SDLTBTState</a></li>
@@ -129,7 +133,6 @@
<li><a href="#section-SDLTextAlignment">SDLTextAlignment</a></li>
<li><a href="#section-SDLTextFieldName">SDLTextFieldName</a></li>
<li><a href="#section-SDLTimerMode">SDLTimerMode</a></li>
- <li><a href="#section-SDLTouchIdentifier">SDLTouchIdentifier</a></li>
<li><a href="#section-SDLTouchEventHandler">SDLTouchEventHandler</a></li>
<li><a href="#section-SDLTouchType">SDLTouchType</a></li>
<li><a href="#section-SDLTriggerSource">SDLTriggerSource</a></li>
@@ -2125,7 +2128,7 @@ c = character <br></p>
SDLPermissionsChangedHandler
</h3>
- <p>The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>
+ <p>This is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>
@@ -2142,10 +2145,37 @@ c = character <br></p>
<h4>Parameters</h4>
<dl>
- <dt>change</dt>
- <dd><p>A dictionary of permission changes containing <key(String): RPC Name, object(BOOL): YES if the RPC is allowed, NO if it is not allowed></p></dd>
+ <dt>updatedPermissionStatuses</dt>
+ <dd><p>A dictionary of the new current status of all subscription items; containing <key(String): RPC Name, object(BOOL): YES if the RPC is allowed, NO if it is not allowed></p></dd>
<dt>status</dt>
- <dd><p>The change made to all of the RPCs in the changedDict. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed</p></dd>
+ <dd><p>The unified group status of the RPCs in the updatedPermissionStatuses dictionary. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed</p></dd>
+ </dl>
+
+ <h3 id="section-SDLRPCPermissionStatusChangedHandler">
+ SDLRPCPermissionStatusChangedHandler
+ </h3>
+
+ <p>A block that will be called when specified permissions change. It will return whether each RPC and its parameters are allowed as well as the permission group status of all the RPCs.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLRPCPermissionStatusChangedHandler</span><span class="p">)(</span>
+ <span class="n">NSDictionary</span><span class="o">&lt;</span><span class="n"><a href="Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span><span class="p">,</span> <span class="n"><a href="Classes/SDLRPCPermissionStatus.html">SDLRPCPermissionStatus</a></span> <span class="o">*&gt;</span> <span class="o">*</span><span class="n">_Nonnull</span><span class="p">,</span>
+ <span class="n"><a href="Enums/SDLPermissionGroupStatus.html">SDLPermissionGroupStatus</a></span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLRPCPermissionStatusChangedHandler</span> <span class="o">=</span> <span class="p">([</span><span class="kt"><a href="Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName">SDLRPCFunctionName</a></span> <span class="p">:</span> <span class="kt"><a href="Classes/SDLRPCPermissionStatus.html">SDLRPCPermissionStatus</a></span><span class="p">],</span> <span class="kt"><a href="Enums/SDLPermissionGroupStatus.html">SDLPermissionGroupStatus</a></span><span class="p">)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>updatedPermissionStatuses</dt>
+ <dd><p>A dictionary of the new current status of all subscription items; containing <key(String): SDLPermissionRPCName, object(SDLRPCPermissionStatus)></p></dd>
+ <dt>status</dt>
+ <dd><p>The unified group status of the RPCs in the updatedPermissionStatuses dictionary. Allowed, if all RPCs are now allowed, Disallowed if all RPCs are now disallowed, or Mixed if some are allowed, and some are disallowed</p></dd>
</dl>
<h3 id="section-SDLPermissionStatus">
@@ -2278,6 +2308,24 @@ c = character <br></p>
+ <h3 id="section-SDLRPCMessageTypeName">
+ SDLRPCMessageTypeName
+ </h3>
+
+ <p>A type of RPC message</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="n"><a href="Type%20Definitions.html#/c:SDLEnum.h@T@SDLEnum">SDLEnum</a></span> <span class="n">SDLRPCMessageTypeName</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt">SDLRPCMessageTypeName</span> <span class="p">:</span> <span class="n">_ObjectiveCBridgeable</span><span class="p">,</span> <span class="kt">Hashable</span><span class="p">,</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="n">_SwiftNewtypeWrapper</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
+
+
+
+
<h3 id="section-SDLRadioBand">
SDLRadioBand
</h3>
@@ -2418,6 +2466,35 @@ c = character <br></p>
<dd><p>The error if one occurred</p></dd>
</dl>
+ <h3 id="section-SDLSubscribeButtonHandler">
+ SDLSubscribeButtonHandler
+ </h3>
+
+ <p>A handler run when the subscribe button has been selected</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLSubscribeButtonHandler</span><span class="p">)(</span><span class="n"><a href="Classes/SDLOnButtonPress.html">SDLOnButtonPress</a></span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span>
+ <span class="n"><a href="Classes/SDLOnButtonEvent.html">SDLOnButtonEvent</a></span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span>
+ <span class="n">NSError</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLSubscribeButtonHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt"><a href="Classes/SDLOnButtonPress.html">SDLOnButtonPress</a></span><span class="p">?,</span> <span class="kt"><a href="Classes/SDLOnButtonEvent.html">SDLOnButtonEvent</a></span><span class="p">?,</span> <span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>buttonPress</dt>
+ <dd><p>Indicates whether this is a long or short button press event</p></dd>
+ <dt>buttonEvent</dt>
+ <dd><p>Indicates that the button has been depressed or released</p></dd>
+ <dt>error</dt>
+ <dd><p>The error if one occurred</p></dd>
+ </dl>
+
<h3 id="section-SDLSeatMemoryActionType">
SDLSeatMemoryActionType
</h3>
@@ -2647,6 +2724,34 @@ c = character <br></p>
<dd><p>The capability that was updated.</p></dd>
</dl>
+ <h3 id="section-SDLCapabilityUpdateWithErrorHandler">
+ SDLCapabilityUpdateWithErrorHandler
+ </h3>
+
+ <p>An observer block for whenever a subscription or value is retrieved.</p>
+
+
+
+ <h4>Objective-C</h4>
+ <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="kt">void</span> <span class="p">(</span><span class="o">^</span><span class="n">SDLCapabilityUpdateWithErrorHandler</span><span class="p">)(</span>
+ <span class="n"><a href="Classes/SDLSystemCapability.html">SDLSystemCapability</a></span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">,</span> <span class="n">BOOL</span><span class="p">,</span> <span class="n">NSError</span> <span class="o">*</span><span class="n">_Nullable</span><span class="p">)</span></code></pre>
+
+
+ <h4>Swift</h4>
+ <pre class="highlight swift"><code><span class="kd">typealias</span> <span class="kt">SDLCapabilityUpdateWithErrorHandler</span> <span class="o">=</span> <span class="p">(</span><span class="kt"><a href="Classes/SDLSystemCapability.html">SDLSystemCapability</a></span><span class="p">?,</span> <span class="kt">Bool</span><span class="p">,</span> <span class="kt">Error</span><span class="p">?)</span> <span class="o">-&gt;</span> <span class="kt">Void</span></code></pre>
+
+
+
+ <h4>Parameters</h4>
+ <dl>
+ <dt>capability</dt>
+ <dd><p>The capability that was updated.</p></dd>
+ <dt>subscribed</dt>
+ <dd><p>Whether or not the capability was subscribed or if the capability will only be pulled once.</p></dd>
+ <dt>error</dt>
+ <dd><p>An error that occurred.</p></dd>
+ </dl>
+
<h3 id="section-SDLSystemCapabilityType">
SDLSystemCapabilityType
</h3>
@@ -2797,22 +2902,6 @@ c = character <br></p>
- <h3 id="section-SDLTouchIdentifier">
- SDLTouchIdentifier
- </h3>
-
- <p>Undocumented</p>
-
- <a href="Type%20Definitions/SDLTouchIdentifier.html" class="slightly-smaller">See more</a>
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">typedef</span> <span class="k">enum</span> <span class="n">SDLTouchIdentifier</span> <span class="n">SDLTouchIdentifier</span></code></pre>
-
-
-
-
-
<h3 id="section-SDLTouchEventHandler">
SDLTouchEventHandler
</h3>
diff --git a/docs/Type Definitions/SDLTouchIdentifier.html b/docs/Type Definitions/SDLTouchIdentifier.html
deleted file mode 100644
index 17e1e5c6f..000000000
--- a/docs/Type Definitions/SDLTouchIdentifier.html
+++ /dev/null
@@ -1,34 +0,0 @@
-<h1>SDLTouchIdentifier Type Definition Reference</h1>
-
-<h3>Section Contents</h3>
-
-<ul>
- <li><a href="#section-"></a></li>
-</ul>
-
-<h3>Overview</h3>
-
-<p>Undocumented</p>
-
-
-<section class="section task-group-section">
- <h3 id="section-">
-
- </h3>
-
- <p>Identifies finger touch</p>
-
- <a href="../Type%20Definitions/SDLTouchIdentifier/.html" class="slightly-smaller">See more</a>
-
-
- <h4>Objective-C</h4>
- <pre class="highlight objective_c"><code><span class="k">enum</span> <span class="p">{}</span></code></pre>
-
-
- <h4>Swift</h4>
- <pre class="highlight swift"><code><span class="kd">struct</span> <span class="kt"><a href="../Type%20Definitions/SDLTouchIdentifier.html">SDLTouchIdentifier</a></span> <span class="p">:</span> <span class="kt">Equatable</span><span class="p">,</span> <span class="kt">RawRepresentable</span></code></pre>
-
-
-
-
-</section>
diff --git a/docs/badge.svg b/docs/badge.svg
index bfac05268..a096feca8 100644
--- a/docs/badge.svg
+++ b/docs/badge.svg
@@ -1,15 +1,15 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="128" height="20">
+<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="136" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<clipPath id="a">
- <rect width="128" height="20" rx="3" fill="#fff"/>
+ <rect width="136" height="20" rx="3" fill="#fff"/>
</clipPath>
<g clip-path="url(#a)">
<path fill="#555" d="M0 0h93v20H0z"/>
- <path fill="#4c1" d="M93 0h35v20H93z"/>
- <path fill="url(#b)" d="M0 0h128v20H0z"/>
+ <path fill="#4c1" d="M93 0h43v20H93z"/>
+ <path fill="url(#b)" d="M0 0h136v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="110">
<text x="475" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="830">
@@ -18,11 +18,11 @@
<text x="475" y="140" transform="scale(.1)" textLength="830">
documentation
</text>
- <text x="1095" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="250">
- 99%
+ <text x="1135" y="150" fill="#010101" fill-opacity=".3" transform="scale(.1)" textLength="330">
+ 100%
</text>
- <text x="1095" y="140" transform="scale(.1)" textLength="250">
- 99%
+ <text x="1135" y="140" transform="scale(.1)" textLength="330">
+ 100%
</text>
</g>
</svg>
diff --git a/docs/index.html b/docs/index.html
index dd6db8d9f..1c1ba65a7 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -358,6 +358,8 @@
url: Classes/SDLPerformInteraction.html
- name: SDLPerformInteractionResponse
url: Classes/SDLPerformInteractionResponse.html
+ - name: SDLPermissionElement
+ url: Classes/SDLPermissionElement.html
- name: SDLPermissionItem
url: Classes/SDLPermissionItem.html
- name: SDLPermissionManager
@@ -386,6 +388,8 @@
url: Classes.html#/c:objc(cs)SDLRPCNotification
- name: SDLRPCNotificationNotification
url: Classes/SDLRPCNotificationNotification.html
+ - name: SDLRPCPermissionStatus
+ url: Classes/SDLRPCPermissionStatus.html
- name: SDLRPCRequest
url: Classes/SDLRPCRequest.html
- name: SDLRPCRequestNotification
@@ -1160,6 +1164,8 @@
url: Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest
- name: SDLDidReceiveSubscribeWaypointsResponse
url: Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse
+ - name: SDLDidReceiveSyncPDataNotification
+ url: Constants.html#/c:@SDLDidReceiveSyncPDataNotification
- name: SDLDidReceiveSyncPDataRequest
url: Constants.html#/c:@SDLDidReceiveSyncPDataRequest
- name: SDLDidReceiveSyncPDataResponse
@@ -1170,6 +1176,8 @@
url: Constants.html#/c:@SDLDidReceiveSystemRequestNotification
- name: SDLDidReceiveSystemRequestRequest
url: Constants.html#/c:@SDLDidReceiveSystemRequestRequest
+ - name: SDLDidReceiveSystemRequestResponse
+ url: Constants.html#/c:@SDLDidReceiveSystemRequestResponse
- name: SDLDidReceiveTouchEventNotification
url: Constants.html#/c:@SDLDidReceiveTouchEventNotification
- name: SDLDidReceiveUnpublishAppServiceRequest
@@ -1288,8 +1296,6 @@
url: Constants.html#/c:@SDLEmergencyEventTypeRollover
- name: SDLEmergencyEventTypeSide
url: Constants.html#/c:@SDLEmergencyEventTypeSide
- - name: SDLErrorDomainAudioStreamManager
- url: Constants.html#/c:@SDLErrorDomainAudioStreamManager
- name: SDLFileTypeAAC
url: Constants.html#/c:@SDLFileTypeAAC
- name: SDLFileTypeBMP
@@ -2084,6 +2090,18 @@
url: Constants.html#/c:@SDLRPCFunctionNameUnsubscribeWayPoints
- name: SDLRPCFunctionNameUpdateTurnList
url: Constants.html#/c:@SDLRPCFunctionNameUpdateTurnList
+ - name: SDLRPCMessageTypeNameNotification
+ url: Constants.html#/c:@SDLRPCMessageTypeNameNotification
+ - name: SDLRPCMessageTypeNameRequest
+ url: Constants.html#/c:@SDLRPCMessageTypeNameRequest
+ - name: SDLRPCMessageTypeNameResponse
+ url: Constants.html#/c:@SDLRPCMessageTypeNameResponse
+ - name: SDLRPCServiceConnectionDidError
+ url: Constants.html#/c:@SDLRPCServiceConnectionDidError
+ - name: SDLRPCServiceDidConnect
+ url: Constants.html#/c:@SDLRPCServiceDidConnect
+ - name: SDLRPCServiceDidDisconnect
+ url: Constants.html#/c:@SDLRPCServiceDidDisconnect
- name: SDLRadioBandAM
url: Constants.html#/c:@SDLRadioBandAM
- name: SDLRadioBandFM
@@ -3018,6 +3036,8 @@
url: Enums/SDLArtworkImageFormat.html
- name: SDLAudioStreamManagerError
url: Enums/SDLAudioStreamManagerError.html
+ - name: SDLCacheFileManagerError
+ url: Enums/SDLCacheFileManagerError.html
- name: SDLCarWindowRenderingType
url: Enums/SDLCarWindowRenderingType.html
- name: SDLChoiceSetLayout
@@ -3066,8 +3086,14 @@
url: Enums/SDLSoftButtonManagerError.html
- name: SDLStreamingEncryptionFlag
url: Enums/SDLStreamingEncryptionFlag.html
+ - name: SDLSubscribeButtonManagerError
+ url: Enums/SDLSubscribeButtonManagerError.html
+ - name: SDLSystemCapabilityManagerError
+ url: Enums/SDLSystemCapabilityManagerError.html
- name: SDLTextAndGraphicManagerError
url: Enums/SDLTextAndGraphicManagerError.html
+ - name: SDLTouchIdentifier
+ url: Enums/SDLTouchIdentifier.html
- name: SDLTransportError
url: Enums/SDLTransportError.html
- name: Protocols
@@ -3132,6 +3158,8 @@
url: Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode
- name: SDLCapabilityUpdateHandler
url: Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler
+ - name: SDLCapabilityUpdateWithErrorHandler
+ url: Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler
- name: SDLCarModeStatus
url: Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus
- name: SDLCharacterSet
@@ -3302,6 +3330,10 @@
url: Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler
- name: SDLRPCFunctionName
url: Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName
+ - name: SDLRPCMessageTypeName
+ url: Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName
+ - name: SDLRPCPermissionStatusChangedHandler
+ url: Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLRPCPermissionStatusChangedHandler
- name: SDLRPCUpdatedBlock
url: Type%20Definitions.html#/c:SDLManager.h@T@SDLRPCUpdatedBlock
- name: SDLRadioBand
@@ -3328,6 +3360,8 @@
url: Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities
- name: SDLStaticIconName
url: Type%20Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName
+ - name: SDLSubscribeButtonHandler
+ url: Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLSubscribeButtonHandler
- name: SDLSupportedSeat
url: Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat
- name: SDLSystemAction
@@ -3350,8 +3384,6 @@
url: Type%20Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode
- name: SDLTouchEventHandler
url: Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler
- - name: SDLTouchIdentifier
- url: Type%20Definitions/SDLTouchIdentifier.html
- name: SDLTouchType
url: Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType
- name: SDLTriggerSource
diff --git a/docs/search.json b/docs/search.json
index d9d91186f..474ab899d 100644
--- a/docs/search.json
+++ b/docs/search.json
@@ -1 +1 @@
-{"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"<p>Touch was first finger</p>"},"Type%20Definitions/SDLTouchIdentifier/.html#/c:@EA@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"<p>Touch was second finger</p>"},"Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"<p>Reflects the status of the ambient light sensor for headlamps</p>"},"Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"<p>Enumeration listing possible app hmi types.</p>"},"Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"<p>Indicates reason why app interface was unregistered. The application is being disconnected by SDL.</p>"},"Type%20Definitions.html#/c:SDLAppServiceType.h@T@SDLAppServiceType":{"name":"SDLAppServiceType","abstract":"<p>Enumeration listing possible app service types.</p>"},"Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator":{"name":"SDLAudioStreamingIndicator","abstract":"<p>Enumeration listing possible indicators of audio streaming changes</p>"},"Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"<p>Describes whether or not streaming audio is currently audible to the user. Though provided in every OnHMIStatus notification, this information is only relevant for applications that declare themselves as media apps in RegisterAppInterface</p>"},"Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"<p>Describes different audio type options for PerformAudioPassThru</p>"},"Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"<p>Describes different bit depth options for PerformAudioPassThru</p>"},"Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"<p>Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.</p>"},"Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"<p>Defines logical buttons which, on a given SDL unit, would correspond to either physical or soft (touchscreen) buttons. These logical buttons present a standard functional abstraction which the developer can rely upon, independent of the SDL unit. For example, the developer can rely upon the OK button having the same meaning to the user across SDL platforms.</p>"},"Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press</p>"},"Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"<p>Describes the carmode the vehicle is in. Used in ClusterModeStatus</p>"},"Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"<p>Character sets supported by SDL. Used to describe text field capabilities.</p>"},"Type%20Definitions.html#/c:SDLChoiceSet.h@T@SDLChoiceSetCanceledHandler":{"name":"SDLChoiceSetCanceledHandler","abstract":"<p>Notifies the subscriber that the choice set should be cancelled.</p>"},"Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"<p>The list of potential compass directions. Used in GPS data</p>"},"Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"<p>The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level</p>"},"Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"<p>Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.</p>"},"Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"<p>Specifies the mode in which the sendLocation request is sent. Used in SendLocation.</p>"},"Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"<p>Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.</p>"},"Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"<p>The supported dimensions of the GPS. Used in GPSData</p>"},"Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection":{"name":"SDLDirection","abstract":"<p>A navigation direction.</p>"},"Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode":{"name":"SDLDisplayMode","abstract":"<p>Identifies the various display types used by SDL.</p>"},"Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"<p>Identifies the various display types used by SDL. Used in DisplayCapabilities.</p>"},"Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit":{"name":"SDLDistanceUnit","abstract":"<p>Wiper Status</p>"},"Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"<p>Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.</p>"},"Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"<p>Reflects the status of the eCall Notification. Used in ECallInfo</p>"},"Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus":{"name":"SDLElectronicParkBrakeStatus","abstract":"<p>Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.</p>"},"Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"<p>Reflects the emergency event status of the vehicle. Used in EmergencyEvent</p>"},"Type%20Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"<p>NSString SDLEnum typedef</p>"},"Type%20Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"<p>The handler that is called when the manager is set up or failed to set up with an error."},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"<p>Typedef SDLFileName</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"<p>A completion handler called after a set of upload requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to a upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a delete request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"<p>A completion handler called after a set of delete requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"<p>A completion handler called after response from Core to a list files request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a artwork upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a set of upload artwork requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to an artwork upload request.</p>"},"Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"<p>Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest</p>"},"Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"<p>Reflects the status of the Restraints Control Module fuel pump cutoff. The fuel pump is cut off typically after the vehicle has had a collision. Used in EmergencyEvent.</p>"},"Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType":{"name":"SDLFuelType","abstract":"<p>Enumeration listing possible fuel types.</p>"},"Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"<p>Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties</p>"},"Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"<p>Specifies current level of the HMI. An HMI level indicates the degree of user interaction possible through the HMI (e.g. TTS only, display only, VR, etc.). The HMI level varies for an application based on the type of display (i.e. Nav or non-Nav) and the user directing &ldquo;focus&rdquo; to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus</p>"},"Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse</p>"},"Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference":{"name":"SDLHybridAppPreference","abstract":"<p>Enumeration for the user&rsquo;s preference of which app type to use when both are available.</p>"},"Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"<p>Reflects the ignition switch stability. Used in BodyInformation</p>"},"Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"<p>Reflects the status of ignition. Used in BodyInformation.</p>"},"Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"<p>The name that identifies the filed. Used in DisplayCapabilities.</p>"},"Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"<p>Contains information about the type of image. Used in Image.</p>"},"Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"<p>For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user&rsquo;s selection is indicated. Used in PerformInteraction.</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler":{"name":"SDLKeyboardAutocompleteCompletionHandler","abstract":"<p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutoCompleteResultsHandler":{"name":"SDLKeyboardAutoCompleteResultsHandler","abstract":"<p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input.</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler":{"name":"SDLKeyboardCharacterSetCompletionHandler","abstract":"<p>This handler is called when you wish to update your keyboard&rsquo;s limitedCharacterSet in response to the user&rsquo;s input</p>"},"Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"<p>Enumeration listing possible keyboard events. Used in OnKeyboardInput.</p>"},"Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"<p>Enumeration listing possible keyboard layouts. Used in KeyboardProperties.</p>"},"Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"<p>Enumeration listing possible keyboard events.</p>"},"Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"<p>Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.</p>"},"Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"<p>For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.</p>"},"Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName":{"name":"SDLLightName","abstract":"<p>The name that identifies the Light</p>"},"Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus":{"name":"SDLLightStatus","abstract":"<p>Reflects the status of Light.</p>"},"Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"<p>Describes what the status of the lock screen should be</p>"},"Type%20Definitions.html#/c:SDLLockScreenViewController.h@T@SwipeGestureCallbackBlock":{"name":"SwipeGestureCallbackBlock","abstract":"<p>A block that can be used to close the lockscreen when the user swipes on the lockscreen. Override this in your own custom view controllers if you build a custom lock screen.</p>"},"Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>"},"Type%20Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"<p>Describes the maintenence mode. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"<p>The block called when the manager is ready to be used or an error occurs while attempting to become ready.</p>"},"Type%20Definitions.html#/c:SDLManager.h@T@SDLRPCUpdatedBlock":{"name":"SDLRPCUpdatedBlock","abstract":"<p>The block that will be called every time an RPC is received when subscribed to an RPC.</p>"},"Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion":{"name":"SDLMassageCushion","abstract":"<p>The List possible cushions of a multi-contour massage seat.</p>"},"Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode":{"name":"SDLMassageMode","abstract":"<p>The List possible modes of a massage zone.</p>"},"Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone":{"name":"SDLMassageZone","abstract":"<p>List possible zones of a multi-contour massage seat.</p>"},"Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"<p>Indicates the format of the time displayed on the connected SDL unit.</p>"},"Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType":{"name":"SDLMediaType","abstract":"<p>Enumeration listing possible media types.</p>"},"Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"<p>The handler to run when a menu item is selected.</p>"},"Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout":{"name":"SDLMenuLayout","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"<p>Text Field metadata types. Used in Show.</p>"},"Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"<p>The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData</p>"},"Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction":{"name":"SDLNavigationAction","abstract":"<p>A navigation action.</p>"},"Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction":{"name":"SDLNavigationJunction","abstract":"<p>A navigation junction type.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"<p>NSNotification names specific to incoming SDL RPC</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"<p>The key used in all SDL NSNotifications to extract the response or notification from the userInfo dictionary.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"<p>A handler used on SDLPerformAudioPassThru.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"<p>A handler used on all RPC requests which fires when the response is received.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"<p>A completion handler called after a sequential or simultaneous set of requests have completed sending.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.</p>"},"Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"<p>The selected gear the car is in. Used in retrieving vehicle data.</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"<p>NSString typedef</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"<p>NSUUID typedef</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"<p>The PermissionObserver is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>"},"Type%20Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"<p>Enumeration that describes possible permission states of a policy table entry. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"<p>Describes the power mode qualification status. Used in ClusterModeStatus.</p>"},"Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"<p>The status of the car&rsquo;s power. Used in ClusterModeStatus.</p>"},"Type%20Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"<p>A template layout an app uses to display information. The broad details of the layout are defined, but the details depend on the IVI system. Used in SetDisplayLayout.</p>"},"Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.</p>"},"Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"<p>Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.</p>"},"Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName":{"name":"SDLRPCFunctionName","abstract":"<p>All RPC request / response / notification names</p>"},"Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"<p>Radio bands, such as AM and FM, used in RadioControlData</p>"},"Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"<p>List possible states of a remote control radio module. Used in RadioControlData.</p>"},"Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"<p>A type of system request. Used in SystemRequest.</p>"},"Type%20Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"<p>Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses</p>"},"Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"<p>Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities</p>"},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"<p>The handler run when the update has completed</p>"},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler":{"name":"SDLPreloadChoiceCompletionHandler","abstract":"<p>Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload</p>"},"Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType":{"name":"SDLSeatMemoryActionType","abstract":"<p>List of possible actions on Seat Meomry</p>"},"Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason":{"name":"SDLServiceUpdateReason","abstract":"<p>Enumeration listing possible service update reasons.</p>"},"Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"<p>SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.</p>"},"Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"<p>Contains information about TTS capabilities on the SDL platform. Used in RegisterAppInterfaceResponse, and TTSChunk.</p>"},"Type%20Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName":{"name":"SDLStaticIconName","abstract":"<p>Static icon names</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState":{"name":"SDLVideoStreamManagerState","abstract":"<p>The current state of the video stream manager</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState":{"name":"SDLAudioStreamManagerState","abstract":"<p>The current state of the audio stream manager</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState":{"name":"SDLAppState","abstract":"<p>Typedef SDLAppState</p>"},"Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat":{"name":"SDLSupportedSeat","abstract":"<p>List possible seats that is a remote controllable seat.</p>"},"Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"<p>Enumeration that describes system actions that can be triggered. Used in SoftButton.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"<p>A completion handler called after a request for the capability type is returned from the remote system.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler":{"name":"SDLCapabilityUpdateHandler","abstract":"<p>An observer block for whenever a subscription is called.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"<p>The type of system capability to get more information on. Used in GetSystemCapability.</p>"},"Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"<p>Indicates whether or not a user-initiated interaction is in progress, and if so, in what mode (i.e. MENU or VR). Used in OnHMIStatus</p>"},"Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"<p>The turn-by-turn state, used in OnTBTClientState.</p>"},"Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS":{"name":"SDLTPMS","abstract":"<p>An enum representing values of the tire pressure monitoring system</p>"},"Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"<p>The unit of temperature to display. Used in Temperature.</p>"},"Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"<p>The list of possible alignments of text in a field. May only work on some display types. used in Show.</p>"},"Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"<p>Names of the text fields that can appear on a SDL display. Used in TextFieldName.</p>"},"Type%20Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"<p>The direction of a timer. Used in nothing.</p>"},"Type%20Definitions/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"<p>Undocumented</p>"},"Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"<p>Handler for touch events</p>"},"Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"<p>The type of a touch in a projection application. Used in OnTouchEvent.</p>"},"Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"<p>Indicates whether choice/command was selected via VR or via a menu selection (using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN, OK buttons). Used in PerformInteractionResponse and OnCommand.</p>"},"Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal":{"name":"SDLTurnSignal","abstract":"<p>Enumeration that describes the status of the turn light indicator.</p>"},"Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"<p>Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"<p>Vehicle Data Activity Status. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"<p>Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"<p>Reflects the status of a vehicle data notification. Used in ECallInfo</p>"},"Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"<p>Vehicle Data Result Code. Used in DIDResult.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"<p>Reflects the status of a binary vehicle data item. Used in MyKey.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"<p>Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult</p>"},"Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"<p>The ventilation mode. Used in ClimateControlCapabilities</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"<p>Enum for each type of video streaming codec. Used in VideoStreamingFormat.</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState":{"name":"SDLVideoStreamingState","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"<p>The handler that will be called when the command is activated</p>"},"Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.</p>"},"Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"<p>Reflects the status of a cluster instrument warning light. Used in TireStatus</p>"},"Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"<p>The type of a navigation waypoint. Used in GetWayPoints.</p>"},"Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType":{"name":"SDLWindowType","abstract":"<p>The type of the window to be created. Main window or widget.</p>"},"Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"<p>The status of the windshield wipers. Used in retrieving vehicle data.</p>"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"<p>A single tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"<p>A double tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"<p>Panning started</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"<p>Panning moved between points</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"<p>Panning ended</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"<p>Panning canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"<p>Pinch did start</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"<p>@abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"<p>Pinch moved and changed scale</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"<p>Pinch did end</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"<p>Pinch canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"<p>Implement to return a different preferred order of attempted format usage than the head unit&rsquo;s preferred order. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing).</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"<p>Implement to return a different resolution to use for video streaming than the head unit&rsquo;s requested resolution. If you return a resolution that the head unit does not like, the manager will fail to start up. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit&rsquo;s preferred resolution instead.</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio byte stream is currently connected</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>Send audio data bytes over the audio byte stream</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLServiceEncryptionDelegate.html#/c:objc(pl)SDLServiceEncryptionDelegate(im)serviceEncryptionUpdatedOnService:encrypted:error:":{"name":"-serviceEncryptionUpdatedOnService:encrypted:error:","abstract":"<p>Called when the encryption service has been.</p>","parent_name":"SDLServiceEncryptionDelegate"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"<p>The app id of the app</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"<p>Initialize the SDL security library with the app&rsquo;s id and a completion handler</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"<p>Stop the security library</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"<p>Run the SSL/TLS handshake</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"<p>Encrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"<p>Decrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"<p>The vehicle makes this security library covers</p>","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"<p>Called upon a disconnection from the remote system.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"<p>Called when the HMI level state of this application changes on the remote system. This is equivalent to the application&rsquo;s state changes in iOS such as foreground, background, or closed.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"<p>Called when the audio streaming state of this application changes on the remote system. This refers to when streaming audio is audible to the user.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"<p>Called when the system context of this application changes on the remote system. This refers to whether or not a user-initiated interaction is in progress, and if so, what it is.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"<p>Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"<p>A simple convenience initializer to create the object. This <em>should not</em> start up the logger.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"<p>A call to setup the logger in whatever manner it needs to do so.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"<p>Log a particular log using the model and the formatted log message to the target.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"<p>The log target should be torn down. e.g. file handles should be closed</p>","parent_name":"SDLLogTarget"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)userDidSubmitInput:withEvent:":{"name":"-userDidSubmitInput:withEvent:","abstract":"<p>The keyboard session completed with some input.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidAbortWithReason:":{"name":"-keyboardDidAbortWithReason:","abstract":"<p>The keyboard session aborted.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)customKeyboardConfiguration":{"name":"-customKeyboardConfiguration","abstract":"<p>Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:completionHandler:":{"name":"-updateAutocompleteWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:autoCompleteResultsHandler:":{"name":"-updateAutocompleteWithInput:autoCompleteResultsHandler:","abstract":"<p>Implement this if you wish to updated the KeyboardProperties.autoCompleteList as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateCharacterSetWithInput:completionHandler:":{"name":"-updateCharacterSetWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidSendEvent:text:":{"name":"-keyboardDidSendEvent:text:","abstract":"<p>Implement this to be notified of all events occurring on the keyboard</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didSelectChoice:withSource:atRowIndex:":{"name":"-choiceSet:didSelectChoice:withSource:atRowIndex:","abstract":"<p>Delegate method called after a choice set item is selected</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didReceiveError:":{"name":"-choiceSet:didReceiveError:","abstract":"<p>Delegate method called on an error</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"<p>Called when a file from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"<p>Called when a file from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:dataBufferDidFinishPlayingSuccessfully:":{"name":"-audioStreamManager:dataBufferDidFinishPlayingSuccessfully:","abstract":"<p>Called when a data buffer from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForDataBuffer:":{"name":"-audioStreamManager:errorDidOccurForDataBuffer:","abstract":"<p>Called when a data buffer from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"<p>A declaration that this NSNumber contains an NSInteger.</p>"},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"<p>A declaration that this NSNumber contains an NSUInteger.</p>"},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"<p>A declaration that this NSNumber contains a BOOL.</p>"},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"<p>A declaration that this NSNumber contains a float.</p>"},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"<p>Delegate for the AudioStreamManager</p>"},"Protocols/SDLChoiceSetDelegate.html":{"name":"SDLChoiceSetDelegate","abstract":"<p>Delegate for the the SDLChoiceSet. Contains methods that get called when an action is taken on a choice cell.</p>"},"Protocols/SDLKeyboardDelegate.html":{"name":"SDLKeyboardDelegate","abstract":"<p>They delegate of a keyboard popup allowing customization at runtime of the keyboard.</p>"},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"<p>A protocol describing a place logs from SDLLogManager are logged to</p>"},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"<p>The manager&rsquo;s delegate</p>"},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"<p>A protocol used by SDL Security libraries.</p>"},"Protocols/SDLServiceEncryptionDelegate.html":{"name":"SDLServiceEncryptionDelegate","abstract":"<p>Delegate for the encryption service.</p>"},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"<p>Streaming audio manager</p>"},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"<p>A data source for the streaming manager&rsquo;s preferred resolutions and preferred formats.</p>"},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"<p>The delegate to be notified of processed touches such as pinches, pans, and taps</p>"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"<p>It should not be encrypted at all</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"<p>It should use SSL/TLS only to authenticate</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"<p>All data on these services should be encrypted using SSL/TLS</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"<p>Instead of rendering your UIViewController&rsquo;s view, this will render the layer using renderInContext</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"<p>Renders your UIViewController&rsquo;s view using drawViewHierarchyInRect:bounds afterScreenUpdates:YES</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"<p>Renders your UIViewController&rsquo;s view using drawViewHierarchyInRect:bounds afterScreenUpdates:NO</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"<p>A request that will require a response</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"<p>A response to a request</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"<p>A message that does not have a response</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeat":{"name":"SDLFrameInfoHeartbeat","abstract":"<p>A ping packet that is sent to ensure the connection is still active and the service is still valid.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartService":{"name":"SDLFrameInfoStartService","abstract":"<p>Requests that a specific type of service is started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceACK":{"name":"SDLFrameInfoStartServiceACK","abstract":"<p>Acknowledges that the specific service has been started successfully.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceNACK":{"name":"SDLFrameInfoStartServiceNACK","abstract":"<p>Negatively acknowledges that the specific service was not started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndService":{"name":"SDLFrameInfoEndService","abstract":"<p>Requests that a specific type of service is ended.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceACK":{"name":"SDLFrameInfoEndServiceACK","abstract":"<p>Acknowledges that the specific service has been ended successfully.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceNACK":{"name":"SDLFrameInfoEndServiceNACK","abstract":"<p>Negatively acknowledges that the specific service was not ended or has not yet been started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransport":{"name":"SDLFrameInfoRegisterSecondaryTransport","abstract":"<p>Notifies that a Secondary Transport has been established.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportACK":{"name":"SDLFrameInfoRegisterSecondaryTransportACK","abstract":"<p>Acknowledges that the Secondary Transport has been recognized.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportNACK":{"name":"SDLFrameInfoRegisterSecondaryTransportNACK","abstract":"<p>Negatively acknowledges that the Secondary Transport has not been recognized.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoTransportEventUpdate":{"name":"SDLFrameInfoTransportEventUpdate","abstract":"<p>Indicates the status or configuration of transport(s) is/are updated.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoServiceDataAck":{"name":"SDLFrameInfoServiceDataAck","abstract":"<p>Deprecated.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeatACK":{"name":"SDLFrameInfoHeartbeatACK","abstract":"<p>Acknowledges that a Heartbeat control packet has been received.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoSingleFrame":{"name":"SDLFrameInfoSingleFrame","abstract":"<p>Payload contains a single packet.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoFirstFrame":{"name":"SDLFrameInfoFirstFrame","abstract":"<p>First frame in a multiple frame payload.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoConsecutiveLastFrame":{"name":"SDLFrameInfoConsecutiveLastFrame","abstract":"<p>Frame in a multiple frame payload.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeControl":{"name":"SDLServiceTypeControl","abstract":"<p>The lowest level service available.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeRPC":{"name":"SDLServiceTypeRPC","abstract":"<p>Used to send requests, responses, and notifications between an application and a head unit.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeAudio":{"name":"SDLServiceTypeAudio","abstract":"<p>The application can start the audio service to send PCM audio data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Audio Service is only PCM audio data.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeVideo":{"name":"SDLServiceTypeVideo","abstract":"<p>The application can start the video service to send H.264 video data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Video Service is only H.264 video data.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeBulkData":{"name":"SDLServiceTypeBulkData","abstract":"<p>Similar to the RPC Service but adds a bulk data field. The payload of a message sent via the Hybrid service consists of a Binary Header, JSON Data, and Bulk Data.</p>","parent_name":"SDLServiceType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeControl":{"name":"SDLFrameTypeControl","abstract":"<p>Lowest-level type of packets. They can be sent over any of the defined services. They are used for the control of the services in which they are sent.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeSingle":{"name":"SDLFrameTypeSingle","abstract":"<p>Contains all the data for a particular packet in the payload. The majority of frames sent over the protocol utilize this frame type.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeFirst":{"name":"SDLFrameTypeFirst","abstract":"<p>The First Frame in a multiple frame payload contains information about the entire sequence of frames so that the receiving end can correctly parse all the frames and reassemble the entire payload. The payload of this frame is only eight bytes and contains information regarding the rest of the sequence.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeConsecutive":{"name":"SDLFrameTypeConsecutive","abstract":"<p>The Consecutive Frames in a multiple frame payload contain the actual raw data of the original payload. The parsed payload contained in each of the Consecutive Frames&rsquo; payloads should be buffered until the entire sequence is complete.</p>","parent_name":"SDLFrameType"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsDefaultWindow":{"name":"SDLPredefinedWindowsDefaultWindow","abstract":"<p>The default window is a main window pre-created on behalf of the app.</p>","parent_name":"SDLPredefinedWindows"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsPrimaryWidget":{"name":"SDLPredefinedWindowsPrimaryWidget","abstract":"<p>The primary widget of the app.</p>","parent_name":"SDLPredefinedWindows"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"<p>Every RPC in the group is currently allowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"<p>Every RPC in the group is currently disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"<p>Some RPCs in the group are allowed and some disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"<p>The current status of the group is unknown.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"<p>Be notified when all of the RPC in the group are allowed, or, when they all stop being allowed in some sense, that is, when they were all allowed, and now they are not.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"<p>Be notified when any change in availability occurs among the group.</p>","parent_name":"SDLPermissionGroupType"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateDelete":{"name":"MenuCellStateDelete","abstract":"<p>Marks the cell to be deleted</p>","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateAdd":{"name":"MenuCellStateAdd","abstract":"<p>Marks the cell to be added</p>","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateKeep":{"name":"MenuCellStateKeep","abstract":"<p>Marks the cell to be kept</p>","parent_name":"MenuCellState"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOn":{"name":"SDLDynamicMenuUpdatesModeForceOn","abstract":"<p>Forces on compatibility mode. This will force the menu manager to delete and re-add each menu item for every menu update. This mode is generally not advised due to performance issues.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOff":{"name":"SDLDynamicMenuUpdatesModeForceOff","abstract":"<p>This mode forces the menu manager to always dynamically update menu items for each menu update. This will provide the best performance but may cause ordering issues on some SYNC Gen 3 head units.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeOnWithCompatibility":{"name":"SDLDynamicMenuUpdatesModeOnWithCompatibility","abstract":"<p>This mode checks whether the phone is connected to a SYNC Gen 3 head unit, which has known menu ordering issues. If it is, it will always delete and re-add every menu item, if not, it will dynamically update the menus.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"<p>A bare-bones log format: <code>09:52:07:324 🔹 (SDL)Protocol – a random test i guess</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"<p>A middle detail default log format: <code>09:52:07:324 🔹 (SDL)Protocol:SDLV2ProtocolHeader:25 – Some log message</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"<p>A very detailed log format: <code>09:52:07:324 🔹 DEBUG com.apple.main-thread:(SDL)Protocol:[SDLV2ProtocolHeader parse:]:74 – Some log message</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"<p>This is used to describe that a &ldquo;specific&rdquo; logging will instead use the global log level, for example, a module may use the global log level instead of its own by specifying this level.</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"<p>This is used to describe a level that involves absolutely no logs being output.</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"<p>Only error level logs will be output</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"<p>Both error and warning level logs will be output</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"<p>Error, warning, and debug level logs will be output. This level will never be output in RELEASE environments</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"<p>All level logs will be output. This level will never be output in RELEASE environments</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"<p>Error level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"<p>Warning level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"<p>Debug level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"<p>Verbose level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"<p>Transmit from the app</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"<p>Receive from the module</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeNever":{"name":"SDLLockScreenConfigurationDisplayModeNever","abstract":"<p>The lock screen should never be shown. This should almost always mean that you will build your own lock screen.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeRequiredOnly":{"name":"SDLLockScreenConfigurationDisplayModeRequiredOnly","abstract":"<p>The lock screen should only be shown when it is required by the head unit.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeOptionalOrRequired":{"name":"SDLLockScreenConfigurationDisplayModeOptionalOrRequired","abstract":"<p>The lock screen should be shown when required by the head unit or when the head unit says that its optional, but <em>not</em> in other cases, such as before the user has interacted with your app on the head unit.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeAlways":{"name":"SDLLockScreenConfigurationDisplayModeAlways","abstract":"<p>The lock screen should always be shown after connection.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsNone":{"name":"SDLSecondaryTransportsNone","abstract":"<p>No secondary transport</p>","parent_name":"SDLSecondaryTransports"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsTCP":{"name":"SDLSecondaryTransportsTCP","abstract":"<p>TCP as secondary transport</p>","parent_name":"SDLSecondaryTransports"},"Enums/SDLRPCStoreError.html#/c:@E@SDLRPCStoreError@SDLRPCStoreErrorGetInvalidObject":{"name":"SDLRPCStoreErrorGetInvalidObject","abstract":"<p>In dictionary stored value with unexpected type</p>","parent_name":"SDLRPCStoreError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorUnknown":{"name":"SDLTransportErrorUnknown","abstract":"<p>Connection cannot be established due to a reason not listed here.</p>","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionRefused":{"name":"SDLTransportErrorConnectionRefused","abstract":"<p>TCP connection is refused.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionTimedOut":{"name":"SDLTransportErrorConnectionTimedOut","abstract":"<p>TCP connection cannot be established within given time.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorNetworkDown":{"name":"SDLTransportErrorNetworkDown","abstract":"<p>TCP connection cannot be established since network is down.","parent_name":"SDLTransportError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorPendingPresentationDeleted":{"name":"SDLChoiceSetManagerErrorPendingPresentationDeleted","abstract":"<p>The choice set has been deleted before it was presented</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorDeletionFailed":{"name":"SDLChoiceSetManagerErrorDeletionFailed","abstract":"<p>The choice set failed to delete</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorUploadFailed":{"name":"SDLChoiceSetManagerErrorUploadFailed","abstract":"<p>The upload failed</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorFailedToCreateMenuItems":{"name":"SDLChoiceSetManagerErrorFailedToCreateMenuItems","abstract":"<p>The menu items failed to be created</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorInvalidState":{"name":"SDLChoiceSetManagerErrorInvalidState","abstract":"<p>Invalid state</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"<p>Sending menu-related RPCs returned an error from the remote system</p>","parent_name":"SDLMenuManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"<p>A pending update was superseded by a newer requested update. The old update will not be sent</p>","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"<p>A pending update was superseded by a newer requested update. The old update will not be sent</p>","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"<p>A file attempted to send, but a file with that name already exists on the remote head unit, and the file was not configured to overwrite.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"<p>A file was attempted to be accessed but it does not exist.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"<p>The file manager attempted to start but encountered an error.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"<p>The file manager was unable to send this file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"<p>The file upload was canceled.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"<p>One or more of multiple files being uploaded or deleted failed.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"<p>One or more of multiple files being uploaded or deleted failed.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"<p>The file data is nil or empty.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorStaticIcon":{"name":"SDLFileManagerErrorStaticIcon","abstract":"<p>The file is a static icon, which cannot be uploaded</p>","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"<p>An RPC request failed to send.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"<p>Some action was attempted before the ready state was reached.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"<p>The remote system encountered an unknown error.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"<p>One or more of the sub-managers failed to start.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"<p>Registering with the remote system failed.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"<p>Registering with the remote system was successful, but had a warning.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"<p>Request operations were cancelled before they could be sent</p>","parent_name":"SDLManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNotConnected":{"name":"SDLEncryptionLifecycleManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorEncryptionOff":{"name":"SDLEncryptionLifecycleManagerErrorEncryptionOff","abstract":"<p>Received ACK with encryption bit set to false from the remote head unit</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNAK":{"name":"SDLEncryptionLifecycleManagerErrorNAK","abstract":"<p>Received NAK from the remote head unit.</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutList":{"name":"SDLChoiceSetLayoutList","abstract":"<p>Menu items will be displayed in a list</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutTiles":{"name":"SDLChoiceSetLayoutTiles","abstract":"<p>Menu items will be displayed as a tiled list</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"<p>The audio stream is not currently connected</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"<p>Attempted to play but there&rsquo;s no audio in the queue</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"<p>Image format: PNG</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"<p>Image format: JPG</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"<p>Image format of an artwork file</p>"},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"<p>AudioStreamManager errors</p>"},"Enums/SDLChoiceSetLayout.html":{"name":"SDLChoiceSetLayout","abstract":"<p>The layout to use when a choice set is displayed</p>"},"Enums/SDLEncryptionLifecycleManagerError.html":{"name":"SDLEncryptionLifecycleManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"<p>Errors associated with the SDLFileManager class.</p>"},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLChoiceSetManagerError.html":{"name":"SDLChoiceSetManagerError","abstract":"<p>Errors associated with Choice Set class</p>"},"Enums/SDLTransportError.html":{"name":"SDLTransportError","abstract":"<p>Errors associated with transport.</p>"},"Enums/SDLRPCStoreError.html":{"name":"SDLRPCStoreError","abstract":"<p>Errors associated with store.</p>"},"Enums/SDLSecondaryTransports.html":{"name":"SDLSecondaryTransports","abstract":"<p>List of secondary transports</p>"},"Enums/SDLLockScreenConfigurationDisplayMode.html":{"name":"SDLLockScreenConfigurationDisplayMode","abstract":"<p>Describes when the lock screen should be shown.</p>"},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"<p>An enum describing log bytes direction</p>"},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"<p>Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.</p>"},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"<p>An enum describing a level of logging.</p>"},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"<p>The output format of logs; how they will appear when printed out into a string.</p>"},"Enums/SDLDynamicMenuUpdatesMode.html":{"name":"SDLDynamicMenuUpdatesMode","abstract":"<p>Dynamic Menu Manager Mode</p>"},"Enums/MenuCellState.html":{"name":"MenuCellState","abstract":"<p>Menu cell state</p>"},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"<p>A permission group type which will be used to tell the system what type of changes you want to be notified about for the group.</p>"},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"<p>The status of the group of RPCs permissions.</p>"},"Enums/SDLPredefinedWindows.html":{"name":"SDLPredefinedWindows","abstract":"<p>Specifies which windows and IDs are predefined and pre-created on behalf of the app. The default window is always available and represents the app window on the main display. It&rsquo;s an equivalent to today&rsquo;s app window. For backward compatibility, this will ensure the app always has at least the default window on the main display. The app can choose to use this predefined enum element to specifically address app&rsquo;s main window or to duplicate window content. It is not possible to duplicate another window to the default window. The primary widget is a special widget, that can be associated with a service type, which is used by the HMI whenever a single widget needs to represent the whole app. The primary widget should be named as the app and can be pre-created by the HMI.</p>"},"Enums/SDLFrameType.html":{"name":"SDLFrameType","abstract":"<p>The data packet&rsquo;s header and payload combination.</p>"},"Enums/SDLServiceType.html":{"name":"SDLServiceType","abstract":"<p>The data packet&rsquo;s format and priority.</p>"},"Enums/SDLFrameInfo.html":{"name":"SDLFrameInfo","abstract":"<p>The data packet&rsquo;s available data.</p>"},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"<p>The type of RPC message</p>"},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"<p>The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance</p>"},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"<p>A flag determining how video and audio streaming should be encrypted</p>"},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"<p>Represents a &ldquo;night&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"<p>Represents a &ldquo;twilight 1&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"<p>Represents a &ldquo;twilight 2&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"<p>Represents a &ldquo;twilight 3&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"<p>Represents a &ldquo;twilight 4&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"<p>Represents a &ldquo;day&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"<p>Represents an &ldquo;unknown&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"<p>Represents a &ldquo;invalid&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"<p>The App will have default rights.</p>"},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"<p>Communication type of App</p>"},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"<p>App dealing with Media</p>"},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"<p>Messaging App</p>"},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"<p>Navigation App</p>"},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"<p>Information App</p>"},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"<p>App dealing with social media</p>"},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"<p>App dealing with Mobile Projection applications</p>"},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"<p>App designed for use in the background</p>"},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"<p>App only for Testing purposes</p>"},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"<p>System App</p>"},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"<p>Remote control</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"<p>Vehicle ignition turned off.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"<p>Bluetooth was turned off, causing termination of a necessary Bluetooth connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"<p>USB was disconnected, causing termination of a necessary iAP connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"<p>Application attempted SmartDeviceLink RPC request while HMILevel = NONE. App must have HMILevel other than NONE to issue RPC requests or get notifications or RPC responses.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"<p>Either too many &ndash; or too many per unit of time &ndash; requests were made by the application.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"<p>The application has issued requests which cause driver distraction rules to be violated.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"<p>The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"<p>The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"<p>The user restored settings to FACTORY DEFAULTS on the SDL platform.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"<p>The app is not being authorized to be connected to SDL.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonProtocolViolation":{"name":"SDLAppInterfaceUnregisteredReasonProtocolViolation","abstract":"<p>The app could not register due to a protocol violation</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource":{"name":"SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource","abstract":"<p>The HMI resource is unsupported</p>"},"Constants.html#/c:@SDLAppServiceTypeMedia":{"name":"SDLAppServiceTypeMedia","abstract":"<p>The app will have a service type of media.</p>"},"Constants.html#/c:@SDLAppServiceTypeWeather":{"name":"SDLAppServiceTypeWeather","abstract":"<p>The app will have a service type of weather.</p>"},"Constants.html#/c:@SDLAppServiceTypeNavigation":{"name":"SDLAppServiceTypeNavigation","abstract":"<p>The app will have a service type of navigation.</p>"},"Constants.html#/c:@SDLErrorDomainAudioStreamManager":{"name":"SDLErrorDomainAudioStreamManager","abstract":"<p>Error relates to AudioStreamManager</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause":{"name":"SDLAudioStreamingIndicatorPlayPause","abstract":"<p>Default playback indicator."},"Constants.html#/c:@SDLAudioStreamingIndicatorPlay":{"name":"SDLAudioStreamingIndicatorPlay","abstract":"<p>Indicates that a button press of the Play/Pause button starts the audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPause":{"name":"SDLAudioStreamingIndicatorPause","abstract":"<p>Indicates that a button press of the Play/Pause button pauses the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorStop":{"name":"SDLAudioStreamingIndicatorStop","abstract":"<p>Indicates that a button press of the Play/Pause button stops the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"<p>Currently streaming audio, if any, is audible to user.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"<p>Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.</p>"},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"<p>Currently streaming audio, if any, is not audible to user. made via VR session.</p>"},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"<p>PCM raw audio</p>"},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"<p>8 bits per sample</p>"},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"<p>16 bits per sample</p>"},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"<p>The button was released</p>"},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"<p>The button was depressed</p>"},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"<p>Represents the button usually labeled &ldquo;OK&rdquo;. A typical use of this button is for the user to press it to make a selection. Prior to SDL Core 5.0 (iOS Proxy v.6.1), Ok was used for both &ldquo;OK&rdquo; buttons <em>AND</em> PlayPause. In 5.0, PlayPause was introduced to reduce confusion, and you should use the one you intend for your use case (usually PlayPause). Until the next proxy breaking change, however, subscribing to this button name will continue to subscribe you to PlayPause so that your code does not break. That means that if you subscribe to both Ok and PlayPause, you will receive duplicate notifications.</p>"},"Constants.html#/c:@SDLButtonNamePlayPause":{"name":"SDLButtonNamePlayPause","abstract":"<p>Represents the play/pause button for media apps. Replaces &ldquo;OK&rdquo; on sub-5.0 head units, compliments it on 5.0 head units and later.</p>"},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"<p>Represents the seek-left button. A typical use of this button is for the user to scroll to the left through menu choices one menu item per press.</p>"},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"<p>Represents the seek-right button. A typical use of this button is for the user to scroll to the right through menu choices one menu item per press.</p>"},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"<p>Represents a turn of the tuner knob in the clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"<p>Represents a turn of the tuner knob in the counter-clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"<p>Represents the preset 0 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"<p>Represents the preset 1 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"<p>Represents the preset 2 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"<p>Represents the preset 3 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"<p>Represents the preset 4 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"<p>Represents the preset 5 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"<p>Represents the preset 6 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"<p>Represents the preset 7 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"<p>Represents the preset 8 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"<p>Represents the preset 9 button.</p>"},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"<p>Represents the Custom button.</p>"},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"<p>Represents the SEARCH button.</p>"},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"<p>Represents AC max button *</p>"},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"<p>Represents AC button *</p>"},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"<p>Represents a Recirculate button</p>"},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"<p>Represents a Fan up button</p>"},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"<p>Represents a fan down button</p>"},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"<p>Represents a temperature up button</p>"},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"<p>Represents a temperature down button</p>"},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"<p>Represents a Defrost max button.</p>"},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"<p>Represents a Defrost button.</p>"},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"<p>Represents a Defrost rear button.</p>"},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"<p>Represents a Upper Vent button.</p>"},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"<p>Represents a Lower vent button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"<p>Represents a volume up button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"<p>Represents a volume down button.</p>"},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"<p>Represents a Eject Button.</p>"},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"<p>Represents a Source button.</p>"},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"<p>Represents a SHUFFLE button.</p>"},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"<p>Represents a Repeat button.</p>"},"Constants.html#/c:@SDLButtonNameNavCenterLocation":{"name":"SDLButtonNameNavCenterLocation","abstract":"<p>Represents a Navigate to center button.</p>"},"Constants.html#/c:@SDLButtonNameNavZoomIn":{"name":"SDLButtonNameNavZoomIn","abstract":"<p>Represents a Zoom in button.</p>"},"Constants.html#/c:@SDLButtonNameNavZoomOut":{"name":"SDLButtonNameNavZoomOut","abstract":"<p>Represents a Zoom out button.</p>"},"Constants.html#/c:@SDLButtonNameNavPanUp":{"name":"SDLButtonNameNavPanUp","abstract":"<p>Represents a Pan up button</p>"},"Constants.html#/c:@SDLButtonNameNavPanUpRight":{"name":"SDLButtonNameNavPanUpRight","abstract":"<p>Represents a Pan up/right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanRight":{"name":"SDLButtonNameNavPanRight","abstract":"<p>Represents a Pan right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDownRight":{"name":"SDLButtonNameNavPanDownRight","abstract":"<p>Represents a Pan down/right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDown":{"name":"SDLButtonNameNavPanDown","abstract":"<p>Represents a Pan down button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDownLeft":{"name":"SDLButtonNameNavPanDownLeft","abstract":"<p>Represents a Pan down left button</p>"},"Constants.html#/c:@SDLButtonNameNavPanLeft":{"name":"SDLButtonNameNavPanLeft","abstract":"<p>Represents a Pan left button</p>"},"Constants.html#/c:@SDLButtonNameNavPanUpLeft":{"name":"SDLButtonNameNavPanUpLeft","abstract":"<p>Represents a Pan up left button</p>"},"Constants.html#/c:@SDLButtonNameNavTiltToggle":{"name":"SDLButtonNameNavTiltToggle","abstract":"<p>Represents a Tilt button. If supported, this toggles between a top-down view and an angled/3D view. If your app supports different, but substantially similar options, then you may implement those. If you don&rsquo;t implement these or similar options, do not subscribe to this button.</p>"},"Constants.html#/c:@SDLButtonNameNavRotateClockwise":{"name":"SDLButtonNameNavRotateClockwise","abstract":"<p>Represents a Rotate clockwise button</p>"},"Constants.html#/c:@SDLButtonNameNavRotateCounterClockwise":{"name":"SDLButtonNameNavRotateCounterClockwise","abstract":"<p>Represents a Rotate counterclockwise button</p>"},"Constants.html#/c:@SDLButtonNameNavHeadingToggle":{"name":"SDLButtonNameNavHeadingToggle","abstract":"<p>Represents a Heading toggle button. If supported, this toggles between locking the orientation to north or to the vehicle&rsquo;s heading. If your app supports different, but substantially similar options, then you may implement those. If you don&rsquo;t implement these or similar options, do not subscribe to this button.</p>"},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"<p>A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"<p>A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"<p>Provides carmode NORMAL to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"<p>Provides carmode FACTORY to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"<p>Provides carmode TRANSPORT to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"<p>Provides carmode CRASH to each module.</p>"},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"<p>Character Set Type 2</p>"},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"<p>Character Set Type 5</p>"},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"<p>Character Set CID1</p>"},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"<p>Character Set CID2</p>"},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"<p>Direction North</p>"},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"<p>Direction Northwest</p>"},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"<p>Direction West</p>"},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"<p>Direction Southwest</p>"},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"<p>Direction South</p>"},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"<p>Direction Southeast</p>"},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"<p>Direction East</p>"},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"<p>Direction Northeast</p>"},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"<p>Unknown SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"<p>Normal SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"<p>Low SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"<p>Fault SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"<p>Alert SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"<p>Not supported SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"<p>A SDLDefrostZone with the value of <em>FRONT</em></p>"},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"<p>A SDLDefrostZone with the value of <em>REAR</em></p>"},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"<p>A SDLDefrostZone with the value of <em>All</em></p>"},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"<p>A SDLDefrostZone with the value of <em>None</em></p>"},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"<p>User is prompted on HMI</p>"},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"<p>Set the location as destination without prompting the user</p>"},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"<p>Adds the current location to navigation queue</p>"},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"<p>Device battery level is zero bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"<p>Device battery level is one bar</p>"},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"<p>Device battery level is two bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"<p>Device battery level is three bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"<p>Device battery level is four bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"<p>Device battery level is unknown</p>"},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"<p>No GPS at all</p>"},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"<p>Longitude and latitude of the GPS</p>"},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"<p>Longitude and latitude and altitude of the GPS</p>"},"Constants.html#/c:@SDLDirectionLeft":{"name":"SDLDirectionLeft","abstract":"<p>Direction left</p>"},"Constants.html#/c:@SDLDirectionRight":{"name":"SDLDirectionRight","abstract":"<p>Direction right</p>"},"Constants.html#/c:@SDLDisplayModeDay":{"name":"SDLDisplayModeDay","abstract":"<p>@abstract Display Mode : DAY</p>"},"Constants.html#/c:@SDLDisplayModeNight":{"name":"SDLDisplayModeNight","abstract":"<p>@abstract Display Mode : NIGHT.</p>"},"Constants.html#/c:@SDLDisplayModeAuto":{"name":"SDLDisplayModeAuto","abstract":"<p>@abstract Display Mode : AUTO.</p>"},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"<p>This display type provides a 2-line x 20 character &ldquo;dot matrix&rdquo; display.</p>"},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"<p>Display type 2</p>"},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"<p>Display type 5</p>"},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"<p>This display type provides an 8 inch touchscreen display.</p>"},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"<p>Display type Gen 28 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"<p>Display type Gen 26 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"<p>Display type MFD3</p>"},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"<p>Display type MFD4</p>"},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"<p>Display type MFD5</p>"},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"<p>Display type Gen 3 8-inch</p>"},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"<p>Display type Generic</p>"},"Constants.html#/c:@SDLDistanceUnitMiles":{"name":"SDLDistanceUnitMiles","abstract":"<p>@abstract SDLDistanceUnit: <em>MILES</em></p>"},"Constants.html#/c:@SDLDistanceUnitKilometers":{"name":"SDLDistanceUnitKilometers","abstract":"<p>@abstract SDLDistanceUnit: <em>KILOMETERS</em></p>"},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"<p>Driver distraction rules are in effect.</p>"},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"<p>Driver distraction rules are NOT in effect.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"<p>No E-Call signal triggered.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"<p>An E-Call is being in progress.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"<p>An E-Call was cancelled by the user.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"<p>The E-Call sequence is completed.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"<p>An E-Call could not be connected.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"<p>E-Call is not configured on this vehicle.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"<p>E-Call is considered to be complete without Emergency Operator contact.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusClosed":{"name":"SDLElectronicParkBrakeStatusClosed","abstract":"<p>Parking brake actuators have been fully applied.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusTransition":{"name":"SDLElectronicParkBrakeStatusTransition","abstract":"<p>Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusOpen":{"name":"SDLElectronicParkBrakeStatusOpen","abstract":"<p>Parking brake actuators are released.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive":{"name":"SDLElectronicParkBrakeStatusDriveActive","abstract":"<p>When driver pulls the Electronic Parking Brake switch while driving &ldquo;at speed&rdquo;.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusFault":{"name":"SDLElectronicParkBrakeStatusFault","abstract":"<p>When system has a fault or is under maintenance.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"<p>No emergency event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"<p>Frontal collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"<p>Side collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"<p>Rear collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"<p>A rollover event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"<p>The signal is not supported</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"<p>Emergency status cannot be determined</p>"},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"<p>file type: Bitmap (BMP)</p>"},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"<p>file type: JPEG</p>"},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"<p>file type: PNG</p>"},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"<p>file type: WAVE (WAV)</p>"},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"<p>file type: MP3</p>"},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"<p>file type: AAC</p>"},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"<p>file type: BINARY</p>"},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"<p>file type: JSON</p>"},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"<p>Fuel is cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"<p>Fuel is not cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"<p>Status of the fuel pump cannot be determined</p>"},"Constants.html#/c:@SDLFuelTypeGasoline":{"name":"SDLFuelTypeGasoline","abstract":"<p>Fuel type: Gasoline</p>"},"Constants.html#/c:@SDLFuelTypeDiesel":{"name":"SDLFuelTypeDiesel","abstract":"<p>Fuel type: Diesel</p>"},"Constants.html#/c:@SDLFuelTypeCNG":{"name":"SDLFuelTypeCNG","abstract":"<p>Fuel type: CNG</p>"},"Constants.html#/c:@SDLFuelTypeLPG":{"name":"SDLFuelTypeLPG","abstract":"<p>Fuel type: LPG</p>"},"Constants.html#/c:@SDLFuelTypeHydrogen":{"name":"SDLFuelTypeHydrogen","abstract":"<p>Fuel type: Hydrogen</p>"},"Constants.html#/c:@SDLFuelTypeBattery":{"name":"SDLFuelTypeBattery","abstract":"<p>Fuel type: Battery</p>"},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"<p>The help prompt to be spoken if the user needs assistance during a user-initiated interaction.</p>"},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"<p>The prompt to be spoken if the user-initiated interaction times out waiting for the user&rsquo;s verbal input.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"<p>The title of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"<p>Items of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"<p>The name of the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"<p>An icon on the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"<p>Property related to the keyboard</p>"},"Constants.html#/c:@SDLGlobalPropertyUserLocation":{"name":"SDLGlobalPropertyUserLocation","abstract":"<p>Location of the user&rsquo;s seat of setGlobalProperties</p>"},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"<p>The application has full use of the SDL HMI. The app may output via TTS, display, or streaming audio and may gather input via VR, Menu, and button presses</p>"},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"<p>This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application&rsquo;s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)</p>"},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"<p>App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:</p>"},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"<p>Application has been discovered by SDL, but it cannot send any requests or receive any notifications</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"<p>Indicates HMI available for front seat passengers.</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"<p>Indicates HMI available for rear seat passengers.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceMobile":{"name":"SDLHybridAppPreferenceMobile","abstract":"<p>App preference of mobile.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceCloud":{"name":"SDLHybridAppPreferenceCloud","abstract":"<p>App preference of cloud.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceBoth":{"name":"SDLHybridAppPreferenceBoth","abstract":"<p>App preference of both. Allows both the mobile and the cloud versions of the app to attempt to connect at the same time, however the first app that is registered is the one that is allowed to stay registered.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"<p>The current ignition switch status is considered not to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"<p>The current ignition switch status is considered to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"<p>The current ignition switch status is considered to be missing from the transmitter</p>"},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"<p>Ignition status currently unknown</p>"},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"<p>Ignition is off</p>"},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"<p>Ignition is in mode accessory</p>"},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"<p>Ignition is in mode run</p>"},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"<p>Ignition is in mode start</p>"},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"<p>Signal is invalid</p>"},"Constants.html#/c:@SDLImageFieldNameAlertIcon":{"name":"SDLImageFieldNameAlertIcon","abstract":"<p>The image field for Alert</p>"},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"<p>The image field for SoftButton</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"<p>The first image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"<p>The scondary image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"<p>The image field for vrHelpItem.</p>"},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"<p>The image field for Turn.</p>"},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"<p>The image field for the menu icon in SetGlobalProperties.</p>"},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"<p>The image field for AddCommand."},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"<p>The image field for the app icon (set by setAppIcon).</p>"},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"<p>The primary image field for Show."},"Constants.html#/c:@SDLImageFieldNameSecondaryGraphic":{"name":"SDLImageFieldNameSecondaryGraphic","abstract":"<p>The secondary image field for Show."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"<p>The primary image field for ShowConstant TBT."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"<p>The secondary image field for ShowConstant TBT.</p>"},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"<p>The optional image of a destination / location</p>"},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"<p>Activate an icon that shipped with the IVI system by passing a hex value.</p>"},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"<p>An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)</p>"},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"<p>Interaction Mode : Manual Only</p>"},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"<p>Interaction Mode : VR Only</p>"},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"<p>Interaction Mode : Manual &amp; VR</p>"},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"<p>The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).</p>"},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"<p>The User has finished entering text from the keyboard and submitted the entry.</p>"},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"<p>The User has pressed the HMI-defined &ldquo;Cancel&rdquo; button.</p>"},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"<p>The User has not finished entering text and the keyboard is aborted with the event of higher priority.</p>"},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"<p>The user used voice as input for the keyboard</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"<p>QWERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"<p>QWERTZ layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"<p>AZERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"<p>SINGLE_KEYPRESS:<br>Each and every User`s keypress must be reported (new notification for every newly entered single symbol).</p>"},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"<p>QUEUE_KEYPRESSES:<br>The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)</p>"},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"<p>RESEND_CURRENT_ENTRY:<br>The whole entry must be reported each and every time the User makes a new keypress<br> (new notification with all previously entered symbols and a newly entered one appended).</p>"},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"<p>English_SA</p>"},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"<p>Hebrew_IL</p>"},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"<p>Romainian_RO</p>"},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"<p>Ukrainian_UA</p>"},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"<p>Indonesian_ID</p>"},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"<p>Vietnamese_VN</p>"},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"<p>Malay_MY</p>"},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"<p>Hindi_IN</p>"},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"<p>Dutch(Flemish)_BE</p>"},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"<p>Greek_GR</p>"},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"<p>Hungarian_HU</p>"},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"<p>Finnish_FI</p>"},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"<p>Slovak_SK</p>"},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"<p>English_US</p>"},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"<p>English - India</p>"},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"<p>Thai - Thailand</p>"},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"<p>Spanish - Mexico</p>"},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"<p>French - Canada</p>"},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"<p>German - Germany</p>"},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"<p>Spanish - Spain</p>"},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"<p>English - Great Britain</p>"},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"<p>Russian - Russia</p>"},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"<p>Turkish - Turkey</p>"},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"<p>Polish - Poland</p>"},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"<p>French - France</p>"},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"<p>Italian - Italy</p>"},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"<p>Swedish - Sweden</p>"},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"<p>Portuguese - Portugal</p>"},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"<p>Dutch (Standard) - Netherlands</p>"},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"<p>English - Australia</p>"},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"<p>Mandarin - China</p>"},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"<p>Mandarin - Taiwan</p>"},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"<p>Japanese - Japan</p>"},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"<p>Arabic - Saudi Arabia</p>"},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"<p>Korean - South Korea</p>"},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"<p>Portuguese - Brazil</p>"},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"<p>Czech - Czech Republic</p>"},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"<p>Danish - Denmark</p>"},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"<p>Norwegian - Norway</p>"},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons.</p>"},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list.</p>"},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"<p>This mode causes the interaction to immediately display a keyboard entry through the HMI.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftHighBeam":{"name":"SDLLightNameFrontLeftHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightHighBeam":{"name":"SDLLightNameFrontRightHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftLowBeam":{"name":"SDLLightNameFrontLeftLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightLowBeam":{"name":"SDLLightNameFrontRightLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftParkingLight":{"name":"SDLLightNameFrontLeftParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightParkingLight":{"name":"SDLLightNameFrontRightParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftFogLight":{"name":"SDLLightNameFrontLeftFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightFogLight":{"name":"SDLLightNameFrontRightFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight":{"name":"SDLLightNameFrontLeftDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight":{"name":"SDLLightNameFrontRightDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftTurnLight":{"name":"SDLLightNameFrontLeftTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightTurnLight":{"name":"SDLLightNameFrontRightTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_Right_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftFogLight":{"name":"SDLLightNameRearLeftFogLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.</p>"},"Constants.html#/c:@SDLLightNameRearRightFogLight":{"name":"SDLLightNameRearRightFogLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTailLight":{"name":"SDLLightNameRearLeftTailLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTailLight":{"name":"SDLLightNameRearRightTailLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftBrakeLight":{"name":"SDLLightNameRearLeftBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightBrakeLight":{"name":"SDLLightNameRearRightBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTurnLight":{"name":"SDLLightNameRearLeftTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTurnLight":{"name":"SDLLightNameRearRightTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRegistrationPlateLight":{"name":"SDLLightNameRearRegistrationPlateLight","abstract":"<p>@abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameHighBeams":{"name":"SDLLightNameHighBeams","abstract":"<p>@abstract Include all high beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameLowBeams":{"name":"SDLLightNameLowBeams","abstract":"<p>@abstract Include all low beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameFogLights":{"name":"SDLLightNameFogLights","abstract":"<p>@abstract Include all fog lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRunningLights":{"name":"SDLLightNameRunningLights","abstract":"<p>@abstract Include all daytime running lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameParkingLights":{"name":"SDLLightNameParkingLights","abstract":"<p>@abstract Include all parking lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameBrakeLights":{"name":"SDLLightNameBrakeLights","abstract":"<p>@abstract Include all brake lights: rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRearReversingLights":{"name":"SDLLightNameRearReversingLights","abstract":"<p>@abstract Represents the Light with name REAR_REVERSING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameSideMarkerLights":{"name":"SDLLightNameSideMarkerLights","abstract":"<p>@abstract Represents the Light with name SIDE_MARKER_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameLeftTurnLights":{"name":"SDLLightNameLeftTurnLights","abstract":"<p>@abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameRightTurnLights":{"name":"SDLLightNameRightTurnLights","abstract":"<p>@abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameHazardLights":{"name":"SDLLightNameHazardLights","abstract":"<p>@abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameAmbientLights":{"name":"SDLLightNameAmbientLights","abstract":"<p>@abstract Represents the Light with name AMBIENT_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameOverHeadLights":{"name":"SDLLightNameOverHeadLights","abstract":"<p>@abstract Represents the Light with name OVERHEAD_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameReadingLights":{"name":"SDLLightNameReadingLights","abstract":"<p>@abstract Represents the Light with name READING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameTrunkLights":{"name":"SDLLightNameTrunkLights","abstract":"<p>@abstract Represents the Light with name TRUNK_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameExteriorFrontLights":{"name":"SDLLightNameExteriorFrontLights","abstract":"<p>@abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearLights":{"name":"SDLLightNameExteriorRearLights","abstract":"<p>@abstract Include exterior lights located at the back of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorLeftLights":{"name":"SDLLightNameExteriorLeftLights","abstract":"<p>@abstract Include exterior lights located at the left side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRightLights":{"name":"SDLLightNameExteriorRightLights","abstract":"<p>@abstract Include exterior lights located at the right side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRearCargoLights":{"name":"SDLLightNameExteriorRearCargoLights","abstract":"<p>@abstract Cargo lamps illuminate the cargo area.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights":{"name":"SDLLightNameExteriorRearTruckBedLights","abstract":"<p>@abstract Truck bed lamps light up the bed of the truck.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTrailerLights":{"name":"SDLLightNameExteriorRearTrailerLights","abstract":"<p>@abstract Trailer lights are lamps mounted on a trailer hitch.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftSpotLights":{"name":"SDLLightNameExteriorLeftSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the left side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightSpotLights":{"name":"SDLLightNameExteriorRightSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the right side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights":{"name":"SDLLightNameExteriorLeftPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightPuddleLights":{"name":"SDLLightNameExteriorRightPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorAllLights":{"name":"SDLLightNameExteriorAllLights","abstract":"<p>@abstract Include all exterior lights around the vehicle.</p>"},"Constants.html#/c:@SDLLightStatusOn":{"name":"SDLLightStatusOn","abstract":"<p>@abstract Light status currently on.</p>"},"Constants.html#/c:@SDLLightStatusOFF":{"name":"SDLLightStatusOFF","abstract":"<p>@abstract Light status currently Off.</p>"},"Constants.html#/c:@SDLLightStatusRampUp":{"name":"SDLLightStatusRampUp","abstract":"<p>@abstract Light status currently RAMP_UP.</p>"},"Constants.html#/c:@SDLLightStatusRampDown":{"name":"SDLLightStatusRampDown","abstract":"<p>@abstract Light status currently RAMP_DOWN.</p>"},"Constants.html#/c:@SDLLightStatusUnknown":{"name":"SDLLightStatusUnknown","abstract":"<p>@abstract Light status currently UNKNOWN.</p>"},"Constants.html#/c:@SDLLightStatusInvalid":{"name":"SDLLightStatusInvalid","abstract":"<p>@abstract Light status currently INVALID.</p>"},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"<p>LockScreen is Optional</p>"},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"<p>LockScreen is Required</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"<p>Maintenance Mode Status : Normal</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"<p>Maintenance Mode Status : Near</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"<p>Maintenance Mode Status : Active</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"<p>Maintenance Mode Status : Feature not present</p>"},"Constants.html#/c:@SDLMassageCushionTopLumbar":{"name":"SDLMassageCushionTopLumbar","abstract":"<p>@abstract TOP LUMBAR cushions of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionMiddleLumbar":{"name":"SDLMassageCushionMiddleLumbar","abstract":"<p>@abstract MIDDLE LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBottomLumbar":{"name":"SDLMassageCushionBottomLumbar","abstract":"<p>@abstract BOTTOM LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBackBolsters":{"name":"SDLMassageCushionBackBolsters","abstract":"<p>@abstract BACK BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionSeatBolsters":{"name":"SDLMassageCushionSeatBolsters","abstract":"<p>@abstract SEAT BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageModeOff":{"name":"SDLMassageModeOff","abstract":"<p>@abstract Massage Mode Status : OFF</p>"},"Constants.html#/c:@SDLMassageModeLow":{"name":"SDLMassageModeLow","abstract":"<p>@abstract Massage Mode Status : LOW</p>"},"Constants.html#/c:@SDLMassageModeHigh":{"name":"SDLMassageModeHigh","abstract":"<p>@abstract Massage Mode Status : HIGH</p>"},"Constants.html#/c:@SDLMassageZoneLumbar":{"name":"SDLMassageZoneLumbar","abstract":"<p>@abstract The back of a multi-contour massage seat. or SEAT_BACK</p>"},"Constants.html#/c:@SDLMassageZoneSeatCushion":{"name":"SDLMassageZoneSeatCushion","abstract":"<p>@abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM</p>"},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"<p>Media clock format: Clock1</p>"},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"<p>Media clock format: Clock2</p>"},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"<p>Media clock format: Clock3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"<p>Media clock format: ClockText1</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"<p>Media clock format: ClockText2</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"<p>Media clock format: ClockText3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"<p>Media clock format: ClockText4</p>"},"Constants.html#/c:@SDLMediaTypeMusic":{"name":"SDLMediaTypeMusic","abstract":"<p>The app will have a media type of music.</p>"},"Constants.html#/c:@SDLMediaTypePodcast":{"name":"SDLMediaTypePodcast","abstract":"<p>The app will have a media type of podcast.</p>"},"Constants.html#/c:@SDLMediaTypeAudiobook":{"name":"SDLMediaTypeAudiobook","abstract":"<p>The app will have a media type of audiobook.</p>"},"Constants.html#/c:@SDLMediaTypeOther":{"name":"SDLMediaTypeOther","abstract":"<p>The app will have a media type of other.</p>"},"Constants.html#/c:@SDLMenuLayoutList":{"name":"SDLMenuLayoutList","abstract":"<p>The menu should be laid out in a scrollable list format with one menu cell below the previous, each is stretched across the view</p>"},"Constants.html#/c:@SDLMenuLayoutTiles":{"name":"SDLMenuLayoutTiles","abstract":"<p>The menu should be laid out in a scrollable tiles format with each menu cell laid out in a square-ish format next to each other horizontally</p>"},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"<p>The song / media title name</p>"},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"<p>The &ldquo;artist&rdquo; of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"<p>The &ldquo;album&rdquo; of the media&quot;</p>"},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"<p>The &ldquo;year&rdquo; that the media was created</p>"},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"<p>The &ldquo;genre&rdquo; of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"<p>The &ldquo;station&rdquo; that the media is playing on</p>"},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"<p>The &ldquo;rating&rdquo; given to the media</p>"},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"<p>The current temperature of the weather information</p>"},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"<p>The high / maximum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"<p>The low / minimum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"<p>A description of the weather for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"<p>The humidity of the weather information for the current period</p>"},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"<p>A SDLModuleType with the value of <em>CLIMATE</em></p>"},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"<p>A SDLModuleType with the value of <em>RADIO</em></p>"},"Constants.html#/c:@SDLModuleTypeSeat":{"name":"SDLModuleTypeSeat","abstract":"<p>A SDLModuleType with the value of <em>SEAT</em></p>"},"Constants.html#/c:@SDLModuleTypeAudio":{"name":"SDLModuleTypeAudio","abstract":"<p>A SDLModuleType with the value of <em>AUDIO</em></p>"},"Constants.html#/c:@SDLModuleTypeLight":{"name":"SDLModuleTypeLight","abstract":"<p>A SDLModuleType with the value of <em>LIGHT</em></p>"},"Constants.html#/c:@SDLModuleTypeHMISettings":{"name":"SDLModuleTypeHMISettings","abstract":"<p>A SDLModuleType with the value of <em>HMI_SETTINGS</em></p>"},"Constants.html#/c:@SDLNavigationActionTurn":{"name":"SDLNavigationActionTurn","abstract":"<p>Using this action plus a supplied direction can give the type of turn.</p>"},"Constants.html#/c:@SDLNavigationActionExit":{"name":"SDLNavigationActionExit","abstract":"<p>A navigation action of exit.</p>"},"Constants.html#/c:@SDLNavigationActionStay":{"name":"SDLNavigationActionStay","abstract":"<p>A navigation action of stay.</p>"},"Constants.html#/c:@SDLNavigationActionMerge":{"name":"SDLNavigationActionMerge","abstract":"<p>A navigation action of merge.</p>"},"Constants.html#/c:@SDLNavigationActionFerry":{"name":"SDLNavigationActionFerry","abstract":"<p>A navigation action of ferry.</p>"},"Constants.html#/c:@SDLNavigationActionCarShuttleTrain":{"name":"SDLNavigationActionCarShuttleTrain","abstract":"<p>A navigation action of car shuttle train.</p>"},"Constants.html#/c:@SDLNavigationActionWaypoint":{"name":"SDLNavigationActionWaypoint","abstract":"<p>A navigation action of waypoint.</p>"},"Constants.html#/c:@SDLNavigationJunctionRegular":{"name":"SDLNavigationJunctionRegular","abstract":"<p>A junction that represents a standard intersection with a single road crossing another.</p>"},"Constants.html#/c:@SDLNavigationJunctionBifurcation":{"name":"SDLNavigationJunctionBifurcation","abstract":"<p>A junction where the road splits off into two paths; a fork in the road.</p>"},"Constants.html#/c:@SDLNavigationJunctionMultiCarriageway":{"name":"SDLNavigationJunctionMultiCarriageway","abstract":"<p>A junction that has multiple intersections and paths.</p>"},"Constants.html#/c:@SDLNavigationJunctionRoundabout":{"name":"SDLNavigationJunctionRoundabout","abstract":"<p>A junction where traffic moves in a single direction around a central, non-traversable point to reach one of the connecting roads.</p>"},"Constants.html#/c:@SDLNavigationJunctionTraversableRoundabout":{"name":"SDLNavigationJunctionTraversableRoundabout","abstract":"<p>Similar to a roundabout, however the center of the roundabout is fully traversable. Also known as a mini-roundabout.</p>"},"Constants.html#/c:@SDLNavigationJunctionJughandle":{"name":"SDLNavigationJunctionJughandle","abstract":"<p>A junction where lefts diverge to the right, then curve to the left, converting a left turn to a crossing maneuver.</p>"},"Constants.html#/c:@SDLNavigationJunctionAllWayYield":{"name":"SDLNavigationJunctionAllWayYield","abstract":"<p>Multiple way intersection that allows traffic to flow based on priority; most commonly right of way and first in, first out.</p>"},"Constants.html#/c:@SDLNavigationJunctionTurnAround":{"name":"SDLNavigationJunctionTurnAround","abstract":"<p>A junction designated for traffic turn arounds.</p>"},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"<p>The key used in all SDL NSNotifications to extract the response or notification from the userinfo dictionary.</p>"},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"<p>Name for a disconnection notification</p>"},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"<p>Name for a connection notification</p>"},"Constants.html#/c:@SDLTransportConnectError":{"name":"SDLTransportConnectError","abstract":"<p>Name for a error during connection notification</p>"},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"<p>Name for a general error notification</p>"},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"<p>Name for an incoming lock screen icon notification</p>"},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"<p>Name for an SDL became ready notification</p>"},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"<p>Name for a notification sent by the user when their CarWindow view has been updated</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"<p>Name for an AddCommand response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"<p>Name for an AddSubMenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"<p>Name for an Alert response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"<p>Name for an AlertManeuver response RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"<p>Name for an ButtonPress response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCancelInteractionResponse":{"name":"SDLDidReceiveCancelInteractionResponse","abstract":"<p>Name for aa CancelInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"<p>Name for a ChangeRegistration response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCloseApplicationResponse":{"name":"SDLDidReceiveCloseApplicationResponse","abstract":"<p>Name for a CloseApplication response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"<p>Name for a CreateInteractionChoiceSet response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateWindowResponse":{"name":"SDLDidReceiveCreateWindowResponse","abstract":"<p>Name for a CreateWindow response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"<p>Name for a DeleteCommand response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"<p>Name for a DeleteFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"<p>Name for a DeleteInteractionChoiceSet response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"<p>Name for a DeleteSubmenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteWindowResponse":{"name":"SDLDidReceiveDeleteWindowResponse","abstract":"<p>Name for a DeleteWindow response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"<p>Name for a DiagnosticMessage response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"<p>Name for a DialNumber response RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"<p>Name for an EncodedSyncPData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"<p>Name for an EndAudioPassThru response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"<p>Name for a Generic response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesResponse":{"name":"SDLDidReceiveGetCloudAppPropertiesResponse","abstract":"<p>Name for a GetCloudAppProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataResponse":{"name":"SDLDidReceiveGetAppServiceDataResponse","abstract":"<p>Name for a GetAppServiceData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"<p>Name for a GetDTCs response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetFileResponse":{"name":"SDLDidReceiveGetFileResponse","abstract":"<p>Name for a GetFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"<p>Name for a GetInteriorVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentResponse","abstract":"<p>Name for a GetInteriorVehicleDataConsent response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"<p>Name for a GetSystemCapabilities response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"<p>Name for a GetVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"<p>Name for a GetWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"<p>Name for a ListFiles response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionResponse":{"name":"SDLDidReceivePerformAppServiceInteractionResponse","abstract":"<p>Name for a PerformAppServiceInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"<p>Name for a PerformAudioPassThru response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"<p>Name for a PerformInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceivePublishAppServiceResponse":{"name":"SDLDidReceivePublishAppServiceResponse","abstract":"<p>Name for a PublishAppService response RPC</p>"},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"<p>Name for a ReceivePutFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"<p>Name for a ReceiveReadDID response RPC</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"<p>Name for a RegisterAppInterface response RPC</p>"},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleResponse":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleResponse","abstract":"<p>Name for a ReleaseInteriorVehicleDataModule response RPC</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"<p>Name for a ResetGlobalProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"<p>Name for a ScrollableMessage response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"<p>Name for a SendHapticData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"<p>Name for a SendLocation response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"<p>Name for a SetAppIcon response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesResponse":{"name":"SDLDidReceiveSetCloudAppPropertiesResponse","abstract":"<p>Name for a SetCloudAppProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"<p>Name for a SetDisplayLayout response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"<p>Name for a SetGlobalProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"<p>Name for a SetInteriorVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"<p>Name for a SetMediaClockTimer response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"<p>Name for a ShowConstantTBT response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"<p>Name for a Show response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowAppMenuResponse":{"name":"SDLDidReceiveShowAppMenuResponse","abstract":"<p>Name for a ShowAppMenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"<p>Name for a Slider response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"<p>Name for a Speak response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"<p>Name for a SubscribeButton response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"<p>Name for a SubscribeVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"<p>Name for a SubscribeWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"<p>Name for a SyncPData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"<p>Name for an UpdateTurnList response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceResponse":{"name":"SDLDidReceiveUnpublishAppServiceResponse","abstract":"<p>Name for an UnpublishAppService response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"<p>Name for an UnregisterAppInterface response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"<p>Name for an UnsubscribeButton response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"<p>Name for an UnsubscribeVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"<p>Name for an UnsubscribeWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandRequest":{"name":"SDLDidReceiveAddCommandRequest","abstract":"<p>Name for an AddCommand request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuRequest":{"name":"SDLDidReceiveAddSubMenuRequest","abstract":"<p>Name for an AddSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertRequest":{"name":"SDLDidReceiveAlertRequest","abstract":"<p>Name for an Alert request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverRequest":{"name":"SDLDidReceiveAlertManeuverRequest","abstract":"<p>Name for an AlertManeuver request RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressRequest":{"name":"SDLDidReceiveButtonPressRequest","abstract":"<p>Name for a ButtonPress request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCancelInteractionRequest":{"name":"SDLDidReceiveCancelInteractionRequest","abstract":"<p>Name for a CancelInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationRequest":{"name":"SDLDidReceiveChangeRegistrationRequest","abstract":"<p>Name for a ChangeRegistration request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCloseApplicationRequest":{"name":"SDLDidReceiveCloseApplicationRequest","abstract":"<p>Name for a CloseApplication request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetRequest":{"name":"SDLDidReceiveCreateInteractionChoiceSetRequest","abstract":"<p>Name for a CreateInteractionChoiceSet request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateWindowRequest":{"name":"SDLDidReceiveCreateWindowRequest","abstract":"<p>Name for a CreateWindow request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandRequest":{"name":"SDLDidReceiveDeleteCommandRequest","abstract":"<p>Name for a DeleteCommand request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileRequest":{"name":"SDLDidReceiveDeleteFileRequest","abstract":"<p>Name for a DeleteFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetRequest":{"name":"SDLDidReceiveDeleteInteractionChoiceSetRequest","abstract":"<p>Name for a DeleteInteractionChoiceSet request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubMenuRequest":{"name":"SDLDidReceiveDeleteSubMenuRequest","abstract":"<p>Name for a DeleteSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteWindowRequest":{"name":"SDLDidReceiveDeleteWindowRequest","abstract":"<p>Name for a DeleteSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageRequest":{"name":"SDLDidReceiveDiagnosticMessageRequest","abstract":"<p>Name for a DiagnosticMessage request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberRequest":{"name":"SDLDidReceiveDialNumberRequest","abstract":"<p>Name for a DialNumberR request RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataRequest":{"name":"SDLDidReceiveEncodedSyncPDataRequest","abstract":"<p>Name for an EncodedSyncPData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruRequest":{"name":"SDLDidReceiveEndAudioPassThruRequest","abstract":"<p>Name for a EndAudioPass request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataRequest":{"name":"SDLDidReceiveGetAppServiceDataRequest","abstract":"<p>Name for a GetAppServiceData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesRequest":{"name":"SDLDidReceiveGetCloudAppPropertiesRequest","abstract":"<p>Name for a GetCloudAppProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsRequest":{"name":"SDLDidReceiveGetDTCsRequest","abstract":"<p>Name for a ReceiveGetDTCs request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetFileRequest":{"name":"SDLDidReceiveGetFileRequest","abstract":"<p>Name for a GetFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataRequest","abstract":"<p>Name for a GetInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentRequest","abstract":"<p>Name for a GetInteriorVehicleDataConsent request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilityRequest":{"name":"SDLDidReceiveGetSystemCapabilityRequest","abstract":"<p>Name for a GetSystemCapability request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataRequest":{"name":"SDLDidReceiveGetVehicleDataRequest","abstract":"<p>Name for a GetVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetWayPointsRequest":{"name":"SDLDidReceiveGetWayPointsRequest","abstract":"<p>Name for a GetWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveListFilesRequest":{"name":"SDLDidReceiveListFilesRequest","abstract":"<p>Name for a ListFiles request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionRequest":{"name":"SDLDidReceivePerformAppServiceInteractionRequest","abstract":"<p>Name for a PerformAppServiceInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruRequest":{"name":"SDLDidReceivePerformAudioPassThruRequest","abstract":"<p>Name for a PerformAudioPassThru request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionRequest":{"name":"SDLDidReceivePerformInteractionRequest","abstract":"<p>Name for a PerformInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceivePublishAppServiceRequest":{"name":"SDLDidReceivePublishAppServiceRequest","abstract":"<p>Name for a PublishAppService request RPC</p>"},"Constants.html#/c:@SDLDidReceivePutFileRequest":{"name":"SDLDidReceivePutFileRequest","abstract":"<p>Name for a PutFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDRequest":{"name":"SDLDidReceiveReadDIDRequest","abstract":"<p>Name for a ReadDID request RPC</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceRequest":{"name":"SDLDidReceiveRegisterAppInterfaceRequest","abstract":"<p>Name for a RegisterAppInterfacr request RPC</p>"},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleRequest":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleRequest","abstract":"<p>Name for a ReleaseInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesRequest":{"name":"SDLDidReceiveResetGlobalPropertiesRequest","abstract":"<p>Name for a ResetGlobalProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageRequest":{"name":"SDLDidReceiveScrollableMessageRequest","abstract":"<p>Name for a ScrollableMessage request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataRequest":{"name":"SDLDidReceiveSendHapticDataRequest","abstract":"<p>Name for a SendHapticData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationRequest":{"name":"SDLDidReceiveSendLocationRequest","abstract":"<p>Name for a SendLocation request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconRequest":{"name":"SDLDidReceiveSetAppIconRequest","abstract":"<p>Name for a SetAppIcon request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesRequest":{"name":"SDLDidReceiveSetCloudAppPropertiesRequest","abstract":"<p>Name for a SetCloudProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutRequest":{"name":"SDLDidReceiveSetDisplayLayoutRequest","abstract":"<p>Name for a SetDisplayLayout request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesRequest":{"name":"SDLDidReceiveSetGlobalPropertiesRequest","abstract":"<p>Name for a SetGlobalProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataRequest":{"name":"SDLDidReceiveSetInteriorVehicleDataRequest","abstract":"<p>Name for a SetInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerRequest":{"name":"SDLDidReceiveSetMediaClockTimerRequest","abstract":"<p>Name for a SetMediaClockTimer request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowRequest":{"name":"SDLDidReceiveShowRequest","abstract":"<p>Name for a Show request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowAppMenuRequest":{"name":"SDLDidReceiveShowAppMenuRequest","abstract":"<p>Name for a ShowAppMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTRequest":{"name":"SDLDidReceiveShowConstantTBTRequest","abstract":"<p>Name for a ShowConstantTBT request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSliderRequest":{"name":"SDLDidReceiveSliderRequest","abstract":"<p>Name for a Slider request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSpeakRequest":{"name":"SDLDidReceiveSpeakRequest","abstract":"<p>Name for a Speak request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonRequest":{"name":"SDLDidReceiveSubscribeButtonRequest","abstract":"<p>Name for a SubscribeButton request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataRequest":{"name":"SDLDidReceiveSubscribeVehicleDataRequest","abstract":"<p>Name for a SubscribeVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest":{"name":"SDLDidReceiveSubscribeWayPointsRequest","abstract":"<p>Name for a ubscribeWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataRequest":{"name":"SDLDidReceiveSyncPDataRequest","abstract":"<p>Name for a SyncPData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestRequest":{"name":"SDLDidReceiveSystemRequestRequest","abstract":"<p>Name for a SystemRequest request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceRequest":{"name":"SDLDidReceiveUnpublishAppServiceRequest","abstract":"<p>Name for an UnpublishAppService request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceRequest":{"name":"SDLDidReceiveUnregisterAppInterfaceRequest","abstract":"<p>Name for an UnregisterAppInterface request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonRequest":{"name":"SDLDidReceiveUnsubscribeButtonRequest","abstract":"<p>Name for an UnsubscribeButton request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataRequest":{"name":"SDLDidReceiveUnsubscribeVehicleDataRequest","abstract":"<p>Name for an UnsubscribeVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWayPointsRequest":{"name":"SDLDidReceiveUnsubscribeWayPointsRequest","abstract":"<p>Name for an UnsubscribeWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListRequest":{"name":"SDLDidReceiveUpdateTurnListRequest","abstract":"<p>Name for an UpdateTurnList request RPC</p>"},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"<p>Name for a DriverDistractionState notification RPC</p>"},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"<p>Name for a HMIStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAppServiceDataNotification":{"name":"SDLDidReceiveAppServiceDataNotification","abstract":"<p>Name for an AppServiceData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"<p>Name for an AppUnregistered notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"<p>Name for an AudioPassThru notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"<p>Name for a ButtonEvent notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"<p>Name for a ButtonPress notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"<p>Name for a Command notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"<p>Name for a EncodedData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"<p>Name for a InteriorVehicleData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"<p>Name for a KeyboardInput notification RPC</p>"},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"<p>Name for a Language notification RPC</p>"},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"<p>Name for a LockScreenStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"<p>Name for a NewHash notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"<p>Name for a VehicleIcon notification RPC</p>"},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"<p>Name for a ChangePermissions notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification":{"name":"SDLDidReceiveRemoteControlStatusNotification","abstract":"<p>Name for a RemoteControlStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemCapabilityUpdatedNotification":{"name":"SDLDidReceiveSystemCapabilityUpdatedNotification","abstract":"<p>Name for a SystemCapability notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"<p>Name for a SystemRequest notification RPC</p>"},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"<p>Name for a TurnByTurnStat notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"<p>Name for a TouchEvent notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"<p>Name for a VehicleData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"<p>Name for a Waypoint notification RPC</p>"},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"<p>Park</p>"},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"<p>Reverse gear</p>"},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"<p>No gear</p>"},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"<p>@abstract: Drive gear</p>"},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"<p>Drive Sport mode</p>"},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"<p>1st gear hold</p>"},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"<p>First gear</p>"},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"<p>Second gear</p>"},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"<p>Third gear</p>"},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"<p>Fourth gear</p>"},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"<p>Fifth gear</p>"},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"<p>Sixth gear</p>"},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"<p>Seventh gear</p>"},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"<p>Eighth gear</p>"},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"<p>Unknown</p>"},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"<p>permission: allowed</p>"},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"<p>permission: disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"<p>permission: user disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"<p>permission: user consent pending</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"<p>An undefined status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"<p>An &ldquo;evaluation in progress&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"<p>A &ldquo;not defined&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"<p>An &ldquo;ok&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"<p>The key is not in the ignition, and the power is off</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"<p>The key is not in the ignition and it was just recently removed</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"<p>The key is not in the ignition, but an approved key is available</p>"},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"<p>We are in a post-accessory power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"<p>The car is in accessory power mode</p>"},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"<p>We are in a post-ignition power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"<p>The ignition is on but the car is not yet running</p>"},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"<p>The ignition is on and the car is running</p>"},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"<p>We are in a crank power situation</p>"},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"<p>A default layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"<p>The default media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"<p>The default non-media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"<p>A media layout containing preset buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"<p>The default navigation layout with a fullscreen map</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"<p>A list layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"<p>A keyboard layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"<p>A layout with a single graphic on the left and text on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"<p>A layout with text on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"<p>A layout with only softbuttons placed in a tile layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"<p>A layout with only soft buttons that only accept text</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"<p>A layout with a single graphic on the left and soft buttons in a tile layout on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"<p>A layout with soft buttons in a tile layout on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"<p>A layout with a single graphic on the left and both text and soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"<p>A layout with both text and soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"<p>A layout with a single graphic on the left and text-only soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"<p>A layout with text-only soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"<p>A layout with a single large graphic and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"<p>A layout with two graphics and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"<p>A layout with only a single large graphic</p>"},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"<p>A prerecorded help prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"<p>A prerecorded initial prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"<p>A prerecorded listen prompt is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"<p>A prerecorded positive indicator noise is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"<p>A prerecorded negative indicator noise is available</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"<p>Currently no source selected</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"<p>USB is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"<p>USB2 is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"<p>Bluetooth Stereo is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"<p>Line in is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"<p>iPod is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"<p>Mobile app is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceCD":{"name":"SDLPrimaryAudioSourceCD","abstract":"<p>@abstract CD is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceAM":{"name":"SDLPrimaryAudioSourceAM","abstract":"<p>@abstract Radio frequency AM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceFM":{"name":"SDLPrimaryAudioSourceFM","abstract":"<p>@abstract Radio frequency FM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceXM":{"name":"SDLPrimaryAudioSourceXM","abstract":"<p>@abstract Radio frequency XM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceDAB":{"name":"SDLPrimaryAudioSourceDAB","abstract":"<p>@abstract Radio frequency DAB is current source</p>"},"Constants.html#/c:@SDLRPCFunctionNameAddCommand":{"name":"SDLRPCFunctionNameAddCommand","abstract":"<p>Function name for an AddCommand RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAddSubMenu":{"name":"SDLRPCFunctionNameAddSubMenu","abstract":"<p>Function name for an AddSubMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAlert":{"name":"SDLRPCFunctionNameAlert","abstract":"<p>Function name for an Alert RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAlertManeuver":{"name":"SDLRPCFunctionNameAlertManeuver","abstract":"<p>Function name for an AlertManeuver RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameButtonPress":{"name":"SDLRPCFunctionNameButtonPress","abstract":"<p>Function name for a ButtonPress RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCancelInteraction":{"name":"SDLRPCFunctionNameCancelInteraction","abstract":"<p>Function name for a CancelInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameChangeRegistration":{"name":"SDLRPCFunctionNameChangeRegistration","abstract":"<p>Function name for a ChangeRegistration RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCloseApplication":{"name":"SDLRPCFunctionNameCloseApplication","abstract":"<p>Function name for a CloseApplication RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCreateInteractionChoiceSet":{"name":"SDLRPCFunctionNameCreateInteractionChoiceSet","abstract":"<p>Function name for a CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteCommand":{"name":"SDLRPCFunctionNameDeleteCommand","abstract":"<p>Function name for a DeleteCommand RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteFile":{"name":"SDLRPCFunctionNameDeleteFile","abstract":"<p>Function name for a DeleteFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteInteractionChoiceSet":{"name":"SDLRPCFunctionNameDeleteInteractionChoiceSet","abstract":"<p>Function name for a DeleteInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteSubMenu":{"name":"SDLRPCFunctionNameDeleteSubMenu","abstract":"<p>Function name for a DeleteSubMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDiagnosticMessage":{"name":"SDLRPCFunctionNameDiagnosticMessage","abstract":"<p>Function name for a DiagnosticMessage RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDialNumber":{"name":"SDLRPCFunctionNameDialNumber","abstract":"<p>Function name for a DialNumber RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameEncodedSyncPData":{"name":"SDLRPCFunctionNameEncodedSyncPData","abstract":"<p>Function name for an CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameEndAudioPassThru":{"name":"SDLRPCFunctionNameEndAudioPassThru","abstract":"<p>Function name for an EndAudioPassThru RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGenericResponse":{"name":"SDLRPCFunctionNameGenericResponse","abstract":"<p>Function name for an GenricResponse Response RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetAppServiceData":{"name":"SDLRPCFunctionNameGetAppServiceData","abstract":"<p>Function name for an CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetDTCs":{"name":"SDLRPCFunctionNameGetDTCs","abstract":"<p>Function name for a GetDTCs RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetFile":{"name":"SDLRPCFunctionNameGetFile","abstract":"<p>Function name for a GetFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetCloudAppProperties":{"name":"SDLRPCFunctionNameGetCloudAppProperties","abstract":"<p>Function name for a GetCloudAppProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleData":{"name":"SDLRPCFunctionNameGetInteriorVehicleData","abstract":"<p>Function name for a GetInteriorVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleDataConsent":{"name":"SDLRPCFunctionNameGetInteriorVehicleDataConsent","abstract":"<p>Function name for a GetInteriorVehicleDataConsent RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetSystemCapability":{"name":"SDLRPCFunctionNameGetSystemCapability","abstract":"<p>Function name for a GetSystemCapability RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetVehicleData":{"name":"SDLRPCFunctionNameGetVehicleData","abstract":"<p>Function name for a GetVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetWayPoints":{"name":"SDLRPCFunctionNameGetWayPoints","abstract":"<p>Function name for a GetWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameListFiles":{"name":"SDLRPCFunctionNameListFiles","abstract":"<p>Function name for a ListFiles RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAppInterfaceUnregistered":{"name":"SDLRPCFunctionNameOnAppInterfaceUnregistered","abstract":"<p>Function name for an OnAppInterfaceUnregistered notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAppServiceData":{"name":"SDLRPCFunctionNameOnAppServiceData","abstract":"<p>Function name for an OnAppServiceData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAudioPassThru":{"name":"SDLRPCFunctionNameOnAudioPassThru","abstract":"<p>Function name for an OnAudioPassThru notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnButtonEvent":{"name":"SDLRPCFunctionNameOnButtonEvent","abstract":"<p>Function name for an OnButtonEvent notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnButtonPress":{"name":"SDLRPCFunctionNameOnButtonPress","abstract":"<p>Function name for an OnButtonPress notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnCommand":{"name":"SDLRPCFunctionNameOnCommand","abstract":"<p>Function name for an OnCommand notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnDriverDistraction":{"name":"SDLRPCFunctionNameOnDriverDistraction","abstract":"<p>Function name for an OnDriverDistraction notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnEncodedSyncPData":{"name":"SDLRPCFunctionNameOnEncodedSyncPData","abstract":"<p>Function name for an OnEncodedSyncPData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnHashChange":{"name":"SDLRPCFunctionNameOnHashChange","abstract":"<p>Function name for an OnHashChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnHMIStatus":{"name":"SDLRPCFunctionNameOnHMIStatus","abstract":"<p>Function name for an OnHMIStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnInteriorVehicleData":{"name":"SDLRPCFunctionNameOnInteriorVehicleData","abstract":"<p>Function name for an OnInteriorVehicleData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnKeyboardInput":{"name":"SDLRPCFunctionNameOnKeyboardInput","abstract":"<p>Function name for an OnKeyboardInput notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnLanguageChange":{"name":"SDLRPCFunctionNameOnLanguageChange","abstract":"<p>Function name for an OnLanguageChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnLockScreenStatus":{"name":"SDLRPCFunctionNameOnLockScreenStatus","abstract":"<p>Function name for an OnLockScreenStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnPermissionsChange":{"name":"SDLRPCFunctionNameOnPermissionsChange","abstract":"<p>Function name for an OnPermissionsChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnRCStatus":{"name":"SDLRPCFunctionNameOnRCStatus","abstract":"<p>Function name for an OnRCStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSyncPData":{"name":"SDLRPCFunctionNameOnSyncPData","abstract":"<p>Function name for an OnSyncPData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSystemCapabilityUpdated":{"name":"SDLRPCFunctionNameOnSystemCapabilityUpdated","abstract":"<p>Function name for an OnSystemCapabilityUpdated notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSystemRequest":{"name":"SDLRPCFunctionNameOnSystemRequest","abstract":"<p>Function name for an OnSystemRequest notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnTBTClientState":{"name":"SDLRPCFunctionNameOnTBTClientState","abstract":"<p>Function name for an OnTBTClientState notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnTouchEvent":{"name":"SDLRPCFunctionNameOnTouchEvent","abstract":"<p>Function name for an OnTouchEvent notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnVehicleData":{"name":"SDLRPCFunctionNameOnVehicleData","abstract":"<p>Function name for an OnVehicleData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnWayPointChange":{"name":"SDLRPCFunctionNameOnWayPointChange","abstract":"<p>Function name for an OnWayPointChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformAppServiceInteraction":{"name":"SDLRPCFunctionNamePerformAppServiceInteraction","abstract":"<p>Function name for a PerformAppServiceInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformAudioPassThru":{"name":"SDLRPCFunctionNamePerformAudioPassThru","abstract":"<p>Function name for a PerformAppServiceInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformInteraction":{"name":"SDLRPCFunctionNamePerformInteraction","abstract":"<p>Function name for a PerformInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePublishAppService":{"name":"SDLRPCFunctionNamePublishAppService","abstract":"<p>Function name for a PublishAppService RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePutFile":{"name":"SDLRPCFunctionNamePutFile","abstract":"<p>Function name for a PutFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReadDID":{"name":"SDLRPCFunctionNameReadDID","abstract":"<p>Function name for a ReadDID RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReleaseInteriorVehicleDataModule":{"name":"SDLRPCFunctionNameReleaseInteriorVehicleDataModule","abstract":"<p>Function name for a ReleaseInteriorVehicleDataModule RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameRegisterAppInterface":{"name":"SDLRPCFunctionNameRegisterAppInterface","abstract":"<p>Function name for a RegisterAppInterface RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReserved":{"name":"SDLRPCFunctionNameReserved","abstract":"<p>Function name for a Reserved RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameResetGlobalProperties":{"name":"SDLRPCFunctionNameResetGlobalProperties","abstract":"<p>Function name for a ResetGlobalProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameScrollableMessage":{"name":"SDLRPCFunctionNameScrollableMessage","abstract":"<p>Function name for a ScrollableMessage RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSendHapticData":{"name":"SDLRPCFunctionNameSendHapticData","abstract":"<p>Function name for a SendHapticData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSendLocation":{"name":"SDLRPCFunctionNameSendLocation","abstract":"<p>Function name for a SendLocation RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetAppIcon":{"name":"SDLRPCFunctionNameSetAppIcon","abstract":"<p>Function name for a SetAppIcon RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetCloudAppProperties":{"name":"SDLRPCFunctionNameSetCloudAppProperties","abstract":"<p>Function name for a SetCloudProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetDisplayLayout":{"name":"SDLRPCFunctionNameSetDisplayLayout","abstract":"<p>Function name for a SetDisplayLayout RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetGlobalProperties":{"name":"SDLRPCFunctionNameSetGlobalProperties","abstract":"<p>Function name for a SetGlobalProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetInteriorVehicleData":{"name":"SDLRPCFunctionNameSetInteriorVehicleData","abstract":"<p>Function name for a SetInteriorVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetMediaClockTimer":{"name":"SDLRPCFunctionNameSetMediaClockTimer","abstract":"<p>Function name for a SetMediaClockTimer RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShow":{"name":"SDLRPCFunctionNameShow","abstract":"<p>Function name for a Show RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShowAppMenu":{"name":"SDLRPCFunctionNameShowAppMenu","abstract":"<p>Function name for a ShowAppMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShowConstantTBT":{"name":"SDLRPCFunctionNameShowConstantTBT","abstract":"<p>Function name for a ShowConstantTBT RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSlider":{"name":"SDLRPCFunctionNameSlider","abstract":"<p>Function name for a Slider RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSpeak":{"name":"SDLRPCFunctionNameSpeak","abstract":"<p>Function name for a Speak RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeButton":{"name":"SDLRPCFunctionNameSubscribeButton","abstract":"<p>Function name for a SubscribeButton RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeVehicleData":{"name":"SDLRPCFunctionNameSubscribeVehicleData","abstract":"<p>Function name for a SubscribeVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeWayPoints":{"name":"SDLRPCFunctionNameSubscribeWayPoints","abstract":"<p>Function name for a SubscribeWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSyncPData":{"name":"SDLRPCFunctionNameSyncPData","abstract":"<p>Function name for a SyncPData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSystemRequest":{"name":"SDLRPCFunctionNameSystemRequest","abstract":"<p>Function name for a SystemRequest RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnpublishAppService":{"name":"SDLRPCFunctionNameUnpublishAppService","abstract":"<p>Function name for an UnpublishAppService RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnregisterAppInterface":{"name":"SDLRPCFunctionNameUnregisterAppInterface","abstract":"<p>Function name for an UnregisterAppInterface RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeButton":{"name":"SDLRPCFunctionNameUnsubscribeButton","abstract":"<p>Function name for an UnsubscribeButton RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeVehicleData":{"name":"SDLRPCFunctionNameUnsubscribeVehicleData","abstract":"<p>Function name for an UnsubscribeVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeWayPoints":{"name":"SDLRPCFunctionNameUnsubscribeWayPoints","abstract":"<p>Function name for an UnsubscribeWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUpdateTurnList":{"name":"SDLRPCFunctionNameUpdateTurnList","abstract":"<p>Function name for an UpdateTurnList RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCreateWindow":{"name":"SDLRPCFunctionNameCreateWindow","abstract":"<p>Function name for a CreateWindow RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteWindow":{"name":"SDLRPCFunctionNameDeleteWindow","abstract":"<p>Function name for a DeleteWindow RPC</p>"},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"<p>Represents AM radio band</p>"},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"<p>Represents FM radio band</p>"},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"<p>Represents XM radio band</p>"},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"<p>Represents Radio state as ACQUIRING</p>"},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"<p>Represents Radio state as ACQUIRED</p>"},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"<p>Represents Radio state as MULTICAST</p>"},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"<p>Represents Radio state as NOT_FOUND</p>"},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"<p>An HTTP request</p>"},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"<p>A file resumption request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"<p>An authentication request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"<p>An authentication challenge</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"<p>An authentication acknowledgment</p>"},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"<p>An proprietary formatted request</p>"},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"<p>An Query Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"<p>A Launch Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"<p>The URL for a lock screen icon</p>"},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"<p>A traffic message channel request</p>"},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"<p>A driver profile request</p>"},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"<p>A voice search request</p>"},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"<p>A navigation request</p>"},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"<p>A phone request</p>"},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"<p>A climate request</p>"},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"<p>A settings request</p>"},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"<p>A vehicle diagnostics request</p>"},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"<p>An emergency request</p>"},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"<p>A media request</p>"},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"<p>A firmware over-the-air request</p>"},"Constants.html#/c:@SDLRequestTypeOEMSpecific":{"name":"SDLRequestTypeOEMSpecific","abstract":"<p>A request that is OEM specific using the <code>RequestSubType</code> in SystemRequest</p>"},"Constants.html#/c:@SDLRequestTypeIconURL":{"name":"SDLRequestTypeIconURL","abstract":"<p>A request for an icon url</p>"},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"<p>The request succeeded</p>"},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"<p>The request contained invalid data</p>"},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"<p>The request had a string containing too many characters</p>"},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"<p>The request is not supported by the IVI unit implementing SDL</p>"},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"<p>The system could not process the request because the necessary memory couldn&rsquo;t be allocated</p>"},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"<p>There are too many requests pending (means that the response has not been delivered yet).</p>"},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"<p>One of the provided IDs is not valid.</p>"},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"<p>The provided name or synonym is a duplicate of some already-defined name or synonym.</p>"},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"<p>There are already too many registered applications.</p>"},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"<p>RegisterAppInterface has been called, but this app is already registered</p>"},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"<p>The Head Unit doesn&rsquo;t support the SDL version that is requested by the mobile application.</p>"},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"<p>The requested language is currently not supported. This might be because of a mismatch of the currently active language on the head unit and the requested language.</p>"},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"<p>A command can not be executed because no application has been registered with RegisterApplication.</p>"},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"<p>The data may not be changed, because it is currently in use. For example when trying to delete a choice set that is currently involved in an interaction.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"<p>The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"<p>The requested vehicle data is not available on this vehicle or is not published.</p>"},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"<p>The requested command was rejected, e.g. because the mobile app is in background and cannot perform any HMI commands, or an HMI command (e.g. Speak) is rejected because a higher priority HMI command (e.g. Alert) is playing.</p>"},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"<p>A command was aborted, e.g. due to user interaction (user pressed button), or an HMI command (e.g. Speak) is aborted because a higher priority HMI command (e.g. Alert) was requested.</p>"},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"<p>A command was ignored, because the intended result is already in effect. For example, SetMediaClockTimer was used to pause the media clock although the clock is paused already.</p>"},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"<p>A button that was requested for subscription is not supported under the current system.</p>"},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"<p>A specified file could not be found on the head unit.</p>"},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"<p>Provided data is valid but something went wrong in the lower layers.</p>"},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"<p>RPC is not authorized in local policy table.</p>"},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"<p>RPC is included in a functional group explicitly blocked by the user.</p>"},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"<p>Overlay reached the maximum timeout and closed.</p>"},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"<p>User selected to Cancel Route.</p>"},"Constants.html#/c:@SDLResultCorruptedData":{"name":"SDLResultCorruptedData","abstract":"<p>The data sent failed to pass CRC check in receiver end.</p>"},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"<p>The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.</p>"},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"<p>The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.</p>"},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"<p>The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.</p>"},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"<p>The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.</p>"},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"<p>The certificate provided during authentication is invalid.</p>"},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"<p>The certificate provided during authentication is expired.</p>"},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"<p>The provided hash ID does not match the hash of the current set of registered data or the core could not resume the previous data.</p>"},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"<p>The requested data is not available on this vehicle or is not published for the connected app.</p>"},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"<p>The requested data is read only thus cannot be change via remote control .</p>"},"Constants.html#/c:@SDLResultEncryptionNeeded":{"name":"SDLResultEncryptionNeeded","abstract":"<p>The RPC request needs to be encrypted.</p>"},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"<p>Sampling rate of 8 kHz</p>"},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"<p>Sampling rate of 16 kHz</p>"},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"<p>Sampling rate of 22 kHz</p>"},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"<p>Sampling rate of 44 kHz</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeSave":{"name":"SDLSeatMemoryActionTypeSave","abstract":"<p>@abstract Save current seat postions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeRestore":{"name":"SDLSeatMemoryActionTypeRestore","abstract":"<p>@abstract Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeNone":{"name":"SDLSeatMemoryActionTypeNone","abstract":"<p>@abstract No action to be performed.</p>"},"Constants.html#/c:@SDLServiceUpdatePublished":{"name":"SDLServiceUpdatePublished","abstract":"<p>The service has just been published with the module and once activated to the primary service of its type, it will be ready for possible consumption.</p>"},"Constants.html#/c:@SDLServiceUpdateRemoved":{"name":"SDLServiceUpdateRemoved","abstract":"<p>The service has just been unpublished with the module and is no longer accessible.</p>"},"Constants.html#/c:@SDLServiceUpdateActivated":{"name":"SDLServiceUpdateActivated","abstract":"<p>The service is activated as the primary service of this type. All requests dealing with this service type will be handled by this service.</p>"},"Constants.html#/c:@SDLServiceUpdateDeactivated":{"name":"SDLServiceUpdateDeactivated","abstract":"<p>The service has been deactivated as the primary service of its type.</p>"},"Constants.html#/c:@SDLServiceUpdateManifestUpdate":{"name":"SDLServiceUpdateManifestUpdate","abstract":"<p>The service has updated its manifest. This could imply updated capabilities.</p>"},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"<p>Text kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"<p>Image kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"<p>Both (Text &amp; Image) kind Softbutton</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"<p>The SDL platform can speak text phrases.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"<p>The SDL platform can speak SAPI Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"<p>The SDL platform can speak LHPlus Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"<p>The SDL platform can speak Prerecorded indicators and prompts.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"<p>The SDL platform can speak Silence.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesFile":{"name":"SDLSpeechCapabilitiesFile","abstract":"<p>The SDL platform can play a file</p>"},"Constants.html#/c:@SDLStaticIconNameAcceptCall":{"name":"SDLStaticIconNameAcceptCall","abstract":"<p>Static icon accept call / active phone call in progress / initiate a phone call</p>"},"Constants.html#/c:@SDLStaticIconNameAddWaypoint":{"name":"SDLStaticIconNameAddWaypoint","abstract":"<p>Static icon add waypoint</p>"},"Constants.html#/c:@SDLStaticIconNameAlbum":{"name":"SDLStaticIconNameAlbum","abstract":"<p>Static icon album</p>"},"Constants.html#/c:@SDLStaticIconNameAmbientLighting":{"name":"SDLStaticIconNameAmbientLighting","abstract":"<p>Static icon ambient lighting</p>"},"Constants.html#/c:@SDLStaticIconNameArrowNorth":{"name":"SDLStaticIconNameArrowNorth","abstract":"<p>Static icon arrow - north</p>"},"Constants.html#/c:@SDLStaticIconNameAudioMute":{"name":"SDLStaticIconNameAudioMute","abstract":"<p>Static icon audio mute</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookEpisode":{"name":"SDLStaticIconNameAudiobookEpisode","abstract":"<p>Static icon audiobook episode</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookNarrator":{"name":"SDLStaticIconNameAudiobookNarrator","abstract":"<p>Static icon audiobook narrator</p>"},"Constants.html#/c:@SDLStaticIconNameAuxillaryAudio":{"name":"SDLStaticIconNameAuxillaryAudio","abstract":"<p>Static icon auxillary audio</p>"},"Constants.html#/c:@SDLStaticIconNameBack":{"name":"SDLStaticIconNameBack","abstract":"<p>Static icon back / return</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5":{"name":"SDLStaticIconNameBatteryCapacity0Of5","abstract":"<p>Static icon battery capacity 0 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5":{"name":"SDLStaticIconNameBatteryCapacity1Of5","abstract":"<p>Static icon battery capacity 1 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5":{"name":"SDLStaticIconNameBatteryCapacity2Of5","abstract":"<p>Static icon battery capacity 2 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5":{"name":"SDLStaticIconNameBatteryCapacity3Of5","abstract":"<p>Static icon battery capacity 3 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5":{"name":"SDLStaticIconNameBatteryCapacity4Of5","abstract":"<p>Static icon battery capacity 4 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5":{"name":"SDLStaticIconNameBatteryCapacity5Of5","abstract":"<p>Static icon battery capacity 5 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource":{"name":"SDLStaticIconNameBluetoothAudioSource","abstract":"<p>Static icon bluetooth audio source</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth1":{"name":"SDLStaticIconNameBluetooth1","abstract":"<p>Static icon bluetooth1</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth2":{"name":"SDLStaticIconNameBluetooth2","abstract":"<p>Static icon bluetooth2</p>"},"Constants.html#/c:@SDLStaticIconNameBrowse":{"name":"SDLStaticIconNameBrowse","abstract":"<p>Static icon browse</p>"},"Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode":{"name":"SDLStaticIconNameCellPhoneInRoamingMode","abstract":"<p>Static icon cell phone in roaming mode</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength0Of5Bars","abstract":"<p>Static icon cell service signal strength 0 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength1Of5Bars","abstract":"<p>Static icon cell service signal strength 1 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength2Of5Bars","abstract":"<p>Static icon cell service signal strength 2 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength3Of5Bars","abstract":"<p>Static icon cell service signal strength 3 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength4Of5Bars","abstract":"<p>Static icon cell service signal strength 4 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength5Of5Bars","abstract":"<p>Static icon cell service signal strength 5 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneLeft":{"name":"SDLStaticIconNameChangeLaneLeft","abstract":"<p>Static icon change lane left</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneRight":{"name":"SDLStaticIconNameChangeLaneRight","abstract":"<p>Static icon change lane right</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxChecked":{"name":"SDLStaticIconNameCheckBoxChecked","abstract":"<p>Static icon check box checked</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked":{"name":"SDLStaticIconNameCheckBoxUnchecked","abstract":"<p>Static icon check box unchecked</p>"},"Constants.html#/c:@SDLStaticIconNameClimate":{"name":"SDLStaticIconNameClimate","abstract":"<p>Static icon climate</p>"},"Constants.html#/c:@SDLStaticIconNameClock":{"name":"SDLStaticIconNameClock","abstract":"<p>Static icon clock</p>"},"Constants.html#/c:@SDLStaticIconNameCompose":{"name":"SDLStaticIconNameCompose","abstract":"<p>Static icon compose (e.g. message)</p>"},"Constants.html#/c:@SDLStaticIconNameContact":{"name":"SDLStaticIconNameContact","abstract":"<p>Static icon contact / person</p>"},"Constants.html#/c:@SDLStaticIconNameContinue":{"name":"SDLStaticIconNameContinue","abstract":"<p>Static icon continue</p>"},"Constants.html#/c:@SDLStaticIconNameDash":{"name":"SDLStaticIconNameDash","abstract":"<p>Static icon dash / bullet point</p>"},"Constants.html#/c:@SDLStaticIconNameDate":{"name":"SDLStaticIconNameDate","abstract":"<p>Static icon date / calendar</p>"},"Constants.html#/c:@SDLStaticIconNameDelete":{"name":"SDLStaticIconNameDelete","abstract":"<p>Static icon delete/remove - trash</p>"},"Constants.html#/c:@SDLStaticIconNameDestination":{"name":"SDLStaticIconNameDestination","abstract":"<p>Static icon destination</p>"},"Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead":{"name":"SDLStaticIconNameDestinationFerryAhead","abstract":"<p>Static icon destination ferry ahead</p>"},"Constants.html#/c:@SDLStaticIconNameEbookmark":{"name":"SDLStaticIconNameEbookmark","abstract":"<p>Static icon ebookmark (e.g. message, feed)</p>"},"Constants.html#/c:@SDLStaticIconNameEmpty":{"name":"SDLStaticIconNameEmpty","abstract":"<p>Static icon empty (i.e. no image)</p>"},"Constants.html#/c:@SDLStaticIconNameEndCall":{"name":"SDLStaticIconNameEndCall","abstract":"<p>Static icon end call / reject call</p>"},"Constants.html#/c:@SDLStaticIconNameFail":{"name":"SDLStaticIconNameFail","abstract":"<p>Static icon fail / X</p>"},"Constants.html#/c:@SDLStaticIconNameFastForward30Secs":{"name":"SDLStaticIconNameFastForward30Secs","abstract":"<p>Static icon fast forward 30 secs</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteHeart":{"name":"SDLStaticIconNameFavoriteHeart","abstract":"<p>Static icon favorite / heart</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteStar":{"name":"SDLStaticIconNameFavoriteStar","abstract":"<p>Static icon favorite / star</p>"},"Constants.html#/c:@SDLStaticIconNameFaxNumber":{"name":"SDLStaticIconNameFaxNumber","abstract":"<p>Static icon fax number</p>"},"Constants.html#/c:@SDLStaticIconNameFilename":{"name":"SDLStaticIconNameFilename","abstract":"<p>Static icon filename</p>"},"Constants.html#/c:@SDLStaticIconNameFilter":{"name":"SDLStaticIconNameFilter","abstract":"<p>Static icon filter / search</p>"},"Constants.html#/c:@SDLStaticIconNameFolder":{"name":"SDLStaticIconNameFolder","abstract":"<p>Static icon folder</p>"},"Constants.html#/c:@SDLStaticIconNameFuelPrices":{"name":"SDLStaticIconNameFuelPrices","abstract":"<p>Static icon fuel prices</p>"},"Constants.html#/c:@SDLStaticIconNameFullMap":{"name":"SDLStaticIconNameFullMap","abstract":"<p>Static icon full map</p>"},"Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber":{"name":"SDLStaticIconNameGenericPhoneNumber","abstract":"<p>Static icon generic phone number</p>"},"Constants.html#/c:@SDLStaticIconNameGenre":{"name":"SDLStaticIconNameGenre","abstract":"<p>Static icon genre</p>"},"Constants.html#/c:@SDLStaticIconNameGlobalKeyboard":{"name":"SDLStaticIconNameGlobalKeyboard","abstract":"<p>Static icon global keyboard</p>"},"Constants.html#/c:@SDLStaticIconNameHighwayExitInformation":{"name":"SDLStaticIconNameHighwayExitInformation","abstract":"<p>Static icon highway exit information</p>"},"Constants.html#/c:@SDLStaticIconNameHomePhoneNumber":{"name":"SDLStaticIconNameHomePhoneNumber","abstract":"<p>Static icon home phone number</p>"},"Constants.html#/c:@SDLStaticIconNameHyperlink":{"name":"SDLStaticIconNameHyperlink","abstract":"<p>Static icon hyperlink</p>"},"Constants.html#/c:@SDLStaticIconNameID3TagUnknown":{"name":"SDLStaticIconNameID3TagUnknown","abstract":"<p>Static icon ID3 tag unknown</p>"},"Constants.html#/c:@SDLStaticIconNameIncomingCalls":{"name":"SDLStaticIconNameIncomingCalls","abstract":"<p>Static icon incoming calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNameInformation":{"name":"SDLStaticIconNameInformation","abstract":"<p>Static icon information</p>"},"Constants.html#/c:@SDLStaticIconNameIPodMediaSource":{"name":"SDLStaticIconNameIPodMediaSource","abstract":"<p>Static icon IPOD media source</p>"},"Constants.html#/c:@SDLStaticIconNameJoinCalls":{"name":"SDLStaticIconNameJoinCalls","abstract":"<p>Static icon join calls</p>"},"Constants.html#/c:@SDLStaticIconNameKeepLeft":{"name":"SDLStaticIconNameKeepLeft","abstract":"<p>Static icon keep left</p>"},"Constants.html#/c:@SDLStaticIconNameKeepRight":{"name":"SDLStaticIconNameKeepRight","abstract":"<p>Static icon keep right</p>"},"Constants.html#/c:@SDLStaticIconNameKey":{"name":"SDLStaticIconNameKey","abstract":"<p>Static icon key / keycode</p>"},"Constants.html#/c:@SDLStaticIconNameLeft":{"name":"SDLStaticIconNameLeft","abstract":"<p>Static icon left</p>"},"Constants.html#/c:@SDLStaticIconNameLeftArrow":{"name":"SDLStaticIconNameLeftArrow","abstract":"<p>Static icon left arrow / back</p>"},"Constants.html#/c:@SDLStaticIconNameLeftExit":{"name":"SDLStaticIconNameLeftExit","abstract":"<p>Static icon left exit</p>"},"Constants.html#/c:@SDLStaticIconNameLineInAudioSource":{"name":"SDLStaticIconNameLineInAudioSource","abstract":"<p>Static icon LINE IN audio source</p>"},"Constants.html#/c:@SDLStaticIconNameLocked":{"name":"SDLStaticIconNameLocked","abstract":"<p>Static icon locked</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow":{"name":"SDLStaticIconNameMediaControlLeftArrow","abstract":"<p>Static icon media control - left arrow</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRecording":{"name":"SDLStaticIconNameMediaControlRecording","abstract":"<p>Static icon media control - recording</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow":{"name":"SDLStaticIconNameMediaControlRightArrow","abstract":"<p>Static icon media control - right arrow</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlStop":{"name":"SDLStaticIconNameMediaControlStop","abstract":"<p>Static icon media control - stop (e.g. streaming)</p>"},"Constants.html#/c:@SDLStaticIconNameMicrophone":{"name":"SDLStaticIconNameMicrophone","abstract":"<p>Static icon microphone</p>"},"Constants.html#/c:@SDLStaticIconNameMissedCalls":{"name":"SDLStaticIconNameMissedCalls","abstract":"<p>Static icon missed calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber":{"name":"SDLStaticIconNameMobilePhoneNumber","abstract":"<p>Static icon mobile phone number</p>"},"Constants.html#/c:@SDLStaticIconNameMoveDown":{"name":"SDLStaticIconNameMoveDown","abstract":"<p>Static icon move down / download</p>"},"Constants.html#/c:@SDLStaticIconNameMoveUp":{"name":"SDLStaticIconNameMoveUp","abstract":"<p>Static icon move up</p>"},"Constants.html#/c:@SDLStaticIconNameMP3TagArtist":{"name":"SDLStaticIconNameMP3TagArtist","abstract":"<p>Static icon MP3 tag artist</p>"},"Constants.html#/c:@SDLStaticIconNameNavigation":{"name":"SDLStaticIconNameNavigation","abstract":"<p>Static icon navigation / navigation settings</p>"},"Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection":{"name":"SDLStaticIconNameNavigationCurrentDirection","abstract":"<p>Static icon navigation current direction</p>"},"Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown":{"name":"SDLStaticIconNameNegativeRatingThumbsDown","abstract":"<p>Static icon negative rating - thumbs down</p>"},"Constants.html#/c:@SDLStaticIconNameNew":{"name":"SDLStaticIconNameNew","abstract":"<p>Static icon new/unread text message/email</p>"},"Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber":{"name":"SDLStaticIconNameOfficePhoneNumber","abstract":"<p>Static icon office phone number / work phone number</p>"},"Constants.html#/c:@SDLStaticIconNameOpened":{"name":"SDLStaticIconNameOpened","abstract":"<p>Static icon opened/read text message/email</p>"},"Constants.html#/c:@SDLStaticIconNameOrigin":{"name":"SDLStaticIconNameOrigin","abstract":"<p>Static icon origin / nearby locale / current position</p>"},"Constants.html#/c:@SDLStaticIconNameOutgoingCalls":{"name":"SDLStaticIconNameOutgoingCalls","abstract":"<p>Static icon outgoing calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNamePause":{"name":"SDLStaticIconNamePause","abstract":"<p>Static icon play / pause - pause active</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall1":{"name":"SDLStaticIconNamePhoneCall1","abstract":"<p>Static icon phone call 1</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall2":{"name":"SDLStaticIconNamePhoneCall2","abstract":"<p>Static icon phone call 2</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneDevice":{"name":"SDLStaticIconNamePhoneDevice","abstract":"<p>Static icon phone device</p>"},"Constants.html#/c:@SDLStaticIconNamePhonebook":{"name":"SDLStaticIconNamePhonebook","abstract":"<p>Static icon phonebook</p>"},"Constants.html#/c:@SDLStaticIconNamePhoto":{"name":"SDLStaticIconNamePhoto","abstract":"<p>Static icon photo / picture</p>"},"Constants.html#/c:@SDLStaticIconNamePlay":{"name":"SDLStaticIconNamePlay","abstract":"<p>Static icon play / pause - play active</p>"},"Constants.html#/c:@SDLStaticIconNamePlaylist":{"name":"SDLStaticIconNamePlaylist","abstract":"<p>Static icon playlist</p>"},"Constants.html#/c:@SDLStaticIconNamePopUp":{"name":"SDLStaticIconNamePopUp","abstract":"<p>Static icon pop-up</p>"},"Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp":{"name":"SDLStaticIconNamePositiveRatingThumbsUp","abstract":"<p>Static icon positive rating - thumbs up</p>"},"Constants.html#/c:@SDLStaticIconNamePower":{"name":"SDLStaticIconNamePower","abstract":"<p>Static icon power</p>"},"Constants.html#/c:@SDLStaticIconNamePrimaryPhone":{"name":"SDLStaticIconNamePrimaryPhone","abstract":"<p>Static icon primary phone (favorite)</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonChecked":{"name":"SDLStaticIconNameRadioButtonChecked","abstract":"<p>Static icon radio button checked</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked":{"name":"SDLStaticIconNameRadioButtonUnchecked","abstract":"<p>Static icon radio button unchecked</p>"},"Constants.html#/c:@SDLStaticIconNameRecentCalls":{"name":"SDLStaticIconNameRecentCalls","abstract":"<p>Static icon recent calls / history</p>"},"Constants.html#/c:@SDLStaticIconNameRecentDestinations":{"name":"SDLStaticIconNameRecentDestinations","abstract":"<p>Static icon recent destinations</p>"},"Constants.html#/c:@SDLStaticIconNameRedo":{"name":"SDLStaticIconNameRedo","abstract":"<p>Static icon redo</p>"},"Constants.html#/c:@SDLStaticIconNameRefresh":{"name":"SDLStaticIconNameRefresh","abstract":"<p>Static icon refresh</p>"},"Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine":{"name":"SDLStaticIconNameRemoteDiagnosticsCheckEngine","abstract":"<p>Static icon remote diagnostics - check engine</p>"},"Constants.html#/c:@SDLStaticIconNameRendered911Assist":{"name":"SDLStaticIconNameRendered911Assist","abstract":"<p>Static icon rendered 911 assist / emergency assistance</p>"},"Constants.html#/c:@SDLStaticIconNameRepeat":{"name":"SDLStaticIconNameRepeat","abstract":"<p>Static icon repeat</p>"},"Constants.html#/c:@SDLStaticIconNameRepeatPlay":{"name":"SDLStaticIconNameRepeatPlay","abstract":"<p>Static icon repeat play</p>"},"Constants.html#/c:@SDLStaticIconNameReply":{"name":"SDLStaticIconNameReply","abstract":"<p>Static icon reply</p>"},"Constants.html#/c:@SDLStaticIconNameRewind30Secs":{"name":"SDLStaticIconNameRewind30Secs","abstract":"<p>Static icon rewind 30 secs</p>"},"Constants.html#/c:@SDLStaticIconNameRight":{"name":"SDLStaticIconNameRight","abstract":"<p>Static icon right</p>"},"Constants.html#/c:@SDLStaticIconNameRightExit":{"name":"SDLStaticIconNameRightExit","abstract":"<p>Static icon right exit</p>"},"Constants.html#/c:@SDLStaticIconNameRingtones":{"name":"SDLStaticIconNameRingtones","abstract":"<p>Static icon ringtones</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1":{"name":"SDLStaticIconNameRoundaboutLeftHand1","abstract":"<p>Static icon roundabout left hand 1</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2":{"name":"SDLStaticIconNameRoundaboutLeftHand2","abstract":"<p>Static icon roundabout left hand 2</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3":{"name":"SDLStaticIconNameRoundaboutLeftHand3","abstract":"<p>Static icon roundabout left hand 3</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4":{"name":"SDLStaticIconNameRoundaboutLeftHand4","abstract":"<p>Static icon roundabout left hand 4</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5":{"name":"SDLStaticIconNameRoundaboutLeftHand5","abstract":"<p>Static icon roundabout left hand 5</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6":{"name":"SDLStaticIconNameRoundaboutLeftHand6","abstract":"<p>Static icon roundabout left hand 6</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7":{"name":"SDLStaticIconNameRoundaboutLeftHand7","abstract":"<p>Static icon roundabout left hand 7</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1":{"name":"SDLStaticIconNameRoundaboutRightHand1","abstract":"<p>Static icon roundabout right hand 1</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2":{"name":"SDLStaticIconNameRoundaboutRightHand2","abstract":"<p>Static icon roundabout right hand 2</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3":{"name":"SDLStaticIconNameRoundaboutRightHand3","abstract":"<p>Static icon roundabout right hand 3</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4":{"name":"SDLStaticIconNameRoundaboutRightHand4","abstract":"<p>Static icon roundabout right hand 4</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5":{"name":"SDLStaticIconNameRoundaboutRightHand5","abstract":"<p>Static icon roundabout right hand 5</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6":{"name":"SDLStaticIconNameRoundaboutRightHand6","abstract":"<p>Static icon roundabout right hand 6</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7":{"name":"SDLStaticIconNameRoundaboutRightHand7","abstract":"<p>Static icon roundabout right hand 7</p>"},"Constants.html#/c:@SDLStaticIconNameRSS":{"name":"SDLStaticIconNameRSS","abstract":"<p>Static icon RSS</p>"},"Constants.html#/c:@SDLStaticIconNameSettings":{"name":"SDLStaticIconNameSettings","abstract":"<p>Static icon settings / menu</p>"},"Constants.html#/c:@SDLStaticIconNameSharpLeft":{"name":"SDLStaticIconNameSharpLeft","abstract":"<p>Static icon sharp left</p>"},"Constants.html#/c:@SDLStaticIconNameSharpRight":{"name":"SDLStaticIconNameSharpRight","abstract":"<p>Static icon sharp right</p>"},"Constants.html#/c:@SDLStaticIconNameShow":{"name":"SDLStaticIconNameShow","abstract":"<p>Static icon show</p>"},"Constants.html#/c:@SDLStaticIconNameShufflePlay":{"name":"SDLStaticIconNameShufflePlay","abstract":"<p>Static icon shuffle play</p>"},"Constants.html#/c:@SDLStaticIconNameSkiPlaces":{"name":"SDLStaticIconNameSkiPlaces","abstract":"<p>Static icon ski places / elevation / altitude</p>"},"Constants.html#/c:@SDLStaticIconNameSlightLeft":{"name":"SDLStaticIconNameSlightLeft","abstract":"<p>Static icon slight left</p>"},"Constants.html#/c:@SDLStaticIconNameSlightRight":{"name":"SDLStaticIconNameSlightRight","abstract":"<p>Static icon slight right</p>"},"Constants.html#/c:@SDLStaticIconNameSmartphone":{"name":"SDLStaticIconNameSmartphone","abstract":"<p>Static icon smartphone</p>"},"Constants.html#/c:@SDLStaticIconNameSortList":{"name":"SDLStaticIconNameSortList","abstract":"<p>Static icon sort list</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0":{"name":"SDLStaticIconNameSpeedDialNumbersNumber0","abstract":"<p>Static icon speed dial numbers - number 0</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1":{"name":"SDLStaticIconNameSpeedDialNumbersNumber1","abstract":"<p>Static icon speed dial numbers - number 1</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2":{"name":"SDLStaticIconNameSpeedDialNumbersNumber2","abstract":"<p>Static icon speed dial numbers - number 2</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3":{"name":"SDLStaticIconNameSpeedDialNumbersNumber3","abstract":"<p>Static icon speed dial numbers - number 3</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4":{"name":"SDLStaticIconNameSpeedDialNumbersNumber4","abstract":"<p>Static icon speed dial numbers - number 4</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5":{"name":"SDLStaticIconNameSpeedDialNumbersNumber5","abstract":"<p>Static icon speed dial numbers - number 5</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6":{"name":"SDLStaticIconNameSpeedDialNumbersNumber6","abstract":"<p>Static icon speed dial numbers - number 6</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7":{"name":"SDLStaticIconNameSpeedDialNumbersNumber7","abstract":"<p>Static icon speed dial numbers - number 7</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8":{"name":"SDLStaticIconNameSpeedDialNumbersNumber8","abstract":"<p>Static icon speed dial numbers - number 8</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9":{"name":"SDLStaticIconNameSpeedDialNumbersNumber9","abstract":"<p>Static icon speed dial numbers - number 9</p>"},"Constants.html#/c:@SDLStaticIconNameSuccess":{"name":"SDLStaticIconNameSuccess","abstract":"<p>Static icon success / check</p>"},"Constants.html#/c:@SDLStaticIconNameTrackTitle":{"name":"SDLStaticIconNameTrackTitle","abstract":"<p>Static icon track title / song title</p>"},"Constants.html#/c:@SDLStaticIconNameTrafficReport":{"name":"SDLStaticIconNameTrafficReport","abstract":"<p>Static icon traffic report</p>"},"Constants.html#/c:@SDLStaticIconNameTurnList":{"name":"SDLStaticIconNameTurnList","abstract":"<p>Static icon turn list</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic":{"name":"SDLStaticIconNameUTurnLeftTraffic","abstract":"<p>Static icon u-turn left traffic</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic":{"name":"SDLStaticIconNameUTurnRightTraffic","abstract":"<p>Static icon u-turn right traffic</p>"},"Constants.html#/c:@SDLStaticIconNameUndo":{"name":"SDLStaticIconNameUndo","abstract":"<p>Static icon undo</p>"},"Constants.html#/c:@SDLStaticIconNameUnlocked":{"name":"SDLStaticIconNameUnlocked","abstract":"<p>Static icon unlocked</p>"},"Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource":{"name":"SDLStaticIconNameUSBMediaAudioSource","abstract":"<p>Static icon USB media audio source</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo1","abstract":"<p>Static icon voice control scrollbar - list item no. 1</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo2","abstract":"<p>Static icon voice control scrollbar - list item no. 2</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo3","abstract":"<p>Static icon voice control scrollbar - list item no. 3</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo4","abstract":"<p>Static icon voice control scrollbar - list item no. 4</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed":{"name":"SDLStaticIconNameVoiceRecognitionFailed","abstract":"<p>Static icon voice recognition - failed</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause":{"name":"SDLStaticIconNameVoiceRecognitionPause","abstract":"<p>Static icon voice recognition - pause</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful":{"name":"SDLStaticIconNameVoiceRecognitionSuccessful","abstract":"<p>Static icon voice recognition - successful</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive":{"name":"SDLStaticIconNameVoiceRecognitionSystemActive","abstract":"<p>Static icon voice recognition - system active</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening":{"name":"SDLStaticIconNameVoiceRecognitionSystemListening","abstract":"<p>Static icon voice recognition - system listening</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain":{"name":"SDLStaticIconNameVoiceRecognitionTryAgain","abstract":"<p>Static icon voice recognition - try again</p>"},"Constants.html#/c:@SDLStaticIconNameWarning":{"name":"SDLStaticIconNameWarning","abstract":"<p>Static icon warning / safety alert</p>"},"Constants.html#/c:@SDLStaticIconNameWeather":{"name":"SDLStaticIconNameWeather","abstract":"<p>Static icon weather</p>"},"Constants.html#/c:@SDLStaticIconNameWifiFull":{"name":"SDLStaticIconNameWifiFull","abstract":"<p>Static icon wifi full</p>"},"Constants.html#/c:@SDLStaticIconNameZoomIn":{"name":"SDLStaticIconNameZoomIn","abstract":"<p>Static icon zoom in</p>"},"Constants.html#/c:@SDLStaticIconNameZoomOut":{"name":"SDLStaticIconNameZoomOut","abstract":"<p>Static icon zoom out</p>"},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"<p>Name of video stream start notification</p>"},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"<p>Name of video stream stop notification</p>"},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"<p>Name of video stream suspended notification</p>"},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"<p>Name of audio stream start notification</p>"},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"<p>Name of audio stream stop notification</p>"},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"<p>Lockscreen will present notification</p>"},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"<p>Lockscreen did present notification</p>"},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"<p>Lockscreen will dismiss notification</p>"},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"<p>Lockscreen did dismiss notification</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStopped":{"name":"SDLVideoStreamManagerStateStopped","abstract":"<p>Streaming state stopped</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStarting":{"name":"SDLVideoStreamManagerStateStarting","abstract":"<p>Streaming state starting</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateReady":{"name":"SDLVideoStreamManagerStateReady","abstract":"<p>Streaming state ready</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateSuspended":{"name":"SDLVideoStreamManagerStateSuspended","abstract":"<p>Streaming state suspended</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown":{"name":"SDLVideoStreamManagerStateShuttingDown","abstract":"<p>Streaming state shutting down</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStopped":{"name":"SDLAudioStreamManagerStateStopped","abstract":"<p>Audio state stopped</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStarting":{"name":"SDLAudioStreamManagerStateStarting","abstract":"<p>Audio state starting</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateReady":{"name":"SDLAudioStreamManagerStateReady","abstract":"<p>Audio state ready</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown":{"name":"SDLAudioStreamManagerStateShuttingDown","abstract":"<p>Audio state shutting down</p>"},"Constants.html#/c:@SDLAppStateInactive":{"name":"SDLAppStateInactive","abstract":"<p>App state inactive</p>"},"Constants.html#/c:@SDLAppStateActive":{"name":"SDLAppStateActive","abstract":"<p>App state active</p>"},"Constants.html#/c:@SDLSupportedSeatDriver":{"name":"SDLSupportedSeatDriver","abstract":"<p>Save current seat positions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSupportedSeatFrontPassenger":{"name":"SDLSupportedSeatFrontPassenger","abstract":"<p>Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"<p>A default soft button action</p>"},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"<p>An action causing your app to steal HMI focus</p>"},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"<p>An action causing you to keep context</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeAppServices":{"name":"SDLSystemCapabilityTypeAppServices","abstract":"<p>The app services capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"<p>The navigation capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"<p>The phone call capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"<p>The video streaming capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"<p>The remote control capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeSeatLocation":{"name":"SDLSystemCapabilityTypeSeatLocation","abstract":"<p>Contains information about the locations of each seat</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeDisplays":{"name":"SDLSystemCapabilityTypeDisplays","abstract":"<p>The Display type capability</p>"},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"<p>No user interaction (user-initiated or app-initiated) is in progress.</p>"},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"<p>VR-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"<p>Menu-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"<p>The app&rsquo;s display HMI is currently being obscured by either a system or other app&rsquo;s overlay.</p>"},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"<p>Broadcast only to whichever app has an alert currently being displayed.</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"<p>The route should be updated</p>"},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"<p>The route is accepted</p>"},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"<p>The route is refused</p>"},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"<p>The route is cancelled</p>"},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"<p>The route should update its Estimated Time of Arrival</p>"},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"<p>The route should update its next turn</p>"},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"<p>The route should update its status</p>"},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"<p>The route update its summary</p>"},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"<p>The route should update the trip&rsquo;s status</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"<p>The route update timed out</p>"},"Constants.html#/c:@SDLTPMSUnknown":{"name":"SDLTPMSUnknown","abstract":"<p>If set the status of the tire is not known.</p>"},"Constants.html#/c:@SDLTPMSSystemFault":{"name":"SDLTPMSSystemFault","abstract":"<p>TPMS does not function.</p>"},"Constants.html#/c:@SDLTPMSSensorFault":{"name":"SDLTPMSSensorFault","abstract":"<p>The sensor of the tire does not function.</p>"},"Constants.html#/c:@SDLTPMSLow":{"name":"SDLTPMSLow","abstract":"<p>TPMS is reporting a low tire pressure for the tire.</p>"},"Constants.html#/c:@SDLTPMSSystemActive":{"name":"SDLTPMSSystemActive","abstract":"<p>TPMS is active and the tire pressure is monitored.</p>"},"Constants.html#/c:@SDLTPMSTrain":{"name":"SDLTPMSTrain","abstract":"<p>TPMS is reporting that the tire must be trained.</p>"},"Constants.html#/c:@SDLTPMSTrainingComplete":{"name":"SDLTPMSTrainingComplete","abstract":"<p>TPMS reports the training for the tire is completed.</p>"},"Constants.html#/c:@SDLTPMSNotTrained":{"name":"SDLTPMSNotTrained","abstract":"<p>TPMS reports the tire is not trained.</p>"},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"<p>Reflects the current HMI setting for temperature unit in Celsius</p>"},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"<p>Reflects the current HMI setting for temperature unit in Fahrenheit</p>"},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"<p>Text aligned left.</p>"},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"<p>Text aligned right.</p>"},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"<p>Text aligned centered.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"<p>The first line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"<p>The second line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"<p>The first line of the second set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameTemplateTitle":{"name":"SDLTextFieldNameTemplateTitle","abstract":"<p>The title line of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"<p>The status bar on the NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"<p>Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"<p>The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"<p>The first line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"<p>The second line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"<p>The third line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"<p>Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.</p>"},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"<p>First line suggestion for a user response (in the case of VR enabled interaction).</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"<p>First line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"<p>Second line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"<p>Estimated Time of Arrival time for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"<p>Total distance to destination for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"<p>First line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"<p>Second line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"<p>Header text for slider.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"<p>Footer text for slider</p>"},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"<p>Primary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"<p>Secondary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"<p>Tertiary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"<p>Optional text to label an app menu button (for certain touchscreen platforms)</p>"},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"<p>Optional name / title of intended location for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"<p>Optional description of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"<p>Optional location address (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"<p>Optional hone number of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"<p>The timer should count up.</p>"},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"<p>The timer should count down.</p>"},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"<p>The timer should not count.</p>"},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"<p>The touch is the beginning of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"<p>The touch is the movement of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"<p>The touch is the ending of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"<p>The touch is the cancellation of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"<p>Selection made via menu</p>"},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"<p>Selection made via Voice session</p>"},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"<p>Selection made via Keyboard</p>"},"Constants.html#/c:@SDLTurnSignalOff":{"name":"SDLTurnSignalOff","abstract":"<p>Turn signal is OFF</p>"},"Constants.html#/c:@SDLTurnSignalLeft":{"name":"SDLTurnSignalLeft","abstract":"<p>Left turn signal is on</p>"},"Constants.html#/c:@SDLTurnSignalRight":{"name":"SDLTurnSignalRight","abstract":"<p>Right turn signal is on</p>"},"Constants.html#/c:@SDLTurnSignalBoth":{"name":"SDLTurnSignalBoth","abstract":"<p>Both signals (left and right) are on</p>"},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"<p>Starts the media clock timer counting upward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"<p>Starts the media clock timer counting downward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"<p>Pauses the media clock timer.</p>"},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"<p>Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).</p>"},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"<p>Clear the media clock timer.</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"<p>Inactive not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"<p>Inactive confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"<p>Active not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"<p>Active confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"<p>No event</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"<p>The event is a No status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"<p>The event is a Yes status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"<p>Vehicle data event is not supported</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"<p>The event is a Fault status</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"<p>The vehicle data notification status is not supported</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"<p>The vehicle data notification status is normal</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"<p>The vehicle data notification status is active</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"<p>The vehicle data notification status is not used</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"<p>Individual vehicle data item / DTC / DID request or subscription successful</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"<p>DTC / DID request successful, however, not all active DTCs or full contents of DID location available</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"<p>This vehicle data item is not allowed for this app by SDL</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"<p>The user has not granted access to this type of vehicle data item at this time</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"<p>The ECU ID referenced is not a valid ID on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"<p>The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"<p>The vehicle data item is already subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"<p>The vehicle data item cannot be unsubscribed because it is not currently subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"<p>The request for this item is ignored because it is already in progress</p>"},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"<p>No data avaliable</p>"},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"<p>The status is Off</p>"},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"<p>The status is On</p>"},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"<p>GPS vehicle data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"<p>Vehicle speed data</p>"},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"<p>Vehicle RPM data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"<p>Vehicle fuel level data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"<p>Vehicle fuel level state data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"<p>Vehicle fuel consumption data</p>"},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"<p>Vehicle external temperature data</p>"},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"<p>Vehicle VIN data</p>"},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"<p>Vehicle PRNDL data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"<p>Vehicle tire pressure data</p>"},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"<p>Vehicle odometer data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"<p>Vehicle belt status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"<p>Vehicle body info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"<p>Vehicle device status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"<p>Vehicle emergency call info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelRange":{"name":"SDLVehicleDataTypeFuelRange","abstract":"<p>Vehicle fuel range data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"<p>Vehicle airbag status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"<p>Vehicle emergency event info</p>"},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"<p>Vehicle cluster mode status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"<p>Vehicle MyKey data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"<p>Vehicle braking data</p>"},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"<p>Vehicle wiper status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"<p>Vehicle headlamp status</p>"},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"<p>Vehicle battery voltage data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineOilLife":{"name":"SDLVehicleDataTypeEngineOilLife","abstract":"<p>Vehicle engine oil life data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"<p>Vehicle engine torque data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"<p>Vehicle accleration pedal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"<p>Vehicle steering wheel data</p>"},"Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus":{"name":"SDLVehicleDataTypeElectronicParkBrakeStatus","abstract":"<p>Vehicle electronic parking brake status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTurnSignal":{"name":"SDLVehicleDataTypeTurnSignal","abstract":"<p>Vehicle turn signal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeCloudAppVehicleID":{"name":"SDLVehicleDataTypeCloudAppVehicleID","abstract":"<p>The cloud application vehicle id. Used by cloud apps to identify a head unit</p>"},"Constants.html#/c:@SDLVehicleDataTypeOEMVehicleDataType":{"name":"SDLVehicleDataTypeOEMVehicleDataType","abstract":"<p>Custom OEM Vehicle data</p>"},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"<p>The upper ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"<p>The lower ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"<p>The both ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"<p>No ventilation mode</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"<p>H264</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"<p>H265</p>"},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"<p>Theora</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"<p>VP8</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"<p>VP9</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"<p>RAW</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"<p>RTP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"<p>RTSP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"<p>RTMP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"<p>WebM</p>"},"Constants.html#/c:@SDLVideoStreamingStateStreamable":{"name":"SDLVideoStreamingStateStreamable","abstract":"<p>STREAMABLE, the current app is allowed to stream video</p>"},"Constants.html#/c:@SDLVideoStreamingStateNotStreamable":{"name":"SDLVideoStreamingStateNotStreamable","abstract":"<p>NOT_STREAMABLE, the current app is not allowed to stream video</p>"},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"<p>The SDL platform is capable of recognizing spoken text in the current language.</p>"},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"<p>The warning light is flashing</p>"},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"<p>The warning light is unused</p>"},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"<p>All other waypoint types</p>"},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"<p>The destination waypoint</p>"},"Constants.html#/c:@SDLWindowTypeMain":{"name":"SDLWindowTypeMain","abstract":"<p>This window type describes the main window on a display.</p>"},"Constants.html#/c:@SDLWindowTypeWidget":{"name":"SDLWindowTypeWidget","abstract":"<p>A widget is a small window that the app can create to provide information and soft buttons for quick app control.</p>"},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"<p>Wiper is off</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"<p>Wiper is off automatically</p>"},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"<p>Wiper is moving but off</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"<p>Wiper is off due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"<p>Wiper is on due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"<p>Wiper is on low manually</p>"},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"<p>Wiper is on high manually</p>"},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"<p>Wiper is on for a single wipe manually</p>"},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"<p>Wiper is in wash mode</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"<p>Wiper is on low automatically</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"<p>Wiper is on high automatically</p>"},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"<p>Wiper is performing a courtesy wipe</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"<p>Wiper is on automatic adjust</p>"},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"<p>Wiper is stalled</p>"},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"<p>Wiper data is not available</p>"},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"<p>Project version number for SmartDeviceLink.</p>"},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"<p>Project version string for SmartDeviceLink.</p>"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(im)initWithType:maximumNumberOfWindows:":{"name":"-initWithType:maximumNumberOfWindows:","abstract":"<p>Init with required parameters</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)type":{"name":"type","abstract":"<p>Type of windows available, to create.</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)maximumNumberOfWindows":{"name":"maximumNumberOfWindows","abstract":"<p>Number of windows available, to create.</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)windowID":{"name":"windowID","abstract":"<p>The specified ID of the window. Can be set to a predefined window, or omitted for the main window on the main display.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)textFields":{"name":"textFields","abstract":"<p>A set of all fields that support text data. - see: TextField</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageFields":{"name":"imageFields","abstract":"<p>A set of all fields that support images. - see: ImageField</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>Provides information about image types supported by the system.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>A set of all window templates available on the head unit.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-window custom presets available (if any); otherwise omitted.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The number of buttons and the capabilities of each on-window button.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The number of soft buttons available on-window and the capabilities for each button.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)menuLayoutsAvailable":{"name":"menuLayoutsAvailable","abstract":"<p>An array of available menu layouts. If this parameter is not provided, only the <code>LIST</code> layout is assumed to be available.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(im)initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:":{"name":"-initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)currentForecastSupported":{"name":"currentForecastSupported","abstract":"<p>Whether or not the current forcast is supported.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMultidayForecastAmount":{"name":"maxMultidayForecastAmount","abstract":"<p>The maximum number of day-by-day forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxHourlyForecastAmount":{"name":"maxHourlyForecastAmount","abstract":"<p>The maximum number of hour-by-hour forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMinutelyForecastAmount":{"name":"maxMinutelyForecastAmount","abstract":"<p>The maximum number of minute-by-minute forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)weatherForLocationSupported":{"name":"weatherForLocationSupported","abstract":"<p>Whether or not the weather for location is supported.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:":{"name":"-initWithLocation:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:":{"name":"-initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)location":{"name":"location","abstract":"<p>The location.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)currentForecast":{"name":"currentForecast","abstract":"<p>The current forecast.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)minuteForecast":{"name":"minuteForecast","abstract":"<p>A minute-by-minute array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)hourlyForecast":{"name":"hourlyForecast","abstract":"<p>An hour-by-hour array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)multidayForecast":{"name":"multidayForecast","abstract":"<p>A day-by-day array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)alerts":{"name":"alerts","abstract":"<p>An array of weather alerts. This array should be ordered with the first object being the current day.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(im)initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:":{"name":"-initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:","abstract":"<p>Convenience init for all parameters</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The current temperature.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureHigh":{"name":"temperatureHigh","abstract":"<p>The predicted high temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureLow":{"name":"temperatureLow","abstract":"<p>The predicted low temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperature":{"name":"apparentTemperature","abstract":"<p>The apparent temperature.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureHigh":{"name":"apparentTemperatureHigh","abstract":"<p>The predicted high apparent temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureLow":{"name":"apparentTemperatureLow","abstract":"<p>The predicted low apparent temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherSummary":{"name":"weatherSummary","abstract":"<p>A summary of the weather.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)time":{"name":"time","abstract":"<p>The time this data refers to.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)humidity":{"name":"humidity","abstract":"<p>From 0 to 1, percentage humidity.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)cloudCover":{"name":"cloudCover","abstract":"<p>From 0 to 1, percentage cloud cover.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)moonPhase":{"name":"moonPhase","abstract":"<p>From 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windBearing":{"name":"windBearing","abstract":"<p>In degrees, true north at 0 degrees.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windGust":{"name":"windGust","abstract":"<p>In km/hr</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windSpeed":{"name":"windSpeed","abstract":"<p>In km/hr</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormBearing":{"name":"nearestStormBearing","abstract":"<p>In degrees, true north at 0 degrees.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormDistance":{"name":"nearestStormDistance","abstract":"<p>In km</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipAccumulation":{"name":"precipAccumulation","abstract":"<p>In cm</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipIntensity":{"name":"precipIntensity","abstract":"<p>In cm of water per hour.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipProbability":{"name":"precipProbability","abstract":"<p>From 0 to 1, percentage chance.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipType":{"name":"precipType","abstract":"<p>A description of the precipitation type (e.g. &ldquo;rain&rdquo;, &ldquo;snow&rdquo;, &ldquo;sleet&rdquo;, &ldquo;hail&rdquo;)</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)visibility":{"name":"visibility","abstract":"<p>In km</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherIcon":{"name":"weatherIcon","abstract":"<p>The weather icon image.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(im)initWithTitle:summary:expires:regions:severity:timeIssued:":{"name":"-initWithTitle:summary:expires:regions:severity:timeIssued:","abstract":"<p>Convenience init for all parameters</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)title":{"name":"title","abstract":"<p>The title of the alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)summary":{"name":"summary","abstract":"<p>A summary for the alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)expires":{"name":"expires","abstract":"<p>The date the alert expires.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)regions":{"name":"regions","abstract":"<p>Regions affected.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)severity":{"name":"severity","abstract":"<p>Severity of the weather alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)timeIssued":{"name":"timeIssued","abstract":"<p>The date the alert was issued.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"<p>Convenience init to create a VR help item with the following parameters</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"<p>Convenience init to create a VR help item with all parameters</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"<p>Text to display for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"<p>Image for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"<p>Position to display item in VR Help list</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"<p>Convenience init</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"<p>Protocol type, see VideoStreamingProtocol</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"<p>Codec type, see VideoStreamingCodec</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"<p>Convenience init</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"<p>Convenience init for creating a video streaming capability.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:","abstract":"<p>Convenience init for creating a video streaming capability with all parameters.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"<p>The preferred resolution of a video stream for decoding and rendering on HMI</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"<p>The maximum bitrate of video stream that is supported, in kbps, optional</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>Detailed information on each format supported by this system, in its preferred order</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"<p>True if the system can utilize the haptic spatial data from the source being streamed.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)diagonalScreenSize":{"name":"diagonalScreenSize","abstract":"<p>The diagonal screen size in inches.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)pixelPerInch":{"name":"pixelPerInch","abstract":"<p>The diagonal resolution in pixels divided by the diagonal screen size in inches.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)scale":{"name":"scale","abstract":"<p>The scaling factor the app should use to change the size of the projecting view.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)major":{"name":"major","abstract":"<p>Major version (e.g. X.0.0)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)minor":{"name":"minor","abstract":"<p>Minor version (e.g. 0.X.0)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)patch":{"name":"patch","abstract":"<p>Patch version (e.g. 0.0.X)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)stringVersion":{"name":"stringVersion","abstract":"<p>A String format of the current SDLVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithMajor:minor:patch:":{"name":"-initWithMajor:minor:patch:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithMajor:minor:patch:":{"name":"+versionWithMajor:minor:patch:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithString:":{"name":"-initWithString:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithString:":{"name":"+versionWithString:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSyncMsgVersion:":{"name":"-initWithSyncMsgVersion:","abstract":"<p>Deprecated convenience init to set version using SDLSyncMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSyncMsgVersion:":{"name":"+versionWithSyncMsgVersion:","abstract":"<p>Deprecated convenience init to set version using SDLSyncMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSDLMsgVersion:":{"name":"-initWithSDLMsgVersion:","abstract":"<p>Convenience init to set version using SDLMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSDLMsgVersion:":{"name":"+versionWithSDLMsgVersion:","abstract":"<p>Convenience init to set version using SDLMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)compare:":{"name":"-compare:","abstract":"<p>Compare two SDLVersions</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanVersion:":{"name":"-isLessThanVersion:","abstract":"<p>Compare is less than</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isEqualToVersion:":{"name":"-isEqualToVersion:","abstract":"<p>Compare is equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanVersion:":{"name":"-isGreaterThanVersion:","abstract":"<p>Compare is greater than</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanOrEqualToVersion:":{"name":"-isGreaterThanOrEqualToVersion:","abstract":"<p>Compare is greater than or equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanOrEqualToVersion:":{"name":"-isLessThanOrEqualToVersion:","abstract":"<p>Compare is less than or equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"<p>The make of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"<p>The model of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"<p>The model year of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"<p>The trim of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithDataType:resultCode:":{"name":"-initWithDataType:resultCode:","abstract":"<p>Convenience init for creating a SDLVehicleDataResult with a dataType</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithCustomOEMDataType:resultCode:":{"name":"-initWithCustomOEMDataType:resultCode:","abstract":"<p>Convenience init for creating a SDLVehicleDataResult with a customDataType</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"<p>Defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)customOEMDataType":{"name":"customOEMDataType","abstract":"<p>OEM custom defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"<p>Published data result code</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"<p>Convenience init to update a list of maneuvers for navigation</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"<p>Optional, SDLTurn, 1 - 100 entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"<p>Required, SDLSoftButton, 0 - 1 Entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to unsubscribe to the GPSData.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to unsubscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to unsubscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to unsubscribe to the fuel level state.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to unsubscribe to the fuel range.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to unsubscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to unsubscribe to the PRNDL status.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to unsubscribe to the tireStatus.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to unsubscribe to the odometer in km.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the seat belts.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to unsubscribe to the body information including power modes.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to unsubscribe to the device status including signal and battery strength.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to unsubscribe to the status of the brake pedal.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the wipers.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the head lamps.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to unsubscribe to the emergency call info</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to unsubscribe to the airbag status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to unsubscribe to the emergency event</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to unsubscribe to the cluster modes</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to unsubscribe to the myKey status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to unsubscribe to the electronic parking brake status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to unsubscribe to the turn signal</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The result of requesting to unsubscribe to the cloud app vehicle id</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>If true, unsubscribes from GPS</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>If true, unsubscribes from Speed</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>If true, unsubscribes from RPM</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>If true, unsubscribes from Fuel Level</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>If true, unsubscribes from Fuel Level State</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>If true, unsubscribes from Fuel Range</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>If true, unsubscribes from Instant Fuel Consumption</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>If true, unsubscribes from External Temperature</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>If true, unsubscribes from PRNDL</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>If true, unsubscribes from Tire Pressure</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>If true, unsubscribes from Odometer</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>If true, unsubscribes from Belt Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>If true, unsubscribes from Body Information</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>If true, unsubscribes from Device Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>If true, unsubscribes from Driver Braking</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>If true, unsubscribes from Wiper Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>If true, unsubscribes from Head Lamp Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>If true, unsubscribes from Engine Oil Life</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>If true, unsubscribes from Engine Torque</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>If true, unsubscribes from Acc Pedal Position</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>If true, unsubscribes from Steering Wheel Angle data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>If true, unsubscribes from eCallInfo</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>If true, unsubscribes from Airbag Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>If true, unsubscribes from Emergency Event</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>If true, unsubscribes from Cluster Mode Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>If true, unsubscribes from My Key</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, unsubscribes to the Electronic Parking Brake Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, unsubscribes to the Turn Signal</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, unsubscribes to the Cloud App Vehicle ID</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"<p>Convenience init to unsubscribe from a subscription button</p>","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(im)initWithServiceID:":{"name":"-initWithServiceID:","abstract":"<p>Create an instance of UnpublishAppService with the serviceID that corresponds with the service to be unpublished</p>","parent_name":"SDLUnpublishAppService"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(py)serviceID":{"name":"serviceID","abstract":"<p>The ID of the service to be unpublished.</p>","parent_name":"SDLUnpublishAppService"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"<p>Convenience init to UpdateTurnList for navigation</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"<p>Individual turn text. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"<p>Individual turn icon. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"<p>Notified of processed touches such as pinches, pans, and taps</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"<p>Distance between two taps on the screen, in the head unit&rsquo;s coordinate system, used for registering double-tap callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"<p>Minimum distance for a pan gesture in the head unit&rsquo;s coordinate system, used for registering pan callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"<p>If set to NO, the display link syncing will be ignored and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold\">movementTimeThreshold</a></code> will be used. Defaults to YES.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"<p>@abstract","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"<p>Initialize a touch manager with a hit tester if available</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:videoScaleManager:":{"name":"-initWithHitTester:videoScaleManager:","abstract":"<p>Initialize a touch manager with a hit tester and a video scale manager.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"<p>Called by SDLStreamingMediaManager in sync with the streaming framerate. This helps to moderate panning gestures by allowing the UI to be modified in time with the framerate.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"<p>Whether or not long presses are available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"<p>Whether or not multi-touch (e.g. a pinch gesture) is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"<p>Whether or not a double tap is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"<p>A touch&rsquo;s unique identifier. The application can track the current touch events by id.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"<p>The time that the touch was recorded. This number can the time since the beginning of the session or something else as long as the units are in milliseconds.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"<p>The touch&rsquo;s coordinate</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"<p>The x value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"<p>The y value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"<p>Status of the Tire Pressure Telltale. See WarningLightStatus.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"<p>The status of the left front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"<p>The status of the right front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"<p>The status of the left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"<p>The status of the right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"<p>The status of the inner left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"<p>The status of the innter right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"<p>The enumeration identifying the field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"<p>The character set that is supported in this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"<p>The number of characters in one row of this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"<p>The number of rows for this text field.</p>","parent_name":"SDLTextField"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Constructor with the required values.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:":{"name":"-initWithTemplate:","abstract":"<p>Init with the required values.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:dayColorScheme:nightColorScheme:":{"name":"-initWithTemplate:dayColorScheme:nightColorScheme:","abstract":"<p>Convinience constructor with all the parameters.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)template":{"name":"template","abstract":"<p>Predefined or dynamically created window template. Currently only predefined window template layouts are defined.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to use when the head unit is in a light / day situation.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to use when the head unit is in a dark / night situation.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:":{"name":"-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:","abstract":"<p>Convenience init</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryColor:secondaryColor:backgroundColor:":{"name":"-initWithPrimaryColor:secondaryColor:backgroundColor:","abstract":"<p>Convenience init</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)primaryColor":{"name":"primaryColor","abstract":"<p>The &ldquo;primary&rdquo; color. This must always be your primary brand color. If the OEM only uses one color, this will be the color. It is recommended to the OEMs that the primaryColor should change the <code>mediaClockTimer</code> bar and the highlight color of soft buttons.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)secondaryColor":{"name":"secondaryColor","abstract":"<p>The &ldquo;secondary&rdquo; color. This may be an accent or complimentary color to your primary brand color. If the OEM uses this color, they must also use the primary color. It is recommended to the OEMs that the secondaryColor should change the background color of buttons, such as soft buttons.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color to be used on the template. If the OEM does not support this parameter, assume on &ldquo;dayColorScheme&rdquo; that this will be a light color, and on &ldquo;nightColorScheme&rdquo; a dark color. You should do the same for your custom schemes.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithFahrenheitValue:":{"name":"-initWithFahrenheitValue:","abstract":"<p>Convenience init for a fahrenheit temperature value.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithCelsiusValue:":{"name":"-initWithCelsiusValue:","abstract":"<p>Convenience init for a celsius temperature value.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"<p>Temperature unit</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"<p>Temperature value in specified unit. Range depends on OEM and is not checked by SDL.</p>","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"<p>Initialize with text and a type</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"<p>Create TTS using text</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"<p>Create TTS using SAPI</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"<p>Create TTS using LH Plus</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"<p>Create TTS using prerecorded chunks</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"<p>Create TTS using silence</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)fileChunksWithName:":{"name":"+fileChunksWithName:","abstract":"<p>Create &ldquo;TTS&rdquo; to play an audio file previously uploaded to the system.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"<p>Text to be spoken, a phoneme specification, or the name of a pre-recorded / pre-uploaded sound. The contents of this field are indicated by the &ldquo;type&rdquo; field.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"<p>The type of information in the &ldquo;text&rdquo; field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).</p>","parent_name":"SDLTTSChunk"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithType:fileName:":{"name":"-initWithType:fileName:","abstract":"<p>Create a generic system request with a file name</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithProprietaryType:fileName:":{"name":"-initWithProprietaryType:fileName:","abstract":"<p>Create an OEM_PROPRIETARY system request with a subtype and file name</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"<p>A request subType used when the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType\">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)fileName":{"name":"fileName","abstract":"<p>Filename of HTTP data to store in predefined system staging area.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)supportsSubscriptions":{"name":"supportsSubscriptions","abstract":"<p>YES if subscriptions are available on the connected head unit. If NO, calls to <code>subscribeToCapabilityType:withBlock</code> and <code>subscribeToCapabilityType:withObserver:selector</code> will fail.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displays":{"name":"displays","abstract":"<p>Provides window capabilities of all displays connected with SDL. By default, one display is connected and supported which includes window capability information of the default main window of the display. May be nil if the system has not provided display and window capability information yet.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>If returned, the platform supports on-screen SoftButtons</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"<p>If returned, the platform supports app services</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>If returned, the platform supports navigation</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>If returned, the platform supports making phone calls</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>If returned, the platform supports video streaming</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>If returned, the platform supports remote control capabilities</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"<p>If returned, the platform supports remote control capabilities for seats</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)defaultMainWindowCapability":{"name":"defaultMainWindowCapability","abstract":"<p>Returns the window capability object of the default main window which is always pre-created by the connected system. This is a convenience method for easily accessing the capabilities of the default main window.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"<p>Init is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new system capability manager with a specified connection manager</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)start":{"name":"-start","abstract":"<p>Starts the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"<p>Retrieves a capability type from the remote system. This function must be called in order to retrieve the values for <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability\">navigationCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability\">phoneCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability\">videoStreamingCapability</a></code>, <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability\">remoteControlCapability</a></code>, and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities\">appServicesCapabilities</a></code>. If you do not call this method first, those values will be nil. After calling this method, assuming there is no error in the handler, you may retrieve the capability you requested from the manager within the handler.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withBlock:":{"name":"-subscribeToCapabilityType:withBlock:","abstract":"<p>Subscribe to a particular capability type using a block callback</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withObserver:selector:":{"name":"-subscribeToCapabilityType:withObserver:selector:","abstract":"<p>Subscribe to a particular capability type with a selector callback. The selector supports the following parameters:</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)unsubscribeFromCapabilityType:withObserver:":{"name":"-unsubscribeFromCapabilityType:withObserver:","abstract":"<p>Unsubscribe from a particular capability type. If it was subscribed with a block, the return value should be passed to the <code>observer</code> to unsubscribe the block. If it was subscribed with a selector, the <code>observer</code> object should be passed to unsubscribe the object selector.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)windowCapabilityWithWindowID:":{"name":"-windowCapabilityWithWindowID:","abstract":"<p>Returns the window capability object of the primary display with the specified window ID. This is a convenient method to easily access capabilities of windows for instance widget windows of the main display.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithAppServicesCapabilities:":{"name":"-initWithAppServicesCapabilities:","abstract":"<p>Convenience init for an App Service Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"<p>Convenience init for a Navigation Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"<p>Convenience init for a Phone Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"<p>Convenience init for a Video Streaming Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"<p>Convenience init for a Remote Control Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithDisplayCapabilities:":{"name":"-initWithDisplayCapabilities:","abstract":"<p>Convenience init for DisplayCapability list</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithSeatLocationCapability:":{"name":"-initWithSeatLocationCapability:","abstract":"<p>Convenience init for a Remote Control Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>Used as a descriptor of what data to expect in this struct. The corresponding param to this enum should be included and the only other parameter included.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"<p>Describes the capabilities of app services including what service types are supported and the current state of services.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>Describes the extended capabilities of the onboard navigation system</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>Describes the extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>Describes the capabilities of the module&rsquo;s video streaming feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>Describes the extended capabilities of the module&rsquo;s remote control feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"<p>Describes information about the locations of each seat</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contain the display related information and all windows related to that display</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Convenience init to describe the SDL version</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to subscribe to the GPSData.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to subscribe to the fuel level state.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to subscribe to the fuel range.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to subscribe to the PRNDL status.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to subscribe to the tireStatus.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to subscribe to the odometer in km.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to subscribe to the status of the seat belts.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to subscribe to the body information including power modes.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to subscribe to the device status including signal and battery strength.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to subscribe to the status of the brake pedal.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to subscribe to the status of the wipers.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to subscribe to the status of the head lamps.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to subscribe to the emergency call info</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to subscribe to the airbag status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to subscribe to the emergency event</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to subscribe to the cluster modes</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to subscribe to the myKey status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to subscribe to the electronic parking brake status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to subscribe to the turn signal</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The result of requesting to subscribe to the cloud app vehicle ID</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, subscribes GPS data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, subscribes Speed data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, subscribes RPM data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, subscribes Fuel Level data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, subscribes Fuel Level State data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, subscribes Fuel Range data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, subscribes Instant Fuel Consumption data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, subscribes External Temperature data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, subscribes PRNDL data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, subscribes Tire Pressure status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, subscribes Odometer data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, subscribes Belt Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, subscribes Body Information data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, subscribes Device Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, subscribes Driver Braking data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, subscribes Wiper Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, subscribes Head Lamp Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, subscribes to Engine Oil Life data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, subscribes Engine Torque data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, subscribes Acc Pedal Position data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, subscribes Steering Wheel Angle data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, subscribes eCall Info data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, subscribes Airbag Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, subscribes Emergency Event data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, subscribes Cluster Mode Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, subscribes myKey data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, subscribes to the electronic parking brake status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, subscribes to the turn signal status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, subscribes to the cloud app vehicle ID.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs with a button name.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you subscribed to is selected.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)scale":{"name":"scale","abstract":"<p>The scaling factor the app should use to change the size of the projecting view.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)displayViewportResolution":{"name":"displayViewportResolution","abstract":"<p>The screen resolution of the connected display. The units are pixels.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)appViewportFrame":{"name":"appViewportFrame","abstract":"<p>The frame of the app&rsquo;s projecting view. This is calculated by dividing the display&rsquo;s viewport resolution by the scale. The units are points.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)init":{"name":"-init","abstract":"<p>Creates a default streaming video scale manager.","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)initWithScale:displayViewportResolution:":{"name":"-initWithScale:displayViewportResolution:","abstract":"<p>Convenience init for creating the manager with a scale and connected display viewport resolution.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleTouchEventCoordinates:":{"name":"-scaleTouchEventCoordinates:","abstract":"<p>Scales the coordinates of an <code>OnTouchEvent</code> from the display&rsquo;s coordinate system to the app&rsquo;s viewport coordinate system. If the scale value is less than 1.0, the touch events will be returned without being scaled.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleHapticRect:":{"name":"-scaleHapticRect:","abstract":"<p>Scales a haptic rectangle from the app&rsquo;s viewport coordinate system to the display&rsquo;s coordinate system. If the scale value is less than 1.0, the haptic rectangle will be returned without being scaled.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"<p>Touch Manager responsible for providing touch event notifications.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"<p>Audio Manager responsible for managing streaming audio.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"<p>This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html\">SDLStreamingMediaConfiguration</a></code> <code>rootViewController</code>. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"<p>A haptic interface that can be updated to reparse views within the window you&rsquo;ve provided. Send a <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLDidUpdateProjectionView\">SDLDidUpdateProjectionView</a></code> notification or call the <code>updateInterfaceLayout</code> method to reparse. The &ldquo;output&rdquo; of this haptic interface occurs in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager\">touchManager</a></code> property where it will call the delegate.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"<p>Whether or not video streaming is supported</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"<p>Whether or not the video session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"<p>Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"<p>Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"<p>Whether or not the video stream is paused due to either the application being backgrounded, the HMI state being either NONE or BACKGROUND, or the video stream not being ready.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"<p>The current screen resolution of the connected display in pixels.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"<p>This is the agreed upon format of video encoder that is in use, or nil if not currently connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>A list of all supported video formats by this manager</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"<p>The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"<p>The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)showVideoBackgroundDisplay":{"name":"showVideoBackgroundDisplay","abstract":"<p>When YES, the StreamingMediaManager will send a black screen with &ldquo;Video Backgrounded String&rdquo;. Defaults to YES.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Create a new streaming media manager for navigation and VPM apps with a specified configuration</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"<p>Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startAudioWithProtocol:":{"name":"-startAudioWithProtocol:","abstract":"<p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startVideoWithProtocol:":{"name":"-startVideoWithProtocol:","abstract":"<p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopAudio":{"name":"-stopAudio","abstract":"<p>Stop the audio feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopVideo":{"name":"-stopVideo","abstract":"<p>Stop the video feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"<p>What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"<p>Properties to use for applications that utilize the video encoder for streaming. See VTCompressionProperties.h for more details. For example, you can set kVTCompressionPropertyKey_ExpectedFrameRate to set your framerate. Setting the framerate this way will also set the framerate if you use CarWindow automatic streaming.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"<p>Usable to change run time video stream setup behavior. Only use this and modify the results if you <em>really</em> know what you&rsquo;re doing. The head unit defaults are generally good.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"<p>Set the initial view controller your video streaming content is within.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"<p>Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"<p>When YES, the StreamingMediaManager will run a CADisplayLink with the framerate set to the video encoder settings kVTCompressionPropertyKey_ExpectedFrameRate. This then forces TouchManager (and CarWindow, if used) to sync their callbacks to the framerate. If using CarWindow, this <em>must</em> be YES. If NO, <code>enableSyncedPanning</code> on SDLTouchManager will be set to NO. Defaults to YES.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"<p>When YES, the StreamingMediaManager will disable its internal checks that the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController\">rootViewController</a></code> only has one <code>supportedOrientation</code>. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfiguration":{"name":"+secureConfiguration","abstract":"<p>Create a secure video streaming configuration. Security managers will be provided from SDLEncryptionConfiguration and the encryption flag will be set to SDLStreamingEncryptionFlagAuthenticateAndEncrypt. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithEncryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithEncryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually. This is equivalent to <code>init</code>.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow insecure configuration with a view controller</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller and security managers</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithInitialViewController:":{"name":"+autostreamingSecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(im)initWithCountryCode:fccFacilityId:":{"name":"-initWithCountryCode:fccFacilityId:","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)countryCode":{"name":"countryCode","abstract":"<p>@abstract Binary Representation of ITU Country Code. USA Code is 001.</p>","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId":{"name":"fccFacilityId","abstract":"<p>@abstract Binary representation of unique facility ID assigned by the FCC","parent_name":"SDLStationIDNumber"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithTimeInterval:":{"name":"-initWithTimeInterval:","abstract":"<p>Create a time struct with a time interval (time in seconds). Fractions of the second will be eliminated and rounded down.</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"<p>Create a time struct with hours, minutes, and seconds</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"<p>The hour of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"<p>The minute of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"<p>The second of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"<p>Convenience init to create a speak message</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"<p>Convenience init to create a speak message</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of TTSChunk structs which, taken together, specify the phrase to be spoken</p>","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"<p>The name of this soft button state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"<p>The artwork to be used with this button or nil if it is text-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"<p>The text to be used with this button or nil if it is image-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"<p>Whether or not the button should be highlighted on the UI</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"<p>A special system action</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"<p>An SDLSoftButton describing this state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"<p>The name of this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"<p>All states available to this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"<p>The name of the current state of this soft button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"<p>The handler to be called when the button is in the current state and is pressed</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"<p>Create a multi-state (or single-state, but you should use initWithName:state: instead for that case) soft button. For example, a button that changes its image or text, such as a repeat or shuffle button.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:text:artwork:handler:":{"name":"-initWithName:text:artwork:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"<p>Transition the soft button to another state in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property. The wrapper considers all transitions valid (assuming a state with that name exists).</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"<p>Transition the soft button to the next state of the array set when in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"<p>Return a state from the state array with a specific name.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>The button supports a short press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>The button supports a LONG press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>The button supports &ldquo;button down&rdquo; and &ldquo;button up&rdquo;.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"<p>The button supports referencing a static or dynamic image.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)textSupported":{"name":"textSupported","abstract":"<p>The button supports the use of text. If not included, the default value should be considered true that the button will support text.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Convenience init</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithType:text:image:highlighted:buttonId:systemAction:handler:":{"name":"-initWithType:text:image:highlighted:buttonId:systemAction:handler:","abstract":"<p>Convenience init</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"<p>A handler that may optionally be run when the SDLSoftButton has a corresponding notification occur.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"<p>Describes whether this soft button displays only text, only an image, or both</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"<p>Optional text to display (if defined as TEXT or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"<p>Optional image struct for SoftButton (if defined as IMAGE or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"<p>Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"<p>Value which is returned via OnButtonPress / OnButtonEvent</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"<p>Parameter indicating whether selecting a SoftButton shall call a specific system action. This is intended to allow Notifications to bring the callee into full / focus; or in the case of persistent overlays, the overlay can persist when a SoftButton is pressed.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"<p>The selected position of the slider.</p>","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:","abstract":"<p>Convenience init with all parameters.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"<p>Creates a slider with only the number of ticks and position. Note that this is not enough to get a SUCCESS response. You must supply additional data. See below for required parameters.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"<p>Creates a slider with all required data and a static footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"<p>Creates an slider with all required data and a dynamic footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"<p>Represents a number of selectable items on a horizontal axis.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"<p>Initial position of slider control (cannot exceed numTicks).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"<p>Text header to display.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"<p>Text footer to display.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"<p>App defined timeout. Indicates how long of a timeout from the last action (i.e. sliding control resets timeout). If omitted, the value is set to 10 seconds.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific slider to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLSlider"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)status":{"name":"status","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)monitoringSystemStatus":{"name":"monitoringSystemStatus","abstract":"<p>The status of TPMS for this particular tire</p>","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)pressure":{"name":"pressure","abstract":"<p>The pressure value of this particular tire in kPa (kilopascals)</p>","parent_name":"SDLSingleTireStatus"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(im)initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:":{"name":"-initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:","abstract":"<p>Convenience init to create navigation directions</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"<p>The first line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"<p>The second line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"<p>Estimated Time of Arrival time at final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"<p>The amount of time needed to reach the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"<p>The distance to the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"<p>An icon to show with the turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"<p>An icon to show with the next turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"<p>Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"<p>If and when a maneuver has completed while an AlertManeuver is active, the app must send this value set to TRUE in order to clear the AlertManeuver overlay. If omitted the value will be assumed as FALSE.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"<p>Three dynamic SoftButtons available (first SoftButton is fixed to &ldquo;Turns&rdquo;). If omitted on supported displays, the currently displayed SoftButton values will not change.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(im)initWithMenuID:":{"name":"-initWithMenuID:","abstract":"<p>Creates a ShowAppMenu RPC to open the app menu directly to a AddSubMenu RPC&rsquo;s submenu.</p>","parent_name":"SDLShowAppMenu"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(py)menuID":{"name":"menuID","abstract":"<p>A Menu ID that identifies the AddSubMenu to open if it correlates with the AddSubMenu menuID parameter. If not set the top level menu will be opened.</p>","parent_name":"SDLShowAppMenu"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:":{"name":"-initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"<p>The text displayed in a single-line display, or in the upper display","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField2":{"name":"mainField2","abstract":"<p>The text displayed on the second display line of a two-line display</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"<p>The text displayed on the first display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"<p>The text displayed on the second display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"<p>The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"<p>Text in the Status Bar</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"<p>This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"<p>The text in the track field</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"<p>The the Soft buttons defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"<p>The Custom Presets defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"<p>Text Field Metadata</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)windowID":{"name":"windowID","abstract":"<p>This is the unique ID assigned to the window that this RPC is intended. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateConfiguration":{"name":"templateConfiguration","abstract":"<p>Used to set an alternate template layout to a window.</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateTitle":{"name":"templateTitle","abstract":"<p>The title of the current template.</p>","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts up, e.g from 0:00 to 4:18.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countUpFromStartTime:toEndTime:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts up, e.g from 0:00 to 4:18.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts down, e.g. from 4:18 to 0:00</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countDownFromStartTime:toEndTime:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts down, e.g. from 4:18 to 0:00</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)pauseWithPlayPauseIndicator:":{"name":"+pauseWithPlayPauseIndicator:","abstract":"<p>Pause an existing (counting up / down) media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:":{"name":"+updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:","abstract":"<p>Update a pause time (or pause and update the time) on a media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTime:endTime:playPauseIndicator:":{"name":"+updatePauseWithNewStartTime:endTime:playPauseIndicator:","abstract":"<p>Update a pause time (or pause and update the time) on a media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)resumeWithPlayPauseIndicator:":{"name":"+resumeWithPlayPauseIndicator:","abstract":"<p>Resume a paused media clock timer. It resumes at the same time at which it was paused.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)clearWithPlayPauseIndicator:":{"name":"+clearWithPlayPauseIndicator:","abstract":"<p>Remove a media clock timer from the screen</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:":{"name":"-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:startTime:endTime:playPauseIndicator:":{"name":"-initWithUpdateMode:startTime:endTime:playPauseIndicator:","abstract":"<p>Create a SetMediaClockTimer RPC with all available parameters. It&rsquo;s recommended to use the specific initializers above.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"<p>A Start Time with specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"<p>An END time of type SDLStartTime, specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"<p>The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)audioStreamingIndicator":{"name":"audioStreamingIndicator","abstract":"<p>The audio streaming indicator used for a play/pause button.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The new module data for the requested module</p>","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"<p>Convenience init to change settings of a module</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The module data to set for the requested RC module.</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"<p>Initialize SetGlobalProperties with help text and timeout text</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"<p>Initialize SetGlobalProperties with help text, timeout text, help title, and help items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:","abstract":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:","abstract":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help prompt for when the user asks for help with an interface prompt</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Help prompt for when an interface prompt times out</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"<p>Sets a voice recognition Help Title</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"<p>Sets the items listed in the VR help screen used in an interaction started by Push to Talk</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"<p>Text for the menu button label</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"<p>Icon for the menu button</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"<p>On-screen keyboard (perform interaction) configuration</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)userLocation":{"name":"userLocation","abstract":"<p>Location of the user&rsquo;s seat. Default is driver&rsquo;s seat location if it is not set yet</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuLayout":{"name":"menuLayout","abstract":"<p>The main menu layout. If this is sent while a menu is already on-screen, the head unit will change the display to the new layout type. See available menu layouts on DisplayCapabilities.menuLayoutsAvailable. Defaults to the head unit default.</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>The display capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The soft button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>The preset bank capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:dayColorScheme:nightColorScheme:":{"name":"-initWithPredefinedLayout:dayColorScheme:nightColorScheme:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"<p>A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;light&rdquo; or &ldquo;day&rdquo; color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;dark&rdquo; or &ldquo;night&rdquo; color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init.</p>","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(py)properties":{"name":"properties","abstract":"<p>The new cloud application properties.</p>","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init to set an image icon from a file name. The file must already be uploaded to the head unit.</p>","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"<p>A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:":{"name":"-initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:","abstract":"<p>Create a <code>SendLocation</code> request with an address object, without Lat/Long coordinates.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"<p>Create a <code>SendLocation</code> request with Lat/Long coordinate, not an address object</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:","abstract":"<p>Create a <code>SendLocation</code> request with Lat/Long coordinate and an address object and let the nav system decide how to parse it</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>The longitudinal coordinate of the location. Either the latitude / longitude OR the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address\">address</a></code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>The latitudinal coordinate of the location. Either the latitude / longitude OR the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address\">address</a></code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"<p>Name / title of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description of the intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"<p>Mode in which the sendLocation request is sent</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"<p>Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"<p>Address to be used for setting destination. Either the latitude / longitude OR the <code>address</code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"<p>Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"<p>Array of spatial data structures that represent the locations of all user controls present on the HMI. This data should be updated if/when the application presents a new screen. When a request is sent, if successful, it will replace all spatial data previously sent through RPC. If an empty array is sent, the existing spatial data will be cleared</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:action:":{"name":"-initWithId:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:label:action:":{"name":"-initWithId:label:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)id":{"name":"id","abstract":"<p>@abstract id of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)label":{"name":"label","abstract":"<p>@abstract label of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)action":{"name":"action","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(im)initWithSeats:cols:rows:levels:":{"name":"-initWithSeats:cols:rows:levels:","abstract":"<p>Constructs a newly allocated SDLSeatLocationCapability object with all parameters</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)cols":{"name":"cols","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)rows":{"name":"rows","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)levels":{"name":"levels","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)seats":{"name":"seats","abstract":"<p>Contains a list of SeatLocation in the vehicle, the first element is the driver&rsquo;s seat","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocation.html#/c:objc(cs)SDLSeatLocation(py)grid":{"name":"grid","abstract":"<p>Optional</p>","parent_name":"SDLSeatLocation"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:":{"name":"-initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:","abstract":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id":{"name":"id","abstract":"<p>@abstract id of seat that is a remote controllable seat.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled":{"name":"heatingEnabled","abstract":"<p>@abstract Whether or not heating is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingEnabled":{"name":"coolingEnabled","abstract":"<p>@abstract Whether or not cooling is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingLevel":{"name":"heatingLevel","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingLevel":{"name":"coolingLevel","abstract":"<p>@abstract cooling level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)horizontalPosition":{"name":"horizontalPosition","abstract":"<p>@abstract horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)verticalPosition":{"name":"verticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)frontVerticalPosition":{"name":"frontVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backVerticalPosition":{"name":"backVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle":{"name":"backTiltAngle","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportHorizontalPosition":{"name":"headSupportHorizontalPosition","abstract":"<p>@abstract head Support Horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportVerticalPosition":{"name":"headSupportVerticalPosition","abstract":"<p>@abstract head Support Vertical Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled":{"name":"massageEnabled","abstract":"<p>@abstract Whether or not massage is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract Array of massage mode data.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageCushionFirmness":{"name":"massageCushionFirmness","abstract":"<p>@abstract Array of firmness of a cushion.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory":{"name":"memory","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with moduleName</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:":{"name":"-initWithName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with moduleName and moduleInfo</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with given parameters</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with all parameters</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the light control module.","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingEnabledAvailable":{"name":"heatingEnabledAvailable","abstract":"<p>@abstract Whether or not heating is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable":{"name":"coolingEnabledAvailable","abstract":"<p>@abstract Whether or not cooling is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable":{"name":"heatingLevelAvailable","abstract":"<p>@abstract Whether or not heating level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable":{"name":"coolingLevelAvailable","abstract":"<p>@abstract Whether or not cooling level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable":{"name":"horizontalPositionAvailable","abstract":"<p>@abstract Whether or not horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable":{"name":"verticalPositionAvailable","abstract":"<p>@abstract Whether or not vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable":{"name":"frontVerticalPositionAvailable","abstract":"<p>@abstract Whether or not front Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable":{"name":"backVerticalPositionAvailable","abstract":"<p>@abstract Whether or not back Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable":{"name":"backTiltAngleAvailable","abstract":"<p>@abstract Whether or not backTilt Angle Available is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable":{"name":"headSupportHorizontalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable":{"name":"headSupportVerticalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable":{"name":"massageEnabledAvailable","abstract":"<p>@abstract Whether or not massage Enabled is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable":{"name":"massageModeAvailable","abstract":"<p>@abstract Whether or not massage Mode is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable":{"name":"massageCushionFirmnessAvailable","abstract":"<p>@abstract Whether or not massage Cushion Firmness is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable":{"name":"memoryAvailable","abstract":"<p>@abstract Whether or not memory is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>@abstract Information about a RC module, including its id.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"<p>Convenience init for creating a scrolling message with text.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:cancelID:":{"name":"-initWithMessage:timeout:softButtons:cancelID:","abstract":"<p>Convenience init for creating a scrolling message with text and buttons.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"<p>Convenience init for creating a scrolling message with text and buttons.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"<p>Body of text that can include newlines and tabs.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"<p>App defined timeout. Indicates how long of a timeout from the last action (i.e. scrolling message resets timeout). If not set, a default value of 30 seconds is used by Core.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"<p>Buttons for the displayed scrollable message. If omitted on supported displays, only the system defined &ldquo;Close&rdquo; SoftButton will be displayed.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific scrollable message to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"<p>The resolution of the prescribed screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"<p>Types of screen touch events available in screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"<p>The top text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"<p>The second text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"<p>The third text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"<p>The fourth text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"<p>The media text field available within the media layout. Often less emphasized than textField(1-4)</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"<p>The primary graphic within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>A secondary graphic used in some template layouts</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"<p>What alignment textField(1-4) should use</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"<p>The type of data textField1 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"<p>The type of data textField2 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"<p>The type of data textField3 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"<p>The type of data textField4 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)title":{"name":"title","abstract":"<p>The title of the current template layout.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"<p>The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menuConfiguration":{"name":"menuConfiguration","abstract":"<p>Configures the layout of the menu and sub-menus. If set after a menu already exists, the existing main menu layout will be updated.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"<p>The current list of menu cells displayed in the app&rsquo;s menu.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)dynamicMenuUpdatesMode":{"name":"dynamicMenuUpdatesMode","abstract":"<p>Change the mode of the dynamic menu updater to be enabled, disabled, or enabled on known compatible head units.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The current list of voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)keyboardConfiguration":{"name":"keyboardConfiguration","abstract":"<p>The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)preloadedChoices":{"name":"preloadedChoices","abstract":"<p>Cells will be hashed by their text, image names, and VR command text. When assembling an SDLChoiceSet, you can pull objects from here, or recreate them. The preloaded versions will be used so long as their text, image names, and VR commands are the same.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:systemCapabilityManager:":{"name":"-initWithConnectionManager:fileManager:systemCapabilityManager:","abstract":"<p>Initialize a screen manager</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>Starts the manager and all sub-managers</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"<p>Delays all screen updates until endUpdatesWithCompletionHandler: is called.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdates":{"name":"-endUpdates","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"<p>Retrieve a SoftButtonObject based on its name.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)preloadChoices:withCompletionHandler:":{"name":"-preloadChoices:withCompletionHandler:","abstract":"<p>Preload cells to the head unit. This will <em>greatly</em> reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You <em>do not</em> need to wait until the completion handler is called to present a choice set containing choices being loaded. The choice set will wait until the preload completes and then immediately present.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)deleteChoices:":{"name":"-deleteChoices:","abstract":"<p>Delete loaded cells from the head unit. If the cells don&rsquo;t exist on the head unit they will be ignored.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentChoiceSet:mode:":{"name":"-presentChoiceSet:mode:","abstract":"<p>Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentSearchableChoiceSet:mode:withKeyboardDelegate:":{"name":"-presentSearchableChoiceSet:mode:withKeyboardDelegate:","abstract":"<p>Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentKeyboardWithInitialText:delegate:":{"name":"-presentKeyboardWithInitialText:delegate:","abstract":"<p>Present a keyboard-only interface to the user and receive input. The user will be able to input text in the keyboard when in a non-driver distraction situation.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)dismissKeyboardWithCancelID:":{"name":"-dismissKeyboardWithCancelID:","abstract":"<p>Cancels the keyboard-only interface if it is currently showing. If the keyboard has not yet been sent to Core, it will not be sent.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openMenu":{"name":"-openMenu","abstract":"<p>Present the top-level of your application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openSubmenu:":{"name":"-openSubmenu:","abstract":"<p>Present the application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden. You must update the menu with the proper cells before calling this method. This RPC will fail if the cell does not contain a sub menu, or is not in the menu array.</p>","parent_name":"SDLScreenManager"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(im)initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:":{"name":"-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:","abstract":"<p>Convenience init to SISData</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationShortName":{"name":"stationShortName","abstract":"<p>@abstract Identifies the 4-alpha-character station call sign","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber":{"name":"stationIDNumber","abstract":"<p>@abstract Used for network Application.","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLongName":{"name":"stationLongName","abstract":"<p>@abstract Identifies the station call sign or other identifying","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLocation":{"name":"stationLocation","abstract":"<p>@abstract Provides the 3-dimensional geographic station location</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationMessage":{"name":"stationMessage","abstract":"<p>@abstract May be used to convey textual information of general interest","parent_name":"SDLSISData"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init to reset global properties.</p>","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"<p>An array of one or more GlobalProperty enumeration elements","parent_name":"SDLResetGlobalProperties"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:","abstract":"<p>Constructs a newly allocated SDLRemoteControlCapabilities object</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:","abstract":"<p>Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"<p>If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"<p>If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>If included, the platform supports RC button controls with the included button names.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities":{"name":"seatControlCapabilities","abstract":"<p>If included, the platform supports seat controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities":{"name":"audioControlCapabilities","abstract":"<p>If included, the platform supports audio controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities":{"name":"hmiSettingsControlCapabilities","abstract":"<p>If included, the platform supports hmi setting controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities":{"name":"lightControlCapabilities","abstract":"<p>If included, the platform supports light controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"<p>Convenience init to release a controlled module</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleType":{"name":"moduleType","abstract":"<p>The module type that the app requests to control.</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"<p>Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"<p>The currently active VR+TTS language on the module. See &ldquo;Language&rdquo; for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>The currently active display language on the module. See &ldquo;Language&rdquo; for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contains information about the display&rsquo;s capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>Contains information about the head unit button capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>Contains information about the head unit soft button capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<p>Contains information about the HMI zone capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<p>Contains information about the text-to-speech capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"<p>Contains a list of prerecorded speech items present on the platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"<p>Contains information about the VR capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for PerformAudioPassThru, e.g. {8kHz,8-bit,PCM}. The audio is recorded in monaural.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"<p>Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"<p>Specifies the connected vehicle&rsquo;s type.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"<p>Specifies the white-list of supported diagnostic modes (0x00-0xFF) capable for DiagnosticMessage requests. If a mode outside this list is requested, it will be rejected.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<p>Specifies the HMI capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"<p>The version of SDL Core running on the connected head unit</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"<p>The software version of the system that implements the SmartDeviceLink core.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)iconResumed":{"name":"iconResumed","abstract":"<p>Existence of apps icon at system. If true, apps icon was resumed at system. If false, apps icon is not resumed at system.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"<p>Convenience init for registering the application with a lifecycle configuration.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"<p>Convenience init for registering the application with an app name, app id, and desired language.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:","abstract":"<p>Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, and the short app name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:","abstract":"<p>Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, the short app name, tts name, voice recognition synonyms, the hmi display language desired, and the resume hash.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:":{"name":"-initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:","abstract":"<p>Convenience init for registering the application with all possible options.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"<p>Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"<p>The mobile application&rsquo;s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink. Applications with the same name will be rejected.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"<p>Text-to-speech string for voice recognition of the mobile application name. Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Provides an abbreviated version of the app name (if needed), that will be displayed on head units that support very few characters. If not provided, the appName is used instead (and will be truncated if too long). It&rsquo;s recommended that this string be no longer than 5 characters.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Defines additional voice recognition commands</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"<p>Indicates if the application is a media or a non-media application. Media applications will appear in the head unit&rsquo;s media source list and can use the <code>MEDIA</code> template.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"<p>App&rsquo;s starting VR+TTS language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"<p>Current app&rsquo;s expected display language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"<p>List of all applicable app HMI types stating which HMI classifications to be given to the app.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"<p>ID used to uniquely identify a previous state of all app data that can persist through connection cycles (e.g. ignition cycles). This registered data (commands, submenus, choice sets, etc.) can be reestablished without needing to explicitly re-send each piece. If omitted, then the previous state of an app&rsquo;s commands, etc. will not be restored.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"<p>Information about the connecting device.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"<p>ID used to validate app with policy table entries.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID":{"name":"fullAppID","abstract":"<p>A full UUID appID used to validate app with policy table entries.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"<p>Contains detailed information about the registered application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;light&rdquo; or &ldquo;day&rdquo; color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;dark&rdquo; or &ldquo;night&rdquo; color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"<p>Create a Rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"<p>Create a Rectangle from a CGRect</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"<p>The X-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"<p>The Y-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"<p>The width of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"<p>The height of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"<p>Array of requested DID results (with data if available).</p>","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"<p>Convenience init</p>","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"<p>An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"<p>Raw data from vehicle data DID location(s)","parent_name":"SDLReadDID"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"<p>The integer part of the frequency ie for 101.7 this value should be 101</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"<p>The fractional part of the frequency for 101.7 is 7</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"<p>Radio band value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"<p>Read only parameter. See RDSData data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"<p>number of HD sub-channels if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDChannels":{"name":"availableHDChannels","abstract":"<p>the list of available hd sub-channel indexes, empty list means no Hd channel is available, read-only</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"<p>Current HD sub-channel if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"<p>Signal Strength Value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"<p>If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"<p>True if the radio is on, false is the radio is off. When the radio is disabled, no data other than radioEnable is included in a GetInteriorVehicleData response</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"<p>Read only parameter. See RadioState data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdRadioEnable":{"name":"hdRadioEnable","abstract":"<p>True if the hd radio is on, false is the radio is off</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)sisData":{"name":"sisData","abstract":"<p>Read Read-only Station Information Service (SIS) data provides basic information","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>The short friendly name of the radio control module.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"<p>Availability of the control of enable/disable radio.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"<p>Availability of the control of radio band.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"<p>Availability of the control of radio frequency.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"<p>Availability of the control of HD radio channel.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"<p>Availability of the getting Radio Data System (RDS) data.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"<p>Availability of the getting the number of available HD channels.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDChannelsAvailable":{"name":"availableHDChannelsAvailable","abstract":"<p>Availability of the list of available HD sub-channel indexes.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"<p>Availability of the getting the Radio state.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"<p>Availability of the getting the signal strength.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"<p>Availability of the getting the signal Change Threshold</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdRadioEnableAvailable":{"name":"hdRadioEnableAvailable","abstract":"<p>Availability of the control of enable/disable HD radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)siriusXMRadioAvailable":{"name":"siriusXMRadioAvailable","abstract":"<p>Availability of sirius XM radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)sisDataAvailable":{"name":"sisDataAvailable","abstract":"<p>Availability of the getting HD radio Station Information Service (SIS) data.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)store":{"name":"store","abstract":"<p>The store that contains RPC data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)payloadProtected":{"name":"payloadProtected","abstract":"<p>Declares if the RPC payload ought to be protected</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"<p>Converts struct to JSON formatted data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"<p>The response to be included within the userinfo dictionary</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"<p>Create an NSNotification object containing an SDLRPCResponse</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"<p>Returns whether or not the containing response is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"<p>Returns whether or not the containing response is a kind of class, including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"<p>The correlation id of the corresponding SDLRPCRequest.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"<p>Whether or not the SDLRPCRequest was successful.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"<p>The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"<p>More detailed success or error message.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(py)request":{"name":"request","abstract":"<p>The request to be included in the userinfo dictionary</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)initWithName:object:rpcRequest:":{"name":"-initWithName:object:rpcRequest:","abstract":"<p>Create an NSNotification object containing an SDLRPCRequest</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestMemberOfClass:":{"name":"-isRequestMemberOfClass:","abstract":"<p>Returns whether or not the containing request is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestKindOfClass:":{"name":"-isRequestKindOfClass:","abstract":"<p>Returns whether or not the containing request is a kind of class, including subclasses.</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"<p>A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.</p>","parent_name":"SDLRPCRequest"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"<p>The notification within the userinfo dictionary</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCNotification</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"<p>Returns whether or not the containing notification is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"<p>Returns whether or not the containing notification is a kind of class, including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"<p>Returns the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"<p>Sets the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"<p>Returns the value associated with the provided key. If the key does not exist, null is returned.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"<p>Sets a key-value pair using the function name as the key.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"<p>The data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"<p>The name of the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)parameters":{"name":"parameters","abstract":"<p>The JSON-RPC parameters</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"<p>The type of data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithRed:green:blue:":{"name":"-initWithRed:green:blue:","abstract":"<p>Create an SDL color object with red / green / blue values between 0-255</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithColor:":{"name":"-initWithColor:","abstract":"<p>Create an SDL color object with a UIColor object.</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)red":{"name":"red","abstract":"<p>The red value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)green":{"name":"green","abstract":"<p>The green value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)blue":{"name":"blue","abstract":"<p>The blue value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(im)initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:":{"name":"-initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:","abstract":"<p>Convenience init</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"<p>Program Service Name</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"<p>Radio Text</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"<p>The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"<p>Program Identification - the call sign for the radio station</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"<p>The program type - The region should be used to differentiate between EU","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficProgramIdentification":{"name":"trafficProgramIdentification","abstract":"<p>Traffic Program Identification - Identifies a station that offers traffic</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"<p>Traffic Announcement Identification - Indicates an ongoing traffic announcement</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"<p>Region</p>","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available in SDL Core for the registered app. If the transfer has systemFile enabled, then the value will be set to 0 automatically.</p>","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)init":{"name":"-init","abstract":"<p>Init</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"<p>Convenience init for creating a putfile with a name and file format.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"<p>Convenience init for creating a putfile with a name, file format, and persistance.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>File reference name</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"<p>A FileType value representing a selected file type</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"<p>A value to indicates if the file is meant to persist between sessions / ignition cycles. If set to TRUE, then the system will aim to persist this file through session / cycles. While files with this designation will have priority over others, they are subject to deletion by the system at any time. In the event of automatic deletion by the system, the app will receive a rejection and have to resend the file. If omitted, the value will be set to false.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"<p>Indicates if the file is meant to be passed through core to elsewhere on the system. If set to TRUE, then the system will instead pass the data thru as it arrives to a predetermined area outside of core.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"<p>Offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"<p>Length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)crc":{"name":"crc","abstract":"<p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>","parent_name":"SDLPutFile"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(im)initWithAppServiceRecord:":{"name":"-initWithAppServiceRecord:","abstract":"<p>Convenience init.</p>","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(py)appServiceRecord":{"name":"appServiceRecord","abstract":"<p>If the request was successful, this object will be the current status of the service record for the published service. This will include the Core supplied service ID.</p>","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(im)initWithAppServiceManifest:":{"name":"-initWithAppServiceManifest:","abstract":"<p>Convenience init.</p>","parent_name":"SDLPublishAppService"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(py)appServiceManifest":{"name":"appServiceManifest","abstract":"<p>The manifest of the service that wishes to be published.","parent_name":"SDLPublishAppService"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"<p>If Onscreen custom presets are available.</p>","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"<p>Convenience init for defining the phone capability</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"<p>Whether or not the DialNumber RPC is enabled.</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(py)requiresEncryption":{"name":"requiresEncryption","abstract":"<p>Flag indicating if the app requires an encryption service to be active.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLPermissionManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"<p>Determine if an individual RPC is allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"<p>Determine if all RPCs are allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"<p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"<p>Add an observer for specified RPC names, with a callback that will be called whenever the value changes, as well as immediately with the current status.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"<p>Remove every current observer</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"<p>Remove block observers for the specified RPC</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)rpcRequiresEncryption:":{"name":"-rpcRequiresEncryption:","abstract":"<p>Check whether or not an RPC needs encryption.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC in the policy table.</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"<p>HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"<p>RPC parameters for the individual RPC</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)requireEncryption":{"name":"requireEncryption","abstract":"<p>Describes whether or not the RPC needs encryption</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"<p>ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is &ldquo;success:true&rdquo;.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"<p>Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"<p>A <em>SDLTriggerSource</em> object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:":{"name":"-initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:","abstract":"<p>Convenience init for creating a basic display or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:":{"name":"-initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:","abstract":"<p>Convenience init for setting all parameters of a display or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"<p>Convenience init for setting the a single visual or voice-recognition menu choice.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"<p>Convenience init for setting the a visual or voice-recognition menu choices.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu with one choice.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu with one choice and VR help items.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout and VR help items. Prompts are created from the passed strings.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout. Prompts are created from the passed strings.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:","abstract":"<p>Convenience init for setting all parameters of a visual or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"<p>Text to be displayed first.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>This is the TTS prompt spoken to the user at the start of an interaction.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"<p>For application-requested interactions, this mode indicates the method in which the user is notified and uses the interaction. Users can choose either only by voice (VR_ONLY), by tactile selection from the menu (MANUAL_ONLY), or by either mode (BOTH).</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"<p>List of interaction choice set IDs to use with an interaction.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help text. This is the spoken text when a user speaks &ldquo;help&rdquo; while the interaction is occurring.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Timeout text. This text is spoken when a VR interaction times out.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"<p>Timeout in milliseconds. Applies only to the menu portion of the interaction. The VR timeout will be handled by the platform. If omitted a standard value of 10 seconds is used.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"<p>Suggested voice recognition help items to display on-screen during a perform interaction. If omitted on supported displays, the default generated list of suggested choices shall be displayed.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"<p>For tactile interaction modes (MANUAL_ONLY, or BOTH), the layout mode of how the choices are presented.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific perform interaction to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>initial prompt which will be spoken before opening the audio pass","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText1":{"name":"audioPassThruDisplayText1","abstract":"<p>a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"<p>A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"<p>A samplingRate</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"<p>the maximum duration of audio recording in milliseconds</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>the quality the audio is recorded - 8 bit or 16 bit</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"<p>an audioType</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"<p>a Boolean value representing if the current audio source should be","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioDataHandler":{"name":"audioDataHandler","abstract":"<p>A handler that will be called whenever an <code>onAudioPassThru</code> notification is received.</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(im)initWithServiceSpecificResult:":{"name":"-initWithServiceSpecificResult:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(py)serviceSpecificResult":{"name":"serviceSpecificResult","abstract":"<p>The service can provide specific result strings to the consumer through this param.</p>","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:":{"name":"-initWithServiceUri:serviceID:originApp:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:requestServiceActive:":{"name":"-initWithServiceUri:serviceID:originApp:requestServiceActive:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceUri":{"name":"serviceUri","abstract":"<p>Fully qualified URI based on a predetermined scheme provided by the app service. SDL makes no guarantee that this URI is correct.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceID":{"name":"serviceID","abstract":"<p>The service ID that the app consumer wishes to send this URI.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)originApp":{"name":"originApp","abstract":"<p>This string is the appID of the app requesting the app service provider take the specific action.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)requestServiceActive":{"name":"requestServiceActive","abstract":"<p>This flag signals the requesting consumer would like this service to become the active primary service of the destination&rsquo;s type.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all parameters that are permitted for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all parameters that are prohibited for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The cloud app vehicle ID</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"<p>The type of touch event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"<p>List of all individual touches involved in this event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"<p>Current State of TBT client</p>","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"<p>A request subType used when the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType\">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"<p>Optional URL for HTTP requests. If blank, the binary data shall be forwarded to the app. If not blank, the binary data shall be forwarded to the url with a provided timeout in seconds.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"<p>Optional timeout for HTTP requests Required if a URL is provided</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"<p>Optional file type (meant for HTTP file requests).</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(im)initWithSystemCapability:":{"name":"-initWithSystemCapability:","abstract":"<p>Convenience init for required parameters</p>","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(py)systemCapability":{"name":"systemCapability","abstract":"<p>The system capability that has been updated.</p>","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"<p>The url</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>How long until a timeout</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allocatedModules":{"name":"allocatedModules","abstract":"<p>@abstract Contains a list (zero or more) of module types that","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)freeModules":{"name":"freeModules","abstract":"<p>@abstract Contains a list (zero or more) of module types that are free to access for the application.</p>","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allowed":{"name":"allowed","abstract":"<p>Issued by SDL to notify the application about remote control status change on SDL","parent_name":"SDLOnRCStatus"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)permissionItem":{"name":"permissionItem","abstract":"<p>Describes change in permissions for a given set of RPCs</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)requireEncryption":{"name":"requireEncryption","abstract":"<p>Describes whether or not the app needs the encryption permission</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"<p>Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"<p>Get user selection status for the application (has the app been selected via hmi or voice command)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"<p>Indicates if the lockscreen should be required, optional or off</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>Get HMILevel in effect for the application</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"<p>Current SDL voice engine (VR+TTS) language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>Current display language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"<p>The type of keyboard input</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"<p>The current keyboard string input from the user</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The subscribed module data that changed</p>","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"<p>Calculated hash ID to be referenced during RegisterAppInterface request.</p>","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>SDLHMILevel in effect for the application</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>Current state of audio streaming for the application. When this parameter has a value of NOT_AUDIBLE, the application must stop streaming audio to SDL.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)videoStreamingState":{"name":"videoStreamingState","abstract":"<p>Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"<p>Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)windowID":{"name":"windowID","abstract":"<p>This is the unique ID assigned to the window that this RPC is intended for. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded with the provided timeout in seconds.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"<p>The driver distraction state (i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalEnabled":{"name":"lockScreenDismissalEnabled","abstract":"<p>If enabled, the lock screen will be able to be dismissed while connected to SDL, allowing users the ability to interact with the app.</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalWarning":{"name":"lockScreenDismissalWarning","abstract":"<p>Warning message to be displayed on the lock screen when dismissal is enabled. This warning should be used to ensure that the user is not the driver of the vehicle, ex. <code>Swipe up to dismiss, acknowledging that you are not the driver.</code>. This parameter must be present if &ldquo;lockScreenDismissalEnabled&rdquo; is set to true.</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"<p>The command ID of the command the user selected. This is the command ID value provided by the application in the SDLAddCommand operation that created the command.</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"<p>Indicates whether command was selected via voice or via a menu selection (using the OK button).</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The button&rsquo;s name</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is &ldquo;CUSTOM_BUTTON&rdquo;, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"<p>Indicates whether this is an UP or DOWN event</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is &ldquo;CUSTOM_BUTTON&rdquo;, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(im)initWithServiceData:":{"name":"-initWithServiceData:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(py)serviceData":{"name":"serviceData","abstract":"<p>The updated app service data.</p>","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"<p>The reason application&rsquo;s interface was terminated</p>","parent_name":"SDLOnAppInterfaceUnregistered"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:","abstract":"<p>Convenience init to describe an oasis address</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:","abstract":"<p>Convenience init to describe an oasis address with all parameters</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"<p>Name of the country (localized)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"<p>countryCode of the country(ISO 3166-2)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"<p>postalCode of location (PLZ, ZIP, PIN, CAP etc.)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"<p>Portion of country (e.g. state)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"<p>Portion of administrativeArea (e.g. county)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"<p>Hypernym for city/village</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"<p>Hypernym for district</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"<p>Hypernym for street, road etc.</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"<p>Portion of thoroughfare (e.g. house number)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"<p>All of the possible SDL RPC Response notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"<p>All of the possible SDL Button event notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(im)initWithAcceptsWayPoints:":{"name":"-initWithAcceptsWayPoints:","abstract":"<p>Convenience init.</p>","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(py)acceptsWayPoints":{"name":"acceptsWayPoints","abstract":"<p>Informs the subscriber if this service can actually accept way points.</p>","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:":{"name":"-initWithTimestamp:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:":{"name":"-initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)timestamp":{"name":"timestamp","abstract":"<p>This is the timestamp of when the data was generated. This is to ensure any time or distance given in the data can accurately be adjusted if necessary.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)origin":{"name":"origin","abstract":"<p>The start location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destination":{"name":"destination","abstract":"<p>The final destination location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destinationETA":{"name":"destinationETA","abstract":"<p>The estimated time of arrival at the final destination location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)instructions":{"name":"instructions","abstract":"<p>This array should be ordered with all remaining instructions. The start of this array should always contain the next instruction.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionETA":{"name":"nextInstructionETA","abstract":"<p>The estimated time of arrival at the next destination.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistance":{"name":"nextInstructionDistance","abstract":"<p>The distance to this instruction from current location. This should only be updated ever .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and the next instruction.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistanceScale":{"name":"nextInstructionDistanceScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)prompt":{"name":"prompt","abstract":"<p>This is a prompt message that should be conveyed to the user through either display or voice (TTS). This param will change often as it should represent the following: approaching instruction, post instruction, alerts that affect the current navigation session, etc.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:":{"name":"-initWithLocationDetails:action:","abstract":"<p>Convenience init for required parameters</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:":{"name":"-initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)locationDetails":{"name":"locationDetails","abstract":"<p>The location details.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)action":{"name":"action","abstract":"<p>The navigation action.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)eta":{"name":"eta","abstract":"<p>The estimated time of arrival.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)bearing":{"name":"bearing","abstract":"<p>The angle at which this instruction takes place. For example, 0 would mean straight, &lt;=45 is bearing right, &gt;= 135 is sharp right, between 45 and 135 is a regular right, and 180 is a U-Turn, etc. </p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)junctionType":{"name":"junctionType","abstract":"<p>The navigation junction type.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)drivingSide":{"name":"drivingSide","abstract":"<p>Used to infer which side of the road this instruction takes place. For a U-Turn (action=TURN, bearing=180) this will determine which direction the turn should take place.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)details":{"name":"details","abstract":"<p>This is a string representation of this instruction, used to display instructions to the users. This is not intended to be read aloud to the users, see the param prompt in <code>NavigationServiceData</code> for that.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)image":{"name":"image","abstract":"<p>An image representation of this instruction.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"<p>Whether or not the SendLocation RPC is enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"<p>Whether or not Waypoint related RPCs are enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"<p>Indicates whether e911 override is on. References signal &ldquo;MyKey_e911Override_St&rdquo;. See VehicleDataStatus.</p>","parent_name":"SDLMyKey"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLMsgVersion"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)moduleId":{"name":"moduleId","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)location":{"name":"location","abstract":"<p>Location of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)serviceArea":{"name":"serviceArea","abstract":"<p>Service area of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)allowMultipleAccess":{"name":"allowMultipleAccess","abstract":"<p>Allow multiple users/apps to access the module or not</p>","parent_name":"SDLModuleInfo"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithAudioControlData:":{"name":"-initWithAudioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithLightControlData:":{"name":"-initWithLightControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithHMISettingsControlData:":{"name":"-initWithHMISettingsControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with hmi settings data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithSeatControlData:":{"name":"-initWithSeatControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"<p>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"<p>The radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"<p>The climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)seatControlData":{"name":"seatControlData","abstract":"<p>The seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)audioControlData":{"name":"audioControlData","abstract":"<p>The audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)lightControlData":{"name":"lightControlData","abstract":"<p>The light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)hmiSettingsControlData":{"name":"hmiSettingsControlData","abstract":"<p>The hmi control data</p>","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"<p>Constructs a newly allocated SDLMetadataType object with NSArrays</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"<p>Constructs a newly allocated SDLMetadataType with all parameters</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"<p>The type of data contained in the &ldquo;mainField1&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"<p>The type of data contained in the &ldquo;mainField2&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"<p>The type of data contained in the &ldquo;mainField3&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"<p>The type of data contained in the &ldquo;mainField4&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"<p>Convenience init with required parameters.</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"<p>Convenience init with all parameters.</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"<p>The unique ID of an existing submenu to which a command will be added</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"<p>The position within the items of the parent Command Menu</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"<p>The menu name which appears in menu, representing this command</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)mainMenuLayout":{"name":"mainMenuLayout","abstract":"<p>Changes the default main menu layout. Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLMenuLayoutList\">SDLMenuLayoutList</a></code>.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)defaultSubmenuLayout":{"name":"defaultSubmenuLayout","abstract":"<p>Changes the default submenu layout. To change this for an individual submenu, set the <code>menuLayout</code> property on the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuCell.html\">SDLMenuCell</a></code> initializer for creating a cell with sub-cells. Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLMenuLayoutList\">SDLMenuLayoutList</a></code>.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(im)initWithMainMenuLayout:defaultSubmenuLayout:":{"name":"-initWithMainMenuLayout:defaultSubmenuLayout:","abstract":"<p>Initialize a new menu configuration with a main menu layout and a default submenu layout which can be overriden per-submenu if desired.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"<p>The cell&rsquo;s text to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"<p>The cell&rsquo;s icon to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"<p>If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)submenuLayout":{"name":"submenuLayout","abstract":"<p>The layout in which the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells\">subCells</a></code> will be displayed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"<p>Create a menu cell that has no subcells.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:subCells:":{"name":"-initWithTitle:icon:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:submenuLayout:subCells:":{"name":"-initWithTitle:icon:submenuLayout:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"<p>Convenience init</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"<p>Convenience init</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaImage":{"name":"mediaImage","abstract":"<p>Sets the media image associated with the currently playing media","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaType":{"name":"mediaType","abstract":"<p>The type of the currently playing or paused track.</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaTitle":{"name":"mediaTitle","abstract":"<p>Music: The name of the current track","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaArtist":{"name":"mediaArtist","abstract":"<p>Music: The name of the current album artist","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaAlbum":{"name":"mediaAlbum","abstract":"<p>Music: The name of the current album","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)playlistName":{"name":"playlistName","abstract":"<p>Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)isExplicit":{"name":"isExplicit","abstract":"<p>Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content.</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackProgress":{"name":"trackPlaybackProgress","abstract":"<p>Music: The current progress of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackDuration":{"name":"trackPlaybackDuration","abstract":"<p>Music: The total duration of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackProgress":{"name":"queuePlaybackProgress","abstract":"<p>Music: The current progress of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackDuration":{"name":"queuePlaybackDuration","abstract":"<p>Music: The total duration of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueCurrentTrackNumber":{"name":"queueCurrentTrackNumber","abstract":"<p>Music: The current number (1 based) of the track in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueTotalTrackCount":{"name":"queueTotalTrackCount","abstract":"<p>Music: The total number of tracks in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(im)initWithMassageMode:massageZone:":{"name":"-initWithMassageMode:massageZone:","abstract":"<p>@abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract mode of a massage zone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageZone":{"name":"massageZone","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(im)initWithMassageCushion:firmness:":{"name":"-initWithMassageCushion:firmness:","abstract":"<p>Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)cushion":{"name":"cushion","abstract":"<p>@abstract cushion of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)firmness":{"name":"firmness","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"<p>The configuration the manager was set up with.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>The current HMI level of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>The current audio streaming state of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"<p>The current system context of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"<p>The file manager to be used by the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"<p>The streaming media manager to be used for starting video sessions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"<p>The screen manager for sending UI related RPCs.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"<p>Centralized manager for retrieving all system capabilities.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"<p>The response of a register call after it has been received.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)authToken":{"name":"authToken","abstract":"<p>The auth token, if received. This should be used to log into a user account. Primarily used for cloud apps with companion app stores.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"<p>The manager&rsquo;s delegate.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"<p>The currently pending RPC request send transactions</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)proxy":{"name":"proxy","abstract":"<p>Deprecated internal proxy object. This should only be accessed when the Manager is READY. This property may go to nil at any time.","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"<p>Initialize the manager with a configuration. Call <code>startWithHandler</code> to begin waiting for a connection.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"<p>Start the manager, which will tell it to start looking for a connection. Once one does, it will automatically run the setup process and call the readyBlock when done.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don&rsquo;t need to call this method ever.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startRPCEncryption":{"name":"-startRPCEncryption","abstract":"<p>Start the encryption lifecycle manager, which will attempt to open a secure service.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRPC:":{"name":"-sendRPC:","abstract":"<p>Send an RPC of type <code>Response</code>, <code>Notification</code> or <code>Request</code>. Responses and notifications sent to Core do not a response back from Core. Each request sent to Core does get a response, so if you need the response and/or error, call <code>sendRequest:withResponseHandler:</code> instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"<p>Send an RPC request and don&rsquo;t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"<p>Send an RPC request and set a completion handler that will be called with the response when the response returns.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"<p>Send all of the requests given as quickly as possible, but in order. Call the completionHandler after all requests have either failed or given a response.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"<p>Send all of the requests one at a time, with the next one going out only after the previous one has received a response. Call the completionHandler after all requests have either failed or given a response.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withBlock:":{"name":"-subscribeToRPC:withBlock:","abstract":"<p>Subscribe to callbacks about a particular RPC request, notification, or response with a block callback.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withObserver:selector:":{"name":"-subscribeToRPC:withObserver:selector:","abstract":"<p>Subscribe to callbacks about a particular RPC request, notification, or response with a selector callback.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)unsubscribeFromRPC:withObserver:":{"name":"-unsubscribeFromRPC:withObserver:","abstract":"<p>Unsubscribe to callbacks about a particular RPC request, notification, or response.</p>","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"<p>Active log modules</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"<p>Active log targets</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"<p>Active log filters</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use this log level</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"<p>Active log format</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"<p>Whether or not verbose, debug, and warning logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)disableAssertions":{"name":"disableAssertions","abstract":"<p>Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"<p>Active date formatter</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"<p>The queue asynchronously logged logs are logged on. Say that 10 times fast.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"<p>The singleton object</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager&rsquo;s sharedManager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log to the sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"+logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"-logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"<p>Log to this manager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"+logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log an error to the sharedManager&rsquo;s active log targets and assert. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"-logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log an error to this manager&rsquo;s active log targets and assert. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"<p>Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs not containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"<p>Returns a filter that only allows logs not passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"<p>Returns a filter that only allows logs passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"<p>Returns a filter that only allows logs not within the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"<p>Returns a filter that only allows logs of the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"<p>Returns a filter that only allows logs not within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"<p>Returns a filter that only allows logs within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"<p>The name of the this module, e.g. &ldquo;Transport&rdquo;</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"<p>All of the files contained within this module. When a log is logged, the <code>__FILE__</code> (in Obj-C) or <code>#file</code> (in Swift) is automatically captured and checked to see if any module has a file in this set that matches. If it does, it will be logged using the module&rsquo;s log level and the module&rsquo;s name will be printed in the formatted log.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"<p>The custom level of the log. This is <code>SDLLogLevelDefault</code> (whatever the current global log level is) by default.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"<p>This method is unavailable and may not be used.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name, set of files, and associated log level.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"<p>Returns whether or not this module contains a given file.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"<p>Any custom logging modules used by the developer&rsquo;s code. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"<p>Where the logs will attempt to output. Defaults to Console.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"<p>What log filters will run over this session. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"<p>How detailed of logs will be output. Defaults to Default.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"<p>Whether or not logs will be run on a separate queue, asynchronously, allowing the following code to run before the log completes. Or if it will occur synchronously, which will prevent logs from being missed, but will slow down surrounding code. Defaults to YES.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)disableAssertions":{"name":"disableAssertions","abstract":"<p>Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use the global log level. Defaults to Error.","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"<p>A debug logger for use in development. This sets the format type to Detailed, the log level to Debug, and enables the Console and ASL loggers.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"<p>The app&rsquo;s icon. This will be set by the lock screen configuration.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"<p>The vehicle&rsquo;s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The designated background color set in the lock screen configuration, or the default SDL gray-blue.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)lockedLabelText":{"name":"lockedLabelText","abstract":"<p>The locked label string. This will be set by the lock screen manager to inform the user about the dismissable state.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)addDismissGestureWithCallback:":{"name":"-addDismissGestureWithCallback:","abstract":"<p>Adds a swipe gesture to the lock screen view controller.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)removeDismissGesture":{"name":"-removeDismissGesture","abstract":"<p>Remove swipe gesture to the lock screen view controller.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)displayMode":{"name":"displayMode","abstract":"<p>Describes when the lock screen will be displayed. Defaults to <code>SDLLockScreenConfigurationDisplayModeRequiredOnly</code>.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"<p>Whether or not the lock screen should be shown in the &ldquo;lock screen optional&rdquo; state. Defaults to NO.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableDismissGesture":{"name":"enableDismissGesture","abstract":"<p>If YES, then the lock screen can be dismissed with a downward swipe on compatible head units. Requires a connection of SDL 6.0+ and the head unit to enable the feature. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showDeviceLogo":{"name":"showDeviceLogo","abstract":"<p>If YES, then the lockscreen will show the vehicle&rsquo;s logo if the vehicle has made it available. If NO, then the lockscreen will not show the vehicle logo. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"<p>If YES, the lock screen should be managed by SDL and automatically engage when necessary. If NO, then the lock screen will never be engaged. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>Your app icon as it will appear on the lock screen.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"<p>A custom view controller that the lock screen will manage the presentation of.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"<p>Use this configuration if you wish to manage a lock screen yourself. This may be useful if the automatic presentation feature of SDLLockScreenManager is failing for some reason.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"<p>Use this configuration for the basic default lock screen. A custom app icon will not be used.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"<p>Use this configuration to provide a custom lock screen icon and a custom background color, or nil if you wish to use the default background color. This will use the default lock screen layout.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"<p>Use this configuration if you wish to provide your own view controller for the lock screen. This view controller&rsquo;s presentation and dismissal will still be managed by the lock screen manager. Note that you may subclass SDLLockScreenViewController and pass it here to continue to have the vehicle icon set to your view controller by the manager.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:":{"name":"-initWithCoordinate:","abstract":"<p>Convenience init for location coordinate.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:":{"name":"-initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"<p>Latitude/Longitude of the location</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"<p>Name of location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description intended location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"<p>Address to be used by navigation engines for search.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(im)initWithLatitudeDegrees:longitudeDegrees:":{"name":"-initWithLatitudeDegrees:longitudeDegrees:","abstract":"<p>Convenience init for location coordinates</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"<p>An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available on the module for the registered app.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:":{"name":"-initWithId:status:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:density:color:":{"name":"-initWithId:status:density:color:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:lightStatus:lightDensity:lightColor:":{"name":"-initWithId:lightStatus:lightDensity:lightColor:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)id":{"name":"id","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)status":{"name":"status","abstract":"<p>@abstract Reflects the status of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)density":{"name":"density","abstract":"<p>@abstract Reflects the density of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)color":{"name":"color","abstract":"<p>@abstract Reflects the color of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(im)initWithLightStates:":{"name":"-initWithLightStates:","abstract":"<p>Constructs a newly allocated SDLLightControlData object with lightState</p>","parent_name":"SDLLightControlData"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(py)lightState":{"name":"lightState","abstract":"<p>@abstract An array of LightNames and their current or desired status.","parent_name":"SDLLightControlData"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:supportedLights:":{"name":"-initWithModuleName:supportedLights:","abstract":"<p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:moduleInfo:supportedLights:":{"name":"-initWithModuleName:moduleInfo:supportedLights:","abstract":"<p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the light control module.","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)supportedLights":{"name":"supportedLights","abstract":"<p>@abstract An array of available LightCapabilities that are controllable.</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:densityAvailable:colorAvailable:statusAvailable:":{"name":"-initWithName:densityAvailable:colorAvailable:statusAvailable:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with given parameters</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)name":{"name":"name","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)densityAvailable":{"name":"densityAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s density can be set remotely (similar to a dimmer).</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)colorAvailable":{"name":"colorAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s color can be set remotely by using the RGB color space.</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)statusAvailable":{"name":"statusAvailable","abstract":"<p>@abstract Indicates if the status (ON/OFF) can be set remotely.","parent_name":"SDLLightCapabilities"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)appName":{"name":"appName","abstract":"<p>The full name of the app to that the configuration should be updated to.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"<p>Initializes and returns a newly allocated lifecycle configuration update object with the specified app data.","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:fullAppId:":{"name":"+defaultConfigurationWithAppName:fullAppId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:fullAppId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:fullAppId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"<p>Whether or not debug mode is enabled</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"<p>The ip address at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"<p>The port at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"<p>The full name of the app</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"<p>The app id. This must be the same as the app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId":{"name":"fullAppId","abstract":"<p>The full app id. This must be the same as the full app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"<p>A hash id which should be passed to the remote system in the RegisterAppInterface</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"<p>This is an automatically set based on the app type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"<p>The application type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"<p>Additional application types beyond <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType\">appType</a></code></p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"<p>The default language to use</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"<p>An array of all the supported languages</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>The application icon to be used on an app launching screen</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to use when the head unit is in a light / day situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to use when the head unit is in a dark / night situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumProtocolVersion":{"name":"minimumProtocolVersion","abstract":"<p>The minimum protocol version that will be permitted to connect. This defaults to 1.0.0. If the protocol version of the head unit connected is below this version, the app will disconnect with an EndService protocol message and will not register.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumRPCVersion":{"name":"minimumRPCVersion","abstract":"<p>The minimum RPC version that will be permitted to connect. This defaults to 1.0.0. If the RPC version of the head unit connected is below this version, an UnregisterAppInterface will be sent.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)allowedSecondaryTransports":{"name":"allowedSecondaryTransports","abstract":"<p>Which transports are permitted to be used as secondary transports. A secondary transport is a transport that is connected as an alternate, higher bandwidth transport for situations when a low-bandwidth primary transport (such as Bluetooth) will restrict certain features (such as video streaming navigation).</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"<p>Create a Keyboard Properties RPC object</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:","abstract":"<p>Create a Keyboard Properties RPC object</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"<p>The keyboard language</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"<p>Desired keyboard layout</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"<p>Desired keypress mode.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"<p>Array of keyboard characters to enable. All omitted characters will be greyed out (disabled) on the keyboard. If omitted, the entire keyboard will be enabled.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"<p>Allows an app to prepopulate the text field with a suggested or completed entry as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteList":{"name":"autoCompleteList","abstract":"<p>Allows an app to show a list of possible autocomplete suggestions as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"<p>Resolution width</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"<p>Resolution height</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"<p>The name that identifies the field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>The image types that are supported in this field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"<p>The image resolution of this field</p>","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:isTemplate:":{"name":"-initWithName:ofType:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:isTemplate:":{"name":"-initWithName:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticIconName:":{"name":"-initWithStaticIconName:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"<p>The static hex icon value or the binary image file name identifier (sent by SDLPutFile)</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"<p>Describes whether the image is static or dynamic</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)isTemplate":{"name":"isTemplate","abstract":"<p>Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.</p>","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"<p>Low beams are on or off.</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"<p>High beams are on or off</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"<p>Status of the ambient light senser</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"<p>A user control spatial identifier</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"<p>The position of the haptic rectangle to be highlighted. The center of this rectangle will be &ldquo;touched&rdquo; when a press occurs.</p>","parent_name":"SDLHapticRect"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(im)initWithDisplaymode:temperatureUnit:distanceUnit:":{"name":"-initWithDisplaymode:temperatureUnit:distanceUnit:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)displayMode":{"name":"displayMode","abstract":"<p>@abstract Display the Display Mode used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)temperatureUnit":{"name":"temperatureUnit","abstract":"<p>@abstract Display the temperature unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)distanceUnit":{"name":"distanceUnit","abstract":"<p>@abstract Display the distance unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the hmi setting module.","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)distanceUnitAvailable":{"name":"distanceUnitAvailable","abstract":"<p>@abstract Availability of the control of distance unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)temperatureUnitAvailable":{"name":"temperatureUnitAvailable","abstract":"<p>@abstract Availability of the control of temperature unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)displayModeUnitAvailable":{"name":"displayModeUnitAvailable","abstract":"<p>@abstract Availability of the control of HMI display mode.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all HMI levels that are permitted for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all HMI levels that are prohibited for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"<p>Availability of built in Nav. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"<p>Availability of built in phone. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"<p>Availability of built in video streaming. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)remoteControl":{"name":"remoteControl","abstract":"<p>Availability of built in remote control. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)appServices":{"name":"appServices","abstract":"<p>Availability of app services. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)displays":{"name":"displays","abstract":"<p>Availability of displays. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)seatLocation":{"name":"seatLocation","abstract":"<p>Availability of seatLocation. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)col":{"name":"col","abstract":"<p>Required, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)row":{"name":"row","abstract":"<p>Required, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)level":{"name":"level","abstract":"<p>Optional, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)colspan":{"name":"colspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)rowspan":{"name":"rowspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)levelspan":{"name":"levelspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"<p>Provides additional human readable info regarding the result.</p>","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Convenience init to get waypoints.</p>","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"<p>To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The cloud app vehicle ID</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, requests GPS data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, requests Speed data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, requests RPM data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, requests Fuel Level data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, requests Fuel Level State data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, requests Fuel Range data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, requests Instant Fuel Consumption data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, requests External Temperature data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"<p>A boolean value. If true, requests the Vehicle Identification Number.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, requests PRNDL data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, requests Tire Pressure data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, requests Odometer data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, requests Belt Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, requests Body Information data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, requests Device Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, requests Driver Braking data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, requests Wiper Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, requests Head Lamp Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, requests Engine Oil Life data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, requests Engine Torque data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, requests Acc Pedal Position data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, requests Steering Wheel Angle data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, requests Emergency Call Info data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, requests Air Bag Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, requests Emergency Event (if it occurred) data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, requests Cluster Mode Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, requests MyKey data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, requests Electronic Parking Brake status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, requests Turn Signal data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, requests the Cloud App Vehicle ID.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"<p>The requested system capability, of the type that was sent in the request</p>","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:subscribe:":{"name":"-initWithType:subscribe:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>The type of system capability to get more information on</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)subscribe":{"name":"subscribe","abstract":"<p>Flag to subscribe to updates of the supplied service capability type. If true, the requester will be subscribed. If false, the requester will not be subscribed and be removed as a subscriber if it was previously subscribed.</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The requested data</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"<p>It is a conditional-mandatory parameter: must be returned in case &ldquo;subscribe&rdquo; parameter was present in the related request.</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataConsentResponse(py)allowed":{"name":"allowed","abstract":"<p>This array has the same size as &ldquo;moduleIds&rdquo; in the request; each element corresponding to one moduleId","parent_name":"SDLGetInteriorVehicleDataConsentResponse"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(im)initWithModuleType:moduleIds:":{"name":"-initWithModuleType:moduleIds:","abstract":"<p>Convenience init to get consent to control a module</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleType":{"name":"moduleType","abstract":"<p>The module type that the app requests to control.</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleIds":{"name":"moduleIds","abstract":"<p>Ids of a module of same type, published by System Capability.</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"<p>Convenience init to get information of a particular module type with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:moduleId:":{"name":"-initAndSubscribeToModuleType:moduleId:","abstract":"<p>Convenience init to get information and subscribe to a particular module type with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:moduleId:":{"name":"-initAndUnsubscribeToModuleType:moduleId:","abstract":"<p>Convenience init to unsubscribe from particular module with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"<p>Convenience init to get information of a particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"<p>Convenience init to get information and subscribe to a particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"<p>Convenience init to unsubscribe from particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"<p>The type of a RC module to retrieve module data from the vehicle.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"<p>If subscribe is true, the head unit will register OnInteriorVehicleData notifications for the requested module (moduleId and moduleType).","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(im)initWithOffset:length:fileType:crc:":{"name":"-initWithOffset:length:fileType:crc:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)fileType":{"name":"fileType","abstract":"<p>File type that is being sent in response.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)crc":{"name":"crc","abstract":"<p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:":{"name":"-initWithFileName:appServiceId:fileType:","abstract":"<p>Convenience init for sending a small file.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:offset:length:":{"name":"-initWithFileName:appServiceId:fileType:offset:length:","abstract":"<p>Convenience init for sending a large file in multiple data chunks.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileName":{"name":"fileName","abstract":"<p>File name that should be retrieved.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)appServiceId":{"name":"appServiceId","abstract":"<p>ID of the service that should have uploaded the requested file.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileType":{"name":"fileType","abstract":"<p>Selected file type.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"<p>2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"<p>Array of all reported DTCs on module (ecuHeader contains information if list is truncated). Each DTC is represented by 4 bytes (3 bytes of data and 1 byte status as defined in VHR_Layout_Specification_DTCs.pdf).</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"<p>Convenience init with all properties</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"<p>a name of the module to receive the DTC form","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)dtcMask":{"name":"dtcMask","abstract":"<p>DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(py)properties":{"name":"properties","abstract":"<p>The requested cloud application properties.</p>","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(py)appID":{"name":"appID","abstract":"<p>The id of the cloud app.</p>","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(im)initWithAppServiceData:":{"name":"-initWithAppServiceData:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(py)serviceData":{"name":"serviceData","abstract":"<p>Contains all the current data of the app service.</p>","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"<p>Convenience init for service type.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndSubscribeToAppServiceType:":{"name":"-initAndSubscribeToAppServiceType:","abstract":"<p>Convenience init for subscribing to a service type.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndUnsubscribeToAppServiceType:":{"name":"-initAndUnsubscribeToAppServiceType:","abstract":"<p>Convenience init for unsubscribing to a service type</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See <code>AppServiceType</code> for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)subscribe":{"name":"subscribe","abstract":"<p>If true, the consumer is requesting to subscribe to all future updates from the service publisher. If false, the consumer doesn&rsquo;t wish to subscribe and should be unsubscribed if it was previously subscribed.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>longitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>latitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"<p>utc year</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"<p>utc month</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"<p>utc day</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"<p>utc hours</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"<p>utc minutes</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"<p>utc seconds</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"<p>Optional, Potential Compass Directions</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"<p>The 3D positional dilution of precision.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"<p>The horizontal dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"<p>the vertical dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"<p>What the coordinates are based on</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"<p>The number of satellites in view</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"<p>The supported dimensions of the GPS</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"<p>Altitude in meters</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"<p>Heading based on the GPS data.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"<p>Speed in KPH</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)shifted":{"name":"shifted","abstract":"<p>True, if GPS lat/long, time, and altitude have been purposefully shifted (requires a proprietary algorithm to unshift).","parent_name":"SDLGPSData"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(cm)sharedInstance":{"name":"+sharedInstance","abstract":"<p>The shared object for pulling function id information</p>","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionNameForId:":{"name":"-functionNameForId:","abstract":"<p>Gets the function name for a given SDL RPC function ID</p>","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionIdForName:":{"name":"-functionIdForName:","abstract":"<p>Gets the function ID for a given SDL RPC function name</p>","parent_name":"SDLFunctionID"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)type":{"name":"type","abstract":"<p>The vehicle&rsquo;s fuel type</p>","parent_name":"SDLFuelRange"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)range":{"name":"range","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption.</p>","parent_name":"SDLFuelRange"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)artworkRetryCount":{"name":"artworkRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLArtwork.html\">SDLArtwork</a></code> files in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)fileRetryCount":{"name":"fileRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload general <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLFile.html\">SDLFile</a></code>s in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>Creates a default file manager configuration.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)init":{"name":"-init","abstract":"<p>Use <code>defaultConfiguration</code> instead</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)initWithArtworkRetryCount:fileRetryCount:":{"name":"-initWithArtworkRetryCount:fileRetryCount:","abstract":"<p>Creates a file manager configuration with customized upload retry counts.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"<p>A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"<p>The number of bytes still available for files for this app.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"<p>The state of the file manager.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"<p>The currently pending transactions (Upload, Delete, and List Files) in the file manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"<p>Whether or not the file manager is suspended. If suspended, the file manager can continue to queue uploads and deletes, but will not actually perform any of those until it is no longer suspended. This can be used for throttling down the file manager if other, important operations are taking place over the accessory connection.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"<p>Initialize the class&hellip;or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new file manager with a specified connection manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Creates a new file manager with a specified connection manager and configuration</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>The manager stars up and attempts to fetch its initial list and transfer initial files.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"<p>Cancels all file manager operations and deletes all associated data.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"<p>Check if the remote system contains a file</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"<p>Delete a file stored on the remote system</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"<p>Deletes an array of files on the remote file system. The files are deleted in the order in which they are added to the array, with the first file to be deleted at index 0. The delete queue is sequential, meaning that once a delete request is sent to Core, the queue waits until a response is received from Core before the next the next delete request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"<p>Upload a file to the remote file system. If a file with the [SDLFile name] already exists, this will overwrite that file. If you do not want that to happen, check remoteFileNames before uploading, or change allowOverwrite to NO.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"<p>Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"<p>Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"<p>Uploads an artwork file to the remote file system and returns the name of the uploaded artwork once completed. If an artwork with the same name is already on the remote system, the artwork is not uploaded and the artwork name is simply returned.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"<p>Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"<p>Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"<p>A URL to the directory where temporary files are stored. When an SDLFile is created with NSData, it writes to a temporary file until the file manager finishes uploading it.</p>","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"<p>Whether or not the file should persist on disk between car ignition cycles.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"<p>Whether or not the file should overwrite an existing file on the remote disk with the same name.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"<p>The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"<p>The url the local file is stored at while waiting to push it to the remote system. If the data has not been passed to the file URL, this will be nil.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"<p>The binary data of the SDLFile. If initialized with data, this will be a relatively quick call, but if initialized with a file URL, this is a rather expensive call the first time. The data will be cached in RAM after the first call.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the binary data of the SDLFile.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"<p>The system will attempt to determine the type of file that you have passed in. It will default to BINARY if it does not recognize the file type or the file type is not supported by SDL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"<p>A stream to pull binary data from a SDLFile. The stream only pulls required data from the file on disk or in memory. This reduces memory usage while uploading a large file to the remote system as each chunk of data can be released immediately after it is uploaded.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)isStaticIcon":{"name":"isStaticIcon","abstract":"<p>Describes whether or not this file is represented by static icon data. The head unit will present its representation of the static icon concept when sent this data.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"<p>The designated initializer for an SDL File. The only major property that is not set using this is &ldquo;overwrite&rdquo;, which defaults to NO.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(im)initWithChannelId:channelSetting:":{"name":"-initWithChannelId:channelSetting:","abstract":"<p>Convenience init</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelName":{"name":"channelName","abstract":"<p>@abstract Read-only channel / frequency name","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelSetting":{"name":"channelSetting","abstract":"<p>@abstract Reflects the setting, from 0%-100%.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelId":{"name":"channelId","abstract":"<p>@abstract id of the channel.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>A set of security managers used to encrypt traffic data. Each OEM has their own proprietary security manager.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)delegate":{"name":"delegate","abstract":"<p>A delegate callback that will tell you when an acknowledgement has occurred for starting as secure service.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>Creates a default encryption configuration.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(im)initWithSecurityManagers:delegate:":{"name":"-initWithSecurityManagers:delegate:","abstract":"<p>Creates a secure configuration for each of the security managers provided.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"<p>References signal &ldquo;VedsEvntType_D_Ltchd&rdquo;. See EmergencyEventType.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"<p>References signal &ldquo;RCM_FuelCutoff&rdquo;. See FuelCutoffStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"<p>References signal &ldquo;VedsEvntRoll_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"<p>References signal &ldquo;VedsMaxDeltaV_D_Ltchd&rdquo;. Change in velocity in KPH.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"<p>References signal &ldquo;VedsMultiEvnt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"<p>References signal &ldquo;eCallNotification_4A&rdquo;. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"<p>References signal &ldquo;eCallNotification&rdquo;. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"<p>References signal &ldquo;eCallConfirmation&rdquo;. See ECallConfirmationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:":{"name":"-initWithDisplayName:","abstract":"<p>Init with required properties</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowTypeSupported:windowCapabilities:":{"name":"-initWithDisplayName:windowTypeSupported:windowCapabilities:","abstract":"<p>Init with all the properities</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)displayName":{"name":"displayName","abstract":"<p>Name of the display.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowTypeSupported":{"name":"windowTypeSupported","abstract":"<p>Informs the application how many windows the app is allowed to create per type.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowCapabilities":{"name":"windowCapabilities","abstract":"<p>Contains a list of capabilities of all windows related to the app. Once the app has registered the capabilities of all windows will be provided, but GetSystemCapability still allows requesting window capabilities of all windows.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"<p>The type of display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayName":{"name":"displayName","abstract":"<p>The name of the connected display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"<p>An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as <em>SDLShow</em>, <em>SDLSetMediaClockTimer</em>, etc.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"<p>An array of SDLImageField elements</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"<p>An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"<p>The display&rsquo;s persistent screen supports.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>An array of all predefined persistent display templates available on the head unit.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"<p>A set of all parameters related to a prescribed screen area (e.g. for video / touch input)</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-screen custom presets available (if any); otherwise omitted</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"<p>Convenience init to initiate a dial number request</p>","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"<p>Up to 40 character string representing the phone number. All characters stripped except for &lsquo;0&rsquo;-&lsquo;9&rsquo;, &lsquo;*&rsquo;, &lsquo;#&rsquo;, &lsquo;,&rsquo;, &lsquo;;&rsquo;, and &lsquo;+&rsquo;</p>","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"<p>Array of bytes comprising CAN message result.</p>","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"<p>Convenience init</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"<p>Name of target ECU</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"<p>Length of message (in bytes)</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"<p>Array of bytes comprising CAN message.</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"<p>Indicates whether the voice recognition is on or off</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"<p>Indicates whether the bluetooth connection established</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"<p>Indicates whether a call is being active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"<p>Indicates whether the phone is in roaming mode</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"<p>Indicates whether a textmessage is available</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"<p>Battery level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"<p>The status of the stereo audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"<p>The status of the mono audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"<p>Signal level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"<p>The current primary audio source of SDL (if selected).</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"<p>Indicates if an emergency call is active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"<p>Convenience init. Object will contain all information about the connected device automatically.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"<p>Device model</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"<p>Device firmware version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"<p>Device OS</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"<p>Device OS version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"<p>Device mobile carrier</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"<p>Number of bluetooth RFCOMM ports available.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(im)initWithId:":{"name":"-initWithId:","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(py)windowID":{"name":"windowID","abstract":"<p>A unique ID to identify the window.</p>","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to delete a submenu</p>","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"<p>the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to delete a choice set</p>","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>The remaining available space for your application to store data on the remote system.</p>","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init to delete a file</p>","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to remove a command from the menu</p>","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"<p>the Command ID that identifies the Command to be deleted from Command Menu","parent_name":"SDLDeleteCommand"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:":{"name":"-initWithHour:minute:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:","abstract":"<p>Convenience init for creating a date with all properties</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"<p>Milliseconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"<p>Seconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"<p>Minutes part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"<p>Hour part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"<p>Day of the month</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"<p>Month of the year</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"<p>The year in YYYY format</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"<p>Time zone offset in Min with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"<p>Time zone offset in Hours with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"<p>Individual DID result code.</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"<p>Location of raw data from vehicle data DID</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"<p>Raw DID-based data returned for requested element.</p>","parent_name":"SDLDIDResult"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:":{"name":"-initWithId:windowName:windowType:","abstract":"<p>Constructor with the required parameters</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:":{"name":"-initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:","abstract":"<p>Convinience constructor with all the parameters.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowID":{"name":"windowID","abstract":"<p>A unique ID to identify the window.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowName":{"name":"windowName","abstract":"<p>The window name to be used by the HMI.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)type":{"name":"type","abstract":"<p>The type of the window to be created. Main window or widget.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)associatedServiceType":{"name":"associatedServiceType","abstract":"<p>Allows an app to create a widget related to a specific service type.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)duplicateUpdatesFromWindowID":{"name":"duplicateUpdatesFromWindowID","abstract":"<p>Optional parameter. Specify whether the content sent to an existing window should be duplicated to the created window. If there isn&rsquo;t a window with the ID, the request will be rejected with <code>INVALID_DATA</code>.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"<p>Convenience init for creating a choice set RPC</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>A unique ID that identifies the Choice Set</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"<p>Array of choices, which the user can select by menu or voice recognition</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"<p>The lifecycle configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"<p>The lock screen configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"<p>The log configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"<p>The streaming media configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig":{"name":"fileManagerConfig","abstract":"<p>The file manager configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)encryptionConfig":{"name":"encryptionConfig","abstract":"<p>The encryption configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:encryption:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"<p>References signal &ldquo;PowerMode_UB&rdquo;.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"<p>References signal &ldquo;PowerModeQF&rdquo;. See PowerModeQualificationStatus.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"<p>References signal &ldquo;CarMode&rdquo;. See CarMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"<p>References signal &ldquo;PowerMode&rdquo;. See PowerMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:":{"name":"-initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)nicknames":{"name":"nicknames","abstract":"<p>An array of app names a cloud app is allowed to register with. If included in a <code>SetCloudAppProperties</code> request, this value will overwrite the existing &ldquo;nicknames&rdquo; field in the app policies section of the policy table.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)appID":{"name":"appID","abstract":"<p>The id of the cloud app.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)enabled":{"name":"enabled","abstract":"<p>If true, the cloud app will appear in the HMI&rsquo;s app list; if false, the cloud app will not appear in the HMI&rsquo;s app list.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)authToken":{"name":"authToken","abstract":"<p>Used to authenticate websocket connection on app activation.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)cloudTransportType":{"name":"cloudTransportType","abstract":"<p>Specifies the connection type Core should use. Currently the ones that work in SDL Core are <code>WS</code> or <code>WSS</code>, but an OEM can implement their own transport adapter to handle different values.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)hybridAppPreference":{"name":"hybridAppPreference","abstract":"<p>Specifies the user preference to use the cloud app version or mobile app version when both are available.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)endpoint":{"name":"endpoint","abstract":"<p>The websocket endpoint.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:","abstract":"<p>Convenience init for climate control data.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:","abstract":"<p>Convenience init for climate control data.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:","abstract":"<p>Convenience init for climate control data with all properties.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"<p>Speed of Fan in integer</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The Current Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"<p>Desired Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"<p>Represents if AC is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"<p>Represents if circulation of air is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"<p>Represents if auto mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"<p>Represents the kind of defrost zone.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"<p>Represents if dual mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"<p>Represents if ac max is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>Represents the kind of Ventilation zone.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedSteeringWheelEnable":{"name":"heatedSteeringWheelEnable","abstract":"<p>@abstract value false means disabled/turn off, value true means enabled/turn on.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedWindshieldEnable":{"name":"heatedWindshieldEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedRearWindowEnable":{"name":"heatedRearWindowEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedMirrorsEnable":{"name":"heatedMirrorsEnable","abstract":"<p>@abstract Value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)climateEnable":{"name":"climateEnable","abstract":"<p>@abstract Value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities with all properities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleName":{"name":"moduleName","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)fanSpeedAvailable":{"name":"fanSpeedAvailable","abstract":"<p>Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"<p>Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"<p>Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"<p>Availability of the control of enable/disable air conditioning is ON on the maximum level.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)circulateAirEnableAvailable":{"name":"circulateAirEnableAvailable","abstract":"<p>Availability of the control of enable/disable circulate Air mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)autoModeEnableAvailable":{"name":"autoModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"<p>Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"<p>A set of all defrost zones that are controllable.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"<p>Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedSteeringWheelAvailable":{"name":"heatedSteeringWheelAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Steering Wheel.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedWindshieldAvailable":{"name":"heatedWindshieldAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Windshield.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedRearWindowAvailable":{"name":"heatedRearWindowAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Rear Window.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedMirrorsAvailable":{"name":"heatedMirrorsAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Mirrors.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)climateEnableAvailable":{"name":"climateEnableAvailable","abstract":"<p>@abstract Availability of the control of enable/disable climate control.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout":{"name":"defaultTimeout","abstract":"<p>Set this to change the default timeout for all choice sets. If a timeout is not set on an individual choice set object (or if it is set to 0.0), then it will use this timeout instead. See <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout\">timeout</a></code> for more details. If this is not set by you, it will default to 10 seconds.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultLayout":{"name":"defaultLayout","abstract":"<p>Set this to change the default layout for all choice sets. If a layout is not set on an individual choice set object, then it will use this layout instead. See <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout\">layout</a></code> for more details. If this is not set by you, it will default to <code>SDLChoiceSetLayoutList</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)title":{"name":"title","abstract":"<p>Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout":{"name":"layout","abstract":"<p>Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout":{"name":"timeout","abstract":"<p>Maps to PerformInteraction.timeout. This applies only to a manual selection (not a voice selection, which has its timeout handled by the system). Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout\">defaultTimeout</a></code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Maps to PerformInteraction.timeoutPrompt. This text is spoken when a VR interaction times out. If this set is presented in a manual (non-voice) only interaction, this will be ignored.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks &ldquo;help&rdquo; when the interaction is occurring.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpList":{"name":"helpList","abstract":"<p>Maps to PerformInteraction.vrHelp. This is a list of help text presented to the user when they are in a voice recognition interaction from your choice set of options. If this set is presented in a touch only interaction, this will be ignored.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)delegate":{"name":"delegate","abstract":"<p>The delegate of this choice set, called when the user interacts with it.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)choices":{"name":"choices","abstract":"<p>The choices to be displayed to the user within this choice set. These choices could match those already preloaded via <code>SDLScreenManager preloadChoices:withCompletionHandler:</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:choices:":{"name":"-initWithTitle:delegate:choices:","abstract":"<p>Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be <code>nil</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:","abstract":"<p>Initializer with all possible properties.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:","abstract":"<p>Initializer with all possible properties.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)cancel":{"name":"-cancel","abstract":"<p>Cancels the choice set. If the choice set has not yet been sent to Core, it will not be sent. If the choice set is already presented on Core, the choice set will be immediately dismissed. Canceling an already presented choice set will only work if connected to Core versions 6.0+. On older versions of Core, the choice set will not be dismissed.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)text":{"name":"text","abstract":"<p>Maps to Choice.menuName. The primary text of the cell. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are not permitted and will result in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> failing to initialize.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryText":{"name":"secondaryText","abstract":"<p>Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>Maps to Choice.vrCommands. Optional voice commands the user can speak to activate the cell. If not set and the head unit requires it, this will be set to the number in the list that this item appears. However, this would be a very poor experience for a user if the choice set is presented as a voice only interaction or both interaction mode. Therefore, consider not setting this only when you know the choice set will be presented as a touch only interaction.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)artwork":{"name":"artwork","abstract":"<p>Maps to Choice.image. Optional image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryArtwork":{"name":"secondaryArtwork","abstract":"<p>Maps to Choice.secondaryImage. Optional secondary image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)init":{"name":"-init","abstract":"<p>Initialize the cell with nothing. This is unavailable</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:":{"name":"-initWithText:","abstract":"<p>Initialize the cell with text and nothing else.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:artwork:voiceCommands:":{"name":"-initWithText:artwork:voiceCommands:","abstract":"<p>Initialize the cell with text, optional artwork, and optional voice commands</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:":{"name":"-initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:","abstract":"<p>Initialize the cell with all optional items</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with the required parameters</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:":{"name":"-initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with all parameters</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"<p>The application-scoped identifier that uniquely identifies this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"<p>Text which appears in menu, representing this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"<p>VR synonyms for this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"<p>The image of the choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"<p>Secondary text to display; e.g. address of POI in a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Tertiary text to display; e.g. distance to POI for a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"<p>Secondary image for choice</p>","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with required parameters</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:":{"name":"-initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with all parameters</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"<p>The language the app wants to change to</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>HMI display language</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"<p>Request a new app name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"<p>Request a new TTSName registration.</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Request a new app short name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Request a new VR synonyms registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"<p>The supported interface orientation you wish to use. Defaults to MaskPortrait.</p>","parent_name":"SDLCarWindowViewController"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:":{"name":"-initWithFunctionID:","abstract":"<p>Convenience init for dismissing the currently presented modal view (either an alert, slider, scrollable message, or perform interation).</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:cancelID:":{"name":"-initWithFunctionID:cancelID:","abstract":"<p>Convenience init for dismissing a specific view.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithAlertCancelID:":{"name":"-initWithAlertCancelID:","abstract":"<p>Convenience init for dismissing an alert.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithSliderCancelID:":{"name":"-initWithSliderCancelID:","abstract":"<p>Convenience init for dismissing a slider.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithScrollableMessageCancelID:":{"name":"-initWithScrollableMessageCancelID:","abstract":"<p>Convenience init for dismissing a scrollable message.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithPerformInteractionCancelID:":{"name":"-initWithPerformInteractionCancelID:","abstract":"<p>Convenience init for dismissing a perform interaction.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)alert":{"name":"+alert","abstract":"<p>Convenience init for dismissing the currently presented alert.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)slider":{"name":"+slider","abstract":"<p>Convenience init for dismissing the currently presented slider.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)scrollableMessage":{"name":"+scrollableMessage","abstract":"<p>Convenience init for dismissing the currently presented scrollable message.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)performInteraction":{"name":"+performInteraction","abstract":"<p>Convenience init for dismissing the currently presented perform interaction.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)cancelID":{"name":"cancelID","abstract":"<p>The ID of the specific interaction to dismiss. If not set, the most recent of the RPC type set in functionID will be dismissed.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)functionID":{"name":"functionID","abstract":"<p>The ID of the type of interaction to dismiss.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"<p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:moduleId:":{"name":"-initWithButtonName:moduleType:moduleId:","abstract":"<p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"<p>The module where the button should be pressed.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The name of supported RC climate or radio button.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)name":{"name":"name","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a SHORT press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a LONG press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>A NSNumber value indicates whether the button supports &ldquo;button down&rdquo; and &ldquo;button up&rdquo;</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)parkBrakeActive":{"name":"parkBrakeActive","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStableStatus":{"name":"ignitionStableStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStatus":{"name":"ignitionStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)driverDoorAjar":{"name":"driverDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)passengerDoorAjar":{"name":"passengerDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearLeftDoorAjar":{"name":"rearLeftDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearRightDoorAjar":{"name":"rearRightDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBeltDeployed":{"name":"driverBeltDeployed","abstract":"<p>References signal &ldquo;VedsDrvBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"<p>References signal &ldquo;VedsPasBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1PasBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1DrvBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2lBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"<p>References signal &ldquo;VedsRw1PasChld_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2rBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3lBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3rBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"<p>References signal &ldquo;VedsRw2lRib_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"<p>References signal &ldquo;VedsRw2rRib_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"<p>References signal &ldquo;VedsRw1mBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"<p>The delegate describing when files are done playing or any errors that occur</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"<p>Whether or not we are currently playing audio</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"<p>The queue of audio files that will be played in sequence</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"<p>Init should only occur with dependencies. use <code>initWithManager:</code></p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"<p>Create an audio stream manager with a reference to the parent stream manager.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"<p>Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call <code>playNextWhenReady</code> to start playing the next completed pushed file.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithData:":{"name":"-pushWithData:","abstract":"<p>Push a new audio buffer onto the queue. Call <code>playNextWhenReady</code> to start playing the pushed audio buffer.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"<p>Play the next item in the queue. If an item is currently playing, it will continue playing and this item will begin playing after it is completed.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"<p>Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"<p>The sampling rate for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>The sample depth in bit for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"<p>The audiotype for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)inputFileURL":{"name":"inputFileURL","abstract":"<p>If initialized with a file URL, the file URL it came from</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)outputFileURL":{"name":"outputFileURL","abstract":"<p>If initialized with a file URL, where the transcoder should produce the transcoded PCM audio file</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)estimatedDuration":{"name":"estimatedDuration","abstract":"<p>In seconds. UINT32_MAX if unknown.</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)data":{"name":"data","abstract":"<p>The PCM audio data to be transferred and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the PCM audio data in bytes</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithInputFileURL:outputFileURL:estimatedDuration:":{"name":"-initWithInputFileURL:outputFileURL:estimatedDuration:","abstract":"<p>Initialize an audio file to be queued and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithData:":{"name":"-initWithData:","abstract":"<p>Initialize a buffer of PCM audio data to be queued and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(im)initWithSource:keepContext:volume:equalizerSettings:":{"name":"-initWithSource:keepContext:volume:equalizerSettings:","abstract":"<p>Constructs a newly allocated SDLAudioControlData object with given parameters</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)source":{"name":"source","abstract":"<p>@abstract In a getter response or a notification,","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)keepContext":{"name":"keepContext","abstract":"<p>@abstract This parameter shall not be present in any getter responses or notifications.","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)volume":{"name":"volume","abstract":"<p>@abstract Reflects the volume of audio, from 0%-100%.</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)equalizerSettings":{"name":"equalizerSettings","abstract":"<p>@abstract Defines the list of supported channels (band) and their current/desired settings on HMI</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the audio control module.","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)sourceAvailable":{"name":"sourceAvailable","abstract":"<p>@abstract Availability of the control of audio source.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)keepContextAvailable":{"name":"keepContextAvailable","abstract":"<p>Availability of the keepContext parameter.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)volumeAvailable":{"name":"volumeAvailable","abstract":"<p>@abstract Availability of the control of audio volume.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerAvailable":{"name":"equalizerAvailable","abstract":"<p>@abstract Availability of the control of Equalizer Settings.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerMaxChannelId":{"name":"equalizerMaxChannelId","abstract":"<p>@abstract Must be included if equalizerAvailable=true,","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)isTemplate":{"name":"isTemplate","abstract":"<p>Describes whether or not the image is a template that can be (re)colored by the SDL HMI. To make the artwork a template, set the <code>UIImage</code>s rendering mode to <code>UIImageRenderingModeAlwaysTemplate</code>. In order for templates to work successfully, the icon must be one solid color with a clear background. The artwork should be created using the PNG image format.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)imageRPC":{"name":"imageRPC","abstract":"<p>The Image RPC representing this artwork. Generally for use internally, you should instead pass an artwork to a Screen Manager method.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create an ephemeral artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"<p>Convenience helper to create an ephemeral artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithStaticIcon:":{"name":"+artworkWithStaticIcon:","abstract":"<p>Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create a persistent artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"<p>Convenience helper to create a persistent artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithStaticIcon:":{"name":"-initWithStaticIcon:","abstract":"<p>Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.</p>","parent_name":"SDLArtwork"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(im)initWithAppServices:":{"name":"-initWithAppServices:","abstract":"<p>Convenience init.</p>","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(py)appServices":{"name":"appServices","abstract":"<p>An array of currently available services. If this is an update to the capability the affected services will include an update reason in that item.</p>","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(im)initWithServiceID:serviceManifest:servicePublished:serviceActive:":{"name":"-initWithServiceID:serviceManifest:servicePublished:serviceActive:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceID":{"name":"serviceID","abstract":"<p>A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceManifest":{"name":"serviceManifest","abstract":"<p>Manifest for the service that this record is for.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)servicePublished":{"name":"servicePublished","abstract":"<p>If true, the service is published and available. If false, the service has likely just been unpublished, and should be considered unavailable.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceActive":{"name":"serviceActive","abstract":"<p>If true, the service is the active primary service of the supplied service type. It will receive all potential RPCs that are passed through to that service type. If false, it is not the primary service of the supplied type. See servicePublished for its availability.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"<p>Convenience init for serviceType.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"<p>Convenience init for a media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"<p>Convenience init for a media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"<p>Convenience init for a weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"<p>Convenience init for a weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"<p>Convenience init for a navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"<p>Convenience init for a navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceName":{"name":"serviceName","abstract":"<p>Unique name of this service.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceIcon":{"name":"serviceIcon","abstract":"<p>The file name of the icon to be associated with this service. Most likely the same as the appIcon.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)allowAppConsumers":{"name":"allowAppConsumers","abstract":"<p>If true, app service consumers beyond the IVI system will be able to access this service. If false, only the IVI system will be able consume the service. If not provided, it is assumed to be false.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)rpcSpecVersion":{"name":"rpcSpecVersion","abstract":"<p>This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)maxRPCSpecVersion":{"name":"maxRPCSpecVersion","abstract":"<p>This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)handledRPCs":{"name":"handledRPCs","abstract":"<p>This field contains the Function IDs for the RPCs that this service intends to handle correctly. This means the service will provide meaningful responses. See FunctionID for enum equivalent values. This parameter is an integer to allow for new function IDs to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)mediaServiceManifest":{"name":"mediaServiceManifest","abstract":"<p>A media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)weatherServiceManifest":{"name":"weatherServiceManifest","abstract":"<p>A weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)navigationServiceManifest":{"name":"navigationServiceManifest","abstract":"<p>A navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:":{"name":"-initWithAppServiceType:serviceId:","abstract":"<p>Convenience init for service type and service id.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithMediaServiceData:serviceId:":{"name":"-initWithMediaServiceData:serviceId:","abstract":"<p>Convenience init for media service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithWeatherServiceData:serviceId:":{"name":"-initWithWeatherServiceData:serviceId:","abstract":"<p>Convenience init for weather service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithNavigationServiceData:serviceId:":{"name":"-initWithNavigationServiceData:serviceId:","abstract":"<p>Convenience init for navigation service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:":{"name":"-initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See <code>AppServiceType</code> for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceId":{"name":"serviceId","abstract":"<p>A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)mediaServiceData":{"name":"mediaServiceData","abstract":"<p>The media service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)weatherServiceData":{"name":"weatherServiceData","abstract":"<p>The weather service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)navigationServiceData":{"name":"navigationServiceData","abstract":"<p>The navigation service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdatedAppServiceRecord:":{"name":"-initWithUpdatedAppServiceRecord:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdateReason:updatedAppServiceRecord:":{"name":"-initWithUpdateReason:updatedAppServiceRecord:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updateReason":{"name":"updateReason","abstract":"<p>Only included in <code>OnSystemCapbilityUpdated</code>. Update reason for this service record.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updatedAppServiceRecord":{"name":"updatedAppServiceRecord","abstract":"<p>Service record for a specific app service provider.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"<p>Convenience init with no parameters</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"<p>The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"<p>The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"<p>Represents the build version number of this particular mobile app.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"<p>Amount of time (in seconds) that an app must wait before resending an alert.</p>","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"<p>Convenience init to create an alert maneuver with required parameters</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"<p>Convenience init to create an alert maneuver with all parameters</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"<p>An arry of soft buttons. If omitted on supported displays, only the system defined &ldquo;Close&rdquo; SoftButton shall be displayed.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:":{"name":"-initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:","abstract":"<p>Convenience init for creating a modal view with text, buttons, and optional sound cues.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"<p>Convenience init for creating a sound-only alert.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:":{"name":"-initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:","abstract":"<p>Convenience init for setting all alert parameters.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"<p>Convenience init for creating an alert with two lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"<p>Convenience init for creating an alert with three lines of text.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"<p>Convenience init for creating an alert with three lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"<p>Convenience init for creating a speech-only alert.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"<p>Convenience init for creating an alert with two lines of text, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:alertText3:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:alertText3:playTone:duration:","abstract":"<p>Convenience init for creating an alert with three lines of text, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text, soft buttons, and optional sound cues.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text, soft buttons, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"<p>The first line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"<p>The second line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"<p>The optional third line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks to be spoken or a prerecorded sound file.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"<p>The duration of the displayed portion of the alert, in milliseconds. Typical timeouts are 3 - 5 seconds. If omitted, the timeout is set to a default of 5 seconds.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"<p>Whether the alert tone should be played before the TTS (if any) is spoken. If omitted or set to false, no tone is played.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"<p>If supported on the given platform, the alert GUI will include some sort of animation indicating that loading of a feature is progressing (e.g. a spinning wheel or hourglass, etc.).</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"<p>Buttons for the displayed alert. If omitted on supported displays, the displayed alert shall not have any buttons.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific alert to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertIcon":{"name":"alertIcon","abstract":"<p>Image to be displayed in the alert. If omitted on supported displays, no (or the default if applicable) icon should be displayed.</p>","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvSideBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvCrtnBag_D_Ltchd&rdquo;. See VehicleDataEventStatus</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasCrtnBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"<p>References signal &ldquo;VedsKneeDrvBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasSideBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"<p>References signal &ldquo;VedsKneePasBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuIcon:position:":{"name":"-initWithId:menuName:menuIcon:position:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuLayout:menuIcon:position:":{"name":"-initWithId:menuName:menuLayout:menuIcon:position:","abstract":"<p>Convenience init for creating an add submenu with all properties.</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"<p>a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"<p>a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"<p>a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon":{"name":"menuIcon","abstract":"<p>An image that is displayed alongside this submenu item</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuLayout":{"name":"menuLayout","abstract":"<p>The sub-menu layout. See available menu layouts on SDLWindowCapability.menuLayoutsAvailable. Defaults to LIST.</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Constructs a SDLAddCommand with a handler callback when an event occurs.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"<p>Convenience init for creating a voice command menu item.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"<p>Convenience init for creating a menu item with text.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:icon:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:icon:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you created is subscribed.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"<p>A unique id that identifies the command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"<p>A <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuParams.html\">SDLMenuParams</a></code> pointer which defines the command and how it is added to the command menu.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"<p>An array of strings to be used as VR synonyms for this command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"<p>Image struct containing a static or dynamic icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"<p>This class will add a command to the application&rsquo;s Command Menu</p>"},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddCommand.html\">SDLAddCommand</a></code></p>"},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"<p>Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddSubMenu.html\">SDLAddSubMenu</a></code></p>"},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"<p>A vehicle data status struct for airbags</p>"},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"<p>Shows an alert which typically consists of text-to-speech message and text on the display. Either <code>alertText1</code>, <code>alertText2</code> or <code>TTSChunks</code> needs to be set or the request will be rejected.</p>"},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"<p>Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display&rsquo;s base screen.</p>"},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"<p>Response to SDLAlertManeuver</p>"},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"<p>Response to SDLAlert</p>"},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"<p>A struct used in register app interface. Contains detailed information about the registered application.</p>"},"Classes/SDLAppServiceCapability.html":{"name":"SDLAppServiceCapability","abstract":"<p>A currently available service.</p>"},"Classes/SDLAppServiceData.html":{"name":"SDLAppServiceData","abstract":"<p>Contains all the current data of the app service. The serviceType will link to which of the service data objects are included in this object (e.g. if the service type is MEDIA, the mediaServiceData param should be included).</p>"},"Classes/SDLAppServiceManifest.html":{"name":"SDLAppServiceManifest","abstract":"<p>This manifest contains all the information necessary for the service to be published, activated, and allow consumers to interact with it</p>"},"Classes/SDLAppServiceRecord.html":{"name":"SDLAppServiceRecord","abstract":"<p>This is the record of an app service publisher that the module has. It should contain the most up to date information including the service&rsquo;s active state.</p>"},"Classes/SDLAppServicesCapabilities.html":{"name":"SDLAppServicesCapabilities","abstract":"<p>Capabilities of app services including what service types are supported and the current state of services.</p>"},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"<p>An SDLFile subclass specifically designed for images</p>"},"Classes/SDLAudioControlCapabilities.html":{"name":"SDLAudioControlCapabilities","abstract":"<p>Describes a head unit&rsquo;s audio control capabilities.</p>"},"Classes/SDLAudioControlData.html":{"name":"SDLAudioControlData","abstract":"<p>The audio control data information.</p>"},"Classes/SDLAudioFile.html":{"name":"SDLAudioFile","abstract":"<p>Includes inforamtion about a given audio file</p>"},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>"},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"<p>The manager to control the audio stream</p>"},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"<p>Vehicle data struct for the seat belt status</p>"},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"<p>The body information including power modes.</p>"},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>"},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"<p>This RPC allows a remote control type mobile application to simulate a hardware button press event.</p>"},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"<p>Response to SDLButtonPress</p>"},"Classes/SDLCancelInteraction.html":{"name":"SDLCancelInteraction","abstract":"<p>Used to dismiss a modal view programmatically without needing to wait for the timeout to complete. Can be used to dismiss alerts, scrollable messages, sliders, and perform interactions (i.e. pop-up menus).</p>"},"Classes.html#/c:objc(cs)SDLCancelInteractionResponse":{"name":"SDLCancelInteractionResponse","abstract":"<p>Response to the request to dismiss a modal view. If no applicable request can be dismissed, the <code>resultCode</code> will be <code>IGNORED</code>.</p>"},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"<p>Note that if this is embedded in a UINavigationController and UITabBarController, it will not lock orientation. You must lock your container controller to a specific orientation.</p>"},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"<p>If the app recognizes during the app registration that the SDL HMI language (voice/TTS and/or display) does not match the app language, the app will be able (but does not need) to change this registration with changeRegistration prior to app being brought into focus.</p>"},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"<p>Response to SDLChangeRegistrations</p>"},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"<p>A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.</p>"},"Classes/SDLChoiceCell.html":{"name":"SDLChoiceCell","abstract":"<p>A selectable item within an SDLChoiceSet</p>"},"Classes/SDLChoiceSet.html":{"name":"SDLChoiceSet","abstract":"<p>The choice set to be displayed to the user. Contains a list of selectable options.</p>"},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"<p>Contains information about a climate control module&rsquo;s capabilities.</p>"},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"<p>The current information for the Climate Remote Control Module</p>"},"Classes.html#/c:objc(cs)SDLCloseApplication":{"name":"SDLCloseApplication","abstract":"<p>Used by an app to set itself to a <code>HMILevel</code> of <code>NONE</code>. The app will close but will still be registered. If the app is a navigation app it will no longer be used as the preferred mobile-navigation application by the module.</p>"},"Classes.html#/c:objc(cs)SDLCloseApplicationResponse":{"name":"SDLCloseApplicationResponse","abstract":"<p>Response to the request to close this app on the module.</p>"},"Classes/SDLCloudAppProperties.html":{"name":"SDLCloudAppProperties","abstract":"<p>The cloud application properties.</p>"},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"<p>A vehicle data struct for the cluster mode and power status</p>"},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"<p>Contains information about the app&rsquo;s configurtion, such as lifecycle, lockscreen, encryption, etc.</p>"},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"<p>Creates a Choice Set which can be used in subsequent <em>SDLPerformInteraction</em> Operations.</p>"},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"<p>Response to SDLCreateInteractionChoiceSet has been called</p>"},"Classes/SDLCreateWindow.html":{"name":"SDLCreateWindow","abstract":"<p>Create a new window on the display with the specified window type."},"Classes.html#/c:objc(cs)SDLCreateWindowResponse":{"name":"SDLCreateWindowResponse","abstract":"<p>Response to SDLCreateWindow</p>"},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"<p>A vehicle data struct</p>"},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"<p>A struct referenced in SendLocation for an absolute date</p>"},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"<p>Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"<p>Response to SDLDeleteCommand</p>"},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"<p>Used to delete a file resident on the SDL module in the app&rsquo;s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"<p>Response to SDLDeleteFile</p>"},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"<p>Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"<p>SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called</p>"},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"<p>Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"<p>Response to SDLDeleteSubMenu</p>"},"Classes/SDLDeleteWindow.html":{"name":"SDLDeleteWindow","abstract":"<p>Deletes previously created window of the SDL application.</p>"},"Classes.html#/c:objc(cs)SDLDeleteWindowResponse":{"name":"SDLDeleteWindowResponse","abstract":"<p>Response to DeleteWindow</p>"},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"<p>Various information about connecting device. Referenced in RegisterAppInterface</p>"},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"<p>Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.</p>"},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"<p>Non periodic vehicle diagnostic request</p>"},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"<p>Response to SDLDiagnosticMessage</p>"},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"<p>This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.</p>"},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"<p>The response to SDLDialNumber</p>"},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>"},"Classes/SDLDisplayCapability.html":{"name":"SDLDisplayCapability","abstract":"<p>Contain the display related information and all windows related to that display.</p>"},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"<p>A vehicle data struct for emergency call information</p>"},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"<p>A vehicle data struct for an emergency event</p>"},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"<p>Allows encoded data in the form of SyncP packets to be sent to the SYNC module. Legacy / v1 Protocol implementation; use SyncPData instead.</p>"},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"<p>The response to SDLEncodedSyncPData</p>"},"Classes/SDLEncryptionConfiguration.html":{"name":"SDLEncryptionConfiguration","abstract":"<p>The encryption configuration data</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"<p>When this request is invoked, the audio capture stops</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"<p>Response to SDLEndAudioPassThru</p>"},"Classes/SDLEqualizerSettings.html":{"name":"SDLEqualizerSettings","abstract":"<p>Defines the each Equalizer channel settings.</p>"},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"<p>Crates an SDLFile from a file</p>"},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"<p>The SDLFileManager is an RPC manager for the remote file system. After it starts, it will attempt to communicate with the remote file system to get the names of all files. Deleting and Uploading will them queue these changes as transactions. If a delete succeeds, the local list of remote files will remove that file name, and likewise, if an upload succeeds, the local list of remote files will now include that file name.</p>"},"Classes/SDLFileManagerConfiguration.html":{"name":"SDLFileManagerConfiguration","abstract":"<p>File manager configuration information</p>"},"Classes/SDLFuelRange.html":{"name":"SDLFuelRange","abstract":"<p>Describes the distance a vehicle can travel with the current level of fuel.</p>"},"Classes/SDLFunctionID.html":{"name":"SDLFunctionID","abstract":"<p>A function ID for an SDL RPC</p>"},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"<p>Describes the GPS data. Not all data will be available on all carlines.</p>"},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"<p>Generic Response is sent when the name of a received request is unknown. It is only used in case of an error. It will have an INVALID_DATA result code.</p>"},"Classes/SDLGetAppServiceData.html":{"name":"SDLGetAppServiceData","abstract":"<p>This request asks the module for current data related to the specific service. It also includes an option to subscribe to that service for future updates.</p>"},"Classes/SDLGetAppServiceDataResponse.html":{"name":"SDLGetAppServiceDataResponse","abstract":"<p>This response includes the data that was requested from the specific service.</p>"},"Classes/SDLGetCloudAppProperties.html":{"name":"SDLGetCloudAppProperties","abstract":"<p>RPC used to get the current properties of a cloud application.</p>"},"Classes/SDLGetCloudAppPropertiesResponse.html":{"name":"SDLGetCloudAppPropertiesResponse","abstract":"<p>The response to GetCloudAppProperties</p>"},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"<p>This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"<p>Response to SDLGetDTCs</p>"},"Classes/SDLGetFile.html":{"name":"SDLGetFile","abstract":"<p>This request is sent to the module to retrieve a file.</p>"},"Classes/SDLGetFileResponse.html":{"name":"SDLGetFileResponse","abstract":"<p>Response to GetFiles</p>"},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"<p>Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataConsent.html":{"name":"SDLGetInteriorVehicleDataConsent","abstract":"<p>This RPC allows you to get consent to control a certian module</p>"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html":{"name":"SDLGetInteriorVehicleDataConsentResponse","abstract":"<p>Response to GetInteriorVehicleDataConsent</p>"},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"<p>A response to SDLGetInteriorVehicleData</p>"},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"<p>SDL RPC Request for expanded information about a supported system/HMI capability</p>"},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"<p>Response to SDLGetSystemCapability</p>"},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"<p>Requests current values of specific published vehicle data items.</p>"},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"<p>Response to SDLGetVehicleData</p>"},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"<p>This RPC allows you to get navigation waypoint data</p>"},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"<p>Response to SDLGetWayPoints</p>"},"Classes/SDLGrid.html":{"name":"SDLGrid","abstract":"<p>Describes a location (origin coordinates and span) of a vehicle component.</p>"},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"<p>Contains information about the HMI capabilities.</p>"},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"<p>Defining sets of HMI levels, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLHMISettingsControlCapabilities.html":{"name":"SDLHMISettingsControlCapabilities","abstract":"<p>HMI data struct for HMI control settings</p>"},"Classes/SDLHMISettingsControlData.html":{"name":"SDLHMISettingsControlData","abstract":"<p>Corresponds to &ldquo;HMI_SETTINGS&rdquo; ModuleType</p>"},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"<p>Defines spatial for each user control object for video streaming application</p>"},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"<p>Vehicle data struct for status of head lamps</p>"},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"<p>Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.</p>"},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"<p>A struct used in DisplayCapabilities describing the capability of an image field</p>"},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"<p>The resolution of an image</p>"},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"<p>Configuration of on-screen keyboard (if available)</p>"},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"<p>Configuration options for SDLManager</p>"},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"<p>Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes/SDLLightCapabilities.html":{"name":"SDLLightCapabilities","abstract":"<p>Current Light capabilities.</p>"},"Classes/SDLLightControlCapabilities.html":{"name":"SDLLightControlCapabilities","abstract":"<p>Current light control capabilities.</p>"},"Classes/SDLLightControlData.html":{"name":"SDLLightControlData","abstract":"<p>Data about the current light controls</p>"},"Classes/SDLLightState.html":{"name":"SDLLightState","abstract":"<p>Current light control state</p>"},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"<p>Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"<p>Response to SDLListFiles</p>"},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"<p>Describes a coordinate on earth</p>"},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"<p>Describes a location, including its coordinate, name, etc. Used in WayPoints.</p>"},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"<p>A configuration describing how the lock screen should be used by the internal SDL system for your application. This configuration is provided before SDL starts and will govern the entire SDL lifecycle of your application.</p>"},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"<p>The view controller for the lockscreen.</p>"},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"<p>Information about the current logging configuration</p>"},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"<p>A log file module is a collection of source code files that form a cohesive unit and that logs can all use to describe themselves. E.g. a &ldquo;transport&rdquo; module, or a &ldquo;Screen Manager&rdquo; module.</p>"},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"<p>Represents a filter over which SDL logs should be logged</p>"},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"<p>This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"<p>The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"<p>The File log will log to a text file on the iPhone in Documents/smartdevicelink/log/#appName##datetime##.log. It will log up to 3 logs which will rollover.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"<p>OS_LOG is an iOS 10+ only logging system that logs to the Console and the Apple system console. This is an improved replacement for Apple SysLog (SDLLogTargetAppleSystemLog). </p>"},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"<p>The top level manager object for all of SDL&rsquo;s interactions with the app and the head unit</p>"},"Classes/SDLMassageCushionFirmness.html":{"name":"SDLMassageCushionFirmness","abstract":"<p>The intensity or firmness of a cushion.</p>"},"Classes/SDLMassageModeData.html":{"name":"SDLMassageModeData","abstract":"<p>Specify the mode of a massage zone.</p>"},"Classes/SDLMediaServiceData.html":{"name":"SDLMediaServiceData","abstract":"<p>This data is related to what a media service should provide.</p>"},"Classes.html#/c:objc(cs)SDLMediaServiceManifest":{"name":"SDLMediaServiceManifest","abstract":"<p>A media service manifest.</p>"},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"<p>A menu cell item for the main menu or sub-menu.</p>"},"Classes/SDLMenuConfiguration.html":{"name":"SDLMenuConfiguration","abstract":"<p>Defines how the menu is configured</p>"},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"<p>Used when adding a sub menu to an application menu or existing sub menu.</p>"},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"<p>Metadata for Show fields</p>"},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"<p>Describes a remote control module&rsquo;s data</p>"},"Classes/SDLModuleInfo.html":{"name":"SDLModuleInfo","abstract":"<p>Contains information about a RC module.</p>"},"Classes/SDLMsgVersion.html":{"name":"SDLMsgVersion","abstract":"<p>Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.</p>"},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"<p>Vehicle Data struct</p>"},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"<p>Extended capabilities for an onboard navigation system</p>"},"Classes/SDLNavigationInstruction.html":{"name":"SDLNavigationInstruction","abstract":"<p>A navigation instruction.</p>"},"Classes/SDLNavigationServiceData.html":{"name":"SDLNavigationServiceData","abstract":"<p>This data is related to what a navigation service would provide.</p>"},"Classes/SDLNavigationServiceManifest.html":{"name":"SDLNavigationServiceManifest","abstract":"<p>A navigation service manifest.</p>"},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"<p>This class defines methods for getting groups of notifications</p>"},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"<p>Struct used in SendLocation describing an address</p>"},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"<p>Notifies an application that its interface registration has been terminated. This means that all SDL resources associated with the application are discarded, including the Command Menu, Choice Sets, button subscriptions, etc.</p>"},"Classes/SDLOnAppServiceData.html":{"name":"SDLOnAppServiceData","abstract":"<p>This notification includes the data that is updated from the specific service.</p>"},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"<p>Binary data is in binary part of hybrid msg.</p>"},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"<p>Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"<p>Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:</p>"},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"<p>This is called when a command was selected via VR after pressing the PTT button, or selected from the menu after pressing the MENU button.</p>"},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"<p>Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).</p>"},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"<p>Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED ***</p>"},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"<p>Notification containing an updated hashID which can be used over connection cycles (i.e. loss of connection, ignition cycles, etc.). Sent after initial registration and subsequently after any change in the calculated hash of all persisted app data.</p>"},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"<p>Notifications when subscribed vehicle data changes.</p>"},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"<p>Sent when a keyboard presented by a PerformInteraction has a keyboard input.</p>"},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"<p>Provides information to what language the SDL HMI language was changed</p>"},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"<p>To help prevent driver distraction, any SmartDeviceLink application is required to implement a lockscreen that must be enforced while the application is active on the system while the vehicle is in motion.</p>"},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"<p>Provides update to app of which sets of functions are available</p>"},"Classes/SDLOnRCStatus.html":{"name":"SDLOnRCStatus","abstract":"<p>OnRCStatus notifications to all registered mobile applications and the HMI whenever"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"<p>DEPRECATED</p>"},"Classes/SDLOnSystemCapabilityUpdated.html":{"name":"SDLOnSystemCapabilityUpdated","abstract":"<p>A notification to inform the connected device that a specific system capability has changed.</p>"},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"<p>An asynchronous request from the system for specific data from the device or the cloud or response to a request from the device or cloud Binary data can be included in hybrid part of message for some requests (such as Authentication request responses)</p>"},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"<p>Provides applications with notifications specific to the current TBT client status on the module</p>"},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"<p>Notifies about touch events on the screen&rsquo;s prescribed area during video streaming</p>"},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"<p>Callback for the periodic and non periodic vehicle data read function.</p>"},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"<p>Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.</p>"},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"<p>Defining sets of parameters, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLPerformAppServiceInteraction.html":{"name":"SDLPerformAppServiceInteraction","abstract":"<p>App service providers will likely have different actions exposed to the module and app service consumers. It will be difficult to standardize these actions by RPC versions and can easily become stale. Therefore, we introduce a best-effort attempt to take actions on a service.</p>"},"Classes/SDLPerformAppServiceInteractionResponse.html":{"name":"SDLPerformAppServiceInteractionResponse","abstract":"<p>Response to the request to request an app service.</p>"},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"<p>This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"<p>Response to SDLPerformAudioPassThru</p>"},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"<p>Performs an application-initiated interaction in which the user can select a choice from the passed choice set.</p>"},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"<p>PerformInteraction Response is sent, when SDLPerformInteraction has been called</p>"},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"<p>Permissions for a given set of RPCs</p>"},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>"},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"<p>Extended capabilities of the module&rsquo;s phone feature</p>"},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"<p>Pinch Gesture information</p>"},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"<p>Contains information about on-screen preset capabilities.</p>"},"Classes/SDLPublishAppService.html":{"name":"SDLPublishAppService","abstract":"<p>Registers a service offered by this app on the module."},"Classes/SDLPublishAppServiceResponse.html":{"name":"SDLPublishAppServiceResponse","abstract":"<p>Response to the request to register a service offered by this app on the module.</p>"},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"<p>Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.</p>"},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"<p>Response to SDLPutFile</p>"},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"<p>Include the data defined in Radio Data System, which is a communications protocol standard for embedding small amounts of digital information in conventional FM radio broadcasts.</p>"},"Classes/SDLRGBColor.html":{"name":"SDLRGBColor","abstract":"<p>Represents an RGB color</p>"},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"<p>Parent class of all RPC messages.</p>"},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"<p>An RPC sent from the head unit to the app about some data change, such as a button was pressed</p>"},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCNotification data easier</p>"},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"<p>Superclass of RPC requests</p>"},"Classes/SDLRPCRequestNotification.html":{"name":"SDLRPCRequestNotification","abstract":"<p>A NSNotification object that makes retrieving internal SDLRPCRequest data easier</p>"},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"<p>Superclass of RPC responses</p>"},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"<p>A NSNotification object that makes retrieving internal SDLRPCResponse data easier</p>"},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"<p>Superclass of all RPC-related structs and messages</p>"},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"<p>Contains information about a radio control module&rsquo;s capabilities.</p>"},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"<p>Include information (both read-only and changeable data) about a remote control radio module.</p>"},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"<p>Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"<p>A response to ReadDID</p>"},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"<p>A struct describing a rectangle</p>"},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"<p>Registers the application&rsquo;s interface with SDL. The <code>RegisterAppInterface</code> RPC declares the properties of the app, including the messaging interface version, the app name, etc. The mobile application must establish its interface registration with SDL before any other interaction with SDL can take place. The registration lasts until it is terminated either by the application calling the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses.html#/c:objc(cs)SDLUnregisterAppInterface\">SDLUnregisterAppInterface</a></code> method, or by SDL sending an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnAppInterfaceUnregistered.html\">SDLOnAppInterfaceUnregistered</a></code> notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.</p>"},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"<p>Response to SDLRegisterAppInterface</p>"},"Classes/SDLReleaseInteriorVehicleDataModule.html":{"name":"SDLReleaseInteriorVehicleDataModule","abstract":"<p>Releases a controlled remote control module so others can take control</p>"},"Classes.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModuleResponse":{"name":"SDLReleaseInteriorVehicleDataModuleResponse","abstract":"<p>Response to ReleaseInteriorVehicleDataModule</p>"},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"<p>Capabilities of the remote control feature</p>"},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"<p>Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"<p>Response to ResetGlobalProperties</p>"},"Classes/SDLSISData.html":{"name":"SDLSISData","abstract":"<p>HD radio Station Information Service (SIS) data.</p>"},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"<p>The SDLScreenManager is a manager to control SDL UI features. Use the screen manager for setting up the UI of the template, creating a menu for your users, creating softbuttons, setting textfields, etc..</p>"},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"<p>A struct in DisplayCapabilities describing parameters related to a video / touch input area</p>"},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"<p>Creates a full screen overlay containing a large block of formatted text that can be scrolled with buttons available.</p>"},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"<p>Response to SDLScrollableMessage</p>"},"Classes/SDLSeatControlCapabilities.html":{"name":"SDLSeatControlCapabilities","abstract":"<p>Include information about a seat control capabilities.</p>"},"Classes/SDLSeatControlData.html":{"name":"SDLSeatControlData","abstract":"<p>Seat control data corresponds to &ldquo;SEAT&rdquo; ModuleType.</p>"},"Classes/SDLSeatLocation.html":{"name":"SDLSeatLocation","abstract":"<p>Describes the location of a seat</p>"},"Classes/SDLSeatLocationCapability.html":{"name":"SDLSeatLocationCapability","abstract":"<p>Contains information about the locations of each seat.</p>"},"Classes/SDLSeatMemoryAction.html":{"name":"SDLSeatMemoryAction","abstract":"<p>Specify the action to be performed.</p>"},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"<p>Sends the spatial data gathered from SDLCarWindow or VirtualDisplayEncoder to the HMI. This data will be utilized by the HMI to determine how and when haptic events should occur.</p>"},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"<p>Response to SDLSendHapticData</p>"},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"<p>SendLocation is used to send a location to the navigation system for navigation</p>"},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"<p>Response to SDLSendLocation</p>"},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"<p>Used to set existing local file on SDL as the app&rsquo;s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"<p>Response to SDLSetAppIcon</p>"},"Classes/SDLSetCloudAppProperties.html":{"name":"SDLSetCloudAppProperties","abstract":"<p>RPC used to enable/disable a cloud application and set authentication data</p>"},"Classes.html#/c:objc(cs)SDLSetCloudAppPropertiesResponse":{"name":"SDLSetCloudAppPropertiesResponse","abstract":"<p>The response to SetCloudAppProperties</p>"},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"<p>Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"<p>Response to SDLSetDisplayLayout</p>"},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"<p>Sets global property values</p>"},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"<p>Response to SDLSetGlobalProperties</p>"},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"<p>This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"<p>Response to SDLSetInteriorVehicleData</p>"},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"<p>Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"<p>Response to SDLSetMediaClockTimer</p>"},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"<p>Updates the application&rsquo;s display text area, regardless of whether or not"},"Classes/SDLShowAppMenu.html":{"name":"SDLShowAppMenu","abstract":"<p>Used by an app to show the app&rsquo;s menu, typically this is used by a navigation app if the menu button is hidden.</p>"},"Classes.html#/c:objc(cs)SDLShowAppMenuResponse":{"name":"SDLShowAppMenuResponse","abstract":"<p>Response to the request to show the app menu.</p>"},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"<p>This RPC is used to update the user with navigation information for the constantly shown screen (base screen), but also for the alert maneuver screen.</p>"},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"<p>Response to SDLShowConstantTBT</p>"},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"<p>Response to SDLShow</p>"},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"<p>Tire pressure status of a single tire.</p>"},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"<p>Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider.</p>"},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"<p>Response to SDLSlider</p>"},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>"},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>"},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"<p>A soft button wrapper object that is capable of storing and switching between states</p>"},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"<p>A soft button state including data such as text, name and artwork</p>"},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"<p>Speaks a phrase over the vehicle audio system using SDL&rsquo;s TTS (text-to-speech) engine. The provided text to be spoken can be simply a text phrase, or it can consist of phoneme specifications to direct SDL&rsquo;s TTS engine to speak a &ldquo;speech-sculpted&rdquo; phrase.</p>"},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"<p>Response to SDLSpeak</p>"},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStationIDNumber.html":{"name":"SDLStationIDNumber","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"<p>The streaming media configuration. Use this class to configure streaming media information.</p>"},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"<p>Manager to help control streaming media services.</p>"},"Classes/SDLStreamingVideoScaleManager.html":{"name":"SDLStreamingVideoScaleManager","abstract":"<p>This class consolidates the logic of scaling between the view controller&rsquo;s coordinate system and the display&rsquo;s coordinate system.</p>"},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"<p>Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"<p>Response to SDLSubscribeButton</p>"},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"<p>Subscribes to specific published vehicle data items. The data will be only sent if it has changed. The application will be notified by the <code>onVehicleData</code> notification whenever new data is available. The update rate is dependent on sensors, vehicle architecture and vehicle type.</p>"},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"<p>Response to SDLSubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"<p>A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"<p>Response to SubscribeWayPoints</p>"},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"<p>Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.</p>"},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"<p>Allows binary data in the form of SyncP packets to be sent to the SYNC module. Binary data is in binary part of hybrid msg.</p>"},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"<p>Response to SyncPData</p>"},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"<p>The systemCapabilityType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the SystemCapability Type is NAVIGATION then a &ldquo;navigationCapability&rdquo; should exist.</p>"},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"<p>A manager that handles updating and subscribing to SDL capabilities.</p>"},"Classes/SDLSystemRequest.html":{"name":"SDLSystemRequest","abstract":"<p>An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as HTTP, Proprietary, or Authentication requests)</p>"},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"<p>Specifies what is to be spoken. This can be simply a text phrase, which SDL will speak according to its own rules. It can also be phonemes from either the Microsoft SAPI phoneme set, or from the LHPLUS phoneme set. It can also be a pre-recorded sound in WAV format (either developer-defined, or provided by the SDL platform).</p>"},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"<p>Struct representing a temperature.</p>"},"Classes/SDLTemplateColorScheme.html":{"name":"SDLTemplateColorScheme","abstract":"<p>A color scheme for all display layout templates.</p>"},"Classes/SDLTemplateConfiguration.html":{"name":"SDLTemplateConfiguration","abstract":"<p>Used to set an alternate template layout to a window.</p>"},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"<p>Struct defining the characteristics of a displayed field on the HMI.</p>"},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"<p>Struct used in Vehicle Data; the status and pressure of the tires.</p>"},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"<p>Describes a touch location</p>"},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"<p>The coordinate of a touch, used in a touch event</p>"},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"<p>A touch which occurred on the IVI system during projection</p>"},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"<p>The capabilities of touches during projection applications</p>"},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"<p>Touch Manager responsible for processing touch event notifications.</p>"},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"<p>A struct used in UpdateTurnList for Turn-by-Turn navigation applications</p>"},"Classes/SDLUnpublishAppService.html":{"name":"SDLUnpublishAppService","abstract":"<p>Unpublish an existing service published by this application.</p>"},"Classes.html#/c:objc(cs)SDLUnpublishAppServiceResponse":{"name":"SDLUnpublishAppServiceResponse","abstract":"<p>The response to UnpublishAppService</p>"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"<p>Terminates an application&rsquo;s interface registration. This causes SDL&reg; to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"<p>Response to UnregisterAppInterface</p>"},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"<p>Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"<p>Response to UnsubscribeButton</p>"},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"<p>This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"<p>Response to UnsubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"<p>Request to unsubscribe from navigation WayPoints and Destination</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"<p>Response to UnsubscribeWayPoints</p>"},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"<p>Updates the list of next maneuvers, which can be requested by the user pressing the softbutton<br></p>"},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"<p>Response to UpdateTurnList</p>"},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"<p>Individual published data request result</p>"},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"<p>Describes the type of vehicle the mobile phone is connected with.</p>"},"Classes/SDLVersion.html":{"name":"SDLVersion","abstract":"<p>Specifies a major / minor / patch version number for semantic versioning purposes and comparisons</p>"},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"<p>Contains information about this system&rsquo;s video streaming capabilities</p>"},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"<p>An available format for video streaming in projection applications</p>"},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"<p>Voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>"},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"<p>A help item for voice commands, used locally in interaction lists and globally</p>"},"Classes/SDLWeatherAlert.html":{"name":"SDLWeatherAlert","abstract":"<p>Contains information about a weather alert</p>"},"Classes/SDLWeatherData.html":{"name":"SDLWeatherData","abstract":"<p>Contains information about the current weather</p>"},"Classes/SDLWeatherServiceData.html":{"name":"SDLWeatherServiceData","abstract":"<p>This data is related to what a weather service would provide.</p>"},"Classes/SDLWeatherServiceManifest.html":{"name":"SDLWeatherServiceManifest","abstract":"<p>A weather service manifest.</p>"},"Classes/SDLWindowCapability.html":{"name":"SDLWindowCapability","abstract":"<p>Reflects content of DisplayCapabilities, ButtonCapabilities and SoftButtonCapabilities</p>"},"Classes/SDLWindowTypeCapabilities.html":{"name":"SDLWindowTypeCapabilities","abstract":"<p>Used to inform an app how many window instances per type that can be created.</p>"},"Categories/NSString%28SDLEnum%29.html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"<p>Returns whether or not two enums are equal.</p>","parent_name":"NSString(SDLEnum)"},"Categories/NSString%28SDLEnum%29.html":{"name":"NSString(SDLEnum)","abstract":"<p>Extensions to NSString specifically for SDL string enums</p>"},"Categories.html":{"name":"Categories","abstract":"<p>The following categories are available globally.</p>"},"Classes.html":{"name":"Classes","abstract":"<p>The following classes are available globally.</p>"},"Constants.html":{"name":"Constants","abstract":"<p>The following constants are available globally.</p>"},"Enums.html":{"name":"Enumerations","abstract":"<p>The following enumerations are available globally.</p>"},"Protocols.html":{"name":"Protocols","abstract":"<p>The following protocols are available globally.</p>"},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"<p>The following type definitions are available globally.</p>"}} \ No newline at end of file
+{"Type%20Definitions.html#/c:SDLAmbientLightStatus.h@T@SDLAmbientLightStatus":{"name":"SDLAmbientLightStatus","abstract":"<p>Reflects the status of the ambient light sensor for headlamps</p>"},"Type%20Definitions.html#/c:SDLAppHMIType.h@T@SDLAppHMIType":{"name":"SDLAppHMIType","abstract":"<p>Enumeration listing possible app hmi types.</p>"},"Type%20Definitions.html#/c:SDLAppInterfaceUnregisteredReason.h@T@SDLAppInterfaceUnregisteredReason":{"name":"SDLAppInterfaceUnregisteredReason","abstract":"<p>Indicates reason why app interface was unregistered. The application is being disconnected by SDL.</p>"},"Type%20Definitions.html#/c:SDLAppServiceType.h@T@SDLAppServiceType":{"name":"SDLAppServiceType","abstract":"<p>Enumeration listing possible app service types.</p>"},"Type%20Definitions.html#/c:SDLAudioStreamingIndicator.h@T@SDLAudioStreamingIndicator":{"name":"SDLAudioStreamingIndicator","abstract":"<p>Enumeration listing possible indicators of audio streaming changes</p>"},"Type%20Definitions.html#/c:SDLAudioStreamingState.h@T@SDLAudioStreamingState":{"name":"SDLAudioStreamingState","abstract":"<p>Describes whether or not streaming audio is currently audible to the user. Though provided in every OnHMIStatus notification, this information is only relevant for applications that declare themselves as media apps in RegisterAppInterface</p>"},"Type%20Definitions.html#/c:SDLAudioType.h@T@SDLAudioType":{"name":"SDLAudioType","abstract":"<p>Describes different audio type options for PerformAudioPassThru</p>"},"Type%20Definitions.html#/c:SDLBitsPerSample.h@T@SDLBitsPerSample":{"name":"SDLBitsPerSample","abstract":"<p>Describes different bit depth options for PerformAudioPassThru</p>"},"Type%20Definitions.html#/c:SDLButtonEventMode.h@T@SDLButtonEventMode":{"name":"SDLButtonEventMode","abstract":"<p>Indicates whether the button was depressed or released. A BUTTONUP event will always be preceded by a BUTTONDOWN event.</p>"},"Type%20Definitions.html#/c:SDLButtonName.h@T@SDLButtonName":{"name":"SDLButtonName","abstract":"<p>Defines logical buttons which, on a given SDL unit, would correspond to either physical or soft (touchscreen) buttons. These logical buttons present a standard functional abstraction which the developer can rely upon, independent of the SDL unit. For example, the developer can rely upon the OK button having the same meaning to the user across SDL platforms.</p>"},"Type%20Definitions.html#/c:SDLButtonPressMode.h@T@SDLButtonPressMode":{"name":"SDLButtonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press</p>"},"Type%20Definitions.html#/c:SDLCarModeStatus.h@T@SDLCarModeStatus":{"name":"SDLCarModeStatus","abstract":"<p>Describes the carmode the vehicle is in. Used in ClusterModeStatus</p>"},"Type%20Definitions.html#/c:SDLCharacterSet.h@T@SDLCharacterSet":{"name":"SDLCharacterSet","abstract":"<p>Character sets supported by SDL. Used to describe text field capabilities.</p>"},"Type%20Definitions.html#/c:SDLChoiceSet.h@T@SDLChoiceSetCanceledHandler":{"name":"SDLChoiceSetCanceledHandler","abstract":"<p>Notifies the subscriber that the choice set should be cancelled.</p>"},"Type%20Definitions.html#/c:SDLCompassDirection.h@T@SDLCompassDirection":{"name":"SDLCompassDirection","abstract":"<p>The list of potential compass directions. Used in GPS data</p>"},"Type%20Definitions.html#/c:SDLComponentVolumeStatus.h@T@SDLComponentVolumeStatus":{"name":"SDLComponentVolumeStatus","abstract":"<p>The volume status of a vehicle component. Used in SingleTireStatus and VehicleData Fuel Level</p>"},"Type%20Definitions.html#/c:SDLDefrostZone.h@T@SDLDefrostZone":{"name":"SDLDefrostZone","abstract":"<p>Enumeration listing possible defrost zones. Used in ClimateControlCapabilities and Data.</p>"},"Type%20Definitions.html#/c:SDLDeliveryMode.h@T@SDLDeliveryMode":{"name":"SDLDeliveryMode","abstract":"<p>Specifies the mode in which the sendLocation request is sent. Used in SendLocation.</p>"},"Type%20Definitions.html#/c:SDLDeviceLevelStatus.h@T@SDLDeviceLevelStatus":{"name":"SDLDeviceLevelStatus","abstract":"<p>Reflects the reported battery status of the connected device, if reported. Used in DeviceStatus.</p>"},"Type%20Definitions.html#/c:SDLDimension.h@T@SDLDimension":{"name":"SDLDimension","abstract":"<p>The supported dimensions of the GPS. Used in GPSData</p>"},"Type%20Definitions.html#/c:SDLDirection.h@T@SDLDirection":{"name":"SDLDirection","abstract":"<p>A navigation direction.</p>"},"Type%20Definitions.html#/c:SDLDisplayMode.h@T@SDLDisplayMode":{"name":"SDLDisplayMode","abstract":"<p>Identifies the various display types used by SDL.</p>"},"Type%20Definitions.html#/c:SDLDisplayType.h@T@SDLDisplayType":{"name":"SDLDisplayType","abstract":"<p>Identifies the various display types used by SDL. Used in DisplayCapabilities.</p>"},"Type%20Definitions.html#/c:SDLDistanceUnit.h@T@SDLDistanceUnit":{"name":"SDLDistanceUnit","abstract":"<p>Wiper Status</p>"},"Type%20Definitions.html#/c:SDLDriverDistractionState.h@T@SDLDriverDistractionState":{"name":"SDLDriverDistractionState","abstract":"<p>Enumeration that describes possible states of driver distraction. Used in OnDriverDistraction.</p>"},"Type%20Definitions.html#/c:SDLECallConfirmationStatus.h@T@SDLECallConfirmationStatus":{"name":"SDLECallConfirmationStatus","abstract":"<p>Reflects the status of the eCall Notification. Used in ECallInfo</p>"},"Type%20Definitions.html#/c:SDLElectronicParkBrakeStatus.h@T@SDLElectronicParkBrakeStatus":{"name":"SDLElectronicParkBrakeStatus","abstract":"<p>Reflects the status of the Electronic Parking Brake. A Vehicle Data Type.</p>"},"Type%20Definitions.html#/c:SDLEmergencyEventType.h@T@SDLEmergencyEventType":{"name":"SDLEmergencyEventType","abstract":"<p>Reflects the emergency event status of the vehicle. Used in EmergencyEvent</p>"},"Type%20Definitions.html#/c:SDLEnum.h@T@SDLEnum":{"name":"SDLEnum","abstract":"<p>NSString SDLEnum typedef</p>"},"Type%20Definitions.html#/c:SDLFileManager.h@T@SDLFileManagerStartupCompletionHandler":{"name":"SDLFileManagerStartupCompletionHandler","abstract":"<p>The handler that is called when the manager is set up or failed to set up with an error."},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileName":{"name":"SDLFileName","abstract":"<p>Typedef SDLFileName</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadCompletionHandler":{"name":"SDLFileManagerUploadCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadCompletionHandler":{"name":"SDLFileManagerMultiUploadCompletionHandler","abstract":"<p>A completion handler called after a set of upload requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadProgressHandler":{"name":"SDLFileManagerMultiUploadProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to a upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerDeleteCompletionHandler":{"name":"SDLFileManagerDeleteCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a delete request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiDeleteCompletionHandler":{"name":"SDLFileManagerMultiDeleteCompletionHandler","abstract":"<p>A completion handler called after a set of delete requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerListFilesCompletionHandler":{"name":"SDLFileManagerListFilesCompletionHandler","abstract":"<p>A completion handler called after response from Core to a list files request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerUploadArtworkCompletionHandler":{"name":"SDLFileManagerUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a response from Core to a artwork upload request.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkCompletionHandler":{"name":"SDLFileManagerMultiUploadArtworkCompletionHandler","abstract":"<p>A completion handler called after a set of upload artwork requests has completed.</p>"},"Type%20Definitions.html#/c:SDLFileManagerConstants.h@T@SDLFileManagerMultiUploadArtworkProgressHandler":{"name":"SDLFileManagerMultiUploadArtworkProgressHandler","abstract":"<p>In a multiple request send, a handler called after each response from Core to an artwork upload request.</p>"},"Type%20Definitions.html#/c:SDLFileType.h@T@SDLFileType":{"name":"SDLFileType","abstract":"<p>Enumeration listing possible file types. Used in SDLFile, PutFile, ImageField, OnSystemRequest</p>"},"Type%20Definitions.html#/c:SDLFuelCutoffStatus.h@T@SDLFuelCutoffStatus":{"name":"SDLFuelCutoffStatus","abstract":"<p>Reflects the status of the Restraints Control Module fuel pump cutoff. The fuel pump is cut off typically after the vehicle has had a collision. Used in EmergencyEvent.</p>"},"Type%20Definitions.html#/c:SDLFuelType.h@T@SDLFuelType":{"name":"SDLFuelType","abstract":"<p>Enumeration listing possible fuel types.</p>"},"Type%20Definitions.html#/c:SDLGlobalProperty.h@T@SDLGlobalProperty":{"name":"SDLGlobalProperty","abstract":"<p>Properties of a user-initiated VR interaction (i.e. interactions started by the user pressing the PTT button). Used in RPCs related to ResetGlobalProperties</p>"},"Type%20Definitions.html#/c:SDLHMILevel.h@T@SDLHMILevel":{"name":"SDLHMILevel","abstract":"<p>Specifies current level of the HMI. An HMI level indicates the degree of user interaction possible through the HMI (e.g. TTS only, display only, VR, etc.). The HMI level varies for an application based on the type of display (i.e. Nav or non-Nav) and the user directing &ldquo;focus&rdquo; to other applications (e.g. phone, other mobile applications, etc.). Used in OnHMIStatus</p>"},"Type%20Definitions.html#/c:SDLHMIZoneCapabilities.h@T@SDLHMIZoneCapabilities":{"name":"SDLHMIZoneCapabilities","abstract":"<p>Specifies HMI Zones in the vehicle. Used in RegisterAppInterfaceResponse</p>"},"Type%20Definitions.html#/c:SDLHybridAppPreference.h@T@SDLHybridAppPreference":{"name":"SDLHybridAppPreference","abstract":"<p>Enumeration for the user&rsquo;s preference of which app type to use when both are available.</p>"},"Type%20Definitions.html#/c:SDLIgnitionStableStatus.h@T@SDLIgnitionStableStatus":{"name":"SDLIgnitionStableStatus","abstract":"<p>Reflects the ignition switch stability. Used in BodyInformation</p>"},"Type%20Definitions.html#/c:SDLIgnitionStatus.h@T@SDLIgnitionStatus":{"name":"SDLIgnitionStatus","abstract":"<p>Reflects the status of ignition. Used in BodyInformation.</p>"},"Type%20Definitions.html#/c:SDLImageFieldName.h@T@SDLImageFieldName":{"name":"SDLImageFieldName","abstract":"<p>The name that identifies the filed. Used in DisplayCapabilities.</p>"},"Type%20Definitions.html#/c:SDLImageType.h@T@SDLImageType":{"name":"SDLImageType","abstract":"<p>Contains information about the type of image. Used in Image.</p>"},"Type%20Definitions.html#/c:SDLInteractionMode.h@T@SDLInteractionMode":{"name":"SDLInteractionMode","abstract":"<p>For application-initiated interactions (SDLPerformInteraction), this specifies the mode by which the user is prompted and by which the user&rsquo;s selection is indicated. Used in PerformInteraction.</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutocompleteCompletionHandler":{"name":"SDLKeyboardAutocompleteCompletionHandler","abstract":"<p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardAutoCompleteResultsHandler":{"name":"SDLKeyboardAutoCompleteResultsHandler","abstract":"<p>This handler is called when you wish to update your autocomplete text in response to the user&rsquo;s input.</p>"},"Type%20Definitions.html#/c:SDLKeyboardDelegate.h@T@SDLKeyboardCharacterSetCompletionHandler":{"name":"SDLKeyboardCharacterSetCompletionHandler","abstract":"<p>This handler is called when you wish to update your keyboard&rsquo;s limitedCharacterSet in response to the user&rsquo;s input</p>"},"Type%20Definitions.html#/c:SDLKeyboardEvent.h@T@SDLKeyboardEvent":{"name":"SDLKeyboardEvent","abstract":"<p>Enumeration listing possible keyboard events. Used in OnKeyboardInput.</p>"},"Type%20Definitions.html#/c:SDLKeyboardLayout.h@T@SDLKeyboardLayout":{"name":"SDLKeyboardLayout","abstract":"<p>Enumeration listing possible keyboard layouts. Used in KeyboardProperties.</p>"},"Type%20Definitions.html#/c:SDLKeypressMode.h@T@SDLKeypressMode":{"name":"SDLKeypressMode","abstract":"<p>Enumeration listing possible keyboard events.</p>"},"Type%20Definitions.html#/c:SDLLanguage.h@T@SDLLanguage":{"name":"SDLLanguage","abstract":"<p>Specifies the language to be used for TTS, VR, displayed messages/menus. Used in ChangeRegistration and RegisterAppInterface.</p>"},"Type%20Definitions.html#/c:SDLLayoutMode.h@T@SDLLayoutMode":{"name":"SDLLayoutMode","abstract":"<p>For touchscreen interactions, the mode of how the choices are presented. Used in PerformInteraction.</p>"},"Type%20Definitions.html#/c:SDLLightName.h@T@SDLLightName":{"name":"SDLLightName","abstract":"<p>The name that identifies the Light</p>"},"Type%20Definitions.html#/c:SDLLightStatus.h@T@SDLLightStatus":{"name":"SDLLightStatus","abstract":"<p>Reflects the status of Light.</p>"},"Type%20Definitions.html#/c:SDLLockScreenStatus.h@T@SDLLockScreenStatus":{"name":"SDLLockScreenStatus","abstract":"<p>Describes what the status of the lock screen should be</p>"},"Type%20Definitions.html#/c:SDLLockScreenViewController.h@T@SwipeGestureCallbackBlock":{"name":"SwipeGestureCallbackBlock","abstract":"<p>A block that can be used to close the lockscreen when the user swipes on the lockscreen. Override this in your own custom view controllers if you build a custom lock screen.</p>"},"Type%20Definitions.html#/c:SDLLogConstants.h@T@SDLLogFilterBlock":{"name":"SDLLogFilterBlock","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>"},"Type%20Definitions.html#/c:SDLMaintenanceModeStatus.h@T@SDLMaintenanceModeStatus":{"name":"SDLMaintenanceModeStatus","abstract":"<p>Describes the maintenence mode. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLManager.h@T@SDLManagerReadyBlock":{"name":"SDLManagerReadyBlock","abstract":"<p>The block called when the manager is ready to be used or an error occurs while attempting to become ready.</p>"},"Type%20Definitions.html#/c:SDLManager.h@T@SDLRPCUpdatedBlock":{"name":"SDLRPCUpdatedBlock","abstract":"<p>The block that will be called every time an RPC is received when subscribed to an RPC.</p>"},"Type%20Definitions.html#/c:SDLMassageCushion.h@T@SDLMassageCushion":{"name":"SDLMassageCushion","abstract":"<p>The List possible cushions of a multi-contour massage seat.</p>"},"Type%20Definitions.html#/c:SDLMassageMode.h@T@SDLMassageMode":{"name":"SDLMassageMode","abstract":"<p>The List possible modes of a massage zone.</p>"},"Type%20Definitions.html#/c:SDLMassageZone.h@T@SDLMassageZone":{"name":"SDLMassageZone","abstract":"<p>List possible zones of a multi-contour massage seat.</p>"},"Type%20Definitions.html#/c:SDLMediaClockFormat.h@T@SDLMediaClockFormat":{"name":"SDLMediaClockFormat","abstract":"<p>Indicates the format of the time displayed on the connected SDL unit.</p>"},"Type%20Definitions.html#/c:SDLMediaType.h@T@SDLMediaType":{"name":"SDLMediaType","abstract":"<p>Enumeration listing possible media types.</p>"},"Type%20Definitions.html#/c:SDLMenuCell.h@T@SDLMenuCellSelectionHandler":{"name":"SDLMenuCellSelectionHandler","abstract":"<p>The handler to run when a menu item is selected.</p>"},"Type%20Definitions.html#/c:SDLMenuLayout.h@T@SDLMenuLayout":{"name":"SDLMenuLayout","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLMetadataType.h@T@SDLMetadataType":{"name":"SDLMetadataType","abstract":"<p>Text Field metadata types. Used in Show.</p>"},"Type%20Definitions.html#/c:SDLModuleType.h@T@SDLModuleType":{"name":"SDLModuleType","abstract":"<p>The type of remote control data. Used in ButtonPress, GetInteriorVehicleData, and ModuleData</p>"},"Type%20Definitions.html#/c:SDLNavigationAction.h@T@SDLNavigationAction":{"name":"SDLNavigationAction","abstract":"<p>A navigation action.</p>"},"Type%20Definitions.html#/c:SDLNavigationJunction.h@T@SDLNavigationJunction":{"name":"SDLNavigationJunction","abstract":"<p>A navigation junction type.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationName":{"name":"SDLNotificationName","abstract":"<p>NSNotification names specific to incoming SDL RPC</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLNotificationUserInfoKey":{"name":"SDLNotificationUserInfoKey","abstract":"<p>The key used in all SDL NSNotifications to extract the response or notification from the userInfo dictionary.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLAudioPassThruHandler":{"name":"SDLAudioPassThruHandler","abstract":"<p>A handler used on SDLPerformAudioPassThru.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLResponseHandler":{"name":"SDLResponseHandler","abstract":"<p>A handler used on all RPC requests which fires when the response is received.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleRequestCompletionHandler":{"name":"SDLMultipleRequestCompletionHandler","abstract":"<p>A completion handler called after a sequential or simultaneous set of requests have completed sending.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleSequentialRequestProgressHandler":{"name":"SDLMultipleSequentialRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLMultipleAsyncRequestProgressHandler":{"name":"SDLMultipleAsyncRequestProgressHandler","abstract":"<p>A handler called after each response to a request comes in in a multiple request send.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCButtonNotificationHandler":{"name":"SDLRPCButtonNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLSubscribeButton or SDLSoftButton has a corresponding notification occur.</p>"},"Type%20Definitions.html#/c:SDLNotificationConstants.h@T@SDLRPCCommandNotificationHandler":{"name":"SDLRPCCommandNotificationHandler","abstract":"<p>A handler that may optionally be run when an SDLAddCommand has a corresponding notification occur.</p>"},"Type%20Definitions.html#/c:SDLPRNDL.h@T@SDLPRNDL":{"name":"SDLPRNDL","abstract":"<p>The selected gear the car is in. Used in retrieving vehicle data.</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionRPCName":{"name":"SDLPermissionRPCName","abstract":"<p>NSString typedef</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionObserverIdentifier":{"name":"SDLPermissionObserverIdentifier","abstract":"<p>NSUUID typedef</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLPermissionsChangedHandler":{"name":"SDLPermissionsChangedHandler","abstract":"<p>This is a block that is passed in to some methods that will be stored and called when specified permissions change.</p>"},"Type%20Definitions.html#/c:SDLPermissionConstants.h@T@SDLRPCPermissionStatusChangedHandler":{"name":"SDLRPCPermissionStatusChangedHandler","abstract":"<p>A block that will be called when specified permissions change. It will return whether each RPC and its parameters are allowed as well as the permission group status of all the RPCs.</p>"},"Type%20Definitions.html#/c:SDLPermissionStatus.h@T@SDLPermissionStatus":{"name":"SDLPermissionStatus","abstract":"<p>Enumeration that describes possible permission states of a policy table entry. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLPowerModeQualificationStatus.h@T@SDLPowerModeQualificationStatus":{"name":"SDLPowerModeQualificationStatus","abstract":"<p>Describes the power mode qualification status. Used in ClusterModeStatus.</p>"},"Type%20Definitions.html#/c:SDLPowerModeStatus.h@T@SDLPowerModeStatus":{"name":"SDLPowerModeStatus","abstract":"<p>The status of the car&rsquo;s power. Used in ClusterModeStatus.</p>"},"Type%20Definitions.html#/c:SDLPredefinedLayout.h@T@SDLPredefinedLayout":{"name":"SDLPredefinedLayout","abstract":"<p>A template layout an app uses to display information. The broad details of the layout are defined, but the details depend on the IVI system. Used in SetDisplayLayout.</p>"},"Type%20Definitions.html#/c:SDLPrerecordedSpeech.h@T@SDLPrerecordedSpeech":{"name":"SDLPrerecordedSpeech","abstract":"<p>Contains information about the speech capabilities on the SDL platform. Used in RegisterAppInterfaceResponse to indicate capability.</p>"},"Type%20Definitions.html#/c:SDLPrimaryAudioSource.h@T@SDLPrimaryAudioSource":{"name":"SDLPrimaryAudioSource","abstract":"<p>Reflects the current primary audio source of SDL (if selected). Used in DeviceStatus.</p>"},"Type%20Definitions.html#/c:SDLRPCFunctionNames.h@T@SDLRPCFunctionName":{"name":"SDLRPCFunctionName","abstract":"<p>All RPC request / response / notification names</p>"},"Type%20Definitions.html#/c:SDLRPCMessageType.h@T@SDLRPCMessageTypeName":{"name":"SDLRPCMessageTypeName","abstract":"<p>A type of RPC message</p>"},"Type%20Definitions.html#/c:SDLRadioBand.h@T@SDLRadioBand":{"name":"SDLRadioBand","abstract":"<p>Radio bands, such as AM and FM, used in RadioControlData</p>"},"Type%20Definitions.html#/c:SDLRadioState.h@T@SDLRadioState":{"name":"SDLRadioState","abstract":"<p>List possible states of a remote control radio module. Used in RadioControlData.</p>"},"Type%20Definitions.html#/c:SDLRequestType.h@T@SDLRequestType":{"name":"SDLRequestType","abstract":"<p>A type of system request. Used in SystemRequest.</p>"},"Type%20Definitions.html#/c:SDLResult.h@T@SDLResult":{"name":"SDLResult","abstract":"<p>Defines the possible result codes returned by SDL to the application in a response to a requested operation. Used in RPC responses</p>"},"Type%20Definitions.html#/c:SDLSamplingRate.h@T@SDLSamplingRate":{"name":"SDLSamplingRate","abstract":"<p>Describes different sampling rates for PerformAudioPassThru and AudioPassThruCapabilities</p>"},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLScreenManagerUpdateCompletionHandler":{"name":"SDLScreenManagerUpdateCompletionHandler","abstract":"<p>The handler run when the update has completed</p>"},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLPreloadChoiceCompletionHandler":{"name":"SDLPreloadChoiceCompletionHandler","abstract":"<p>Return an error with userinfo [key: SDLChoiceCell, value: NSError] if choices failed to upload</p>"},"Type%20Definitions.html#/c:SDLScreenManager.h@T@SDLSubscribeButtonHandler":{"name":"SDLSubscribeButtonHandler","abstract":"<p>A handler run when the subscribe button has been selected</p>"},"Type%20Definitions.html#/c:SDLSeatMemoryActionType.h@T@SDLSeatMemoryActionType":{"name":"SDLSeatMemoryActionType","abstract":"<p>List of possible actions on Seat Meomry</p>"},"Type%20Definitions.html#/c:SDLServiceUpdateReason.h@T@SDLServiceUpdateReason":{"name":"SDLServiceUpdateReason","abstract":"<p>Enumeration listing possible service update reasons.</p>"},"Type%20Definitions.html#/c:SDLSoftButtonType.h@T@SDLSoftButtonType":{"name":"SDLSoftButtonType","abstract":"<p>SoftButtonType (TEXT / IMAGE / BOTH). Used by SoftButton.</p>"},"Type%20Definitions.html#/c:SDLSpeechCapabilities.h@T@SDLSpeechCapabilities":{"name":"SDLSpeechCapabilities","abstract":"<p>Contains information about TTS capabilities on the SDL platform. Used in RegisterAppInterfaceResponse, and TTSChunk.</p>"},"Type%20Definitions.html#/c:SDLStaticIconName.h@T@SDLStaticIconName":{"name":"SDLStaticIconName","abstract":"<p>Static icon names</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLVideoStreamManagerState":{"name":"SDLVideoStreamManagerState","abstract":"<p>The current state of the video stream manager</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAudioStreamManagerState":{"name":"SDLAudioStreamManagerState","abstract":"<p>The current state of the audio stream manager</p>"},"Type%20Definitions.html#/c:SDLStreamingMediaManagerConstants.h@T@SDLAppState":{"name":"SDLAppState","abstract":"<p>Typedef SDLAppState</p>"},"Type%20Definitions.html#/c:SDLSupportedSeat.h@T@SDLSupportedSeat":{"name":"SDLSupportedSeat","abstract":"<p>List possible seats that is a remote controllable seat.</p>"},"Type%20Definitions.html#/c:SDLSystemAction.h@T@SDLSystemAction":{"name":"SDLSystemAction","abstract":"<p>Enumeration that describes system actions that can be triggered. Used in SoftButton.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLUpdateCapabilityHandler":{"name":"SDLUpdateCapabilityHandler","abstract":"<p>A completion handler called after a request for the capability type is returned from the remote system.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateHandler":{"name":"SDLCapabilityUpdateHandler","abstract":"<p>An observer block for whenever a subscription is called.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityManager.h@T@SDLCapabilityUpdateWithErrorHandler":{"name":"SDLCapabilityUpdateWithErrorHandler","abstract":"<p>An observer block for whenever a subscription or value is retrieved.</p>"},"Type%20Definitions.html#/c:SDLSystemCapabilityType.h@T@SDLSystemCapabilityType":{"name":"SDLSystemCapabilityType","abstract":"<p>The type of system capability to get more information on. Used in GetSystemCapability.</p>"},"Type%20Definitions.html#/c:SDLSystemContext.h@T@SDLSystemContext":{"name":"SDLSystemContext","abstract":"<p>Indicates whether or not a user-initiated interaction is in progress, and if so, in what mode (i.e. MENU or VR). Used in OnHMIStatus</p>"},"Type%20Definitions.html#/c:SDLTBTState.h@T@SDLTBTState":{"name":"SDLTBTState","abstract":"<p>The turn-by-turn state, used in OnTBTClientState.</p>"},"Type%20Definitions.html#/c:SDLTPMS.h@T@SDLTPMS":{"name":"SDLTPMS","abstract":"<p>An enum representing values of the tire pressure monitoring system</p>"},"Type%20Definitions.html#/c:SDLTemperatureUnit.h@T@SDLTemperatureUnit":{"name":"SDLTemperatureUnit","abstract":"<p>The unit of temperature to display. Used in Temperature.</p>"},"Type%20Definitions.html#/c:SDLTextAlignment.h@T@SDLTextAlignment":{"name":"SDLTextAlignment","abstract":"<p>The list of possible alignments of text in a field. May only work on some display types. used in Show.</p>"},"Type%20Definitions.html#/c:SDLTextFieldName.h@T@SDLTextFieldName":{"name":"SDLTextFieldName","abstract":"<p>Names of the text fields that can appear on a SDL display. Used in TextFieldName.</p>"},"Type%20Definitions.html#/c:SDLTimerMode.h@T@SDLTimerMode":{"name":"SDLTimerMode","abstract":"<p>The direction of a timer. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLTouchManager.h@T@SDLTouchEventHandler":{"name":"SDLTouchEventHandler","abstract":"<p>Handler for touch events</p>"},"Type%20Definitions.html#/c:SDLTouchType.h@T@SDLTouchType":{"name":"SDLTouchType","abstract":"<p>The type of a touch in a projection application. Used in OnTouchEvent.</p>"},"Type%20Definitions.html#/c:SDLTriggerSource.h@T@SDLTriggerSource":{"name":"SDLTriggerSource","abstract":"<p>Indicates whether choice/command was selected via VR or via a menu selection (using SEEKRIGHT/SEEKLEFT, TUNEUP, TUNEDOWN, OK buttons). Used in PerformInteractionResponse and OnCommand.</p>"},"Type%20Definitions.html#/c:SDLTurnSignal.h@T@SDLTurnSignal":{"name":"SDLTurnSignal","abstract":"<p>Enumeration that describes the status of the turn light indicator.</p>"},"Type%20Definitions.html#/c:SDLUpdateMode.h@T@SDLUpdateMode":{"name":"SDLUpdateMode","abstract":"<p>Specifies what function should be performed on the media clock/counter. Used in SetMediaClockTimer.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataActiveStatus.h@T@SDLVehicleDataActiveStatus":{"name":"SDLVehicleDataActiveStatus","abstract":"<p>Vehicle Data Activity Status. Used in nothing.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataEventStatus.h@T@SDLVehicleDataEventStatus":{"name":"SDLVehicleDataEventStatus","abstract":"<p>Reflects the status of a vehicle data event; e.g. a seat belt event status. Used in retrieving vehicle data.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataNotificationStatus.h@T@SDLVehicleDataNotificationStatus":{"name":"SDLVehicleDataNotificationStatus","abstract":"<p>Reflects the status of a vehicle data notification. Used in ECallInfo</p>"},"Type%20Definitions.html#/c:SDLVehicleDataResultCode.h@T@SDLVehicleDataResultCode":{"name":"SDLVehicleDataResultCode","abstract":"<p>Vehicle Data Result Code. Used in DIDResult.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataStatus.h@T@SDLVehicleDataStatus":{"name":"SDLVehicleDataStatus","abstract":"<p>Reflects the status of a binary vehicle data item. Used in MyKey.</p>"},"Type%20Definitions.html#/c:SDLVehicleDataType.h@T@SDLVehicleDataType":{"name":"SDLVehicleDataType","abstract":"<p>Defines the vehicle data types that can be published and/or subscribed to using SDLSubscribeVehicleData. Used in VehicleDataResult</p>"},"Type%20Definitions.html#/c:SDLVentilationMode.h@T@SDLVentilationMode":{"name":"SDLVentilationMode","abstract":"<p>The ventilation mode. Used in ClimateControlCapabilities</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingCodec.h@T@SDLVideoStreamingCodec":{"name":"SDLVideoStreamingCodec","abstract":"<p>Enum for each type of video streaming codec. Used in VideoStreamingFormat.</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingProtocol.h@T@SDLVideoStreamingProtocol":{"name":"SDLVideoStreamingProtocol","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLVideoStreamingState.h@T@SDLVideoStreamingState":{"name":"SDLVideoStreamingState","abstract":"<p>Enum for each type of video streaming protocol, used in VideoStreamingFormat</p>"},"Type%20Definitions.html#/c:SDLVoiceCommand.h@T@SDLVoiceCommandSelectionHandler":{"name":"SDLVoiceCommandSelectionHandler","abstract":"<p>The handler that will be called when the command is activated</p>"},"Type%20Definitions.html#/c:SDLVrCapabilities.h@T@SDLVRCapabilities":{"name":"SDLVRCapabilities","abstract":"<p>The VR capabilities of the connected SDL platform. Used in RegisterAppInterfaceResponse.</p>"},"Type%20Definitions.html#/c:SDLWarningLightStatus.h@T@SDLWarningLightStatus":{"name":"SDLWarningLightStatus","abstract":"<p>Reflects the status of a cluster instrument warning light. Used in TireStatus</p>"},"Type%20Definitions.html#/c:SDLWayPointType.h@T@SDLWayPointType":{"name":"SDLWayPointType","abstract":"<p>The type of a navigation waypoint. Used in GetWayPoints.</p>"},"Type%20Definitions.html#/c:SDLWindowType.h@T@SDLWindowType":{"name":"SDLWindowType","abstract":"<p>The type of the window to be created. Main window or widget.</p>"},"Type%20Definitions.html#/c:SDLWiperStatus.h@T@SDLWiperStatus":{"name":"SDLWiperStatus","abstract":"<p>The status of the windshield wipers. Used in retrieving vehicle data.</p>"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveSingleTapForView:atPoint:":{"name":"-touchManager:didReceiveSingleTapForView:atPoint:","abstract":"<p>A single tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceiveDoubleTapForView:atPoint:":{"name":"-touchManager:didReceiveDoubleTapForView:atPoint:","abstract":"<p>A double tap was received</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidStartInView:atPoint:":{"name":"-touchManager:panningDidStartInView:atPoint:","abstract":"<p>Panning started</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePanningFromPoint:toPoint:":{"name":"-touchManager:didReceivePanningFromPoint:toPoint:","abstract":"<p>Panning moved between points</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningDidEndInView:atPoint:":{"name":"-touchManager:panningDidEndInView:atPoint:","abstract":"<p>Panning ended</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:panningCanceledAtPoint:":{"name":"-touchManager:panningCanceledAtPoint:","abstract":"<p>Panning canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidStartInView:atCenterPoint:":{"name":"-touchManager:pinchDidStartInView:atCenterPoint:","abstract":"<p>Pinch did start</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchAtCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchAtCenterPoint:withScale:","abstract":"<p>@abstract","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:didReceivePinchInView:atCenterPoint:withScale:":{"name":"-touchManager:didReceivePinchInView:atCenterPoint:withScale:","abstract":"<p>Pinch moved and changed scale</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchDidEndInView:atCenterPoint:":{"name":"-touchManager:pinchDidEndInView:atCenterPoint:","abstract":"<p>Pinch did end</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLTouchManagerDelegate.html#/c:objc(pl)SDLTouchManagerDelegate(im)touchManager:pinchCanceledAtCenterPoint:":{"name":"-touchManager:pinchCanceledAtCenterPoint:","abstract":"<p>Pinch canceled</p>","parent_name":"SDLTouchManagerDelegate"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)preferredVideoFormatOrderFromHeadUnitPreferredOrder:":{"name":"-preferredVideoFormatOrderFromHeadUnitPreferredOrder:","abstract":"<p>Implement to return a different preferred order of attempted format usage than the head unit&rsquo;s preferred order. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing).</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingMediaManagerDataSource.html#/c:objc(pl)SDLStreamingMediaManagerDataSource(im)resolutionFromHeadUnitPreferredResolution:":{"name":"-resolutionFromHeadUnitPreferredResolution:","abstract":"<p>Implement to return a different resolution to use for video streaming than the head unit&rsquo;s requested resolution. If you return a resolution that the head unit does not like, the manager will fail to start up. In nearly all cases, it&rsquo;s best to simply return the head unit&rsquo;s preferred order, or not implement this method (which does the same thing), and adapt your UI to the head unit&rsquo;s preferred resolution instead.</p>","parent_name":"SDLStreamingMediaManagerDataSource"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio byte stream is currently connected</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLStreamingAudioManagerType.html#/c:objc(pl)SDLStreamingAudioManagerType(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>Send audio data bytes over the audio byte stream</p>","parent_name":"SDLStreamingAudioManagerType"},"Protocols/SDLServiceEncryptionDelegate.html#/c:objc(pl)SDLServiceEncryptionDelegate(im)serviceEncryptionUpdatedOnService:encrypted:error:":{"name":"-serviceEncryptionUpdatedOnService:encrypted:error:","abstract":"<p>Called when the encryption service has been.</p>","parent_name":"SDLServiceEncryptionDelegate"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(py)appId":{"name":"appId","abstract":"<p>The app id of the app</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)initializeWithAppId:completionHandler:":{"name":"-initializeWithAppId:completionHandler:","abstract":"<p>Initialize the SDL security library with the app&rsquo;s id and a completion handler</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)stop":{"name":"-stop","abstract":"<p>Stop the security library</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)runHandshakeWithClientData:error:":{"name":"-runHandshakeWithClientData:error:","abstract":"<p>Run the SSL/TLS handshake</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)encryptData:withError:":{"name":"-encryptData:withError:","abstract":"<p>Encrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(im)decryptData:withError:":{"name":"-decryptData:withError:","abstract":"<p>Decrypt data using SSL/TLS</p>","parent_name":"SDLSecurityType"},"Protocols/SDLSecurityType.html#/c:objc(pl)SDLSecurityType(cm)availableMakes":{"name":"+availableMakes","abstract":"<p>The vehicle makes this security library covers</p>","parent_name":"SDLSecurityType"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerDidDisconnect":{"name":"-managerDidDisconnect","abstract":"<p>Called upon a disconnection from the remote system.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)hmiLevel:didChangeToLevel:":{"name":"-hmiLevel:didChangeToLevel:","abstract":"<p>Called when the HMI level state of this application changes on the remote system. This is equivalent to the application&rsquo;s state changes in iOS such as foreground, background, or closed.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)audioStreamingState:didChangeToState:":{"name":"-audioStreamingState:didChangeToState:","abstract":"<p>Called when the audio streaming state of this application changes on the remote system. This refers to when streaming audio is audible to the user.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)videoStreamingState:didChangetoState:":{"name":"-videoStreamingState:didChangetoState:","abstract":"<p>Called when the video streaming state of this application changes. This refers to streaming video for navigation purposes. If you are &ldquo;autostreaming&rdquo; via CarWindow, you should not do anything with this method. Everything should be handled for you automatically.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)systemContext:didChangeToContext:":{"name":"-systemContext:didChangeToContext:","abstract":"<p>Called when the system context of this application changes on the remote system. This refers to whether or not a user-initiated interaction is in progress, and if so, what it is.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:","abstract":"<p>Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLManagerDelegate.html#/c:objc(pl)SDLManagerDelegate(im)managerShouldUpdateLifecycleToLanguage:hmiLanguage:":{"name":"-managerShouldUpdateLifecycleToLanguage:hmiLanguage:","abstract":"<p>Called when the lifecycle manager detected a language mismatch. In case of a language mismatch the manager should change the apps registration by updating the lifecycle configuration to the specified language. If the app can support the specified language it should return an Object of SDLLifecycleConfigurationUpdate, otherwise it should return nil to indicate that the language is not supported.</p>","parent_name":"SDLManagerDelegate"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(cm)logger":{"name":"+logger","abstract":"<p>A simple convenience initializer to create the object. This <em>should not</em> start up the logger.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)setupLogger":{"name":"-setupLogger","abstract":"<p>A call to setup the logger in whatever manner it needs to do so.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)logWithLog:formattedLog:":{"name":"-logWithLog:formattedLog:","abstract":"<p>Log a particular log using the model and the formatted log message to the target.</p>","parent_name":"SDLLogTarget"},"Protocols/SDLLogTarget.html#/c:objc(pl)SDLLogTarget(im)teardownLogger":{"name":"-teardownLogger","abstract":"<p>The log target should be torn down. e.g. file handles should be closed</p>","parent_name":"SDLLogTarget"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)userDidSubmitInput:withEvent:":{"name":"-userDidSubmitInput:withEvent:","abstract":"<p>The keyboard session completed with some input.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidAbortWithReason:":{"name":"-keyboardDidAbortWithReason:","abstract":"<p>The keyboard session aborted.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)customKeyboardConfiguration":{"name":"-customKeyboardConfiguration","abstract":"<p>Implement this in order to provide a custom keyboard configuration to just this keyboard. To apply default settings to all keyboards, see SDLScreenManager.keyboardConfiguration</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:completionHandler:":{"name":"-updateAutocompleteWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the KeyboardProperties.autoCompleteText as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateAutocompleteWithInput:autoCompleteResultsHandler:":{"name":"-updateAutocompleteWithInput:autoCompleteResultsHandler:","abstract":"<p>Implement this if you wish to updated the KeyboardProperties.autoCompleteList as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)updateCharacterSetWithInput:completionHandler:":{"name":"-updateCharacterSetWithInput:completionHandler:","abstract":"<p>Implement this if you wish to update the limitedCharacterSet as the user updates their input. This is called upon a KEYPRESS event.</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLKeyboardDelegate.html#/c:objc(pl)SDLKeyboardDelegate(im)keyboardDidSendEvent:text:":{"name":"-keyboardDidSendEvent:text:","abstract":"<p>Implement this to be notified of all events occurring on the keyboard</p>","parent_name":"SDLKeyboardDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didSelectChoice:withSource:atRowIndex:":{"name":"-choiceSet:didSelectChoice:withSource:atRowIndex:","abstract":"<p>Delegate method called after a choice set item is selected</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLChoiceSetDelegate.html#/c:objc(pl)SDLChoiceSetDelegate(im)choiceSet:didReceiveError:":{"name":"-choiceSet:didReceiveError:","abstract":"<p>Delegate method called on an error</p>","parent_name":"SDLChoiceSetDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:fileDidFinishPlaying:successfully:":{"name":"-audioStreamManager:fileDidFinishPlaying:successfully:","abstract":"<p>Called when a file from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForFile:error:":{"name":"-audioStreamManager:errorDidOccurForFile:error:","abstract":"<p>Called when a file from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:dataBufferDidFinishPlayingSuccessfully:":{"name":"-audioStreamManager:dataBufferDidFinishPlayingSuccessfully:","abstract":"<p>Called when a data buffer from the SDLAudioStreamManager finishes playing</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols/SDLAudioStreamManagerDelegate.html#/c:objc(pl)SDLAudioStreamManagerDelegate(im)audioStreamManager:errorDidOccurForDataBuffer:":{"name":"-audioStreamManager:errorDidOccurForDataBuffer:","abstract":"<p>Called when a data buffer from the SDLAudioStreamManager could not play</p>","parent_name":"SDLAudioStreamManagerDelegate"},"Protocols.html#/c:objc(pl)SDLInt":{"name":"SDLInt","abstract":"<p>A declaration that this NSNumber contains an NSInteger.</p>"},"Protocols.html#/c:objc(pl)SDLUInt":{"name":"SDLUInt","abstract":"<p>A declaration that this NSNumber contains an NSUInteger.</p>"},"Protocols.html#/c:objc(pl)SDLBool":{"name":"SDLBool","abstract":"<p>A declaration that this NSNumber contains a BOOL.</p>"},"Protocols.html#/c:objc(pl)SDLFloat":{"name":"SDLFloat","abstract":"<p>A declaration that this NSNumber contains a float.</p>"},"Protocols/SDLAudioStreamManagerDelegate.html":{"name":"SDLAudioStreamManagerDelegate","abstract":"<p>Delegate for the AudioStreamManager</p>"},"Protocols/SDLChoiceSetDelegate.html":{"name":"SDLChoiceSetDelegate","abstract":"<p>Delegate for the the SDLChoiceSet. Contains methods that get called when an action is taken on a choice cell.</p>"},"Protocols/SDLKeyboardDelegate.html":{"name":"SDLKeyboardDelegate","abstract":"<p>They delegate of a keyboard popup allowing customization at runtime of the keyboard.</p>"},"Protocols/SDLLogTarget.html":{"name":"SDLLogTarget","abstract":"<p>A protocol describing a place logs from SDLLogManager are logged to</p>"},"Protocols/SDLManagerDelegate.html":{"name":"SDLManagerDelegate","abstract":"<p>The manager&rsquo;s delegate</p>"},"Protocols/SDLSecurityType.html":{"name":"SDLSecurityType","abstract":"<p>A protocol used by SDL Security libraries.</p>"},"Protocols/SDLServiceEncryptionDelegate.html":{"name":"SDLServiceEncryptionDelegate","abstract":"<p>Delegate for the encryption service.</p>"},"Protocols/SDLStreamingAudioManagerType.html":{"name":"SDLStreamingAudioManagerType","abstract":"<p>Streaming audio manager</p>"},"Protocols/SDLStreamingMediaManagerDataSource.html":{"name":"SDLStreamingMediaManagerDataSource","abstract":"<p>A data source for the streaming manager&rsquo;s preferred resolutions and preferred formats.</p>"},"Protocols/SDLTouchManagerDelegate.html":{"name":"SDLTouchManagerDelegate","abstract":"<p>The delegate to be notified of processed touches such as pinches, pans, and taps</p>"},"Enums/SDLTouchIdentifier.html#/c:@E@SDLTouchIdentifier@SDLTouchIdentifierFirstFinger":{"name":"SDLTouchIdentifierFirstFinger","abstract":"<p>Touch was first finger</p>","parent_name":"SDLTouchIdentifier"},"Enums/SDLTouchIdentifier.html#/c:@E@SDLTouchIdentifier@SDLTouchIdentifierSecondFinger":{"name":"SDLTouchIdentifierSecondFinger","abstract":"<p>Touch was second finger</p>","parent_name":"SDLTouchIdentifier"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagNone":{"name":"SDLStreamingEncryptionFlagNone","abstract":"<p>It should not be encrypted at all</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateOnly":{"name":"SDLStreamingEncryptionFlagAuthenticateOnly","abstract":"<p>It should use SSL/TLS only to authenticate</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLStreamingEncryptionFlag.html#/c:@E@SDLStreamingEncryptionFlag@SDLStreamingEncryptionFlagAuthenticateAndEncrypt":{"name":"SDLStreamingEncryptionFlagAuthenticateAndEncrypt","abstract":"<p>All data on these services should be encrypted using SSL/TLS</p>","parent_name":"SDLStreamingEncryptionFlag"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeLayer":{"name":"SDLCarWindowRenderingTypeLayer","abstract":"<p>Instead of rendering your UIViewController&rsquo;s view, this will render the layer using renderInContext</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewAfterScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewAfterScreenUpdates","abstract":"<p>Renders your UIViewController&rsquo;s view using drawViewHierarchyInRect:bounds afterScreenUpdates:YES</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLCarWindowRenderingType.html#/c:@E@SDLCarWindowRenderingType@SDLCarWindowRenderingTypeViewBeforeScreenUpdates":{"name":"SDLCarWindowRenderingTypeViewBeforeScreenUpdates","abstract":"<p>Renders your UIViewController&rsquo;s view using drawViewHierarchyInRect:bounds afterScreenUpdates:NO</p>","parent_name":"SDLCarWindowRenderingType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeRequest":{"name":"SDLRPCMessageTypeRequest","abstract":"<p>A request that will require a response</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeResponse":{"name":"SDLRPCMessageTypeResponse","abstract":"<p>A response to a request</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLRPCMessageType.html#/c:@E@SDLRPCMessageType@SDLRPCMessageTypeNotification":{"name":"SDLRPCMessageTypeNotification","abstract":"<p>A message that does not have a response</p>","parent_name":"SDLRPCMessageType"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeat":{"name":"SDLFrameInfoHeartbeat","abstract":"<p>A ping packet that is sent to ensure the connection is still active and the service is still valid.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartService":{"name":"SDLFrameInfoStartService","abstract":"<p>Requests that a specific type of service is started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceACK":{"name":"SDLFrameInfoStartServiceACK","abstract":"<p>Acknowledges that the specific service has been started successfully.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoStartServiceNACK":{"name":"SDLFrameInfoStartServiceNACK","abstract":"<p>Negatively acknowledges that the specific service was not started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndService":{"name":"SDLFrameInfoEndService","abstract":"<p>Requests that a specific type of service is ended.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceACK":{"name":"SDLFrameInfoEndServiceACK","abstract":"<p>Acknowledges that the specific service has been ended successfully.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoEndServiceNACK":{"name":"SDLFrameInfoEndServiceNACK","abstract":"<p>Negatively acknowledges that the specific service was not ended or has not yet been started.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransport":{"name":"SDLFrameInfoRegisterSecondaryTransport","abstract":"<p>Notifies that a Secondary Transport has been established.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportACK":{"name":"SDLFrameInfoRegisterSecondaryTransportACK","abstract":"<p>Acknowledges that the Secondary Transport has been recognized.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoRegisterSecondaryTransportNACK":{"name":"SDLFrameInfoRegisterSecondaryTransportNACK","abstract":"<p>Negatively acknowledges that the Secondary Transport has not been recognized.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoTransportEventUpdate":{"name":"SDLFrameInfoTransportEventUpdate","abstract":"<p>Indicates the status or configuration of transport(s) is/are updated.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoServiceDataAck":{"name":"SDLFrameInfoServiceDataAck","abstract":"<p>Deprecated.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoHeartbeatACK":{"name":"SDLFrameInfoHeartbeatACK","abstract":"<p>Acknowledges that a Heartbeat control packet has been received.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoSingleFrame":{"name":"SDLFrameInfoSingleFrame","abstract":"<p>Payload contains a single packet.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoFirstFrame":{"name":"SDLFrameInfoFirstFrame","abstract":"<p>First frame in a multiple frame payload.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLFrameInfo.html#/c:@E@SDLFrameInfo@SDLFrameInfoConsecutiveLastFrame":{"name":"SDLFrameInfoConsecutiveLastFrame","abstract":"<p>Frame in a multiple frame payload.</p>","parent_name":"SDLFrameInfo"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeControl":{"name":"SDLServiceTypeControl","abstract":"<p>The lowest level service available.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeRPC":{"name":"SDLServiceTypeRPC","abstract":"<p>Used to send requests, responses, and notifications between an application and a head unit.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeAudio":{"name":"SDLServiceTypeAudio","abstract":"<p>The application can start the audio service to send PCM audio data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Audio Service is only PCM audio data.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeVideo":{"name":"SDLServiceTypeVideo","abstract":"<p>The application can start the video service to send H.264 video data to the head unit. After the StartService packet is sent and the ACK received, the payload for the Video Service is only H.264 video data.</p>","parent_name":"SDLServiceType"},"Enums/SDLServiceType.html#/c:@E@SDLServiceType@SDLServiceTypeBulkData":{"name":"SDLServiceTypeBulkData","abstract":"<p>Similar to the RPC Service but adds a bulk data field. The payload of a message sent via the Hybrid service consists of a Binary Header, JSON Data, and Bulk Data.</p>","parent_name":"SDLServiceType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeControl":{"name":"SDLFrameTypeControl","abstract":"<p>Lowest-level type of packets. They can be sent over any of the defined services. They are used for the control of the services in which they are sent.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeSingle":{"name":"SDLFrameTypeSingle","abstract":"<p>Contains all the data for a particular packet in the payload. The majority of frames sent over the protocol utilize this frame type.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeFirst":{"name":"SDLFrameTypeFirst","abstract":"<p>The First Frame in a multiple frame payload contains information about the entire sequence of frames so that the receiving end can correctly parse all the frames and reassemble the entire payload. The payload of this frame is only eight bytes and contains information regarding the rest of the sequence.</p>","parent_name":"SDLFrameType"},"Enums/SDLFrameType.html#/c:@E@SDLFrameType@SDLFrameTypeConsecutive":{"name":"SDLFrameTypeConsecutive","abstract":"<p>The Consecutive Frames in a multiple frame payload contain the actual raw data of the original payload. The parsed payload contained in each of the Consecutive Frames&rsquo; payloads should be buffered until the entire sequence is complete.</p>","parent_name":"SDLFrameType"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsDefaultWindow":{"name":"SDLPredefinedWindowsDefaultWindow","abstract":"<p>The default window is a main window pre-created on behalf of the app.</p>","parent_name":"SDLPredefinedWindows"},"Enums/SDLPredefinedWindows.html#/c:@E@SDLPredefinedWindows@SDLPredefinedWindowsPrimaryWidget":{"name":"SDLPredefinedWindowsPrimaryWidget","abstract":"<p>The primary widget of the app.</p>","parent_name":"SDLPredefinedWindows"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusAllowed":{"name":"SDLPermissionGroupStatusAllowed","abstract":"<p>Every RPC in the group is currently allowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusDisallowed":{"name":"SDLPermissionGroupStatusDisallowed","abstract":"<p>Every RPC in the group is currently disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusMixed":{"name":"SDLPermissionGroupStatusMixed","abstract":"<p>Some RPCs in the group are allowed and some disallowed.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupStatus.html#/c:@E@SDLPermissionGroupStatus@SDLPermissionGroupStatusUnknown":{"name":"SDLPermissionGroupStatusUnknown","abstract":"<p>The current status of the group is unknown.</p>","parent_name":"SDLPermissionGroupStatus"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAllAllowed":{"name":"SDLPermissionGroupTypeAllAllowed","abstract":"<p>Be notified when all of the RPC in the group are allowed, or, when they all stop being allowed in some sense, that is, when they were all allowed, and now they are not.</p>","parent_name":"SDLPermissionGroupType"},"Enums/SDLPermissionGroupType.html#/c:@E@SDLPermissionGroupType@SDLPermissionGroupTypeAny":{"name":"SDLPermissionGroupTypeAny","abstract":"<p>Be notified when any change in availability occurs among the group.</p>","parent_name":"SDLPermissionGroupType"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateDelete":{"name":"MenuCellStateDelete","abstract":"<p>Marks the cell to be deleted</p>","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateAdd":{"name":"MenuCellStateAdd","abstract":"<p>Marks the cell to be added</p>","parent_name":"MenuCellState"},"Enums/MenuCellState.html#/c:@E@MenuCellState@MenuCellStateKeep":{"name":"MenuCellStateKeep","abstract":"<p>Marks the cell to be kept</p>","parent_name":"MenuCellState"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOn":{"name":"SDLDynamicMenuUpdatesModeForceOn","abstract":"<p>Forces on compatibility mode. This will force the menu manager to delete and re-add each menu item for every menu update. This mode is generally not advised due to performance issues.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeForceOff":{"name":"SDLDynamicMenuUpdatesModeForceOff","abstract":"<p>This mode forces the menu manager to always dynamically update menu items for each menu update. This will provide the best performance but may cause ordering issues on some SYNC Gen 3 head units.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLDynamicMenuUpdatesMode.html#/c:@E@SDLDynamicMenuUpdatesMode@SDLDynamicMenuUpdatesModeOnWithCompatibility":{"name":"SDLDynamicMenuUpdatesModeOnWithCompatibility","abstract":"<p>This mode checks whether the phone is connected to a SYNC Gen 3 head unit, which has known menu ordering issues. If it is, it will always delete and re-add every menu item, if not, it will dynamically update the menus.</p>","parent_name":"SDLDynamicMenuUpdatesMode"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeSimple":{"name":"SDLLogFormatTypeSimple","abstract":"<p>A bare-bones log format: <code>09:52:07:324 🔹 (SDL)Protocol – a random test i guess</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDefault":{"name":"SDLLogFormatTypeDefault","abstract":"<p>A middle detail default log format: <code>09:52:07:324 🔹 (SDL)Protocol:SDLV2ProtocolHeader:25 – Some log message</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogFormatType.html#/c:@E@SDLLogFormatType@SDLLogFormatTypeDetailed":{"name":"SDLLogFormatTypeDetailed","abstract":"<p>A very detailed log format: <code>09:52:07:324 🔹 DEBUG com.apple.main-thread:(SDL)Protocol:[SDLV2ProtocolHeader parse:]:74 – Some log message</code></p>","parent_name":"SDLLogFormatType"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDefault":{"name":"SDLLogLevelDefault","abstract":"<p>This is used to describe that a &ldquo;specific&rdquo; logging will instead use the global log level, for example, a module may use the global log level instead of its own by specifying this level.</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelOff":{"name":"SDLLogLevelOff","abstract":"<p>This is used to describe a level that involves absolutely no logs being output.</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelError":{"name":"SDLLogLevelError","abstract":"<p>Only error level logs will be output</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelWarning":{"name":"SDLLogLevelWarning","abstract":"<p>Both error and warning level logs will be output</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelDebug":{"name":"SDLLogLevelDebug","abstract":"<p>Error, warning, and debug level logs will be output. This level will never be output in RELEASE environments</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogLevel.html#/c:@E@SDLLogLevel@SDLLogLevelVerbose":{"name":"SDLLogLevelVerbose","abstract":"<p>All level logs will be output. This level will never be output in RELEASE environments</p>","parent_name":"SDLLogLevel"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagError":{"name":"SDLLogFlagError","abstract":"<p>Error level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagWarning":{"name":"SDLLogFlagWarning","abstract":"<p>Warning level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagDebug":{"name":"SDLLogFlagDebug","abstract":"<p>Debug level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogFlag.html#/c:@E@SDLLogFlag@SDLLogFlagVerbose":{"name":"SDLLogFlagVerbose","abstract":"<p>Verbose level logging</p>","parent_name":"SDLLogFlag"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionTransmit":{"name":"SDLLogBytesDirectionTransmit","abstract":"<p>Transmit from the app</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLogBytesDirection.html#/c:@E@SDLLogBytesDirection@SDLLogBytesDirectionReceive":{"name":"SDLLogBytesDirectionReceive","abstract":"<p>Receive from the module</p>","parent_name":"SDLLogBytesDirection"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeNever":{"name":"SDLLockScreenConfigurationDisplayModeNever","abstract":"<p>The lock screen should never be shown. This should almost always mean that you will build your own lock screen.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeRequiredOnly":{"name":"SDLLockScreenConfigurationDisplayModeRequiredOnly","abstract":"<p>The lock screen should only be shown when it is required by the head unit.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeOptionalOrRequired":{"name":"SDLLockScreenConfigurationDisplayModeOptionalOrRequired","abstract":"<p>The lock screen should be shown when required by the head unit or when the head unit says that its optional, but <em>not</em> in other cases, such as before the user has interacted with your app on the head unit.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLLockScreenConfigurationDisplayMode.html#/c:@E@SDLLockScreenConfigurationDisplayMode@SDLLockScreenConfigurationDisplayModeAlways":{"name":"SDLLockScreenConfigurationDisplayModeAlways","abstract":"<p>The lock screen should always be shown after connection.</p>","parent_name":"SDLLockScreenConfigurationDisplayMode"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsNone":{"name":"SDLSecondaryTransportsNone","abstract":"<p>No secondary transport</p>","parent_name":"SDLSecondaryTransports"},"Enums/SDLSecondaryTransports.html#/c:@E@SDLSecondaryTransports@SDLSecondaryTransportsTCP":{"name":"SDLSecondaryTransportsTCP","abstract":"<p>TCP as secondary transport</p>","parent_name":"SDLSecondaryTransports"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNotConnected":{"name":"SDLAudioStreamManagerErrorNotConnected","abstract":"<p>The audio stream is not currently connected</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLAudioStreamManagerError.html#/c:@E@SDLAudioStreamManagerError@SDLAudioStreamManagerErrorNoQueuedAudio":{"name":"SDLAudioStreamManagerErrorNoQueuedAudio","abstract":"<p>Attempted to play but there&rsquo;s no audio in the queue</p>","parent_name":"SDLAudioStreamManagerError"},"Enums/SDLCacheFileManagerError.html#/c:@E@SDLCacheFileManagerError@SDLCacheManagerErrorUpdateIconArchiveFileFailure":{"name":"SDLCacheManagerErrorUpdateIconArchiveFileFailure","abstract":"<p>Failed to update archive file</p>","parent_name":"SDLCacheFileManagerError"},"Enums/SDLRPCStoreError.html#/c:@E@SDLRPCStoreError@SDLRPCStoreErrorGetInvalidObject":{"name":"SDLRPCStoreErrorGetInvalidObject","abstract":"<p>In dictionary stored value with unexpected type</p>","parent_name":"SDLRPCStoreError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorUnknown":{"name":"SDLTransportErrorUnknown","abstract":"<p>Connection cannot be established due to a reason not listed here.</p>","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionRefused":{"name":"SDLTransportErrorConnectionRefused","abstract":"<p>TCP connection is refused.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorConnectionTimedOut":{"name":"SDLTransportErrorConnectionTimedOut","abstract":"<p>TCP connection cannot be established within given time.","parent_name":"SDLTransportError"},"Enums/SDLTransportError.html#/c:@E@SDLTransportError@SDLTransportErrorNetworkDown":{"name":"SDLTransportErrorNetworkDown","abstract":"<p>TCP connection cannot be established since network is down.","parent_name":"SDLTransportError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities":{"name":"SDLSystemCapabilityManagerErrorModuleDoesNotSupportSystemCapabilities","abstract":"<p>The connected head unit does not support any system capabilities</p>","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorHMINone":{"name":"SDLSystemCapabilityManagerErrorHMINone","abstract":"<p>You must be in an HMI Level other than NONE to request or subscribe to capabilites other than DISPLAYS</p>","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLSystemCapabilityManagerError.html#/c:@E@SDLSystemCapabilityManagerError@SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays":{"name":"SDLSystemCapabilityManagerErrorCannotUpdateTypeDisplays","abstract":"<p>You may not update the system capability type DISPLAYS because it is always subscribed</p>","parent_name":"SDLSystemCapabilityManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorPendingPresentationDeleted":{"name":"SDLChoiceSetManagerErrorPendingPresentationDeleted","abstract":"<p>The choice set has been deleted before it was presented</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorDeletionFailed":{"name":"SDLChoiceSetManagerErrorDeletionFailed","abstract":"<p>The choice set failed to delete</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorUploadFailed":{"name":"SDLChoiceSetManagerErrorUploadFailed","abstract":"<p>The upload failed</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorFailedToCreateMenuItems":{"name":"SDLChoiceSetManagerErrorFailedToCreateMenuItems","abstract":"<p>The menu items failed to be created</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLChoiceSetManagerError.html#/c:@E@SDLChoiceSetManagerError@SDLChoiceSetManagerErrorInvalidState":{"name":"SDLChoiceSetManagerErrorInvalidState","abstract":"<p>Invalid state</p>","parent_name":"SDLChoiceSetManagerError"},"Enums/SDLMenuManagerError.html#/c:@E@SDLMenuManagerError@SDLMenuManagerErrorRPCsFailed":{"name":"SDLMenuManagerErrorRPCsFailed","abstract":"<p>Sending menu-related RPCs returned an error from the remote system</p>","parent_name":"SDLMenuManagerError"},"Enums/SDLSubscribeButtonManagerError.html#/c:@E@SDLSubscribeButtonManagerError@SDLSubscribeButtonManagerErrorNotSubscribed":{"name":"SDLSubscribeButtonManagerErrorNotSubscribed","abstract":"<p>Attempting to unsubscribe to a subscribe button that has not yet been subscribed to yet.</p>","parent_name":"SDLSubscribeButtonManagerError"},"Enums/SDLSoftButtonManagerError.html#/c:@E@SDLSoftButtonManagerError@SDLSoftButtonManagerErrorPendingUpdateSuperseded":{"name":"SDLSoftButtonManagerErrorPendingUpdateSuperseded","abstract":"<p>A pending update was superseded by a newer requested update. The old update will not be sent</p>","parent_name":"SDLSoftButtonManagerError"},"Enums/SDLTextAndGraphicManagerError.html#/c:@E@SDLTextAndGraphicManagerError@SDLTextAndGraphicManagerErrorPendingUpdateSuperseded":{"name":"SDLTextAndGraphicManagerErrorPendingUpdateSuperseded","abstract":"<p>A pending update was superseded by a newer requested update. The old update will not be sent</p>","parent_name":"SDLTextAndGraphicManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorCannotOverwrite":{"name":"SDLFileManagerErrorCannotOverwrite","abstract":"<p>A file attempted to send, but a file with that name already exists on the remote head unit, and the file was not configured to overwrite.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorNoKnownFile":{"name":"SDLFileManagerErrorNoKnownFile","abstract":"<p>A file was attempted to be accessed but it does not exist.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToStart":{"name":"SDLFileManagerErrorUnableToStart","abstract":"<p>The file manager attempted to start but encountered an error.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorUnableToUpload":{"name":"SDLFileManagerErrorUnableToUpload","abstract":"<p>The file manager was unable to send this file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDoesNotExist":{"name":"SDLFileManagerErrorFileDoesNotExist","abstract":"<p>The file manager could not find the local file.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerUploadCanceled":{"name":"SDLFileManagerUploadCanceled","abstract":"<p>The file upload was canceled.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileUploadTasksFailed":{"name":"SDLFileManagerMultipleFileUploadTasksFailed","abstract":"<p>One or more of multiple files being uploaded or deleted failed.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerMultipleFileDeleteTasksFailed":{"name":"SDLFileManagerMultipleFileDeleteTasksFailed","abstract":"<p>One or more of multiple files being uploaded or deleted failed.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorFileDataMissing":{"name":"SDLFileManagerErrorFileDataMissing","abstract":"<p>The file data is nil or empty.</p>","parent_name":"SDLFileManagerError"},"Enums/SDLFileManagerError.html#/c:@E@SDLFileManagerError@SDLFileManagerErrorStaticIcon":{"name":"SDLFileManagerErrorStaticIcon","abstract":"<p>The file is a static icon, which cannot be uploaded</p>","parent_name":"SDLFileManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRPCRequestFailed":{"name":"SDLManagerErrorRPCRequestFailed","abstract":"<p>An RPC request failed to send.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotConnected":{"name":"SDLManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorNotReady":{"name":"SDLManagerErrorNotReady","abstract":"<p>Some action was attempted before the ready state was reached.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorUnknownRemoteError":{"name":"SDLManagerErrorUnknownRemoteError","abstract":"<p>The remote system encountered an unknown error.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorManagersFailedToStart":{"name":"SDLManagerErrorManagersFailedToStart","abstract":"<p>One or more of the sub-managers failed to start.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationFailed":{"name":"SDLManagerErrorRegistrationFailed","abstract":"<p>Registering with the remote system failed.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorRegistrationSuccessWithWarning":{"name":"SDLManagerErrorRegistrationSuccessWithWarning","abstract":"<p>Registering with the remote system was successful, but had a warning.</p>","parent_name":"SDLManagerError"},"Enums/SDLManagerError.html#/c:@E@SDLManagerError@SDLManagerErrorCancelled":{"name":"SDLManagerErrorCancelled","abstract":"<p>Request operations were cancelled before they could be sent</p>","parent_name":"SDLManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNotConnected":{"name":"SDLEncryptionLifecycleManagerErrorNotConnected","abstract":"<p>Some action was attempted that requires a connection to the remote head unit.</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorEncryptionOff":{"name":"SDLEncryptionLifecycleManagerErrorEncryptionOff","abstract":"<p>Received ACK with encryption bit set to false from the remote head unit</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLEncryptionLifecycleManagerError.html#/c:@E@SDLEncryptionLifecycleManagerError@SDLEncryptionLifecycleManagerErrorNAK":{"name":"SDLEncryptionLifecycleManagerErrorNAK","abstract":"<p>Received NAK from the remote head unit.</p>","parent_name":"SDLEncryptionLifecycleManagerError"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutList":{"name":"SDLChoiceSetLayoutList","abstract":"<p>Menu items will be displayed in a list</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLChoiceSetLayout.html#/c:@E@SDLChoiceSetLayout@SDLChoiceSetLayoutTiles":{"name":"SDLChoiceSetLayoutTiles","abstract":"<p>Menu items will be displayed as a tiled list</p>","parent_name":"SDLChoiceSetLayout"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatPNG":{"name":"SDLArtworkImageFormatPNG","abstract":"<p>Image format: PNG</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html#/c:@E@SDLArtworkImageFormat@SDLArtworkImageFormatJPG":{"name":"SDLArtworkImageFormatJPG","abstract":"<p>Image format: JPG</p>","parent_name":"SDLArtworkImageFormat"},"Enums/SDLArtworkImageFormat.html":{"name":"SDLArtworkImageFormat","abstract":"<p>Image format of an artwork file</p>"},"Enums/SDLChoiceSetLayout.html":{"name":"SDLChoiceSetLayout","abstract":"<p>The layout to use when a choice set is displayed</p>"},"Enums/SDLEncryptionLifecycleManagerError.html":{"name":"SDLEncryptionLifecycleManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLManagerError.html":{"name":"SDLManagerError","abstract":"<p>Errors associated with the SDLManager class.</p>"},"Enums/SDLFileManagerError.html":{"name":"SDLFileManagerError","abstract":"<p>Errors associated with the SDLFileManager class.</p>"},"Enums/SDLTextAndGraphicManagerError.html":{"name":"SDLTextAndGraphicManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLSoftButtonManagerError.html":{"name":"SDLSoftButtonManagerError","abstract":"<p>Errors associated with the Soft Button Manager class</p>"},"Enums/SDLSubscribeButtonManagerError.html":{"name":"SDLSubscribeButtonManagerError","abstract":"<p>Errors associated with the Subscribe Button Manager class</p>"},"Enums/SDLMenuManagerError.html":{"name":"SDLMenuManagerError","abstract":"<p>Errors associated with the ScreenManager class</p>"},"Enums/SDLChoiceSetManagerError.html":{"name":"SDLChoiceSetManagerError","abstract":"<p>Errors associated with Choice Set class</p>"},"Enums/SDLSystemCapabilityManagerError.html":{"name":"SDLSystemCapabilityManagerError","abstract":"<p>Errors associated with the system capability manager</p>"},"Enums/SDLTransportError.html":{"name":"SDLTransportError","abstract":"<p>Errors associated with transport.</p>"},"Enums/SDLRPCStoreError.html":{"name":"SDLRPCStoreError","abstract":"<p>Errors associated with store.</p>"},"Enums/SDLCacheFileManagerError.html":{"name":"SDLCacheFileManagerError","abstract":"<p>Errors related to the cache file manager</p>"},"Enums/SDLAudioStreamManagerError.html":{"name":"SDLAudioStreamManagerError","abstract":"<p>Errors related to the audio stream manager</p>"},"Enums/SDLSecondaryTransports.html":{"name":"SDLSecondaryTransports","abstract":"<p>List of secondary transports</p>"},"Enums/SDLLockScreenConfigurationDisplayMode.html":{"name":"SDLLockScreenConfigurationDisplayMode","abstract":"<p>Describes when the lock screen should be shown.</p>"},"Enums/SDLLogBytesDirection.html":{"name":"SDLLogBytesDirection","abstract":"<p>An enum describing log bytes direction</p>"},"Enums/SDLLogFlag.html":{"name":"SDLLogFlag","abstract":"<p>Flags used for SDLLogLevel to provide correct enum values. This is purely for internal use.</p>"},"Enums/SDLLogLevel.html":{"name":"SDLLogLevel","abstract":"<p>An enum describing a level of logging.</p>"},"Enums/SDLLogFormatType.html":{"name":"SDLLogFormatType","abstract":"<p>The output format of logs; how they will appear when printed out into a string.</p>"},"Enums/SDLDynamicMenuUpdatesMode.html":{"name":"SDLDynamicMenuUpdatesMode","abstract":"<p>Dynamic Menu Manager Mode</p>"},"Enums/MenuCellState.html":{"name":"MenuCellState","abstract":"<p>Menu cell state</p>"},"Enums/SDLPermissionGroupType.html":{"name":"SDLPermissionGroupType","abstract":"<p>A permission group type which will be used to tell the system what type of changes you want to be notified about for the group.</p>"},"Enums/SDLPermissionGroupStatus.html":{"name":"SDLPermissionGroupStatus","abstract":"<p>The status of the group of RPCs permissions.</p>"},"Enums/SDLPredefinedWindows.html":{"name":"SDLPredefinedWindows","abstract":"<p>Specifies which windows and IDs are predefined and pre-created on behalf of the app. The default window is always available and represents the app window on the main display. It&rsquo;s an equivalent to today&rsquo;s app window. For backward compatibility, this will ensure the app always has at least the default window on the main display. The app can choose to use this predefined enum element to specifically address app&rsquo;s main window or to duplicate window content. It is not possible to duplicate another window to the default window. The primary widget is a special widget, that can be associated with a service type, which is used by the HMI whenever a single widget needs to represent the whole app. The primary widget should be named as the app and can be pre-created by the HMI.</p>"},"Enums/SDLFrameType.html":{"name":"SDLFrameType","abstract":"<p>The data packet&rsquo;s header and payload combination.</p>"},"Enums/SDLServiceType.html":{"name":"SDLServiceType","abstract":"<p>The data packet&rsquo;s format and priority.</p>"},"Enums/SDLFrameInfo.html":{"name":"SDLFrameInfo","abstract":"<p>The data packet&rsquo;s available data.</p>"},"Enums/SDLRPCMessageType.html":{"name":"SDLRPCMessageType","abstract":"<p>The type of RPC message</p>"},"Enums/SDLCarWindowRenderingType.html":{"name":"SDLCarWindowRenderingType","abstract":"<p>The type of rendering that CarWindow will perform. Depending on your app, you may need to try different ones for best performance</p>"},"Enums/SDLStreamingEncryptionFlag.html":{"name":"SDLStreamingEncryptionFlag","abstract":"<p>A flag determining how video and audio streaming should be encrypted</p>"},"Enums/SDLTouchIdentifier.html":{"name":"SDLTouchIdentifier","abstract":"<p>Identifies finger touch</p>"},"Constants.html#/c:@SDLAmbientLightStatusNight":{"name":"SDLAmbientLightStatusNight","abstract":"<p>Represents a &ldquo;night&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight1":{"name":"SDLAmbientLightStatusTwilight1","abstract":"<p>Represents a &ldquo;twilight 1&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight2":{"name":"SDLAmbientLightStatusTwilight2","abstract":"<p>Represents a &ldquo;twilight 2&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight3":{"name":"SDLAmbientLightStatusTwilight3","abstract":"<p>Represents a &ldquo;twilight 3&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusTwilight4":{"name":"SDLAmbientLightStatusTwilight4","abstract":"<p>Represents a &ldquo;twilight 4&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusDay":{"name":"SDLAmbientLightStatusDay","abstract":"<p>Represents a &ldquo;day&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusUnknown":{"name":"SDLAmbientLightStatusUnknown","abstract":"<p>Represents an &ldquo;unknown&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAmbientLightStatusInvalid":{"name":"SDLAmbientLightStatusInvalid","abstract":"<p>Represents a &ldquo;invalid&rdquo; ambient light status</p>"},"Constants.html#/c:@SDLAppHMITypeDefault":{"name":"SDLAppHMITypeDefault","abstract":"<p>The App will have default rights.</p>"},"Constants.html#/c:@SDLAppHMITypeCommunication":{"name":"SDLAppHMITypeCommunication","abstract":"<p>Communication type of App</p>"},"Constants.html#/c:@SDLAppHMITypeMedia":{"name":"SDLAppHMITypeMedia","abstract":"<p>App dealing with Media</p>"},"Constants.html#/c:@SDLAppHMITypeMessaging":{"name":"SDLAppHMITypeMessaging","abstract":"<p>Messaging App</p>"},"Constants.html#/c:@SDLAppHMITypeNavigation":{"name":"SDLAppHMITypeNavigation","abstract":"<p>Navigation App</p>"},"Constants.html#/c:@SDLAppHMITypeInformation":{"name":"SDLAppHMITypeInformation","abstract":"<p>Information App</p>"},"Constants.html#/c:@SDLAppHMITypeSocial":{"name":"SDLAppHMITypeSocial","abstract":"<p>App dealing with social media</p>"},"Constants.html#/c:@SDLAppHMITypeProjection":{"name":"SDLAppHMITypeProjection","abstract":"<p>App dealing with Mobile Projection applications</p>"},"Constants.html#/c:@SDLAppHMITypeBackgroundProcess":{"name":"SDLAppHMITypeBackgroundProcess","abstract":"<p>App designed for use in the background</p>"},"Constants.html#/c:@SDLAppHMITypeTesting":{"name":"SDLAppHMITypeTesting","abstract":"<p>App only for Testing purposes</p>"},"Constants.html#/c:@SDLAppHMITypeSystem":{"name":"SDLAppHMITypeSystem","abstract":"<p>System App</p>"},"Constants.html#/c:@SDLAppHMITypeRemoteControl":{"name":"SDLAppHMITypeRemoteControl","abstract":"<p>Remote control</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonIgnitionOff":{"name":"SDLAppInterfaceUnregisteredReasonIgnitionOff","abstract":"<p>Vehicle ignition turned off.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonBluetoothOff":{"name":"SDLAppInterfaceUnregisteredReasonBluetoothOff","abstract":"<p>Bluetooth was turned off, causing termination of a necessary Bluetooth connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUSBDisconnected":{"name":"SDLAppInterfaceUnregisteredReasonUSBDisconnected","abstract":"<p>USB was disconnected, causing termination of a necessary iAP connection.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel":{"name":"SDLAppInterfaceUnregisteredReasonRequestWhileInNoneHMILevel","abstract":"<p>Application attempted SmartDeviceLink RPC request while HMILevel = NONE. App must have HMILevel other than NONE to issue RPC requests or get notifications or RPC responses.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonTooManyRequests":{"name":"SDLAppInterfaceUnregisteredReasonTooManyRequests","abstract":"<p>Either too many &ndash; or too many per unit of time &ndash; requests were made by the application.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonDriverDistractionViolation":{"name":"SDLAppInterfaceUnregisteredReasonDriverDistractionViolation","abstract":"<p>The application has issued requests which cause driver distraction rules to be violated.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonLanguageChange":{"name":"SDLAppInterfaceUnregisteredReasonLanguageChange","abstract":"<p>The user performed a language change on the SDL platform, causing the application to need to be reregistered for the new language.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonMasterReset":{"name":"SDLAppInterfaceUnregisteredReasonMasterReset","abstract":"<p>The user performed a MASTER RESET on the SDL platform, causing removal of a necessary Bluetooth pairing.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonFactoryDefaults":{"name":"SDLAppInterfaceUnregisteredReasonFactoryDefaults","abstract":"<p>The user restored settings to FACTORY DEFAULTS on the SDL platform.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonAppUnauthorized":{"name":"SDLAppInterfaceUnregisteredReasonAppUnauthorized","abstract":"<p>The app is not being authorized to be connected to SDL.</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonProtocolViolation":{"name":"SDLAppInterfaceUnregisteredReasonProtocolViolation","abstract":"<p>The app could not register due to a protocol violation</p>"},"Constants.html#/c:@SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource":{"name":"SDLAppInterfaceUnregisteredReasonUnsupportedHMIResource","abstract":"<p>The HMI resource is unsupported</p>"},"Constants.html#/c:@SDLAppServiceTypeMedia":{"name":"SDLAppServiceTypeMedia","abstract":"<p>The app will have a service type of media.</p>"},"Constants.html#/c:@SDLAppServiceTypeWeather":{"name":"SDLAppServiceTypeWeather","abstract":"<p>The app will have a service type of weather.</p>"},"Constants.html#/c:@SDLAppServiceTypeNavigation":{"name":"SDLAppServiceTypeNavigation","abstract":"<p>The app will have a service type of navigation.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPlayPause":{"name":"SDLAudioStreamingIndicatorPlayPause","abstract":"<p>Default playback indicator."},"Constants.html#/c:@SDLAudioStreamingIndicatorPlay":{"name":"SDLAudioStreamingIndicatorPlay","abstract":"<p>Indicates that a button press of the Play/Pause button starts the audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorPause":{"name":"SDLAudioStreamingIndicatorPause","abstract":"<p>Indicates that a button press of the Play/Pause button pauses the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingIndicatorStop":{"name":"SDLAudioStreamingIndicatorStop","abstract":"<p>Indicates that a button press of the Play/Pause button stops the current audio playback.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAudible":{"name":"SDLAudioStreamingStateAudible","abstract":"<p>Currently streaming audio, if any, is audible to user.</p>"},"Constants.html#/c:@SDLAudioStreamingStateAttenuated":{"name":"SDLAudioStreamingStateAttenuated","abstract":"<p>Some kind of audio mixing is taking place. Currently streaming audio, if any, is audible to the user at a lowered volume.</p>"},"Constants.html#/c:@SDLAudioStreamingStateNotAudible":{"name":"SDLAudioStreamingStateNotAudible","abstract":"<p>Currently streaming audio, if any, is not audible to user. made via VR session.</p>"},"Constants.html#/c:@SDLAudioTypePCM":{"name":"SDLAudioTypePCM","abstract":"<p>PCM raw audio</p>"},"Constants.html#/c:@SDLBitsPerSample8Bit":{"name":"SDLBitsPerSample8Bit","abstract":"<p>8 bits per sample</p>"},"Constants.html#/c:@SDLBitsPerSample16Bit":{"name":"SDLBitsPerSample16Bit","abstract":"<p>16 bits per sample</p>"},"Constants.html#/c:@SDLButtonEventModeButtonUp":{"name":"SDLButtonEventModeButtonUp","abstract":"<p>The button was released</p>"},"Constants.html#/c:@SDLButtonEventModeButtonDown":{"name":"SDLButtonEventModeButtonDown","abstract":"<p>The button was depressed</p>"},"Constants.html#/c:@SDLButtonNameOk":{"name":"SDLButtonNameOk","abstract":"<p>Represents the button usually labeled &ldquo;OK&rdquo;. A typical use of this button is for the user to press it to make a selection. Prior to SDL Core 5.0 (iOS Proxy v.6.1), Ok was used for both &ldquo;OK&rdquo; buttons <em>AND</em> PlayPause. In 5.0, PlayPause was introduced to reduce confusion, and you should use the one you intend for your use case (usually PlayPause). Until the next proxy breaking change, however, subscribing to this button name will continue to subscribe you to PlayPause so that your code does not break. That means that if you subscribe to both Ok and PlayPause, you will receive duplicate notifications.</p>"},"Constants.html#/c:@SDLButtonNamePlayPause":{"name":"SDLButtonNamePlayPause","abstract":"<p>Represents the play/pause button for media apps. Replaces &ldquo;OK&rdquo; on sub-5.0 head units, compliments it on 5.0 head units and later.</p>"},"Constants.html#/c:@SDLButtonNameSeekLeft":{"name":"SDLButtonNameSeekLeft","abstract":"<p>Represents the seek-left button. A typical use of this button is for the user to scroll to the left through menu choices one menu item per press.</p>"},"Constants.html#/c:@SDLButtonNameSeekRight":{"name":"SDLButtonNameSeekRight","abstract":"<p>Represents the seek-right button. A typical use of this button is for the user to scroll to the right through menu choices one menu item per press.</p>"},"Constants.html#/c:@SDLButtonNameTuneUp":{"name":"SDLButtonNameTuneUp","abstract":"<p>Represents a turn of the tuner knob in the clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNameTuneDown":{"name":"SDLButtonNameTuneDown","abstract":"<p>Represents a turn of the tuner knob in the counter-clockwise direction one tick.</p>"},"Constants.html#/c:@SDLButtonNamePreset0":{"name":"SDLButtonNamePreset0","abstract":"<p>Represents the preset 0 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset1":{"name":"SDLButtonNamePreset1","abstract":"<p>Represents the preset 1 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset2":{"name":"SDLButtonNamePreset2","abstract":"<p>Represents the preset 2 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset3":{"name":"SDLButtonNamePreset3","abstract":"<p>Represents the preset 3 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset4":{"name":"SDLButtonNamePreset4","abstract":"<p>Represents the preset 4 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset5":{"name":"SDLButtonNamePreset5","abstract":"<p>Represents the preset 5 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset6":{"name":"SDLButtonNamePreset6","abstract":"<p>Represents the preset 6 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset7":{"name":"SDLButtonNamePreset7","abstract":"<p>Represents the preset 7 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset8":{"name":"SDLButtonNamePreset8","abstract":"<p>Represents the preset 8 button.</p>"},"Constants.html#/c:@SDLButtonNamePreset9":{"name":"SDLButtonNamePreset9","abstract":"<p>Represents the preset 9 button.</p>"},"Constants.html#/c:@SDLButtonNameCustomButton":{"name":"SDLButtonNameCustomButton","abstract":"<p>Represents the Custom button.</p>"},"Constants.html#/c:@SDLButtonNameSearch":{"name":"SDLButtonNameSearch","abstract":"<p>Represents the SEARCH button.</p>"},"Constants.html#/c:@SDLButtonNameACMax":{"name":"SDLButtonNameACMax","abstract":"<p>Represents AC max button *</p>"},"Constants.html#/c:@SDLButtonNameAC":{"name":"SDLButtonNameAC","abstract":"<p>Represents AC button *</p>"},"Constants.html#/c:@SDLButtonNameRecirculate":{"name":"SDLButtonNameRecirculate","abstract":"<p>Represents a Recirculate button</p>"},"Constants.html#/c:@SDLButtonNameFanUp":{"name":"SDLButtonNameFanUp","abstract":"<p>Represents a Fan up button</p>"},"Constants.html#/c:@SDLButtonNameFanDown":{"name":"SDLButtonNameFanDown","abstract":"<p>Represents a fan down button</p>"},"Constants.html#/c:@SDLButtonNameTempUp":{"name":"SDLButtonNameTempUp","abstract":"<p>Represents a temperature up button</p>"},"Constants.html#/c:@SDLButtonNameTempDown":{"name":"SDLButtonNameTempDown","abstract":"<p>Represents a temperature down button</p>"},"Constants.html#/c:@SDLButtonNameDefrostMax":{"name":"SDLButtonNameDefrostMax","abstract":"<p>Represents a Defrost max button.</p>"},"Constants.html#/c:@SDLButtonNameDefrost":{"name":"SDLButtonNameDefrost","abstract":"<p>Represents a Defrost button.</p>"},"Constants.html#/c:@SDLButtonNameDefrostRear":{"name":"SDLButtonNameDefrostRear","abstract":"<p>Represents a Defrost rear button.</p>"},"Constants.html#/c:@SDLButtonNameUpperVent":{"name":"SDLButtonNameUpperVent","abstract":"<p>Represents a Upper Vent button.</p>"},"Constants.html#/c:@SDLButtonNameLowerVent":{"name":"SDLButtonNameLowerVent","abstract":"<p>Represents a Lower vent button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeUp":{"name":"SDLButtonNameVolumeUp","abstract":"<p>Represents a volume up button.</p>"},"Constants.html#/c:@SDLButtonNameVolumeDown":{"name":"SDLButtonNameVolumeDown","abstract":"<p>Represents a volume down button.</p>"},"Constants.html#/c:@SDLButtonNameEject":{"name":"SDLButtonNameEject","abstract":"<p>Represents a Eject Button.</p>"},"Constants.html#/c:@SDLButtonNameSource":{"name":"SDLButtonNameSource","abstract":"<p>Represents a Source button.</p>"},"Constants.html#/c:@SDLButtonNameShuffle":{"name":"SDLButtonNameShuffle","abstract":"<p>Represents a SHUFFLE button.</p>"},"Constants.html#/c:@SDLButtonNameRepeat":{"name":"SDLButtonNameRepeat","abstract":"<p>Represents a Repeat button.</p>"},"Constants.html#/c:@SDLButtonNameNavCenterLocation":{"name":"SDLButtonNameNavCenterLocation","abstract":"<p>Represents a Navigate to center button.</p>"},"Constants.html#/c:@SDLButtonNameNavZoomIn":{"name":"SDLButtonNameNavZoomIn","abstract":"<p>Represents a Zoom in button.</p>"},"Constants.html#/c:@SDLButtonNameNavZoomOut":{"name":"SDLButtonNameNavZoomOut","abstract":"<p>Represents a Zoom out button.</p>"},"Constants.html#/c:@SDLButtonNameNavPanUp":{"name":"SDLButtonNameNavPanUp","abstract":"<p>Represents a Pan up button</p>"},"Constants.html#/c:@SDLButtonNameNavPanUpRight":{"name":"SDLButtonNameNavPanUpRight","abstract":"<p>Represents a Pan up/right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanRight":{"name":"SDLButtonNameNavPanRight","abstract":"<p>Represents a Pan right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDownRight":{"name":"SDLButtonNameNavPanDownRight","abstract":"<p>Represents a Pan down/right button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDown":{"name":"SDLButtonNameNavPanDown","abstract":"<p>Represents a Pan down button</p>"},"Constants.html#/c:@SDLButtonNameNavPanDownLeft":{"name":"SDLButtonNameNavPanDownLeft","abstract":"<p>Represents a Pan down left button</p>"},"Constants.html#/c:@SDLButtonNameNavPanLeft":{"name":"SDLButtonNameNavPanLeft","abstract":"<p>Represents a Pan left button</p>"},"Constants.html#/c:@SDLButtonNameNavPanUpLeft":{"name":"SDLButtonNameNavPanUpLeft","abstract":"<p>Represents a Pan up left button</p>"},"Constants.html#/c:@SDLButtonNameNavTiltToggle":{"name":"SDLButtonNameNavTiltToggle","abstract":"<p>Represents a Tilt button. If supported, this toggles between a top-down view and an angled/3D view. If your app supports different, but substantially similar options, then you may implement those. If you don&rsquo;t implement these or similar options, do not subscribe to this button.</p>"},"Constants.html#/c:@SDLButtonNameNavRotateClockwise":{"name":"SDLButtonNameNavRotateClockwise","abstract":"<p>Represents a Rotate clockwise button</p>"},"Constants.html#/c:@SDLButtonNameNavRotateCounterClockwise":{"name":"SDLButtonNameNavRotateCounterClockwise","abstract":"<p>Represents a Rotate counterclockwise button</p>"},"Constants.html#/c:@SDLButtonNameNavHeadingToggle":{"name":"SDLButtonNameNavHeadingToggle","abstract":"<p>Represents a Heading toggle button. If supported, this toggles between locking the orientation to north or to the vehicle&rsquo;s heading. If your app supports different, but substantially similar options, then you may implement those. If you don&rsquo;t implement these or similar options, do not subscribe to this button.</p>"},"Constants.html#/c:@SDLButtonPressModeLong":{"name":"SDLButtonPressModeLong","abstract":"<p>A button was released, after it was pressed for a long time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLButtonPressModeShort":{"name":"SDLButtonPressModeShort","abstract":"<p>A button was released, after it was pressed for a short time. Actual timing is defined by the head unit and may vary.</p>"},"Constants.html#/c:@SDLCarModeStatusNormal":{"name":"SDLCarModeStatusNormal","abstract":"<p>Provides carmode NORMAL to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusFactory":{"name":"SDLCarModeStatusFactory","abstract":"<p>Provides carmode FACTORY to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusTransport":{"name":"SDLCarModeStatusTransport","abstract":"<p>Provides carmode TRANSPORT to each module.</p>"},"Constants.html#/c:@SDLCarModeStatusCrash":{"name":"SDLCarModeStatusCrash","abstract":"<p>Provides carmode CRASH to each module.</p>"},"Constants.html#/c:@SDLCharacterSetType2":{"name":"SDLCharacterSetType2","abstract":"<p>Character Set Type 2</p>"},"Constants.html#/c:@SDLCharacterSetType5":{"name":"SDLCharacterSetType5","abstract":"<p>Character Set Type 5</p>"},"Constants.html#/c:@SDLCharacterSetCID1":{"name":"SDLCharacterSetCID1","abstract":"<p>Character Set CID1</p>"},"Constants.html#/c:@SDLCharacterSetCID2":{"name":"SDLCharacterSetCID2","abstract":"<p>Character Set CID2</p>"},"Constants.html#/c:@SDLCompassDirectionNorth":{"name":"SDLCompassDirectionNorth","abstract":"<p>Direction North</p>"},"Constants.html#/c:@SDLCompassDirectionNorthwest":{"name":"SDLCompassDirectionNorthwest","abstract":"<p>Direction Northwest</p>"},"Constants.html#/c:@SDLCompassDirectionWest":{"name":"SDLCompassDirectionWest","abstract":"<p>Direction West</p>"},"Constants.html#/c:@SDLCompassDirectionSouthwest":{"name":"SDLCompassDirectionSouthwest","abstract":"<p>Direction Southwest</p>"},"Constants.html#/c:@SDLCompassDirectionSouth":{"name":"SDLCompassDirectionSouth","abstract":"<p>Direction South</p>"},"Constants.html#/c:@SDLCompassDirectionSoutheast":{"name":"SDLCompassDirectionSoutheast","abstract":"<p>Direction Southeast</p>"},"Constants.html#/c:@SDLCompassDirectionEast":{"name":"SDLCompassDirectionEast","abstract":"<p>Direction East</p>"},"Constants.html#/c:@SDLCompassDirectionNortheast":{"name":"SDLCompassDirectionNortheast","abstract":"<p>Direction Northeast</p>"},"Constants.html#/c:@SDLComponentVolumeStatusUnknown":{"name":"SDLComponentVolumeStatusUnknown","abstract":"<p>Unknown SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNormal":{"name":"SDLComponentVolumeStatusNormal","abstract":"<p>Normal SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusLow":{"name":"SDLComponentVolumeStatusLow","abstract":"<p>Low SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusFault":{"name":"SDLComponentVolumeStatusFault","abstract":"<p>Fault SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusAlert":{"name":"SDLComponentVolumeStatusAlert","abstract":"<p>Alert SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLComponentVolumeStatusNotSupported":{"name":"SDLComponentVolumeStatusNotSupported","abstract":"<p>Not supported SDLComponentVolumeStatus</p>"},"Constants.html#/c:@SDLDefrostZoneFront":{"name":"SDLDefrostZoneFront","abstract":"<p>A SDLDefrostZone with the value of <em>FRONT</em></p>"},"Constants.html#/c:@SDLDefrostZoneRear":{"name":"SDLDefrostZoneRear","abstract":"<p>A SDLDefrostZone with the value of <em>REAR</em></p>"},"Constants.html#/c:@SDLDefrostZoneAll":{"name":"SDLDefrostZoneAll","abstract":"<p>A SDLDefrostZone with the value of <em>All</em></p>"},"Constants.html#/c:@SDLDefrostZoneNone":{"name":"SDLDefrostZoneNone","abstract":"<p>A SDLDefrostZone with the value of <em>None</em></p>"},"Constants.html#/c:@SDLDeliveryModePrompt":{"name":"SDLDeliveryModePrompt","abstract":"<p>User is prompted on HMI</p>"},"Constants.html#/c:@SDLDeliveryModeDestination":{"name":"SDLDeliveryModeDestination","abstract":"<p>Set the location as destination without prompting the user</p>"},"Constants.html#/c:@SDLDeliveryModeQueue":{"name":"SDLDeliveryModeQueue","abstract":"<p>Adds the current location to navigation queue</p>"},"Constants.html#/c:@SDLDeviceLevelStatusZeroBars":{"name":"SDLDeviceLevelStatusZeroBars","abstract":"<p>Device battery level is zero bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusOneBar":{"name":"SDLDeviceLevelStatusOneBar","abstract":"<p>Device battery level is one bar</p>"},"Constants.html#/c:@SDLDeviceLevelStatusTwoBars":{"name":"SDLDeviceLevelStatusTwoBars","abstract":"<p>Device battery level is two bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusThreeBars":{"name":"SDLDeviceLevelStatusThreeBars","abstract":"<p>Device battery level is three bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusFourBars":{"name":"SDLDeviceLevelStatusFourBars","abstract":"<p>Device battery level is four bars</p>"},"Constants.html#/c:@SDLDeviceLevelStatusNotProvided":{"name":"SDLDeviceLevelStatusNotProvided","abstract":"<p>Device battery level is unknown</p>"},"Constants.html#/c:@SDLDimensionNoFix":{"name":"SDLDimensionNoFix","abstract":"<p>No GPS at all</p>"},"Constants.html#/c:@SDLDimension2D":{"name":"SDLDimension2D","abstract":"<p>Longitude and latitude of the GPS</p>"},"Constants.html#/c:@SDLDimension3D":{"name":"SDLDimension3D","abstract":"<p>Longitude and latitude and altitude of the GPS</p>"},"Constants.html#/c:@SDLDirectionLeft":{"name":"SDLDirectionLeft","abstract":"<p>Direction left</p>"},"Constants.html#/c:@SDLDirectionRight":{"name":"SDLDirectionRight","abstract":"<p>Direction right</p>"},"Constants.html#/c:@SDLDisplayModeDay":{"name":"SDLDisplayModeDay","abstract":"<p>@abstract Display Mode : DAY</p>"},"Constants.html#/c:@SDLDisplayModeNight":{"name":"SDLDisplayModeNight","abstract":"<p>@abstract Display Mode : NIGHT.</p>"},"Constants.html#/c:@SDLDisplayModeAuto":{"name":"SDLDisplayModeAuto","abstract":"<p>@abstract Display Mode : AUTO.</p>"},"Constants.html#/c:@SDLDisplayTypeCID":{"name":"SDLDisplayTypeCID","abstract":"<p>This display type provides a 2-line x 20 character &ldquo;dot matrix&rdquo; display.</p>"},"Constants.html#/c:@SDLDisplayTypeType2":{"name":"SDLDisplayTypeType2","abstract":"<p>Display type 2</p>"},"Constants.html#/c:@SDLDisplayTypeType5":{"name":"SDLDisplayTypeType5","abstract":"<p>Display type 5</p>"},"Constants.html#/c:@SDLDisplayTypeNGN":{"name":"SDLDisplayTypeNGN","abstract":"<p>This display type provides an 8 inch touchscreen display.</p>"},"Constants.html#/c:@SDLDisplayTypeGen28DMA":{"name":"SDLDisplayTypeGen28DMA","abstract":"<p>Display type Gen 28 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeGen26DMA":{"name":"SDLDisplayTypeGen26DMA","abstract":"<p>Display type Gen 26 DMA</p>"},"Constants.html#/c:@SDLDisplayTypeMFD3":{"name":"SDLDisplayTypeMFD3","abstract":"<p>Display type MFD3</p>"},"Constants.html#/c:@SDLDisplayTypeMFD4":{"name":"SDLDisplayTypeMFD4","abstract":"<p>Display type MFD4</p>"},"Constants.html#/c:@SDLDisplayTypeMFD5":{"name":"SDLDisplayTypeMFD5","abstract":"<p>Display type MFD5</p>"},"Constants.html#/c:@SDLDisplayTypeGen38Inch":{"name":"SDLDisplayTypeGen38Inch","abstract":"<p>Display type Gen 3 8-inch</p>"},"Constants.html#/c:@SDLDisplayTypeGeneric":{"name":"SDLDisplayTypeGeneric","abstract":"<p>Display type Generic</p>"},"Constants.html#/c:@SDLDistanceUnitMiles":{"name":"SDLDistanceUnitMiles","abstract":"<p>@abstract SDLDistanceUnit: <em>MILES</em></p>"},"Constants.html#/c:@SDLDistanceUnitKilometers":{"name":"SDLDistanceUnitKilometers","abstract":"<p>@abstract SDLDistanceUnit: <em>KILOMETERS</em></p>"},"Constants.html#/c:@SDLDriverDistractionStateOn":{"name":"SDLDriverDistractionStateOn","abstract":"<p>Driver distraction rules are in effect.</p>"},"Constants.html#/c:@SDLDriverDistractionStateOff":{"name":"SDLDriverDistractionStateOff","abstract":"<p>Driver distraction rules are NOT in effect.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusNormal":{"name":"SDLECallConfirmationStatusNormal","abstract":"<p>No E-Call signal triggered.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusInProgress":{"name":"SDLECallConfirmationStatusInProgress","abstract":"<p>An E-Call is being in progress.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCancelled":{"name":"SDLECallConfirmationStatusCancelled","abstract":"<p>An E-Call was cancelled by the user.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleted":{"name":"SDLECallConfirmationStatusCompleted","abstract":"<p>The E-Call sequence is completed.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusUnsuccessful":{"name":"SDLECallConfirmationStatusUnsuccessful","abstract":"<p>An E-Call could not be connected.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusConfiguredOff":{"name":"SDLECallConfirmationStatusConfiguredOff","abstract":"<p>E-Call is not configured on this vehicle.</p>"},"Constants.html#/c:@SDLECallConfirmationStatusCompleteDTMFTimeout":{"name":"SDLECallConfirmationStatusCompleteDTMFTimeout","abstract":"<p>E-Call is considered to be complete without Emergency Operator contact.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusClosed":{"name":"SDLElectronicParkBrakeStatusClosed","abstract":"<p>Parking brake actuators have been fully applied.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusTransition":{"name":"SDLElectronicParkBrakeStatusTransition","abstract":"<p>Parking brake actuators are transitioning to either Apply/Closed or Release/Open state.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusOpen":{"name":"SDLElectronicParkBrakeStatusOpen","abstract":"<p>Parking brake actuators are released.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusDriveActive":{"name":"SDLElectronicParkBrakeStatusDriveActive","abstract":"<p>When driver pulls the Electronic Parking Brake switch while driving &ldquo;at speed&rdquo;.</p>"},"Constants.html#/c:@SDLElectronicParkBrakeStatusFault":{"name":"SDLElectronicParkBrakeStatusFault","abstract":"<p>When system has a fault or is under maintenance.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNoEvent":{"name":"SDLEmergencyEventTypeNoEvent","abstract":"<p>No emergency event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFrontal":{"name":"SDLEmergencyEventTypeFrontal","abstract":"<p>Frontal collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeSide":{"name":"SDLEmergencyEventTypeSide","abstract":"<p>Side collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRear":{"name":"SDLEmergencyEventTypeRear","abstract":"<p>Rear collision has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeRollover":{"name":"SDLEmergencyEventTypeRollover","abstract":"<p>A rollover event has happened.</p>"},"Constants.html#/c:@SDLEmergencyEventTypeNotSupported":{"name":"SDLEmergencyEventTypeNotSupported","abstract":"<p>The signal is not supported</p>"},"Constants.html#/c:@SDLEmergencyEventTypeFault":{"name":"SDLEmergencyEventTypeFault","abstract":"<p>Emergency status cannot be determined</p>"},"Constants.html#/c:@SDLFileTypeBMP":{"name":"SDLFileTypeBMP","abstract":"<p>file type: Bitmap (BMP)</p>"},"Constants.html#/c:@SDLFileTypeJPEG":{"name":"SDLFileTypeJPEG","abstract":"<p>file type: JPEG</p>"},"Constants.html#/c:@SDLFileTypePNG":{"name":"SDLFileTypePNG","abstract":"<p>file type: PNG</p>"},"Constants.html#/c:@SDLFileTypeWAV":{"name":"SDLFileTypeWAV","abstract":"<p>file type: WAVE (WAV)</p>"},"Constants.html#/c:@SDLFileTypeMP3":{"name":"SDLFileTypeMP3","abstract":"<p>file type: MP3</p>"},"Constants.html#/c:@SDLFileTypeAAC":{"name":"SDLFileTypeAAC","abstract":"<p>file type: AAC</p>"},"Constants.html#/c:@SDLFileTypeBinary":{"name":"SDLFileTypeBinary","abstract":"<p>file type: BINARY</p>"},"Constants.html#/c:@SDLFileTypeJSON":{"name":"SDLFileTypeJSON","abstract":"<p>file type: JSON</p>"},"Constants.html#/c:@SDLFuelCutoffStatusTerminateFuel":{"name":"SDLFuelCutoffStatusTerminateFuel","abstract":"<p>Fuel is cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusNormalOperation":{"name":"SDLFuelCutoffStatusNormalOperation","abstract":"<p>Fuel is not cut off</p>"},"Constants.html#/c:@SDLFuelCutoffStatusFault":{"name":"SDLFuelCutoffStatusFault","abstract":"<p>Status of the fuel pump cannot be determined</p>"},"Constants.html#/c:@SDLFuelTypeGasoline":{"name":"SDLFuelTypeGasoline","abstract":"<p>Fuel type: Gasoline</p>"},"Constants.html#/c:@SDLFuelTypeDiesel":{"name":"SDLFuelTypeDiesel","abstract":"<p>Fuel type: Diesel</p>"},"Constants.html#/c:@SDLFuelTypeCNG":{"name":"SDLFuelTypeCNG","abstract":"<p>Fuel type: CNG</p>"},"Constants.html#/c:@SDLFuelTypeLPG":{"name":"SDLFuelTypeLPG","abstract":"<p>Fuel type: LPG</p>"},"Constants.html#/c:@SDLFuelTypeHydrogen":{"name":"SDLFuelTypeHydrogen","abstract":"<p>Fuel type: Hydrogen</p>"},"Constants.html#/c:@SDLFuelTypeBattery":{"name":"SDLFuelTypeBattery","abstract":"<p>Fuel type: Battery</p>"},"Constants.html#/c:@SDLGlobalPropertyHelpPrompt":{"name":"SDLGlobalPropertyHelpPrompt","abstract":"<p>The help prompt to be spoken if the user needs assistance during a user-initiated interaction.</p>"},"Constants.html#/c:@SDLGlobalPropertyTimeoutPrompt":{"name":"SDLGlobalPropertyTimeoutPrompt","abstract":"<p>The prompt to be spoken if the user-initiated interaction times out waiting for the user&rsquo;s verbal input.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpTitle":{"name":"SDLGlobalPropertyVoiceRecognitionHelpTitle","abstract":"<p>The title of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyVoiceRecognitionHelpItems":{"name":"SDLGlobalPropertyVoiceRecognitionHelpItems","abstract":"<p>Items of the menu displayed when the user requests help via voice recognition.</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuName":{"name":"SDLGlobalPropertyMenuName","abstract":"<p>The name of the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyMenuIcon":{"name":"SDLGlobalPropertyMenuIcon","abstract":"<p>An icon on the menu button displayed in templates</p>"},"Constants.html#/c:@SDLGlobalPropertyKeyboard":{"name":"SDLGlobalPropertyKeyboard","abstract":"<p>Property related to the keyboard</p>"},"Constants.html#/c:@SDLGlobalPropertyUserLocation":{"name":"SDLGlobalPropertyUserLocation","abstract":"<p>Location of the user&rsquo;s seat of setGlobalProperties</p>"},"Constants.html#/c:@SDLHMILevelFull":{"name":"SDLHMILevelFull","abstract":"<p>The application has full use of the SDL HMI. The app may output via TTS, display, or streaming audio and may gather input via VR, Menu, and button presses</p>"},"Constants.html#/c:@SDLHMILevelLimited":{"name":"SDLHMILevelLimited","abstract":"<p>This HMI Level is only defined for a media application using an HMI with an 8 inch touchscreen (Nav) system. The application&rsquo;s Show text is displayed and it receives button presses from media-oriented buttons (SEEKRIGHT, SEEKLEFT, TUNEUP, TUNEDOWN, PRESET_0-9)</p>"},"Constants.html#/c:@SDLHMILevelBackground":{"name":"SDLHMILevelBackground","abstract":"<p>App cannot interact with user via TTS, VR, Display or Button Presses. App can perform the following operations:</p>"},"Constants.html#/c:@SDLHMILevelNone":{"name":"SDLHMILevelNone","abstract":"<p>Application has been discovered by SDL, but it cannot send any requests or receive any notifications</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesFront":{"name":"SDLHMIZoneCapabilitiesFront","abstract":"<p>Indicates HMI available for front seat passengers.</p>"},"Constants.html#/c:@SDLHMIZoneCapabilitiesBack":{"name":"SDLHMIZoneCapabilitiesBack","abstract":"<p>Indicates HMI available for rear seat passengers.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceMobile":{"name":"SDLHybridAppPreferenceMobile","abstract":"<p>App preference of mobile.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceCloud":{"name":"SDLHybridAppPreferenceCloud","abstract":"<p>App preference of cloud.</p>"},"Constants.html#/c:@SDLHybridAppPreferenceBoth":{"name":"SDLHybridAppPreferenceBoth","abstract":"<p>App preference of both. Allows both the mobile and the cloud versions of the app to attempt to connect at the same time, however the first app that is registered is the one that is allowed to stay registered.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusNotStable":{"name":"SDLIgnitionStableStatusNotStable","abstract":"<p>The current ignition switch status is considered not to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusStable":{"name":"SDLIgnitionStableStatusStable","abstract":"<p>The current ignition switch status is considered to be stable.</p>"},"Constants.html#/c:@SDLIgnitionStableStatusMissingFromTransmitter":{"name":"SDLIgnitionStableStatusMissingFromTransmitter","abstract":"<p>The current ignition switch status is considered to be missing from the transmitter</p>"},"Constants.html#/c:@SDLIgnitionStatusUnknown":{"name":"SDLIgnitionStatusUnknown","abstract":"<p>Ignition status currently unknown</p>"},"Constants.html#/c:@SDLIgnitionStatusOff":{"name":"SDLIgnitionStatusOff","abstract":"<p>Ignition is off</p>"},"Constants.html#/c:@SDLIgnitionStatusAccessory":{"name":"SDLIgnitionStatusAccessory","abstract":"<p>Ignition is in mode accessory</p>"},"Constants.html#/c:@SDLIgnitionStatusRun":{"name":"SDLIgnitionStatusRun","abstract":"<p>Ignition is in mode run</p>"},"Constants.html#/c:@SDLIgnitionStatusStart":{"name":"SDLIgnitionStatusStart","abstract":"<p>Ignition is in mode start</p>"},"Constants.html#/c:@SDLIgnitionStatusInvalid":{"name":"SDLIgnitionStatusInvalid","abstract":"<p>Signal is invalid</p>"},"Constants.html#/c:@SDLImageFieldNameAlertIcon":{"name":"SDLImageFieldNameAlertIcon","abstract":"<p>The image field for Alert</p>"},"Constants.html#/c:@SDLImageFieldNameSoftButtonImage":{"name":"SDLImageFieldNameSoftButtonImage","abstract":"<p>The image field for SoftButton</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceImage":{"name":"SDLImageFieldNameChoiceImage","abstract":"<p>The first image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameChoiceSecondaryImage":{"name":"SDLImageFieldNameChoiceSecondaryImage","abstract":"<p>The scondary image field for Choice.</p>"},"Constants.html#/c:@SDLImageFieldNameVoiceRecognitionHelpItem":{"name":"SDLImageFieldNameVoiceRecognitionHelpItem","abstract":"<p>The image field for vrHelpItem.</p>"},"Constants.html#/c:@SDLImageFieldNameTurnIcon":{"name":"SDLImageFieldNameTurnIcon","abstract":"<p>The image field for Turn.</p>"},"Constants.html#/c:@SDLImageFieldNameMenuIcon":{"name":"SDLImageFieldNameMenuIcon","abstract":"<p>The image field for the menu icon in SetGlobalProperties.</p>"},"Constants.html#/c:@SDLImageFieldNameCommandIcon":{"name":"SDLImageFieldNameCommandIcon","abstract":"<p>The image field for AddCommand."},"Constants.html#/c:@SDLImageFieldNameAppIcon":{"name":"SDLImageFieldNameAppIcon","abstract":"<p>The image field for the app icon (set by setAppIcon).</p>"},"Constants.html#/c:@SDLImageFieldNameGraphic":{"name":"SDLImageFieldNameGraphic","abstract":"<p>The primary image field for Show."},"Constants.html#/c:@SDLImageFieldNameSecondaryGraphic":{"name":"SDLImageFieldNameSecondaryGraphic","abstract":"<p>The secondary image field for Show."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTIcon":{"name":"SDLImageFieldNameShowConstantTBTIcon","abstract":"<p>The primary image field for ShowConstant TBT."},"Constants.html#/c:@SDLImageFieldNameShowConstantTBTNextTurnIcon":{"name":"SDLImageFieldNameShowConstantTBTNextTurnIcon","abstract":"<p>The secondary image field for ShowConstant TBT.</p>"},"Constants.html#/c:@SDLImageFieldNameLocationImage":{"name":"SDLImageFieldNameLocationImage","abstract":"<p>The optional image of a destination / location</p>"},"Constants.html#/c:@SDLImageTypeStatic":{"name":"SDLImageTypeStatic","abstract":"<p>Activate an icon that shipped with the IVI system by passing a hex value.</p>"},"Constants.html#/c:@SDLImageTypeDynamic":{"name":"SDLImageTypeDynamic","abstract":"<p>An icon referencing an image uploaded by the app (identifier to be sent by SDLPutFile)</p>"},"Constants.html#/c:@SDLInteractionModeManualOnly":{"name":"SDLInteractionModeManualOnly","abstract":"<p>Interaction Mode : Manual Only</p>"},"Constants.html#/c:@SDLInteractionModeVoiceRecognitionOnly":{"name":"SDLInteractionModeVoiceRecognitionOnly","abstract":"<p>Interaction Mode : VR Only</p>"},"Constants.html#/c:@SDLInteractionModeBoth":{"name":"SDLInteractionModeBoth","abstract":"<p>Interaction Mode : Manual &amp; VR</p>"},"Constants.html#/c:@SDLKeyboardEventKeypress":{"name":"SDLKeyboardEventKeypress","abstract":"<p>The use has pressed the keyboard key (applies to both SINGLE_KEYPRESS and RESEND_CURRENT_ENTRY modes).</p>"},"Constants.html#/c:@SDLKeyboardEventSubmitted":{"name":"SDLKeyboardEventSubmitted","abstract":"<p>The User has finished entering text from the keyboard and submitted the entry.</p>"},"Constants.html#/c:@SDLKeyboardEventCancelled":{"name":"SDLKeyboardEventCancelled","abstract":"<p>The User has pressed the HMI-defined &ldquo;Cancel&rdquo; button.</p>"},"Constants.html#/c:@SDLKeyboardEventAborted":{"name":"SDLKeyboardEventAborted","abstract":"<p>The User has not finished entering text and the keyboard is aborted with the event of higher priority.</p>"},"Constants.html#/c:@SDLKeyboardEventVoice":{"name":"SDLKeyboardEventVoice","abstract":"<p>The user used voice as input for the keyboard</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTY":{"name":"SDLKeyboardLayoutQWERTY","abstract":"<p>QWERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutQWERTZ":{"name":"SDLKeyboardLayoutQWERTZ","abstract":"<p>QWERTZ layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeyboardLayoutAZERTY":{"name":"SDLKeyboardLayoutAZERTY","abstract":"<p>AZERTY layout (the name comes from the first six keys<br> appearing on the top left letter row of the keyboard and read from left to right)</p>"},"Constants.html#/c:@SDLKeypressModeSingleKeypress":{"name":"SDLKeypressModeSingleKeypress","abstract":"<p>SINGLE_KEYPRESS:<br>Each and every User`s keypress must be reported (new notification for every newly entered single symbol).</p>"},"Constants.html#/c:@SDLKeypressModeQueueKeypresses":{"name":"SDLKeypressModeQueueKeypresses","abstract":"<p>QUEUE_KEYPRESSES:<br>The whole entry is reported only after the User submits it (by ‘Search’ button click displayed on touchscreen keyboard)</p>"},"Constants.html#/c:@SDLKeypressModeResendCurrentEntry":{"name":"SDLKeypressModeResendCurrentEntry","abstract":"<p>RESEND_CURRENT_ENTRY:<br>The whole entry must be reported each and every time the User makes a new keypress<br> (new notification with all previously entered symbols and a newly entered one appended).</p>"},"Constants.html#/c:@SDLLanguageEnSa":{"name":"SDLLanguageEnSa","abstract":"<p>English_SA</p>"},"Constants.html#/c:@SDLLanguageHeIl":{"name":"SDLLanguageHeIl","abstract":"<p>Hebrew_IL</p>"},"Constants.html#/c:@SDLLanguageRoRo":{"name":"SDLLanguageRoRo","abstract":"<p>Romainian_RO</p>"},"Constants.html#/c:@SDLLanguageUkUa":{"name":"SDLLanguageUkUa","abstract":"<p>Ukrainian_UA</p>"},"Constants.html#/c:@SDLLanguageIdId":{"name":"SDLLanguageIdId","abstract":"<p>Indonesian_ID</p>"},"Constants.html#/c:@SDLLanguageViVn":{"name":"SDLLanguageViVn","abstract":"<p>Vietnamese_VN</p>"},"Constants.html#/c:@SDLLanguageMsMy":{"name":"SDLLanguageMsMy","abstract":"<p>Malay_MY</p>"},"Constants.html#/c:@SDLLanguageHiIn":{"name":"SDLLanguageHiIn","abstract":"<p>Hindi_IN</p>"},"Constants.html#/c:@SDLLanguageNlBe":{"name":"SDLLanguageNlBe","abstract":"<p>Dutch(Flemish)_BE</p>"},"Constants.html#/c:@SDLLanguageElGr":{"name":"SDLLanguageElGr","abstract":"<p>Greek_GR</p>"},"Constants.html#/c:@SDLLanguageHuHu":{"name":"SDLLanguageHuHu","abstract":"<p>Hungarian_HU</p>"},"Constants.html#/c:@SDLLanguageFiFi":{"name":"SDLLanguageFiFi","abstract":"<p>Finnish_FI</p>"},"Constants.html#/c:@SDLLanguageSkSk":{"name":"SDLLanguageSkSk","abstract":"<p>Slovak_SK</p>"},"Constants.html#/c:@SDLLanguageEnUs":{"name":"SDLLanguageEnUs","abstract":"<p>English_US</p>"},"Constants.html#/c:@SDLLanguageEnIn":{"name":"SDLLanguageEnIn","abstract":"<p>English - India</p>"},"Constants.html#/c:@SDLLanguageThTh":{"name":"SDLLanguageThTh","abstract":"<p>Thai - Thailand</p>"},"Constants.html#/c:@SDLLanguageEsMx":{"name":"SDLLanguageEsMx","abstract":"<p>Spanish - Mexico</p>"},"Constants.html#/c:@SDLLanguageFrCa":{"name":"SDLLanguageFrCa","abstract":"<p>French - Canada</p>"},"Constants.html#/c:@SDLLanguageDeDe":{"name":"SDLLanguageDeDe","abstract":"<p>German - Germany</p>"},"Constants.html#/c:@SDLLanguageEsEs":{"name":"SDLLanguageEsEs","abstract":"<p>Spanish - Spain</p>"},"Constants.html#/c:@SDLLanguageEnGb":{"name":"SDLLanguageEnGb","abstract":"<p>English - Great Britain</p>"},"Constants.html#/c:@SDLLanguageRuRu":{"name":"SDLLanguageRuRu","abstract":"<p>Russian - Russia</p>"},"Constants.html#/c:@SDLLanguageTrTr":{"name":"SDLLanguageTrTr","abstract":"<p>Turkish - Turkey</p>"},"Constants.html#/c:@SDLLanguagePlPl":{"name":"SDLLanguagePlPl","abstract":"<p>Polish - Poland</p>"},"Constants.html#/c:@SDLLanguageFrFr":{"name":"SDLLanguageFrFr","abstract":"<p>French - France</p>"},"Constants.html#/c:@SDLLanguageItIt":{"name":"SDLLanguageItIt","abstract":"<p>Italian - Italy</p>"},"Constants.html#/c:@SDLLanguageSvSe":{"name":"SDLLanguageSvSe","abstract":"<p>Swedish - Sweden</p>"},"Constants.html#/c:@SDLLanguagePtPt":{"name":"SDLLanguagePtPt","abstract":"<p>Portuguese - Portugal</p>"},"Constants.html#/c:@SDLLanguageNlNl":{"name":"SDLLanguageNlNl","abstract":"<p>Dutch (Standard) - Netherlands</p>"},"Constants.html#/c:@SDLLanguageEnAu":{"name":"SDLLanguageEnAu","abstract":"<p>English - Australia</p>"},"Constants.html#/c:@SDLLanguageZhCn":{"name":"SDLLanguageZhCn","abstract":"<p>Mandarin - China</p>"},"Constants.html#/c:@SDLLanguageZhTw":{"name":"SDLLanguageZhTw","abstract":"<p>Mandarin - Taiwan</p>"},"Constants.html#/c:@SDLLanguageJaJp":{"name":"SDLLanguageJaJp","abstract":"<p>Japanese - Japan</p>"},"Constants.html#/c:@SDLLanguageArSa":{"name":"SDLLanguageArSa","abstract":"<p>Arabic - Saudi Arabia</p>"},"Constants.html#/c:@SDLLanguageKoKr":{"name":"SDLLanguageKoKr","abstract":"<p>Korean - South Korea</p>"},"Constants.html#/c:@SDLLanguagePtBr":{"name":"SDLLanguagePtBr","abstract":"<p>Portuguese - Brazil</p>"},"Constants.html#/c:@SDLLanguageCsCz":{"name":"SDLLanguageCsCz","abstract":"<p>Czech - Czech Republic</p>"},"Constants.html#/c:@SDLLanguageDaDk":{"name":"SDLLanguageDaDk","abstract":"<p>Danish - Denmark</p>"},"Constants.html#/c:@SDLLanguageNoNo":{"name":"SDLLanguageNoNo","abstract":"<p>Norwegian - Norway</p>"},"Constants.html#/c:@SDLLayoutModeIconOnly":{"name":"SDLLayoutModeIconOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons.</p>"},"Constants.html#/c:@SDLLayoutModeIconWithSearch":{"name":"SDLLayoutModeIconWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as icons along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeListOnly":{"name":"SDLLayoutModeListOnly","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list.</p>"},"Constants.html#/c:@SDLLayoutModeListWithSearch":{"name":"SDLLayoutModeListWithSearch","abstract":"<p>This mode causes the interaction to display the previous set of choices as a list along with a search field in the HMI.</p>"},"Constants.html#/c:@SDLLayoutModeKeyboard":{"name":"SDLLayoutModeKeyboard","abstract":"<p>This mode causes the interaction to immediately display a keyboard entry through the HMI.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftHighBeam":{"name":"SDLLightNameFrontLeftHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightHighBeam":{"name":"SDLLightNameFrontRightHighBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_HIGH_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftLowBeam":{"name":"SDLLightNameFrontLeftLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontRightLowBeam":{"name":"SDLLightNameFrontRightLowBeam","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_LOW_BEAM.</p>"},"Constants.html#/c:@SDLLightNameFrontLeftParkingLight":{"name":"SDLLightNameFrontLeftParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightParkingLight":{"name":"SDLLightNameFrontRightParkingLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_PARKING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftFogLight":{"name":"SDLLightNameFrontLeftFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightFogLight":{"name":"SDLLightNameFrontRightFogLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftDaytimeRunningLight":{"name":"SDLLightNameFrontLeftDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightDaytimeRunningLight":{"name":"SDLLightNameFrontRightDaytimeRunningLight","abstract":"<p>@abstract Represents the Light with name FRONT_RIGHT_DAYTIME_RUNNING_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontLeftTurnLight":{"name":"SDLLightNameFrontLeftTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameFrontRightTurnLight":{"name":"SDLLightNameFrontRightTurnLight","abstract":"<p>@abstract Represents the Light with name FRONT_Right_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftFogLight":{"name":"SDLLightNameRearLeftFogLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_FOG_LIGHT.</p>"},"Constants.html#/c:@SDLLightNameRearRightFogLight":{"name":"SDLLightNameRearRightFogLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_FOG_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTailLight":{"name":"SDLLightNameRearLeftTailLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTailLight":{"name":"SDLLightNameRearRightTailLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TAIL_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftBrakeLight":{"name":"SDLLightNameRearLeftBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightBrakeLight":{"name":"SDLLightNameRearRightBrakeLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_BRAKE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearLeftTurnLight":{"name":"SDLLightNameRearLeftTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_LEFT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRightTurnLight":{"name":"SDLLightNameRearRightTurnLight","abstract":"<p>@abstract Represents the Light with name REAR_RIGHT_TURN_LIGHT</p>"},"Constants.html#/c:@SDLLightNameRearRegistrationPlateLight":{"name":"SDLLightNameRearRegistrationPlateLight","abstract":"<p>@abstract Represents the Light with name REAR_REGISTRATION_PLATE_LIGHT</p>"},"Constants.html#/c:@SDLLightNameHighBeams":{"name":"SDLLightNameHighBeams","abstract":"<p>@abstract Include all high beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameLowBeams":{"name":"SDLLightNameLowBeams","abstract":"<p>@abstract Include all low beam lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameFogLights":{"name":"SDLLightNameFogLights","abstract":"<p>@abstract Include all fog lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRunningLights":{"name":"SDLLightNameRunningLights","abstract":"<p>@abstract Include all daytime running lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameParkingLights":{"name":"SDLLightNameParkingLights","abstract":"<p>@abstract Include all parking lights: front_left and front_right.</p>"},"Constants.html#/c:@SDLLightNameBrakeLights":{"name":"SDLLightNameBrakeLights","abstract":"<p>@abstract Include all brake lights: rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameRearReversingLights":{"name":"SDLLightNameRearReversingLights","abstract":"<p>@abstract Represents the Light with name REAR_REVERSING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameSideMarkerLights":{"name":"SDLLightNameSideMarkerLights","abstract":"<p>@abstract Represents the Light with name SIDE_MARKER_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameLeftTurnLights":{"name":"SDLLightNameLeftTurnLights","abstract":"<p>@abstract Include all left turn signal lights: front_left, rear_left, left_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameRightTurnLights":{"name":"SDLLightNameRightTurnLights","abstract":"<p>@abstract Include all right turn signal lights: front_right, rear_right, right_side and mirror_mounted.</p>"},"Constants.html#/c:@SDLLightNameHazardLights":{"name":"SDLLightNameHazardLights","abstract":"<p>@abstract Include all hazard lights: front_left, front_right, rear_left and rear_right.</p>"},"Constants.html#/c:@SDLLightNameAmbientLights":{"name":"SDLLightNameAmbientLights","abstract":"<p>@abstract Represents the Light with name AMBIENT_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameOverHeadLights":{"name":"SDLLightNameOverHeadLights","abstract":"<p>@abstract Represents the Light with name OVERHEAD_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameReadingLights":{"name":"SDLLightNameReadingLights","abstract":"<p>@abstract Represents the Light with name READING_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameTrunkLights":{"name":"SDLLightNameTrunkLights","abstract":"<p>@abstract Represents the Light with name TRUNK_LIGHTS</p>"},"Constants.html#/c:@SDLLightNameExteriorFrontLights":{"name":"SDLLightNameExteriorFrontLights","abstract":"<p>@abstract Include exterior lights located in front of the vehicle. For example, fog lights and low beams.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearLights":{"name":"SDLLightNameExteriorRearLights","abstract":"<p>@abstract Include exterior lights located at the back of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorLeftLights":{"name":"SDLLightNameExteriorLeftLights","abstract":"<p>@abstract Include exterior lights located at the left side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRightLights":{"name":"SDLLightNameExteriorRightLights","abstract":"<p>@abstract Include exterior lights located at the right side of the vehicle."},"Constants.html#/c:@SDLLightNameExteriorRearCargoLights":{"name":"SDLLightNameExteriorRearCargoLights","abstract":"<p>@abstract Cargo lamps illuminate the cargo area.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTruckBedLights":{"name":"SDLLightNameExteriorRearTruckBedLights","abstract":"<p>@abstract Truck bed lamps light up the bed of the truck.</p>"},"Constants.html#/c:@SDLLightNameExteriorRearTrailerLights":{"name":"SDLLightNameExteriorRearTrailerLights","abstract":"<p>@abstract Trailer lights are lamps mounted on a trailer hitch.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftSpotLights":{"name":"SDLLightNameExteriorLeftSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the left side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightSpotLights":{"name":"SDLLightNameExteriorRightSpotLights","abstract":"<p>@abstract It is the spotlights mounted on the right side of a vehicle.</p>"},"Constants.html#/c:@SDLLightNameExteriorLeftPuddleLights":{"name":"SDLLightNameExteriorLeftPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorRightPuddleLights":{"name":"SDLLightNameExteriorRightPuddleLights","abstract":"<p>@abstract Puddle lamps illuminate the ground beside the door as the customer is opening or approaching the door.</p>"},"Constants.html#/c:@SDLLightNameExteriorAllLights":{"name":"SDLLightNameExteriorAllLights","abstract":"<p>@abstract Include all exterior lights around the vehicle.</p>"},"Constants.html#/c:@SDLLightStatusOn":{"name":"SDLLightStatusOn","abstract":"<p>@abstract Light status currently on.</p>"},"Constants.html#/c:@SDLLightStatusOFF":{"name":"SDLLightStatusOFF","abstract":"<p>@abstract Light status currently Off.</p>"},"Constants.html#/c:@SDLLightStatusRampUp":{"name":"SDLLightStatusRampUp","abstract":"<p>@abstract Light status currently RAMP_UP.</p>"},"Constants.html#/c:@SDLLightStatusRampDown":{"name":"SDLLightStatusRampDown","abstract":"<p>@abstract Light status currently RAMP_DOWN.</p>"},"Constants.html#/c:@SDLLightStatusUnknown":{"name":"SDLLightStatusUnknown","abstract":"<p>@abstract Light status currently UNKNOWN.</p>"},"Constants.html#/c:@SDLLightStatusInvalid":{"name":"SDLLightStatusInvalid","abstract":"<p>@abstract Light status currently INVALID.</p>"},"Constants.html#/c:@SDLLockScreenStatusOff":{"name":"SDLLockScreenStatusOff","abstract":"<p>LockScreen is Not Required</p>"},"Constants.html#/c:@SDLLockScreenStatusOptional":{"name":"SDLLockScreenStatusOptional","abstract":"<p>LockScreen is Optional</p>"},"Constants.html#/c:@SDLLockScreenStatusRequired":{"name":"SDLLockScreenStatusRequired","abstract":"<p>LockScreen is Required</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNormal":{"name":"SDLMaintenanceModeStatusNormal","abstract":"<p>Maintenance Mode Status : Normal</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusNear":{"name":"SDLMaintenanceModeStatusNear","abstract":"<p>Maintenance Mode Status : Near</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusActive":{"name":"SDLMaintenanceModeStatusActive","abstract":"<p>Maintenance Mode Status : Active</p>"},"Constants.html#/c:@SDLMaintenanceModeStatusFeatureNotPresent":{"name":"SDLMaintenanceModeStatusFeatureNotPresent","abstract":"<p>Maintenance Mode Status : Feature not present</p>"},"Constants.html#/c:@SDLMassageCushionTopLumbar":{"name":"SDLMassageCushionTopLumbar","abstract":"<p>@abstract TOP LUMBAR cushions of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionMiddleLumbar":{"name":"SDLMassageCushionMiddleLumbar","abstract":"<p>@abstract MIDDLE LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBottomLumbar":{"name":"SDLMassageCushionBottomLumbar","abstract":"<p>@abstract BOTTOM LUMBAR cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionBackBolsters":{"name":"SDLMassageCushionBackBolsters","abstract":"<p>@abstract BACK BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageCushionSeatBolsters":{"name":"SDLMassageCushionSeatBolsters","abstract":"<p>@abstract SEAT BOLSTERS cushion of a multi-contour massage seat</p>"},"Constants.html#/c:@SDLMassageModeOff":{"name":"SDLMassageModeOff","abstract":"<p>@abstract Massage Mode Status : OFF</p>"},"Constants.html#/c:@SDLMassageModeLow":{"name":"SDLMassageModeLow","abstract":"<p>@abstract Massage Mode Status : LOW</p>"},"Constants.html#/c:@SDLMassageModeHigh":{"name":"SDLMassageModeHigh","abstract":"<p>@abstract Massage Mode Status : HIGH</p>"},"Constants.html#/c:@SDLMassageZoneLumbar":{"name":"SDLMassageZoneLumbar","abstract":"<p>@abstract The back of a multi-contour massage seat. or SEAT_BACK</p>"},"Constants.html#/c:@SDLMassageZoneSeatCushion":{"name":"SDLMassageZoneSeatCushion","abstract":"<p>@abstract The bottom a multi-contour massage seat. or SEAT_BOTTOM</p>"},"Constants.html#/c:@SDLMediaClockFormatClock1":{"name":"SDLMediaClockFormatClock1","abstract":"<p>Media clock format: Clock1</p>"},"Constants.html#/c:@SDLMediaClockFormatClock2":{"name":"SDLMediaClockFormatClock2","abstract":"<p>Media clock format: Clock2</p>"},"Constants.html#/c:@SDLMediaClockFormatClock3":{"name":"SDLMediaClockFormatClock3","abstract":"<p>Media clock format: Clock3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText1":{"name":"SDLMediaClockFormatClockText1","abstract":"<p>Media clock format: ClockText1</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText2":{"name":"SDLMediaClockFormatClockText2","abstract":"<p>Media clock format: ClockText2</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText3":{"name":"SDLMediaClockFormatClockText3","abstract":"<p>Media clock format: ClockText3</p>"},"Constants.html#/c:@SDLMediaClockFormatClockText4":{"name":"SDLMediaClockFormatClockText4","abstract":"<p>Media clock format: ClockText4</p>"},"Constants.html#/c:@SDLMediaTypeMusic":{"name":"SDLMediaTypeMusic","abstract":"<p>The app will have a media type of music.</p>"},"Constants.html#/c:@SDLMediaTypePodcast":{"name":"SDLMediaTypePodcast","abstract":"<p>The app will have a media type of podcast.</p>"},"Constants.html#/c:@SDLMediaTypeAudiobook":{"name":"SDLMediaTypeAudiobook","abstract":"<p>The app will have a media type of audiobook.</p>"},"Constants.html#/c:@SDLMediaTypeOther":{"name":"SDLMediaTypeOther","abstract":"<p>The app will have a media type of other.</p>"},"Constants.html#/c:@SDLMenuLayoutList":{"name":"SDLMenuLayoutList","abstract":"<p>The menu should be laid out in a scrollable list format with one menu cell below the previous, each is stretched across the view</p>"},"Constants.html#/c:@SDLMenuLayoutTiles":{"name":"SDLMenuLayoutTiles","abstract":"<p>The menu should be laid out in a scrollable tiles format with each menu cell laid out in a square-ish format next to each other horizontally</p>"},"Constants.html#/c:@SDLMetadataTypeMediaTitle":{"name":"SDLMetadataTypeMediaTitle","abstract":"<p>The song / media title name</p>"},"Constants.html#/c:@SDLMetadataTypeMediaArtist":{"name":"SDLMetadataTypeMediaArtist","abstract":"<p>The &ldquo;artist&rdquo; of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaAlbum":{"name":"SDLMetadataTypeMediaAlbum","abstract":"<p>The &ldquo;album&rdquo; of the media&quot;</p>"},"Constants.html#/c:@SDLMetadataTypeMediaYear":{"name":"SDLMetadataTypeMediaYear","abstract":"<p>The &ldquo;year&rdquo; that the media was created</p>"},"Constants.html#/c:@SDLMetadataTypeMediaGenre":{"name":"SDLMetadataTypeMediaGenre","abstract":"<p>The &ldquo;genre&rdquo; of the media</p>"},"Constants.html#/c:@SDLMetadataTypeMediaStation":{"name":"SDLMetadataTypeMediaStation","abstract":"<p>The &ldquo;station&rdquo; that the media is playing on</p>"},"Constants.html#/c:@SDLMetadataTypeRating":{"name":"SDLMetadataTypeRating","abstract":"<p>The &ldquo;rating&rdquo; given to the media</p>"},"Constants.html#/c:@SDLMetadataTypeCurrentTemperature":{"name":"SDLMetadataTypeCurrentTemperature","abstract":"<p>The current temperature of the weather information</p>"},"Constants.html#/c:@SDLMetadataTypeMaximumTemperature":{"name":"SDLMetadataTypeMaximumTemperature","abstract":"<p>The high / maximum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeMinimumTemperature":{"name":"SDLMetadataTypeMinimumTemperature","abstract":"<p>The low / minimum temperature of the weather information for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeWeatherTerm":{"name":"SDLMetadataTypeWeatherTerm","abstract":"<p>A description of the weather for the current period</p>"},"Constants.html#/c:@SDLMetadataTypeHumidity":{"name":"SDLMetadataTypeHumidity","abstract":"<p>The humidity of the weather information for the current period</p>"},"Constants.html#/c:@SDLModuleTypeClimate":{"name":"SDLModuleTypeClimate","abstract":"<p>A SDLModuleType with the value of <em>CLIMATE</em></p>"},"Constants.html#/c:@SDLModuleTypeRadio":{"name":"SDLModuleTypeRadio","abstract":"<p>A SDLModuleType with the value of <em>RADIO</em></p>"},"Constants.html#/c:@SDLModuleTypeSeat":{"name":"SDLModuleTypeSeat","abstract":"<p>A SDLModuleType with the value of <em>SEAT</em></p>"},"Constants.html#/c:@SDLModuleTypeAudio":{"name":"SDLModuleTypeAudio","abstract":"<p>A SDLModuleType with the value of <em>AUDIO</em></p>"},"Constants.html#/c:@SDLModuleTypeLight":{"name":"SDLModuleTypeLight","abstract":"<p>A SDLModuleType with the value of <em>LIGHT</em></p>"},"Constants.html#/c:@SDLModuleTypeHMISettings":{"name":"SDLModuleTypeHMISettings","abstract":"<p>A SDLModuleType with the value of <em>HMI_SETTINGS</em></p>"},"Constants.html#/c:@SDLNavigationActionTurn":{"name":"SDLNavigationActionTurn","abstract":"<p>Using this action plus a supplied direction can give the type of turn.</p>"},"Constants.html#/c:@SDLNavigationActionExit":{"name":"SDLNavigationActionExit","abstract":"<p>A navigation action of exit.</p>"},"Constants.html#/c:@SDLNavigationActionStay":{"name":"SDLNavigationActionStay","abstract":"<p>A navigation action of stay.</p>"},"Constants.html#/c:@SDLNavigationActionMerge":{"name":"SDLNavigationActionMerge","abstract":"<p>A navigation action of merge.</p>"},"Constants.html#/c:@SDLNavigationActionFerry":{"name":"SDLNavigationActionFerry","abstract":"<p>A navigation action of ferry.</p>"},"Constants.html#/c:@SDLNavigationActionCarShuttleTrain":{"name":"SDLNavigationActionCarShuttleTrain","abstract":"<p>A navigation action of car shuttle train.</p>"},"Constants.html#/c:@SDLNavigationActionWaypoint":{"name":"SDLNavigationActionWaypoint","abstract":"<p>A navigation action of waypoint.</p>"},"Constants.html#/c:@SDLNavigationJunctionRegular":{"name":"SDLNavigationJunctionRegular","abstract":"<p>A junction that represents a standard intersection with a single road crossing another.</p>"},"Constants.html#/c:@SDLNavigationJunctionBifurcation":{"name":"SDLNavigationJunctionBifurcation","abstract":"<p>A junction where the road splits off into two paths; a fork in the road.</p>"},"Constants.html#/c:@SDLNavigationJunctionMultiCarriageway":{"name":"SDLNavigationJunctionMultiCarriageway","abstract":"<p>A junction that has multiple intersections and paths.</p>"},"Constants.html#/c:@SDLNavigationJunctionRoundabout":{"name":"SDLNavigationJunctionRoundabout","abstract":"<p>A junction where traffic moves in a single direction around a central, non-traversable point to reach one of the connecting roads.</p>"},"Constants.html#/c:@SDLNavigationJunctionTraversableRoundabout":{"name":"SDLNavigationJunctionTraversableRoundabout","abstract":"<p>Similar to a roundabout, however the center of the roundabout is fully traversable. Also known as a mini-roundabout.</p>"},"Constants.html#/c:@SDLNavigationJunctionJughandle":{"name":"SDLNavigationJunctionJughandle","abstract":"<p>A junction where lefts diverge to the right, then curve to the left, converting a left turn to a crossing maneuver.</p>"},"Constants.html#/c:@SDLNavigationJunctionAllWayYield":{"name":"SDLNavigationJunctionAllWayYield","abstract":"<p>Multiple way intersection that allows traffic to flow based on priority; most commonly right of way and first in, first out.</p>"},"Constants.html#/c:@SDLNavigationJunctionTurnAround":{"name":"SDLNavigationJunctionTurnAround","abstract":"<p>A junction designated for traffic turn arounds.</p>"},"Constants.html#/c:@SDLNotificationUserInfoObject":{"name":"SDLNotificationUserInfoObject","abstract":"<p>The key used in all SDL NSNotifications to extract the response or notification from the userinfo dictionary.</p>"},"Constants.html#/c:@SDLTransportDidDisconnect":{"name":"SDLTransportDidDisconnect","abstract":"<p>Name for a disconnection notification</p>"},"Constants.html#/c:@SDLTransportDidConnect":{"name":"SDLTransportDidConnect","abstract":"<p>Name for a connection notification</p>"},"Constants.html#/c:@SDLTransportConnectError":{"name":"SDLTransportConnectError","abstract":"<p>Name for a error during connection notification</p>"},"Constants.html#/c:@SDLRPCServiceDidDisconnect":{"name":"SDLRPCServiceDidDisconnect","abstract":"<p>Name for a disconnection notification</p>"},"Constants.html#/c:@SDLRPCServiceDidConnect":{"name":"SDLRPCServiceDidConnect","abstract":"<p>Name for a connection notification</p>"},"Constants.html#/c:@SDLRPCServiceConnectionDidError":{"name":"SDLRPCServiceConnectionDidError","abstract":"<p>Name for a error during connection notification</p>"},"Constants.html#/c:@SDLDidReceiveError":{"name":"SDLDidReceiveError","abstract":"<p>Name for a general error notification</p>"},"Constants.html#/c:@SDLDidReceiveLockScreenIcon":{"name":"SDLDidReceiveLockScreenIcon","abstract":"<p>Name for an incoming lock screen icon notification</p>"},"Constants.html#/c:@SDLDidBecomeReady":{"name":"SDLDidBecomeReady","abstract":"<p>Name for an SDL became ready notification</p>"},"Constants.html#/c:@SDLDidUpdateProjectionView":{"name":"SDLDidUpdateProjectionView","abstract":"<p>Name for a notification sent by the user when their CarWindow view has been updated</p>"},"Constants.html#/c:@SDLDidChangeLockScreenStatusNotification":{"name":"SDLDidChangeLockScreenStatusNotification","abstract":"<p>Name for a LockScreenStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandResponse":{"name":"SDLDidReceiveAddCommandResponse","abstract":"<p>Name for an AddCommand response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuResponse":{"name":"SDLDidReceiveAddSubMenuResponse","abstract":"<p>Name for an AddSubMenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertResponse":{"name":"SDLDidReceiveAlertResponse","abstract":"<p>Name for an Alert response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverResponse":{"name":"SDLDidReceiveAlertManeuverResponse","abstract":"<p>Name for an AlertManeuver response RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressResponse":{"name":"SDLDidReceiveButtonPressResponse","abstract":"<p>Name for an ButtonPress response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCancelInteractionResponse":{"name":"SDLDidReceiveCancelInteractionResponse","abstract":"<p>Name for aa CancelInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationResponse":{"name":"SDLDidReceiveChangeRegistrationResponse","abstract":"<p>Name for a ChangeRegistration response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCloseApplicationResponse":{"name":"SDLDidReceiveCloseApplicationResponse","abstract":"<p>Name for a CloseApplication response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetResponse":{"name":"SDLDidReceiveCreateInteractionChoiceSetResponse","abstract":"<p>Name for a CreateInteractionChoiceSet response RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateWindowResponse":{"name":"SDLDidReceiveCreateWindowResponse","abstract":"<p>Name for a CreateWindow response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandResponse":{"name":"SDLDidReceiveDeleteCommandResponse","abstract":"<p>Name for a DeleteCommand response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileResponse":{"name":"SDLDidReceiveDeleteFileResponse","abstract":"<p>Name for a DeleteFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetResponse":{"name":"SDLDidReceiveDeleteInteractionChoiceSetResponse","abstract":"<p>Name for a DeleteInteractionChoiceSet response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubmenuResponse":{"name":"SDLDidReceiveDeleteSubmenuResponse","abstract":"<p>Name for a DeleteSubmenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteWindowResponse":{"name":"SDLDidReceiveDeleteWindowResponse","abstract":"<p>Name for a DeleteWindow response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageResponse":{"name":"SDLDidReceiveDiagnosticMessageResponse","abstract":"<p>Name for a DiagnosticMessage response RPC</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberResponse":{"name":"SDLDidReceiveDialNumberResponse","abstract":"<p>Name for a DialNumber response RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataResponse":{"name":"SDLDidReceiveEncodedSyncPDataResponse","abstract":"<p>Name for an EncodedSyncPData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruResponse":{"name":"SDLDidReceiveEndAudioPassThruResponse","abstract":"<p>Name for an EndAudioPassThru response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGenericResponse":{"name":"SDLDidReceiveGenericResponse","abstract":"<p>Name for a Generic response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesResponse":{"name":"SDLDidReceiveGetCloudAppPropertiesResponse","abstract":"<p>Name for a GetCloudAppProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataResponse":{"name":"SDLDidReceiveGetAppServiceDataResponse","abstract":"<p>Name for a GetAppServiceData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsResponse":{"name":"SDLDidReceiveGetDTCsResponse","abstract":"<p>Name for a GetDTCs response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetFileResponse":{"name":"SDLDidReceiveGetFileResponse","abstract":"<p>Name for a GetFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataResponse","abstract":"<p>Name for a GetInteriorVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentResponse":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentResponse","abstract":"<p>Name for a GetInteriorVehicleDataConsent response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilitiesResponse":{"name":"SDLDidReceiveGetSystemCapabilitiesResponse","abstract":"<p>Name for a GetSystemCapabilities response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataResponse":{"name":"SDLDidReceiveGetVehicleDataResponse","abstract":"<p>Name for a GetVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetWaypointsResponse":{"name":"SDLDidReceiveGetWaypointsResponse","abstract":"<p>Name for a GetWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveListFilesResponse":{"name":"SDLDidReceiveListFilesResponse","abstract":"<p>Name for a ListFiles response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionResponse":{"name":"SDLDidReceivePerformAppServiceInteractionResponse","abstract":"<p>Name for a PerformAppServiceInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruResponse":{"name":"SDLDidReceivePerformAudioPassThruResponse","abstract":"<p>Name for a PerformAudioPassThru response RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionResponse":{"name":"SDLDidReceivePerformInteractionResponse","abstract":"<p>Name for a PerformInteraction response RPC</p>"},"Constants.html#/c:@SDLDidReceivePublishAppServiceResponse":{"name":"SDLDidReceivePublishAppServiceResponse","abstract":"<p>Name for a PublishAppService response RPC</p>"},"Constants.html#/c:@SDLDidReceivePutFileResponse":{"name":"SDLDidReceivePutFileResponse","abstract":"<p>Name for a ReceivePutFile response RPC</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDResponse":{"name":"SDLDidReceiveReadDIDResponse","abstract":"<p>Name for a ReceiveReadDID response RPC</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceResponse":{"name":"SDLDidReceiveRegisterAppInterfaceResponse","abstract":"<p>Name for a RegisterAppInterface response RPC</p>"},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleResponse":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleResponse","abstract":"<p>Name for a ReleaseInteriorVehicleDataModule response RPC</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesResponse":{"name":"SDLDidReceiveResetGlobalPropertiesResponse","abstract":"<p>Name for a ResetGlobalProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageResponse":{"name":"SDLDidReceiveScrollableMessageResponse","abstract":"<p>Name for a ScrollableMessage response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataResponse":{"name":"SDLDidReceiveSendHapticDataResponse","abstract":"<p>Name for a SendHapticData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationResponse":{"name":"SDLDidReceiveSendLocationResponse","abstract":"<p>Name for a SendLocation response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconResponse":{"name":"SDLDidReceiveSetAppIconResponse","abstract":"<p>Name for a SetAppIcon response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesResponse":{"name":"SDLDidReceiveSetCloudAppPropertiesResponse","abstract":"<p>Name for a SetCloudAppProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutResponse":{"name":"SDLDidReceiveSetDisplayLayoutResponse","abstract":"<p>Name for a SetDisplayLayout response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesResponse":{"name":"SDLDidReceiveSetGlobalPropertiesResponse","abstract":"<p>Name for a SetGlobalProperties response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataResponse":{"name":"SDLDidReceiveSetInteriorVehicleDataResponse","abstract":"<p>Name for a SetInteriorVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerResponse":{"name":"SDLDidReceiveSetMediaClockTimerResponse","abstract":"<p>Name for a SetMediaClockTimer response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTResponse":{"name":"SDLDidReceiveShowConstantTBTResponse","abstract":"<p>Name for a ShowConstantTBT response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowResponse":{"name":"SDLDidReceiveShowResponse","abstract":"<p>Name for a Show response RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowAppMenuResponse":{"name":"SDLDidReceiveShowAppMenuResponse","abstract":"<p>Name for a ShowAppMenu response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSliderResponse":{"name":"SDLDidReceiveSliderResponse","abstract":"<p>Name for a Slider response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSpeakResponse":{"name":"SDLDidReceiveSpeakResponse","abstract":"<p>Name for a Speak response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonResponse":{"name":"SDLDidReceiveSubscribeButtonResponse","abstract":"<p>Name for a SubscribeButton response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataResponse":{"name":"SDLDidReceiveSubscribeVehicleDataResponse","abstract":"<p>Name for a SubscribeVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWaypointsResponse":{"name":"SDLDidReceiveSubscribeWaypointsResponse","abstract":"<p>Name for a SubscribeWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataResponse":{"name":"SDLDidReceiveSyncPDataResponse","abstract":"<p>Name for a SyncPData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestResponse":{"name":"SDLDidReceiveSystemRequestResponse","abstract":"<p>Name for a SystemRequest response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListResponse":{"name":"SDLDidReceiveUpdateTurnListResponse","abstract":"<p>Name for an UpdateTurnList response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceResponse":{"name":"SDLDidReceiveUnpublishAppServiceResponse","abstract":"<p>Name for an UnpublishAppService response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceResponse":{"name":"SDLDidReceiveUnregisterAppInterfaceResponse","abstract":"<p>Name for an UnregisterAppInterface response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonResponse":{"name":"SDLDidReceiveUnsubscribeButtonResponse","abstract":"<p>Name for an UnsubscribeButton response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataResponse":{"name":"SDLDidReceiveUnsubscribeVehicleDataResponse","abstract":"<p>Name for an UnsubscribeVehicleData response RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWaypointsResponse":{"name":"SDLDidReceiveUnsubscribeWaypointsResponse","abstract":"<p>Name for an UnsubscribeWaypoints response RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddCommandRequest":{"name":"SDLDidReceiveAddCommandRequest","abstract":"<p>Name for an AddCommand request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAddSubMenuRequest":{"name":"SDLDidReceiveAddSubMenuRequest","abstract":"<p>Name for an AddSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertRequest":{"name":"SDLDidReceiveAlertRequest","abstract":"<p>Name for an Alert request RPC</p>"},"Constants.html#/c:@SDLDidReceiveAlertManeuverRequest":{"name":"SDLDidReceiveAlertManeuverRequest","abstract":"<p>Name for an AlertManeuver request RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressRequest":{"name":"SDLDidReceiveButtonPressRequest","abstract":"<p>Name for a ButtonPress request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCancelInteractionRequest":{"name":"SDLDidReceiveCancelInteractionRequest","abstract":"<p>Name for a CancelInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceiveChangeRegistrationRequest":{"name":"SDLDidReceiveChangeRegistrationRequest","abstract":"<p>Name for a ChangeRegistration request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCloseApplicationRequest":{"name":"SDLDidReceiveCloseApplicationRequest","abstract":"<p>Name for a CloseApplication request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateInteractionChoiceSetRequest":{"name":"SDLDidReceiveCreateInteractionChoiceSetRequest","abstract":"<p>Name for a CreateInteractionChoiceSet request RPC</p>"},"Constants.html#/c:@SDLDidReceiveCreateWindowRequest":{"name":"SDLDidReceiveCreateWindowRequest","abstract":"<p>Name for a CreateWindow request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteCommandRequest":{"name":"SDLDidReceiveDeleteCommandRequest","abstract":"<p>Name for a DeleteCommand request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteFileRequest":{"name":"SDLDidReceiveDeleteFileRequest","abstract":"<p>Name for a DeleteFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteInteractionChoiceSetRequest":{"name":"SDLDidReceiveDeleteInteractionChoiceSetRequest","abstract":"<p>Name for a DeleteInteractionChoiceSet request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteSubMenuRequest":{"name":"SDLDidReceiveDeleteSubMenuRequest","abstract":"<p>Name for a DeleteSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDeleteWindowRequest":{"name":"SDLDidReceiveDeleteWindowRequest","abstract":"<p>Name for a DeleteSubMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDiagnosticMessageRequest":{"name":"SDLDidReceiveDiagnosticMessageRequest","abstract":"<p>Name for a DiagnosticMessage request RPC</p>"},"Constants.html#/c:@SDLDidReceiveDialNumberRequest":{"name":"SDLDidReceiveDialNumberRequest","abstract":"<p>Name for a DialNumberR request RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedSyncPDataRequest":{"name":"SDLDidReceiveEncodedSyncPDataRequest","abstract":"<p>Name for an EncodedSyncPData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveEndAudioPassThruRequest":{"name":"SDLDidReceiveEndAudioPassThruRequest","abstract":"<p>Name for a EndAudioPass request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetAppServiceDataRequest":{"name":"SDLDidReceiveGetAppServiceDataRequest","abstract":"<p>Name for a GetAppServiceData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetCloudAppPropertiesRequest":{"name":"SDLDidReceiveGetCloudAppPropertiesRequest","abstract":"<p>Name for a GetCloudAppProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetDTCsRequest":{"name":"SDLDidReceiveGetDTCsRequest","abstract":"<p>Name for a ReceiveGetDTCs request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetFileRequest":{"name":"SDLDidReceiveGetFileRequest","abstract":"<p>Name for a GetFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataRequest","abstract":"<p>Name for a GetInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetInteriorVehicleDataConsentRequest":{"name":"SDLDidReceiveGetInteriorVehicleDataConsentRequest","abstract":"<p>Name for a GetInteriorVehicleDataConsent request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetSystemCapabilityRequest":{"name":"SDLDidReceiveGetSystemCapabilityRequest","abstract":"<p>Name for a GetSystemCapability request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetVehicleDataRequest":{"name":"SDLDidReceiveGetVehicleDataRequest","abstract":"<p>Name for a GetVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveGetWayPointsRequest":{"name":"SDLDidReceiveGetWayPointsRequest","abstract":"<p>Name for a GetWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveListFilesRequest":{"name":"SDLDidReceiveListFilesRequest","abstract":"<p>Name for a ListFiles request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAppServiceInteractionRequest":{"name":"SDLDidReceivePerformAppServiceInteractionRequest","abstract":"<p>Name for a PerformAppServiceInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformAudioPassThruRequest":{"name":"SDLDidReceivePerformAudioPassThruRequest","abstract":"<p>Name for a PerformAudioPassThru request RPC</p>"},"Constants.html#/c:@SDLDidReceivePerformInteractionRequest":{"name":"SDLDidReceivePerformInteractionRequest","abstract":"<p>Name for a PerformInteraction request RPC</p>"},"Constants.html#/c:@SDLDidReceivePublishAppServiceRequest":{"name":"SDLDidReceivePublishAppServiceRequest","abstract":"<p>Name for a PublishAppService request RPC</p>"},"Constants.html#/c:@SDLDidReceivePutFileRequest":{"name":"SDLDidReceivePutFileRequest","abstract":"<p>Name for a PutFile request RPC</p>"},"Constants.html#/c:@SDLDidReceiveReadDIDRequest":{"name":"SDLDidReceiveReadDIDRequest","abstract":"<p>Name for a ReadDID request RPC</p>"},"Constants.html#/c:@SDLDidReceiveRegisterAppInterfaceRequest":{"name":"SDLDidReceiveRegisterAppInterfaceRequest","abstract":"<p>Name for a RegisterAppInterfacr request RPC</p>"},"Constants.html#/c:@SDLDidReceiveReleaseInteriorVehicleDataModuleRequest":{"name":"SDLDidReceiveReleaseInteriorVehicleDataModuleRequest","abstract":"<p>Name for a ReleaseInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveResetGlobalPropertiesRequest":{"name":"SDLDidReceiveResetGlobalPropertiesRequest","abstract":"<p>Name for a ResetGlobalProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveScrollableMessageRequest":{"name":"SDLDidReceiveScrollableMessageRequest","abstract":"<p>Name for a ScrollableMessage request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendHapticDataRequest":{"name":"SDLDidReceiveSendHapticDataRequest","abstract":"<p>Name for a SendHapticData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSendLocationRequest":{"name":"SDLDidReceiveSendLocationRequest","abstract":"<p>Name for a SendLocation request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetAppIconRequest":{"name":"SDLDidReceiveSetAppIconRequest","abstract":"<p>Name for a SetAppIcon request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetCloudAppPropertiesRequest":{"name":"SDLDidReceiveSetCloudAppPropertiesRequest","abstract":"<p>Name for a SetCloudProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetDisplayLayoutRequest":{"name":"SDLDidReceiveSetDisplayLayoutRequest","abstract":"<p>Name for a SetDisplayLayout request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetGlobalPropertiesRequest":{"name":"SDLDidReceiveSetGlobalPropertiesRequest","abstract":"<p>Name for a SetGlobalProperties request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetInteriorVehicleDataRequest":{"name":"SDLDidReceiveSetInteriorVehicleDataRequest","abstract":"<p>Name for a SetInteriorVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSetMediaClockTimerRequest":{"name":"SDLDidReceiveSetMediaClockTimerRequest","abstract":"<p>Name for a SetMediaClockTimer request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowRequest":{"name":"SDLDidReceiveShowRequest","abstract":"<p>Name for a Show request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowAppMenuRequest":{"name":"SDLDidReceiveShowAppMenuRequest","abstract":"<p>Name for a ShowAppMenu request RPC</p>"},"Constants.html#/c:@SDLDidReceiveShowConstantTBTRequest":{"name":"SDLDidReceiveShowConstantTBTRequest","abstract":"<p>Name for a ShowConstantTBT request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSliderRequest":{"name":"SDLDidReceiveSliderRequest","abstract":"<p>Name for a Slider request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSpeakRequest":{"name":"SDLDidReceiveSpeakRequest","abstract":"<p>Name for a Speak request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeButtonRequest":{"name":"SDLDidReceiveSubscribeButtonRequest","abstract":"<p>Name for a SubscribeButton request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeVehicleDataRequest":{"name":"SDLDidReceiveSubscribeVehicleDataRequest","abstract":"<p>Name for a SubscribeVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSubscribeWayPointsRequest":{"name":"SDLDidReceiveSubscribeWayPointsRequest","abstract":"<p>Name for a ubscribeWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataRequest":{"name":"SDLDidReceiveSyncPDataRequest","abstract":"<p>Name for a SyncPData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestRequest":{"name":"SDLDidReceiveSystemRequestRequest","abstract":"<p>Name for a SystemRequest request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnpublishAppServiceRequest":{"name":"SDLDidReceiveUnpublishAppServiceRequest","abstract":"<p>Name for an UnpublishAppService request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnregisterAppInterfaceRequest":{"name":"SDLDidReceiveUnregisterAppInterfaceRequest","abstract":"<p>Name for an UnregisterAppInterface request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeButtonRequest":{"name":"SDLDidReceiveUnsubscribeButtonRequest","abstract":"<p>Name for an UnsubscribeButton request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeVehicleDataRequest":{"name":"SDLDidReceiveUnsubscribeVehicleDataRequest","abstract":"<p>Name for an UnsubscribeVehicleData request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUnsubscribeWayPointsRequest":{"name":"SDLDidReceiveUnsubscribeWayPointsRequest","abstract":"<p>Name for an UnsubscribeWayPoints request RPC</p>"},"Constants.html#/c:@SDLDidReceiveUpdateTurnListRequest":{"name":"SDLDidReceiveUpdateTurnListRequest","abstract":"<p>Name for an UpdateTurnList request RPC</p>"},"Constants.html#/c:@SDLDidChangeDriverDistractionStateNotification":{"name":"SDLDidChangeDriverDistractionStateNotification","abstract":"<p>Name for a DriverDistractionState notification RPC</p>"},"Constants.html#/c:@SDLDidChangeHMIStatusNotification":{"name":"SDLDidChangeHMIStatusNotification","abstract":"<p>Name for a HMIStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAppServiceDataNotification":{"name":"SDLDidReceiveAppServiceDataNotification","abstract":"<p>Name for an AppServiceData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAppUnregisteredNotification":{"name":"SDLDidReceiveAppUnregisteredNotification","abstract":"<p>Name for an AppUnregistered notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveAudioPassThruNotification":{"name":"SDLDidReceiveAudioPassThruNotification","abstract":"<p>Name for an AudioPassThru notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonEventNotification":{"name":"SDLDidReceiveButtonEventNotification","abstract":"<p>Name for a ButtonEvent notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveButtonPressNotification":{"name":"SDLDidReceiveButtonPressNotification","abstract":"<p>Name for a ButtonPress notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveCommandNotification":{"name":"SDLDidReceiveCommandNotification","abstract":"<p>Name for a Command notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveEncodedDataNotification":{"name":"SDLDidReceiveEncodedDataNotification","abstract":"<p>Name for a EncodedSyncPData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveInteriorVehicleDataNotification":{"name":"SDLDidReceiveInteriorVehicleDataNotification","abstract":"<p>Name for a InteriorVehicleData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveKeyboardInputNotification":{"name":"SDLDidReceiveKeyboardInputNotification","abstract":"<p>Name for a KeyboardInput notification RPC</p>"},"Constants.html#/c:@SDLDidChangeLanguageNotification":{"name":"SDLDidChangeLanguageNotification","abstract":"<p>Name for a Language notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveNewHashNotification":{"name":"SDLDidReceiveNewHashNotification","abstract":"<p>Name for a NewHash notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveVehicleIconNotification":{"name":"SDLDidReceiveVehicleIconNotification","abstract":"<p>Name for a VehicleIcon notification RPC</p>"},"Constants.html#/c:@SDLDidChangePermissionsNotification":{"name":"SDLDidChangePermissionsNotification","abstract":"<p>Name for a ChangePermissions notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveRemoteControlStatusNotification":{"name":"SDLDidReceiveRemoteControlStatusNotification","abstract":"<p>Name for a RemoteControlStatus notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveSyncPDataNotification":{"name":"SDLDidReceiveSyncPDataNotification","abstract":"<p>Name for an OnSyncPData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemCapabilityUpdatedNotification":{"name":"SDLDidReceiveSystemCapabilityUpdatedNotification","abstract":"<p>Name for a SystemCapability notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveSystemRequestNotification":{"name":"SDLDidReceiveSystemRequestNotification","abstract":"<p>Name for a SystemRequest notification RPC</p>"},"Constants.html#/c:@SDLDidChangeTurnByTurnStateNotification":{"name":"SDLDidChangeTurnByTurnStateNotification","abstract":"<p>Name for a TurnByTurnStat notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveTouchEventNotification":{"name":"SDLDidReceiveTouchEventNotification","abstract":"<p>Name for a TouchEvent notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveVehicleDataNotification":{"name":"SDLDidReceiveVehicleDataNotification","abstract":"<p>Name for a VehicleData notification RPC</p>"},"Constants.html#/c:@SDLDidReceiveWaypointNotification":{"name":"SDLDidReceiveWaypointNotification","abstract":"<p>Name for a Waypoint notification RPC</p>"},"Constants.html#/c:@SDLPRNDLPark":{"name":"SDLPRNDLPark","abstract":"<p>Park</p>"},"Constants.html#/c:@SDLPRNDLReverse":{"name":"SDLPRNDLReverse","abstract":"<p>Reverse gear</p>"},"Constants.html#/c:@SDLPRNDLNeutral":{"name":"SDLPRNDLNeutral","abstract":"<p>No gear</p>"},"Constants.html#/c:@SDLPRNDLDrive":{"name":"SDLPRNDLDrive","abstract":"<p>@abstract: Drive gear</p>"},"Constants.html#/c:@SDLPRNDLSport":{"name":"SDLPRNDLSport","abstract":"<p>Drive Sport mode</p>"},"Constants.html#/c:@SDLPRNDLLowGear":{"name":"SDLPRNDLLowGear","abstract":"<p>1st gear hold</p>"},"Constants.html#/c:@SDLPRNDLFirst":{"name":"SDLPRNDLFirst","abstract":"<p>First gear</p>"},"Constants.html#/c:@SDLPRNDLSecond":{"name":"SDLPRNDLSecond","abstract":"<p>Second gear</p>"},"Constants.html#/c:@SDLPRNDLThird":{"name":"SDLPRNDLThird","abstract":"<p>Third gear</p>"},"Constants.html#/c:@SDLPRNDLFourth":{"name":"SDLPRNDLFourth","abstract":"<p>Fourth gear</p>"},"Constants.html#/c:@SDLPRNDLFifth":{"name":"SDLPRNDLFifth","abstract":"<p>Fifth gear</p>"},"Constants.html#/c:@SDLPRNDLSixth":{"name":"SDLPRNDLSixth","abstract":"<p>Sixth gear</p>"},"Constants.html#/c:@SDLPRNDLSeventh":{"name":"SDLPRNDLSeventh","abstract":"<p>Seventh gear</p>"},"Constants.html#/c:@SDLPRNDLEighth":{"name":"SDLPRNDLEighth","abstract":"<p>Eighth gear</p>"},"Constants.html#/c:@SDLPRNDLUnknown":{"name":"SDLPRNDLUnknown","abstract":"<p>Unknown</p>"},"Constants.html#/c:@SDLPRNDLFault":{"name":"SDLPRNDLFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLPermissionStatusAllowed":{"name":"SDLPermissionStatusAllowed","abstract":"<p>permission: allowed</p>"},"Constants.html#/c:@SDLPermissionStatusDisallowed":{"name":"SDLPermissionStatusDisallowed","abstract":"<p>permission: disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserDisallowed":{"name":"SDLPermissionStatusUserDisallowed","abstract":"<p>permission: user disallowed</p>"},"Constants.html#/c:@SDLPermissionStatusUserConsentPending":{"name":"SDLPermissionStatusUserConsentPending","abstract":"<p>permission: user consent pending</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusUndefined":{"name":"SDLPowerModeQualificationStatusUndefined","abstract":"<p>An undefined status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusEvaluationInProgress":{"name":"SDLPowerModeQualificationStatusEvaluationInProgress","abstract":"<p>An &ldquo;evaluation in progress&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusNotDefined":{"name":"SDLPowerModeQualificationStatusNotDefined","abstract":"<p>A &ldquo;not defined&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeQualificationStatusOk":{"name":"SDLPowerModeQualificationStatusOk","abstract":"<p>An &ldquo;ok&rdquo; status</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyOut":{"name":"SDLPowerModeStatusKeyOut","abstract":"<p>The key is not in the ignition, and the power is off</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyRecentlyOut":{"name":"SDLPowerModeStatusKeyRecentlyOut","abstract":"<p>The key is not in the ignition and it was just recently removed</p>"},"Constants.html#/c:@SDLPowerModeStatusKeyApproved":{"name":"SDLPowerModeStatusKeyApproved","abstract":"<p>The key is not in the ignition, but an approved key is available</p>"},"Constants.html#/c:@SDLPowerModeStatusPostAccessory":{"name":"SDLPowerModeStatusPostAccessory","abstract":"<p>We are in a post-accessory power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusAccessory":{"name":"SDLPowerModeStatusAccessory","abstract":"<p>The car is in accessory power mode</p>"},"Constants.html#/c:@SDLPowerModeStatusPostIgnition":{"name":"SDLPowerModeStatusPostIgnition","abstract":"<p>We are in a post-ignition power situation</p>"},"Constants.html#/c:@SDLPowerModeStatusIgnitionOn":{"name":"SDLPowerModeStatusIgnitionOn","abstract":"<p>The ignition is on but the car is not yet running</p>"},"Constants.html#/c:@SDLPowerModeStatusRunning":{"name":"SDLPowerModeStatusRunning","abstract":"<p>The ignition is on and the car is running</p>"},"Constants.html#/c:@SDLPowerModeStatusCrank":{"name":"SDLPowerModeStatusCrank","abstract":"<p>We are in a crank power situation</p>"},"Constants.html#/c:@SDLPredefinedLayoutDefault":{"name":"SDLPredefinedLayoutDefault","abstract":"<p>A default layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutMedia":{"name":"SDLPredefinedLayoutMedia","abstract":"<p>The default media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutNonMedia":{"name":"SDLPredefinedLayoutNonMedia","abstract":"<p>The default non-media layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutOnscreenPresets":{"name":"SDLPredefinedLayoutOnscreenPresets","abstract":"<p>A media layout containing preset buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationFullscreenMap":{"name":"SDLPredefinedLayoutNavigationFullscreenMap","abstract":"<p>The default navigation layout with a fullscreen map</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationList":{"name":"SDLPredefinedLayoutNavigationList","abstract":"<p>A list layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutNavigationKeyboard":{"name":"SDLPredefinedLayoutNavigationKeyboard","abstract":"<p>A keyboard layout used for navigation apps</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithText":{"name":"SDLPredefinedLayoutGraphicWithText","abstract":"<p>A layout with a single graphic on the left and text on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextWithGraphic":{"name":"SDLPredefinedLayoutTextWithGraphic","abstract":"<p>A layout with text on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesOnly":{"name":"SDLPredefinedLayoutTilesOnly","abstract":"<p>A layout with only softbuttons placed in a tile layout</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsOnly":{"name":"SDLPredefinedLayoutTextButtonsOnly","abstract":"<p>A layout with only soft buttons that only accept text</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTiles":{"name":"SDLPredefinedLayoutGraphicWithTiles","abstract":"<p>A layout with a single graphic on the left and soft buttons in a tile layout on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTilesWithGraphic":{"name":"SDLPredefinedLayoutTilesWithGraphic","abstract":"<p>A layout with soft buttons in a tile layout on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextAndSoftButtons":{"name":"SDLPredefinedLayoutGraphicWithTextAndSoftButtons","abstract":"<p>A layout with a single graphic on the left and both text and soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextAndSoftButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextAndSoftButtonsWithGraphic","abstract":"<p>A layout with both text and soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutGraphicWithTextButtons":{"name":"SDLPredefinedLayoutGraphicWithTextButtons","abstract":"<p>A layout with a single graphic on the left and text-only soft buttons on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutTextButtonsWithGraphic":{"name":"SDLPredefinedLayoutTextButtonsWithGraphic","abstract":"<p>A layout with text-only soft buttons on the left and a single graphic on the right</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutLargeGraphicWithSoftButtons","abstract":"<p>A layout with a single large graphic and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutDoubleGraphicWithSoftButtons":{"name":"SDLPredefinedLayoutDoubleGraphicWithSoftButtons","abstract":"<p>A layout with two graphics and soft buttons</p>"},"Constants.html#/c:@SDLPredefinedLayoutLargeGraphicOnly":{"name":"SDLPredefinedLayoutLargeGraphicOnly","abstract":"<p>A layout with only a single large graphic</p>"},"Constants.html#/c:@SDLPrerecordedSpeechHelp":{"name":"SDLPrerecordedSpeechHelp","abstract":"<p>A prerecorded help prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechInitial":{"name":"SDLPrerecordedSpeechInitial","abstract":"<p>A prerecorded initial prompt</p>"},"Constants.html#/c:@SDLPrerecordedSpeechListen":{"name":"SDLPrerecordedSpeechListen","abstract":"<p>A prerecorded listen prompt is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechPositive":{"name":"SDLPrerecordedSpeechPositive","abstract":"<p>A prerecorded positive indicator noise is available</p>"},"Constants.html#/c:@SDLPrerecordedSpeechNegative":{"name":"SDLPrerecordedSpeechNegative","abstract":"<p>A prerecorded negative indicator noise is available</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceNoSourceSelected":{"name":"SDLPrimaryAudioSourceNoSourceSelected","abstract":"<p>Currently no source selected</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB":{"name":"SDLPrimaryAudioSourceUSB","abstract":"<p>USB is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceUSB2":{"name":"SDLPrimaryAudioSourceUSB2","abstract":"<p>USB2 is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceBluetoothStereo":{"name":"SDLPrimaryAudioSourceBluetoothStereo","abstract":"<p>Bluetooth Stereo is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceLineIn":{"name":"SDLPrimaryAudioSourceLineIn","abstract":"<p>Line in is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceIpod":{"name":"SDLPrimaryAudioSourceIpod","abstract":"<p>iPod is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceMobileApp":{"name":"SDLPrimaryAudioSourceMobileApp","abstract":"<p>Mobile app is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceCD":{"name":"SDLPrimaryAudioSourceCD","abstract":"<p>@abstract CD is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceAM":{"name":"SDLPrimaryAudioSourceAM","abstract":"<p>@abstract Radio frequency AM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceFM":{"name":"SDLPrimaryAudioSourceFM","abstract":"<p>@abstract Radio frequency FM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceXM":{"name":"SDLPrimaryAudioSourceXM","abstract":"<p>@abstract Radio frequency XM is current source</p>"},"Constants.html#/c:@SDLPrimaryAudioSourceDAB":{"name":"SDLPrimaryAudioSourceDAB","abstract":"<p>@abstract Radio frequency DAB is current source</p>"},"Constants.html#/c:@SDLRPCFunctionNameAddCommand":{"name":"SDLRPCFunctionNameAddCommand","abstract":"<p>Function name for an AddCommand RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAddSubMenu":{"name":"SDLRPCFunctionNameAddSubMenu","abstract":"<p>Function name for an AddSubMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAlert":{"name":"SDLRPCFunctionNameAlert","abstract":"<p>Function name for an Alert RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameAlertManeuver":{"name":"SDLRPCFunctionNameAlertManeuver","abstract":"<p>Function name for an AlertManeuver RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameButtonPress":{"name":"SDLRPCFunctionNameButtonPress","abstract":"<p>Function name for a ButtonPress RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCancelInteraction":{"name":"SDLRPCFunctionNameCancelInteraction","abstract":"<p>Function name for a CancelInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameChangeRegistration":{"name":"SDLRPCFunctionNameChangeRegistration","abstract":"<p>Function name for a ChangeRegistration RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCloseApplication":{"name":"SDLRPCFunctionNameCloseApplication","abstract":"<p>Function name for a CloseApplication RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCreateInteractionChoiceSet":{"name":"SDLRPCFunctionNameCreateInteractionChoiceSet","abstract":"<p>Function name for a CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteCommand":{"name":"SDLRPCFunctionNameDeleteCommand","abstract":"<p>Function name for a DeleteCommand RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteFile":{"name":"SDLRPCFunctionNameDeleteFile","abstract":"<p>Function name for a DeleteFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteInteractionChoiceSet":{"name":"SDLRPCFunctionNameDeleteInteractionChoiceSet","abstract":"<p>Function name for a DeleteInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteSubMenu":{"name":"SDLRPCFunctionNameDeleteSubMenu","abstract":"<p>Function name for a DeleteSubMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDiagnosticMessage":{"name":"SDLRPCFunctionNameDiagnosticMessage","abstract":"<p>Function name for a DiagnosticMessage RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDialNumber":{"name":"SDLRPCFunctionNameDialNumber","abstract":"<p>Function name for a DialNumber RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameEncodedSyncPData":{"name":"SDLRPCFunctionNameEncodedSyncPData","abstract":"<p>Function name for an CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameEndAudioPassThru":{"name":"SDLRPCFunctionNameEndAudioPassThru","abstract":"<p>Function name for an EndAudioPassThru RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGenericResponse":{"name":"SDLRPCFunctionNameGenericResponse","abstract":"<p>Function name for an GenricResponse Response RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetAppServiceData":{"name":"SDLRPCFunctionNameGetAppServiceData","abstract":"<p>Function name for an CreateInteractionChoiceSet RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetDTCs":{"name":"SDLRPCFunctionNameGetDTCs","abstract":"<p>Function name for a GetDTCs RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetFile":{"name":"SDLRPCFunctionNameGetFile","abstract":"<p>Function name for a GetFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetCloudAppProperties":{"name":"SDLRPCFunctionNameGetCloudAppProperties","abstract":"<p>Function name for a GetCloudAppProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleData":{"name":"SDLRPCFunctionNameGetInteriorVehicleData","abstract":"<p>Function name for a GetInteriorVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetInteriorVehicleDataConsent":{"name":"SDLRPCFunctionNameGetInteriorVehicleDataConsent","abstract":"<p>Function name for a GetInteriorVehicleDataConsent RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetSystemCapability":{"name":"SDLRPCFunctionNameGetSystemCapability","abstract":"<p>Function name for a GetSystemCapability RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetVehicleData":{"name":"SDLRPCFunctionNameGetVehicleData","abstract":"<p>Function name for a GetVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameGetWayPoints":{"name":"SDLRPCFunctionNameGetWayPoints","abstract":"<p>Function name for a GetWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameListFiles":{"name":"SDLRPCFunctionNameListFiles","abstract":"<p>Function name for a ListFiles RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAppInterfaceUnregistered":{"name":"SDLRPCFunctionNameOnAppInterfaceUnregistered","abstract":"<p>Function name for an OnAppInterfaceUnregistered notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAppServiceData":{"name":"SDLRPCFunctionNameOnAppServiceData","abstract":"<p>Function name for an OnAppServiceData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnAudioPassThru":{"name":"SDLRPCFunctionNameOnAudioPassThru","abstract":"<p>Function name for an OnAudioPassThru notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnButtonEvent":{"name":"SDLRPCFunctionNameOnButtonEvent","abstract":"<p>Function name for an OnButtonEvent notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnButtonPress":{"name":"SDLRPCFunctionNameOnButtonPress","abstract":"<p>Function name for an OnButtonPress notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnCommand":{"name":"SDLRPCFunctionNameOnCommand","abstract":"<p>Function name for an OnCommand notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnDriverDistraction":{"name":"SDLRPCFunctionNameOnDriverDistraction","abstract":"<p>Function name for an OnDriverDistraction notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnEncodedSyncPData":{"name":"SDLRPCFunctionNameOnEncodedSyncPData","abstract":"<p>Function name for an OnEncodedSyncPData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnHashChange":{"name":"SDLRPCFunctionNameOnHashChange","abstract":"<p>Function name for an OnHashChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnHMIStatus":{"name":"SDLRPCFunctionNameOnHMIStatus","abstract":"<p>Function name for an OnHMIStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnInteriorVehicleData":{"name":"SDLRPCFunctionNameOnInteriorVehicleData","abstract":"<p>Function name for an OnInteriorVehicleData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnKeyboardInput":{"name":"SDLRPCFunctionNameOnKeyboardInput","abstract":"<p>Function name for an OnKeyboardInput notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnLanguageChange":{"name":"SDLRPCFunctionNameOnLanguageChange","abstract":"<p>Function name for an OnLanguageChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnLockScreenStatus":{"name":"SDLRPCFunctionNameOnLockScreenStatus","abstract":"<p>Function name for an OnLockScreenStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnPermissionsChange":{"name":"SDLRPCFunctionNameOnPermissionsChange","abstract":"<p>Function name for an OnPermissionsChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnRCStatus":{"name":"SDLRPCFunctionNameOnRCStatus","abstract":"<p>Function name for an OnRCStatus notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSyncPData":{"name":"SDLRPCFunctionNameOnSyncPData","abstract":"<p>Function name for an OnSyncPData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSystemCapabilityUpdated":{"name":"SDLRPCFunctionNameOnSystemCapabilityUpdated","abstract":"<p>Function name for an OnSystemCapabilityUpdated notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnSystemRequest":{"name":"SDLRPCFunctionNameOnSystemRequest","abstract":"<p>Function name for an OnSystemRequest notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnTBTClientState":{"name":"SDLRPCFunctionNameOnTBTClientState","abstract":"<p>Function name for an OnTBTClientState notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnTouchEvent":{"name":"SDLRPCFunctionNameOnTouchEvent","abstract":"<p>Function name for an OnTouchEvent notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnVehicleData":{"name":"SDLRPCFunctionNameOnVehicleData","abstract":"<p>Function name for an OnVehicleData notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameOnWayPointChange":{"name":"SDLRPCFunctionNameOnWayPointChange","abstract":"<p>Function name for an OnWayPointChange notification RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformAppServiceInteraction":{"name":"SDLRPCFunctionNamePerformAppServiceInteraction","abstract":"<p>Function name for a PerformAppServiceInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformAudioPassThru":{"name":"SDLRPCFunctionNamePerformAudioPassThru","abstract":"<p>Function name for a PerformAppServiceInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePerformInteraction":{"name":"SDLRPCFunctionNamePerformInteraction","abstract":"<p>Function name for a PerformInteraction RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePublishAppService":{"name":"SDLRPCFunctionNamePublishAppService","abstract":"<p>Function name for a PublishAppService RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNamePutFile":{"name":"SDLRPCFunctionNamePutFile","abstract":"<p>Function name for a PutFile RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReadDID":{"name":"SDLRPCFunctionNameReadDID","abstract":"<p>Function name for a ReadDID RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReleaseInteriorVehicleDataModule":{"name":"SDLRPCFunctionNameReleaseInteriorVehicleDataModule","abstract":"<p>Function name for a ReleaseInteriorVehicleDataModule RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameRegisterAppInterface":{"name":"SDLRPCFunctionNameRegisterAppInterface","abstract":"<p>Function name for a RegisterAppInterface RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameReserved":{"name":"SDLRPCFunctionNameReserved","abstract":"<p>Function name for a Reserved RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameResetGlobalProperties":{"name":"SDLRPCFunctionNameResetGlobalProperties","abstract":"<p>Function name for a ResetGlobalProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameScrollableMessage":{"name":"SDLRPCFunctionNameScrollableMessage","abstract":"<p>Function name for a ScrollableMessage RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSendHapticData":{"name":"SDLRPCFunctionNameSendHapticData","abstract":"<p>Function name for a SendHapticData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSendLocation":{"name":"SDLRPCFunctionNameSendLocation","abstract":"<p>Function name for a SendLocation RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetAppIcon":{"name":"SDLRPCFunctionNameSetAppIcon","abstract":"<p>Function name for a SetAppIcon RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetCloudAppProperties":{"name":"SDLRPCFunctionNameSetCloudAppProperties","abstract":"<p>Function name for a SetCloudProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetDisplayLayout":{"name":"SDLRPCFunctionNameSetDisplayLayout","abstract":"<p>Function name for a SetDisplayLayout RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetGlobalProperties":{"name":"SDLRPCFunctionNameSetGlobalProperties","abstract":"<p>Function name for a SetGlobalProperties RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetInteriorVehicleData":{"name":"SDLRPCFunctionNameSetInteriorVehicleData","abstract":"<p>Function name for a SetInteriorVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSetMediaClockTimer":{"name":"SDLRPCFunctionNameSetMediaClockTimer","abstract":"<p>Function name for a SetMediaClockTimer RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShow":{"name":"SDLRPCFunctionNameShow","abstract":"<p>Function name for a Show RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShowAppMenu":{"name":"SDLRPCFunctionNameShowAppMenu","abstract":"<p>Function name for a ShowAppMenu RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameShowConstantTBT":{"name":"SDLRPCFunctionNameShowConstantTBT","abstract":"<p>Function name for a ShowConstantTBT RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSlider":{"name":"SDLRPCFunctionNameSlider","abstract":"<p>Function name for a Slider RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSpeak":{"name":"SDLRPCFunctionNameSpeak","abstract":"<p>Function name for a Speak RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeButton":{"name":"SDLRPCFunctionNameSubscribeButton","abstract":"<p>Function name for a SubscribeButton RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeVehicleData":{"name":"SDLRPCFunctionNameSubscribeVehicleData","abstract":"<p>Function name for a SubscribeVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSubscribeWayPoints":{"name":"SDLRPCFunctionNameSubscribeWayPoints","abstract":"<p>Function name for a SubscribeWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSyncPData":{"name":"SDLRPCFunctionNameSyncPData","abstract":"<p>Function name for a SyncPData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameSystemRequest":{"name":"SDLRPCFunctionNameSystemRequest","abstract":"<p>Function name for a SystemRequest RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnpublishAppService":{"name":"SDLRPCFunctionNameUnpublishAppService","abstract":"<p>Function name for an UnpublishAppService RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnregisterAppInterface":{"name":"SDLRPCFunctionNameUnregisterAppInterface","abstract":"<p>Function name for an UnregisterAppInterface RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeButton":{"name":"SDLRPCFunctionNameUnsubscribeButton","abstract":"<p>Function name for an UnsubscribeButton RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeVehicleData":{"name":"SDLRPCFunctionNameUnsubscribeVehicleData","abstract":"<p>Function name for an UnsubscribeVehicleData RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUnsubscribeWayPoints":{"name":"SDLRPCFunctionNameUnsubscribeWayPoints","abstract":"<p>Function name for an UnsubscribeWayPoints RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameUpdateTurnList":{"name":"SDLRPCFunctionNameUpdateTurnList","abstract":"<p>Function name for an UpdateTurnList RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameCreateWindow":{"name":"SDLRPCFunctionNameCreateWindow","abstract":"<p>Function name for a CreateWindow RPC</p>"},"Constants.html#/c:@SDLRPCFunctionNameDeleteWindow":{"name":"SDLRPCFunctionNameDeleteWindow","abstract":"<p>Function name for a DeleteWindow RPC</p>"},"Constants.html#/c:@SDLRPCMessageTypeNameRequest":{"name":"SDLRPCMessageTypeNameRequest","abstract":"<p>A request that will require a response</p>"},"Constants.html#/c:@SDLRPCMessageTypeNameResponse":{"name":"SDLRPCMessageTypeNameResponse","abstract":"<p>A response to a request</p>"},"Constants.html#/c:@SDLRPCMessageTypeNameNotification":{"name":"SDLRPCMessageTypeNameNotification","abstract":"<p>A message that does not have a response</p>"},"Constants.html#/c:@SDLRadioBandAM":{"name":"SDLRadioBandAM","abstract":"<p>Represents AM radio band</p>"},"Constants.html#/c:@SDLRadioBandFM":{"name":"SDLRadioBandFM","abstract":"<p>Represents FM radio band</p>"},"Constants.html#/c:@SDLRadioBandXM":{"name":"SDLRadioBandXM","abstract":"<p>Represents XM radio band</p>"},"Constants.html#/c:@SDLRadioStateAcquiring":{"name":"SDLRadioStateAcquiring","abstract":"<p>Represents Radio state as ACQUIRING</p>"},"Constants.html#/c:@SDLRadioStateAcquired":{"name":"SDLRadioStateAcquired","abstract":"<p>Represents Radio state as ACQUIRED</p>"},"Constants.html#/c:@SDLRadioStateMulticast":{"name":"SDLRadioStateMulticast","abstract":"<p>Represents Radio state as MULTICAST</p>"},"Constants.html#/c:@SDLRadioStateNotFound":{"name":"SDLRadioStateNotFound","abstract":"<p>Represents Radio state as NOT_FOUND</p>"},"Constants.html#/c:@SDLRequestTypeHTTP":{"name":"SDLRequestTypeHTTP","abstract":"<p>An HTTP request</p>"},"Constants.html#/c:@SDLRequestTypeFileResume":{"name":"SDLRequestTypeFileResume","abstract":"<p>A file resumption request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationRequest":{"name":"SDLRequestTypeAuthenticationRequest","abstract":"<p>An authentication request</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationChallenge":{"name":"SDLRequestTypeAuthenticationChallenge","abstract":"<p>An authentication challenge</p>"},"Constants.html#/c:@SDLRequestTypeAuthenticationAck":{"name":"SDLRequestTypeAuthenticationAck","abstract":"<p>An authentication acknowledgment</p>"},"Constants.html#/c:@SDLRequestTypeProprietary":{"name":"SDLRequestTypeProprietary","abstract":"<p>An proprietary formatted request</p>"},"Constants.html#/c:@SDLRequestTypeQueryApps":{"name":"SDLRequestTypeQueryApps","abstract":"<p>An Query Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLaunchApp":{"name":"SDLRequestTypeLaunchApp","abstract":"<p>A Launch Apps request</p>"},"Constants.html#/c:@SDLRequestTypeLockScreenIconURL":{"name":"SDLRequestTypeLockScreenIconURL","abstract":"<p>The URL for a lock screen icon</p>"},"Constants.html#/c:@SDLRequestTypeTrafficMessageChannel":{"name":"SDLRequestTypeTrafficMessageChannel","abstract":"<p>A traffic message channel request</p>"},"Constants.html#/c:@SDLRequestTypeDriverProfile":{"name":"SDLRequestTypeDriverProfile","abstract":"<p>A driver profile request</p>"},"Constants.html#/c:@SDLRequestTypeVoiceSearch":{"name":"SDLRequestTypeVoiceSearch","abstract":"<p>A voice search request</p>"},"Constants.html#/c:@SDLRequestTypeNavigation":{"name":"SDLRequestTypeNavigation","abstract":"<p>A navigation request</p>"},"Constants.html#/c:@SDLRequestTypePhone":{"name":"SDLRequestTypePhone","abstract":"<p>A phone request</p>"},"Constants.html#/c:@SDLRequestTypeClimate":{"name":"SDLRequestTypeClimate","abstract":"<p>A climate request</p>"},"Constants.html#/c:@SDLRequestTypeSettings":{"name":"SDLRequestTypeSettings","abstract":"<p>A settings request</p>"},"Constants.html#/c:@SDLRequestTypeVehicleDiagnostics":{"name":"SDLRequestTypeVehicleDiagnostics","abstract":"<p>A vehicle diagnostics request</p>"},"Constants.html#/c:@SDLRequestTypeEmergency":{"name":"SDLRequestTypeEmergency","abstract":"<p>An emergency request</p>"},"Constants.html#/c:@SDLRequestTypeMedia":{"name":"SDLRequestTypeMedia","abstract":"<p>A media request</p>"},"Constants.html#/c:@SDLRequestTypeFOTA":{"name":"SDLRequestTypeFOTA","abstract":"<p>A firmware over-the-air request</p>"},"Constants.html#/c:@SDLRequestTypeOEMSpecific":{"name":"SDLRequestTypeOEMSpecific","abstract":"<p>A request that is OEM specific using the <code>RequestSubType</code> in SystemRequest</p>"},"Constants.html#/c:@SDLRequestTypeIconURL":{"name":"SDLRequestTypeIconURL","abstract":"<p>A request for an icon url</p>"},"Constants.html#/c:@SDLResultSuccess":{"name":"SDLResultSuccess","abstract":"<p>The request succeeded</p>"},"Constants.html#/c:@SDLResultInvalidData":{"name":"SDLResultInvalidData","abstract":"<p>The request contained invalid data</p>"},"Constants.html#/c:@SDLResultCharacterLimitExceeded":{"name":"SDLResultCharacterLimitExceeded","abstract":"<p>The request had a string containing too many characters</p>"},"Constants.html#/c:@SDLResultUnsupportedRequest":{"name":"SDLResultUnsupportedRequest","abstract":"<p>The request is not supported by the IVI unit implementing SDL</p>"},"Constants.html#/c:@SDLResultOutOfMemory":{"name":"SDLResultOutOfMemory","abstract":"<p>The system could not process the request because the necessary memory couldn&rsquo;t be allocated</p>"},"Constants.html#/c:@SDLResultTooManyPendingRequests":{"name":"SDLResultTooManyPendingRequests","abstract":"<p>There are too many requests pending (means that the response has not been delivered yet).</p>"},"Constants.html#/c:@SDLResultInvalidId":{"name":"SDLResultInvalidId","abstract":"<p>One of the provided IDs is not valid.</p>"},"Constants.html#/c:@SDLResultDuplicateName":{"name":"SDLResultDuplicateName","abstract":"<p>The provided name or synonym is a duplicate of some already-defined name or synonym.</p>"},"Constants.html#/c:@SDLResultTooManyApplications":{"name":"SDLResultTooManyApplications","abstract":"<p>There are already too many registered applications.</p>"},"Constants.html#/c:@SDLResultApplicationRegisteredAlready":{"name":"SDLResultApplicationRegisteredAlready","abstract":"<p>RegisterAppInterface has been called, but this app is already registered</p>"},"Constants.html#/c:@SDLResultUnsupportedVersion":{"name":"SDLResultUnsupportedVersion","abstract":"<p>The Head Unit doesn&rsquo;t support the SDL version that is requested by the mobile application.</p>"},"Constants.html#/c:@SDLResultWrongLanguage":{"name":"SDLResultWrongLanguage","abstract":"<p>The requested language is currently not supported. This might be because of a mismatch of the currently active language on the head unit and the requested language.</p>"},"Constants.html#/c:@SDLResultApplicationNotRegistered":{"name":"SDLResultApplicationNotRegistered","abstract":"<p>A command can not be executed because no application has been registered with RegisterApplication.</p>"},"Constants.html#/c:@SDLResultInUse":{"name":"SDLResultInUse","abstract":"<p>The data may not be changed, because it is currently in use. For example when trying to delete a choice set that is currently involved in an interaction.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAllowed":{"name":"SDLResultVehicleDataNotAllowed","abstract":"<p>The user has turned off access to vehicle data, and it is globally unavailable to mobile applications.</p>"},"Constants.html#/c:@SDLResultVehicleDataNotAvailable":{"name":"SDLResultVehicleDataNotAvailable","abstract":"<p>The requested vehicle data is not available on this vehicle or is not published.</p>"},"Constants.html#/c:@SDLResultRejected":{"name":"SDLResultRejected","abstract":"<p>The requested command was rejected, e.g. because the mobile app is in background and cannot perform any HMI commands, or an HMI command (e.g. Speak) is rejected because a higher priority HMI command (e.g. Alert) is playing.</p>"},"Constants.html#/c:@SDLResultAborted":{"name":"SDLResultAborted","abstract":"<p>A command was aborted, e.g. due to user interaction (user pressed button), or an HMI command (e.g. Speak) is aborted because a higher priority HMI command (e.g. Alert) was requested.</p>"},"Constants.html#/c:@SDLResultIgnored":{"name":"SDLResultIgnored","abstract":"<p>A command was ignored, because the intended result is already in effect. For example, SetMediaClockTimer was used to pause the media clock although the clock is paused already.</p>"},"Constants.html#/c:@SDLResultUnsupportedResource":{"name":"SDLResultUnsupportedResource","abstract":"<p>A button that was requested for subscription is not supported under the current system.</p>"},"Constants.html#/c:@SDLResultFileNotFound":{"name":"SDLResultFileNotFound","abstract":"<p>A specified file could not be found on the head unit.</p>"},"Constants.html#/c:@SDLResultGenericError":{"name":"SDLResultGenericError","abstract":"<p>Provided data is valid but something went wrong in the lower layers.</p>"},"Constants.html#/c:@SDLResultDisallowed":{"name":"SDLResultDisallowed","abstract":"<p>RPC is not authorized in local policy table.</p>"},"Constants.html#/c:@SDLResultUserDisallowed":{"name":"SDLResultUserDisallowed","abstract":"<p>RPC is included in a functional group explicitly blocked by the user.</p>"},"Constants.html#/c:@SDLResultTimedOut":{"name":"SDLResultTimedOut","abstract":"<p>Overlay reached the maximum timeout and closed.</p>"},"Constants.html#/c:@SDLResultCancelRoute":{"name":"SDLResultCancelRoute","abstract":"<p>User selected to Cancel Route.</p>"},"Constants.html#/c:@SDLResultCorruptedData":{"name":"SDLResultCorruptedData","abstract":"<p>The data sent failed to pass CRC check in receiver end.</p>"},"Constants.html#/c:@SDLResultTruncatedData":{"name":"SDLResultTruncatedData","abstract":"<p>The RPC (e.g. ReadDID) executed successfully but the data exceeded the platform maximum threshold and thus, only part of the data is available.</p>"},"Constants.html#/c:@SDLResultRetry":{"name":"SDLResultRetry","abstract":"<p>The user interrupted the RPC (e.g. PerformAudioPassThru) and indicated to start over. Note, the app must issue the new RPC.</p>"},"Constants.html#/c:@SDLResultWarnings":{"name":"SDLResultWarnings","abstract":"<p>The RPC (e.g. SubscribeVehicleData) executed successfully but one or more items have a warning or failure.</p>"},"Constants.html#/c:@SDLResultSaved":{"name":"SDLResultSaved","abstract":"<p>The RPC (e.g. Slider) executed successfully and the user elected to save the current position / value.</p>"},"Constants.html#/c:@SDLResultInvalidCertificate":{"name":"SDLResultInvalidCertificate","abstract":"<p>The certificate provided during authentication is invalid.</p>"},"Constants.html#/c:@SDLResultExpiredCertificate":{"name":"SDLResultExpiredCertificate","abstract":"<p>The certificate provided during authentication is expired.</p>"},"Constants.html#/c:@SDLResultResumeFailed":{"name":"SDLResultResumeFailed","abstract":"<p>The provided hash ID does not match the hash of the current set of registered data or the core could not resume the previous data.</p>"},"Constants.html#/c:@SDLResultDataNotAvailable":{"name":"SDLResultDataNotAvailable","abstract":"<p>The requested data is not available on this vehicle or is not published for the connected app.</p>"},"Constants.html#/c:@SDLResultReadOnly":{"name":"SDLResultReadOnly","abstract":"<p>The requested data is read only thus cannot be change via remote control .</p>"},"Constants.html#/c:@SDLResultEncryptionNeeded":{"name":"SDLResultEncryptionNeeded","abstract":"<p>The RPC request needs to be encrypted.</p>"},"Constants.html#/c:@SDLSamplingRate8KHZ":{"name":"SDLSamplingRate8KHZ","abstract":"<p>Sampling rate of 8 kHz</p>"},"Constants.html#/c:@SDLSamplingRate16KHZ":{"name":"SDLSamplingRate16KHZ","abstract":"<p>Sampling rate of 16 kHz</p>"},"Constants.html#/c:@SDLSamplingRate22KHZ":{"name":"SDLSamplingRate22KHZ","abstract":"<p>Sampling rate of 22 kHz</p>"},"Constants.html#/c:@SDLSamplingRate44KHZ":{"name":"SDLSamplingRate44KHZ","abstract":"<p>Sampling rate of 44 kHz</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeSave":{"name":"SDLSeatMemoryActionTypeSave","abstract":"<p>@abstract Save current seat postions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeRestore":{"name":"SDLSeatMemoryActionTypeRestore","abstract":"<p>@abstract Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSeatMemoryActionTypeNone":{"name":"SDLSeatMemoryActionTypeNone","abstract":"<p>@abstract No action to be performed.</p>"},"Constants.html#/c:@SDLServiceUpdatePublished":{"name":"SDLServiceUpdatePublished","abstract":"<p>The service has just been published with the module and once activated to the primary service of its type, it will be ready for possible consumption.</p>"},"Constants.html#/c:@SDLServiceUpdateRemoved":{"name":"SDLServiceUpdateRemoved","abstract":"<p>The service has just been unpublished with the module and is no longer accessible.</p>"},"Constants.html#/c:@SDLServiceUpdateActivated":{"name":"SDLServiceUpdateActivated","abstract":"<p>The service is activated as the primary service of this type. All requests dealing with this service type will be handled by this service.</p>"},"Constants.html#/c:@SDLServiceUpdateDeactivated":{"name":"SDLServiceUpdateDeactivated","abstract":"<p>The service has been deactivated as the primary service of its type.</p>"},"Constants.html#/c:@SDLServiceUpdateManifestUpdate":{"name":"SDLServiceUpdateManifestUpdate","abstract":"<p>The service has updated its manifest. This could imply updated capabilities.</p>"},"Constants.html#/c:@SDLSoftButtonTypeText":{"name":"SDLSoftButtonTypeText","abstract":"<p>Text kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeImage":{"name":"SDLSoftButtonTypeImage","abstract":"<p>Image kind Softbutton</p>"},"Constants.html#/c:@SDLSoftButtonTypeBoth":{"name":"SDLSoftButtonTypeBoth","abstract":"<p>Both (Text &amp; Image) kind Softbutton</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesText":{"name":"SDLSpeechCapabilitiesText","abstract":"<p>The SDL platform can speak text phrases.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSAPIPhonemes":{"name":"SDLSpeechCapabilitiesSAPIPhonemes","abstract":"<p>The SDL platform can speak SAPI Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesLHPlusPhonemes":{"name":"SDLSpeechCapabilitiesLHPlusPhonemes","abstract":"<p>The SDL platform can speak LHPlus Phonemes.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesPrerecorded":{"name":"SDLSpeechCapabilitiesPrerecorded","abstract":"<p>The SDL platform can speak Prerecorded indicators and prompts.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesSilence":{"name":"SDLSpeechCapabilitiesSilence","abstract":"<p>The SDL platform can speak Silence.</p>"},"Constants.html#/c:@SDLSpeechCapabilitiesFile":{"name":"SDLSpeechCapabilitiesFile","abstract":"<p>The SDL platform can play a file</p>"},"Constants.html#/c:@SDLStaticIconNameAcceptCall":{"name":"SDLStaticIconNameAcceptCall","abstract":"<p>Static icon accept call / active phone call in progress / initiate a phone call</p>"},"Constants.html#/c:@SDLStaticIconNameAddWaypoint":{"name":"SDLStaticIconNameAddWaypoint","abstract":"<p>Static icon add waypoint</p>"},"Constants.html#/c:@SDLStaticIconNameAlbum":{"name":"SDLStaticIconNameAlbum","abstract":"<p>Static icon album</p>"},"Constants.html#/c:@SDLStaticIconNameAmbientLighting":{"name":"SDLStaticIconNameAmbientLighting","abstract":"<p>Static icon ambient lighting</p>"},"Constants.html#/c:@SDLStaticIconNameArrowNorth":{"name":"SDLStaticIconNameArrowNorth","abstract":"<p>Static icon arrow - north</p>"},"Constants.html#/c:@SDLStaticIconNameAudioMute":{"name":"SDLStaticIconNameAudioMute","abstract":"<p>Static icon audio mute</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookEpisode":{"name":"SDLStaticIconNameAudiobookEpisode","abstract":"<p>Static icon audiobook episode</p>"},"Constants.html#/c:@SDLStaticIconNameAudiobookNarrator":{"name":"SDLStaticIconNameAudiobookNarrator","abstract":"<p>Static icon audiobook narrator</p>"},"Constants.html#/c:@SDLStaticIconNameAuxillaryAudio":{"name":"SDLStaticIconNameAuxillaryAudio","abstract":"<p>Static icon auxillary audio</p>"},"Constants.html#/c:@SDLStaticIconNameBack":{"name":"SDLStaticIconNameBack","abstract":"<p>Static icon back / return</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity0Of5":{"name":"SDLStaticIconNameBatteryCapacity0Of5","abstract":"<p>Static icon battery capacity 0 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity1Of5":{"name":"SDLStaticIconNameBatteryCapacity1Of5","abstract":"<p>Static icon battery capacity 1 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity2Of5":{"name":"SDLStaticIconNameBatteryCapacity2Of5","abstract":"<p>Static icon battery capacity 2 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity3Of5":{"name":"SDLStaticIconNameBatteryCapacity3Of5","abstract":"<p>Static icon battery capacity 3 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity4Of5":{"name":"SDLStaticIconNameBatteryCapacity4Of5","abstract":"<p>Static icon battery capacity 4 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBatteryCapacity5Of5":{"name":"SDLStaticIconNameBatteryCapacity5Of5","abstract":"<p>Static icon battery capacity 5 of 5</p>"},"Constants.html#/c:@SDLStaticIconNameBluetoothAudioSource":{"name":"SDLStaticIconNameBluetoothAudioSource","abstract":"<p>Static icon bluetooth audio source</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth1":{"name":"SDLStaticIconNameBluetooth1","abstract":"<p>Static icon bluetooth1</p>"},"Constants.html#/c:@SDLStaticIconNameBluetooth2":{"name":"SDLStaticIconNameBluetooth2","abstract":"<p>Static icon bluetooth2</p>"},"Constants.html#/c:@SDLStaticIconNameBrowse":{"name":"SDLStaticIconNameBrowse","abstract":"<p>Static icon browse</p>"},"Constants.html#/c:@SDLStaticIconNameCellPhoneInRoamingMode":{"name":"SDLStaticIconNameCellPhoneInRoamingMode","abstract":"<p>Static icon cell phone in roaming mode</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength0Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength0Of5Bars","abstract":"<p>Static icon cell service signal strength 0 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength1Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength1Of5Bars","abstract":"<p>Static icon cell service signal strength 1 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength2Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength2Of5Bars","abstract":"<p>Static icon cell service signal strength 2 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength3Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength3Of5Bars","abstract":"<p>Static icon cell service signal strength 3 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength4Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength4Of5Bars","abstract":"<p>Static icon cell service signal strength 4 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameCellServiceSignalStrength5Of5Bars":{"name":"SDLStaticIconNameCellServiceSignalStrength5Of5Bars","abstract":"<p>Static icon cell service signal strength 5 of 5 bars</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneLeft":{"name":"SDLStaticIconNameChangeLaneLeft","abstract":"<p>Static icon change lane left</p>"},"Constants.html#/c:@SDLStaticIconNameChangeLaneRight":{"name":"SDLStaticIconNameChangeLaneRight","abstract":"<p>Static icon change lane right</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxChecked":{"name":"SDLStaticIconNameCheckBoxChecked","abstract":"<p>Static icon check box checked</p>"},"Constants.html#/c:@SDLStaticIconNameCheckBoxUnchecked":{"name":"SDLStaticIconNameCheckBoxUnchecked","abstract":"<p>Static icon check box unchecked</p>"},"Constants.html#/c:@SDLStaticIconNameClimate":{"name":"SDLStaticIconNameClimate","abstract":"<p>Static icon climate</p>"},"Constants.html#/c:@SDLStaticIconNameClock":{"name":"SDLStaticIconNameClock","abstract":"<p>Static icon clock</p>"},"Constants.html#/c:@SDLStaticIconNameCompose":{"name":"SDLStaticIconNameCompose","abstract":"<p>Static icon compose (e.g. message)</p>"},"Constants.html#/c:@SDLStaticIconNameContact":{"name":"SDLStaticIconNameContact","abstract":"<p>Static icon contact / person</p>"},"Constants.html#/c:@SDLStaticIconNameContinue":{"name":"SDLStaticIconNameContinue","abstract":"<p>Static icon continue</p>"},"Constants.html#/c:@SDLStaticIconNameDash":{"name":"SDLStaticIconNameDash","abstract":"<p>Static icon dash / bullet point</p>"},"Constants.html#/c:@SDLStaticIconNameDate":{"name":"SDLStaticIconNameDate","abstract":"<p>Static icon date / calendar</p>"},"Constants.html#/c:@SDLStaticIconNameDelete":{"name":"SDLStaticIconNameDelete","abstract":"<p>Static icon delete/remove - trash</p>"},"Constants.html#/c:@SDLStaticIconNameDestination":{"name":"SDLStaticIconNameDestination","abstract":"<p>Static icon destination</p>"},"Constants.html#/c:@SDLStaticIconNameDestinationFerryAhead":{"name":"SDLStaticIconNameDestinationFerryAhead","abstract":"<p>Static icon destination ferry ahead</p>"},"Constants.html#/c:@SDLStaticIconNameEbookmark":{"name":"SDLStaticIconNameEbookmark","abstract":"<p>Static icon ebookmark (e.g. message, feed)</p>"},"Constants.html#/c:@SDLStaticIconNameEmpty":{"name":"SDLStaticIconNameEmpty","abstract":"<p>Static icon empty (i.e. no image)</p>"},"Constants.html#/c:@SDLStaticIconNameEndCall":{"name":"SDLStaticIconNameEndCall","abstract":"<p>Static icon end call / reject call</p>"},"Constants.html#/c:@SDLStaticIconNameFail":{"name":"SDLStaticIconNameFail","abstract":"<p>Static icon fail / X</p>"},"Constants.html#/c:@SDLStaticIconNameFastForward30Secs":{"name":"SDLStaticIconNameFastForward30Secs","abstract":"<p>Static icon fast forward 30 secs</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteHeart":{"name":"SDLStaticIconNameFavoriteHeart","abstract":"<p>Static icon favorite / heart</p>"},"Constants.html#/c:@SDLStaticIconNameFavoriteStar":{"name":"SDLStaticIconNameFavoriteStar","abstract":"<p>Static icon favorite / star</p>"},"Constants.html#/c:@SDLStaticIconNameFaxNumber":{"name":"SDLStaticIconNameFaxNumber","abstract":"<p>Static icon fax number</p>"},"Constants.html#/c:@SDLStaticIconNameFilename":{"name":"SDLStaticIconNameFilename","abstract":"<p>Static icon filename</p>"},"Constants.html#/c:@SDLStaticIconNameFilter":{"name":"SDLStaticIconNameFilter","abstract":"<p>Static icon filter / search</p>"},"Constants.html#/c:@SDLStaticIconNameFolder":{"name":"SDLStaticIconNameFolder","abstract":"<p>Static icon folder</p>"},"Constants.html#/c:@SDLStaticIconNameFuelPrices":{"name":"SDLStaticIconNameFuelPrices","abstract":"<p>Static icon fuel prices</p>"},"Constants.html#/c:@SDLStaticIconNameFullMap":{"name":"SDLStaticIconNameFullMap","abstract":"<p>Static icon full map</p>"},"Constants.html#/c:@SDLStaticIconNameGenericPhoneNumber":{"name":"SDLStaticIconNameGenericPhoneNumber","abstract":"<p>Static icon generic phone number</p>"},"Constants.html#/c:@SDLStaticIconNameGenre":{"name":"SDLStaticIconNameGenre","abstract":"<p>Static icon genre</p>"},"Constants.html#/c:@SDLStaticIconNameGlobalKeyboard":{"name":"SDLStaticIconNameGlobalKeyboard","abstract":"<p>Static icon global keyboard</p>"},"Constants.html#/c:@SDLStaticIconNameHighwayExitInformation":{"name":"SDLStaticIconNameHighwayExitInformation","abstract":"<p>Static icon highway exit information</p>"},"Constants.html#/c:@SDLStaticIconNameHomePhoneNumber":{"name":"SDLStaticIconNameHomePhoneNumber","abstract":"<p>Static icon home phone number</p>"},"Constants.html#/c:@SDLStaticIconNameHyperlink":{"name":"SDLStaticIconNameHyperlink","abstract":"<p>Static icon hyperlink</p>"},"Constants.html#/c:@SDLStaticIconNameID3TagUnknown":{"name":"SDLStaticIconNameID3TagUnknown","abstract":"<p>Static icon ID3 tag unknown</p>"},"Constants.html#/c:@SDLStaticIconNameIncomingCalls":{"name":"SDLStaticIconNameIncomingCalls","abstract":"<p>Static icon incoming calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNameInformation":{"name":"SDLStaticIconNameInformation","abstract":"<p>Static icon information</p>"},"Constants.html#/c:@SDLStaticIconNameIPodMediaSource":{"name":"SDLStaticIconNameIPodMediaSource","abstract":"<p>Static icon IPOD media source</p>"},"Constants.html#/c:@SDLStaticIconNameJoinCalls":{"name":"SDLStaticIconNameJoinCalls","abstract":"<p>Static icon join calls</p>"},"Constants.html#/c:@SDLStaticIconNameKeepLeft":{"name":"SDLStaticIconNameKeepLeft","abstract":"<p>Static icon keep left</p>"},"Constants.html#/c:@SDLStaticIconNameKeepRight":{"name":"SDLStaticIconNameKeepRight","abstract":"<p>Static icon keep right</p>"},"Constants.html#/c:@SDLStaticIconNameKey":{"name":"SDLStaticIconNameKey","abstract":"<p>Static icon key / keycode</p>"},"Constants.html#/c:@SDLStaticIconNameLeft":{"name":"SDLStaticIconNameLeft","abstract":"<p>Static icon left</p>"},"Constants.html#/c:@SDLStaticIconNameLeftArrow":{"name":"SDLStaticIconNameLeftArrow","abstract":"<p>Static icon left arrow / back</p>"},"Constants.html#/c:@SDLStaticIconNameLeftExit":{"name":"SDLStaticIconNameLeftExit","abstract":"<p>Static icon left exit</p>"},"Constants.html#/c:@SDLStaticIconNameLineInAudioSource":{"name":"SDLStaticIconNameLineInAudioSource","abstract":"<p>Static icon LINE IN audio source</p>"},"Constants.html#/c:@SDLStaticIconNameLocked":{"name":"SDLStaticIconNameLocked","abstract":"<p>Static icon locked</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlLeftArrow":{"name":"SDLStaticIconNameMediaControlLeftArrow","abstract":"<p>Static icon media control - left arrow</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRecording":{"name":"SDLStaticIconNameMediaControlRecording","abstract":"<p>Static icon media control - recording</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlRightArrow":{"name":"SDLStaticIconNameMediaControlRightArrow","abstract":"<p>Static icon media control - right arrow</p>"},"Constants.html#/c:@SDLStaticIconNameMediaControlStop":{"name":"SDLStaticIconNameMediaControlStop","abstract":"<p>Static icon media control - stop (e.g. streaming)</p>"},"Constants.html#/c:@SDLStaticIconNameMicrophone":{"name":"SDLStaticIconNameMicrophone","abstract":"<p>Static icon microphone</p>"},"Constants.html#/c:@SDLStaticIconNameMissedCalls":{"name":"SDLStaticIconNameMissedCalls","abstract":"<p>Static icon missed calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNameMobilePhoneNumber":{"name":"SDLStaticIconNameMobilePhoneNumber","abstract":"<p>Static icon mobile phone number</p>"},"Constants.html#/c:@SDLStaticIconNameMoveDown":{"name":"SDLStaticIconNameMoveDown","abstract":"<p>Static icon move down / download</p>"},"Constants.html#/c:@SDLStaticIconNameMoveUp":{"name":"SDLStaticIconNameMoveUp","abstract":"<p>Static icon move up</p>"},"Constants.html#/c:@SDLStaticIconNameMP3TagArtist":{"name":"SDLStaticIconNameMP3TagArtist","abstract":"<p>Static icon MP3 tag artist</p>"},"Constants.html#/c:@SDLStaticIconNameNavigation":{"name":"SDLStaticIconNameNavigation","abstract":"<p>Static icon navigation / navigation settings</p>"},"Constants.html#/c:@SDLStaticIconNameNavigationCurrentDirection":{"name":"SDLStaticIconNameNavigationCurrentDirection","abstract":"<p>Static icon navigation current direction</p>"},"Constants.html#/c:@SDLStaticIconNameNegativeRatingThumbsDown":{"name":"SDLStaticIconNameNegativeRatingThumbsDown","abstract":"<p>Static icon negative rating - thumbs down</p>"},"Constants.html#/c:@SDLStaticIconNameNew":{"name":"SDLStaticIconNameNew","abstract":"<p>Static icon new/unread text message/email</p>"},"Constants.html#/c:@SDLStaticIconNameOfficePhoneNumber":{"name":"SDLStaticIconNameOfficePhoneNumber","abstract":"<p>Static icon office phone number / work phone number</p>"},"Constants.html#/c:@SDLStaticIconNameOpened":{"name":"SDLStaticIconNameOpened","abstract":"<p>Static icon opened/read text message/email</p>"},"Constants.html#/c:@SDLStaticIconNameOrigin":{"name":"SDLStaticIconNameOrigin","abstract":"<p>Static icon origin / nearby locale / current position</p>"},"Constants.html#/c:@SDLStaticIconNameOutgoingCalls":{"name":"SDLStaticIconNameOutgoingCalls","abstract":"<p>Static icon outgoing calls (in list of phone calls)</p>"},"Constants.html#/c:@SDLStaticIconNamePause":{"name":"SDLStaticIconNamePause","abstract":"<p>Static icon play / pause - pause active</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall1":{"name":"SDLStaticIconNamePhoneCall1","abstract":"<p>Static icon phone call 1</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneCall2":{"name":"SDLStaticIconNamePhoneCall2","abstract":"<p>Static icon phone call 2</p>"},"Constants.html#/c:@SDLStaticIconNamePhoneDevice":{"name":"SDLStaticIconNamePhoneDevice","abstract":"<p>Static icon phone device</p>"},"Constants.html#/c:@SDLStaticIconNamePhonebook":{"name":"SDLStaticIconNamePhonebook","abstract":"<p>Static icon phonebook</p>"},"Constants.html#/c:@SDLStaticIconNamePhoto":{"name":"SDLStaticIconNamePhoto","abstract":"<p>Static icon photo / picture</p>"},"Constants.html#/c:@SDLStaticIconNamePlay":{"name":"SDLStaticIconNamePlay","abstract":"<p>Static icon play / pause - play active</p>"},"Constants.html#/c:@SDLStaticIconNamePlaylist":{"name":"SDLStaticIconNamePlaylist","abstract":"<p>Static icon playlist</p>"},"Constants.html#/c:@SDLStaticIconNamePopUp":{"name":"SDLStaticIconNamePopUp","abstract":"<p>Static icon pop-up</p>"},"Constants.html#/c:@SDLStaticIconNamePositiveRatingThumbsUp":{"name":"SDLStaticIconNamePositiveRatingThumbsUp","abstract":"<p>Static icon positive rating - thumbs up</p>"},"Constants.html#/c:@SDLStaticIconNamePower":{"name":"SDLStaticIconNamePower","abstract":"<p>Static icon power</p>"},"Constants.html#/c:@SDLStaticIconNamePrimaryPhone":{"name":"SDLStaticIconNamePrimaryPhone","abstract":"<p>Static icon primary phone (favorite)</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonChecked":{"name":"SDLStaticIconNameRadioButtonChecked","abstract":"<p>Static icon radio button checked</p>"},"Constants.html#/c:@SDLStaticIconNameRadioButtonUnchecked":{"name":"SDLStaticIconNameRadioButtonUnchecked","abstract":"<p>Static icon radio button unchecked</p>"},"Constants.html#/c:@SDLStaticIconNameRecentCalls":{"name":"SDLStaticIconNameRecentCalls","abstract":"<p>Static icon recent calls / history</p>"},"Constants.html#/c:@SDLStaticIconNameRecentDestinations":{"name":"SDLStaticIconNameRecentDestinations","abstract":"<p>Static icon recent destinations</p>"},"Constants.html#/c:@SDLStaticIconNameRedo":{"name":"SDLStaticIconNameRedo","abstract":"<p>Static icon redo</p>"},"Constants.html#/c:@SDLStaticIconNameRefresh":{"name":"SDLStaticIconNameRefresh","abstract":"<p>Static icon refresh</p>"},"Constants.html#/c:@SDLStaticIconNameRemoteDiagnosticsCheckEngine":{"name":"SDLStaticIconNameRemoteDiagnosticsCheckEngine","abstract":"<p>Static icon remote diagnostics - check engine</p>"},"Constants.html#/c:@SDLStaticIconNameRendered911Assist":{"name":"SDLStaticIconNameRendered911Assist","abstract":"<p>Static icon rendered 911 assist / emergency assistance</p>"},"Constants.html#/c:@SDLStaticIconNameRepeat":{"name":"SDLStaticIconNameRepeat","abstract":"<p>Static icon repeat</p>"},"Constants.html#/c:@SDLStaticIconNameRepeatPlay":{"name":"SDLStaticIconNameRepeatPlay","abstract":"<p>Static icon repeat play</p>"},"Constants.html#/c:@SDLStaticIconNameReply":{"name":"SDLStaticIconNameReply","abstract":"<p>Static icon reply</p>"},"Constants.html#/c:@SDLStaticIconNameRewind30Secs":{"name":"SDLStaticIconNameRewind30Secs","abstract":"<p>Static icon rewind 30 secs</p>"},"Constants.html#/c:@SDLStaticIconNameRight":{"name":"SDLStaticIconNameRight","abstract":"<p>Static icon right</p>"},"Constants.html#/c:@SDLStaticIconNameRightExit":{"name":"SDLStaticIconNameRightExit","abstract":"<p>Static icon right exit</p>"},"Constants.html#/c:@SDLStaticIconNameRingtones":{"name":"SDLStaticIconNameRingtones","abstract":"<p>Static icon ringtones</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand1":{"name":"SDLStaticIconNameRoundaboutLeftHand1","abstract":"<p>Static icon roundabout left hand 1</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand2":{"name":"SDLStaticIconNameRoundaboutLeftHand2","abstract":"<p>Static icon roundabout left hand 2</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand3":{"name":"SDLStaticIconNameRoundaboutLeftHand3","abstract":"<p>Static icon roundabout left hand 3</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand4":{"name":"SDLStaticIconNameRoundaboutLeftHand4","abstract":"<p>Static icon roundabout left hand 4</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand5":{"name":"SDLStaticIconNameRoundaboutLeftHand5","abstract":"<p>Static icon roundabout left hand 5</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand6":{"name":"SDLStaticIconNameRoundaboutLeftHand6","abstract":"<p>Static icon roundabout left hand 6</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutLeftHand7":{"name":"SDLStaticIconNameRoundaboutLeftHand7","abstract":"<p>Static icon roundabout left hand 7</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand1":{"name":"SDLStaticIconNameRoundaboutRightHand1","abstract":"<p>Static icon roundabout right hand 1</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand2":{"name":"SDLStaticIconNameRoundaboutRightHand2","abstract":"<p>Static icon roundabout right hand 2</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand3":{"name":"SDLStaticIconNameRoundaboutRightHand3","abstract":"<p>Static icon roundabout right hand 3</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand4":{"name":"SDLStaticIconNameRoundaboutRightHand4","abstract":"<p>Static icon roundabout right hand 4</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand5":{"name":"SDLStaticIconNameRoundaboutRightHand5","abstract":"<p>Static icon roundabout right hand 5</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand6":{"name":"SDLStaticIconNameRoundaboutRightHand6","abstract":"<p>Static icon roundabout right hand 6</p>"},"Constants.html#/c:@SDLStaticIconNameRoundaboutRightHand7":{"name":"SDLStaticIconNameRoundaboutRightHand7","abstract":"<p>Static icon roundabout right hand 7</p>"},"Constants.html#/c:@SDLStaticIconNameRSS":{"name":"SDLStaticIconNameRSS","abstract":"<p>Static icon RSS</p>"},"Constants.html#/c:@SDLStaticIconNameSettings":{"name":"SDLStaticIconNameSettings","abstract":"<p>Static icon settings / menu</p>"},"Constants.html#/c:@SDLStaticIconNameSharpLeft":{"name":"SDLStaticIconNameSharpLeft","abstract":"<p>Static icon sharp left</p>"},"Constants.html#/c:@SDLStaticIconNameSharpRight":{"name":"SDLStaticIconNameSharpRight","abstract":"<p>Static icon sharp right</p>"},"Constants.html#/c:@SDLStaticIconNameShow":{"name":"SDLStaticIconNameShow","abstract":"<p>Static icon show</p>"},"Constants.html#/c:@SDLStaticIconNameShufflePlay":{"name":"SDLStaticIconNameShufflePlay","abstract":"<p>Static icon shuffle play</p>"},"Constants.html#/c:@SDLStaticIconNameSkiPlaces":{"name":"SDLStaticIconNameSkiPlaces","abstract":"<p>Static icon ski places / elevation / altitude</p>"},"Constants.html#/c:@SDLStaticIconNameSlightLeft":{"name":"SDLStaticIconNameSlightLeft","abstract":"<p>Static icon slight left</p>"},"Constants.html#/c:@SDLStaticIconNameSlightRight":{"name":"SDLStaticIconNameSlightRight","abstract":"<p>Static icon slight right</p>"},"Constants.html#/c:@SDLStaticIconNameSmartphone":{"name":"SDLStaticIconNameSmartphone","abstract":"<p>Static icon smartphone</p>"},"Constants.html#/c:@SDLStaticIconNameSortList":{"name":"SDLStaticIconNameSortList","abstract":"<p>Static icon sort list</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber0":{"name":"SDLStaticIconNameSpeedDialNumbersNumber0","abstract":"<p>Static icon speed dial numbers - number 0</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber1":{"name":"SDLStaticIconNameSpeedDialNumbersNumber1","abstract":"<p>Static icon speed dial numbers - number 1</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber2":{"name":"SDLStaticIconNameSpeedDialNumbersNumber2","abstract":"<p>Static icon speed dial numbers - number 2</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber3":{"name":"SDLStaticIconNameSpeedDialNumbersNumber3","abstract":"<p>Static icon speed dial numbers - number 3</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber4":{"name":"SDLStaticIconNameSpeedDialNumbersNumber4","abstract":"<p>Static icon speed dial numbers - number 4</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber5":{"name":"SDLStaticIconNameSpeedDialNumbersNumber5","abstract":"<p>Static icon speed dial numbers - number 5</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber6":{"name":"SDLStaticIconNameSpeedDialNumbersNumber6","abstract":"<p>Static icon speed dial numbers - number 6</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber7":{"name":"SDLStaticIconNameSpeedDialNumbersNumber7","abstract":"<p>Static icon speed dial numbers - number 7</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber8":{"name":"SDLStaticIconNameSpeedDialNumbersNumber8","abstract":"<p>Static icon speed dial numbers - number 8</p>"},"Constants.html#/c:@SDLStaticIconNameSpeedDialNumbersNumber9":{"name":"SDLStaticIconNameSpeedDialNumbersNumber9","abstract":"<p>Static icon speed dial numbers - number 9</p>"},"Constants.html#/c:@SDLStaticIconNameSuccess":{"name":"SDLStaticIconNameSuccess","abstract":"<p>Static icon success / check</p>"},"Constants.html#/c:@SDLStaticIconNameTrackTitle":{"name":"SDLStaticIconNameTrackTitle","abstract":"<p>Static icon track title / song title</p>"},"Constants.html#/c:@SDLStaticIconNameTrafficReport":{"name":"SDLStaticIconNameTrafficReport","abstract":"<p>Static icon traffic report</p>"},"Constants.html#/c:@SDLStaticIconNameTurnList":{"name":"SDLStaticIconNameTurnList","abstract":"<p>Static icon turn list</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnLeftTraffic":{"name":"SDLStaticIconNameUTurnLeftTraffic","abstract":"<p>Static icon u-turn left traffic</p>"},"Constants.html#/c:@SDLStaticIconNameUTurnRightTraffic":{"name":"SDLStaticIconNameUTurnRightTraffic","abstract":"<p>Static icon u-turn right traffic</p>"},"Constants.html#/c:@SDLStaticIconNameUndo":{"name":"SDLStaticIconNameUndo","abstract":"<p>Static icon undo</p>"},"Constants.html#/c:@SDLStaticIconNameUnlocked":{"name":"SDLStaticIconNameUnlocked","abstract":"<p>Static icon unlocked</p>"},"Constants.html#/c:@SDLStaticIconNameUSBMediaAudioSource":{"name":"SDLStaticIconNameUSBMediaAudioSource","abstract":"<p>Static icon USB media audio source</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo1":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo1","abstract":"<p>Static icon voice control scrollbar - list item no. 1</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo2":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo2","abstract":"<p>Static icon voice control scrollbar - list item no. 2</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo3":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo3","abstract":"<p>Static icon voice control scrollbar - list item no. 3</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceControlScrollbarListItemNo4":{"name":"SDLStaticIconNameVoiceControlScrollbarListItemNo4","abstract":"<p>Static icon voice control scrollbar - list item no. 4</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionFailed":{"name":"SDLStaticIconNameVoiceRecognitionFailed","abstract":"<p>Static icon voice recognition - failed</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionPause":{"name":"SDLStaticIconNameVoiceRecognitionPause","abstract":"<p>Static icon voice recognition - pause</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSuccessful":{"name":"SDLStaticIconNameVoiceRecognitionSuccessful","abstract":"<p>Static icon voice recognition - successful</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemActive":{"name":"SDLStaticIconNameVoiceRecognitionSystemActive","abstract":"<p>Static icon voice recognition - system active</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionSystemListening":{"name":"SDLStaticIconNameVoiceRecognitionSystemListening","abstract":"<p>Static icon voice recognition - system listening</p>"},"Constants.html#/c:@SDLStaticIconNameVoiceRecognitionTryAgain":{"name":"SDLStaticIconNameVoiceRecognitionTryAgain","abstract":"<p>Static icon voice recognition - try again</p>"},"Constants.html#/c:@SDLStaticIconNameWarning":{"name":"SDLStaticIconNameWarning","abstract":"<p>Static icon warning / safety alert</p>"},"Constants.html#/c:@SDLStaticIconNameWeather":{"name":"SDLStaticIconNameWeather","abstract":"<p>Static icon weather</p>"},"Constants.html#/c:@SDLStaticIconNameWifiFull":{"name":"SDLStaticIconNameWifiFull","abstract":"<p>Static icon wifi full</p>"},"Constants.html#/c:@SDLStaticIconNameZoomIn":{"name":"SDLStaticIconNameZoomIn","abstract":"<p>Static icon zoom in</p>"},"Constants.html#/c:@SDLStaticIconNameZoomOut":{"name":"SDLStaticIconNameZoomOut","abstract":"<p>Static icon zoom out</p>"},"Constants.html#/c:@SDLVideoStreamDidStartNotification":{"name":"SDLVideoStreamDidStartNotification","abstract":"<p>Name of video stream start notification</p>"},"Constants.html#/c:@SDLVideoStreamDidStopNotification":{"name":"SDLVideoStreamDidStopNotification","abstract":"<p>Name of video stream stop notification</p>"},"Constants.html#/c:@SDLVideoStreamSuspendedNotification":{"name":"SDLVideoStreamSuspendedNotification","abstract":"<p>Name of video stream suspended notification</p>"},"Constants.html#/c:@SDLAudioStreamDidStartNotification":{"name":"SDLAudioStreamDidStartNotification","abstract":"<p>Name of audio stream start notification</p>"},"Constants.html#/c:@SDLAudioStreamDidStopNotification":{"name":"SDLAudioStreamDidStopNotification","abstract":"<p>Name of audio stream stop notification</p>"},"Constants.html#/c:@SDLLockScreenManagerWillPresentLockScreenViewController":{"name":"SDLLockScreenManagerWillPresentLockScreenViewController","abstract":"<p>Lockscreen will present notification</p>"},"Constants.html#/c:@SDLLockScreenManagerDidPresentLockScreenViewController":{"name":"SDLLockScreenManagerDidPresentLockScreenViewController","abstract":"<p>Lockscreen did present notification</p>"},"Constants.html#/c:@SDLLockScreenManagerWillDismissLockScreenViewController":{"name":"SDLLockScreenManagerWillDismissLockScreenViewController","abstract":"<p>Lockscreen will dismiss notification</p>"},"Constants.html#/c:@SDLLockScreenManagerDidDismissLockScreenViewController":{"name":"SDLLockScreenManagerDidDismissLockScreenViewController","abstract":"<p>Lockscreen did dismiss notification</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStopped":{"name":"SDLVideoStreamManagerStateStopped","abstract":"<p>Streaming state stopped</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateStarting":{"name":"SDLVideoStreamManagerStateStarting","abstract":"<p>Streaming state starting</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateReady":{"name":"SDLVideoStreamManagerStateReady","abstract":"<p>Streaming state ready</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateSuspended":{"name":"SDLVideoStreamManagerStateSuspended","abstract":"<p>Streaming state suspended</p>"},"Constants.html#/c:@SDLVideoStreamManagerStateShuttingDown":{"name":"SDLVideoStreamManagerStateShuttingDown","abstract":"<p>Streaming state shutting down</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStopped":{"name":"SDLAudioStreamManagerStateStopped","abstract":"<p>Audio state stopped</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateStarting":{"name":"SDLAudioStreamManagerStateStarting","abstract":"<p>Audio state starting</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateReady":{"name":"SDLAudioStreamManagerStateReady","abstract":"<p>Audio state ready</p>"},"Constants.html#/c:@SDLAudioStreamManagerStateShuttingDown":{"name":"SDLAudioStreamManagerStateShuttingDown","abstract":"<p>Audio state shutting down</p>"},"Constants.html#/c:@SDLAppStateInactive":{"name":"SDLAppStateInactive","abstract":"<p>App state inactive</p>"},"Constants.html#/c:@SDLAppStateActive":{"name":"SDLAppStateActive","abstract":"<p>App state active</p>"},"Constants.html#/c:@SDLSupportedSeatDriver":{"name":"SDLSupportedSeatDriver","abstract":"<p>Save current seat positions and settings to seat memory.</p>"},"Constants.html#/c:@SDLSupportedSeatFrontPassenger":{"name":"SDLSupportedSeatFrontPassenger","abstract":"<p>Restore / apply the seat memory settings to the current seat.</p>"},"Constants.html#/c:@SDLSystemActionDefaultAction":{"name":"SDLSystemActionDefaultAction","abstract":"<p>A default soft button action</p>"},"Constants.html#/c:@SDLSystemActionStealFocus":{"name":"SDLSystemActionStealFocus","abstract":"<p>An action causing your app to steal HMI focus</p>"},"Constants.html#/c:@SDLSystemActionKeepContext":{"name":"SDLSystemActionKeepContext","abstract":"<p>An action causing you to keep context</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeAppServices":{"name":"SDLSystemCapabilityTypeAppServices","abstract":"<p>The app services capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeNavigation":{"name":"SDLSystemCapabilityTypeNavigation","abstract":"<p>The navigation capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypePhoneCall":{"name":"SDLSystemCapabilityTypePhoneCall","abstract":"<p>The phone call capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeVideoStreaming":{"name":"SDLSystemCapabilityTypeVideoStreaming","abstract":"<p>The video streaming capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeRemoteControl":{"name":"SDLSystemCapabilityTypeRemoteControl","abstract":"<p>The remote control capability</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeSeatLocation":{"name":"SDLSystemCapabilityTypeSeatLocation","abstract":"<p>Contains information about the locations of each seat</p>"},"Constants.html#/c:@SDLSystemCapabilityTypeDisplays":{"name":"SDLSystemCapabilityTypeDisplays","abstract":"<p>The Display type capability</p>"},"Constants.html#/c:@SDLSystemContextMain":{"name":"SDLSystemContextMain","abstract":"<p>No user interaction (user-initiated or app-initiated) is in progress.</p>"},"Constants.html#/c:@SDLSystemContextVoiceRecognitionSession":{"name":"SDLSystemContextVoiceRecognitionSession","abstract":"<p>VR-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextMenu":{"name":"SDLSystemContextMenu","abstract":"<p>Menu-oriented, user-initiated or app-initiated interaction is in-progress.</p>"},"Constants.html#/c:@SDLSystemContextHMIObscured":{"name":"SDLSystemContextHMIObscured","abstract":"<p>The app&rsquo;s display HMI is currently being obscured by either a system or other app&rsquo;s overlay.</p>"},"Constants.html#/c:@SDLSystemContextAlert":{"name":"SDLSystemContextAlert","abstract":"<p>Broadcast only to whichever app has an alert currently being displayed.</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequest":{"name":"SDLTBTStateRouteUpdateRequest","abstract":"<p>The route should be updated</p>"},"Constants.html#/c:@SDLTBTStateRouteAccepted":{"name":"SDLTBTStateRouteAccepted","abstract":"<p>The route is accepted</p>"},"Constants.html#/c:@SDLTBTStateRouteRefused":{"name":"SDLTBTStateRouteRefused","abstract":"<p>The route is refused</p>"},"Constants.html#/c:@SDLTBTStateRouteCancelled":{"name":"SDLTBTStateRouteCancelled","abstract":"<p>The route is cancelled</p>"},"Constants.html#/c:@SDLTBTStateETARequest":{"name":"SDLTBTStateETARequest","abstract":"<p>The route should update its Estimated Time of Arrival</p>"},"Constants.html#/c:@SDLTBTStateNextTurnRequest":{"name":"SDLTBTStateNextTurnRequest","abstract":"<p>The route should update its next turn</p>"},"Constants.html#/c:@SDLTBTStateRouteStatusRequest":{"name":"SDLTBTStateRouteStatusRequest","abstract":"<p>The route should update its status</p>"},"Constants.html#/c:@SDLTBTStateRouteSummaryRequest":{"name":"SDLTBTStateRouteSummaryRequest","abstract":"<p>The route update its summary</p>"},"Constants.html#/c:@SDLTBTStateTripStatusRequest":{"name":"SDLTBTStateTripStatusRequest","abstract":"<p>The route should update the trip&rsquo;s status</p>"},"Constants.html#/c:@SDLTBTStateRouteUpdateRequestTimeout":{"name":"SDLTBTStateRouteUpdateRequestTimeout","abstract":"<p>The route update timed out</p>"},"Constants.html#/c:@SDLTPMSUnknown":{"name":"SDLTPMSUnknown","abstract":"<p>If set the status of the tire is not known.</p>"},"Constants.html#/c:@SDLTPMSSystemFault":{"name":"SDLTPMSSystemFault","abstract":"<p>TPMS does not function.</p>"},"Constants.html#/c:@SDLTPMSSensorFault":{"name":"SDLTPMSSensorFault","abstract":"<p>The sensor of the tire does not function.</p>"},"Constants.html#/c:@SDLTPMSLow":{"name":"SDLTPMSLow","abstract":"<p>TPMS is reporting a low tire pressure for the tire.</p>"},"Constants.html#/c:@SDLTPMSSystemActive":{"name":"SDLTPMSSystemActive","abstract":"<p>TPMS is active and the tire pressure is monitored.</p>"},"Constants.html#/c:@SDLTPMSTrain":{"name":"SDLTPMSTrain","abstract":"<p>TPMS is reporting that the tire must be trained.</p>"},"Constants.html#/c:@SDLTPMSTrainingComplete":{"name":"SDLTPMSTrainingComplete","abstract":"<p>TPMS reports the training for the tire is completed.</p>"},"Constants.html#/c:@SDLTPMSNotTrained":{"name":"SDLTPMSNotTrained","abstract":"<p>TPMS reports the tire is not trained.</p>"},"Constants.html#/c:@SDLTemperatureUnitCelsius":{"name":"SDLTemperatureUnitCelsius","abstract":"<p>Reflects the current HMI setting for temperature unit in Celsius</p>"},"Constants.html#/c:@SDLTemperatureUnitFahrenheit":{"name":"SDLTemperatureUnitFahrenheit","abstract":"<p>Reflects the current HMI setting for temperature unit in Fahrenheit</p>"},"Constants.html#/c:@SDLTextAlignmentLeft":{"name":"SDLTextAlignmentLeft","abstract":"<p>Text aligned left.</p>"},"Constants.html#/c:@SDLTextAlignmentRight":{"name":"SDLTextAlignmentRight","abstract":"<p>Text aligned right.</p>"},"Constants.html#/c:@SDLTextAlignmentCenter":{"name":"SDLTextAlignmentCenter","abstract":"<p>Text aligned centered.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField1":{"name":"SDLTextFieldNameMainField1","abstract":"<p>The first line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField2":{"name":"SDLTextFieldNameMainField2","abstract":"<p>The second line of the first set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField3":{"name":"SDLTextFieldNameMainField3","abstract":"<p>The first line of the second set of main fields of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMainField4":{"name":"SDLTextFieldNameMainField4"},"Constants.html#/c:@SDLTextFieldNameTemplateTitle":{"name":"SDLTextFieldNameTemplateTitle","abstract":"<p>The title line of the persistent display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameStatusBar":{"name":"SDLTextFieldNameStatusBar","abstract":"<p>The status bar on the NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaClock":{"name":"SDLTextFieldNameMediaClock","abstract":"<p>Text value for MediaClock field. Must be properly formatted according to MediaClockFormat. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameMediaTrack":{"name":"SDLTextFieldNameMediaTrack","abstract":"<p>The track field of NGN type ACMs. This field is only available for media applications on a NGN display. Applies to SDLShow.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText1":{"name":"SDLTextFieldNameAlertText1","abstract":"<p>The first line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText2":{"name":"SDLTextFieldNameAlertText2","abstract":"<p>The second line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameAlertText3":{"name":"SDLTextFieldNameAlertText3","abstract":"<p>The third line of the alert text field. Applies to SDLAlert.</p>"},"Constants.html#/c:@SDLTextFieldNameScrollableMessageBody":{"name":"SDLTextFieldNameScrollableMessageBody","abstract":"<p>Long form body of text that can include newlines and tabs. Applies to SDLScrollableMessage.</p>"},"Constants.html#/c:@SDLTextFieldNameInitialInteractionText":{"name":"SDLTextFieldNameInitialInteractionText","abstract":"<p>First line suggestion for a user response (in the case of VR enabled interaction).</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText1":{"name":"SDLTextFieldNameNavigationText1","abstract":"<p>First line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameNavigationText2":{"name":"SDLTextFieldNameNavigationText2","abstract":"<p>Second line of navigation text.</p>"},"Constants.html#/c:@SDLTextFieldNameETA":{"name":"SDLTextFieldNameETA","abstract":"<p>Estimated Time of Arrival time for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameTotalDistance":{"name":"SDLTextFieldNameTotalDistance","abstract":"<p>Total distance to destination for navigation.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText1":{"name":"SDLTextFieldNameAudioPassThruDisplayText1","abstract":"<p>First line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameAudioPassThruDisplayText2":{"name":"SDLTextFieldNameAudioPassThruDisplayText2","abstract":"<p>Second line of text for audio pass thru.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderHeader":{"name":"SDLTextFieldNameSliderHeader","abstract":"<p>Header text for slider.</p>"},"Constants.html#/c:@SDLTextFieldNameSliderFooter":{"name":"SDLTextFieldNameSliderFooter","abstract":"<p>Footer text for slider</p>"},"Constants.html#/c:@SDLTextFieldNameMenuName":{"name":"SDLTextFieldNameMenuName","abstract":"<p>Primary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameSecondaryText":{"name":"SDLTextFieldNameSecondaryText","abstract":"<p>Secondary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameTertiaryText":{"name":"SDLTextFieldNameTertiaryText","abstract":"<p>Tertiary text for SDLChoice</p>"},"Constants.html#/c:@SDLTextFieldNameMenuTitle":{"name":"SDLTextFieldNameMenuTitle","abstract":"<p>Optional text to label an app menu button (for certain touchscreen platforms)</p>"},"Constants.html#/c:@SDLTextFieldNameLocationName":{"name":"SDLTextFieldNameLocationName","abstract":"<p>Optional name / title of intended location for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameLocationDescription":{"name":"SDLTextFieldNameLocationDescription","abstract":"<p>Optional description of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNameAddressLines":{"name":"SDLTextFieldNameAddressLines","abstract":"<p>Optional location address (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTextFieldNamePhoneNumber":{"name":"SDLTextFieldNamePhoneNumber","abstract":"<p>Optional hone number of intended location / establishment (if applicable) for SDLSendLocation</p>"},"Constants.html#/c:@SDLTimerModeUp":{"name":"SDLTimerModeUp","abstract":"<p>The timer should count up.</p>"},"Constants.html#/c:@SDLTimerModeDown":{"name":"SDLTimerModeDown","abstract":"<p>The timer should count down.</p>"},"Constants.html#/c:@SDLTimerModeNone":{"name":"SDLTimerModeNone","abstract":"<p>The timer should not count.</p>"},"Constants.html#/c:@SDLTouchTypeBegin":{"name":"SDLTouchTypeBegin","abstract":"<p>The touch is the beginning of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeMove":{"name":"SDLTouchTypeMove","abstract":"<p>The touch is the movement of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeEnd":{"name":"SDLTouchTypeEnd","abstract":"<p>The touch is the ending of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTouchTypeCancel":{"name":"SDLTouchTypeCancel","abstract":"<p>The touch is the cancellation of a finger pressed on the display.</p>"},"Constants.html#/c:@SDLTriggerSourceMenu":{"name":"SDLTriggerSourceMenu","abstract":"<p>Selection made via menu</p>"},"Constants.html#/c:@SDLTriggerSourceVoiceRecognition":{"name":"SDLTriggerSourceVoiceRecognition","abstract":"<p>Selection made via Voice session</p>"},"Constants.html#/c:@SDLTriggerSourceKeyboard":{"name":"SDLTriggerSourceKeyboard","abstract":"<p>Selection made via Keyboard</p>"},"Constants.html#/c:@SDLTurnSignalOff":{"name":"SDLTurnSignalOff","abstract":"<p>Turn signal is OFF</p>"},"Constants.html#/c:@SDLTurnSignalLeft":{"name":"SDLTurnSignalLeft","abstract":"<p>Left turn signal is on</p>"},"Constants.html#/c:@SDLTurnSignalRight":{"name":"SDLTurnSignalRight","abstract":"<p>Right turn signal is on</p>"},"Constants.html#/c:@SDLTurnSignalBoth":{"name":"SDLTurnSignalBoth","abstract":"<p>Both signals (left and right) are on</p>"},"Constants.html#/c:@SDLUpdateModeCountUp":{"name":"SDLUpdateModeCountUp","abstract":"<p>Starts the media clock timer counting upward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModeCountDown":{"name":"SDLUpdateModeCountDown","abstract":"<p>Starts the media clock timer counting downward, in increments of 1 second.</p>"},"Constants.html#/c:@SDLUpdateModePause":{"name":"SDLUpdateModePause","abstract":"<p>Pauses the media clock timer.</p>"},"Constants.html#/c:@SDLUpdateModeResume":{"name":"SDLUpdateModeResume","abstract":"<p>Resumes the media clock timer. The timer resumes counting in whatever mode was in effect before pausing (i.e. COUNTUP or COUNTDOWN).</p>"},"Constants.html#/c:@SDLUpdateModeClear":{"name":"SDLUpdateModeClear","abstract":"<p>Clear the media clock timer.</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveNotConfirmed","abstract":"<p>Inactive not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusInactiveConfirmed":{"name":"SDLVehicleDataActiveStatusInactiveConfirmed","abstract":"<p>Inactive confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveNotConfirmed":{"name":"SDLVehicleDataActiveStatusActiveNotConfirmed","abstract":"<p>Active not confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusActiveConfirmed":{"name":"SDLVehicleDataActiveStatusActiveConfirmed","abstract":"<p>Active confirmed</p>"},"Constants.html#/c:@SDLVehicleDataActiveStatusFault":{"name":"SDLVehicleDataActiveStatusFault","abstract":"<p>Fault</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNoEvent":{"name":"SDLVehicleDataEventStatusNoEvent","abstract":"<p>No event</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNo":{"name":"SDLVehicleDataEventStatusNo","abstract":"<p>The event is a No status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusYes":{"name":"SDLVehicleDataEventStatusYes","abstract":"<p>The event is a Yes status</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusNotSupported":{"name":"SDLVehicleDataEventStatusNotSupported","abstract":"<p>Vehicle data event is not supported</p>"},"Constants.html#/c:@SDLVehicleDataEventStatusFault":{"name":"SDLVehicleDataEventStatusFault","abstract":"<p>The event is a Fault status</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotSupported":{"name":"SDLVehicleDataNotificationStatusNotSupported","abstract":"<p>The vehicle data notification status is not supported</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNormal":{"name":"SDLVehicleDataNotificationStatusNormal","abstract":"<p>The vehicle data notification status is normal</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusActive":{"name":"SDLVehicleDataNotificationStatusActive","abstract":"<p>The vehicle data notification status is active</p>"},"Constants.html#/c:@SDLVehicleDataNotificationStatusNotUsed":{"name":"SDLVehicleDataNotificationStatusNotUsed","abstract":"<p>The vehicle data notification status is not used</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeSuccess":{"name":"SDLVehicleDataResultCodeSuccess","abstract":"<p>Individual vehicle data item / DTC / DID request or subscription successful</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeTruncatedData":{"name":"SDLVehicleDataResultCodeTruncatedData","abstract":"<p>DTC / DID request successful, however, not all active DTCs or full contents of DID location available</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDisallowed":{"name":"SDLVehicleDataResultCodeDisallowed","abstract":"<p>This vehicle data item is not allowed for this app by SDL</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeUserDisallowed":{"name":"SDLVehicleDataResultCodeUserDisallowed","abstract":"<p>The user has not granted access to this type of vehicle data item at this time</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeInvalidId":{"name":"SDLVehicleDataResultCodeInvalidId","abstract":"<p>The ECU ID referenced is not a valid ID on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeVehicleDataNotAvailable":{"name":"SDLVehicleDataResultCodeVehicleDataNotAvailable","abstract":"<p>The requested vehicle data item / DTC / DID is not currently available or responding on the bus / system</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataAlreadySubscribed":{"name":"SDLVehicleDataResultCodeDataAlreadySubscribed","abstract":"<p>The vehicle data item is already subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeDataNotSubscribed":{"name":"SDLVehicleDataResultCodeDataNotSubscribed","abstract":"<p>The vehicle data item cannot be unsubscribed because it is not currently subscribed</p>"},"Constants.html#/c:@SDLVehicleDataResultCodeIgnored":{"name":"SDLVehicleDataResultCodeIgnored","abstract":"<p>The request for this item is ignored because it is already in progress</p>"},"Constants.html#/c:@SDLVehicleDataStatusNoDataExists":{"name":"SDLVehicleDataStatusNoDataExists","abstract":"<p>No data avaliable</p>"},"Constants.html#/c:@SDLVehicleDataStatusOff":{"name":"SDLVehicleDataStatusOff","abstract":"<p>The status is Off</p>"},"Constants.html#/c:@SDLVehicleDataStatusOn":{"name":"SDLVehicleDataStatusOn","abstract":"<p>The status is On</p>"},"Constants.html#/c:@SDLVehicleDataTypeGPS":{"name":"SDLVehicleDataTypeGPS","abstract":"<p>GPS vehicle data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSpeed":{"name":"SDLVehicleDataTypeSpeed","abstract":"<p>Vehicle speed data</p>"},"Constants.html#/c:@SDLVehicleDataTypeRPM":{"name":"SDLVehicleDataTypeRPM","abstract":"<p>Vehicle RPM data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevel":{"name":"SDLVehicleDataTypeFuelLevel","abstract":"<p>Vehicle fuel level data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelLevelState":{"name":"SDLVehicleDataTypeFuelLevelState","abstract":"<p>Vehicle fuel level state data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelConsumption":{"name":"SDLVehicleDataTypeFuelConsumption","abstract":"<p>Vehicle fuel consumption data</p>"},"Constants.html#/c:@SDLVehicleDataTypeExternalTemperature":{"name":"SDLVehicleDataTypeExternalTemperature","abstract":"<p>Vehicle external temperature data</p>"},"Constants.html#/c:@SDLVehicleDataTypeVIN":{"name":"SDLVehicleDataTypeVIN","abstract":"<p>Vehicle VIN data</p>"},"Constants.html#/c:@SDLVehicleDataTypePRNDL":{"name":"SDLVehicleDataTypePRNDL","abstract":"<p>Vehicle PRNDL data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTirePressure":{"name":"SDLVehicleDataTypeTirePressure","abstract":"<p>Vehicle tire pressure data</p>"},"Constants.html#/c:@SDLVehicleDataTypeOdometer":{"name":"SDLVehicleDataTypeOdometer","abstract":"<p>Vehicle odometer data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBeltStatus":{"name":"SDLVehicleDataTypeBeltStatus","abstract":"<p>Vehicle belt status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBodyInfo":{"name":"SDLVehicleDataTypeBodyInfo","abstract":"<p>Vehicle body info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeDeviceStatus":{"name":"SDLVehicleDataTypeDeviceStatus","abstract":"<p>Vehicle device status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeECallInfo":{"name":"SDLVehicleDataTypeECallInfo","abstract":"<p>Vehicle emergency call info data</p>"},"Constants.html#/c:@SDLVehicleDataTypeFuelRange":{"name":"SDLVehicleDataTypeFuelRange","abstract":"<p>Vehicle fuel range data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAirbagStatus":{"name":"SDLVehicleDataTypeAirbagStatus","abstract":"<p>Vehicle airbag status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEmergencyEvent":{"name":"SDLVehicleDataTypeEmergencyEvent","abstract":"<p>Vehicle emergency event info</p>"},"Constants.html#/c:@SDLVehicleDataTypeClusterModeStatus":{"name":"SDLVehicleDataTypeClusterModeStatus","abstract":"<p>Vehicle cluster mode status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeMyKey":{"name":"SDLVehicleDataTypeMyKey","abstract":"<p>Vehicle MyKey data</p>"},"Constants.html#/c:@SDLVehicleDataTypeBraking":{"name":"SDLVehicleDataTypeBraking","abstract":"<p>Vehicle braking data</p>"},"Constants.html#/c:@SDLVehicleDataTypeWiperStatus":{"name":"SDLVehicleDataTypeWiperStatus","abstract":"<p>Vehicle wiper status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeHeadlampStatus":{"name":"SDLVehicleDataTypeHeadlampStatus","abstract":"<p>Vehicle headlamp status</p>"},"Constants.html#/c:@SDLVehicleDataTypeBatteryVoltage":{"name":"SDLVehicleDataTypeBatteryVoltage","abstract":"<p>Vehicle battery voltage data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineOilLife":{"name":"SDLVehicleDataTypeEngineOilLife","abstract":"<p>Vehicle engine oil life data</p>"},"Constants.html#/c:@SDLVehicleDataTypeEngineTorque":{"name":"SDLVehicleDataTypeEngineTorque","abstract":"<p>Vehicle engine torque data</p>"},"Constants.html#/c:@SDLVehicleDataTypeAccelerationPedal":{"name":"SDLVehicleDataTypeAccelerationPedal","abstract":"<p>Vehicle accleration pedal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeSteeringWheel":{"name":"SDLVehicleDataTypeSteeringWheel","abstract":"<p>Vehicle steering wheel data</p>"},"Constants.html#/c:@SDLVehicleDataTypeElectronicParkBrakeStatus":{"name":"SDLVehicleDataTypeElectronicParkBrakeStatus","abstract":"<p>Vehicle electronic parking brake status data</p>"},"Constants.html#/c:@SDLVehicleDataTypeTurnSignal":{"name":"SDLVehicleDataTypeTurnSignal","abstract":"<p>Vehicle turn signal data</p>"},"Constants.html#/c:@SDLVehicleDataTypeCloudAppVehicleID":{"name":"SDLVehicleDataTypeCloudAppVehicleID","abstract":"<p>The cloud application vehicle id. Used by cloud apps to identify a head unit</p>"},"Constants.html#/c:@SDLVehicleDataTypeOEMVehicleDataType":{"name":"SDLVehicleDataTypeOEMVehicleDataType","abstract":"<p>Custom OEM Vehicle data</p>"},"Constants.html#/c:@SDLVentilationModeUpper":{"name":"SDLVentilationModeUpper","abstract":"<p>The upper ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeLower":{"name":"SDLVentilationModeLower","abstract":"<p>The lower ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeBoth":{"name":"SDLVentilationModeBoth","abstract":"<p>The both ventilation mode</p>"},"Constants.html#/c:@SDLVentilationModeNone":{"name":"SDLVentilationModeNone","abstract":"<p>No ventilation mode</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH264":{"name":"SDLVideoStreamingCodecH264","abstract":"<p>H264</p>"},"Constants.html#/c:@SDLVideoStreamingCodecH265":{"name":"SDLVideoStreamingCodecH265","abstract":"<p>H265</p>"},"Constants.html#/c:@SDLVideoStreamingCodecTheora":{"name":"SDLVideoStreamingCodecTheora","abstract":"<p>Theora</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP8":{"name":"SDLVideoStreamingCodecVP8","abstract":"<p>VP8</p>"},"Constants.html#/c:@SDLVideoStreamingCodecVP9":{"name":"SDLVideoStreamingCodecVP9","abstract":"<p>VP9</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRAW":{"name":"SDLVideoStreamingProtocolRAW","abstract":"<p>RAW</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTP":{"name":"SDLVideoStreamingProtocolRTP","abstract":"<p>RTP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTSP":{"name":"SDLVideoStreamingProtocolRTSP","abstract":"<p>RTSP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolRTMP":{"name":"SDLVideoStreamingProtocolRTMP","abstract":"<p>RTMP</p>"},"Constants.html#/c:@SDLVideoStreamingProtocolWebM":{"name":"SDLVideoStreamingProtocolWebM","abstract":"<p>WebM</p>"},"Constants.html#/c:@SDLVideoStreamingStateStreamable":{"name":"SDLVideoStreamingStateStreamable","abstract":"<p>STREAMABLE, the current app is allowed to stream video</p>"},"Constants.html#/c:@SDLVideoStreamingStateNotStreamable":{"name":"SDLVideoStreamingStateNotStreamable","abstract":"<p>NOT_STREAMABLE, the current app is not allowed to stream video</p>"},"Constants.html#/c:@SDLVRCapabilitiesText":{"name":"SDLVRCapabilitiesText","abstract":"<p>The SDL platform is capable of recognizing spoken text in the current language.</p>"},"Constants.html#/c:@SDLWarningLightStatusOff":{"name":"SDLWarningLightStatusOff","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusOn":{"name":"SDLWarningLightStatusOn","abstract":"<p>The warning light is off</p>"},"Constants.html#/c:@SDLWarningLightStatusFlash":{"name":"SDLWarningLightStatusFlash","abstract":"<p>The warning light is flashing</p>"},"Constants.html#/c:@SDLWarningLightStatusNotUsed":{"name":"SDLWarningLightStatusNotUsed","abstract":"<p>The warning light is unused</p>"},"Constants.html#/c:@SDLWayPointTypeAll":{"name":"SDLWayPointTypeAll","abstract":"<p>All other waypoint types</p>"},"Constants.html#/c:@SDLWayPointTypeDestination":{"name":"SDLWayPointTypeDestination","abstract":"<p>The destination waypoint</p>"},"Constants.html#/c:@SDLWindowTypeMain":{"name":"SDLWindowTypeMain","abstract":"<p>This window type describes the main window on a display.</p>"},"Constants.html#/c:@SDLWindowTypeWidget":{"name":"SDLWindowTypeWidget","abstract":"<p>A widget is a small window that the app can create to provide information and soft buttons for quick app control.</p>"},"Constants.html#/c:@SDLWiperStatusOff":{"name":"SDLWiperStatusOff","abstract":"<p>Wiper is off</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticOff":{"name":"SDLWiperStatusAutomaticOff","abstract":"<p>Wiper is off automatically</p>"},"Constants.html#/c:@SDLWiperStatusOffMoving":{"name":"SDLWiperStatusOffMoving","abstract":"<p>Wiper is moving but off</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOff":{"name":"SDLWiperStatusManualIntervalOff","abstract":"<p>Wiper is off due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualIntervalOn":{"name":"SDLWiperStatusManualIntervalOn","abstract":"<p>Wiper is on due to a manual interval</p>"},"Constants.html#/c:@SDLWiperStatusManualLow":{"name":"SDLWiperStatusManualLow","abstract":"<p>Wiper is on low manually</p>"},"Constants.html#/c:@SDLWiperStatusManualHigh":{"name":"SDLWiperStatusManualHigh","abstract":"<p>Wiper is on high manually</p>"},"Constants.html#/c:@SDLWiperStatusManualFlick":{"name":"SDLWiperStatusManualFlick","abstract":"<p>Wiper is on for a single wipe manually</p>"},"Constants.html#/c:@SDLWiperStatusWash":{"name":"SDLWiperStatusWash","abstract":"<p>Wiper is in wash mode</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticLow":{"name":"SDLWiperStatusAutomaticLow","abstract":"<p>Wiper is on low automatically</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticHigh":{"name":"SDLWiperStatusAutomaticHigh","abstract":"<p>Wiper is on high automatically</p>"},"Constants.html#/c:@SDLWiperStatusCourtesyWipe":{"name":"SDLWiperStatusCourtesyWipe","abstract":"<p>Wiper is performing a courtesy wipe</p>"},"Constants.html#/c:@SDLWiperStatusAutomaticAdjust":{"name":"SDLWiperStatusAutomaticAdjust","abstract":"<p>Wiper is on automatic adjust</p>"},"Constants.html#/c:@SDLWiperStatusStalled":{"name":"SDLWiperStatusStalled","abstract":"<p>Wiper is stalled</p>"},"Constants.html#/c:@SDLWiperStatusNoDataExists":{"name":"SDLWiperStatusNoDataExists","abstract":"<p>Wiper data is not available</p>"},"Constants.html#/c:@SmartDeviceLinkVersionNumber":{"name":"SmartDeviceLinkVersionNumber","abstract":"<p>Project version number for SmartDeviceLink.</p>"},"Constants.html#/c:@SmartDeviceLinkVersionString":{"name":"SmartDeviceLinkVersionString","abstract":"<p>Project version string for SmartDeviceLink.</p>"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(im)initWithType:maximumNumberOfWindows:":{"name":"-initWithType:maximumNumberOfWindows:","abstract":"<p>Init with required parameters</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)type":{"name":"type","abstract":"<p>Type of windows available, to create.</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowTypeCapabilities.html#/c:objc(cs)SDLWindowTypeCapabilities(py)maximumNumberOfWindows":{"name":"maximumNumberOfWindows","abstract":"<p>Number of windows available, to create.</p>","parent_name":"SDLWindowTypeCapabilities"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)windowID":{"name":"windowID","abstract":"<p>The specified ID of the window. Can be set to a predefined window, or omitted for the main window on the main display.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)textFields":{"name":"textFields","abstract":"<p>A set of all fields that support text data. - see: TextField</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageFields":{"name":"imageFields","abstract":"<p>A set of all fields that support images. - see: ImageField</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>Provides information about image types supported by the system.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>A set of all window templates available on the head unit.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-window custom presets available (if any); otherwise omitted.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The number of buttons and the capabilities of each on-window button.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The number of soft buttons available on-window and the capabilities for each button.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWindowCapability.html#/c:objc(cs)SDLWindowCapability(py)menuLayoutsAvailable":{"name":"menuLayoutsAvailable","abstract":"<p>An array of available menu layouts. If this parameter is not provided, only the <code>LIST</code> layout is assumed to be available.</p>","parent_name":"SDLWindowCapability"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(im)initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:":{"name":"-initWithCurrentForecastSupported:maxMultidayForecastAmount:maxHourlyForecastAmount:maxMinutelyForecastAmount:weatherForLocationSupported:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)currentForecastSupported":{"name":"currentForecastSupported","abstract":"<p>Whether or not the current forcast is supported.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMultidayForecastAmount":{"name":"maxMultidayForecastAmount","abstract":"<p>The maximum number of day-by-day forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxHourlyForecastAmount":{"name":"maxHourlyForecastAmount","abstract":"<p>The maximum number of hour-by-hour forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)maxMinutelyForecastAmount":{"name":"maxMinutelyForecastAmount","abstract":"<p>The maximum number of minute-by-minute forecasts.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceManifest.html#/c:objc(cs)SDLWeatherServiceManifest(py)weatherForLocationSupported":{"name":"weatherForLocationSupported","abstract":"<p>Whether or not the weather for location is supported.</p>","parent_name":"SDLWeatherServiceManifest"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:":{"name":"-initWithLocation:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(im)initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:":{"name":"-initWithLocation:currentForecast:minuteForecast:hourlyForecast:multidayForecast:alerts:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)location":{"name":"location","abstract":"<p>The location.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)currentForecast":{"name":"currentForecast","abstract":"<p>The current forecast.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)minuteForecast":{"name":"minuteForecast","abstract":"<p>A minute-by-minute array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)hourlyForecast":{"name":"hourlyForecast","abstract":"<p>An hour-by-hour array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)multidayForecast":{"name":"multidayForecast","abstract":"<p>A day-by-day array of forecasts.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherServiceData.html#/c:objc(cs)SDLWeatherServiceData(py)alerts":{"name":"alerts","abstract":"<p>An array of weather alerts. This array should be ordered with the first object being the current day.</p>","parent_name":"SDLWeatherServiceData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(im)initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:":{"name":"-initWithCurrentTemperature:temperatureHigh:temperatureLow:apparentTemperature:apparentTemperatureHigh:apparentTemperatureLow:weatherSummary:time:humidity:cloudCover:moonPhase:windBearing:windGust:windSpeed:nearestStormBearing:nearestStormDistance:precipAccumulation:precipIntensity:precipProbability:precipType:visibility:weatherIcon:","abstract":"<p>Convenience init for all parameters</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The current temperature.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureHigh":{"name":"temperatureHigh","abstract":"<p>The predicted high temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)temperatureLow":{"name":"temperatureLow","abstract":"<p>The predicted low temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperature":{"name":"apparentTemperature","abstract":"<p>The apparent temperature.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureHigh":{"name":"apparentTemperatureHigh","abstract":"<p>The predicted high apparent temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)apparentTemperatureLow":{"name":"apparentTemperatureLow","abstract":"<p>The predicted low apparent temperature for the day.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherSummary":{"name":"weatherSummary","abstract":"<p>A summary of the weather.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)time":{"name":"time","abstract":"<p>The time this data refers to.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)humidity":{"name":"humidity","abstract":"<p>From 0 to 1, percentage humidity.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)cloudCover":{"name":"cloudCover","abstract":"<p>From 0 to 1, percentage cloud cover.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)moonPhase":{"name":"moonPhase","abstract":"<p>From 0 to 1, percentage of the moon seen, e.g. 0 = no moon, 0.25 = quarter moon</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windBearing":{"name":"windBearing","abstract":"<p>In degrees, true north at 0 degrees.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windGust":{"name":"windGust","abstract":"<p>In km/hr</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)windSpeed":{"name":"windSpeed","abstract":"<p>In km/hr</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormBearing":{"name":"nearestStormBearing","abstract":"<p>In degrees, true north at 0 degrees.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)nearestStormDistance":{"name":"nearestStormDistance","abstract":"<p>In km</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipAccumulation":{"name":"precipAccumulation","abstract":"<p>In cm</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipIntensity":{"name":"precipIntensity","abstract":"<p>In cm of water per hour.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipProbability":{"name":"precipProbability","abstract":"<p>From 0 to 1, percentage chance.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)precipType":{"name":"precipType","abstract":"<p>A description of the precipitation type (e.g. &ldquo;rain&rdquo;, &ldquo;snow&rdquo;, &ldquo;sleet&rdquo;, &ldquo;hail&rdquo;)</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)visibility":{"name":"visibility","abstract":"<p>In km</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherData.html#/c:objc(cs)SDLWeatherData(py)weatherIcon":{"name":"weatherIcon","abstract":"<p>The weather icon image.</p>","parent_name":"SDLWeatherData"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(im)initWithTitle:summary:expires:regions:severity:timeIssued:":{"name":"-initWithTitle:summary:expires:regions:severity:timeIssued:","abstract":"<p>Convenience init for all parameters</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)title":{"name":"title","abstract":"<p>The title of the alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)summary":{"name":"summary","abstract":"<p>A summary for the alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)expires":{"name":"expires","abstract":"<p>The date the alert expires.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)regions":{"name":"regions","abstract":"<p>Regions affected.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)severity":{"name":"severity","abstract":"<p>Severity of the weather alert.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLWeatherAlert.html#/c:objc(cs)SDLWeatherAlert(py)timeIssued":{"name":"timeIssued","abstract":"<p>The date the alert was issued.</p>","parent_name":"SDLWeatherAlert"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:":{"name":"-initWithText:image:","abstract":"<p>Convenience init to create a VR help item with the following parameters</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(im)initWithText:image:position:":{"name":"-initWithText:image:position:","abstract":"<p>Convenience init to create a VR help item with all parameters</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)text":{"name":"text","abstract":"<p>Text to display for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)image":{"name":"image","abstract":"<p>Image for VR Help item</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVRHelpItem.html#/c:objc(cs)SDLVRHelpItem(py)position":{"name":"position","abstract":"<p>Position to display item in VR Help list</p>","parent_name":"SDLVRHelpItem"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVoiceCommand.html#/c:objc(cs)SDLVoiceCommand(im)initWithVoiceCommands:handler:":{"name":"-initWithVoiceCommands:handler:","abstract":"<p>Convenience init</p>","parent_name":"SDLVoiceCommand"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)protocol":{"name":"protocol","abstract":"<p>Protocol type, see VideoStreamingProtocol</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(py)codec":{"name":"codec","abstract":"<p>Codec type, see VideoStreamingCodec</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingFormat.html#/c:objc(cs)SDLVideoStreamingFormat(im)initWithCodec:protocol:":{"name":"-initWithCodec:protocol:","abstract":"<p>Convenience init</p>","parent_name":"SDLVideoStreamingFormat"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:","abstract":"<p>Convenience init for creating a video streaming capability.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(im)initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:":{"name":"-initWithPreferredResolution:maxBitrate:supportedFormats:hapticDataSupported:diagonalScreenSize:pixelPerInch:scale:","abstract":"<p>Convenience init for creating a video streaming capability with all parameters.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)preferredResolution":{"name":"preferredResolution","abstract":"<p>The preferred resolution of a video stream for decoding and rendering on HMI</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)maxBitrate":{"name":"maxBitrate","abstract":"<p>The maximum bitrate of video stream that is supported, in kbps, optional</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>Detailed information on each format supported by this system, in its preferred order</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)hapticSpatialDataSupported":{"name":"hapticSpatialDataSupported","abstract":"<p>True if the system can utilize the haptic spatial data from the source being streamed.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)diagonalScreenSize":{"name":"diagonalScreenSize","abstract":"<p>The diagonal screen size in inches.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)pixelPerInch":{"name":"pixelPerInch","abstract":"<p>The diagonal resolution in pixels divided by the diagonal screen size in inches.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVideoStreamingCapability.html#/c:objc(cs)SDLVideoStreamingCapability(py)scale":{"name":"scale","abstract":"<p>The scaling factor the app should use to change the size of the projecting view.</p>","parent_name":"SDLVideoStreamingCapability"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)major":{"name":"major","abstract":"<p>Major version (e.g. X.0.0)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)minor":{"name":"minor","abstract":"<p>Minor version (e.g. 0.X.0)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)patch":{"name":"patch","abstract":"<p>Patch version (e.g. 0.0.X)</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(py)stringVersion":{"name":"stringVersion","abstract":"<p>A String format of the current SDLVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithMajor:minor:patch:":{"name":"-initWithMajor:minor:patch:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithMajor:minor:patch:":{"name":"+versionWithMajor:minor:patch:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithString:":{"name":"-initWithString:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithString:":{"name":"+versionWithString:","abstract":"<p>Convenience init</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSyncMsgVersion:":{"name":"-initWithSyncMsgVersion:","abstract":"<p>Deprecated convenience init to set version using SDLSyncMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSyncMsgVersion:":{"name":"+versionWithSyncMsgVersion:","abstract":"<p>Deprecated convenience init to set version using SDLSyncMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)initWithSDLMsgVersion:":{"name":"-initWithSDLMsgVersion:","abstract":"<p>Convenience init to set version using SDLMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(cm)versionWithSDLMsgVersion:":{"name":"+versionWithSDLMsgVersion:","abstract":"<p>Convenience init to set version using SDLMsgVersion</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)compare:":{"name":"-compare:","abstract":"<p>Compare two SDLVersions</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanVersion:":{"name":"-isLessThanVersion:","abstract":"<p>Compare is less than</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isEqualToVersion:":{"name":"-isEqualToVersion:","abstract":"<p>Compare is equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanVersion:":{"name":"-isGreaterThanVersion:","abstract":"<p>Compare is greater than</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isGreaterThanOrEqualToVersion:":{"name":"-isGreaterThanOrEqualToVersion:","abstract":"<p>Compare is greater than or equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVersion.html#/c:objc(cs)SDLVersion(im)isLessThanOrEqualToVersion:":{"name":"-isLessThanOrEqualToVersion:","abstract":"<p>Compare is less than or equal to</p>","parent_name":"SDLVersion"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)make":{"name":"make","abstract":"<p>The make of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)model":{"name":"model","abstract":"<p>The model of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)modelYear":{"name":"modelYear","abstract":"<p>The model year of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleType.html#/c:objc(cs)SDLVehicleType(py)trim":{"name":"trim","abstract":"<p>The trim of the vehicle</p>","parent_name":"SDLVehicleType"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithDataType:resultCode:":{"name":"-initWithDataType:resultCode:","abstract":"<p>Convenience init for creating a SDLVehicleDataResult with a dataType</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(im)initWithCustomOEMDataType:resultCode:":{"name":"-initWithCustomOEMDataType:resultCode:","abstract":"<p>Convenience init for creating a SDLVehicleDataResult with a customDataType</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)dataType":{"name":"dataType","abstract":"<p>Defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)customOEMDataType":{"name":"customOEMDataType","abstract":"<p>OEM custom defined published data element type</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLVehicleDataResult.html#/c:objc(cs)SDLVehicleDataResult(py)resultCode":{"name":"resultCode","abstract":"<p>Published data result code</p>","parent_name":"SDLVehicleDataResult"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(im)initWithTurnList:softButtons:":{"name":"-initWithTurnList:softButtons:","abstract":"<p>Convenience init to update a list of maneuvers for navigation</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)turnList":{"name":"turnList","abstract":"<p>Optional, SDLTurn, 1 - 100 entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUpdateTurnList.html#/c:objc(cs)SDLUpdateTurnList(py)softButtons":{"name":"softButtons","abstract":"<p>Required, SDLSoftButton, 0 - 1 Entries</p>","parent_name":"SDLUpdateTurnList"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to unsubscribe to the GPSData.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to unsubscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to unsubscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to unsubscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to unsubscribe to the fuel level state.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to unsubscribe to the fuel range.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to unsubscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to unsubscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to unsubscribe to the PRNDL status.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to unsubscribe to the tireStatus.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to unsubscribe to the odometer in km.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the seat belts.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to unsubscribe to the body information including power modes.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to unsubscribe to the device status including signal and battery strength.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to unsubscribe to the status of the brake pedal.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the wipers.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to unsubscribe to the status of the head lamps.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to unsubscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to unsubscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to unsubscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to unsubscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to unsubscribe to the emergency call info</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to unsubscribe to the airbag status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to unsubscribe to the emergency event</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to unsubscribe to the cluster modes</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to unsubscribe to the myKey status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to unsubscribe to the electronic parking brake status</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to unsubscribe to the turn signal</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The result of requesting to unsubscribe to the cloud app vehicle id</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleDataResponse.html#/c:objc(cs)SDLUnsubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleDataResponse"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for unsubscribing to all possible vehicle data items.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>If true, unsubscribes from GPS</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>If true, unsubscribes from Speed</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>If true, unsubscribes from RPM</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>If true, unsubscribes from Fuel Level</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>If true, unsubscribes from Fuel Level State</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>If true, unsubscribes from Fuel Range</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>If true, unsubscribes from Instant Fuel Consumption</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>If true, unsubscribes from External Temperature</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>If true, unsubscribes from PRNDL</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>If true, unsubscribes from Tire Pressure</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>If true, unsubscribes from Odometer</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>If true, unsubscribes from Belt Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>If true, unsubscribes from Body Information</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>If true, unsubscribes from Device Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>If true, unsubscribes from Driver Braking</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>If true, unsubscribes from Wiper Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>If true, unsubscribes from Head Lamp Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>If true, unsubscribes from Engine Oil Life</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>If true, unsubscribes from Engine Torque</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>If true, unsubscribes from Acc Pedal Position</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>If true, unsubscribes from Steering Wheel Angle data</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>If true, unsubscribes from eCallInfo</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>If true, unsubscribes from Airbag Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>If true, unsubscribes from Emergency Event</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>If true, unsubscribes from Cluster Mode Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>If true, unsubscribes from My Key</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, unsubscribes to the Electronic Parking Brake Status</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, unsubscribes to the Turn Signal</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, unsubscribes to the Cloud App Vehicle ID</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeVehicleData.html#/c:objc(cs)SDLUnsubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLUnsubscribeVehicleData"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(im)initWithButtonName:":{"name":"-initWithButtonName:","abstract":"<p>Convenience init to unsubscribe from a subscription button</p>","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnsubscribeButton.html#/c:objc(cs)SDLUnsubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>A name of the button to unsubscribe from","parent_name":"SDLUnsubscribeButton"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(im)initWithServiceID:":{"name":"-initWithServiceID:","abstract":"<p>Create an instance of UnpublishAppService with the serviceID that corresponds with the service to be unpublished</p>","parent_name":"SDLUnpublishAppService"},"Classes/SDLUnpublishAppService.html#/c:objc(cs)SDLUnpublishAppService(py)serviceID":{"name":"serviceID","abstract":"<p>The ID of the service to be unpublished.</p>","parent_name":"SDLUnpublishAppService"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(im)initWithNavigationText:turnIcon:":{"name":"-initWithNavigationText:turnIcon:","abstract":"<p>Convenience init to UpdateTurnList for navigation</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)navigationText":{"name":"navigationText","abstract":"<p>Individual turn text. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTurn.html#/c:objc(cs)SDLTurn(py)turnIcon":{"name":"turnIcon","abstract":"<p>Individual turn icon. Must provide at least text or icon for a given turn</p>","parent_name":"SDLTurn"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventDelegate":{"name":"touchEventDelegate","abstract":"<p>Notified of processed touches such as pinches, pans, and taps</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEventHandler":{"name":"touchEventHandler","abstract":"<p>Returns all OnTouchEvent notifications as SDLTouch and SDLTouchType objects.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapDistanceThreshold":{"name":"tapDistanceThreshold","abstract":"<p>Distance between two taps on the screen, in the head unit&rsquo;s coordinate system, used for registering double-tap callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)panDistanceThreshold":{"name":"panDistanceThreshold","abstract":"<p>Minimum distance for a pan gesture in the head unit&rsquo;s coordinate system, used for registering pan callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)tapTimeThreshold":{"name":"tapTimeThreshold","abstract":"<p>Time (in seconds) between tap events to register a double-tap callback. This must be greater than 0.0.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold":{"name":"movementTimeThreshold","abstract":"<p>Time (in seconds) between movement events to register panning or pinching callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)enableSyncedPanning":{"name":"enableSyncedPanning","abstract":"<p>If set to NO, the display link syncing will be ignored and <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)movementTimeThreshold\">movementTimeThreshold</a></code> will be used. Defaults to YES.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(py)touchEnabled":{"name":"touchEnabled","abstract":"<p>Boolean denoting whether or not the touch manager should deliver touch event callbacks.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)cancelPendingTouches":{"name":"-cancelPendingTouches","abstract":"<p>Cancels pending touch event timers that may be in progress.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:":{"name":"-initWithHitTester:","abstract":"<p>Initialize a touch manager with a hit tester if available</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)initWithHitTester:videoScaleManager:":{"name":"-initWithHitTester:videoScaleManager:","abstract":"<p>Initialize a touch manager with a hit tester and a video scale manager.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchManager.html#/c:objc(cs)SDLTouchManager(im)syncFrame":{"name":"-syncFrame","abstract":"<p>Called by SDLStreamingMediaManager in sync with the streaming framerate. This helps to moderate panning gestures by allowing the UI to be modified in time with the framerate.</p>","parent_name":"SDLTouchManager"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)pressAvailable":{"name":"pressAvailable","abstract":"<p>Whether or not long presses are available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)multiTouchAvailable":{"name":"multiTouchAvailable","abstract":"<p>Whether or not multi-touch (e.g. a pinch gesture) is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEventCapabilities.html#/c:objc(cs)SDLTouchEventCapabilities(py)doublePressAvailable":{"name":"doublePressAvailable","abstract":"<p>Whether or not a double tap is available</p>","parent_name":"SDLTouchEventCapabilities"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)touchEventId":{"name":"touchEventId","abstract":"<p>A touch&rsquo;s unique identifier. The application can track the current touch events by id.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)timeStamp":{"name":"timeStamp","abstract":"<p>The time that the touch was recorded. This number can the time since the beginning of the session or something else as long as the units are in milliseconds.</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchEvent.html#/c:objc(cs)SDLTouchEvent(py)coord":{"name":"coord","abstract":"<p>The touch&rsquo;s coordinate</p>","parent_name":"SDLTouchEvent"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)x":{"name":"x","abstract":"<p>The x value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouchCoord.html#/c:objc(cs)SDLTouchCoord(py)y":{"name":"y","abstract":"<p>The y value of the touch coordinate</p>","parent_name":"SDLTouchCoord"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(im)initWithTouchEvent:":{"name":"-initWithTouchEvent:","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)identifier":{"name":"identifier","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)location":{"name":"location","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)timeStamp":{"name":"timeStamp","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isFirstFinger":{"name":"isFirstFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTouch.html#/c:objc(cs)SDLTouch(py)isSecondFinger":{"name":"isSecondFinger","abstract":"<p>@abstract","parent_name":"SDLTouch"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)pressureTelltale":{"name":"pressureTelltale","abstract":"<p>Status of the Tire Pressure Telltale. See WarningLightStatus.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftFront":{"name":"leftFront","abstract":"<p>The status of the left front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightFront":{"name":"rightFront","abstract":"<p>The status of the right front tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)leftRear":{"name":"leftRear","abstract":"<p>The status of the left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)rightRear":{"name":"rightRear","abstract":"<p>The status of the right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerLeftRear":{"name":"innerLeftRear","abstract":"<p>The status of the inner left rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTireStatus.html#/c:objc(cs)SDLTireStatus(py)innerRightRear":{"name":"innerRightRear","abstract":"<p>The status of the innter right rear tire.</p>","parent_name":"SDLTireStatus"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)name":{"name":"name","abstract":"<p>The enumeration identifying the field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)characterSet":{"name":"characterSet","abstract":"<p>The character set that is supported in this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)width":{"name":"width","abstract":"<p>The number of characters in one row of this field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(py)rows":{"name":"rows","abstract":"<p>The number of rows for this text field.</p>","parent_name":"SDLTextField"},"Classes/SDLTextField.html#/c:objc(cs)SDLTextField(im)initWithName:characterSet:width:rows:":{"name":"-initWithName:characterSet:width:rows:","abstract":"<p>Convenience initalizer for the TextField RPC struct</p>","parent_name":"SDLTextField"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Constructor with the required values.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:":{"name":"-initWithTemplate:","abstract":"<p>Init with the required values.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(im)initWithTemplate:dayColorScheme:nightColorScheme:":{"name":"-initWithTemplate:dayColorScheme:nightColorScheme:","abstract":"<p>Convinience constructor with all the parameters.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)template":{"name":"template","abstract":"<p>Predefined or dynamically created window template. Currently only predefined window template layouts are defined.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to use when the head unit is in a light / day situation.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateConfiguration.html#/c:objc(cs)SDLTemplateConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to use when the head unit is in a dark / night situation.</p>","parent_name":"SDLTemplateConfiguration"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:":{"name":"-initWithPrimaryRGBColor:secondaryRGBColor:backgroundRGBColor:","abstract":"<p>Convenience init</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(im)initWithPrimaryColor:secondaryColor:backgroundColor:":{"name":"-initWithPrimaryColor:secondaryColor:backgroundColor:","abstract":"<p>Convenience init</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)primaryColor":{"name":"primaryColor","abstract":"<p>The &ldquo;primary&rdquo; color. This must always be your primary brand color. If the OEM only uses one color, this will be the color. It is recommended to the OEMs that the primaryColor should change the <code>mediaClockTimer</code> bar and the highlight color of soft buttons.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)secondaryColor":{"name":"secondaryColor","abstract":"<p>The &ldquo;secondary&rdquo; color. This may be an accent or complimentary color to your primary brand color. If the OEM uses this color, they must also use the primary color. It is recommended to the OEMs that the secondaryColor should change the background color of buttons, such as soft buttons.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemplateColorScheme.html#/c:objc(cs)SDLTemplateColorScheme(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color to be used on the template. If the OEM does not support this parameter, assume on &ldquo;dayColorScheme&rdquo; that this will be a light color, and on &ldquo;nightColorScheme&rdquo; a dark color. You should do the same for your custom schemes.</p>","parent_name":"SDLTemplateColorScheme"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithFahrenheitValue:":{"name":"-initWithFahrenheitValue:","abstract":"<p>Convenience init for a fahrenheit temperature value.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithCelsiusValue:":{"name":"-initWithCelsiusValue:","abstract":"<p>Convenience init for a celsius temperature value.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(im)initWithUnit:value:":{"name":"-initWithUnit:value:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)unit":{"name":"unit","abstract":"<p>Temperature unit</p>","parent_name":"SDLTemperature"},"Classes/SDLTemperature.html#/c:objc(cs)SDLTemperature(py)value":{"name":"value","abstract":"<p>Temperature value in specified unit. Range depends on OEM and is not checked by SDL.</p>","parent_name":"SDLTemperature"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(im)initWithText:type:":{"name":"-initWithText:type:","abstract":"<p>Initialize with text and a type</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)textChunksFromString:":{"name":"+textChunksFromString:","abstract":"<p>Create TTS using text</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)sapiChunksFromString:":{"name":"+sapiChunksFromString:","abstract":"<p>Create TTS using SAPI</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)lhPlusChunksFromString:":{"name":"+lhPlusChunksFromString:","abstract":"<p>Create TTS using LH Plus</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)prerecordedChunksFromString:":{"name":"+prerecordedChunksFromString:","abstract":"<p>Create TTS using prerecorded chunks</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)silenceChunks":{"name":"+silenceChunks","abstract":"<p>Create TTS using silence</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(cm)fileChunksWithName:":{"name":"+fileChunksWithName:","abstract":"<p>Create &ldquo;TTS&rdquo; to play an audio file previously uploaded to the system.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)text":{"name":"text","abstract":"<p>Text to be spoken, a phoneme specification, or the name of a pre-recorded / pre-uploaded sound. The contents of this field are indicated by the &ldquo;type&rdquo; field.</p>","parent_name":"SDLTTSChunk"},"Classes/SDLTTSChunk.html#/c:objc(cs)SDLTTSChunk(py)type":{"name":"type","abstract":"<p>The type of information in the &ldquo;text&rdquo; field (e.g. phrase to be spoken, phoneme specification, name of pre-recorded sound).</p>","parent_name":"SDLTTSChunk"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithType:fileName:":{"name":"-initWithType:fileName:","abstract":"<p>Create a generic system request with a file name</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(im)initWithProprietaryType:fileName:":{"name":"-initWithProprietaryType:fileName:","abstract":"<p>Create an OEM_PROPRIETARY system request with a subtype and file name</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request. Note that Proprietary requests should forward the binary data to the known proprietary module on the system.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"<p>A request subType used when the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)requestType\">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemRequest.html#/c:objc(cs)SDLSystemRequest(py)fileName":{"name":"fileName","abstract":"<p>Filename of HTTP data to store in predefined system staging area.</p>","parent_name":"SDLSystemRequest"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displays":{"name":"displays","abstract":"<p>Provides window capabilities of all displays connected with SDL. By default, one display is connected and supported which includes window capability information of the default main window of the display. May be nil if the system has not provided display and window capability information yet.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>If returned, the platform supports on-screen SoftButtons</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)prerecordedSpeechCapabilities":{"name":"prerecordedSpeechCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)vrCapability":{"name":"vrCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)pcmStreamCapability":{"name":"pcmStreamCapability","abstract":"<div class=\"aside aside-see\">","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"<p>If returned, the platform supports app services</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>If returned, the platform supports navigation</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>If returned, the platform supports making phone calls</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>If returned, the platform supports video streaming</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>If returned, the platform supports remote control capabilities</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"<p>If returned, the platform supports remote control capabilities for seats</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)defaultMainWindowCapability":{"name":"defaultMainWindowCapability","abstract":"<p>Returns the window capability object of the default main window which is always pre-created by the connected system. This is a convenience method for easily accessing the capabilities of the default main window.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(py)supportsSubscriptions":{"name":"supportsSubscriptions","abstract":"<p>YES if subscriptions are available on the connected module and you will automatically be notified if the value changes on the module. If NO, calls to <code>subscribe</code> methods will subscribe to updates, but the module will not automatically notify you. You will need to call <code>updateWithCapabilityType:completionHandler:</code> to force an update if you need one (though this should be rare). This does not apply to the <code>DISPLAYS</code> capability type which you can always subscribe to.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)init":{"name":"-init","abstract":"<p>Init is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new system capability manager with a specified connection manager</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)start":{"name":"-start","abstract":"<p>Starts the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)windowCapabilityWithWindowID:":{"name":"-windowCapabilityWithWindowID:","abstract":"<p>Returns the window capability of one of your app&rsquo;s windows with the specified window ID that is on the primary display (i.e. the head unit itself). This is a convenience method to easily access capabilities of windows such as your apps&rsquo; widget windows.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)isCapabilitySupported:":{"name":"-isCapabilitySupported:","abstract":"<p>Returns whether or not the capability type is supported on the module. You can use this to check if subscribing to the capability will work. If this returns NO, then the feature is not supported by the head unit. If YES, the feature is supported by the head unit. You can subscribe to the capability type to get more information about the capability&rsquo;s support and features on the connected module.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)updateCapabilityType:completionHandler:":{"name":"-updateCapabilityType:completionHandler:","abstract":"<p>This method has been superseded by the <code>subscribeToCapabilityType:</code> methods. You should use one of those methods instead unless you only want a value once (you don&rsquo;t want to keep a long-lasting observer) and it must be current (most capabilities do not need to be updated). If you have a separate subscription observer and are connected to a head unit that does not support subscriptions, when this method returns, it will also call all subscription callbacks that you&rsquo;ve set up with the new value if there is one. Therefore, you can use this method to force an update to all subscriptions of that particular type on head units that don&rsquo;t support subscriptions (<code>supportsSubscriptions == NO</code>).</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withBlock:":{"name":"-subscribeToCapabilityType:withBlock:","abstract":"<p>Subscribe to a particular capability type using a block callback.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withUpdateHandler:":{"name":"-subscribeToCapabilityType:withUpdateHandler:","abstract":"<p>Subscribe to a particular capability type using a handler callback.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)subscribeToCapabilityType:withObserver:selector:":{"name":"-subscribeToCapabilityType:withObserver:selector:","abstract":"<p>Subscribe to a particular capability type with a selector callback.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapabilityManager.html#/c:objc(cs)SDLSystemCapabilityManager(im)unsubscribeFromCapabilityType:withObserver:":{"name":"-unsubscribeFromCapabilityType:withObserver:","abstract":"<p>Unsubscribe from a particular capability type. If it was subscribed with a block / handler, the return value should be passed to the <code>observer</code> to unsubscribe the block. If it was subscribed with a selector, the <code>observer</code> object (on which the selector exists and is called) should be passed to unsubscribe the object selector.</p>","parent_name":"SDLSystemCapabilityManager"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithAppServicesCapabilities:":{"name":"-initWithAppServicesCapabilities:","abstract":"<p>Convenience init for an App Service Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithNavigationCapability:":{"name":"-initWithNavigationCapability:","abstract":"<p>Convenience init for a Navigation Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithPhoneCapability:":{"name":"-initWithPhoneCapability:","abstract":"<p>Convenience init for a Phone Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithVideoStreamingCapability:":{"name":"-initWithVideoStreamingCapability:","abstract":"<p>Convenience init for a Video Streaming Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithRemoteControlCapability:":{"name":"-initWithRemoteControlCapability:","abstract":"<p>Convenience init for a Remote Control Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithDisplayCapabilities:":{"name":"-initWithDisplayCapabilities:","abstract":"<p>Convenience init for DisplayCapability list</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(im)initWithSeatLocationCapability:":{"name":"-initWithSeatLocationCapability:","abstract":"<p>Convenience init for a Remote Control Capability</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>Used as a descriptor of what data to expect in this struct. The corresponding param to this enum should be included and the only other parameter included.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)appServicesCapabilities":{"name":"appServicesCapabilities","abstract":"<p>Describes the capabilities of app services including what service types are supported and the current state of services.</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)navigationCapability":{"name":"navigationCapability","abstract":"<p>Describes the extended capabilities of the onboard navigation system</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)phoneCapability":{"name":"phoneCapability","abstract":"<p>Describes the extended capabilities of the module&rsquo;s phone feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)videoStreamingCapability":{"name":"videoStreamingCapability","abstract":"<p>Describes the capabilities of the module&rsquo;s video streaming feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)remoteControlCapability":{"name":"remoteControlCapability","abstract":"<p>Describes the extended capabilities of the module&rsquo;s remote control feature</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)seatLocationCapability":{"name":"seatLocationCapability","abstract":"<p>Describes information about the locations of each seat</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSystemCapability.html#/c:objc(cs)SDLSystemCapability(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contain the display related information and all windows related to that display</p>","parent_name":"SDLSystemCapability"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Convenience init to describe the SDL version</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSyncMsgVersion.html#/c:objc(cs)SDLSyncMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLSyncMsgVersion"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The result of requesting to subscribe to the GPSData.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The result of requesting to subscribe to the vehicle speed in kilometers per hour.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The result of requesting to subscribe to the number of revolutions per minute of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The result of requesting to subscribe to the fuel level in the tank (percentage)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The result of requesting to subscribe to the fuel level state.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The result of requesting to subscribe to the fuel range.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The result of requesting to subscribe to the instantaneous fuel consumption in microlitres.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The result of requesting to subscribe to the external temperature in degrees celsius.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The result of requesting to subscribe to the PRNDL status.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The result of requesting to subscribe to the tireStatus.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>The result of requesting to subscribe to the odometer in km.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The result of requesting to subscribe to the status of the seat belts.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The result of requesting to subscribe to the body information including power modes.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The result of requesting to subscribe to the device status including signal and battery strength.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The result of requesting to subscribe to the status of the brake pedal.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The result of requesting to subscribe to the status of the wipers.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>The result of requesting to subscribe to the status of the head lamps.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The result of requesting to subscribe to the estimated percentage of remaining oil life of the engine.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>The result of requesting to subscribe to the torque value for engine (in Nm) on non-diesel variants.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>The result of requesting to subscribe to the accelerator pedal position (percentage depressed)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>The result of requesting to subscribe to the current angle of the steering wheel (in deg)</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>The result of requesting to subscribe to the emergency call info</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The result of requesting to subscribe to the airbag status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>The result of requesting to subscribe to the emergency event</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)clusterModes":{"name":"clusterModes","abstract":"<p>The result of requesting to subscribe to the cluster modes</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>The result of requesting to subscribe to the myKey status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The result of requesting to subscribe to the electronic parking brake status</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The result of requesting to subscribe to the turn signal</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The result of requesting to subscribe to the cloud app vehicle ID</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleDataResponse.html#/c:objc(cs)SDLSubscribeVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleDataResponse"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:wiperStatus:","abstract":"<p>Convenience init for subscribing to all possible vehicle data items.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, subscribes GPS data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, subscribes Speed data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, subscribes RPM data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, subscribes Fuel Level data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, subscribes Fuel Level State data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, subscribes Fuel Range data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, subscribes Instant Fuel Consumption data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, subscribes External Temperature data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, subscribes PRNDL data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, subscribes Tire Pressure status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, subscribes Odometer data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, subscribes Belt Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, subscribes Body Information data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, subscribes Device Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, subscribes Driver Braking data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, subscribes Wiper Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, subscribes Head Lamp Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, subscribes to Engine Oil Life data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, subscribes Engine Torque data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, subscribes Acc Pedal Position data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, subscribes Steering Wheel Angle data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, subscribes eCall Info data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, subscribes Airbag Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, subscribes Emergency Event data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, subscribes Cluster Mode Status data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, subscribes myKey data.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, subscribes to the electronic parking brake status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, subscribes to the turn signal status.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, subscribes to the cloud app vehicle ID.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeVehicleData.html#/c:objc(cs)SDLSubscribeVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.</p>","parent_name":"SDLSubscribeVehicleData"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(im)initWithButtonName:handler:":{"name":"-initWithButtonName:handler:","abstract":"<p>Construct a SDLSubscribeButton with a handler callback when an event occurs with a button name.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you subscribed to is selected.</p>","parent_name":"SDLSubscribeButton"},"Classes/SDLSubscribeButton.html#/c:objc(cs)SDLSubscribeButton(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button to subscribe to","parent_name":"SDLSubscribeButton"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)scale":{"name":"scale","abstract":"<p>The scaling factor the app should use to change the size of the projecting view.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)displayViewportResolution":{"name":"displayViewportResolution","abstract":"<p>The screen resolution of the connected display. The units are pixels.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(py)appViewportFrame":{"name":"appViewportFrame","abstract":"<p>The frame of the app&rsquo;s projecting view. This is calculated by dividing the display&rsquo;s viewport resolution by the scale. The units are points.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)init":{"name":"-init","abstract":"<p>Creates a default streaming video scale manager.","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)initWithScale:displayViewportResolution:":{"name":"-initWithScale:displayViewportResolution:","abstract":"<p>Convenience init for creating the manager with a scale and connected display viewport resolution.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleTouchEventCoordinates:":{"name":"-scaleTouchEventCoordinates:","abstract":"<p>Scales the coordinates of an <code>OnTouchEvent</code> from the display&rsquo;s coordinate system to the app&rsquo;s viewport coordinate system. If the scale value is less than 1.0, the touch events will be returned without being scaled.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)scaleHapticRect:":{"name":"-scaleHapticRect:","abstract":"<p>Scales a haptic rectangle from the app&rsquo;s viewport coordinate system to the display&rsquo;s coordinate system. If the scale value is less than 1.0, the haptic rectangle will be returned without being scaled.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingVideoScaleManager.html#/c:objc(cs)SDLStreamingVideoScaleManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager. This method is used internally.</p>","parent_name":"SDLStreamingVideoScaleManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager":{"name":"touchManager","abstract":"<p>Touch Manager responsible for providing touch event notifications.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioManager":{"name":"audioManager","abstract":"<p>Audio Manager responsible for managing streaming audio.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)rootViewController":{"name":"rootViewController","abstract":"<p>This property is used for SDLCarWindow, the ability to stream any view controller. To start, you must set an initial view controller on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html\">SDLStreamingMediaConfiguration</a></code> <code>rootViewController</code>. After streaming begins, you can replace that view controller with a new root by placing the new view controller into this property.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)focusableItemManager":{"name":"focusableItemManager","abstract":"<p>A haptic interface that can be updated to reparse views within the window you&rsquo;ve provided. Send a <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLDidUpdateProjectionView\">SDLDidUpdateProjectionView</a></code> notification or call the <code>updateInterfaceLayout</code> method to reparse. The &ldquo;output&rdquo; of this haptic interface occurs in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)touchManager\">touchManager</a></code> property where it will call the delegate.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)streamingSupported":{"name":"streamingSupported","abstract":"<p>Whether or not video streaming is supported</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoConnected":{"name":"videoConnected","abstract":"<p>Whether or not the video session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoEncrypted":{"name":"videoEncrypted","abstract":"<p>Whether or not the video session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioConnected":{"name":"audioConnected","abstract":"<p>Whether or not the audio session is connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)audioEncrypted":{"name":"audioEncrypted","abstract":"<p>Whether or not the audio session is encrypted. This may be different than the requestedEncryptionType.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoStreamingPaused":{"name":"videoStreamingPaused","abstract":"<p>Whether or not the video stream is paused due to either the application being backgrounded, the HMI state being either NONE or BACKGROUND, or the video stream not being ready.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)screenSize":{"name":"screenSize","abstract":"<p>The current screen resolution of the connected display in pixels.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)videoFormat":{"name":"videoFormat","abstract":"<p>This is the agreed upon format of video encoder that is in use, or nil if not currently connected.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)supportedFormats":{"name":"supportedFormats","abstract":"<p>A list of all supported video formats by this manager</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)pixelBufferPool":{"name":"pixelBufferPool","abstract":"<p>The pixel buffer pool reference returned back from an active VTCompressionSessionRef encoder.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)requestedEncryptionType":{"name":"requestedEncryptionType","abstract":"<p>The requested encryption type when a session attempts to connect. This setting applies to both video and audio sessions.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(py)showVideoBackgroundDisplay":{"name":"showVideoBackgroundDisplay","abstract":"<p>When YES, the StreamingMediaManager will send a black screen with &ldquo;Video Backgrounded String&rdquo;. Defaults to YES.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Create a new streaming media manager for navigation and projection apps with a specified configuration.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)initWithConnectionManager:configuration:systemCapabilityManager:":{"name":"-initWithConnectionManager:configuration:systemCapabilityManager:","abstract":"<p>Create a new streaming media manager for navigation and projection apps with a specified configuration.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startWithProtocol:":{"name":"-startWithProtocol:","abstract":"<p>Start the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopAudio":{"name":"-stopAudio","abstract":"<p>Stop the audio feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)stopVideo":{"name":"-stopVideo","abstract":"<p>Stop the video feature of the manager. This method is used internally.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:":{"name":"-sendVideoData:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendVideoData:presentationTimestamp:":{"name":"-sendVideoData:presentationTimestamp:","abstract":"<p>This method receives raw image data and will run iOS8+&lsquo;s hardware video encoder to turn the data into a video stream, which will then be passed to the connected head unit.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)sendAudioData:":{"name":"-sendAudioData:","abstract":"<p>This method receives PCM audio data and will attempt to send that data across to the head unit for immediate playback.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startAudioWithProtocol:":{"name":"-startAudioWithProtocol:","abstract":"<p>Start the audio feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaManager.html#/c:objc(cs)SDLStreamingMediaManager(im)startVideoWithProtocol:":{"name":"-startVideoWithProtocol:","abstract":"<p>Start the video feature of the manager. This is used internally. To use an SDLStreamingMediaManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLStreamingMediaManager"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>Set security managers which could be used. This is primarily used with video streaming applications to authenticate and perhaps encrypt traffic data.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)maximumDesiredEncryption":{"name":"maximumDesiredEncryption","abstract":"<p>What encryption level video/audio streaming should be. The default is SDLStreamingEncryptionFlagAuthenticateAndEncrypt.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)customVideoEncoderSettings":{"name":"customVideoEncoderSettings","abstract":"<p>Properties to use for applications that utilize the video encoder for streaming. See VTCompressionProperties.h for more details. For example, you can set kVTCompressionPropertyKey_ExpectedFrameRate to set your framerate. Setting the framerate this way will also set the framerate if you use CarWindow automatic streaming.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)dataSource":{"name":"dataSource","abstract":"<p>Usable to change run time video stream setup behavior. Only use this and modify the results if you <em>really</em> know what you&rsquo;re doing. The head unit defaults are generally good.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController":{"name":"rootViewController","abstract":"<p>Set the initial view controller your video streaming content is within.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)carWindowRenderingType":{"name":"carWindowRenderingType","abstract":"<p>Declares if CarWindow will use layer rendering or view rendering. Defaults to layer rendering.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)enableForcedFramerateSync":{"name":"enableForcedFramerateSync","abstract":"<p>When YES, the StreamingMediaManager will run a CADisplayLink with the framerate set to the video encoder settings kVTCompressionPropertyKey_ExpectedFrameRate. This then forces TouchManager (and CarWindow, if used) to sync their callbacks to the framerate. If using CarWindow, this <em>must</em> be YES. If NO, <code>enableSyncedPanning</code> on SDLTouchManager will be set to NO. Defaults to YES.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)allowMultipleViewControllerOrientations":{"name":"allowMultipleViewControllerOrientations","abstract":"<p>When YES, the StreamingMediaManager will disable its internal checks that the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(py)rootViewController\">rootViewController</a></code> only has one <code>supportedOrientation</code>. Having multiple orientations can cause streaming issues. If you wish to disable this check, set it to YES. Defaults to NO.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)init":{"name":"-init","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfiguration":{"name":"+secureConfiguration","abstract":"<p>Create a secure video streaming configuration. Security managers will be provided from SDLEncryptionConfiguration and the encryption flag will be set to SDLStreamingEncryptionFlagAuthenticateAndEncrypt. If you&rsquo;d like custom video encoder settings, you can set the property manually.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithSecurityManagers:encryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithEncryptionFlag:videoSettings:dataSource:rootViewController:":{"name":"-initWithEncryptionFlag:videoSettings:dataSource:rootViewController:","abstract":"<p>Manually set all the properties to the streaming media configuration</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(im)initWithSecurityManagers:":{"name":"-initWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)secureConfigurationWithSecurityManagers:":{"name":"+secureConfigurationWithSecurityManagers:","abstract":"<p>Create a secure configuration for each of the security managers provided.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)insecureConfiguration":{"name":"+insecureConfiguration","abstract":"<p>Create an insecure video streaming configuration. No security managers will be provided and the encryption flag will be set to None. If you&rsquo;d like custom video encoder settings, you can set the property manually. This is equivalent to <code>init</code>.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingInsecureConfigurationWithInitialViewController:":{"name":"+autostreamingInsecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow insecure configuration with a view controller</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithSecurityManagers:initialViewController:":{"name":"+autostreamingSecureConfigurationWithSecurityManagers:initialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller and security managers</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStreamingMediaConfiguration.html#/c:objc(cs)SDLStreamingMediaConfiguration(cm)autostreamingSecureConfigurationWithInitialViewController:":{"name":"+autostreamingSecureConfigurationWithInitialViewController:","abstract":"<p>Create a CarWindow secure configuration with a view controller.</p>","parent_name":"SDLStreamingMediaConfiguration"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(im)initWithCountryCode:fccFacilityId:":{"name":"-initWithCountryCode:fccFacilityId:","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)countryCode":{"name":"countryCode","abstract":"<p>@abstract Binary Representation of ITU Country Code. USA Code is 001.</p>","parent_name":"SDLStationIDNumber"},"Classes/SDLStationIDNumber.html#/c:objc(cs)SDLStationIDNumber(py)fccFacilityId":{"name":"fccFacilityId","abstract":"<p>@abstract Binary representation of unique facility ID assigned by the FCC","parent_name":"SDLStationIDNumber"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithTimeInterval:":{"name":"-initWithTimeInterval:","abstract":"<p>Create a time struct with a time interval (time in seconds). Fractions of the second will be eliminated and rounded down.</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(im)initWithHours:minutes:seconds:":{"name":"-initWithHours:minutes:seconds:","abstract":"<p>Create a time struct with hours, minutes, and seconds</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)hours":{"name":"hours","abstract":"<p>The hour of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)minutes":{"name":"minutes","abstract":"<p>The minute of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLStartTime.html#/c:objc(cs)SDLStartTime(py)seconds":{"name":"seconds","abstract":"<p>The second of the media clock</p>","parent_name":"SDLStartTime"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTS:":{"name":"-initWithTTS:","abstract":"<p>Convenience init to create a speak message</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(im)initWithTTSChunks:":{"name":"-initWithTTSChunks:","abstract":"<p>Convenience init to create a speak message</p>","parent_name":"SDLSpeak"},"Classes/SDLSpeak.html#/c:objc(cs)SDLSpeak(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of TTSChunk structs which, taken together, specify the phrase to be spoken</p>","parent_name":"SDLSpeak"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)name":{"name":"name","abstract":"<p>The name of this soft button state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)artwork":{"name":"artwork","abstract":"<p>The artwork to be used with this button or nil if it is text-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)text":{"name":"text","abstract":"<p>The text to be used with this button or nil if it is image-only</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)highlighted":{"name":"highlighted","abstract":"<p>Whether or not the button should be highlighted on the UI</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)systemAction":{"name":"systemAction","abstract":"<p>A special system action</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(py)softButton":{"name":"softButton","abstract":"<p>An SDLSoftButton describing this state</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:image:":{"name":"-initWithStateName:text:image:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonState.html#/c:objc(cs)SDLSoftButtonState(im)initWithStateName:text:artwork:":{"name":"-initWithStateName:text:artwork:","abstract":"<p>Create the soft button state. Either the text or artwork or both may be set.</p>","parent_name":"SDLSoftButtonState"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)name":{"name":"name","abstract":"<p>The name of this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states":{"name":"states","abstract":"<p>All states available to this button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentState":{"name":"currentState","abstract":"<p>The name of the current state of this soft button</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)currentStateSoftButton":{"name":"currentStateSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)eventHandler":{"name":"eventHandler","abstract":"<p>The handler to be called when the button is in the current state and is pressed</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:states:initialStateName:handler:":{"name":"-initWithName:states:initialStateName:handler:","abstract":"<p>Create a multi-state (or single-state, but you should use initWithName:state: instead for that case) soft button. For example, a button that changes its image or text, such as a repeat or shuffle button.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:state:handler:":{"name":"-initWithName:state:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)initWithName:text:artwork:handler:":{"name":"-initWithName:text:artwork:handler:","abstract":"<p>Create a single-state soft button. For example, a button that brings up a Perform Interaction menu.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToStateNamed:":{"name":"-transitionToStateNamed:","abstract":"<p>Transition the soft button to another state in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property. The wrapper considers all transitions valid (assuming a state with that name exists).</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)transitionToNextState":{"name":"-transitionToNextState","abstract":"<p>Transition the soft button to the next state of the array set when in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(py)states\">states</a></code> property</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonObject.html#/c:objc(cs)SDLSoftButtonObject(im)stateWithName:":{"name":"-stateWithName:","abstract":"<p>Return a state from the state array with a specific name.</p>","parent_name":"SDLSoftButtonObject"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>The button supports a short press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>The button supports a LONG press.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>The button supports &ldquo;button down&rdquo; and &ldquo;button up&rdquo;.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)imageSupported":{"name":"imageSupported","abstract":"<p>The button supports referencing a static or dynamic image.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButtonCapabilities.html#/c:objc(cs)SDLSoftButtonCapabilities(py)textSupported":{"name":"textSupported","abstract":"<p>The button supports the use of text. If not included, the default value should be considered true that the button will support text.</p>","parent_name":"SDLSoftButtonCapabilities"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Convenience init</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(im)initWithType:text:image:highlighted:buttonId:systemAction:handler:":{"name":"-initWithType:text:image:highlighted:buttonId:systemAction:handler:","abstract":"<p>Convenience init</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)handler":{"name":"handler","abstract":"<p>A handler that may optionally be run when the SDLSoftButton has a corresponding notification occur.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)type":{"name":"type","abstract":"<p>Describes whether this soft button displays only text, only an image, or both</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)text":{"name":"text","abstract":"<p>Optional text to display (if defined as TEXT or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)image":{"name":"image","abstract":"<p>Optional image struct for SoftButton (if defined as IMAGE or BOTH type)</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)isHighlighted":{"name":"isHighlighted","abstract":"<p>Displays in an alternate mode, e.g. with a colored background or foreground. Depends on the IVI system.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)softButtonID":{"name":"softButtonID","abstract":"<p>Value which is returned via OnButtonPress / OnButtonEvent</p>","parent_name":"SDLSoftButton"},"Classes/SDLSoftButton.html#/c:objc(cs)SDLSoftButton(py)systemAction":{"name":"systemAction","abstract":"<p>Parameter indicating whether selecting a SoftButton shall call a specific system action. This is intended to allow Notifications to bring the callee into full / focus; or in the case of persistent overlays, the overlay can persist when a SoftButton is pressed.</p>","parent_name":"SDLSoftButton"},"Classes/SDLSliderResponse.html#/c:objc(cs)SDLSliderResponse(py)sliderPosition":{"name":"sliderPosition","abstract":"<p>The selected position of the slider.</p>","parent_name":"SDLSliderResponse"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:cancelID:","abstract":"<p>Convenience init with all parameters.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:":{"name":"-initWithNumTicks:position:","abstract":"<p>Creates a slider with only the number of ticks and position. Note that this is not enough to get a SUCCESS response. You must supply additional data. See below for required parameters.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooter:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooter:timeout:","abstract":"<p>Creates a slider with all required data and a static footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(im)initWithNumTicks:position:sliderHeader:sliderFooters:timeout:":{"name":"-initWithNumTicks:position:sliderHeader:sliderFooters:timeout:","abstract":"<p>Creates an slider with all required data and a dynamic footer (or no footer).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)numTicks":{"name":"numTicks","abstract":"<p>Represents a number of selectable items on a horizontal axis.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)position":{"name":"position","abstract":"<p>Initial position of slider control (cannot exceed numTicks).</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderHeader":{"name":"sliderHeader","abstract":"<p>Text header to display.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)sliderFooter":{"name":"sliderFooter","abstract":"<p>Text footer to display.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)timeout":{"name":"timeout","abstract":"<p>App defined timeout. Indicates how long of a timeout from the last action (i.e. sliding control resets timeout). If omitted, the value is set to 10 seconds.</p>","parent_name":"SDLSlider"},"Classes/SDLSlider.html#/c:objc(cs)SDLSlider(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific slider to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLSlider"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)status":{"name":"status","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)monitoringSystemStatus":{"name":"monitoringSystemStatus","abstract":"<p>The status of TPMS for this particular tire</p>","parent_name":"SDLSingleTireStatus"},"Classes/SDLSingleTireStatus.html#/c:objc(cs)SDLSingleTireStatus(py)pressure":{"name":"pressure","abstract":"<p>The pressure value of this particular tire in kPa (kilopascals)</p>","parent_name":"SDLSingleTireStatus"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(im)initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:":{"name":"-initWithNavigationText1:navigationText2:eta:timeToDestination:totalDistance:turnIcon:nextTurnIcon:distanceToManeuver:distanceToManeuverScale:maneuverComplete:softButtons:","abstract":"<p>Convenience init to create navigation directions</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText1":{"name":"navigationText1","abstract":"<p>The first line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)navigationText2":{"name":"navigationText2","abstract":"<p>The second line of text in a multi-line overlay screen.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)eta":{"name":"eta","abstract":"<p>Estimated Time of Arrival time at final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)timeToDestination":{"name":"timeToDestination","abstract":"<p>The amount of time needed to reach the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)totalDistance":{"name":"totalDistance","abstract":"<p>The distance to the final destination</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)turnIcon":{"name":"turnIcon","abstract":"<p>An icon to show with the turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)nextTurnIcon":{"name":"nextTurnIcon","abstract":"<p>An icon to show with the next turn description</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuver":{"name":"distanceToManeuver","abstract":"<p>Fraction of distance till next maneuver (starting from when AlertManeuver is triggered). Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)distanceToManeuverScale":{"name":"distanceToManeuverScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver. Used to calculate progress bar.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)maneuverComplete":{"name":"maneuverComplete","abstract":"<p>If and when a maneuver has completed while an AlertManeuver is active, the app must send this value set to TRUE in order to clear the AlertManeuver overlay. If omitted the value will be assumed as FALSE.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowConstantTBT.html#/c:objc(cs)SDLShowConstantTBT(py)softButtons":{"name":"softButtons","abstract":"<p>Three dynamic SoftButtons available (first SoftButton is fixed to &ldquo;Turns&rdquo;). If omitted on supported displays, the currently displayed SoftButton values will not change.</p>","parent_name":"SDLShowConstantTBT"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(im)initWithMenuID:":{"name":"-initWithMenuID:","abstract":"<p>Creates a ShowAppMenu RPC to open the app menu directly to a AddSubMenu RPC&rsquo;s submenu.</p>","parent_name":"SDLShowAppMenu"},"Classes/SDLShowAppMenu.html#/c:objc(cs)SDLShowAppMenu(py)menuID":{"name":"menuID","abstract":"<p>A Menu ID that identifies the AddSubMenu to open if it correlates with the AddSubMenu menuID parameter. If not set the top level menu will be opened.</p>","parent_name":"SDLShowAppMenu"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:":{"name":"-initWithMainField1:mainField2:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:":{"name":"-initWithMainField1:mainField1Type:mainField2:mainField2Type:mainField3:mainField3Type:mainField4:mainField4Type:alignment:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:":{"name":"-initWithMainField1:mainField2:alignment:statusBar:mediaClock:mediaTrack:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(im)initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:":{"name":"-initWithMainField1:mainField2:mainField3:mainField4:alignment:statusBar:mediaClock:mediaTrack:graphic:softButtons:customPresets:textFieldMetadata:","abstract":"<p>Convenience init to set template elements with the following parameters</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField1":{"name":"mainField1","abstract":"<p>The text displayed in a single-line display, or in the upper display","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField2":{"name":"mainField2","abstract":"<p>The text displayed on the second display line of a two-line display</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField3":{"name":"mainField3","abstract":"<p>The text displayed on the first display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mainField4":{"name":"mainField4","abstract":"<p>The text displayed on the second display line of the second page</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)alignment":{"name":"alignment","abstract":"<p>The alignment that Specifies how mainField1 and mainField2 text","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)statusBar":{"name":"statusBar","abstract":"<p>Text in the Status Bar</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaClock":{"name":"mediaClock","abstract":"<p>This property is deprecated use SetMediaClockTimer instead.","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)mediaTrack":{"name":"mediaTrack","abstract":"<p>The text in the track field</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)graphic":{"name":"graphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>An image to be shown on supported displays</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)softButtons":{"name":"softButtons","abstract":"<p>The the Soft buttons defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)customPresets":{"name":"customPresets","abstract":"<p>The Custom Presets defined by the App</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)metadataTags":{"name":"metadataTags","abstract":"<p>Text Field Metadata</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)windowID":{"name":"windowID","abstract":"<p>This is the unique ID assigned to the window that this RPC is intended. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateConfiguration":{"name":"templateConfiguration","abstract":"<p>Used to set an alternate template layout to a window.</p>","parent_name":"SDLShow"},"Classes/SDLShow.html#/c:objc(cs)SDLShow(py)templateTitle":{"name":"templateTitle","abstract":"<p>The title of the current template.</p>","parent_name":"SDLShow"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countUpFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts up, e.g from 0:00 to 4:18.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countUpFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countUpFromStartTime:toEndTime:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts up, e.g from 0:00 to 4:18.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:":{"name":"+countDownFromStartTimeInterval:toEndTimeInterval:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts down, e.g. from 4:18 to 0:00</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)countDownFromStartTime:toEndTime:playPauseIndicator:":{"name":"+countDownFromStartTime:toEndTime:playPauseIndicator:","abstract":"<p>Create a media clock timer that counts down, e.g. from 4:18 to 0:00</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)pauseWithPlayPauseIndicator:":{"name":"+pauseWithPlayPauseIndicator:","abstract":"<p>Pause an existing (counting up / down) media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:":{"name":"+updatePauseWithNewStartTimeInterval:endTimeInterval:playPauseIndicator:","abstract":"<p>Update a pause time (or pause and update the time) on a media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)updatePauseWithNewStartTime:endTime:playPauseIndicator:":{"name":"+updatePauseWithNewStartTime:endTime:playPauseIndicator:","abstract":"<p>Update a pause time (or pause and update the time) on a media clock timer</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)resumeWithPlayPauseIndicator:":{"name":"+resumeWithPlayPauseIndicator:","abstract":"<p>Resume a paused media clock timer. It resumes at the same time at which it was paused.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(cm)clearWithPlayPauseIndicator:":{"name":"+clearWithPlayPauseIndicator:","abstract":"<p>Remove a media clock timer from the screen</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:":{"name":"-initWithUpdateMode:hours:minutes:seconds:audioStreamingIndicator:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:hours:minutes:seconds:":{"name":"-initWithUpdateMode:hours:minutes:seconds:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:":{"name":"-initWithUpdateMode:","abstract":"<p>Convenience init to create a SDLSetMediaClockTimer object</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(im)initWithUpdateMode:startTime:endTime:playPauseIndicator:":{"name":"-initWithUpdateMode:startTime:endTime:playPauseIndicator:","abstract":"<p>Create a SetMediaClockTimer RPC with all available parameters. It&rsquo;s recommended to use the specific initializers above.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)startTime":{"name":"startTime","abstract":"<p>A Start Time with specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)endTime":{"name":"endTime","abstract":"<p>An END time of type SDLStartTime, specifying hour, minute, second values</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)updateMode":{"name":"updateMode","abstract":"<p>The media clock/timer update mode (COUNTUP/COUNTDOWN/PAUSE/RESUME)</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetMediaClockTimer.html#/c:objc(cs)SDLSetMediaClockTimer(py)audioStreamingIndicator":{"name":"audioStreamingIndicator","abstract":"<p>The audio streaming indicator used for a play/pause button.</p>","parent_name":"SDLSetMediaClockTimer"},"Classes/SDLSetInteriorVehicleDataResponse.html#/c:objc(cs)SDLSetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The new module data for the requested module</p>","parent_name":"SDLSetInteriorVehicleDataResponse"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(im)initWithModuleData:":{"name":"-initWithModuleData:","abstract":"<p>Convenience init to change settings of a module</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetInteriorVehicleData.html#/c:objc(cs)SDLSetInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The module data to set for the requested RC module.</p>","parent_name":"SDLSetInteriorVehicleData"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:":{"name":"-initWithHelpText:timeoutText:","abstract":"<p>Initialize SetGlobalProperties with help text and timeout text</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:","abstract":"<p>Initialize SetGlobalProperties with help text, timeout text, help title, and help items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:","abstract":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(im)initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:":{"name":"-initWithHelpText:timeoutText:vrHelpTitle:vrHelp:menuTitle:menuIcon:keyboardProperties:menuLayout:","abstract":"<p>Initialize SetGlobalProperties with all possible items</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help prompt for when the user asks for help with an interface prompt</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Help prompt for when an interface prompt times out</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelpTitle":{"name":"vrHelpTitle","abstract":"<p>Sets a voice recognition Help Title</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)vrHelp":{"name":"vrHelp","abstract":"<p>Sets the items listed in the VR help screen used in an interaction started by Push to Talk</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuTitle":{"name":"menuTitle","abstract":"<p>Text for the menu button label</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuIcon":{"name":"menuIcon","abstract":"<p>Icon for the menu button</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)keyboardProperties":{"name":"keyboardProperties","abstract":"<p>On-screen keyboard (perform interaction) configuration</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)userLocation":{"name":"userLocation","abstract":"<p>Location of the user&rsquo;s seat. Default is driver&rsquo;s seat location if it is not set yet</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetGlobalProperties.html#/c:objc(cs)SDLSetGlobalProperties(py)menuLayout":{"name":"menuLayout","abstract":"<p>The main menu layout. If this is sent while a menu is already on-screen, the head unit will change the display to the new layout type. See available menu layouts on DisplayCapabilities.menuLayoutsAvailable. Defaults to the head unit default.</p>","parent_name":"SDLSetGlobalProperties"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>The display capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>The button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>The soft button capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayoutResponse.html#/c:objc(cs)SDLSetDisplayLayoutResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>The preset bank capabilities of the new template layout</p>","parent_name":"SDLSetDisplayLayoutResponse"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:":{"name":"-initWithPredefinedLayout:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithLayout:":{"name":"-initWithLayout:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(im)initWithPredefinedLayout:dayColorScheme:nightColorScheme:":{"name":"-initWithPredefinedLayout:dayColorScheme:nightColorScheme:","abstract":"<p>Convenience init to set a display layout</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)displayLayout":{"name":"displayLayout","abstract":"<p>A display layout. Predefined or dynamically created screen layout.","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;light&rdquo; or &ldquo;day&rdquo; color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetDisplayLayout.html#/c:objc(cs)SDLSetDisplayLayout(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;dark&rdquo; or &ldquo;night&rdquo; color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLSetDisplayLayout"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init.</p>","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetCloudAppProperties.html#/c:objc(cs)SDLSetCloudAppProperties(py)properties":{"name":"properties","abstract":"<p>The new cloud application properties.</p>","parent_name":"SDLSetCloudAppProperties"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init to set an image icon from a file name. The file must already be uploaded to the head unit.</p>","parent_name":"SDLSetAppIcon"},"Classes/SDLSetAppIcon.html#/c:objc(cs)SDLSetAppIcon(py)syncFileName":{"name":"syncFileName","abstract":"<p>A file reference name","parent_name":"SDLSetAppIcon"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:":{"name":"-initWithAddress:addressLines:locationName:locationDescription:phoneNumber:image:deliveryMode:timeStamp:","abstract":"<p>Create a <code>SendLocation</code> request with an address object, without Lat/Long coordinates.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:address:phoneNumber:image:","abstract":"<p>Create a <code>SendLocation</code> request with Lat/Long coordinate, not an address object</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(im)initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:":{"name":"-initWithLongitude:latitude:locationName:locationDescription:displayAddressLines:phoneNumber:image:deliveryMode:timeStamp:address:","abstract":"<p>Create a <code>SendLocation</code> request with Lat/Long coordinate and an address object and let the nav system decide how to parse it</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>The longitudinal coordinate of the location. Either the latitude / longitude OR the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address\">address</a></code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>The latitudinal coordinate of the location. Either the latitude / longitude OR the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address\">address</a></code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationName":{"name":"locationName","abstract":"<p>Name / title of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description of the intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of intended location / establishment</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)deliveryMode":{"name":"deliveryMode","abstract":"<p>Mode in which the sendLocation request is sent</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)timeStamp":{"name":"timeStamp","abstract":"<p>Arrival time of Location. If multiple SendLocations are sent, this will be used for sorting as well.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendLocation.html#/c:objc(cs)SDLSendLocation(py)address":{"name":"address","abstract":"<p>Address to be used for setting destination. Either the latitude / longitude OR the <code>address</code> must be provided.</p>","parent_name":"SDLSendLocation"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(im)initWithHapticRectData:":{"name":"-initWithHapticRectData:","abstract":"<p>Constructs a new SDLSendHapticData object indicated by the hapticSpatialData parameter</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSendHapticData.html#/c:objc(cs)SDLSendHapticData(py)hapticRectData":{"name":"hapticRectData","abstract":"<p>Array of spatial data structures that represent the locations of all user controls present on the HMI. This data should be updated if/when the application presents a new screen. When a request is sent, if successful, it will replace all spatial data previously sent through RPC. If an empty array is sent, the existing spatial data will be cleared</p>","parent_name":"SDLSendHapticData"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:action:":{"name":"-initWithId:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(im)initWithId:label:action:":{"name":"-initWithId:label:action:","abstract":"<p>@abstract Constructs a newly allocated SDLSeatMemoryAction object with id, label (max length 100 chars) and action type</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)id":{"name":"id","abstract":"<p>@abstract id of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)label":{"name":"label","abstract":"<p>@abstract label of the action to be performed.</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatMemoryAction.html#/c:objc(cs)SDLSeatMemoryAction(py)action":{"name":"action","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatMemoryAction"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(im)initWithSeats:cols:rows:levels:":{"name":"-initWithSeats:cols:rows:levels:","abstract":"<p>Constructs a newly allocated SDLSeatLocationCapability object with all parameters</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)cols":{"name":"cols","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)rows":{"name":"rows","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)levels":{"name":"levels","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocationCapability.html#/c:objc(cs)SDLSeatLocationCapability(py)seats":{"name":"seats","abstract":"<p>Contains a list of SeatLocation in the vehicle, the first element is the driver&rsquo;s seat","parent_name":"SDLSeatLocationCapability"},"Classes/SDLSeatLocation.html#/c:objc(cs)SDLSeatLocation(py)grid":{"name":"grid","abstract":"<p>Optional</p>","parent_name":"SDLSeatLocation"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(im)initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:":{"name":"-initWithId:heatingEnabled:coolingEnable:heatingLevel:coolingLevel:horizontalPostion:verticalPostion:frontVerticalPostion:backVerticalPostion:backTiltAngle:headSupportedHorizontalPostion:headSupportedVerticalPostion:massageEnabled:massageMode:massageCussionFirmness:memory:","abstract":"<p>Constructs a newly allocated SDLSeatControlData object with cushion and firmness</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)id":{"name":"id","abstract":"<p>@abstract id of seat that is a remote controllable seat.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingEnabled":{"name":"heatingEnabled","abstract":"<p>@abstract Whether or not heating is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingEnabled":{"name":"coolingEnabled","abstract":"<p>@abstract Whether or not cooling is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)heatingLevel":{"name":"heatingLevel","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)coolingLevel":{"name":"coolingLevel","abstract":"<p>@abstract cooling level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)horizontalPosition":{"name":"horizontalPosition","abstract":"<p>@abstract horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)verticalPosition":{"name":"verticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)frontVerticalPosition":{"name":"frontVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backVerticalPosition":{"name":"backVerticalPosition","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)backTiltAngle":{"name":"backTiltAngle","abstract":"<p>@abstract heating level in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportHorizontalPosition":{"name":"headSupportHorizontalPosition","abstract":"<p>@abstract head Support Horizontal Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)headSupportVerticalPosition":{"name":"headSupportVerticalPosition","abstract":"<p>@abstract head Support Vertical Position in integer</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageEnabled":{"name":"massageEnabled","abstract":"<p>@abstract Whether or not massage is enabled.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract Array of massage mode data.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)massageCushionFirmness":{"name":"massageCushionFirmness","abstract":"<p>@abstract Array of firmness of a cushion.</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlData.html#/c:objc(cs)SDLSeatControlData(py)memory":{"name":"memory","abstract":"<p>@abstract type of action to be performed</p>","parent_name":"SDLSeatControlData"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with moduleName</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:":{"name":"-initWithName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with moduleName and moduleInfo</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with given parameters</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(im)initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:":{"name":"-initWithName:moduleInfo:heatingEnabledAvailable:coolingEnabledAvailable:heatingLevelAvailable:coolingLevelAvailable:horizontalPositionAvailable:verticalPositionAvailable:frontVerticalPositionAvailable:backVerticalPositionAvailable:backTiltAngleAvailable:headSupportHorizontalPositionAvailable:headSupportVerticalPositionAvailable:massageEnabledAvailable:massageModeAvailable:massageCushionFirmnessAvailable:memoryAvailable:","abstract":"<p>Constructs a newly allocated SDLSeatControlCapabilities object with all parameters</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the light control module.","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingEnabledAvailable":{"name":"heatingEnabledAvailable","abstract":"<p>@abstract Whether or not heating is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingEnabledAvailable":{"name":"coolingEnabledAvailable","abstract":"<p>@abstract Whether or not cooling is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)heatingLevelAvailable":{"name":"heatingLevelAvailable","abstract":"<p>@abstract Whether or not heating level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)coolingLevelAvailable":{"name":"coolingLevelAvailable","abstract":"<p>@abstract Whether or not cooling level is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)horizontalPositionAvailable":{"name":"horizontalPositionAvailable","abstract":"<p>@abstract Whether or not horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)verticalPositionAvailable":{"name":"verticalPositionAvailable","abstract":"<p>@abstract Whether or not vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)frontVerticalPositionAvailable":{"name":"frontVerticalPositionAvailable","abstract":"<p>@abstract Whether or not front Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backVerticalPositionAvailable":{"name":"backVerticalPositionAvailable","abstract":"<p>@abstract Whether or not back Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)backTiltAngleAvailable":{"name":"backTiltAngleAvailable","abstract":"<p>@abstract Whether or not backTilt Angle Available is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportHorizontalPositionAvailable":{"name":"headSupportHorizontalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Horizontal Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)headSupportVerticalPositionAvailable":{"name":"headSupportVerticalPositionAvailable","abstract":"<p>@abstract Whether or not head Supports for Vertical Position is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageEnabledAvailable":{"name":"massageEnabledAvailable","abstract":"<p>@abstract Whether or not massage Enabled is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageModeAvailable":{"name":"massageModeAvailable","abstract":"<p>@abstract Whether or not massage Mode is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)massageCushionFirmnessAvailable":{"name":"massageCushionFirmnessAvailable","abstract":"<p>@abstract Whether or not massage Cushion Firmness is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)memoryAvailable":{"name":"memoryAvailable","abstract":"<p>@abstract Whether or not memory is Available.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLSeatControlCapabilities.html#/c:objc(cs)SDLSeatControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>@abstract Information about a RC module, including its id.</p>","parent_name":"SDLSeatControlCapabilities"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:":{"name":"-initWithMessage:","abstract":"<p>Convenience init for creating a scrolling message with text.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:cancelID:":{"name":"-initWithMessage:timeout:softButtons:cancelID:","abstract":"<p>Convenience init for creating a scrolling message with text and buttons.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(im)initWithMessage:timeout:softButtons:":{"name":"-initWithMessage:timeout:softButtons:","abstract":"<p>Convenience init for creating a scrolling message with text and buttons.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)scrollableMessageBody":{"name":"scrollableMessageBody","abstract":"<p>Body of text that can include newlines and tabs.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)timeout":{"name":"timeout","abstract":"<p>App defined timeout. Indicates how long of a timeout from the last action (i.e. scrolling message resets timeout). If not set, a default value of 30 seconds is used by Core.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)softButtons":{"name":"softButtons","abstract":"<p>Buttons for the displayed scrollable message. If omitted on supported displays, only the system defined &ldquo;Close&rdquo; SoftButton will be displayed.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScrollableMessage.html#/c:objc(cs)SDLScrollableMessage(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific scrollable message to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLScrollableMessage"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)resolution":{"name":"resolution","abstract":"<p>The resolution of the prescribed screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenParams.html#/c:objc(cs)SDLScreenParams(py)touchEventAvailable":{"name":"touchEventAvailable","abstract":"<p>Types of screen touch events available in screen area</p>","parent_name":"SDLScreenParams"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1":{"name":"textField1","abstract":"<p>The top text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2":{"name":"textField2","abstract":"<p>The second text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3":{"name":"textField3","abstract":"<p>The third text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4":{"name":"textField4","abstract":"<p>The fourth text field within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)mediaTrackTextField":{"name":"mediaTrackTextField","abstract":"<p>The media text field available within the media layout. Often less emphasized than textField(1-4)</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)primaryGraphic":{"name":"primaryGraphic","abstract":"<p>The primary graphic within a template layout</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)secondaryGraphic":{"name":"secondaryGraphic","abstract":"<p>A secondary graphic used in some template layouts</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textAlignment":{"name":"textAlignment","abstract":"<p>What alignment textField(1-4) should use</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField1Type":{"name":"textField1Type","abstract":"<p>The type of data textField1 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField2Type":{"name":"textField2Type","abstract":"<p>The type of data textField2 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField3Type":{"name":"textField3Type","abstract":"<p>The type of data textField3 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)textField4Type":{"name":"textField4Type","abstract":"<p>The type of data textField4 describes</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)title":{"name":"title","abstract":"<p>The title of the current template layout.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)softButtonObjects":{"name":"softButtonObjects","abstract":"<p>The current list of soft buttons within a template layout. Set this array to change the displayed soft buttons.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menuConfiguration":{"name":"menuConfiguration","abstract":"<p>Configures the layout of the menu and sub-menus. If set after a menu already exists, the existing main menu layout will be updated.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)menu":{"name":"menu","abstract":"<p>The current list of menu cells displayed in the app&rsquo;s menu.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)dynamicMenuUpdatesMode":{"name":"dynamicMenuUpdatesMode","abstract":"<p>Change the mode of the dynamic menu updater to be enabled, disabled, or enabled on known compatible head units.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The current list of voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)keyboardConfiguration":{"name":"keyboardConfiguration","abstract":"<p>The default keyboard configuration, this can be additionally customized by each SDLKeyboardDelegate.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(py)preloadedChoices":{"name":"preloadedChoices","abstract":"<p>Cells will be hashed by their text, image names, and VR command text. When assembling an SDLChoiceSet, you can pull objects from here, or recreate them. The preloaded versions will be used so long as their text, image names, and VR commands are the same.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)initWithConnectionManager:fileManager:systemCapabilityManager:":{"name":"-initWithConnectionManager:fileManager:systemCapabilityManager:","abstract":"<p>Initialize a screen manager</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>Starts the manager and all sub-managers</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)stop":{"name":"-stop","abstract":"<p>Stops the manager.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)beginUpdates":{"name":"-beginUpdates","abstract":"<p>Delays all screen updates until endUpdatesWithCompletionHandler: is called.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdates":{"name":"-endUpdates","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)endUpdatesWithCompletionHandler:":{"name":"-endUpdatesWithCompletionHandler:","abstract":"<p>Update text fields with new text set into the text field properties. Pass an empty string <code>\\@&quot;&quot;</code> to clear the text field.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)softButtonObjectNamed:":{"name":"-softButtonObjectNamed:","abstract":"<p>Retrieve a SoftButtonObject based on its name.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)subscribeButton:withUpdateHandler:":{"name":"-subscribeButton:withUpdateHandler:","abstract":"<p>Subscribes to a subscribe button. The update handler will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the <code>error</code> parameter of the updateHandler.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)subscribeButton:withObserver:selector:":{"name":"-subscribeButton:withObserver:selector:","abstract":"<p>Subscribes to a subscribe button. The selector will be called when the button has been selected. If there is an error subscribing to the subscribe button it will be returned in the <code>error</code> parameter of the selector.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)unsubscribeButton:withObserver:withCompletionHandler:":{"name":"-unsubscribeButton:withObserver:withCompletionHandler:","abstract":"<p>Unsubscribes to a subscribe button. Please note that if a subscribe button has multiple subscribers the observer will no longer get notifications, however, the app will still be subscribed to the hard button until the last subscriber is removed.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)preloadChoices:withCompletionHandler:":{"name":"-preloadChoices:withCompletionHandler:","abstract":"<p>Preload cells to the head unit. This will <em>greatly</em> reduce the time taken to present a choice set. Any already matching a choice already on the head unit will be ignored. You <em>do not</em> need to wait until the completion handler is called to present a choice set containing choices being loaded. The choice set will wait until the preload completes and then immediately present.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)deleteChoices:":{"name":"-deleteChoices:","abstract":"<p>Delete loaded cells from the head unit. If the cells don&rsquo;t exist on the head unit they will be ignored.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentChoiceSet:mode:":{"name":"-presentChoiceSet:mode:","abstract":"<p>Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentSearchableChoiceSet:mode:withKeyboardDelegate:":{"name":"-presentSearchableChoiceSet:mode:withKeyboardDelegate:","abstract":"<p>Present a choice set on the head unit with a certain interaction mode. You should present in VR only if the user reached this choice set by using their voice, in Manual only if the user used touch to reach this choice set. Use Both if you&rsquo;re lazy&hellip;for real though, it&rsquo;s kind of confusing to the user and isn&rsquo;t recommended.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)presentKeyboardWithInitialText:delegate:":{"name":"-presentKeyboardWithInitialText:delegate:","abstract":"<p>Present a keyboard-only interface to the user and receive input. The user will be able to input text in the keyboard when in a non-driver distraction situation.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)dismissKeyboardWithCancelID:":{"name":"-dismissKeyboardWithCancelID:","abstract":"<p>Cancels the keyboard-only interface if it is currently showing. If the keyboard has not yet been sent to Core, it will not be sent.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openMenu":{"name":"-openMenu","abstract":"<p>Present the top-level of your application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden.</p>","parent_name":"SDLScreenManager"},"Classes/SDLScreenManager.html#/c:objc(cs)SDLScreenManager(im)openSubmenu:":{"name":"-openSubmenu:","abstract":"<p>Present the application menu. This method should be called if the menu needs to be opened programmatically because the built in menu button is hidden. You must update the menu with the proper cells before calling this method. This RPC will fail if the cell does not contain a sub menu, or is not in the menu array.</p>","parent_name":"SDLScreenManager"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(im)initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:":{"name":"-initWithStationShortName:stationIDNumber:stationLongName:stationLocation:stationMessage:","abstract":"<p>Convenience init to SISData</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationShortName":{"name":"stationShortName","abstract":"<p>@abstract Identifies the 4-alpha-character station call sign","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationIDNumber":{"name":"stationIDNumber","abstract":"<p>@abstract Used for network Application.","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLongName":{"name":"stationLongName","abstract":"<p>@abstract Identifies the station call sign or other identifying","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationLocation":{"name":"stationLocation","abstract":"<p>@abstract Provides the 3-dimensional geographic station location</p>","parent_name":"SDLSISData"},"Classes/SDLSISData.html#/c:objc(cs)SDLSISData(py)stationMessage":{"name":"stationMessage","abstract":"<p>@abstract May be used to convey textual information of general interest","parent_name":"SDLSISData"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init to reset global properties.</p>","parent_name":"SDLResetGlobalProperties"},"Classes/SDLResetGlobalProperties.html#/c:objc(cs)SDLResetGlobalProperties(py)properties":{"name":"properties","abstract":"<p>An array of one or more GlobalProperty enumeration elements","parent_name":"SDLResetGlobalProperties"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:","abstract":"<p>Constructs a newly allocated SDLRemoteControlCapabilities object</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(im)initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:":{"name":"-initWithClimateControlCapabilities:radioControlCapabilities:buttonCapabilities:seatControlCapabilities:audioControlCapabilities:hmiSettingsControlCapabilities:lightControlCapabilities:","abstract":"<p>Constructs a newly allocated SDLRemoteControlCapabilities object with given parameters</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)climateControlCapabilities":{"name":"climateControlCapabilities","abstract":"<p>If included, the platform supports RC climate controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)radioControlCapabilities":{"name":"radioControlCapabilities","abstract":"<p>If included, the platform supports RC radio controls.","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>If included, the platform supports RC button controls with the included button names.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)seatControlCapabilities":{"name":"seatControlCapabilities","abstract":"<p>If included, the platform supports seat controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)audioControlCapabilities":{"name":"audioControlCapabilities","abstract":"<p>If included, the platform supports audio controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)hmiSettingsControlCapabilities":{"name":"hmiSettingsControlCapabilities","abstract":"<p>If included, the platform supports hmi setting controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLRemoteControlCapabilities.html#/c:objc(cs)SDLRemoteControlCapabilities(py)lightControlCapabilities":{"name":"lightControlCapabilities","abstract":"<p>If included, the platform supports light controls.</p>","parent_name":"SDLRemoteControlCapabilities"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"<p>Convenience init to release a controlled module</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleType":{"name":"moduleType","abstract":"<p>The module type that the app requests to control.</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLReleaseInteriorVehicleDataModule.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModule(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLReleaseInteriorVehicleDataModule"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"<p>Specifies the negotiated version number of the SmartDeviceLink protocol that is to be supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)language":{"name":"language","abstract":"<p>The currently active VR+TTS language on the module. See &ldquo;Language&rdquo; for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>The currently active display language on the module. See &ldquo;Language&rdquo; for options.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)displayCapabilities":{"name":"displayCapabilities","abstract":"<p>Contains information about the display&rsquo;s capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)buttonCapabilities":{"name":"buttonCapabilities","abstract":"<p>Contains information about the head unit button capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)softButtonCapabilities":{"name":"softButtonCapabilities","abstract":"<p>Contains information about the head unit soft button capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)presetBankCapabilities":{"name":"presetBankCapabilities","abstract":"<p>If returned, the platform supports custom on-screen Presets</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiZoneCapabilities":{"name":"hmiZoneCapabilities","abstract":"<p>Contains information about the HMI zone capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)speechCapabilities":{"name":"speechCapabilities","abstract":"<p>Contains information about the text-to-speech capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)prerecordedSpeech":{"name":"prerecordedSpeech","abstract":"<p>Contains a list of prerecorded speech items present on the platform.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vrCapabilities":{"name":"vrCapabilities","abstract":"<p>Contains information about the VR capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)audioPassThruCapabilities":{"name":"audioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for PerformAudioPassThru, e.g. {8kHz,8-bit,PCM}. The audio is recorded in monaural.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)pcmStreamCapabilities":{"name":"pcmStreamCapabilities","abstract":"<p>Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)vehicleType":{"name":"vehicleType","abstract":"<p>Specifies the connected vehicle&rsquo;s type.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)supportedDiagModes":{"name":"supportedDiagModes","abstract":"<p>Specifies the white-list of supported diagnostic modes (0x00-0xFF) capable for DiagnosticMessage requests. If a mode outside this list is requested, it will be rejected.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)hmiCapabilities":{"name":"hmiCapabilities","abstract":"<p>Specifies the HMI capabilities.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)sdlVersion":{"name":"sdlVersion","abstract":"<p>The version of SDL Core running on the connected head unit</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)systemSoftwareVersion":{"name":"systemSoftwareVersion","abstract":"<p>The software version of the system that implements the SmartDeviceLink core.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterfaceResponse.html#/c:objc(cs)SDLRegisterAppInterfaceResponse(py)iconResumed":{"name":"iconResumed","abstract":"<p>Existence of apps icon at system. If true, apps icon was resumed at system. If false, apps icon is not resumed at system.</p>","parent_name":"SDLRegisterAppInterfaceResponse"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithLifecycleConfiguration:":{"name":"-initWithLifecycleConfiguration:","abstract":"<p>Convenience init for registering the application with a lifecycle configuration.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:":{"name":"-initWithAppName:appId:languageDesired:","abstract":"<p>Convenience init for registering the application with an app name, app id, and desired language.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:","abstract":"<p>Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, and the short app name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:":{"name":"-initWithAppName:appId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:","abstract":"<p>Convenience init for registering the application with an app name, app id, desired language, whether or not the app is a media app, app types, the short app name, tts name, voice recognition synonyms, the hmi display language desired, and the resume hash.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(im)initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:":{"name":"-initWithAppName:appId:fullAppId:languageDesired:isMediaApp:appTypes:shortAppName:ttsName:vrSynonyms:hmiDisplayLanguageDesired:resumeHash:dayColorScheme:nightColorScheme:","abstract":"<p>Convenience init for registering the application with all possible options.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)syncMsgVersion":{"name":"syncMsgVersion","abstract":"<p>Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)sdlMsgVersion":{"name":"sdlMsgVersion","abstract":"<p>Specifies the version number of the SmartDeviceLink protocol that is supported by the mobile application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appName":{"name":"appName","abstract":"<p>The mobile application&rsquo;s name. This name is displayed in the SDL Mobile Applications menu. It also serves as the unique identifier of the application for SmartDeviceLink. Applications with the same name will be rejected.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ttsName":{"name":"ttsName","abstract":"<p>Text-to-speech string for voice recognition of the mobile application name. Meant to overcome any failing on speech engine in properly pronouncing / understanding app name.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Provides an abbreviated version of the app name (if needed), that will be displayed on head units that support very few characters. If not provided, the appName is used instead (and will be truncated if too long). It&rsquo;s recommended that this string be no longer than 5 characters.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Defines additional voice recognition commands</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)isMediaApplication":{"name":"isMediaApplication","abstract":"<p>Indicates if the application is a media or a non-media application. Media applications will appear in the head unit&rsquo;s media source list and can use the <code>MEDIA</code> template.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)languageDesired":{"name":"languageDesired","abstract":"<p>App&rsquo;s starting VR+TTS language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hmiDisplayLanguageDesired":{"name":"hmiDisplayLanguageDesired","abstract":"<p>Current app&rsquo;s expected display language. If there is a mismatch with the head unit, the app will be able to change its language with ChangeRegistration prior to app being brought into focus.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appHMIType":{"name":"appHMIType","abstract":"<p>List of all applicable app HMI types stating which HMI classifications to be given to the app.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)hashID":{"name":"hashID","abstract":"<p>ID used to uniquely identify a previous state of all app data that can persist through connection cycles (e.g. ignition cycles). This registered data (commands, submenus, choice sets, etc.) can be reestablished without needing to explicitly re-send each piece. If omitted, then the previous state of an app&rsquo;s commands, etc. will not be restored.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)deviceInfo":{"name":"deviceInfo","abstract":"<p>Information about the connecting device.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appID":{"name":"appID","abstract":"<p>ID used to validate app with policy table entries.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)fullAppID":{"name":"fullAppID","abstract":"<p>A full UUID appID used to validate app with policy table entries.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)appInfo":{"name":"appInfo","abstract":"<p>Contains detailed information about the registered application.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;light&rdquo; or &ldquo;day&rdquo; color scheme. The OEM may only support this theme if their head unit only has a light color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRegisterAppInterface.html#/c:objc(cs)SDLRegisterAppInterface(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to be used on a head unit using a &ldquo;dark&rdquo; or &ldquo;night&rdquo; color scheme. The OEM may only support this theme if their head unit only has a dark color scheme.</p>","parent_name":"SDLRegisterAppInterface"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithX:y:width:height:":{"name":"-initWithX:y:width:height:","abstract":"<p>Create a Rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(im)initWithCGRect:":{"name":"-initWithCGRect:","abstract":"<p>Create a Rectangle from a CGRect</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)x":{"name":"x","abstract":"<p>The X-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)y":{"name":"y","abstract":"<p>The Y-coordinate of the user control</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)width":{"name":"width","abstract":"<p>The width of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLRectangle.html#/c:objc(cs)SDLRectangle(py)height":{"name":"height","abstract":"<p>The height of the user control&rsquo;s bounding rectangle</p>","parent_name":"SDLRectangle"},"Classes/SDLReadDIDResponse.html#/c:objc(cs)SDLReadDIDResponse(py)didResult":{"name":"didResult","abstract":"<p>Array of requested DID results (with data if available).</p>","parent_name":"SDLReadDIDResponse"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(im)initWithECUName:didLocation:":{"name":"-initWithECUName:didLocation:","abstract":"<p>Convenience init</p>","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)ecuName":{"name":"ecuName","abstract":"<p>An ID of the vehicle module","parent_name":"SDLReadDID"},"Classes/SDLReadDID.html#/c:objc(cs)SDLReadDID(py)didLocation":{"name":"didLocation","abstract":"<p>Raw data from vehicle data DID location(s)","parent_name":"SDLReadDID"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:":{"name":"-initWithFrequencyInteger:frequencyFraction:band:hdChannel:radioEnable:hdRadioEnable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initFMWithFrequencyInteger:frequencyFraction:hdChannel:":{"name":"-initFMWithFrequencyInteger:frequencyFraction:hdChannel:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initAMWithFrequencyInteger:hdChannel:":{"name":"-initAMWithFrequencyInteger:hdChannel:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(im)initXMWithFrequencyInteger:":{"name":"-initXMWithFrequencyInteger:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyInteger":{"name":"frequencyInteger","abstract":"<p>The integer part of the frequency ie for 101.7 this value should be 101</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)frequencyFraction":{"name":"frequencyFraction","abstract":"<p>The fractional part of the frequency for 101.7 is 7</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)band":{"name":"band","abstract":"<p>Radio band value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)rdsData":{"name":"rdsData","abstract":"<p>Read only parameter. See RDSData data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDs":{"name":"availableHDs","abstract":"<p>number of HD sub-channels if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)availableHDChannels":{"name":"availableHDChannels","abstract":"<p>the list of available hd sub-channel indexes, empty list means no Hd channel is available, read-only</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdChannel":{"name":"hdChannel","abstract":"<p>Current HD sub-channel if available</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalStrength":{"name":"signalStrength","abstract":"<p>Signal Strength Value</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)signalChangeThreshold":{"name":"signalChangeThreshold","abstract":"<p>If the signal strength falls below the set value for this parameter, the radio will tune to an alternative frequency</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)radioEnable":{"name":"radioEnable","abstract":"<p>True if the radio is on, false is the radio is off. When the radio is disabled, no data other than radioEnable is included in a GetInteriorVehicleData response</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)state":{"name":"state","abstract":"<p>Read only parameter. See RadioState data type for details.</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)hdRadioEnable":{"name":"hdRadioEnable","abstract":"<p>True if the hd radio is on, false is the radio is off</p>","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlData.html#/c:objc(cs)SDLRadioControlData(py)sisData":{"name":"sisData","abstract":"<p>Read Read-only Station Information Service (SIS) data provides basic information","parent_name":"SDLRadioControlData"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(im)initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:":{"name":"-initWithModuleName:moduleInfo:radioEnableAvailable:radioBandAvailable:radioFrequencyAvailable:hdChannelAvailable:rdsDataAvailable:availableHDChannelsAvailable:stateAvailable:signalStrengthAvailable:signalChangeThresholdAvailable:hdRadioEnableAvailable:siriusXMRadioAvailable:sisDataAvailable:","abstract":"<p>Constructs a newly allocated SDLRadioControlCapabilities object with given parameters.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>The short friendly name of the radio control module.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioEnableAvailable":{"name":"radioEnableAvailable","abstract":"<p>Availability of the control of enable/disable radio.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioBandAvailable":{"name":"radioBandAvailable","abstract":"<p>Availability of the control of radio band.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)radioFrequencyAvailable":{"name":"radioFrequencyAvailable","abstract":"<p>Availability of the control of radio frequency.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdChannelAvailable":{"name":"hdChannelAvailable","abstract":"<p>Availability of the control of HD radio channel.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)rdsDataAvailable":{"name":"rdsDataAvailable","abstract":"<p>Availability of the getting Radio Data System (RDS) data.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDsAvailable":{"name":"availableHDsAvailable","abstract":"<p>Availability of the getting the number of available HD channels.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)availableHDChannelsAvailable":{"name":"availableHDChannelsAvailable","abstract":"<p>Availability of the list of available HD sub-channel indexes.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)stateAvailable":{"name":"stateAvailable","abstract":"<p>Availability of the getting the Radio state.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalStrengthAvailable":{"name":"signalStrengthAvailable","abstract":"<p>Availability of the getting the signal strength.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)signalChangeThresholdAvailable":{"name":"signalChangeThresholdAvailable","abstract":"<p>Availability of the getting the signal Change Threshold</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)hdRadioEnableAvailable":{"name":"hdRadioEnableAvailable","abstract":"<p>Availability of the control of enable/disable HD radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)siriusXMRadioAvailable":{"name":"siriusXMRadioAvailable","abstract":"<p>Availability of sirius XM radio.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)sisDataAvailable":{"name":"sisDataAvailable","abstract":"<p>Availability of the getting HD radio Station Information Service (SIS) data.","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRadioControlCapabilities.html#/c:objc(cs)SDLRadioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLRadioControlCapabilities"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)store":{"name":"store","abstract":"<p>The store that contains RPC data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(py)payloadProtected":{"name":"payloadProtected","abstract":"<p>Declares if the RPC payload ought to be protected</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)initWithDictionary:":{"name":"-initWithDictionary:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCStruct.html#/c:objc(cs)SDLRPCStruct(im)serializeAsDictionary:":{"name":"-serializeAsDictionary:","abstract":"<p>Converts struct to JSON formatted data</p>","parent_name":"SDLRPCStruct"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(py)response":{"name":"response","abstract":"<p>The response to be included within the userinfo dictionary</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)initWithName:object:rpcResponse:":{"name":"-initWithName:object:rpcResponse:","abstract":"<p>Create an NSNotification object containing an SDLRPCResponse</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseMemberOfClass:":{"name":"-isResponseMemberOfClass:","abstract":"<p>Returns whether or not the containing response is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponseNotification.html#/c:objc(cs)SDLRPCResponseNotification(im)isResponseKindOfClass:":{"name":"-isResponseKindOfClass:","abstract":"<p>Returns whether or not the containing response is a kind of class, including subclasses.</p>","parent_name":"SDLRPCResponseNotification"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)correlationID":{"name":"correlationID","abstract":"<p>The correlation id of the corresponding SDLRPCRequest.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)success":{"name":"success","abstract":"<p>Whether or not the SDLRPCRequest was successful.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)resultCode":{"name":"resultCode","abstract":"<p>The result of the SDLRPCRequest. If the request failed, the result code contains the failure reason.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCResponse.html#/c:objc(cs)SDLRPCResponse(py)info":{"name":"info","abstract":"<p>More detailed success or error message.</p>","parent_name":"SDLRPCResponse"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(py)request":{"name":"request","abstract":"<p>The request to be included in the userinfo dictionary</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)initWithName:object:rpcRequest:":{"name":"-initWithName:object:rpcRequest:","abstract":"<p>Create an NSNotification object containing an SDLRPCRequest</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestMemberOfClass:":{"name":"-isRequestMemberOfClass:","abstract":"<p>Returns whether or not the containing request is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequestNotification.html#/c:objc(cs)SDLRPCRequestNotification(im)isRequestKindOfClass:":{"name":"-isRequestKindOfClass:","abstract":"<p>Returns whether or not the containing request is a kind of class, including subclasses.</p>","parent_name":"SDLRPCRequestNotification"},"Classes/SDLRPCRequest.html#/c:objc(cs)SDLRPCRequest(py)correlationID":{"name":"correlationID","abstract":"<p>A unique id assigned to message sent to Core. The Correlation ID is used to map a request to its response.</p>","parent_name":"SDLRPCRequest"},"Classes/SDLRPCPermissionStatus.html#/c:objc(cs)SDLRPCPermissionStatus(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC.</p>","parent_name":"SDLRPCPermissionStatus"},"Classes/SDLRPCPermissionStatus.html#/c:objc(cs)SDLRPCPermissionStatus(py)rpcAllowed":{"name":"rpcAllowed","abstract":"<p>Whether or not the RPC is allowed.</p>","parent_name":"SDLRPCPermissionStatus"},"Classes/SDLRPCPermissionStatus.html#/c:objc(cs)SDLRPCPermissionStatus(py)rpcParameters":{"name":"rpcParameters","abstract":"<p>Holds a dictionary of RPC parameters and objects of an NSNumber<BOOL> specifying if that RPC parameter is currently allowed</p>","parent_name":"SDLRPCPermissionStatus"},"Classes/SDLRPCPermissionStatus.html#/c:objc(cs)SDLRPCPermissionStatus(im)initWithRPCName:isRPCAllowed:rpcParameters:":{"name":"-initWithRPCName:isRPCAllowed:rpcParameters:","abstract":"<p>Initializes a SDLRPCPermissionStatus object.</p>","parent_name":"SDLRPCPermissionStatus"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(py)notification":{"name":"notification","abstract":"<p>The notification within the userinfo dictionary</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)initWithName:object:rpcNotification:":{"name":"-initWithName:object:rpcNotification:","abstract":"<p>Create an NSNotification object caontaining an SDLRPCNotification</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationMemberOfClass:":{"name":"-isNotificationMemberOfClass:","abstract":"<p>Returns whether or not the containing notification is equal to a class, not including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCNotificationNotification.html#/c:objc(cs)SDLRPCNotificationNotification(im)isNotificationKindOfClass:":{"name":"-isNotificationKindOfClass:","abstract":"<p>Returns whether or not the containing notification is a kind of class, including subclasses.</p>","parent_name":"SDLRPCNotificationNotification"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getFunctionName":{"name":"-getFunctionName","abstract":"<p>Returns the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setFunctionName:":{"name":"-setFunctionName:","abstract":"<p>Sets the function name.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)getParameters:":{"name":"-getParameters:","abstract":"<p>Returns the value associated with the provided key. If the key does not exist, null is returned.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(im)setParameters:value:":{"name":"-setParameters:value:","abstract":"<p>Sets a key-value pair using the function name as the key.</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)bulkData":{"name":"bulkData","abstract":"<p>The data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)name":{"name":"name","abstract":"<p>The name of the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)parameters":{"name":"parameters","abstract":"<p>The JSON-RPC parameters</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRPCMessage.html#/c:objc(cs)SDLRPCMessage(py)messageType":{"name":"messageType","abstract":"<p>The type of data in the message</p>","parent_name":"SDLRPCMessage"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithRed:green:blue:":{"name":"-initWithRed:green:blue:","abstract":"<p>Create an SDL color object with red / green / blue values between 0-255</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(im)initWithColor:":{"name":"-initWithColor:","abstract":"<p>Create an SDL color object with a UIColor object.</p>","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)red":{"name":"red","abstract":"<p>The red value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)green":{"name":"green","abstract":"<p>The green value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRGBColor.html#/c:objc(cs)SDLRGBColor(py)blue":{"name":"blue","abstract":"<p>The blue value of the RGB color","parent_name":"SDLRGBColor"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(im)initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:":{"name":"-initWithProgramService:radioText:clockText:programIdentification:programType:trafficProgramIdentification:trafficAnnouncementIdentification:region:","abstract":"<p>Convenience init</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programService":{"name":"programService","abstract":"<p>Program Service Name</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)radioText":{"name":"radioText","abstract":"<p>Radio Text</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)clockText":{"name":"clockText","abstract":"<p>The clock text in UTC format as YYYY-MM-DDThh:mm:ss.sTZD</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programIdentification":{"name":"programIdentification","abstract":"<p>Program Identification - the call sign for the radio station</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)programType":{"name":"programType","abstract":"<p>The program type - The region should be used to differentiate between EU","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficProgramIdentification":{"name":"trafficProgramIdentification","abstract":"<p>Traffic Program Identification - Identifies a station that offers traffic</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)trafficAnnouncementIdentification":{"name":"trafficAnnouncementIdentification","abstract":"<p>Traffic Announcement Identification - Indicates an ongoing traffic announcement</p>","parent_name":"SDLRDSData"},"Classes/SDLRDSData.html#/c:objc(cs)SDLRDSData(py)region":{"name":"region","abstract":"<p>Region</p>","parent_name":"SDLRDSData"},"Classes/SDLPutFileResponse.html#/c:objc(cs)SDLPutFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available in SDL Core for the registered app. If the transfer has systemFile enabled, then the value will be set to 0 automatically.</p>","parent_name":"SDLPutFileResponse"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)init":{"name":"-init","abstract":"<p>Init</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:":{"name":"-initWithFileName:fileType:","abstract":"<p>Convenience init for creating a putfile with a name and file format.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:":{"name":"-initWithFileName:fileType:persistentFile:","abstract":"<p>Convenience init for creating a putfile with a name, file format, and persistance.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:crc:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(im)initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:":{"name":"-initWithFileName:fileType:persistentFile:systemFile:offset:length:bulkData:","abstract":"<p>Convenience init for creating a putfile that is part of a multiple frame payload. A CRC checksum is calculated for the bulk data.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>File reference name</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)sdlFileName":{"name":"sdlFileName","abstract":"<p>File reference name</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)fileType":{"name":"fileType","abstract":"<p>A FileType value representing a selected file type</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)persistentFile":{"name":"persistentFile","abstract":"<p>A value to indicates if the file is meant to persist between sessions / ignition cycles. If set to TRUE, then the system will aim to persist this file through session / cycles. While files with this designation will have priority over others, they are subject to deletion by the system at any time. In the event of automatic deletion by the system, the app will receive a rejection and have to resend the file. If omitted, the value will be set to false.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)systemFile":{"name":"systemFile","abstract":"<p>Indicates if the file is meant to be passed through core to elsewhere on the system. If set to TRUE, then the system will instead pass the data thru as it arrives to a predetermined area outside of core.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)offset":{"name":"offset","abstract":"<p>Offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)length":{"name":"length","abstract":"<p>Length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded</p>","parent_name":"SDLPutFile"},"Classes/SDLPutFile.html#/c:objc(cs)SDLPutFile(py)crc":{"name":"crc","abstract":"<p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>","parent_name":"SDLPutFile"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(im)initWithAppServiceRecord:":{"name":"-initWithAppServiceRecord:","abstract":"<p>Convenience init.</p>","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppServiceResponse.html#/c:objc(cs)SDLPublishAppServiceResponse(py)appServiceRecord":{"name":"appServiceRecord","abstract":"<p>If the request was successful, this object will be the current status of the service record for the published service. This will include the Core supplied service ID.</p>","parent_name":"SDLPublishAppServiceResponse"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(im)initWithAppServiceManifest:":{"name":"-initWithAppServiceManifest:","abstract":"<p>Convenience init.</p>","parent_name":"SDLPublishAppService"},"Classes/SDLPublishAppService.html#/c:objc(cs)SDLPublishAppService(py)appServiceManifest":{"name":"appServiceManifest","abstract":"<p>The manifest of the service that wishes to be published.","parent_name":"SDLPublishAppService"},"Classes/SDLPresetBankCapabilities.html#/c:objc(cs)SDLPresetBankCapabilities(py)onScreenPresetsAvailable":{"name":"onScreenPresetsAvailable","abstract":"<p>If Onscreen custom presets are available.</p>","parent_name":"SDLPresetBankCapabilities"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(im)initWithFirstTouch:secondTouch:":{"name":"-initWithFirstTouch:secondTouch:","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)firstTouch":{"name":"firstTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)secondTouch":{"name":"secondTouch","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)distance":{"name":"distance","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)center":{"name":"center","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPinchGesture.html#/c:objc(cs)SDLPinchGesture(py)isValid":{"name":"isValid","abstract":"<p>@abstract","parent_name":"SDLPinchGesture"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(im)initWithDialNumber:":{"name":"-initWithDialNumber:","abstract":"<p>Convenience init for defining the phone capability</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPhoneCapability.html#/c:objc(cs)SDLPhoneCapability(py)dialNumberEnabled":{"name":"dialNumberEnabled","abstract":"<p>Whether or not the DialNumber RPC is enabled.</p>","parent_name":"SDLPhoneCapability"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(py)requiresEncryption":{"name":"requiresEncryption","abstract":"<p>Flag indicating if the app requires an encryption service to be active.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>Start the manager with a completion block that will be called when startup completes. This is used internally. To use an SDLPermissionManager, you should use the manager found on <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLManager.html\">SDLManager</a></code>.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager. This method is used internally.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCAllowed:":{"name":"-isRPCAllowed:","abstract":"<p>Determine if an individual RPC is allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isRPCNameAllowed:":{"name":"-isRPCNameAllowed:","abstract":"<p>Determine if an individual RPC is allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCs:":{"name":"-groupStatusOfRPCs:","abstract":"<p>Determine if all RPCs are allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)groupStatusOfRPCPermissions:":{"name":"-groupStatusOfRPCPermissions:","abstract":"<p>Determine if all RPCs are allowed for the current HMI level</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusOfRPCs:":{"name":"-statusOfRPCs:","abstract":"<p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)statusesOfRPCPermissions:":{"name":"-statusesOfRPCPermissions:","abstract":"<p>Retrieve a dictionary with keys that are the passed in RPC names, and objects of an NSNumber<BOOL> specifying if that RPC is currently allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)addObserverForRPCs:groupType:withHandler:":{"name":"-addObserverForRPCs:groupType:withHandler:","abstract":"<p>Add an observer for specified RPC names, with a callback that will be called whenever the value changes, as well as immediately with the current status.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)subscribeToRPCPermissions:groupType:withHandler:":{"name":"-subscribeToRPCPermissions:groupType:withHandler:","abstract":"<p>Subscribe to specified RPC names, with a callback that will be called whenever the value changes. Unlike addObserverForRPCs:groupType:withHandler:, the callback will only return immediately if the groupType is set to SDLPermissionGroupTypeAny or if the groupType is set to SDLPermissionGroupTypeAllAllowed and all RPCs in the rpcNames parameter are allowed.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeAllObservers":{"name":"-removeAllObservers","abstract":"<p>Remove every current observer</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)removeObserverForIdentifier:":{"name":"-removeObserverForIdentifier:","abstract":"<p>Remove block observers for the specified RPC</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)rpcRequiresEncryption:":{"name":"-rpcRequiresEncryption:","abstract":"<p>Check whether or not an RPC needs encryption.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)rpcNameRequiresEncryption:":{"name":"-rpcNameRequiresEncryption:","abstract":"<p>Check whether or not an RPC needs encryption.</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionManager.html#/c:objc(cs)SDLPermissionManager(im)isPermissionParameterAllowed:parameter:":{"name":"-isPermissionParameterAllowed:parameter:","abstract":"<p>Check whether a parameter of an RPC is allowed</p>","parent_name":"SDLPermissionManager"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC in the policy table.</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)hmiPermissions":{"name":"hmiPermissions","abstract":"<p>HMI Permissions for the individual RPC; i.e. which HMI levels may it be used in</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)parameterPermissions":{"name":"parameterPermissions","abstract":"<p>RPC parameters for the individual RPC</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionItem.html#/c:objc(cs)SDLPermissionItem(py)requireEncryption":{"name":"requireEncryption","abstract":"<p>Describes whether or not the RPC needs encryption</p>","parent_name":"SDLPermissionItem"},"Classes/SDLPermissionElement.html#/c:objc(cs)SDLPermissionElement(py)rpcName":{"name":"rpcName","abstract":"<p>Name of the individual RPC.","parent_name":"SDLPermissionElement"},"Classes/SDLPermissionElement.html#/c:objc(cs)SDLPermissionElement(py)parameterPermissions":{"name":"parameterPermissions","abstract":"<p>RPC parameters for the individual RPC</p>","parent_name":"SDLPermissionElement"},"Classes/SDLPermissionElement.html#/c:objc(cs)SDLPermissionElement(im)initWithRPCName:parameterPermissions:":{"name":"-initWithRPCName:parameterPermissions:","abstract":"<p>Creates a new permission element.</p>","parent_name":"SDLPermissionElement"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)choiceID":{"name":"choiceID","abstract":"<p>ID of the choice that was selected in response to PerformInteraction. Only is valid if general result is &ldquo;success:true&rdquo;.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)manualTextEntry":{"name":"manualTextEntry","abstract":"<p>Manually entered text selection, e.g. through keyboard. Can be returned in lieu of choiceID, depending on the trigger source.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteractionResponse.html#/c:objc(cs)SDLPerformInteractionResponse(py)triggerSource":{"name":"triggerSource","abstract":"<p>A <em>SDLTriggerSource</em> object which will be shown in the HMI. Only is valid if resultCode is SUCCESS.</p>","parent_name":"SDLPerformInteractionResponse"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:":{"name":"-initWithInitialText:interactionMode:interactionChoiceSetIDList:cancelID:","abstract":"<p>Convenience init for creating a basic display or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:":{"name":"-initWithInitialText:initialPrompt:interactionMode:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:timeout:vrHelp:interactionLayout:cancelID:","abstract":"<p>Convenience init for setting all parameters of a display or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetId:":{"name":"-initWithInteractionChoiceSetId:","abstract":"<p>Convenience init for setting the a single visual or voice-recognition menu choice.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInteractionChoiceSetIdList:":{"name":"-initWithInteractionChoiceSetIdList:","abstract":"<p>Convenience init for setting the a visual or voice-recognition menu choices.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu with one choice.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetID:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu with one choice and VR help items.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout and VR help items. Prompts are created from the passed strings.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialPrompt:initialText:interactionChoiceSetIDList:helpPrompt:timeoutPrompt:interactionMode:timeout:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout. Prompts are created from the passed strings.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:","abstract":"<p>Convenience init for creating a visual or voice-recognition menu using the default display layout.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(im)initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:":{"name":"-initWithInitialChunks:initialText:interactionChoiceSetIDList:helpChunks:timeoutChunks:interactionMode:timeout:vrHelp:interactionLayout:","abstract":"<p>Convenience init for setting all parameters of a visual or voice-recognition menu.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialText":{"name":"initialText","abstract":"<p>Text to be displayed first.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>This is the TTS prompt spoken to the user at the start of an interaction.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionMode":{"name":"interactionMode","abstract":"<p>For application-requested interactions, this mode indicates the method in which the user is notified and uses the interaction. Users can choose either only by voice (VR_ONLY), by tactile selection from the menu (MANUAL_ONLY), or by either mode (BOTH).</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionChoiceSetIDList":{"name":"interactionChoiceSetIDList","abstract":"<p>List of interaction choice set IDs to use with an interaction.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Help text. This is the spoken text when a user speaks &ldquo;help&rdquo; while the interaction is occurring.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Timeout text. This text is spoken when a VR interaction times out.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)timeout":{"name":"timeout","abstract":"<p>Timeout in milliseconds. Applies only to the menu portion of the interaction. The VR timeout will be handled by the platform. If omitted a standard value of 10 seconds is used.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)vrHelp":{"name":"vrHelp","abstract":"<p>Suggested voice recognition help items to display on-screen during a perform interaction. If omitted on supported displays, the default generated list of suggested choices shall be displayed.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)interactionLayout":{"name":"interactionLayout","abstract":"<p>For tactile interaction modes (MANUAL_ONLY, or BOTH), the layout mode of how the choices are presented.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformInteraction.html#/c:objc(cs)SDLPerformInteraction(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific perform interaction to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLPerformInteraction"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:":{"name":"-initWithSamplingRate:bitsPerSample:audioType:maxDuration:audioDataHandler:","abstract":"<p>Convenience init to perform an audio pass thru</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(im)initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:":{"name":"-initWithInitialPrompt:audioPassThruDisplayText1:audioPassThruDisplayText2:samplingRate:bitsPerSample:audioType:maxDuration:muteAudio:audioDataHandler:","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>initial prompt which will be spoken before opening the audio pass","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText1":{"name":"audioPassThruDisplayText1","abstract":"<p>a line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioPassThruDisplayText2":{"name":"audioPassThruDisplayText2","abstract":"<p>A line of text displayed during audio capture","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)samplingRate":{"name":"samplingRate","abstract":"<p>A samplingRate</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)maxDuration":{"name":"maxDuration","abstract":"<p>the maximum duration of audio recording in milliseconds</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>the quality the audio is recorded - 8 bit or 16 bit</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioType":{"name":"audioType","abstract":"<p>an audioType</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)muteAudio":{"name":"muteAudio","abstract":"<p>a Boolean value representing if the current audio source should be","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAudioPassThru.html#/c:objc(cs)SDLPerformAudioPassThru(py)audioDataHandler":{"name":"audioDataHandler","abstract":"<p>A handler that will be called whenever an <code>onAudioPassThru</code> notification is received.</p>","parent_name":"SDLPerformAudioPassThru"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(im)initWithServiceSpecificResult:":{"name":"-initWithServiceSpecificResult:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteractionResponse.html#/c:objc(cs)SDLPerformAppServiceInteractionResponse(py)serviceSpecificResult":{"name":"serviceSpecificResult","abstract":"<p>The service can provide specific result strings to the consumer through this param.</p>","parent_name":"SDLPerformAppServiceInteractionResponse"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:":{"name":"-initWithServiceUri:serviceID:originApp:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(im)initWithServiceUri:serviceID:originApp:requestServiceActive:":{"name":"-initWithServiceUri:serviceID:originApp:requestServiceActive:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceUri":{"name":"serviceUri","abstract":"<p>Fully qualified URI based on a predetermined scheme provided by the app service. SDL makes no guarantee that this URI is correct.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)serviceID":{"name":"serviceID","abstract":"<p>The service ID that the app consumer wishes to send this URI.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)originApp":{"name":"originApp","abstract":"<p>This string is the appID of the app requesting the app service provider take the specific action.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLPerformAppServiceInteraction.html#/c:objc(cs)SDLPerformAppServiceInteraction(py)requestServiceActive":{"name":"requestServiceActive","abstract":"<p>This flag signals the requesting consumer would like this service to become the active primary service of the destination&rsquo;s type.</p>","parent_name":"SDLPerformAppServiceInteraction"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all parameters that are permitted for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLParameterPermissions.html#/c:objc(cs)SDLParameterPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all parameters that are prohibited for this given RPC.</p>","parent_name":"SDLParameterPermissions"},"Classes/SDLOnWayPointChange.html#/c:objc(cs)SDLOnWayPointChange(py)waypoints":{"name":"waypoints","abstract":"<p>Location address for display purposes only</p>","parent_name":"SDLOnWayPointChange"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The cloud app vehicle ID</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnVehicleData.html#/c:objc(cs)SDLOnVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.</p>","parent_name":"SDLOnVehicleData"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)type":{"name":"type","abstract":"<p>The type of touch event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTouchEvent.html#/c:objc(cs)SDLOnTouchEvent(py)event":{"name":"event","abstract":"<p>List of all individual touches involved in this event.</p>","parent_name":"SDLOnTouchEvent"},"Classes/SDLOnTBTClientState.html#/c:objc(cs)SDLOnTBTClientState(py)state":{"name":"state","abstract":"<p>Current State of TBT client</p>","parent_name":"SDLOnTBTClientState"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType":{"name":"requestType","abstract":"<p>The type of system request.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestSubType":{"name":"requestSubType","abstract":"<p>A request subType used when the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)requestType\">requestType</a></code> is <code>OEM_SPECIFIC</code>.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)url":{"name":"url","abstract":"<p>Optional URL for HTTP requests. If blank, the binary data shall be forwarded to the app. If not blank, the binary data shall be forwarded to the url with a provided timeout in seconds.</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)timeout":{"name":"timeout","abstract":"<p>Optional timeout for HTTP requests Required if a URL is provided</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)fileType":{"name":"fileType","abstract":"<p>Optional file type (meant for HTTP file requests).</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemRequest.html#/c:objc(cs)SDLOnSystemRequest(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks</p>","parent_name":"SDLOnSystemRequest"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(im)initWithSystemCapability:":{"name":"-initWithSystemCapability:","abstract":"<p>Convenience init for required parameters</p>","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSystemCapabilityUpdated.html#/c:objc(cs)SDLOnSystemCapabilityUpdated(py)systemCapability":{"name":"systemCapability","abstract":"<p>The system capability that has been updated.</p>","parent_name":"SDLOnSystemCapabilityUpdated"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)URL":{"name":"URL","abstract":"<p>The url</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnSyncPData.html#/c:objc(cs)SDLOnSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>How long until a timeout</p>","parent_name":"SDLOnSyncPData"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allocatedModules":{"name":"allocatedModules","abstract":"<p>@abstract Contains a list (zero or more) of module types that","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)freeModules":{"name":"freeModules","abstract":"<p>@abstract Contains a list (zero or more) of module types that are free to access for the application.</p>","parent_name":"SDLOnRCStatus"},"Classes/SDLOnRCStatus.html#/c:objc(cs)SDLOnRCStatus(py)allowed":{"name":"allowed","abstract":"<p>Issued by SDL to notify the application about remote control status change on SDL","parent_name":"SDLOnRCStatus"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)permissionItem":{"name":"permissionItem","abstract":"<p>Describes change in permissions for a given set of RPCs</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnPermissionsChange.html#/c:objc(cs)SDLOnPermissionsChange(py)requireEncryption":{"name":"requireEncryption","abstract":"<p>Describes whether or not the app needs the encryption permission</p>","parent_name":"SDLOnPermissionsChange"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)driverDistractionStatus":{"name":"driverDistractionStatus","abstract":"<p>Get the current driver distraction status(i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)userSelected":{"name":"userSelected","abstract":"<p>Get user selection status for the application (has the app been selected via hmi or voice command)</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)lockScreenStatus":{"name":"lockScreenStatus","abstract":"<p>Indicates if the lockscreen should be required, optional or off</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLockScreenStatus.html#/c:objc(cs)SDLOnLockScreenStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>Get HMILevel in effect for the application</p>","parent_name":"SDLOnLockScreenStatus"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)language":{"name":"language","abstract":"<p>Current SDL voice engine (VR+TTS) language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnLanguageChange.html#/c:objc(cs)SDLOnLanguageChange(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>Current display language</p>","parent_name":"SDLOnLanguageChange"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)event":{"name":"event","abstract":"<p>The type of keyboard input</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnKeyboardInput.html#/c:objc(cs)SDLOnKeyboardInput(py)data":{"name":"data","abstract":"<p>The current keyboard string input from the user</p>","parent_name":"SDLOnKeyboardInput"},"Classes/SDLOnInteriorVehicleData.html#/c:objc(cs)SDLOnInteriorVehicleData(py)moduleData":{"name":"moduleData","abstract":"<p>The subscribed module data that changed</p>","parent_name":"SDLOnInteriorVehicleData"},"Classes/SDLOnHashChange.html#/c:objc(cs)SDLOnHashChange(py)hashID":{"name":"hashID","abstract":"<p>Calculated hash ID to be referenced during RegisterAppInterface request.</p>","parent_name":"SDLOnHashChange"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>SDLHMILevel in effect for the application</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>Current state of audio streaming for the application. When this parameter has a value of NOT_AUDIBLE, the application must stop streaming audio to SDL.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)videoStreamingState":{"name":"videoStreamingState","abstract":"<p>Current availablility of video streaming for the application. When this parameter is NOT_STREAMABLE, the application must stop video streaming to SDL.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)systemContext":{"name":"systemContext","abstract":"<p>Whether a user-initiated interaction is in-progress (VRSESSION or MENU), or not (MAIN)</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(py)windowID":{"name":"windowID","abstract":"<p>This is the unique ID assigned to the window that this RPC is intended for. If this param is not included, it will be assumed that this request is specifically for the main window on the main display. - see: PredefinedWindows enum.</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnHMIStatus.html#/c:objc(cs)SDLOnHMIStatus(im)initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:":{"name":"-initWithHMILevel:systemContext:audioStreamingState:videoStreamingState:windowID:","abstract":"<p>Initialize an SDLOnHMIStatus RPC with initial parameters</p>","parent_name":"SDLOnHMIStatus"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)URL":{"name":"URL","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded to the provided URL.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnEncodedSyncPData.html#/c:objc(cs)SDLOnEncodedSyncPData(py)Timeout":{"name":"Timeout","abstract":"<p>If blank, the SyncP data shall be forwarded to the app. If not blank, the SyncP data shall be forwarded with the provided timeout in seconds.</p>","parent_name":"SDLOnEncodedSyncPData"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)state":{"name":"state","abstract":"<p>The driver distraction state (i.e. whether driver distraction rules are in effect, or not)</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalEnabled":{"name":"lockScreenDismissalEnabled","abstract":"<p>If enabled, the lock screen will be able to be dismissed while connected to SDL, allowing users the ability to interact with the app.</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnDriverDistraction.html#/c:objc(cs)SDLOnDriverDistraction(py)lockScreenDismissalWarning":{"name":"lockScreenDismissalWarning","abstract":"<p>Warning message to be displayed on the lock screen when dismissal is enabled. This warning should be used to ensure that the user is not the driver of the vehicle, ex. <code>Swipe up to dismiss, acknowledging that you are not the driver.</code>. This parameter must be present if &ldquo;lockScreenDismissalEnabled&rdquo; is set to true.</p>","parent_name":"SDLOnDriverDistraction"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)cmdID":{"name":"cmdID","abstract":"<p>The command ID of the command the user selected. This is the command ID value provided by the application in the SDLAddCommand operation that created the command.</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnCommand.html#/c:objc(cs)SDLOnCommand(py)triggerSource":{"name":"triggerSource","abstract":"<p>Indicates whether command was selected via voice or via a menu selection (using the OK button).</p>","parent_name":"SDLOnCommand"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The button&rsquo;s name</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonPress.html#/c:objc(cs)SDLOnButtonPress(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is &ldquo;CUSTOM_BUTTON&rdquo;, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonPress"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonName":{"name":"buttonName","abstract":"<p>The name of the button</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)buttonEventMode":{"name":"buttonEventMode","abstract":"<p>Indicates whether this is an UP or DOWN event</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnButtonEvent.html#/c:objc(cs)SDLOnButtonEvent(py)customButtonID":{"name":"customButtonID","abstract":"<p>If ButtonName is &ldquo;CUSTOM_BUTTON&rdquo;, this references the integer ID passed by a custom button. (e.g. softButton ID)</p>","parent_name":"SDLOnButtonEvent"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(im)initWithServiceData:":{"name":"-initWithServiceData:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppServiceData.html#/c:objc(cs)SDLOnAppServiceData(py)serviceData":{"name":"serviceData","abstract":"<p>The updated app service data.</p>","parent_name":"SDLOnAppServiceData"},"Classes/SDLOnAppInterfaceUnregistered.html#/c:objc(cs)SDLOnAppInterfaceUnregistered(py)reason":{"name":"reason","abstract":"<p>The reason application&rsquo;s interface was terminated</p>","parent_name":"SDLOnAppInterfaceUnregistered"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:","abstract":"<p>Convenience init to describe an oasis address</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(im)initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:":{"name":"-initWithSubThoroughfare:thoroughfare:locality:administrativeArea:postalCode:countryCode:countryName:subAdministrativeArea:subLocality:","abstract":"<p>Convenience init to describe an oasis address with all parameters</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryName":{"name":"countryName","abstract":"<p>Name of the country (localized)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)countryCode":{"name":"countryCode","abstract":"<p>countryCode of the country(ISO 3166-2)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)postalCode":{"name":"postalCode","abstract":"<p>postalCode of location (PLZ, ZIP, PIN, CAP etc.)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)administrativeArea":{"name":"administrativeArea","abstract":"<p>Portion of country (e.g. state)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subAdministrativeArea":{"name":"subAdministrativeArea","abstract":"<p>Portion of administrativeArea (e.g. county)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)locality":{"name":"locality","abstract":"<p>Hypernym for city/village</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subLocality":{"name":"subLocality","abstract":"<p>Hypernym for district</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)thoroughfare":{"name":"thoroughfare","abstract":"<p>Hypernym for street, road etc.</p>","parent_name":"SDLOasisAddress"},"Classes/SDLOasisAddress.html#/c:objc(cs)SDLOasisAddress(py)subThoroughfare":{"name":"subThoroughfare","abstract":"<p>Portion of thoroughfare (e.g. house number)</p>","parent_name":"SDLOasisAddress"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allResponseNames":{"name":"+allResponseNames","abstract":"<p>All of the possible SDL RPC Response notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNotificationConstants.html#/c:objc(cs)SDLNotificationConstants(cm)allButtonEventNotifications":{"name":"+allButtonEventNotifications","abstract":"<p>All of the possible SDL Button event notification names</p>","parent_name":"SDLNotificationConstants"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(im)initWithAcceptsWayPoints:":{"name":"-initWithAcceptsWayPoints:","abstract":"<p>Convenience init.</p>","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceManifest.html#/c:objc(cs)SDLNavigationServiceManifest(py)acceptsWayPoints":{"name":"acceptsWayPoints","abstract":"<p>Informs the subscriber if this service can actually accept way points.</p>","parent_name":"SDLNavigationServiceManifest"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:":{"name":"-initWithTimestamp:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(im)initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:":{"name":"-initWithTimestamp:origin:destination:destinationETA:instructions:nextInstructionETA:nextInstructionDistance:nextInstructionDistanceScale:prompt:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)timestamp":{"name":"timestamp","abstract":"<p>This is the timestamp of when the data was generated. This is to ensure any time or distance given in the data can accurately be adjusted if necessary.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)origin":{"name":"origin","abstract":"<p>The start location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destination":{"name":"destination","abstract":"<p>The final destination location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)destinationETA":{"name":"destinationETA","abstract":"<p>The estimated time of arrival at the final destination location.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)instructions":{"name":"instructions","abstract":"<p>This array should be ordered with all remaining instructions. The start of this array should always contain the next instruction.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionETA":{"name":"nextInstructionETA","abstract":"<p>The estimated time of arrival at the next destination.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistance":{"name":"nextInstructionDistance","abstract":"<p>The distance to this instruction from current location. This should only be updated ever .1 unit of distance. For more accuracy the consumer can use the GPS location of itself and the next instruction.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)nextInstructionDistanceScale":{"name":"nextInstructionDistanceScale","abstract":"<p>Distance till next maneuver (starting from) from previous maneuver.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationServiceData.html#/c:objc(cs)SDLNavigationServiceData(py)prompt":{"name":"prompt","abstract":"<p>This is a prompt message that should be conveyed to the user through either display or voice (TTS). This param will change often as it should represent the following: approaching instruction, post instruction, alerts that affect the current navigation session, etc.</p>","parent_name":"SDLNavigationServiceData"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:":{"name":"-initWithLocationDetails:action:","abstract":"<p>Convenience init for required parameters</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(im)initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:":{"name":"-initWithLocationDetails:action:eta:bearing:junctionType:drivingSide:details:image:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)locationDetails":{"name":"locationDetails","abstract":"<p>The location details.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)action":{"name":"action","abstract":"<p>The navigation action.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)eta":{"name":"eta","abstract":"<p>The estimated time of arrival.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)bearing":{"name":"bearing","abstract":"<p>The angle at which this instruction takes place. For example, 0 would mean straight, &lt;=45 is bearing right, &gt;= 135 is sharp right, between 45 and 135 is a regular right, and 180 is a U-Turn, etc. </p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)junctionType":{"name":"junctionType","abstract":"<p>The navigation junction type.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)drivingSide":{"name":"drivingSide","abstract":"<p>Used to infer which side of the road this instruction takes place. For a U-Turn (action=TURN, bearing=180) this will determine which direction the turn should take place.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)details":{"name":"details","abstract":"<p>This is a string representation of this instruction, used to display instructions to the users. This is not intended to be read aloud to the users, see the param prompt in <code>NavigationServiceData</code> for that.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationInstruction.html#/c:objc(cs)SDLNavigationInstruction(py)image":{"name":"image","abstract":"<p>An image representation of this instruction.</p>","parent_name":"SDLNavigationInstruction"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(im)initWithSendLocation:waypoints:":{"name":"-initWithSendLocation:waypoints:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)sendLocationEnabled":{"name":"sendLocationEnabled","abstract":"<p>Whether or not the SendLocation RPC is enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLNavigationCapability.html#/c:objc(cs)SDLNavigationCapability(py)getWayPointsEnabled":{"name":"getWayPointsEnabled","abstract":"<p>Whether or not Waypoint related RPCs are enabled.</p>","parent_name":"SDLNavigationCapability"},"Classes/SDLMyKey.html#/c:objc(cs)SDLMyKey(py)e911Override":{"name":"e911Override","abstract":"<p>Indicates whether e911 override is on. References signal &ldquo;MyKey_e911Override_St&rdquo;. See VehicleDataStatus.</p>","parent_name":"SDLMyKey"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(im)initWithMajorVersion:minorVersion:patchVersion:":{"name":"-initWithMajorVersion:minorVersion:patchVersion:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)majorVersion":{"name":"majorVersion","abstract":"<p>The major version indicates versions that is not-compatible to previous versions</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)minorVersion":{"name":"minorVersion","abstract":"<p>The minor version indicates a change to a previous version that should still allow to be run on an older version (with limited functionality)</p>","parent_name":"SDLMsgVersion"},"Classes/SDLMsgVersion.html#/c:objc(cs)SDLMsgVersion(py)patchVersion":{"name":"patchVersion","abstract":"<p>Allows backward-compatible fixes to the API without increasing the minor version of the interface</p>","parent_name":"SDLMsgVersion"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)moduleId":{"name":"moduleId","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)location":{"name":"location","abstract":"<p>Location of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)serviceArea":{"name":"serviceArea","abstract":"<p>Service area of a module.","parent_name":"SDLModuleInfo"},"Classes/SDLModuleInfo.html#/c:objc(cs)SDLModuleInfo(py)allowMultipleAccess":{"name":"allowMultipleAccess","abstract":"<p>Allow multiple users/apps to access the module or not</p>","parent_name":"SDLModuleInfo"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithRadioControlData:":{"name":"-initWithRadioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithClimateControlData:":{"name":"-initWithClimateControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithAudioControlData:":{"name":"-initWithAudioControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithLightControlData:":{"name":"-initWithLightControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithHMISettingsControlData:":{"name":"-initWithHMISettingsControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with hmi settings data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(im)initWithSeatControlData:":{"name":"-initWithSeatControlData:","abstract":"<p>Constructs a newly allocated SDLModuleData object with seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleType":{"name":"moduleType","abstract":"<p>The moduleType indicates which type of data should be changed and identifies which data object exists in this struct.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)radioControlData":{"name":"radioControlData","abstract":"<p>The radio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)climateControlData":{"name":"climateControlData","abstract":"<p>The climate control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)seatControlData":{"name":"seatControlData","abstract":"<p>The seat control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)audioControlData":{"name":"audioControlData","abstract":"<p>The audio control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)lightControlData":{"name":"lightControlData","abstract":"<p>The light control data</p>","parent_name":"SDLModuleData"},"Classes/SDLModuleData.html#/c:objc(cs)SDLModuleData(py)hmiSettingsControlData":{"name":"hmiSettingsControlData","abstract":"<p>The hmi control data</p>","parent_name":"SDLModuleData"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:":{"name":"-initWithTextFieldTypes:mainField2:","abstract":"<p>Constructs a newly allocated SDLMetadataType object with NSArrays</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(im)initWithTextFieldTypes:mainField2:mainField3:mainField4:":{"name":"-initWithTextFieldTypes:mainField2:mainField3:mainField4:","abstract":"<p>Constructs a newly allocated SDLMetadataType with all parameters</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField1":{"name":"mainField1","abstract":"<p>The type of data contained in the &ldquo;mainField1&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField2":{"name":"mainField2","abstract":"<p>The type of data contained in the &ldquo;mainField2&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField3":{"name":"mainField3","abstract":"<p>The type of data contained in the &ldquo;mainField3&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMetadataTags.html#/c:objc(cs)SDLMetadataTags(py)mainField4":{"name":"mainField4","abstract":"<p>The type of data contained in the &ldquo;mainField4&rdquo; text field.</p>","parent_name":"SDLMetadataTags"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:":{"name":"-initWithMenuName:","abstract":"<p>Convenience init with required parameters.</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(im)initWithMenuName:parentId:position:":{"name":"-initWithMenuName:parentId:position:","abstract":"<p>Convenience init with all parameters.</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)parentID":{"name":"parentID","abstract":"<p>The unique ID of an existing submenu to which a command will be added</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)position":{"name":"position","abstract":"<p>The position within the items of the parent Command Menu</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuParams.html#/c:objc(cs)SDLMenuParams(py)menuName":{"name":"menuName","abstract":"<p>The menu name which appears in menu, representing this command</p>","parent_name":"SDLMenuParams"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)mainMenuLayout":{"name":"mainMenuLayout","abstract":"<p>Changes the default main menu layout. Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLMenuLayoutList\">SDLMenuLayoutList</a></code>.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(py)defaultSubmenuLayout":{"name":"defaultSubmenuLayout","abstract":"<p>Changes the default submenu layout. To change this for an individual submenu, set the <code>menuLayout</code> property on the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuCell.html\">SDLMenuCell</a></code> initializer for creating a cell with sub-cells. Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbConstants.html#/c:@SDLMenuLayoutList\">SDLMenuLayoutList</a></code>.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuConfiguration.html#/c:objc(cs)SDLMenuConfiguration(im)initWithMainMenuLayout:defaultSubmenuLayout:":{"name":"-initWithMainMenuLayout:defaultSubmenuLayout:","abstract":"<p>Initialize a new menu configuration with a main menu layout and a default submenu layout which can be overriden per-submenu if desired.</p>","parent_name":"SDLMenuConfiguration"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)title":{"name":"title","abstract":"<p>The cell&rsquo;s text to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)icon":{"name":"icon","abstract":"<p>The cell&rsquo;s icon to be displayed</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>The strings the user can say to activate this voice command</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)handler":{"name":"handler","abstract":"<p>The handler that will be called when the command is activated</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells":{"name":"subCells","abstract":"<p>If this is non-nil, this cell will be a sub-menu button, displaying the subcells in a menu when pressed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)submenuLayout":{"name":"submenuLayout","abstract":"<p>The layout in which the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(py)subCells\">subCells</a></code> will be displayed.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:voiceCommands:handler:":{"name":"-initWithTitle:icon:voiceCommands:handler:","abstract":"<p>Create a menu cell that has no subcells.</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:subCells:":{"name":"-initWithTitle:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:subCells:":{"name":"-initWithTitle:icon:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMenuCell.html#/c:objc(cs)SDLMenuCell(im)initWithTitle:icon:submenuLayout:subCells:":{"name":"-initWithTitle:icon:submenuLayout:subCells:","abstract":"<p>Create a menu cell that has subcells and when selected will go into a deeper part of the menu</p>","parent_name":"SDLMenuCell"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"<p>Convenience init</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(im)initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:":{"name":"-initWithMediaType:mediaImage:mediaTitle:mediaArtist:mediaAlbum:playlistName:isExplicit:trackPlaybackProgress:trackPlaybackDuration:queuePlaybackProgress:queuePlaybackDuration:queueCurrentTrackNumber:queueTotalTrackCount:","abstract":"<p>Convenience init</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaImage":{"name":"mediaImage","abstract":"<p>Sets the media image associated with the currently playing media","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaType":{"name":"mediaType","abstract":"<p>The type of the currently playing or paused track.</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaTitle":{"name":"mediaTitle","abstract":"<p>Music: The name of the current track","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaArtist":{"name":"mediaArtist","abstract":"<p>Music: The name of the current album artist","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)mediaAlbum":{"name":"mediaAlbum","abstract":"<p>Music: The name of the current album","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)playlistName":{"name":"playlistName","abstract":"<p>Music: The name of the playlist or radio station, if the user is playing from a playlist, otherwise, Null","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)isExplicit":{"name":"isExplicit","abstract":"<p>Whether or not the content currently playing (e.g. the track, episode, or book) contains explicit content.</p>","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackProgress":{"name":"trackPlaybackProgress","abstract":"<p>Music: The current progress of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)trackPlaybackDuration":{"name":"trackPlaybackDuration","abstract":"<p>Music: The total duration of the track in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackProgress":{"name":"queuePlaybackProgress","abstract":"<p>Music: The current progress of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queuePlaybackDuration":{"name":"queuePlaybackDuration","abstract":"<p>Music: The total duration of the playback queue in seconds","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueCurrentTrackNumber":{"name":"queueCurrentTrackNumber","abstract":"<p>Music: The current number (1 based) of the track in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMediaServiceData.html#/c:objc(cs)SDLMediaServiceData(py)queueTotalTrackCount":{"name":"queueTotalTrackCount","abstract":"<p>Music: The total number of tracks in the playback queue","parent_name":"SDLMediaServiceData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(im)initWithMassageMode:massageZone:":{"name":"-initWithMassageMode:massageZone:","abstract":"<p>@abstract Constructs a newly allocated SDLMassageModeData object with massageMode and massageZone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageMode":{"name":"massageMode","abstract":"<p>@abstract mode of a massage zone</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageModeData.html#/c:objc(cs)SDLMassageModeData(py)massageZone":{"name":"massageZone","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageModeData"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(im)initWithMassageCushion:firmness:":{"name":"-initWithMassageCushion:firmness:","abstract":"<p>Constructs a newly allocated SDLMassageCushionFirmness object with cushion and firmness</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)cushion":{"name":"cushion","abstract":"<p>@abstract cushion of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLMassageCushionFirmness.html#/c:objc(cs)SDLMassageCushionFirmness(py)firmness":{"name":"firmness","abstract":"<p>@abstract zone of a multi-contour massage seat.</p>","parent_name":"SDLMassageCushionFirmness"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)configuration":{"name":"configuration","abstract":"<p>The configuration the manager was set up with.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)hmiLevel":{"name":"hmiLevel","abstract":"<p>The current HMI level of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)audioStreamingState":{"name":"audioStreamingState","abstract":"<p>The current audio streaming state of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemContext":{"name":"systemContext","abstract":"<p>The current system context of the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)fileManager":{"name":"fileManager","abstract":"<p>The file manager to be used by the running app.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)permissionManager":{"name":"permissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)streamManager":{"name":"streamManager","abstract":"<p>The streaming media manager to be used for starting video sessions.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)screenManager":{"name":"screenManager","abstract":"<p>The screen manager for sending UI related RPCs.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)systemCapabilityManager":{"name":"systemCapabilityManager","abstract":"<p>Centralized manager for retrieving all system capabilities.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)registerResponse":{"name":"registerResponse","abstract":"<p>The response of a register call after it has been received.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)authToken":{"name":"authToken","abstract":"<p>The auth token, if received. This should be used to log into a user account. Primarily used for cloud apps with companion app stores.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)delegate":{"name":"delegate","abstract":"<p>The manager&rsquo;s delegate.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(py)pendingRPCTransactions":{"name":"pendingRPCTransactions","abstract":"<p>The currently pending RPC request send transactions</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)initWithConfiguration:delegate:":{"name":"-initWithConfiguration:delegate:","abstract":"<p>Initialize the manager with a configuration. Call <code>startWithHandler</code> to begin waiting for a connection.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startWithReadyHandler:":{"name":"-startWithReadyHandler:","abstract":"<p>Start the manager, which will tell it to start looking for a connection. Once one does, it will automatically run the setup process and call the readyBlock when done.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)stop":{"name":"-stop","abstract":"<p>Stop the manager, it will disconnect if needed and no longer look for a connection. You probably don&rsquo;t need to call this method ever.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)startRPCEncryption":{"name":"-startRPCEncryption","abstract":"<p>Start the encryption lifecycle manager, which will attempt to open a secure service.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRPC:":{"name":"-sendRPC:","abstract":"<p>Send an RPC of type <code>Response</code>, <code>Notification</code> or <code>Request</code>. Responses and notifications sent to Core do not a response back from Core. Each request sent to Core does get a response, so if you need the response and/or error, call <code>sendRequest:withResponseHandler:</code> instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:":{"name":"-sendRequest:","abstract":"<p>Send an RPC request and don&rsquo;t bother with the response or error. If you need the response or error, call sendRequest:withCompletionHandler: instead.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequest:withResponseHandler:":{"name":"-sendRequest:withResponseHandler:","abstract":"<p>Send an RPC request and set a completion handler that will be called with the response when the response returns.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendRequests:progressHandler:completionHandler:":{"name":"-sendRequests:progressHandler:completionHandler:","abstract":"<p>Send all of the requests given as quickly as possible, but in order. Call the completionHandler after all requests have either failed or given a response.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)sendSequentialRequests:progressHandler:completionHandler:":{"name":"-sendSequentialRequests:progressHandler:completionHandler:","abstract":"<p>Send all of the requests one at a time, with the next one going out only after the previous one has received a response. Call the completionHandler after all requests have either failed or given a response.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withBlock:":{"name":"-subscribeToRPC:withBlock:","abstract":"<p>Subscribe to callbacks about a particular RPC request, notification, or response with a block callback.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)subscribeToRPC:withObserver:selector:":{"name":"-subscribeToRPC:withObserver:selector:","abstract":"<p>Subscribe to callbacks about a particular RPC request, notification, or response with a selector callback.</p>","parent_name":"SDLManager"},"Classes/SDLManager.html#/c:objc(cs)SDLManager(im)unsubscribeFromRPC:withObserver:":{"name":"-unsubscribeFromRPC:withObserver:","abstract":"<p>Unsubscribe to callbacks about a particular RPC request, notification, or response.</p>","parent_name":"SDLManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)modules":{"name":"modules","abstract":"<p>Active log modules</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)targets":{"name":"targets","abstract":"<p>Active log targets</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)filters":{"name":"filters","abstract":"<p>Active log filters</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use this log level</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)formatType":{"name":"formatType","abstract":"<p>Active log format</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)asynchronous":{"name":"asynchronous","abstract":"<p>Whether or not verbose, debug, and warning logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs are logged asynchronously. If logs are performed async, then some may be missed in the event of a terminating signal such as an exception, but performance is improved and your code will not be slowed by logging.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(py)disableAssertions":{"name":"disableAssertions","abstract":"<p>Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)dateFormatter":{"name":"dateFormatter","abstract":"<p>Active date formatter</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cpy)logQueue":{"name":"logQueue","abstract":"<p>The queue asynchronously logged logs are logged on. Say that 10 times fast.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)sharedManager":{"name":"+sharedManager","abstract":"<p>The singleton object</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)setConfiguration:":{"name":"+setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager&rsquo;s sharedManager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)setConfiguration:":{"name":"-setConfiguration:","abstract":"<p>Sets a configuration to be used by the log manager. This is generally for internal use and you should set your configuration using SDLManager&rsquo;s startWithConfiguration: method.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log to the sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:formatMessage:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"+logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logWithLevel:timestamp:file:functionName:line:queue:message:":{"name":"-logWithLevel:timestamp:file:functionName:line:queue:message:","abstract":"<p>Log to this log manager&rsquo;s active log targets. This is used internally to log. If you want to create a log, you should use macros such as <code>SDLLogD</code>.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"+logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"<p>Log to this sharedManager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logBytes:direction:timestamp:file:functionName:line:queue:":{"name":"-logBytes:direction:timestamp:file:functionName:line:queue:","abstract":"<p>Log to this manager&rsquo;s active log targets. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(cm)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"+logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log an error to the sharedManager&rsquo;s active log targets and assert. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogManager.html#/c:objc(cs)SDLLogManager(im)logAssertWithTimestamp:file:functionName:line:queue:formatMessage:":{"name":"-logAssertWithTimestamp:file:functionName:line:queue:formatMessage:","abstract":"<p>Log an error to this manager&rsquo;s active log targets and assert. This is used internally to log.</p>","parent_name":"SDLLogManager"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(py)filter":{"name":"filter","abstract":"<p>A block that takes in a log model and returns whether or not the log passes the filter and should therefore be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(im)initWithCustomFilter:":{"name":"-initWithCustomFilter:","abstract":"<p>Create a new filter with a custom filter block. The filter block will take a log model and return a BOOL of pass / fail.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingString:caseSensitive:":{"name":"+filterByDisallowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs not containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingString:caseSensitive:":{"name":"+filterByAllowingString:caseSensitive:","abstract":"<p>Returns a filter that only allows logs containing the passed string within their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingRegex:":{"name":"+filterByDisallowingRegex:","abstract":"<p>Returns a filter that only allows logs not passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingRegex:":{"name":"+filterByAllowingRegex:","abstract":"<p>Returns a filter that only allows logs passing the passed regex against their message.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingModules:":{"name":"+filterByDisallowingModules:","abstract":"<p>Returns a filter that only allows logs not within the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingModules:":{"name":"+filterByAllowingModules:","abstract":"<p>Returns a filter that only allows logs of the specified file modules to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByDisallowingFileNames:":{"name":"+filterByDisallowingFileNames:","abstract":"<p>Returns a filter that only allows logs not within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFilter.html#/c:objc(cs)SDLLogFilter(cm)filterByAllowingFileNames:":{"name":"+filterByAllowingFileNames:","abstract":"<p>Returns a filter that only allows logs within the specified files to be logged.</p>","parent_name":"SDLLogFilter"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)name":{"name":"name","abstract":"<p>The name of the this module, e.g. &ldquo;Transport&rdquo;</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)files":{"name":"files","abstract":"<p>All of the files contained within this module. When a log is logged, the <code>__FILE__</code> (in Obj-C) or <code>#file</code> (in Swift) is automatically captured and checked to see if any module has a file in this set that matches. If it does, it will be logged using the module&rsquo;s log level and the module&rsquo;s name will be printed in the formatted log.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(py)logLevel":{"name":"logLevel","abstract":"<p>The custom level of the log. This is <code>SDLLogLevelDefault</code> (whatever the current global log level is) by default.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)init":{"name":"-init","abstract":"<p>This method is unavailable and may not be used.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:level:":{"name":"-initWithName:files:level:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name, set of files, and associated log level.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)initWithName:files:":{"name":"-initWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(cm)moduleWithName:files:":{"name":"+moduleWithName:files:","abstract":"<p>Returns an initialized <code>SDLLogFileModule</code> that contains a custom name and set of files. The logging level is the same as the current global logging file by using <code>SDLLogLevelDefault</code>.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogFileModule.html#/c:objc(cs)SDLLogFileModule(im)containsFile:":{"name":"-containsFile:","abstract":"<p>Returns whether or not this module contains a given file.</p>","parent_name":"SDLLogFileModule"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)modules":{"name":"modules","abstract":"<p>Any custom logging modules used by the developer&rsquo;s code. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)targets":{"name":"targets","abstract":"<p>Where the logs will attempt to output. Defaults to Console.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)filters":{"name":"filters","abstract":"<p>What log filters will run over this session. Defaults to none.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)formatType":{"name":"formatType","abstract":"<p>How detailed of logs will be output. Defaults to Default.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)asynchronous":{"name":"asynchronous","abstract":"<p>Whether or not logs will be run on a separate queue, asynchronously, allowing the following code to run before the log completes. Or if it will occur synchronously, which will prevent logs from being missed, but will slow down surrounding code. Defaults to YES.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)errorsAsynchronous":{"name":"errorsAsynchronous","abstract":"<p>Whether or not error logs will be dispatched to loggers asynchronously. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)disableAssertions":{"name":"disableAssertions","abstract":"<p>Whether or not assert logs will fire assertions in DEBUG mode. Assertions are always disabled in RELEASE builds. If assertions are disabled, only an error log will fire instead. Defaults to NO.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(py)globalLogLevel":{"name":"globalLogLevel","abstract":"<p>Any modules that do not have an explicitly specified level will by default use the global log level. Defaults to Error.","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>A default logger for production. This sets the format type to Default, the log level to Error, and only enables the ASL logger.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLogConfiguration.html#/c:objc(cs)SDLLogConfiguration(cm)debugConfiguration":{"name":"+debugConfiguration","abstract":"<p>A debug logger for use in development. This sets the format type to Detailed, the log level to Debug, and enables the Console and ASL loggers.</p>","parent_name":"SDLLogConfiguration"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)appIcon":{"name":"appIcon","abstract":"<p>The app&rsquo;s icon. This will be set by the lock screen configuration.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)vehicleIcon":{"name":"vehicleIcon","abstract":"<p>The vehicle&rsquo;s designated icon. This will be set by the lock screen manager when it is notified that a lock screen icon has been downloaded.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The designated background color set in the lock screen configuration, or the default SDL gray-blue.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(py)lockedLabelText":{"name":"lockedLabelText","abstract":"<p>The locked label string. This will be set by the lock screen manager to inform the user about the dismissable state.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)addDismissGestureWithCallback:":{"name":"-addDismissGestureWithCallback:","abstract":"<p>Adds a swipe gesture to the lock screen view controller.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenViewController.html#/c:objc(cs)SDLLockScreenViewController(im)removeDismissGesture":{"name":"-removeDismissGesture","abstract":"<p>Remove swipe gesture to the lock screen view controller.</p>","parent_name":"SDLLockScreenViewController"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)displayMode":{"name":"displayMode","abstract":"<p>Describes when the lock screen will be displayed. Defaults to <code>SDLLockScreenConfigurationDisplayModeRequiredOnly</code>.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showInOptionalState":{"name":"showInOptionalState","abstract":"<p>Whether or not the lock screen should be shown in the &ldquo;lock screen optional&rdquo; state. Defaults to NO.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableDismissGesture":{"name":"enableDismissGesture","abstract":"<p>If YES, then the lock screen can be dismissed with a downward swipe on compatible head units. Requires a connection of SDL 6.0+ and the head unit to enable the feature. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)showDeviceLogo":{"name":"showDeviceLogo","abstract":"<p>If YES, then the lockscreen will show the vehicle&rsquo;s logo if the vehicle has made it available. If NO, then the lockscreen will not show the vehicle logo. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)enableAutomaticLockScreen":{"name":"enableAutomaticLockScreen","abstract":"<p>If YES, the lock screen should be managed by SDL and automatically engage when necessary. If NO, then the lock screen will never be engaged. Defaults to YES.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)backgroundColor":{"name":"backgroundColor","abstract":"<p>The background color of the lock screen. This could be a branding color, or leave at the default for a dark blue-gray.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>Your app icon as it will appear on the lock screen.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(py)customViewController":{"name":"customViewController","abstract":"<p>A custom view controller that the lock screen will manage the presentation of.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)disabledConfiguration":{"name":"+disabledConfiguration","abstract":"<p>Use this configuration if you wish to manage a lock screen yourself. This may be useful if the automatic presentation feature of SDLLockScreenManager is failing for some reason.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfiguration":{"name":"+enabledConfiguration","abstract":"<p>Use this configuration for the basic default lock screen. A custom app icon will not be used.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithAppIcon:backgroundColor:":{"name":"+enabledConfigurationWithAppIcon:backgroundColor:","abstract":"<p>Use this configuration to provide a custom lock screen icon and a custom background color, or nil if you wish to use the default background color. This will use the default lock screen layout.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLockScreenConfiguration.html#/c:objc(cs)SDLLockScreenConfiguration(cm)enabledConfigurationWithViewController:":{"name":"+enabledConfigurationWithViewController:","abstract":"<p>Use this configuration if you wish to provide your own view controller for the lock screen. This view controller&rsquo;s presentation and dismissal will still be managed by the lock screen manager. Note that you may subclass SDLLockScreenViewController and pass it here to continue to have the vehicle icon set to your view controller by the manager.</p>","parent_name":"SDLLockScreenConfiguration"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:":{"name":"-initWithCoordinate:","abstract":"<p>Convenience init for location coordinate.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(im)initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:":{"name":"-initWithCoordinate:locationName:addressLines:locationDescription:phoneNumber:locationImage:searchAddress:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)coordinate":{"name":"coordinate","abstract":"<p>Latitude/Longitude of the location</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationName":{"name":"locationName","abstract":"<p>Name of location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)addressLines":{"name":"addressLines","abstract":"<p>Location address for display purposes only.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationDescription":{"name":"locationDescription","abstract":"<p>Description intended location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)phoneNumber":{"name":"phoneNumber","abstract":"<p>Phone number of location / establishment.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)locationImage":{"name":"locationImage","abstract":"<p>Image / icon of intended location.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationDetails.html#/c:objc(cs)SDLLocationDetails(py)searchAddress":{"name":"searchAddress","abstract":"<p>Address to be used by navigation engines for search.</p>","parent_name":"SDLLocationDetails"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(im)initWithLatitudeDegrees:longitudeDegrees:":{"name":"-initWithLatitudeDegrees:longitudeDegrees:","abstract":"<p>Convenience init for location coordinates</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLLocationCoordinate.html#/c:objc(cs)SDLLocationCoordinate(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>Latitude of the location</p>","parent_name":"SDLLocationCoordinate"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)filenames":{"name":"filenames","abstract":"<p>An array of all filenames resident on the module for the given registered app. If omitted, then no files currently reside on the system.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLListFilesResponse.html#/c:objc(cs)SDLListFilesResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>Provides the total local space available on the module for the registered app.</p>","parent_name":"SDLListFilesResponse"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:":{"name":"-initWithId:status:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:status:density:color:":{"name":"-initWithId:status:density:color:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(im)initWithId:lightStatus:lightDensity:lightColor:":{"name":"-initWithId:lightStatus:lightDensity:lightColor:","abstract":"<p>Constructs a newly allocated SDLLightState object with given parameters</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)id":{"name":"id","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)status":{"name":"status","abstract":"<p>@abstract Reflects the status of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)density":{"name":"density","abstract":"<p>@abstract Reflects the density of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightState.html#/c:objc(cs)SDLLightState(py)color":{"name":"color","abstract":"<p>@abstract Reflects the color of Light.</p>","parent_name":"SDLLightState"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(im)initWithLightStates:":{"name":"-initWithLightStates:","abstract":"<p>Constructs a newly allocated SDLLightControlData object with lightState</p>","parent_name":"SDLLightControlData"},"Classes/SDLLightControlData.html#/c:objc(cs)SDLLightControlData(py)lightState":{"name":"lightState","abstract":"<p>@abstract An array of LightNames and their current or desired status.","parent_name":"SDLLightControlData"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:supportedLights:":{"name":"-initWithModuleName:supportedLights:","abstract":"<p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(im)initWithModuleName:moduleInfo:supportedLights:":{"name":"-initWithModuleName:moduleInfo:supportedLights:","abstract":"<p>Constructs a newly allocated SDLLightControlCapabilities object with given parameters</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the light control module.","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)supportedLights":{"name":"supportedLights","abstract":"<p>@abstract An array of available LightCapabilities that are controllable.</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightControlCapabilities.html#/c:objc(cs)SDLLightControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLLightControlCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with the name of the light or group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(im)initWithName:densityAvailable:colorAvailable:statusAvailable:":{"name":"-initWithName:densityAvailable:colorAvailable:statusAvailable:","abstract":"<p>Constructs a newly allocated SDLLightCapabilities object with given parameters</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)name":{"name":"name","abstract":"<p>@abstract The name of a light or a group of lights</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)densityAvailable":{"name":"densityAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s density can be set remotely (similar to a dimmer).</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)colorAvailable":{"name":"colorAvailable","abstract":"<p>@abstract Indicates if the light&rsquo;s color can be set remotely by using the RGB color space.</p>","parent_name":"SDLLightCapabilities"},"Classes/SDLLightCapabilities.html#/c:objc(cs)SDLLightCapabilities(py)statusAvailable":{"name":"statusAvailable","abstract":"<p>@abstract Indicates if the status (ON/OFF) can be set remotely.","parent_name":"SDLLightCapabilities"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)appName":{"name":"appName","abstract":"<p>The full name of the app to that the configuration should be updated to.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfigurationUpdate.html#/c:objc(cs)SDLLifecycleConfigurationUpdate(im)initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:":{"name":"-initWithAppName:shortAppName:ttsName:voiceRecognitionCommandNames:","abstract":"<p>Initializes and returns a newly allocated lifecycle configuration update object with the specified app data.","parent_name":"SDLLifecycleConfigurationUpdate"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:appId:":{"name":"+defaultConfigurationWithAppName:appId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)defaultConfigurationWithAppName:fullAppId:":{"name":"+defaultConfigurationWithAppName:fullAppId:","abstract":"<p>A production configuration that runs using IAP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:appId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:appId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(cm)debugConfigurationWithAppName:fullAppId:ipAddress:port:":{"name":"+debugConfigurationWithAppName:fullAppId:ipAddress:port:","abstract":"<p>A debug configuration that runs using TCP. Additional functionality should be customized on the properties.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugMode":{"name":"tcpDebugMode","abstract":"<p>Whether or not debug mode is enabled</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugIPAddress":{"name":"tcpDebugIPAddress","abstract":"<p>The ip address at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)tcpDebugPort":{"name":"tcpDebugPort","abstract":"<p>The port at which the library will look for a server</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appName":{"name":"appName","abstract":"<p>The full name of the app</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appId":{"name":"appId","abstract":"<p>The app id. This must be the same as the app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)fullAppId":{"name":"fullAppId","abstract":"<p>The full app id. This must be the same as the full app id received from the SDL developer portal.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)resumeHash":{"name":"resumeHash","abstract":"<p>A hash id which should be passed to the remote system in the RegisterAppInterface</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)isMedia":{"name":"isMedia","abstract":"<p>This is an automatically set based on the app type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType":{"name":"appType","abstract":"<p>The application type</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)additionalAppTypes":{"name":"additionalAppTypes","abstract":"<p>Additional application types beyond <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appType\">appType</a></code></p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)language":{"name":"language","abstract":"<p>The default language to use</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)languagesSupported":{"name":"languagesSupported","abstract":"<p>An array of all the supported languages</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)appIcon":{"name":"appIcon","abstract":"<p>The application icon to be used on an app launching screen</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)shortAppName":{"name":"shortAppName","abstract":"<p>An abbrevited application name that will be used on the app launching screen if the full one would be truncated</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)ttsName":{"name":"ttsName","abstract":"<p>A Text to Speech String for voice recognition of the mobile application name.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)voiceRecognitionCommandNames":{"name":"voiceRecognitionCommandNames","abstract":"<p>Additional voice recognition commands. May not interfere with any other app name or global commands.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)dayColorScheme":{"name":"dayColorScheme","abstract":"<p>The color scheme to use when the head unit is in a light / day situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)nightColorScheme":{"name":"nightColorScheme","abstract":"<p>The color scheme to use when the head unit is in a dark / night situation.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumProtocolVersion":{"name":"minimumProtocolVersion","abstract":"<p>The minimum protocol version that will be permitted to connect. This defaults to 1.0.0. If the protocol version of the head unit connected is below this version, the app will disconnect with an EndService protocol message and will not register.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)minimumRPCVersion":{"name":"minimumRPCVersion","abstract":"<p>The minimum RPC version that will be permitted to connect. This defaults to 1.0.0. If the RPC version of the head unit connected is below this version, an UnregisterAppInterface will be sent.</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLLifecycleConfiguration.html#/c:objc(cs)SDLLifecycleConfiguration(py)allowedSecondaryTransports":{"name":"allowedSecondaryTransports","abstract":"<p>Which transports are permitted to be used as secondary transports. A secondary transport is a transport that is connected as an alternate, higher bandwidth transport for situations when a low-bandwidth primary transport (such as Bluetooth) will restrict certain features (such as video streaming navigation).</p>","parent_name":"SDLLifecycleConfiguration"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:","abstract":"<p>Create a Keyboard Properties RPC object</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(im)initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:":{"name":"-initWithLanguage:layout:keypressMode:limitedCharacterList:autoCompleteText:autoCompleteList:","abstract":"<p>Create a Keyboard Properties RPC object</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)language":{"name":"language","abstract":"<p>The keyboard language</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keyboardLayout":{"name":"keyboardLayout","abstract":"<p>Desired keyboard layout</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)keypressMode":{"name":"keypressMode","abstract":"<p>Desired keypress mode.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)limitedCharacterList":{"name":"limitedCharacterList","abstract":"<p>Array of keyboard characters to enable. All omitted characters will be greyed out (disabled) on the keyboard. If omitted, the entire keyboard will be enabled.</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteText":{"name":"autoCompleteText","abstract":"<p>Allows an app to prepopulate the text field with a suggested or completed entry as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLKeyboardProperties.html#/c:objc(cs)SDLKeyboardProperties(py)autoCompleteList":{"name":"autoCompleteList","abstract":"<p>Allows an app to show a list of possible autocomplete suggestions as the user types</p>","parent_name":"SDLKeyboardProperties"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionWidth":{"name":"resolutionWidth","abstract":"<p>Resolution width</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(py)resolutionHeight":{"name":"resolutionHeight","abstract":"<p>Resolution height</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageResolution.html#/c:objc(cs)SDLImageResolution(im)initWithWidth:height:":{"name":"-initWithWidth:height:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLImageResolution"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)name":{"name":"name","abstract":"<p>The name that identifies the field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageTypeSupported":{"name":"imageTypeSupported","abstract":"<p>The image types that are supported in this field.</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(py)imageResolution":{"name":"imageResolution","abstract":"<p>The image resolution of this field</p>","parent_name":"SDLImageField"},"Classes/SDLImageField.html#/c:objc(cs)SDLImageField(im)initWithName:imageTypeSupported:imageResolution:":{"name":"-initWithName:imageTypeSupported:imageResolution:","abstract":"<p>Convenience initalizer for the ImageField RPC struct</p>","parent_name":"SDLImageField"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:":{"name":"-initWithName:ofType:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:ofType:isTemplate:":{"name":"-initWithName:ofType:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:":{"name":"-initWithName:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithName:isTemplate:":{"name":"-initWithName:isTemplate:","abstract":"<p>Convenience init for displaying a dynamic image. The image must be uploaded to SDL Core before being displayed.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticImageValue:":{"name":"-initWithStaticImageValue:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(im)initWithStaticIconName:":{"name":"-initWithStaticIconName:","abstract":"<p>Convenience init for displaying a static image. Static images are already on-board SDL Core and can be used by providing the image&rsquo;s value.</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)value":{"name":"value","abstract":"<p>The static hex icon value or the binary image file name identifier (sent by SDLPutFile)</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)imageType":{"name":"imageType","abstract":"<p>Describes whether the image is static or dynamic</p>","parent_name":"SDLImage"},"Classes/SDLImage.html#/c:objc(cs)SDLImage(py)isTemplate":{"name":"isTemplate","abstract":"<p>Indicates that this image can be (re)colored by the HMI to best fit the current color scheme.</p>","parent_name":"SDLImage"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)lowBeamsOn":{"name":"lowBeamsOn","abstract":"<p>Low beams are on or off.</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)highBeamsOn":{"name":"highBeamsOn","abstract":"<p>High beams are on or off</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHeadLampStatus.html#/c:objc(cs)SDLHeadLampStatus(py)ambientLightSensorStatus":{"name":"ambientLightSensorStatus","abstract":"<p>Status of the ambient light senser</p>","parent_name":"SDLHeadLampStatus"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(im)initWithId:rect:":{"name":"-initWithId:rect:","abstract":"<p>Convenience init with all parameters</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)id":{"name":"id","abstract":"<p>A user control spatial identifier</p>","parent_name":"SDLHapticRect"},"Classes/SDLHapticRect.html#/c:objc(cs)SDLHapticRect(py)rect":{"name":"rect","abstract":"<p>The position of the haptic rectangle to be highlighted. The center of this rectangle will be &ldquo;touched&rdquo; when a press occurs.</p>","parent_name":"SDLHapticRect"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(im)initWithDisplaymode:temperatureUnit:distanceUnit:":{"name":"-initWithDisplaymode:temperatureUnit:distanceUnit:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)displayMode":{"name":"displayMode","abstract":"<p>@abstract Display the Display Mode used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)temperatureUnit":{"name":"temperatureUnit","abstract":"<p>@abstract Display the temperature unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlData.html#/c:objc(cs)SDLHMISettingsControlData(py)distanceUnit":{"name":"distanceUnit","abstract":"<p>@abstract Display the distance unit used HMI setting</p>","parent_name":"SDLHMISettingsControlData"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with moduleName</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(im)initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:":{"name":"-initWithModuleName:moduleInfo:distanceUnitAvailable:temperatureUnitAvailable:displayModeUnitAvailable:","abstract":"<p>Constructs a newly allocated SDLHMISettingsControlCapabilities object with given parameters</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the hmi setting module.","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)distanceUnitAvailable":{"name":"distanceUnitAvailable","abstract":"<p>@abstract Availability of the control of distance unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)temperatureUnitAvailable":{"name":"temperatureUnitAvailable","abstract":"<p>@abstract Availability of the control of temperature unit.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)displayModeUnitAvailable":{"name":"displayModeUnitAvailable","abstract":"<p>@abstract Availability of the control of HMI display mode.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMISettingsControlCapabilities.html#/c:objc(cs)SDLHMISettingsControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLHMISettingsControlCapabilities"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)allowed":{"name":"allowed","abstract":"<p>A set of all HMI levels that are permitted for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMIPermissions.html#/c:objc(cs)SDLHMIPermissions(py)userDisallowed":{"name":"userDisallowed","abstract":"<p>A set of all HMI levels that are prohibited for this given RPC</p>","parent_name":"SDLHMIPermissions"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)navigation":{"name":"navigation","abstract":"<p>Availability of built in Nav. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)phoneCall":{"name":"phoneCall","abstract":"<p>Availability of built in phone. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)videoStreaming":{"name":"videoStreaming","abstract":"<p>Availability of built in video streaming. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)remoteControl":{"name":"remoteControl","abstract":"<p>Availability of built in remote control. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)appServices":{"name":"appServices","abstract":"<p>Availability of app services. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)displays":{"name":"displays","abstract":"<p>Availability of displays. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLHMICapabilities.html#/c:objc(cs)SDLHMICapabilities(py)seatLocation":{"name":"seatLocation","abstract":"<p>Availability of seatLocation. True: Available, False: Not Available</p>","parent_name":"SDLHMICapabilities"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)col":{"name":"col","abstract":"<p>Required, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)row":{"name":"row","abstract":"<p>Required, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)level":{"name":"level","abstract":"<p>Optional, Integer, -1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)colspan":{"name":"colspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)rowspan":{"name":"rowspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGrid.html#/c:objc(cs)SDLGrid(py)levelspan":{"name":"levelspan","abstract":"<p>Optional, Integer, 1 - 100</p>","parent_name":"SDLGrid"},"Classes/SDLGetWayPointsResponse.html#/c:objc(cs)SDLGetWayPointsResponse(py)waypoints":{"name":"waypoints","abstract":"<p>Provides additional human readable info regarding the result.</p>","parent_name":"SDLGetWayPointsResponse"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Convenience init to get waypoints.</p>","parent_name":"SDLGetWayPoints"},"Classes/SDLGetWayPoints.html#/c:objc(cs)SDLGetWayPoints(py)waypointType":{"name":"waypointType","abstract":"<p>To request for either the destination","parent_name":"SDLGetWayPoints"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)gps":{"name":"gps","abstract":"<p>The car current GPS coordinates</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)speed":{"name":"speed","abstract":"<p>The vehicle speed in kilometers per hour</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)rpm":{"name":"rpm","abstract":"<p>The number of revolutions per minute of the engine.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>The fuel level in the tank (percentage)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>The fuel level state</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)fuelRange":{"name":"fuelRange","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>The instantaneous fuel consumption in microlitres</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>The external temperature in degrees celsius.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)vin":{"name":"vin","abstract":"<p>The Vehicle Identification Number</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)prndl":{"name":"prndl","abstract":"<p>The current gear shift state of the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)tirePressure":{"name":"tirePressure","abstract":"<p>The current pressure warnings for the user&rsquo;s vehicle</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)odometer":{"name":"odometer","abstract":"<p>Odometer reading in km</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)beltStatus":{"name":"beltStatus","abstract":"<p>The status of the seat belts</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>The body information including power modes</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>The IVI system status including signal and battery strength</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)driverBraking":{"name":"driverBraking","abstract":"<p>The status of the brake pedal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>The status of the wipers</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>Status of the head lamps</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>The estimated percentage (0% - 100%) of remaining oil life of the engine</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)engineTorque":{"name":"engineTorque","abstract":"<p>Torque value for engine (in Nm) on non-diesel variants</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>Accelerator pedal position (percentage depressed)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>Current angle of the steering wheel (in deg)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>Emergency Call notification and confirmation data</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>The status of the air bags</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>Information related to an emergency event (and if it occurred)</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>The status modes of the cluster</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)myKey":{"name":"myKey","abstract":"<p>Information related to the MyKey feature</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>The status of the electronic parking brake</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)turnSignal":{"name":"turnSignal","abstract":"<p>The status of the turn signal</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>The cloud app vehicle ID</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleDataResponse.html#/c:objc(cs)SDLGetVehicleDataResponse(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data item for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleDataResponse"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:emergencyEvent:engineTorque:externalTemperature:fuelLevel:fuelLevelState:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:":{"name":"-initWithAccelerationPedalPosition:airbagStatus:beltStatus:bodyInformation:cloudAppVehicleID:clusterModeStatus:deviceStatus:driverBraking:eCallInfo:electronicParkBrakeStatus:emergencyEvent:engineOilLife:engineTorque:externalTemperature:fuelLevel:fuelLevelState:fuelRange:gps:headLampStatus:instantFuelConsumption:myKey:odometer:prndl:rpm:speed:steeringWheelAngle:tirePressure:turnSignal:vin:wiperStatus:","abstract":"<p>Convenience init for getting data for all possible vehicle data items.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)gps":{"name":"gps","abstract":"<p>A boolean value. If true, requests GPS data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)speed":{"name":"speed","abstract":"<p>A boolean value. If true, requests Speed data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)rpm":{"name":"rpm","abstract":"<p>A boolean value. If true, requests RPM data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel":{"name":"fuelLevel","abstract":"<p>A boolean value. If true, requests Fuel Level data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelLevel_State":{"name":"fuelLevel_State","abstract":"<p>A boolean value. If true, requests Fuel Level State data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)fuelRange":{"name":"fuelRange","abstract":"<p>A boolean value. If true, requests Fuel Range data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)instantFuelConsumption":{"name":"instantFuelConsumption","abstract":"<p>A boolean value. If true, requests Instant Fuel Consumption data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)externalTemperature":{"name":"externalTemperature","abstract":"<p>A boolean value. If true, requests External Temperature data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)vin":{"name":"vin","abstract":"<p>A boolean value. If true, requests the Vehicle Identification Number.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)prndl":{"name":"prndl","abstract":"<p>A boolean value. If true, requests PRNDL data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)tirePressure":{"name":"tirePressure","abstract":"<p>A boolean value. If true, requests Tire Pressure data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)odometer":{"name":"odometer","abstract":"<p>A boolean value. If true, requests Odometer data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)beltStatus":{"name":"beltStatus","abstract":"<p>A boolean value. If true, requests Belt Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)bodyInformation":{"name":"bodyInformation","abstract":"<p>A boolean value. If true, requests Body Information data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)deviceStatus":{"name":"deviceStatus","abstract":"<p>A boolean value. If true, requests Device Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)driverBraking":{"name":"driverBraking","abstract":"<p>A boolean value. If true, requests Driver Braking data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)wiperStatus":{"name":"wiperStatus","abstract":"<p>A boolean value. If true, requests Wiper Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)headLampStatus":{"name":"headLampStatus","abstract":"<p>A boolean value. If true, requests Head Lamp Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineOilLife":{"name":"engineOilLife","abstract":"<p>A boolean value. If true, requests Engine Oil Life data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)engineTorque":{"name":"engineTorque","abstract":"<p>A boolean value. If true, requests Engine Torque data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)accPedalPosition":{"name":"accPedalPosition","abstract":"<p>A boolean value. If true, requests Acc Pedal Position data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)steeringWheelAngle":{"name":"steeringWheelAngle","abstract":"<p>A boolean value. If true, requests Steering Wheel Angle data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)eCallInfo":{"name":"eCallInfo","abstract":"<p>A boolean value. If true, requests Emergency Call Info data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)airbagStatus":{"name":"airbagStatus","abstract":"<p>A boolean value. If true, requests Air Bag Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)emergencyEvent":{"name":"emergencyEvent","abstract":"<p>A boolean value. If true, requests Emergency Event (if it occurred) data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)clusterModeStatus":{"name":"clusterModeStatus","abstract":"<p>A boolean value. If true, requests Cluster Mode Status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)myKey":{"name":"myKey","abstract":"<p>A boolean value. If true, requests MyKey data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)electronicParkBrakeStatus":{"name":"electronicParkBrakeStatus","abstract":"<p>A boolean value. If true, requests Electronic Parking Brake status data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)turnSignal":{"name":"turnSignal","abstract":"<p>A boolean value. If true, requests Turn Signal data.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(py)cloudAppVehicleID":{"name":"cloudAppVehicleID","abstract":"<p>A boolean value. If true, requests the Cloud App Vehicle ID.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)setOEMCustomVehicleData:withVehicleDataState:":{"name":"-setOEMCustomVehicleData:withVehicleDataState:","abstract":"<p>Sets the OEM custom vehicle data state for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetVehicleData.html#/c:objc(cs)SDLGetVehicleData(im)getOEMCustomVehicleData:":{"name":"-getOEMCustomVehicleData:","abstract":"<p>Gets the OEM custom vehicle data value for any given OEM custom vehicle data name.</p>","parent_name":"SDLGetVehicleData"},"Classes/SDLGetSystemCapabilityResponse.html#/c:objc(cs)SDLGetSystemCapabilityResponse(py)systemCapability":{"name":"systemCapability","abstract":"<p>The requested system capability, of the type that was sent in the request</p>","parent_name":"SDLGetSystemCapabilityResponse"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:":{"name":"-initWithType:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(im)initWithType:subscribe:":{"name":"-initWithType:subscribe:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)systemCapabilityType":{"name":"systemCapabilityType","abstract":"<p>The type of system capability to get more information on</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetSystemCapability.html#/c:objc(cs)SDLGetSystemCapability(py)subscribe":{"name":"subscribe","abstract":"<p>Flag to subscribe to updates of the supplied service capability type. If true, the requester will be subscribed. If false, the requester will not be subscribed and be removed as a subscriber if it was previously subscribed.</p>","parent_name":"SDLGetSystemCapability"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)moduleData":{"name":"moduleData","abstract":"<p>The requested data</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataResponse(py)isSubscribed":{"name":"isSubscribed","abstract":"<p>It is a conditional-mandatory parameter: must be returned in case &ldquo;subscribe&rdquo; parameter was present in the related request.</p>","parent_name":"SDLGetInteriorVehicleDataResponse"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html#/c:objc(cs)SDLGetInteriorVehicleDataConsentResponse(py)allowed":{"name":"allowed","abstract":"<p>This array has the same size as &ldquo;moduleIds&rdquo; in the request; each element corresponding to one moduleId","parent_name":"SDLGetInteriorVehicleDataConsentResponse"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(im)initWithModuleType:moduleIds:":{"name":"-initWithModuleType:moduleIds:","abstract":"<p>Convenience init to get consent to control a module</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleType":{"name":"moduleType","abstract":"<p>The module type that the app requests to control.</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleDataConsent.html#/c:objc(cs)SDLGetInteriorVehicleDataConsent(py)moduleIds":{"name":"moduleIds","abstract":"<p>Ids of a module of same type, published by System Capability.</p>","parent_name":"SDLGetInteriorVehicleDataConsent"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:moduleId:":{"name":"-initWithModuleType:moduleId:","abstract":"<p>Convenience init to get information of a particular module type with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:moduleId:":{"name":"-initAndSubscribeToModuleType:moduleId:","abstract":"<p>Convenience init to get information and subscribe to a particular module type with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:moduleId:":{"name":"-initAndUnsubscribeToModuleType:moduleId:","abstract":"<p>Convenience init to unsubscribe from particular module with a module ID.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initWithModuleType:":{"name":"-initWithModuleType:","abstract":"<p>Convenience init to get information of a particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndSubscribeToModuleType:":{"name":"-initAndSubscribeToModuleType:","abstract":"<p>Convenience init to get information and subscribe to a particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(im)initAndUnsubscribeToModuleType:":{"name":"-initAndUnsubscribeToModuleType:","abstract":"<p>Convenience init to unsubscribe from particular module type.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleType":{"name":"moduleType","abstract":"<p>The type of a RC module to retrieve module data from the vehicle.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetInteriorVehicleData.html#/c:objc(cs)SDLGetInteriorVehicleData(py)subscribe":{"name":"subscribe","abstract":"<p>If subscribe is true, the head unit will register OnInteriorVehicleData notifications for the requested module (moduleId and moduleType).","parent_name":"SDLGetInteriorVehicleData"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(im)initWithOffset:length:fileType:crc:":{"name":"-initWithOffset:length:fileType:crc:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)fileType":{"name":"fileType","abstract":"<p>File type that is being sent in response.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFileResponse.html#/c:objc(cs)SDLGetFileResponse(py)crc":{"name":"crc","abstract":"<p>Additional CRC32 checksum to protect data integrity up to 512 Mbits.</p>","parent_name":"SDLGetFileResponse"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:":{"name":"-initWithFileName:appServiceId:fileType:","abstract":"<p>Convenience init for sending a small file.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(im)initWithFileName:appServiceId:fileType:offset:length:":{"name":"-initWithFileName:appServiceId:fileType:offset:length:","abstract":"<p>Convenience init for sending a large file in multiple data chunks.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileName":{"name":"fileName","abstract":"<p>File name that should be retrieved.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)appServiceId":{"name":"appServiceId","abstract":"<p>ID of the service that should have uploaded the requested file.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)fileType":{"name":"fileType","abstract":"<p>Selected file type.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)offset":{"name":"offset","abstract":"<p>Optional offset in bytes for resuming partial data chunks.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetFile.html#/c:objc(cs)SDLGetFile(py)length":{"name":"length","abstract":"<p>Optional length in bytes for resuming partial data chunks. If offset is set to 0, then length is the total length of the file to be downloaded.</p>","parent_name":"SDLGetFile"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)ecuHeader":{"name":"ecuHeader","abstract":"<p>2 byte ECU Header for DTC response (as defined in VHR_Layout_Specification_DTCs.pdf)</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCsResponse.html#/c:objc(cs)SDLGetDTCsResponse(py)dtc":{"name":"dtc","abstract":"<p>Array of all reported DTCs on module (ecuHeader contains information if list is truncated). Each DTC is represented by 4 bytes (3 bytes of data and 1 byte status as defined in VHR_Layout_Specification_DTCs.pdf).</p>","parent_name":"SDLGetDTCsResponse"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:":{"name":"-initWithECUName:","abstract":"<p>Convenience init</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(im)initWithECUName:mask:":{"name":"-initWithECUName:mask:","abstract":"<p>Convenience init with all properties</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)ecuName":{"name":"ecuName","abstract":"<p>a name of the module to receive the DTC form","parent_name":"SDLGetDTCs"},"Classes/SDLGetDTCs.html#/c:objc(cs)SDLGetDTCs(py)dtcMask":{"name":"dtcMask","abstract":"<p>DTC Mask Byte to be sent in diagnostic request to module. NSNumber* dtcMask Minvalue:0; Maxvalue:255</p>","parent_name":"SDLGetDTCs"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(im)initWithProperties:":{"name":"-initWithProperties:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppPropertiesResponse.html#/c:objc(cs)SDLGetCloudAppPropertiesResponse(py)properties":{"name":"properties","abstract":"<p>The requested cloud application properties.</p>","parent_name":"SDLGetCloudAppPropertiesResponse"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetCloudAppProperties.html#/c:objc(cs)SDLGetCloudAppProperties(py)appID":{"name":"appID","abstract":"<p>The id of the cloud app.</p>","parent_name":"SDLGetCloudAppProperties"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(im)initWithAppServiceData:":{"name":"-initWithAppServiceData:","abstract":"<p>Convenience init.</p>","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceDataResponse.html#/c:objc(cs)SDLGetAppServiceDataResponse(py)serviceData":{"name":"serviceData","abstract":"<p>Contains all the current data of the app service.</p>","parent_name":"SDLGetAppServiceDataResponse"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"<p>Convenience init for service type.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndSubscribeToAppServiceType:":{"name":"-initAndSubscribeToAppServiceType:","abstract":"<p>Convenience init for subscribing to a service type.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(im)initAndUnsubscribeToAppServiceType:":{"name":"-initAndUnsubscribeToAppServiceType:","abstract":"<p>Convenience init for unsubscribing to a service type</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See <code>AppServiceType</code> for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGetAppServiceData.html#/c:objc(cs)SDLGetAppServiceData(py)subscribe":{"name":"subscribe","abstract":"<p>If true, the consumer is requesting to subscribe to all future updates from the service publisher. If false, the consumer doesn&rsquo;t wish to subscribe and should be unsubscribed if it was previously subscribed.</p>","parent_name":"SDLGetAppServiceData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)longitudeDegrees":{"name":"longitudeDegrees","abstract":"<p>longitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)latitudeDegrees":{"name":"latitudeDegrees","abstract":"<p>latitude degrees</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcYear":{"name":"utcYear","abstract":"<p>utc year</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMonth":{"name":"utcMonth","abstract":"<p>utc month</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcDay":{"name":"utcDay","abstract":"<p>utc day</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcHours":{"name":"utcHours","abstract":"<p>utc hours</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcMinutes":{"name":"utcMinutes","abstract":"<p>utc minutes</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)utcSeconds":{"name":"utcSeconds","abstract":"<p>utc seconds</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)compassDirection":{"name":"compassDirection","abstract":"<p>Optional, Potential Compass Directions</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)pdop":{"name":"pdop","abstract":"<p>The 3D positional dilution of precision.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)hdop":{"name":"hdop","abstract":"<p>The horizontal dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)vdop":{"name":"vdop","abstract":"<p>the vertical dilution of precision</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)actual":{"name":"actual","abstract":"<p>What the coordinates are based on</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)satellites":{"name":"satellites","abstract":"<p>The number of satellites in view</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)dimension":{"name":"dimension","abstract":"<p>The supported dimensions of the GPS</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)altitude":{"name":"altitude","abstract":"<p>Altitude in meters</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)heading":{"name":"heading","abstract":"<p>Heading based on the GPS data.</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)speed":{"name":"speed","abstract":"<p>Speed in KPH</p>","parent_name":"SDLGPSData"},"Classes/SDLGPSData.html#/c:objc(cs)SDLGPSData(py)shifted":{"name":"shifted","abstract":"<p>True, if GPS lat/long, time, and altitude have been purposefully shifted (requires a proprietary algorithm to unshift).","parent_name":"SDLGPSData"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(cm)sharedInstance":{"name":"+sharedInstance","abstract":"<p>The shared object for pulling function id information</p>","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionNameForId:":{"name":"-functionNameForId:","abstract":"<p>Gets the function name for a given SDL RPC function ID</p>","parent_name":"SDLFunctionID"},"Classes/SDLFunctionID.html#/c:objc(cs)SDLFunctionID(im)functionIdForName:":{"name":"-functionIdForName:","abstract":"<p>Gets the function ID for a given SDL RPC function name</p>","parent_name":"SDLFunctionID"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)type":{"name":"type","abstract":"<p>The vehicle&rsquo;s fuel type</p>","parent_name":"SDLFuelRange"},"Classes/SDLFuelRange.html#/c:objc(cs)SDLFuelRange(py)range":{"name":"range","abstract":"<p>The estimate range in KM the vehicle can travel based on fuel level and consumption.</p>","parent_name":"SDLFuelRange"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)artworkRetryCount":{"name":"artworkRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLArtwork.html\">SDLArtwork</a></code> files in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(py)fileRetryCount":{"name":"fileRetryCount","abstract":"<p>Defines the number of times the file manager will attempt to reupload general <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLFile.html\">SDLFile</a></code>s in the event of a failed upload to Core.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>Creates a default file manager configuration.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)init":{"name":"-init","abstract":"<p>Use <code>defaultConfiguration</code> instead</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManagerConfiguration.html#/c:objc(cs)SDLFileManagerConfiguration(im)initWithArtworkRetryCount:fileRetryCount:":{"name":"-initWithArtworkRetryCount:fileRetryCount:","abstract":"<p>Creates a file manager configuration with customized upload retry counts.</p>","parent_name":"SDLFileManagerConfiguration"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)remoteFileNames":{"name":"remoteFileNames","abstract":"<p>A set of all names of files known on the remote head unit. Known files can be used or deleted on the remote system.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)bytesAvailable":{"name":"bytesAvailable","abstract":"<p>The number of bytes still available for files for this app.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)currentState":{"name":"currentState","abstract":"<p>The state of the file manager.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)pendingTransactions":{"name":"pendingTransactions","abstract":"<p>The currently pending transactions (Upload, Delete, and List Files) in the file manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(py)suspended":{"name":"suspended","abstract":"<p>Whether or not the file manager is suspended. If suspended, the file manager can continue to queue uploads and deletes, but will not actually perform any of those until it is no longer suspended. This can be used for throttling down the file manager if other, important operations are taking place over the accessory connection.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)init":{"name":"-init","abstract":"<p>Initialize the class&hellip;or not, since this method is unavailable. Dependencies must be injected using initWithConnectionManager:</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:":{"name":"-initWithConnectionManager:","abstract":"<p>Creates a new file manager with a specified connection manager</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)initWithConnectionManager:configuration:":{"name":"-initWithConnectionManager:configuration:","abstract":"<p>Creates a new file manager with a specified connection manager and configuration</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)startWithCompletionHandler:":{"name":"-startWithCompletionHandler:","abstract":"<p>The manager stars up and attempts to fetch its initial list and transfer initial files.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)stop":{"name":"-stop","abstract":"<p>Cancels all file manager operations and deletes all associated data.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)hasUploadedFile:":{"name":"-hasUploadedFile:","abstract":"<p>Check if the remote system contains a file</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFileWithName:completionHandler:":{"name":"-deleteRemoteFileWithName:completionHandler:","abstract":"<p>Delete a file stored on the remote system</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)deleteRemoteFilesWithNames:completionHandler:":{"name":"-deleteRemoteFilesWithNames:completionHandler:","abstract":"<p>Deletes an array of files on the remote file system. The files are deleted in the order in which they are added to the array, with the first file to be deleted at index 0. The delete queue is sequential, meaning that once a delete request is sent to Core, the queue waits until a response is received from Core before the next the next delete request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFile:completionHandler:":{"name":"-uploadFile:completionHandler:","abstract":"<p>Upload a file to the remote file system. If a file with the [SDLFile name] already exists, this will overwrite that file. If you do not want that to happen, check remoteFileNames before uploading, or change allowOverwrite to NO.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:progressHandler:completionHandler:":{"name":"-uploadFiles:progressHandler:completionHandler:","abstract":"<p>Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadFiles:completionHandler:":{"name":"-uploadFiles:completionHandler:","abstract":"<p>Uploads an array of files to the remote file system. The files will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtwork:completionHandler:":{"name":"-uploadArtwork:completionHandler:","abstract":"<p>Uploads an artwork file to the remote file system and returns the name of the uploaded artwork once completed. If an artwork with the same name is already on the remote system, the artwork is not uploaded and the artwork name is simply returned.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:completionHandler:":{"name":"-uploadArtworks:completionHandler:","abstract":"<p>Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(im)uploadArtworks:progressHandler:completionHandler:":{"name":"-uploadArtworks:progressHandler:completionHandler:","abstract":"<p>Uploads an array of artworks to the remote file system. The artworks will be uploaded in the order in which they are added to the array, with the first file to be uploaded at index 0. The upload queue is sequential, meaning that once a upload request is sent to Core, the queue waits until a response is received from Core before the next the next upload request is sent.</p>","parent_name":"SDLFileManager"},"Classes/SDLFileManager.html#/c:objc(cs)SDLFileManager(cm)temporaryFileDirectory":{"name":"+temporaryFileDirectory","abstract":"<p>A URL to the directory where temporary files are stored. When an SDLFile is created with NSData, it writes to a temporary file until the file manager finishes uploading it.</p>","parent_name":"SDLFileManager"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)persistent":{"name":"persistent","abstract":"<p>Whether or not the file should persist on disk between car ignition cycles.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)overwrite":{"name":"overwrite","abstract":"<p>Whether or not the file should overwrite an existing file on the remote disk with the same name.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)name":{"name":"name","abstract":"<p>The name the file should be stored under on the remote disk. This is how the file will be referenced in all later calls.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileURL":{"name":"fileURL","abstract":"<p>The url the local file is stored at while waiting to push it to the remote system. If the data has not been passed to the file URL, this will be nil.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)data":{"name":"data","abstract":"<p>The binary data of the SDLFile. If initialized with data, this will be a relatively quick call, but if initialized with a file URL, this is a rather expensive call the first time. The data will be cached in RAM after the first call.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the binary data of the SDLFile.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)fileType":{"name":"fileType","abstract":"<p>The system will attempt to determine the type of file that you have passed in. It will default to BINARY if it does not recognize the file type or the file type is not supported by SDL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)inputStream":{"name":"inputStream","abstract":"<p>A stream to pull binary data from a SDLFile. The stream only pulls required data from the file on disk or in memory. This reduces memory usage while uploading a large file to the remote system as each chunk of data can be released immediately after it is uploaded.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(py)isStaticIcon":{"name":"isStaticIcon","abstract":"<p>Describes whether or not this file is represented by static icon data. The head unit will present its representation of the static icon concept when sent this data.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)init":{"name":"-init","abstract":"<p>Initializer unavailable</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithFileURL:name:persistent:":{"name":"-initWithFileURL:name:persistent:","abstract":"<p>The designated initializer for an SDL File. The only major property that is not set using this is &ldquo;overwrite&rdquo;, which defaults to NO.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileAtFileURL:name:":{"name":"+persistentFileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileAtFileURL:name:":{"name":"+fileAtFileURL:name:","abstract":"<p>Create an SDL file using a local file URL.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(im)initWithData:name:fileExtension:persistent:":{"name":"-initWithData:name:fileExtension:persistent:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)persistentFileWithData:name:fileExtension:":{"name":"+persistentFileWithData:name:fileExtension:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLFile.html#/c:objc(cs)SDLFile(cm)fileWithData:name:fileExtension:":{"name":"+fileWithData:name:fileExtension:","abstract":"<p>Create an SDL file using raw data. It is strongly preferred to pass a file URL instead of data, as it is currently held in memory until the file is sent.</p>","parent_name":"SDLFile"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(im)initWithChannelId:channelSetting:":{"name":"-initWithChannelId:channelSetting:","abstract":"<p>Convenience init</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelName":{"name":"channelName","abstract":"<p>@abstract Read-only channel / frequency name","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelSetting":{"name":"channelSetting","abstract":"<p>@abstract Reflects the setting, from 0%-100%.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEqualizerSettings.html#/c:objc(cs)SDLEqualizerSettings(py)channelId":{"name":"channelId","abstract":"<p>@abstract id of the channel.</p>","parent_name":"SDLEqualizerSettings"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)securityManagers":{"name":"securityManagers","abstract":"<p>A set of security managers used to encrypt traffic data. Each OEM has their own proprietary security manager.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(py)delegate":{"name":"delegate","abstract":"<p>A delegate callback that will tell you when an acknowledgement has occurred for starting as secure service.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(cm)defaultConfiguration":{"name":"+defaultConfiguration","abstract":"<p>Creates a default encryption configuration.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncryptionConfiguration.html#/c:objc(cs)SDLEncryptionConfiguration(im)initWithSecurityManagers:delegate:":{"name":"-initWithSecurityManagers:delegate:","abstract":"<p>Creates a secure configuration for each of the security managers provided.</p>","parent_name":"SDLEncryptionConfiguration"},"Classes/SDLEncodedSyncPData.html#/c:objc(cs)SDLEncodedSyncPData(py)data":{"name":"data","abstract":"<p>Contains base64 encoded string of SyncP packets.</p>","parent_name":"SDLEncodedSyncPData"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)emergencyEventType":{"name":"emergencyEventType","abstract":"<p>References signal &ldquo;VedsEvntType_D_Ltchd&rdquo;. See EmergencyEventType.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)fuelCutoffStatus":{"name":"fuelCutoffStatus","abstract":"<p>References signal &ldquo;RCM_FuelCutoff&rdquo;. See FuelCutoffStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)rolloverEvent":{"name":"rolloverEvent","abstract":"<p>References signal &ldquo;VedsEvntRoll_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)maximumChangeVelocity":{"name":"maximumChangeVelocity","abstract":"<p>References signal &ldquo;VedsMaxDeltaV_D_Ltchd&rdquo;. Change in velocity in KPH.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLEmergencyEvent.html#/c:objc(cs)SDLEmergencyEvent(py)multipleEvents":{"name":"multipleEvents","abstract":"<p>References signal &ldquo;VedsMultiEvnt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLEmergencyEvent"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallNotificationStatus":{"name":"eCallNotificationStatus","abstract":"<p>References signal &ldquo;eCallNotification_4A&rdquo;. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)auxECallNotificationStatus":{"name":"auxECallNotificationStatus","abstract":"<p>References signal &ldquo;eCallNotification&rdquo;. See VehicleDataNotificationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLECallInfo.html#/c:objc(cs)SDLECallInfo(py)eCallConfirmationStatus":{"name":"eCallConfirmationStatus","abstract":"<p>References signal &ldquo;eCallConfirmation&rdquo;. See ECallConfirmationStatus.</p>","parent_name":"SDLECallInfo"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:":{"name":"-initWithDisplayName:","abstract":"<p>Init with required properties</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowTypeSupported:windowCapabilities:":{"name":"-initWithDisplayName:windowTypeSupported:windowCapabilities:","abstract":"<p>This method is broken (the types don&rsquo;t match the parameter names) and will always return nil. Use initWithDisplayName:windowCapabilities:windowTypeSupported: instead.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(im)initWithDisplayName:windowCapabilities:windowTypeSupported:":{"name":"-initWithDisplayName:windowCapabilities:windowTypeSupported:","abstract":"<p>Init with all the properities</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)displayName":{"name":"displayName","abstract":"<p>Name of the display.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowTypeSupported":{"name":"windowTypeSupported","abstract":"<p>Informs the application how many windows the app is allowed to create per type.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapability.html#/c:objc(cs)SDLDisplayCapability(py)windowCapabilities":{"name":"windowCapabilities","abstract":"<p>Contains a list of capabilities of all windows related to the app. Once the app has registered the capabilities of all windows will be provided, but GetSystemCapability still allows requesting window capabilities of all windows.</p>","parent_name":"SDLDisplayCapability"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayType":{"name":"displayType","abstract":"<p>The type of display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)displayName":{"name":"displayName","abstract":"<p>The name of the connected display</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)textFields":{"name":"textFields","abstract":"<p>An array of SDLTextField structures, each of which describes a field in the HMI which the application can write to using operations such as <em>SDLShow</em>, <em>SDLSetMediaClockTimer</em>, etc.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)imageFields":{"name":"imageFields","abstract":"<p>An array of SDLImageField elements</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)mediaClockFormats":{"name":"mediaClockFormats","abstract":"<p>An array of SDLMediaClockFormat elements, defining the valid string formats used in specifying the contents of the media clock field</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)graphicSupported":{"name":"graphicSupported","abstract":"<p>The display&rsquo;s persistent screen supports.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)templatesAvailable":{"name":"templatesAvailable","abstract":"<p>An array of all predefined persistent display templates available on the head unit.</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)screenParams":{"name":"screenParams","abstract":"<p>A set of all parameters related to a prescribed screen area (e.g. for video / touch input)</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDisplayCapabilities.html#/c:objc(cs)SDLDisplayCapabilities(py)numCustomPresetsAvailable":{"name":"numCustomPresetsAvailable","abstract":"<p>The number of on-screen custom presets available (if any); otherwise omitted</p>","parent_name":"SDLDisplayCapabilities"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(im)initWithNumber:":{"name":"-initWithNumber:","abstract":"<p>Convenience init to initiate a dial number request</p>","parent_name":"SDLDialNumber"},"Classes/SDLDialNumber.html#/c:objc(cs)SDLDialNumber(py)number":{"name":"number","abstract":"<p>Up to 40 character string representing the phone number. All characters stripped except for &lsquo;0&rsquo;-&lsquo;9&rsquo;, &lsquo;*&rsquo;, &lsquo;#&rsquo;, &lsquo;,&rsquo;, &lsquo;;&rsquo;, and &lsquo;+&rsquo;</p>","parent_name":"SDLDialNumber"},"Classes/SDLDiagnosticMessageResponse.html#/c:objc(cs)SDLDiagnosticMessageResponse(py)messageDataResult":{"name":"messageDataResult","abstract":"<p>Array of bytes comprising CAN message result.</p>","parent_name":"SDLDiagnosticMessageResponse"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(im)initWithTargetId:length:data:":{"name":"-initWithTargetId:length:data:","abstract":"<p>Convenience init</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)targetID":{"name":"targetID","abstract":"<p>Name of target ECU</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageLength":{"name":"messageLength","abstract":"<p>Length of message (in bytes)</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDiagnosticMessage.html#/c:objc(cs)SDLDiagnosticMessage(py)messageData":{"name":"messageData","abstract":"<p>Array of bytes comprising CAN message.</p>","parent_name":"SDLDiagnosticMessage"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)voiceRecOn":{"name":"voiceRecOn","abstract":"<p>Indicates whether the voice recognition is on or off</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)btIconOn":{"name":"btIconOn","abstract":"<p>Indicates whether the bluetooth connection established</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)callActive":{"name":"callActive","abstract":"<p>Indicates whether a call is being active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)phoneRoaming":{"name":"phoneRoaming","abstract":"<p>Indicates whether the phone is in roaming mode</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)textMsgAvailable":{"name":"textMsgAvailable","abstract":"<p>Indicates whether a textmessage is available</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)battLevelStatus":{"name":"battLevelStatus","abstract":"<p>Battery level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)stereoAudioOutputMuted":{"name":"stereoAudioOutputMuted","abstract":"<p>The status of the stereo audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)monoAudioOutputMuted":{"name":"monoAudioOutputMuted","abstract":"<p>The status of the mono audio output channel</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)signalLevelStatus":{"name":"signalLevelStatus","abstract":"<p>Signal level status</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)primaryAudioSource":{"name":"primaryAudioSource","abstract":"<p>The current primary audio source of SDL (if selected).</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceStatus.html#/c:objc(cs)SDLDeviceStatus(py)eCallEventActive":{"name":"eCallEventActive","abstract":"<p>Indicates if an emergency call is active</p>","parent_name":"SDLDeviceStatus"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(cm)currentDevice":{"name":"+currentDevice","abstract":"<p>Convenience init. Object will contain all information about the connected device automatically.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)hardware":{"name":"hardware","abstract":"<p>Device model</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)firmwareRev":{"name":"firmwareRev","abstract":"<p>Device firmware version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)os":{"name":"os","abstract":"<p>Device OS</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)osVersion":{"name":"osVersion","abstract":"<p>Device OS version</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)carrier":{"name":"carrier","abstract":"<p>Device mobile carrier</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeviceInfo.html#/c:objc(cs)SDLDeviceInfo(py)maxNumberRFCOMMPorts":{"name":"maxNumberRFCOMMPorts","abstract":"<p>Number of bluetooth RFCOMM ports available.</p>","parent_name":"SDLDeviceInfo"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(im)initWithId:":{"name":"-initWithId:","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteWindow.html#/c:objc(cs)SDLDeleteWindow(py)windowID":{"name":"windowID","abstract":"<p>A unique ID to identify the window.</p>","parent_name":"SDLDeleteWindow"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to delete a submenu</p>","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteSubMenu.html#/c:objc(cs)SDLDeleteSubMenu(py)menuID":{"name":"menuID","abstract":"<p>the MenuID that identifies the SDLSubMenu to be delete","parent_name":"SDLDeleteSubMenu"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to delete a choice set</p>","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteInteractionChoiceSet.html#/c:objc(cs)SDLDeleteInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>a unique ID that identifies the Choice Set","parent_name":"SDLDeleteInteractionChoiceSet"},"Classes/SDLDeleteFileResponse.html#/c:objc(cs)SDLDeleteFileResponse(py)spaceAvailable":{"name":"spaceAvailable","abstract":"<p>The remaining available space for your application to store data on the remote system.</p>","parent_name":"SDLDeleteFileResponse"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(im)initWithFileName:":{"name":"-initWithFileName:","abstract":"<p>Convenience init to delete a file</p>","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteFile.html#/c:objc(cs)SDLDeleteFile(py)syncFileName":{"name":"syncFileName","abstract":"<p>a file reference name","parent_name":"SDLDeleteFile"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(im)initWithId:":{"name":"-initWithId:","abstract":"<p>Convenience init to remove a command from the menu</p>","parent_name":"SDLDeleteCommand"},"Classes/SDLDeleteCommand.html#/c:objc(cs)SDLDeleteCommand(py)cmdID":{"name":"cmdID","abstract":"<p>the Command ID that identifies the Command to be deleted from Command Menu","parent_name":"SDLDeleteCommand"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:":{"name":"-initWithHour:minute:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:":{"name":"-initWithHour:minute:second:millisecond:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:","abstract":"<p>Convenience init for creating a date</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(im)initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:":{"name":"-initWithHour:minute:second:millisecond:day:month:year:timezoneMinuteOffset:timezoneHourOffset:","abstract":"<p>Convenience init for creating a date with all properties</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)millisecond":{"name":"millisecond","abstract":"<p>Milliseconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)second":{"name":"second","abstract":"<p>Seconds part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)minute":{"name":"minute","abstract":"<p>Minutes part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)hour":{"name":"hour","abstract":"<p>Hour part of time</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)day":{"name":"day","abstract":"<p>Day of the month</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)month":{"name":"month","abstract":"<p>Month of the year</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)year":{"name":"year","abstract":"<p>The year in YYYY format</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneMinuteOffset":{"name":"timezoneMinuteOffset","abstract":"<p>Time zone offset in Min with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDateTime.html#/c:objc(cs)SDLDateTime(py)timezoneHourOffset":{"name":"timezoneHourOffset","abstract":"<p>Time zone offset in Hours with regard to UTC</p>","parent_name":"SDLDateTime"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)resultCode":{"name":"resultCode","abstract":"<p>Individual DID result code.</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)didLocation":{"name":"didLocation","abstract":"<p>Location of raw data from vehicle data DID</p>","parent_name":"SDLDIDResult"},"Classes/SDLDIDResult.html#/c:objc(cs)SDLDIDResult(py)data":{"name":"data","abstract":"<p>Raw DID-based data returned for requested element.</p>","parent_name":"SDLDIDResult"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:":{"name":"-initWithId:windowName:windowType:","abstract":"<p>Constructor with the required parameters</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(im)initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:":{"name":"-initWithId:windowName:windowType:associatedServiceType:duplicateUpdatesFromWindowID:","abstract":"<p>Convinience constructor with all the parameters.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowID":{"name":"windowID","abstract":"<p>A unique ID to identify the window.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)windowName":{"name":"windowName","abstract":"<p>The window name to be used by the HMI.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)type":{"name":"type","abstract":"<p>The type of the window to be created. Main window or widget.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)associatedServiceType":{"name":"associatedServiceType","abstract":"<p>Allows an app to create a widget related to a specific service type.","parent_name":"SDLCreateWindow"},"Classes/SDLCreateWindow.html#/c:objc(cs)SDLCreateWindow(py)duplicateUpdatesFromWindowID":{"name":"duplicateUpdatesFromWindowID","abstract":"<p>Optional parameter. Specify whether the content sent to an existing window should be duplicated to the created window. If there isn&rsquo;t a window with the ID, the request will be rejected with <code>INVALID_DATA</code>.</p>","parent_name":"SDLCreateWindow"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(im)initWithId:choiceSet:":{"name":"-initWithId:choiceSet:","abstract":"<p>Convenience init for creating a choice set RPC</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)interactionChoiceSetID":{"name":"interactionChoiceSetID","abstract":"<p>A unique ID that identifies the Choice Set</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLCreateInteractionChoiceSet.html#/c:objc(cs)SDLCreateInteractionChoiceSet(py)choiceSet":{"name":"choiceSet","abstract":"<p>Array of choices, which the user can select by menu or voice recognition</p>","parent_name":"SDLCreateInteractionChoiceSet"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lifecycleConfig":{"name":"lifecycleConfig","abstract":"<p>The lifecycle configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)lockScreenConfig":{"name":"lockScreenConfig","abstract":"<p>The lock screen configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)loggingConfig":{"name":"loggingConfig","abstract":"<p>The log configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)streamingMediaConfig":{"name":"streamingMediaConfig","abstract":"<p>The streaming media configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)fileManagerConfig":{"name":"fileManagerConfig","abstract":"<p>The file manager configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(py)encryptionConfig":{"name":"encryptionConfig","abstract":"<p>The encryption configuration.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:encryption:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, file manager and encryption configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:encryption:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media, file manager and encryption configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:":{"name":"-initWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(im)initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"-initWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:fileManager:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging, streaming media and file manager configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:streamingMedia:":{"name":"+configurationWithLifecycle:lockScreen:logging:streamingMedia:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen, logging and streaming media configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLConfiguration.html#/c:objc(cs)SDLConfiguration(cm)configurationWithLifecycle:lockScreen:logging:":{"name":"+configurationWithLifecycle:lockScreen:logging:","abstract":"<p>Creates a new configuration to be passed to the SDLManager with custom lifecycle, lock screen and logging configurations.</p>","parent_name":"SDLConfiguration"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeActive":{"name":"powerModeActive","abstract":"<p>References signal &ldquo;PowerMode_UB&rdquo;.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeQualificationStatus":{"name":"powerModeQualificationStatus","abstract":"<p>References signal &ldquo;PowerModeQF&rdquo;. See PowerModeQualificationStatus.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)carModeStatus":{"name":"carModeStatus","abstract":"<p>References signal &ldquo;CarMode&rdquo;. See CarMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLClusterModeStatus.html#/c:objc(cs)SDLClusterModeStatus(py)powerModeStatus":{"name":"powerModeStatus","abstract":"<p>References signal &ldquo;PowerMode&rdquo;. See PowerMode.</p>","parent_name":"SDLClusterModeStatus"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:":{"name":"-initWithAppID:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(im)initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:":{"name":"-initWithAppID:nicknames:enabled:authToken:cloudTransportType:hybridAppPreference:endpoint:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)nicknames":{"name":"nicknames","abstract":"<p>An array of app names a cloud app is allowed to register with. If included in a <code>SetCloudAppProperties</code> request, this value will overwrite the existing &ldquo;nicknames&rdquo; field in the app policies section of the policy table.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)appID":{"name":"appID","abstract":"<p>The id of the cloud app.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)enabled":{"name":"enabled","abstract":"<p>If true, the cloud app will appear in the HMI&rsquo;s app list; if false, the cloud app will not appear in the HMI&rsquo;s app list.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)authToken":{"name":"authToken","abstract":"<p>Used to authenticate websocket connection on app activation.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)cloudTransportType":{"name":"cloudTransportType","abstract":"<p>Specifies the connection type Core should use. Currently the ones that work in SDL Core are <code>WS</code> or <code>WSS</code>, but an OEM can implement their own transport adapter to handle different values.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)hybridAppPreference":{"name":"hybridAppPreference","abstract":"<p>Specifies the user preference to use the cloud app version or mobile app version when both are available.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLCloudAppProperties.html#/c:objc(cs)SDLCloudAppProperties(py)endpoint":{"name":"endpoint","abstract":"<p>The websocket endpoint.</p>","parent_name":"SDLCloudAppProperties"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:","abstract":"<p>Convenience init for climate control data.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:","abstract":"<p>Convenience init for climate control data.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(im)initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:":{"name":"-initWithFanSpeed:desiredTemperature:acEnable:circulateAirEnable:autoModeEnable:defrostZone:dualModeEnable:acMaxEnable:ventilationMode:heatedSteeringWheelEnable:heatedWindshieldEnable:heatedRearWindowEnable:heatedMirrorsEnable:climateEnable:","abstract":"<p>Convenience init for climate control data with all properties.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)fanSpeed":{"name":"fanSpeed","abstract":"<p>Speed of Fan in integer</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)currentTemperature":{"name":"currentTemperature","abstract":"<p>The Current Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)desiredTemperature":{"name":"desiredTemperature","abstract":"<p>Desired Temperature in SDLTemperature</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acEnable":{"name":"acEnable","abstract":"<p>Represents if AC is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)circulateAirEnable":{"name":"circulateAirEnable","abstract":"<p>Represents if circulation of air is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)autoModeEnable":{"name":"autoModeEnable","abstract":"<p>Represents if auto mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)defrostZone":{"name":"defrostZone","abstract":"<p>Represents the kind of defrost zone.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)dualModeEnable":{"name":"dualModeEnable","abstract":"<p>Represents if dual mode is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)acMaxEnable":{"name":"acMaxEnable","abstract":"<p>Represents if ac max is enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>Represents the kind of Ventilation zone.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedSteeringWheelEnable":{"name":"heatedSteeringWheelEnable","abstract":"<p>@abstract value false means disabled/turn off, value true means enabled/turn on.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedWindshieldEnable":{"name":"heatedWindshieldEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedRearWindowEnable":{"name":"heatedRearWindowEnable","abstract":"<p>@abstract value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)heatedMirrorsEnable":{"name":"heatedMirrorsEnable","abstract":"<p>@abstract Value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlData.html#/c:objc(cs)SDLClimateControlData(py)climateEnable":{"name":"climateEnable","abstract":"<p>@abstract Value false means disabled, value true means enabled.</p>","parent_name":"SDLClimateControlData"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(im)initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:":{"name":"-initWithModuleName:moduleInfo:fanSpeedAvailable:desiredTemperatureAvailable:acEnableAvailable:acMaxEnableAvailable:circulateAirAvailable:autoModeEnableAvailable:dualModeEnableAvailable:defrostZoneAvailable:ventilationModeAvailable:heatedSteeringWheelAvailable:heatedWindshieldAvailable:heatedRearWindowAvailable:heatedMirrorsAvailable:climateEnableAvailable:","abstract":"<p>Convenience init to describe the climate control capabilities with all properities.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleName":{"name":"moduleName","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)fanSpeedAvailable":{"name":"fanSpeedAvailable","abstract":"<p>Availability of the control of fan speed.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)desiredTemperatureAvailable":{"name":"desiredTemperatureAvailable","abstract":"<p>Availability of the control of desired temperature.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acEnableAvailable":{"name":"acEnableAvailable","abstract":"<p>Availability of the control of turn on/off AC.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)acMaxEnableAvailable":{"name":"acMaxEnableAvailable","abstract":"<p>Availability of the control of enable/disable air conditioning is ON on the maximum level.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)circulateAirEnableAvailable":{"name":"circulateAirEnableAvailable","abstract":"<p>Availability of the control of enable/disable circulate Air mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)autoModeEnableAvailable":{"name":"autoModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable auto mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)dualModeEnableAvailable":{"name":"dualModeEnableAvailable","abstract":"<p>Availability of the control of enable/disable dual mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZoneAvailable":{"name":"defrostZoneAvailable","abstract":"<p>Availability of the control of defrost zones.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)defrostZone":{"name":"defrostZone","abstract":"<p>A set of all defrost zones that are controllable.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationModeAvailable":{"name":"ventilationModeAvailable","abstract":"<p>Availability of the control of air ventilation mode.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)ventilationMode":{"name":"ventilationMode","abstract":"<p>A set of all ventilation modes that are controllable.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedSteeringWheelAvailable":{"name":"heatedSteeringWheelAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Steering Wheel.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedWindshieldAvailable":{"name":"heatedWindshieldAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Windshield.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedRearWindowAvailable":{"name":"heatedRearWindowAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Rear Window.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)heatedMirrorsAvailable":{"name":"heatedMirrorsAvailable","abstract":"<p>@abstract Availability of the control (enable/disable) of heated Mirrors.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)climateEnableAvailable":{"name":"climateEnableAvailable","abstract":"<p>@abstract Availability of the control of enable/disable climate control.","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLClimateControlCapabilities.html#/c:objc(cs)SDLClimateControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLClimateControlCapabilities"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout":{"name":"defaultTimeout","abstract":"<p>Set this to change the default timeout for all choice sets. If a timeout is not set on an individual choice set object (or if it is set to 0.0), then it will use this timeout instead. See <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout\">timeout</a></code> for more details. If this is not set by you, it will default to 10 seconds.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultLayout":{"name":"defaultLayout","abstract":"<p>Set this to change the default layout for all choice sets. If a layout is not set on an individual choice set object, then it will use this layout instead. See <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout\">layout</a></code> for more details. If this is not set by you, it will default to <code>SDLChoiceSetLayoutList</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)title":{"name":"title","abstract":"<p>Maps to PerformInteraction.initialText. The title of the choice set, and/or the initial text on a keyboard prompt.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)initialPrompt":{"name":"initialPrompt","abstract":"<p>Maps to PerformInteraction.initialPrompt. The initial prompt spoken to the user at the start of an interaction.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)layout":{"name":"layout","abstract":"<p>Maps to PerformInteraction.interactionLayout. Whether the presented choices are arranged as a set of tiles or a list.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeout":{"name":"timeout","abstract":"<p>Maps to PerformInteraction.timeout. This applies only to a manual selection (not a voice selection, which has its timeout handled by the system). Defaults to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(cpy)defaultTimeout\">defaultTimeout</a></code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)timeoutPrompt":{"name":"timeoutPrompt","abstract":"<p>Maps to PerformInteraction.timeoutPrompt. This text is spoken when a VR interaction times out. If this set is presented in a manual (non-voice) only interaction, this will be ignored.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpPrompt":{"name":"helpPrompt","abstract":"<p>Maps to PerformInteraction.helpPrompt. This is the spoken string when a user speaks &ldquo;help&rdquo; when the interaction is occurring.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)helpList":{"name":"helpList","abstract":"<p>Maps to PerformInteraction.vrHelp. This is a list of help text presented to the user when they are in a voice recognition interaction from your choice set of options. If this set is presented in a touch only interaction, this will be ignored.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)delegate":{"name":"delegate","abstract":"<p>The delegate of this choice set, called when the user interacts with it.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(py)choices":{"name":"choices","abstract":"<p>The choices to be displayed to the user within this choice set. These choices could match those already preloaded via <code>SDLScreenManager preloadChoices:withCompletionHandler:</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:choices:":{"name":"-initWithTitle:delegate:choices:","abstract":"<p>Initialize with a title, delegate, and choices. It will use the default timeout and layout, all other properties (such as prompts) will be <code>nil</code>.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPromptString:timeoutPromptString:helpPromptString:vrHelpList:choices:","abstract":"<p>Initializer with all possible properties.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:":{"name":"-initWithTitle:delegate:layout:timeout:initialPrompt:timeoutPrompt:helpPrompt:vrHelpList:choices:","abstract":"<p>Initializer with all possible properties.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceSet.html#/c:objc(cs)SDLChoiceSet(im)cancel":{"name":"-cancel","abstract":"<p>Cancels the choice set. If the choice set has not yet been sent to Core, it will not be sent. If the choice set is already presented on Core, the choice set will be immediately dismissed. Canceling an already presented choice set will only work if connected to Core versions 6.0+. On older versions of Core, the choice set will not be dismissed.</p>","parent_name":"SDLChoiceSet"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)text":{"name":"text","abstract":"<p>Maps to Choice.menuName. The primary text of the cell. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are not permitted and will result in the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> failing to initialize.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryText":{"name":"secondaryText","abstract":"<p>Maps to Choice.secondaryText. Optional secondary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Maps to Choice.tertiaryText. Optional tertitary text of the cell, if available. Duplicates within an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLChoiceSet.html\">SDLChoiceSet</a></code> are permitted.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)voiceCommands":{"name":"voiceCommands","abstract":"<p>Maps to Choice.vrCommands. Optional voice commands the user can speak to activate the cell. If not set and the head unit requires it, this will be set to the number in the list that this item appears. However, this would be a very poor experience for a user if the choice set is presented as a voice only interaction or both interaction mode. Therefore, consider not setting this only when you know the choice set will be presented as a touch only interaction.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)artwork":{"name":"artwork","abstract":"<p>Maps to Choice.image. Optional image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(py)secondaryArtwork":{"name":"secondaryArtwork","abstract":"<p>Maps to Choice.secondaryImage. Optional secondary image for the cell. This will be uploaded before the cell is used when the cell is preloaded or presented for the first time.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)init":{"name":"-init","abstract":"<p>Initialize the cell with nothing. This is unavailable</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:":{"name":"-initWithText:","abstract":"<p>Initialize the cell with text and nothing else.</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:artwork:voiceCommands:":{"name":"-initWithText:artwork:voiceCommands:","abstract":"<p>Initialize the cell with text, optional artwork, and optional voice commands</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoiceCell.html#/c:objc(cs)SDLChoiceCell(im)initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:":{"name":"-initWithText:secondaryText:tertiaryText:voiceCommands:artwork:secondaryArtwork:","abstract":"<p>Initialize the cell with all optional items</p>","parent_name":"SDLChoiceCell"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:":{"name":"-initWithId:menuName:vrCommands:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with the required parameters</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(im)initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:":{"name":"-initWithId:menuName:vrCommands:image:secondaryText:secondaryImage:tertiaryText:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with all parameters</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)choiceID":{"name":"choiceID","abstract":"<p>The application-scoped identifier that uniquely identifies this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)menuName":{"name":"menuName","abstract":"<p>Text which appears in menu, representing this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)vrCommands":{"name":"vrCommands","abstract":"<p>VR synonyms for this choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)image":{"name":"image","abstract":"<p>The image of the choice</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryText":{"name":"secondaryText","abstract":"<p>Secondary text to display; e.g. address of POI in a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)tertiaryText":{"name":"tertiaryText","abstract":"<p>Tertiary text to display; e.g. distance to POI for a search result entry</p>","parent_name":"SDLChoice"},"Classes/SDLChoice.html#/c:objc(cs)SDLChoice(py)secondaryImage":{"name":"secondaryImage","abstract":"<p>Secondary image for choice</p>","parent_name":"SDLChoice"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:":{"name":"-initWithLanguage:hmiDisplayLanguage:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with required parameters</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(im)initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:":{"name":"-initWithLanguage:hmiDisplayLanguage:appName:ttsName:ngnMediaScreenAppName:vrSynonyms:","abstract":"<p>Constructs a newly allocated SDLChangeRegistration object with all parameters</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)language":{"name":"language","abstract":"<p>The language the app wants to change to</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)hmiDisplayLanguage":{"name":"hmiDisplayLanguage","abstract":"<p>HMI display language</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)appName":{"name":"appName","abstract":"<p>Request a new app name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ttsName":{"name":"ttsName","abstract":"<p>Request a new TTSName registration.</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)ngnMediaScreenAppName":{"name":"ngnMediaScreenAppName","abstract":"<p>Request a new app short name registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLChangeRegistration.html#/c:objc(cs)SDLChangeRegistration(py)vrSynonyms":{"name":"vrSynonyms","abstract":"<p>Request a new VR synonyms registration</p>","parent_name":"SDLChangeRegistration"},"Classes/SDLCarWindowViewController.html#/c:objc(cs)SDLCarWindowViewController(py)supportedOrientation":{"name":"supportedOrientation","abstract":"<p>The supported interface orientation you wish to use. Defaults to MaskPortrait.</p>","parent_name":"SDLCarWindowViewController"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:":{"name":"-initWithFunctionID:","abstract":"<p>Convenience init for dismissing the currently presented modal view (either an alert, slider, scrollable message, or perform interation).</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithFunctionID:cancelID:":{"name":"-initWithFunctionID:cancelID:","abstract":"<p>Convenience init for dismissing a specific view.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithAlertCancelID:":{"name":"-initWithAlertCancelID:","abstract":"<p>Convenience init for dismissing an alert.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithSliderCancelID:":{"name":"-initWithSliderCancelID:","abstract":"<p>Convenience init for dismissing a slider.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithScrollableMessageCancelID:":{"name":"-initWithScrollableMessageCancelID:","abstract":"<p>Convenience init for dismissing a scrollable message.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(im)initWithPerformInteractionCancelID:":{"name":"-initWithPerformInteractionCancelID:","abstract":"<p>Convenience init for dismissing a perform interaction.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)alert":{"name":"+alert","abstract":"<p>Convenience init for dismissing the currently presented alert.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)slider":{"name":"+slider","abstract":"<p>Convenience init for dismissing the currently presented slider.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)scrollableMessage":{"name":"+scrollableMessage","abstract":"<p>Convenience init for dismissing the currently presented scrollable message.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(cm)performInteraction":{"name":"+performInteraction","abstract":"<p>Convenience init for dismissing the currently presented perform interaction.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)cancelID":{"name":"cancelID","abstract":"<p>The ID of the specific interaction to dismiss. If not set, the most recent of the RPC type set in functionID will be dismissed.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLCancelInteraction.html#/c:objc(cs)SDLCancelInteraction(py)functionID":{"name":"functionID","abstract":"<p>The ID of the type of interaction to dismiss.</p>","parent_name":"SDLCancelInteraction"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:":{"name":"-initWithButtonName:moduleType:","abstract":"<p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:moduleId:":{"name":"-initWithButtonName:moduleType:moduleId:","abstract":"<p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(im)initWithButtonName:moduleType:moduleId:buttonPressMode:":{"name":"-initWithButtonName:moduleType:moduleId:buttonPressMode:","abstract":"<p>Constructs a newly allocated SDLButtonPress object with the given parameters</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleType":{"name":"moduleType","abstract":"<p>The module where the button should be pressed.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)moduleId":{"name":"moduleId","abstract":"<p>Id of a module, published by System Capability.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonName":{"name":"buttonName","abstract":"<p>The name of supported RC climate or radio button.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonPress.html#/c:objc(cs)SDLButtonPress(py)buttonPressMode":{"name":"buttonPressMode","abstract":"<p>Indicates whether this is a LONG or SHORT button press event.</p>","parent_name":"SDLButtonPress"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)name":{"name":"name","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)shortPressAvailable":{"name":"shortPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a SHORT press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)longPressAvailable":{"name":"longPressAvailable","abstract":"<p>A NSNumber value indicates whether the button supports a LONG press</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)upDownAvailable":{"name":"upDownAvailable","abstract":"<p>A NSNumber value indicates whether the button supports &ldquo;button down&rdquo; and &ldquo;button up&rdquo;</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLButtonCapabilities.html#/c:objc(cs)SDLButtonCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLButtonCapabilities"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)parkBrakeActive":{"name":"parkBrakeActive","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStableStatus":{"name":"ignitionStableStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)ignitionStatus":{"name":"ignitionStatus","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)driverDoorAjar":{"name":"driverDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)passengerDoorAjar":{"name":"passengerDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearLeftDoorAjar":{"name":"rearLeftDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBodyInformation.html#/c:objc(cs)SDLBodyInformation(py)rearRightDoorAjar":{"name":"rearRightDoorAjar","parent_name":"SDLBodyInformation"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBeltDeployed":{"name":"driverBeltDeployed","abstract":"<p>References signal &ldquo;VedsDrvBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBeltDeployed":{"name":"passengerBeltDeployed","abstract":"<p>References signal &ldquo;VedsPasBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerBuckleBelted":{"name":"passengerBuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1PasBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)driverBuckleBelted":{"name":"driverBuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1DrvBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow2BuckleBelted":{"name":"leftRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2lBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)passengerChildDetected":{"name":"passengerChildDetected","abstract":"<p>References signal &ldquo;VedsRw1PasChld_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow2BuckleBelted":{"name":"rightRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2rBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow2BuckleBelted":{"name":"middleRow2BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw2mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow3BuckleBelted":{"name":"middleRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRow3BuckleBelted":{"name":"leftRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3lBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRow3BuckleBelted":{"name":"rightRow3BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw3rBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)leftRearInflatableBelted":{"name":"leftRearInflatableBelted","abstract":"<p>References signal &ldquo;VedsRw2lRib_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)rightRearInflatableBelted":{"name":"rightRearInflatableBelted","abstract":"<p>References signal &ldquo;VedsRw2rRib_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BeltDeployed":{"name":"middleRow1BeltDeployed","abstract":"<p>References signal &ldquo;VedsRw1mBelt_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLBeltStatus.html#/c:objc(cs)SDLBeltStatus(py)middleRow1BuckleBelted":{"name":"middleRow1BuckleBelted","abstract":"<p>References signal &ldquo;VedsRw1mBckl_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLBeltStatus"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)delegate":{"name":"delegate","abstract":"<p>The delegate describing when files are done playing or any errors that occur</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)playing":{"name":"playing","abstract":"<p>Whether or not we are currently playing audio</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(py)queue":{"name":"queue","abstract":"<p>The queue of audio files that will be played in sequence</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)init":{"name":"-init","abstract":"<p>Init should only occur with dependencies. use <code>initWithManager:</code></p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)initWithManager:":{"name":"-initWithManager:","abstract":"<p>Create an audio stream manager with a reference to the parent stream manager.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithFileURL:":{"name":"-pushWithFileURL:","abstract":"<p>Push a new file URL onto the queue after converting it into the correct PCM format for streaming binary data. Call <code>playNextWhenReady</code> to start playing the next completed pushed file.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)pushWithData:":{"name":"-pushWithData:","abstract":"<p>Push a new audio buffer onto the queue. Call <code>playNextWhenReady</code> to start playing the pushed audio buffer.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)playNextWhenReady":{"name":"-playNextWhenReady","abstract":"<p>Play the next item in the queue. If an item is currently playing, it will continue playing and this item will begin playing after it is completed.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioStreamManager.html#/c:objc(cs)SDLAudioStreamManager(im)stop":{"name":"-stop","abstract":"<p>Stop playing the queue after the current item completes and clear the queue. If nothing is playing, the queue will be cleared.</p>","parent_name":"SDLAudioStreamManager"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)samplingRate":{"name":"samplingRate","abstract":"<p>The sampling rate for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)bitsPerSample":{"name":"bitsPerSample","abstract":"<p>The sample depth in bit for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioPassThruCapabilities.html#/c:objc(cs)SDLAudioPassThruCapabilities(py)audioType":{"name":"audioType","abstract":"<p>The audiotype for AudioPassThru</p>","parent_name":"SDLAudioPassThruCapabilities"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)inputFileURL":{"name":"inputFileURL","abstract":"<p>If initialized with a file URL, the file URL it came from</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)outputFileURL":{"name":"outputFileURL","abstract":"<p>If initialized with a file URL, where the transcoder should produce the transcoded PCM audio file</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)estimatedDuration":{"name":"estimatedDuration","abstract":"<p>In seconds. UINT32_MAX if unknown.</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)data":{"name":"data","abstract":"<p>The PCM audio data to be transferred and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(py)fileSize":{"name":"fileSize","abstract":"<p>The size of the PCM audio data in bytes</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithInputFileURL:outputFileURL:estimatedDuration:":{"name":"-initWithInputFileURL:outputFileURL:estimatedDuration:","abstract":"<p>Initialize an audio file to be queued and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioFile.html#/c:objc(cs)SDLAudioFile(im)initWithData:":{"name":"-initWithData:","abstract":"<p>Initialize a buffer of PCM audio data to be queued and played</p>","parent_name":"SDLAudioFile"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(im)initWithSource:keepContext:volume:equalizerSettings:":{"name":"-initWithSource:keepContext:volume:equalizerSettings:","abstract":"<p>Constructs a newly allocated SDLAudioControlData object with given parameters</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)source":{"name":"source","abstract":"<p>@abstract In a getter response or a notification,","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)keepContext":{"name":"keepContext","abstract":"<p>@abstract This parameter shall not be present in any getter responses or notifications.","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)volume":{"name":"volume","abstract":"<p>@abstract Reflects the volume of audio, from 0%-100%.</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlData.html#/c:objc(cs)SDLAudioControlData(py)equalizerSettings":{"name":"equalizerSettings","abstract":"<p>@abstract Defines the list of supported channels (band) and their current/desired settings on HMI</p>","parent_name":"SDLAudioControlData"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:":{"name":"-initWithModuleName:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:":{"name":"-initWithModuleName:moduleInfo:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with audio control module name (max 100 chars)</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(im)initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:":{"name":"-initWithModuleName:moduleInfo:sourceAvailable:keepContextAvailable:volumeAvailable:equalizerAvailable:equalizerMaxChannelID:","abstract":"<p>Constructs a newly allocated SDLAudioControlCapabilities object with given parameters</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleName":{"name":"moduleName","abstract":"<p>@abstract The short friendly name of the audio control module.","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)sourceAvailable":{"name":"sourceAvailable","abstract":"<p>@abstract Availability of the control of audio source.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)keepContextAvailable":{"name":"keepContextAvailable","abstract":"<p>Availability of the keepContext parameter.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)volumeAvailable":{"name":"volumeAvailable","abstract":"<p>@abstract Availability of the control of audio volume.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerAvailable":{"name":"equalizerAvailable","abstract":"<p>@abstract Availability of the control of Equalizer Settings.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)equalizerMaxChannelId":{"name":"equalizerMaxChannelId","abstract":"<p>@abstract Must be included if equalizerAvailable=true,","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLAudioControlCapabilities.html#/c:objc(cs)SDLAudioControlCapabilities(py)moduleInfo":{"name":"moduleInfo","abstract":"<p>Information about a RC module, including its id.</p>","parent_name":"SDLAudioControlCapabilities"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)isTemplate":{"name":"isTemplate","abstract":"<p>Describes whether or not the image is a template that can be (re)colored by the SDL HMI. To make the artwork a template, set the <code>UIImage</code>s rendering mode to <code>UIImageRenderingModeAlwaysTemplate</code>. In order for templates to work successfully, the icon must be one solid color with a clear background. The artwork should be created using the PNG image format.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(py)imageRPC":{"name":"imageRPC","abstract":"<p>The Image RPC representing this artwork. Generally for use internally, you should instead pass an artwork to a Screen Manager method.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:name:asImageFormat:":{"name":"+artworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create an ephemeral artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithImage:asImageFormat:":{"name":"+artworkWithImage:asImageFormat:","abstract":"<p>Convenience helper to create an ephemeral artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)artworkWithStaticIcon:":{"name":"+artworkWithStaticIcon:","abstract":"<p>Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:name:asImageFormat:":{"name":"+persistentArtworkWithImage:name:asImageFormat:","abstract":"<p>Convenience helper to create a persistent artwork from an image.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(cm)persistentArtworkWithImage:asImageFormat:":{"name":"+persistentArtworkWithImage:asImageFormat:","abstract":"<p>Convenience helper to create a persistent artwork from an image. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:name:persistent:asImageFormat:":{"name":"-initWithImage:name:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithImage:persistent:asImageFormat:":{"name":"-initWithImage:persistent:asImageFormat:","abstract":"<p>Create a file for transmission to the remote system from a UIImage. A unique name will be assigned to the image. This name is a string representation of the image&rsquo;s data which is created by hashing the data using the MD5 algorithm.</p>","parent_name":"SDLArtwork"},"Classes/SDLArtwork.html#/c:objc(cs)SDLArtwork(im)initWithStaticIcon:":{"name":"-initWithStaticIcon:","abstract":"<p>Create an SDLArtwork that represents a static icon. This can only be passed to the screen manager; passing this directly to the file manager will fail.</p>","parent_name":"SDLArtwork"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(im)initWithAppServices:":{"name":"-initWithAppServices:","abstract":"<p>Convenience init.</p>","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServicesCapabilities.html#/c:objc(cs)SDLAppServicesCapabilities(py)appServices":{"name":"appServices","abstract":"<p>An array of currently available services. If this is an update to the capability the affected services will include an update reason in that item.</p>","parent_name":"SDLAppServicesCapabilities"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(im)initWithServiceID:serviceManifest:servicePublished:serviceActive:":{"name":"-initWithServiceID:serviceManifest:servicePublished:serviceActive:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceID":{"name":"serviceID","abstract":"<p>A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceManifest":{"name":"serviceManifest","abstract":"<p>Manifest for the service that this record is for.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)servicePublished":{"name":"servicePublished","abstract":"<p>If true, the service is published and available. If false, the service has likely just been unpublished, and should be considered unavailable.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceRecord.html#/c:objc(cs)SDLAppServiceRecord(py)serviceActive":{"name":"serviceActive","abstract":"<p>If true, the service is the active primary service of the supplied service type. It will receive all potential RPCs that are passed through to that service type. If false, it is not the primary service of the supplied type. See servicePublished for its availability.</p>","parent_name":"SDLAppServiceRecord"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithAppServiceType:":{"name":"-initWithAppServiceType:","abstract":"<p>Convenience init for serviceType.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"<p>Convenience init for a media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:":{"name":"-initWithMediaServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:","abstract":"<p>Convenience init for a media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"<p>Convenience init for a weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:":{"name":"-initWithWeatherServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:weatherServiceManifest:","abstract":"<p>Convenience init for a weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"<p>Convenience init for a navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:":{"name":"-initWithNavigationServiceName:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:navigationServiceManifest:","abstract":"<p>Convenience init for a navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:rpcSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(im)initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:":{"name":"-initWithServiceName:serviceType:serviceIcon:allowAppConsumers:maxRPCSpecVersion:handledRPCs:mediaServiceManifest:weatherServiceManifest:navigationServiceManifest:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceName":{"name":"serviceName","abstract":"<p>Unique name of this service.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See AppServiceType for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)serviceIcon":{"name":"serviceIcon","abstract":"<p>The file name of the icon to be associated with this service. Most likely the same as the appIcon.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)allowAppConsumers":{"name":"allowAppConsumers","abstract":"<p>If true, app service consumers beyond the IVI system will be able to access this service. If false, only the IVI system will be able consume the service. If not provided, it is assumed to be false.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)rpcSpecVersion":{"name":"rpcSpecVersion","abstract":"<p>This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)maxRPCSpecVersion":{"name":"maxRPCSpecVersion","abstract":"<p>This is the max RPC Spec version the app service understands. This is important during the RPC passthrough functionality. If not included, it is assumed the max version of the module is acceptable.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)handledRPCs":{"name":"handledRPCs","abstract":"<p>This field contains the Function IDs for the RPCs that this service intends to handle correctly. This means the service will provide meaningful responses. See FunctionID for enum equivalent values. This parameter is an integer to allow for new function IDs to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)mediaServiceManifest":{"name":"mediaServiceManifest","abstract":"<p>A media service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)weatherServiceManifest":{"name":"weatherServiceManifest","abstract":"<p>A weather service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceManifest.html#/c:objc(cs)SDLAppServiceManifest(py)navigationServiceManifest":{"name":"navigationServiceManifest","abstract":"<p>A navigation service manifest.</p>","parent_name":"SDLAppServiceManifest"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:":{"name":"-initWithAppServiceType:serviceId:","abstract":"<p>Convenience init for service type and service id.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithMediaServiceData:serviceId:":{"name":"-initWithMediaServiceData:serviceId:","abstract":"<p>Convenience init for media service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithWeatherServiceData:serviceId:":{"name":"-initWithWeatherServiceData:serviceId:","abstract":"<p>Convenience init for weather service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithNavigationServiceData:serviceId:":{"name":"-initWithNavigationServiceData:serviceId:","abstract":"<p>Convenience init for navigation service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(im)initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:":{"name":"-initWithAppServiceType:serviceId:mediaServiceData:weatherServiceData:navigationServiceData:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceType":{"name":"serviceType","abstract":"<p>The type of service that is to be offered by this app. See <code>AppServiceType</code> for known enum equivalent types. Parameter is a string to allow for new service types to be used by apps on older versions of SDL Core.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)serviceId":{"name":"serviceId","abstract":"<p>A unique ID tied to this specific service record. The ID is supplied by the module that services publish themselves.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)mediaServiceData":{"name":"mediaServiceData","abstract":"<p>The media service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)weatherServiceData":{"name":"weatherServiceData","abstract":"<p>The weather service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceData.html#/c:objc(cs)SDLAppServiceData(py)navigationServiceData":{"name":"navigationServiceData","abstract":"<p>The navigation service data.</p>","parent_name":"SDLAppServiceData"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdatedAppServiceRecord:":{"name":"-initWithUpdatedAppServiceRecord:","abstract":"<p>Convenience init for required parameters.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(im)initWithUpdateReason:updatedAppServiceRecord:":{"name":"-initWithUpdateReason:updatedAppServiceRecord:","abstract":"<p>Convenience init for all parameters.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updateReason":{"name":"updateReason","abstract":"<p>Only included in <code>OnSystemCapbilityUpdated</code>. Update reason for this service record.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppServiceCapability.html#/c:objc(cs)SDLAppServiceCapability(py)updatedAppServiceRecord":{"name":"updatedAppServiceRecord","abstract":"<p>Service record for a specific app service provider.</p>","parent_name":"SDLAppServiceCapability"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(cm)currentAppInfo":{"name":"+currentAppInfo","abstract":"<p>Convenience init with no parameters</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appDisplayName":{"name":"appDisplayName","abstract":"<p>The name displayed for the mobile application on the mobile device (can differ from the app name set in the initial RAI request).</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appBundleID":{"name":"appBundleID","abstract":"<p>The AppBundleID of an iOS application or package name of the Android application. This supports App Launch strategies for each platform.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAppInfo.html#/c:objc(cs)SDLAppInfo(py)appVersion":{"name":"appVersion","abstract":"<p>Represents the build version number of this particular mobile app.</p>","parent_name":"SDLAppInfo"},"Classes/SDLAlertResponse.html#/c:objc(cs)SDLAlertResponse(py)tryAgainTime":{"name":"tryAgainTime","abstract":"<p>Amount of time (in seconds) that an app must wait before resending an alert.</p>","parent_name":"SDLAlertResponse"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTS:softButtons:":{"name":"-initWithTTS:softButtons:","abstract":"<p>Convenience init to create an alert maneuver with required parameters</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(im)initWithTTSChunks:softButtons:":{"name":"-initWithTTSChunks:softButtons:","abstract":"<p>Convenience init to create an alert maneuver with all parameters</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlertManeuver.html#/c:objc(cs)SDLAlertManeuver(py)softButtons":{"name":"softButtons","abstract":"<p>An arry of soft buttons. If omitted on supported displays, only the system defined &ldquo;Close&rdquo; SoftButton shall be displayed.</p>","parent_name":"SDLAlertManeuver"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:":{"name":"-initWithAlertText:softButtons:playTone:ttsChunks:alertIcon:cancelID:","abstract":"<p>Convenience init for creating a modal view with text, buttons, and optional sound cues.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:playTone:":{"name":"-initWithTTSChunks:playTone:","abstract":"<p>Convenience init for creating a sound-only alert.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:":{"name":"-initWithAlertText1:alertText2:alertText3:softButtons:playTone:ttsChunks:duration:progressIndicator:alertIcon:cancelID:","abstract":"<p>Convenience init for setting all alert parameters.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:duration:":{"name":"-initWithAlertText1:alertText2:duration:","abstract":"<p>Convenience init for creating an alert with two lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:":{"name":"-initWithAlertText1:alertText2:alertText3:","abstract":"<p>Convenience init for creating an alert with three lines of text.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:","abstract":"<p>Convenience init for creating an alert with three lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithAlertText1:alertText2:alertText3:duration:softButtons:":{"name":"-initWithAlertText1:alertText2:alertText3:duration:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text and a timeout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:playTone:":{"name":"-initWithTTS:playTone:","abstract":"<p>Convenience init for creating a speech-only alert.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:playTone:duration:","abstract":"<p>Convenience init for creating an alert with two lines of text, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTS:alertText1:alertText2:alertText3:playTone:duration:":{"name":"-initWithTTS:alertText1:alertText2:alertText3:playTone:duration:","abstract":"<p>Convenience init for creating an alert with three lines of text, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text, soft buttons, and optional sound cues.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(im)initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:":{"name":"-initWithTTSChunks:alertText1:alertText2:alertText3:playTone:duration:softButtons:","abstract":"<p>Convenience init for creating an alert with three lines of text, soft buttons, optional sound cues, and a timout.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText1":{"name":"alertText1","abstract":"<p>The first line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText2":{"name":"alertText2","abstract":"<p>The second line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertText3":{"name":"alertText3","abstract":"<p>The optional third line of the alert text field.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)ttsChunks":{"name":"ttsChunks","abstract":"<p>An array of text chunks to be spoken or a prerecorded sound file.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)duration":{"name":"duration","abstract":"<p>The duration of the displayed portion of the alert, in milliseconds. Typical timeouts are 3 - 5 seconds. If omitted, the timeout is set to a default of 5 seconds.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)playTone":{"name":"playTone","abstract":"<p>Whether the alert tone should be played before the TTS (if any) is spoken. If omitted or set to false, no tone is played.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)progressIndicator":{"name":"progressIndicator","abstract":"<p>If supported on the given platform, the alert GUI will include some sort of animation indicating that loading of a feature is progressing (e.g. a spinning wheel or hourglass, etc.).</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)softButtons":{"name":"softButtons","abstract":"<p>Buttons for the displayed alert. If omitted on supported displays, the displayed alert shall not have any buttons.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)cancelID":{"name":"cancelID","abstract":"<p>An ID for this specific alert to allow cancellation through the <code>CancelInteraction</code> RPC.</p>","parent_name":"SDLAlert"},"Classes/SDLAlert.html#/c:objc(cs)SDLAlert(py)alertIcon":{"name":"alertIcon","abstract":"<p>Image to be displayed in the alert. If omitted on supported displays, no (or the default if applicable) icon should be displayed.</p>","parent_name":"SDLAlert"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverAirbagDeployed":{"name":"driverAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverSideAirbagDeployed":{"name":"driverSideAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvSideBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverCurtainAirbagDeployed":{"name":"driverCurtainAirbagDeployed","abstract":"<p>References signal &ldquo;VedsDrvCrtnBag_D_Ltchd&rdquo;. See VehicleDataEventStatus</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerAirbagDeployed":{"name":"passengerAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerCurtainAirbagDeployed":{"name":"passengerCurtainAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasCrtnBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)driverKneeAirbagDeployed":{"name":"driverKneeAirbagDeployed","abstract":"<p>References signal &ldquo;VedsKneeDrvBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerSideAirbagDeployed":{"name":"passengerSideAirbagDeployed","abstract":"<p>References signal &ldquo;VedsPasSideBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAirbagStatus.html#/c:objc(cs)SDLAirbagStatus(py)passengerKneeAirbagDeployed":{"name":"passengerKneeAirbagDeployed","abstract":"<p>References signal &ldquo;VedsKneePasBag_D_Ltchd&rdquo;. See VehicleDataEventStatus.</p>","parent_name":"SDLAirbagStatus"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:":{"name":"-initWithId:menuName:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:position:":{"name":"-initWithId:menuName:position:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuIcon:position:":{"name":"-initWithId:menuName:menuIcon:position:","abstract":"<p>Convenience init for creating an add submenu</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(im)initWithId:menuName:menuLayout:menuIcon:position:":{"name":"-initWithId:menuName:menuLayout:menuIcon:position:","abstract":"<p>Convenience init for creating an add submenu with all properties.</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuID":{"name":"menuID","abstract":"<p>a Menu ID that identifies a sub menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)position":{"name":"position","abstract":"<p>a position of menu","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuName":{"name":"menuName","abstract":"<p>a menuName which is displayed representing this submenu item","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuIcon":{"name":"menuIcon","abstract":"<p>An image that is displayed alongside this submenu item</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddSubMenu.html#/c:objc(cs)SDLAddSubMenu(py)menuLayout":{"name":"menuLayout","abstract":"<p>The sub-menu layout. See available menu layouts on SDLWindowCapability.menuLayoutsAvailable. Defaults to LIST.</p>","parent_name":"SDLAddSubMenu"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithHandler:":{"name":"-initWithHandler:","abstract":"<p>Constructs a SDLAddCommand with a handler callback when an event occurs.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:handler:":{"name":"-initWithId:vrCommands:handler:","abstract":"<p>Convenience init for creating a voice command menu item.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:handler:":{"name":"-initWithId:vrCommands:menuName:handler:","abstract":"<p>Convenience init for creating a menu item with text.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:iconValue:iconType:iconIsTemplate:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(im)initWithId:vrCommands:menuName:parentId:position:icon:handler:":{"name":"-initWithId:vrCommands:menuName:parentId:position:icon:handler:","abstract":"<p>Convenience init for creating a menu item with text and a custom icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)handler":{"name":"handler","abstract":"<p>A handler that will let you know when the button you created is subscribed.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdID":{"name":"cmdID","abstract":"<p>A unique id that identifies the command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)menuParams":{"name":"menuParams","abstract":"<p>A <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLMenuParams.html\">SDLMenuParams</a></code> pointer which defines the command and how it is added to the command menu.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)vrCommands":{"name":"vrCommands","abstract":"<p>An array of strings to be used as VR synonyms for this command.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html#/c:objc(cs)SDLAddCommand(py)cmdIcon":{"name":"cmdIcon","abstract":"<p>Image struct containing a static or dynamic icon.</p>","parent_name":"SDLAddCommand"},"Classes/SDLAddCommand.html":{"name":"SDLAddCommand","abstract":"<p>This class will add a command to the application&rsquo;s Command Menu</p>"},"Classes.html#/c:objc(cs)SDLAddCommandResponse":{"name":"SDLAddCommandResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddCommand.html\">SDLAddCommand</a></code></p>"},"Classes/SDLAddSubMenu.html":{"name":"SDLAddSubMenu","abstract":"<p>Add a SDLSubMenu to the Command Menu"},"Classes.html#/c:objc(cs)SDLAddSubMenuResponse":{"name":"SDLAddSubMenuResponse","abstract":"<p>Response to <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLAddSubMenu.html\">SDLAddSubMenu</a></code></p>"},"Classes/SDLAirbagStatus.html":{"name":"SDLAirbagStatus","abstract":"<p>A vehicle data status struct for airbags</p>"},"Classes/SDLAlert.html":{"name":"SDLAlert","abstract":"<p>Shows an alert which typically consists of text-to-speech message and text on the display. Either <code>alertText1</code>, <code>alertText2</code> or <code>TTSChunks</code> needs to be set or the request will be rejected.</p>"},"Classes/SDLAlertManeuver.html":{"name":"SDLAlertManeuver","abstract":"<p>Shows a SDLShowConstantTBT message with an optional voice command. This message is shown as an overlay over the display&rsquo;s base screen.</p>"},"Classes.html#/c:objc(cs)SDLAlertManeuverResponse":{"name":"SDLAlertManeuverResponse","abstract":"<p>Response to SDLAlertManeuver</p>"},"Classes/SDLAlertResponse.html":{"name":"SDLAlertResponse","abstract":"<p>Response to SDLAlert</p>"},"Classes/SDLAppInfo.html":{"name":"SDLAppInfo","abstract":"<p>A struct used in register app interface. Contains detailed information about the registered application.</p>"},"Classes/SDLAppServiceCapability.html":{"name":"SDLAppServiceCapability","abstract":"<p>A currently available service.</p>"},"Classes/SDLAppServiceData.html":{"name":"SDLAppServiceData","abstract":"<p>Contains all the current data of the app service. The serviceType will link to which of the service data objects are included in this object (e.g. if the service type is MEDIA, the mediaServiceData param should be included).</p>"},"Classes/SDLAppServiceManifest.html":{"name":"SDLAppServiceManifest","abstract":"<p>This manifest contains all the information necessary for the service to be published, activated, and allow consumers to interact with it</p>"},"Classes/SDLAppServiceRecord.html":{"name":"SDLAppServiceRecord","abstract":"<p>This is the record of an app service publisher that the module has. It should contain the most up to date information including the service&rsquo;s active state.</p>"},"Classes/SDLAppServicesCapabilities.html":{"name":"SDLAppServicesCapabilities","abstract":"<p>Capabilities of app services including what service types are supported and the current state of services.</p>"},"Classes/SDLArtwork.html":{"name":"SDLArtwork","abstract":"<p>An SDLFile subclass specifically designed for images</p>"},"Classes/SDLAudioControlCapabilities.html":{"name":"SDLAudioControlCapabilities","abstract":"<p>Describes a head unit&rsquo;s audio control capabilities.</p>"},"Classes/SDLAudioControlData.html":{"name":"SDLAudioControlData","abstract":"<p>The audio control data information.</p>"},"Classes/SDLAudioFile.html":{"name":"SDLAudioFile","abstract":"<p>Includes inforamtion about a given audio file</p>"},"Classes/SDLAudioPassThruCapabilities.html":{"name":"SDLAudioPassThruCapabilities","abstract":"<p>Describes different audio type configurations for SDLPerformAudioPassThru, e.g. {8kHz,8-bit,PCM}</p>"},"Classes/SDLAudioStreamManager.html":{"name":"SDLAudioStreamManager","abstract":"<p>The manager to control the audio stream</p>"},"Classes/SDLBeltStatus.html":{"name":"SDLBeltStatus","abstract":"<p>Vehicle data struct for the seat belt status</p>"},"Classes/SDLBodyInformation.html":{"name":"SDLBodyInformation","abstract":"<p>The body information including power modes.</p>"},"Classes/SDLButtonCapabilities.html":{"name":"SDLButtonCapabilities","abstract":"<p>Provides information about the capabilities of a SDL HMI button.</p>"},"Classes/SDLButtonPress.html":{"name":"SDLButtonPress","abstract":"<p>This RPC allows a remote control type mobile application to simulate a hardware button press event.</p>"},"Classes.html#/c:objc(cs)SDLButtonPressResponse":{"name":"SDLButtonPressResponse","abstract":"<p>Response to SDLButtonPress</p>"},"Classes/SDLCancelInteraction.html":{"name":"SDLCancelInteraction","abstract":"<p>Used to dismiss a modal view programmatically without needing to wait for the timeout to complete. Can be used to dismiss alerts, scrollable messages, sliders, and perform interactions (i.e. pop-up menus).</p>"},"Classes.html#/c:objc(cs)SDLCancelInteractionResponse":{"name":"SDLCancelInteractionResponse","abstract":"<p>Response to the request to dismiss a modal view. If no applicable request can be dismissed, the <code>resultCode</code> will be <code>IGNORED</code>.</p>"},"Classes/SDLCarWindowViewController.html":{"name":"SDLCarWindowViewController","abstract":"<p>Note that if this is embedded in a UINavigationController and UITabBarController, it will not lock orientation. You must lock your container controller to a specific orientation.</p>"},"Classes/SDLChangeRegistration.html":{"name":"SDLChangeRegistration","abstract":"<p>If the app recognizes during the app registration that the SDL HMI language (voice/TTS and/or display) does not match the app language, the app will be able (but does not need) to change this registration with changeRegistration prior to app being brought into focus.</p>"},"Classes.html#/c:objc(cs)SDLChangeRegistrationResponse":{"name":"SDLChangeRegistrationResponse","abstract":"<p>Response to SDLChangeRegistrations</p>"},"Classes/SDLChoice.html":{"name":"SDLChoice","abstract":"<p>A choice is an option which a user can select either via the menu or via voice recognition (VR) during an application initiated interaction.</p>"},"Classes/SDLChoiceCell.html":{"name":"SDLChoiceCell","abstract":"<p>A selectable item within an SDLChoiceSet</p>"},"Classes/SDLChoiceSet.html":{"name":"SDLChoiceSet","abstract":"<p>The choice set to be displayed to the user. Contains a list of selectable options.</p>"},"Classes/SDLClimateControlCapabilities.html":{"name":"SDLClimateControlCapabilities","abstract":"<p>Contains information about a climate control module&rsquo;s capabilities.</p>"},"Classes/SDLClimateControlData.html":{"name":"SDLClimateControlData","abstract":"<p>The current information for the Climate Remote Control Module</p>"},"Classes.html#/c:objc(cs)SDLCloseApplication":{"name":"SDLCloseApplication","abstract":"<p>Used by an app to set itself to a <code>HMILevel</code> of <code>NONE</code>. The app will close but will still be registered. If the app is a navigation app it will no longer be used as the preferred mobile-navigation application by the module.</p>"},"Classes.html#/c:objc(cs)SDLCloseApplicationResponse":{"name":"SDLCloseApplicationResponse","abstract":"<p>Response to the request to close this app on the module.</p>"},"Classes/SDLCloudAppProperties.html":{"name":"SDLCloudAppProperties","abstract":"<p>The cloud application properties.</p>"},"Classes/SDLClusterModeStatus.html":{"name":"SDLClusterModeStatus","abstract":"<p>A vehicle data struct for the cluster mode and power status</p>"},"Classes/SDLConfiguration.html":{"name":"SDLConfiguration","abstract":"<p>Contains information about the app&rsquo;s configurtion, such as lifecycle, lockscreen, encryption, etc.</p>"},"Classes/SDLCreateInteractionChoiceSet.html":{"name":"SDLCreateInteractionChoiceSet","abstract":"<p>Creates a Choice Set which can be used in subsequent <em>SDLPerformInteraction</em> Operations.</p>"},"Classes.html#/c:objc(cs)SDLCreateInteractionChoiceSetResponse":{"name":"SDLCreateInteractionChoiceSetResponse","abstract":"<p>Response to SDLCreateInteractionChoiceSet has been called</p>"},"Classes/SDLCreateWindow.html":{"name":"SDLCreateWindow","abstract":"<p>Create a new window on the display with the specified window type."},"Classes.html#/c:objc(cs)SDLCreateWindowResponse":{"name":"SDLCreateWindowResponse","abstract":"<p>Response to SDLCreateWindow</p>"},"Classes/SDLDIDResult.html":{"name":"SDLDIDResult","abstract":"<p>A vehicle data struct</p>"},"Classes/SDLDateTime.html":{"name":"SDLDateTime","abstract":"<p>A struct referenced in SendLocation for an absolute date</p>"},"Classes/SDLDeleteCommand.html":{"name":"SDLDeleteCommand","abstract":"<p>Removes a command from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteCommandResponse":{"name":"SDLDeleteCommandResponse","abstract":"<p>Response to SDLDeleteCommand</p>"},"Classes/SDLDeleteFile.html":{"name":"SDLDeleteFile","abstract":"<p>Used to delete a file resident on the SDL module in the app&rsquo;s local cache."},"Classes/SDLDeleteFileResponse.html":{"name":"SDLDeleteFileResponse","abstract":"<p>Response to SDLDeleteFile</p>"},"Classes/SDLDeleteInteractionChoiceSet.html":{"name":"SDLDeleteInteractionChoiceSet","abstract":"<p>Deletes an existing Choice Set identified by the parameter"},"Classes.html#/c:objc(cs)SDLDeleteInteractionChoiceSetResponse":{"name":"SDLDeleteInteractionChoiceSetResponse","abstract":"<p>SDLDeleteInteractionChoiceSetResponse is sent, when SDLDeleteInteractionChoiceSet has been called</p>"},"Classes/SDLDeleteSubMenu.html":{"name":"SDLDeleteSubMenu","abstract":"<p>Deletes a submenu from the Command Menu"},"Classes.html#/c:objc(cs)SDLDeleteSubMenuResponse":{"name":"SDLDeleteSubMenuResponse","abstract":"<p>Response to SDLDeleteSubMenu</p>"},"Classes/SDLDeleteWindow.html":{"name":"SDLDeleteWindow","abstract":"<p>Deletes previously created window of the SDL application.</p>"},"Classes.html#/c:objc(cs)SDLDeleteWindowResponse":{"name":"SDLDeleteWindowResponse","abstract":"<p>Response to DeleteWindow</p>"},"Classes/SDLDeviceInfo.html":{"name":"SDLDeviceInfo","abstract":"<p>Various information about connecting device. Referenced in RegisterAppInterface</p>"},"Classes/SDLDeviceStatus.html":{"name":"SDLDeviceStatus","abstract":"<p>Describes the status related to a connected mobile device or SDL and if or how it is represented in the vehicle.</p>"},"Classes/SDLDiagnosticMessage.html":{"name":"SDLDiagnosticMessage","abstract":"<p>Non periodic vehicle diagnostic request</p>"},"Classes/SDLDiagnosticMessageResponse.html":{"name":"SDLDiagnosticMessageResponse","abstract":"<p>Response to SDLDiagnosticMessage</p>"},"Classes/SDLDialNumber.html":{"name":"SDLDialNumber","abstract":"<p>This RPC is used to tell the head unit to use bluetooth to dial a phone number using the phone.</p>"},"Classes.html#/c:objc(cs)SDLDialNumberResponse":{"name":"SDLDialNumberResponse","abstract":"<p>The response to SDLDialNumber</p>"},"Classes/SDLDisplayCapabilities.html":{"name":"SDLDisplayCapabilities","abstract":"<p>Contains information about the display for the SDL system to which the application is currently connected.</p>"},"Classes/SDLDisplayCapability.html":{"name":"SDLDisplayCapability","abstract":"<p>Contain the display related information and all windows related to that display.</p>"},"Classes/SDLECallInfo.html":{"name":"SDLECallInfo","abstract":"<p>A vehicle data struct for emergency call information</p>"},"Classes/SDLEmergencyEvent.html":{"name":"SDLEmergencyEvent","abstract":"<p>A vehicle data struct for an emergency event</p>"},"Classes/SDLEncodedSyncPData.html":{"name":"SDLEncodedSyncPData","abstract":"<p>Allows encoded data in the form of SyncP packets to be sent to the SYNC module. Legacy / v1 Protocol implementation; use SyncPData instead.</p>"},"Classes.html#/c:objc(cs)SDLEncodedSyncPDataResponse":{"name":"SDLEncodedSyncPDataResponse","abstract":"<p>The response to SDLEncodedSyncPData</p>"},"Classes/SDLEncryptionConfiguration.html":{"name":"SDLEncryptionConfiguration","abstract":"<p>The encryption configuration data</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThru":{"name":"SDLEndAudioPassThru","abstract":"<p>When this request is invoked, the audio capture stops</p>"},"Classes.html#/c:objc(cs)SDLEndAudioPassThruResponse":{"name":"SDLEndAudioPassThruResponse","abstract":"<p>Response to SDLEndAudioPassThru</p>"},"Classes/SDLEqualizerSettings.html":{"name":"SDLEqualizerSettings","abstract":"<p>Defines the each Equalizer channel settings.</p>"},"Classes/SDLFile.html":{"name":"SDLFile","abstract":"<p>Crates an SDLFile from a file</p>"},"Classes/SDLFileManager.html":{"name":"SDLFileManager","abstract":"<p>The SDLFileManager is an RPC manager for the remote file system. After it starts, it will attempt to communicate with the remote file system to get the names of all files. Deleting and Uploading will them queue these changes as transactions. If a delete succeeds, the local list of remote files will remove that file name, and likewise, if an upload succeeds, the local list of remote files will now include that file name.</p>"},"Classes/SDLFileManagerConfiguration.html":{"name":"SDLFileManagerConfiguration","abstract":"<p>File manager configuration information</p>"},"Classes/SDLFuelRange.html":{"name":"SDLFuelRange","abstract":"<p>Describes the distance a vehicle can travel with the current level of fuel.</p>"},"Classes/SDLFunctionID.html":{"name":"SDLFunctionID","abstract":"<p>A function ID for an SDL RPC</p>"},"Classes/SDLGPSData.html":{"name":"SDLGPSData","abstract":"<p>Describes the GPS data. Not all data will be available on all carlines.</p>"},"Classes.html#/c:objc(cs)SDLGenericResponse":{"name":"SDLGenericResponse","abstract":"<p>Generic Response is sent when the name of a received request is unknown. It is only used in case of an error. It will have an INVALID_DATA result code.</p>"},"Classes/SDLGetAppServiceData.html":{"name":"SDLGetAppServiceData","abstract":"<p>This request asks the module for current data related to the specific service. It also includes an option to subscribe to that service for future updates.</p>"},"Classes/SDLGetAppServiceDataResponse.html":{"name":"SDLGetAppServiceDataResponse","abstract":"<p>This response includes the data that was requested from the specific service.</p>"},"Classes/SDLGetCloudAppProperties.html":{"name":"SDLGetCloudAppProperties","abstract":"<p>RPC used to get the current properties of a cloud application.</p>"},"Classes/SDLGetCloudAppPropertiesResponse.html":{"name":"SDLGetCloudAppPropertiesResponse","abstract":"<p>The response to GetCloudAppProperties</p>"},"Classes/SDLGetDTCs.html":{"name":"SDLGetDTCs","abstract":"<p>This RPC allows to request diagnostic module trouble codes from a certain"},"Classes/SDLGetDTCsResponse.html":{"name":"SDLGetDTCsResponse","abstract":"<p>Response to SDLGetDTCs</p>"},"Classes/SDLGetFile.html":{"name":"SDLGetFile","abstract":"<p>This request is sent to the module to retrieve a file.</p>"},"Classes/SDLGetFileResponse.html":{"name":"SDLGetFileResponse","abstract":"<p>Response to GetFiles</p>"},"Classes/SDLGetInteriorVehicleData.html":{"name":"SDLGetInteriorVehicleData","abstract":"<p>Reads the current status value of specified remote control module (type)."},"Classes/SDLGetInteriorVehicleDataConsent.html":{"name":"SDLGetInteriorVehicleDataConsent","abstract":"<p>This RPC allows you to get consent to control a certian module</p>"},"Classes/SDLGetInteriorVehicleDataConsentResponse.html":{"name":"SDLGetInteriorVehicleDataConsentResponse","abstract":"<p>Response to GetInteriorVehicleDataConsent</p>"},"Classes/SDLGetInteriorVehicleDataResponse.html":{"name":"SDLGetInteriorVehicleDataResponse","abstract":"<p>A response to SDLGetInteriorVehicleData</p>"},"Classes/SDLGetSystemCapability.html":{"name":"SDLGetSystemCapability","abstract":"<p>SDL RPC Request for expanded information about a supported system/HMI capability</p>"},"Classes/SDLGetSystemCapabilityResponse.html":{"name":"SDLGetSystemCapabilityResponse","abstract":"<p>Response to SDLGetSystemCapability</p>"},"Classes/SDLGetVehicleData.html":{"name":"SDLGetVehicleData","abstract":"<p>Requests current values of specific published vehicle data items.</p>"},"Classes/SDLGetVehicleDataResponse.html":{"name":"SDLGetVehicleDataResponse","abstract":"<p>Response to SDLGetVehicleData</p>"},"Classes/SDLGetWayPoints.html":{"name":"SDLGetWayPoints","abstract":"<p>This RPC allows you to get navigation waypoint data</p>"},"Classes/SDLGetWayPointsResponse.html":{"name":"SDLGetWayPointsResponse","abstract":"<p>Response to SDLGetWayPoints</p>"},"Classes/SDLGrid.html":{"name":"SDLGrid","abstract":"<p>Describes a location (origin coordinates and span) of a vehicle component.</p>"},"Classes/SDLHMICapabilities.html":{"name":"SDLHMICapabilities","abstract":"<p>Contains information about the HMI capabilities.</p>"},"Classes/SDLHMIPermissions.html":{"name":"SDLHMIPermissions","abstract":"<p>Defining sets of HMI levels, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLHMISettingsControlCapabilities.html":{"name":"SDLHMISettingsControlCapabilities","abstract":"<p>HMI data struct for HMI control settings</p>"},"Classes/SDLHMISettingsControlData.html":{"name":"SDLHMISettingsControlData","abstract":"<p>Corresponds to &ldquo;HMI_SETTINGS&rdquo; ModuleType</p>"},"Classes/SDLHapticRect.html":{"name":"SDLHapticRect","abstract":"<p>Defines spatial for each user control object for video streaming application</p>"},"Classes/SDLHeadLampStatus.html":{"name":"SDLHeadLampStatus","abstract":"<p>Vehicle data struct for status of head lamps</p>"},"Classes/SDLImage.html":{"name":"SDLImage","abstract":"<p>Specifies which image shall be used e.g. in SDLAlerts or on SDLSoftbuttons provided the display supports it.</p>"},"Classes/SDLImageField.html":{"name":"SDLImageField","abstract":"<p>A struct used in DisplayCapabilities describing the capability of an image field</p>"},"Classes/SDLImageResolution.html":{"name":"SDLImageResolution","abstract":"<p>The resolution of an image</p>"},"Classes/SDLKeyboardProperties.html":{"name":"SDLKeyboardProperties","abstract":"<p>Configuration of on-screen keyboard (if available)</p>"},"Classes/SDLLifecycleConfiguration.html":{"name":"SDLLifecycleConfiguration","abstract":"<p>Configuration options for SDLManager</p>"},"Classes/SDLLifecycleConfigurationUpdate.html":{"name":"SDLLifecycleConfigurationUpdate","abstract":"<p>Configuration update options for SDLManager. This class can be used to update the lifecycle configuration in"},"Classes/SDLLightCapabilities.html":{"name":"SDLLightCapabilities","abstract":"<p>Current Light capabilities.</p>"},"Classes/SDLLightControlCapabilities.html":{"name":"SDLLightControlCapabilities","abstract":"<p>Current light control capabilities.</p>"},"Classes/SDLLightControlData.html":{"name":"SDLLightControlData","abstract":"<p>Data about the current light controls</p>"},"Classes/SDLLightState.html":{"name":"SDLLightState","abstract":"<p>Current light control state</p>"},"Classes.html#/c:objc(cs)SDLListFiles":{"name":"SDLListFiles","abstract":"<p>Requests the current list of resident filenames for the registered app. Not"},"Classes/SDLListFilesResponse.html":{"name":"SDLListFilesResponse","abstract":"<p>Response to SDLListFiles</p>"},"Classes/SDLLocationCoordinate.html":{"name":"SDLLocationCoordinate","abstract":"<p>Describes a coordinate on earth</p>"},"Classes/SDLLocationDetails.html":{"name":"SDLLocationDetails","abstract":"<p>Describes a location, including its coordinate, name, etc. Used in WayPoints.</p>"},"Classes/SDLLockScreenConfiguration.html":{"name":"SDLLockScreenConfiguration","abstract":"<p>A configuration describing how the lock screen should be used by the internal SDL system for your application. This configuration is provided before SDL starts and will govern the entire SDL lifecycle of your application.</p>"},"Classes/SDLLockScreenViewController.html":{"name":"SDLLockScreenViewController","abstract":"<p>The view controller for the lockscreen.</p>"},"Classes/SDLLogConfiguration.html":{"name":"SDLLogConfiguration","abstract":"<p>Information about the current logging configuration</p>"},"Classes/SDLLogFileModule.html":{"name":"SDLLogFileModule","abstract":"<p>A log file module is a collection of source code files that form a cohesive unit and that logs can all use to describe themselves. E.g. a &ldquo;transport&rdquo; module, or a &ldquo;Screen Manager&rdquo; module.</p>"},"Classes/SDLLogFilter.html":{"name":"SDLLogFilter","abstract":"<p>Represents a filter over which SDL logs should be logged</p>"},"Classes/SDLLogManager.html":{"name":"SDLLogManager","abstract":"<p>This is the central manager of logging. A developer should not have to interact with this class, it is exclusively used internally.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetAppleSystemLog":{"name":"SDLLogTargetAppleSystemLog","abstract":"<p>The Apple System Log target is an iOS 2.0+ compatible log target that logs to both the Console and to the System Log.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetFile":{"name":"SDLLogTargetFile","abstract":"<p>The File log will log to a text file on the iPhone in Documents/smartdevicelink/log/#appName##datetime##.log. It will log up to 3 logs which will rollover.</p>"},"Classes.html#/c:objc(cs)SDLLogTargetOSLog":{"name":"SDLLogTargetOSLog","abstract":"<p>OS_LOG is an iOS 10+ only logging system that logs to the Console and the Apple system console. This is an improved replacement for Apple SysLog (SDLLogTargetAppleSystemLog). </p>"},"Classes/SDLManager.html":{"name":"SDLManager","abstract":"<p>The top level manager object for all of SDL&rsquo;s interactions with the app and the head unit</p>"},"Classes/SDLMassageCushionFirmness.html":{"name":"SDLMassageCushionFirmness","abstract":"<p>The intensity or firmness of a cushion.</p>"},"Classes/SDLMassageModeData.html":{"name":"SDLMassageModeData","abstract":"<p>Specify the mode of a massage zone.</p>"},"Classes/SDLMediaServiceData.html":{"name":"SDLMediaServiceData","abstract":"<p>This data is related to what a media service should provide.</p>"},"Classes.html#/c:objc(cs)SDLMediaServiceManifest":{"name":"SDLMediaServiceManifest","abstract":"<p>A media service manifest.</p>"},"Classes/SDLMenuCell.html":{"name":"SDLMenuCell","abstract":"<p>A menu cell item for the main menu or sub-menu.</p>"},"Classes/SDLMenuConfiguration.html":{"name":"SDLMenuConfiguration","abstract":"<p>Defines how the menu is configured</p>"},"Classes/SDLMenuParams.html":{"name":"SDLMenuParams","abstract":"<p>Used when adding a sub menu to an application menu or existing sub menu.</p>"},"Classes/SDLMetadataTags.html":{"name":"SDLMetadataTags","abstract":"<p>Metadata for Show fields</p>"},"Classes/SDLModuleData.html":{"name":"SDLModuleData","abstract":"<p>Describes a remote control module&rsquo;s data</p>"},"Classes/SDLModuleInfo.html":{"name":"SDLModuleInfo","abstract":"<p>Contains information about a RC module.</p>"},"Classes/SDLMsgVersion.html":{"name":"SDLMsgVersion","abstract":"<p>Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.</p>"},"Classes/SDLMyKey.html":{"name":"SDLMyKey","abstract":"<p>Vehicle Data struct</p>"},"Classes/SDLNavigationCapability.html":{"name":"SDLNavigationCapability","abstract":"<p>Extended capabilities for an onboard navigation system</p>"},"Classes/SDLNavigationInstruction.html":{"name":"SDLNavigationInstruction","abstract":"<p>A navigation instruction.</p>"},"Classes/SDLNavigationServiceData.html":{"name":"SDLNavigationServiceData","abstract":"<p>This data is related to what a navigation service would provide.</p>"},"Classes/SDLNavigationServiceManifest.html":{"name":"SDLNavigationServiceManifest","abstract":"<p>A navigation service manifest.</p>"},"Classes/SDLNotificationConstants.html":{"name":"SDLNotificationConstants","abstract":"<p>This class defines methods for getting groups of notifications</p>"},"Classes/SDLOasisAddress.html":{"name":"SDLOasisAddress","abstract":"<p>Struct used in SendLocation describing an address</p>"},"Classes/SDLOnAppInterfaceUnregistered.html":{"name":"SDLOnAppInterfaceUnregistered","abstract":"<p>Notifies an application that its interface registration has been terminated. This means that all SDL resources associated with the application are discarded, including the Command Menu, Choice Sets, button subscriptions, etc.</p>"},"Classes/SDLOnAppServiceData.html":{"name":"SDLOnAppServiceData","abstract":"<p>This notification includes the data that is updated from the specific service.</p>"},"Classes.html#/c:objc(cs)SDLOnAudioPassThru":{"name":"SDLOnAudioPassThru","abstract":"<p>Binary data is in binary part of hybrid msg.</p>"},"Classes/SDLOnButtonEvent.html":{"name":"SDLOnButtonEvent","abstract":"<p>Notifies application that user has depressed or released a button to which"},"Classes/SDLOnButtonPress.html":{"name":"SDLOnButtonPress","abstract":"<p>Notifies application of button press events for buttons to which the application is subscribed. SDL supports two button press events defined as follows:</p>"},"Classes/SDLOnCommand.html":{"name":"SDLOnCommand","abstract":"<p>This is called when a command was selected via VR after pressing the PTT button, or selected from the menu after pressing the MENU button.</p>"},"Classes/SDLOnDriverDistraction.html":{"name":"SDLOnDriverDistraction","abstract":"<p>Notifies the application of the current driver distraction state (whether driver distraction rules are in effect, or not).</p>"},"Classes/SDLOnEncodedSyncPData.html":{"name":"SDLOnEncodedSyncPData","abstract":"<p>Callback including encoded data of any SyncP packets that SYNC needs to send back to the mobile device. Legacy / v1 Protocol implementation; responds to EncodedSyncPData. *** DEPRECATED ***</p>"},"Classes/SDLOnHMIStatus.html":{"name":"SDLOnHMIStatus"},"Classes/SDLOnHashChange.html":{"name":"SDLOnHashChange","abstract":"<p>Notification containing an updated hashID which can be used over connection cycles (i.e. loss of connection, ignition cycles, etc.). Sent after initial registration and subsequently after any change in the calculated hash of all persisted app data.</p>"},"Classes/SDLOnInteriorVehicleData.html":{"name":"SDLOnInteriorVehicleData","abstract":"<p>Notifications when subscribed vehicle data changes.</p>"},"Classes/SDLOnKeyboardInput.html":{"name":"SDLOnKeyboardInput","abstract":"<p>Sent when a keyboard presented by a PerformInteraction has a keyboard input.</p>"},"Classes/SDLOnLanguageChange.html":{"name":"SDLOnLanguageChange","abstract":"<p>Provides information to what language the SDL HMI language was changed</p>"},"Classes/SDLOnLockScreenStatus.html":{"name":"SDLOnLockScreenStatus","abstract":"<p>To help prevent driver distraction, any SmartDeviceLink application is required to implement a lockscreen that must be enforced while the application is active on the system while the vehicle is in motion.</p>"},"Classes/SDLOnPermissionsChange.html":{"name":"SDLOnPermissionsChange","abstract":"<p>Provides update to app of which sets of functions are available</p>"},"Classes/SDLOnRCStatus.html":{"name":"SDLOnRCStatus","abstract":"<p>OnRCStatus notifications to all registered mobile applications and the HMI whenever"},"Classes/SDLOnSyncPData.html":{"name":"SDLOnSyncPData","abstract":"<p>DEPRECATED</p>"},"Classes/SDLOnSystemCapabilityUpdated.html":{"name":"SDLOnSystemCapabilityUpdated","abstract":"<p>A notification to inform the connected device that a specific system capability has changed.</p>"},"Classes/SDLOnSystemRequest.html":{"name":"SDLOnSystemRequest","abstract":"<p>An asynchronous request from the system for specific data from the device or the cloud or response to a request from the device or cloud Binary data can be included in hybrid part of message for some requests (such as Authentication request responses)</p>"},"Classes/SDLOnTBTClientState.html":{"name":"SDLOnTBTClientState","abstract":"<p>Provides applications with notifications specific to the current TBT client status on the module</p>"},"Classes/SDLOnTouchEvent.html":{"name":"SDLOnTouchEvent","abstract":"<p>Notifies about touch events on the screen&rsquo;s prescribed area during video streaming</p>"},"Classes/SDLOnVehicleData.html":{"name":"SDLOnVehicleData","abstract":"<p>Callback for the periodic and non periodic vehicle data read function.</p>"},"Classes/SDLOnWayPointChange.html":{"name":"SDLOnWayPointChange","abstract":"<p>Notification which provides the entire LocationDetails when there is a change to any waypoints or destination.</p>"},"Classes/SDLParameterPermissions.html":{"name":"SDLParameterPermissions","abstract":"<p>Defining sets of parameters, which are permitted or prohibited for a given RPC.</p>"},"Classes/SDLPerformAppServiceInteraction.html":{"name":"SDLPerformAppServiceInteraction","abstract":"<p>App service providers will likely have different actions exposed to the module and app service consumers. It will be difficult to standardize these actions by RPC versions and can easily become stale. Therefore, we introduce a best-effort attempt to take actions on a service.</p>"},"Classes/SDLPerformAppServiceInteractionResponse.html":{"name":"SDLPerformAppServiceInteractionResponse","abstract":"<p>Response to the request to request an app service.</p>"},"Classes/SDLPerformAudioPassThru.html":{"name":"SDLPerformAudioPassThru","abstract":"<p>This will open an audio pass thru session. By doing so the app can receive"},"Classes.html#/c:objc(cs)SDLPerformAudioPassThruResponse":{"name":"SDLPerformAudioPassThruResponse","abstract":"<p>Response to SDLPerformAudioPassThru</p>"},"Classes/SDLPerformInteraction.html":{"name":"SDLPerformInteraction","abstract":"<p>Performs an application-initiated interaction in which the user can select a choice from the passed choice set.</p>"},"Classes/SDLPerformInteractionResponse.html":{"name":"SDLPerformInteractionResponse","abstract":"<p>PerformInteraction Response is sent, when SDLPerformInteraction has been called</p>"},"Classes/SDLPermissionElement.html":{"name":"SDLPermissionElement","abstract":"<p>An object containing the RPC name and its parameter names that should be checked when checking permissions</p>"},"Classes/SDLPermissionItem.html":{"name":"SDLPermissionItem","abstract":"<p>Permissions for a given set of RPCs</p>"},"Classes/SDLPermissionManager.html":{"name":"SDLPermissionManager","abstract":"<p>The permission manager monitoring RPC permissions.</p>"},"Classes/SDLPhoneCapability.html":{"name":"SDLPhoneCapability","abstract":"<p>Extended capabilities of the module&rsquo;s phone feature</p>"},"Classes/SDLPinchGesture.html":{"name":"SDLPinchGesture","abstract":"<p>Pinch Gesture information</p>"},"Classes/SDLPresetBankCapabilities.html":{"name":"SDLPresetBankCapabilities","abstract":"<p>Contains information about on-screen preset capabilities.</p>"},"Classes/SDLPublishAppService.html":{"name":"SDLPublishAppService","abstract":"<p>Registers a service offered by this app on the module."},"Classes/SDLPublishAppServiceResponse.html":{"name":"SDLPublishAppServiceResponse","abstract":"<p>Response to the request to register a service offered by this app on the module.</p>"},"Classes/SDLPutFile.html":{"name":"SDLPutFile","abstract":"<p>Used to push a binary data onto the SDL module from a mobile device, such as icons and album art.</p>"},"Classes/SDLPutFileResponse.html":{"name":"SDLPutFileResponse","abstract":"<p>Response to SDLPutFile</p>"},"Classes/SDLRDSData.html":{"name":"SDLRDSData","abstract":"<p>Include the data defined in Radio Data System, which is a communications protocol standard for embedding small amounts of digital information in conventional FM radio broadcasts.</p>"},"Classes/SDLRGBColor.html":{"name":"SDLRGBColor","abstract":"<p>Represents an RGB color</p>"},"Classes/SDLRPCMessage.html":{"name":"SDLRPCMessage","abstract":"<p>Parent class of all RPC messages.</p>"},"Classes.html#/c:objc(cs)SDLRPCNotification":{"name":"SDLRPCNotification","abstract":"<p>An RPC sent from the head unit to the app about some data change, such as a button was pressed</p>"},"Classes/SDLRPCNotificationNotification.html":{"name":"SDLRPCNotificationNotification","abstract":"<p>An NSNotification object that makes retrieving internal SDLRPCNotification data easier</p>"},"Classes/SDLRPCPermissionStatus.html":{"name":"SDLRPCPermissionStatus","abstract":"<p>An object containing the result status of a permission element request</p>"},"Classes/SDLRPCRequest.html":{"name":"SDLRPCRequest","abstract":"<p>Superclass of RPC requests</p>"},"Classes/SDLRPCRequestNotification.html":{"name":"SDLRPCRequestNotification","abstract":"<p>A NSNotification object that makes retrieving internal SDLRPCRequest data easier</p>"},"Classes/SDLRPCResponse.html":{"name":"SDLRPCResponse","abstract":"<p>Superclass of RPC responses</p>"},"Classes/SDLRPCResponseNotification.html":{"name":"SDLRPCResponseNotification","abstract":"<p>A NSNotification object that makes retrieving internal SDLRPCResponse data easier</p>"},"Classes/SDLRPCStruct.html":{"name":"SDLRPCStruct","abstract":"<p>Superclass of all RPC-related structs and messages</p>"},"Classes/SDLRadioControlCapabilities.html":{"name":"SDLRadioControlCapabilities","abstract":"<p>Contains information about a radio control module&rsquo;s capabilities.</p>"},"Classes/SDLRadioControlData.html":{"name":"SDLRadioControlData","abstract":"<p>Include information (both read-only and changeable data) about a remote control radio module.</p>"},"Classes/SDLReadDID.html":{"name":"SDLReadDID","abstract":"<p>Non periodic vehicle data read request. This is an RPC to get diagnostics"},"Classes/SDLReadDIDResponse.html":{"name":"SDLReadDIDResponse","abstract":"<p>A response to ReadDID</p>"},"Classes/SDLRectangle.html":{"name":"SDLRectangle","abstract":"<p>A struct describing a rectangle</p>"},"Classes/SDLRegisterAppInterface.html":{"name":"SDLRegisterAppInterface","abstract":"<p>Registers the application&rsquo;s interface with SDL. The <code>RegisterAppInterface</code> RPC declares the properties of the app, including the messaging interface version, the app name, etc. The mobile application must establish its interface registration with SDL before any other interaction with SDL can take place. The registration lasts until it is terminated either by the application calling the <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses.html#/c:objc(cs)SDLUnregisterAppInterface\">SDLUnregisterAppInterface</a></code> method, or by SDL sending an <code><a href=\"36f8f5912051ae747ef441d6511ca4cbClasses/SDLOnAppInterfaceUnregistered.html\">SDLOnAppInterfaceUnregistered</a></code> notification, or by loss of the underlying transport connection, or closing of the underlying message transmission protocol RPC session.</p>"},"Classes/SDLRegisterAppInterfaceResponse.html":{"name":"SDLRegisterAppInterfaceResponse","abstract":"<p>Response to SDLRegisterAppInterface</p>"},"Classes/SDLReleaseInteriorVehicleDataModule.html":{"name":"SDLReleaseInteriorVehicleDataModule","abstract":"<p>Releases a controlled remote control module so others can take control</p>"},"Classes.html#/c:objc(cs)SDLReleaseInteriorVehicleDataModuleResponse":{"name":"SDLReleaseInteriorVehicleDataModuleResponse","abstract":"<p>Response to ReleaseInteriorVehicleDataModule</p>"},"Classes/SDLRemoteControlCapabilities.html":{"name":"SDLRemoteControlCapabilities","abstract":"<p>Capabilities of the remote control feature</p>"},"Classes/SDLResetGlobalProperties.html":{"name":"SDLResetGlobalProperties","abstract":"<p>Resets the passed global properties to their default values as defined by"},"Classes.html#/c:objc(cs)SDLResetGlobalPropertiesResponse":{"name":"SDLResetGlobalPropertiesResponse","abstract":"<p>Response to ResetGlobalProperties</p>"},"Classes/SDLSISData.html":{"name":"SDLSISData","abstract":"<p>HD radio Station Information Service (SIS) data.</p>"},"Classes/SDLScreenManager.html":{"name":"SDLScreenManager","abstract":"<p>The SDLScreenManager is a manager to control SDL UI features. Use the screen manager for setting up the UI of the template, creating a menu for your users, creating softbuttons, setting textfields, etc..</p>"},"Classes/SDLScreenParams.html":{"name":"SDLScreenParams","abstract":"<p>A struct in DisplayCapabilities describing parameters related to a video / touch input area</p>"},"Classes/SDLScrollableMessage.html":{"name":"SDLScrollableMessage","abstract":"<p>Creates a full screen overlay containing a large block of formatted text that can be scrolled with buttons available.</p>"},"Classes.html#/c:objc(cs)SDLScrollableMessageResponse":{"name":"SDLScrollableMessageResponse","abstract":"<p>Response to SDLScrollableMessage</p>"},"Classes/SDLSeatControlCapabilities.html":{"name":"SDLSeatControlCapabilities","abstract":"<p>Include information about a seat control capabilities.</p>"},"Classes/SDLSeatControlData.html":{"name":"SDLSeatControlData","abstract":"<p>Seat control data corresponds to &ldquo;SEAT&rdquo; ModuleType.</p>"},"Classes/SDLSeatLocation.html":{"name":"SDLSeatLocation","abstract":"<p>Describes the location of a seat</p>"},"Classes/SDLSeatLocationCapability.html":{"name":"SDLSeatLocationCapability","abstract":"<p>Contains information about the locations of each seat.</p>"},"Classes/SDLSeatMemoryAction.html":{"name":"SDLSeatMemoryAction","abstract":"<p>Specify the action to be performed.</p>"},"Classes/SDLSendHapticData.html":{"name":"SDLSendHapticData","abstract":"<p>Sends the spatial data gathered from SDLCarWindow or VirtualDisplayEncoder to the HMI. This data will be utilized by the HMI to determine how and when haptic events should occur.</p>"},"Classes.html#/c:objc(cs)SDLSendHapticDataResponse":{"name":"SDLSendHapticDataResponse","abstract":"<p>Response to SDLSendHapticData</p>"},"Classes/SDLSendLocation.html":{"name":"SDLSendLocation","abstract":"<p>SendLocation is used to send a location to the navigation system for navigation</p>"},"Classes.html#/c:objc(cs)SDLSendLocationResponse":{"name":"SDLSendLocationResponse","abstract":"<p>Response to SDLSendLocation</p>"},"Classes/SDLSetAppIcon.html":{"name":"SDLSetAppIcon","abstract":"<p>Used to set existing local file on SDL as the app&rsquo;s icon. Not supported on"},"Classes.html#/c:objc(cs)SDLSetAppIconResponse":{"name":"SDLSetAppIconResponse","abstract":"<p>Response to SDLSetAppIcon</p>"},"Classes/SDLSetCloudAppProperties.html":{"name":"SDLSetCloudAppProperties","abstract":"<p>RPC used to enable/disable a cloud application and set authentication data</p>"},"Classes.html#/c:objc(cs)SDLSetCloudAppPropertiesResponse":{"name":"SDLSetCloudAppPropertiesResponse","abstract":"<p>The response to SetCloudAppProperties</p>"},"Classes/SDLSetDisplayLayout.html":{"name":"SDLSetDisplayLayout","abstract":"<p>Used to set an alternate display layout. If not sent, default screen for"},"Classes/SDLSetDisplayLayoutResponse.html":{"name":"SDLSetDisplayLayoutResponse","abstract":"<p>Response to SDLSetDisplayLayout</p>"},"Classes/SDLSetGlobalProperties.html":{"name":"SDLSetGlobalProperties","abstract":"<p>Sets global property values</p>"},"Classes.html#/c:objc(cs)SDLSetGlobalPropertiesResponse":{"name":"SDLSetGlobalPropertiesResponse","abstract":"<p>Response to SDLSetGlobalProperties</p>"},"Classes/SDLSetInteriorVehicleData.html":{"name":"SDLSetInteriorVehicleData","abstract":"<p>This RPC allows a remote control type mobile application to"},"Classes/SDLSetInteriorVehicleDataResponse.html":{"name":"SDLSetInteriorVehicleDataResponse","abstract":"<p>Response to SDLSetInteriorVehicleData</p>"},"Classes/SDLSetMediaClockTimer.html":{"name":"SDLSetMediaClockTimer","abstract":"<p>Sets the media clock/timer value and the update method (e.g.count-up,"},"Classes.html#/c:objc(cs)SDLSetMediaClockTimerResponse":{"name":"SDLSetMediaClockTimerResponse","abstract":"<p>Response to SDLSetMediaClockTimer</p>"},"Classes/SDLShow.html":{"name":"SDLShow","abstract":"<p>Updates the application&rsquo;s display text area, regardless of whether or not"},"Classes/SDLShowAppMenu.html":{"name":"SDLShowAppMenu","abstract":"<p>Used by an app to show the app&rsquo;s menu, typically this is used by a navigation app if the menu button is hidden.</p>"},"Classes.html#/c:objc(cs)SDLShowAppMenuResponse":{"name":"SDLShowAppMenuResponse","abstract":"<p>Response to the request to show the app menu.</p>"},"Classes/SDLShowConstantTBT.html":{"name":"SDLShowConstantTBT","abstract":"<p>This RPC is used to update the user with navigation information for the constantly shown screen (base screen), but also for the alert maneuver screen.</p>"},"Classes.html#/c:objc(cs)SDLShowConstantTBTResponse":{"name":"SDLShowConstantTBTResponse","abstract":"<p>Response to SDLShowConstantTBT</p>"},"Classes.html#/c:objc(cs)SDLShowResponse":{"name":"SDLShowResponse","abstract":"<p>Response to SDLShow</p>"},"Classes/SDLSingleTireStatus.html":{"name":"SDLSingleTireStatus","abstract":"<p>Tire pressure status of a single tire.</p>"},"Classes/SDLSlider.html":{"name":"SDLSlider","abstract":"<p>Creates a full screen or pop-up overlay (depending on platform) with a single user controlled slider.</p>"},"Classes/SDLSliderResponse.html":{"name":"SDLSliderResponse","abstract":"<p>Response to SDLSlider</p>"},"Classes/SDLSoftButton.html":{"name":"SDLSoftButton","abstract":"<p>Describes an on-screen button which may be presented in various contexts, e.g. templates or alerts</p>"},"Classes/SDLSoftButtonCapabilities.html":{"name":"SDLSoftButtonCapabilities","abstract":"<p>Contains information about a SoftButton&rsquo;s capabilities.</p>"},"Classes/SDLSoftButtonObject.html":{"name":"SDLSoftButtonObject","abstract":"<p>A soft button wrapper object that is capable of storing and switching between states</p>"},"Classes/SDLSoftButtonState.html":{"name":"SDLSoftButtonState","abstract":"<p>A soft button state including data such as text, name and artwork</p>"},"Classes/SDLSpeak.html":{"name":"SDLSpeak","abstract":"<p>Speaks a phrase over the vehicle audio system using SDL&rsquo;s TTS (text-to-speech) engine. The provided text to be spoken can be simply a text phrase, or it can consist of phoneme specifications to direct SDL&rsquo;s TTS engine to speak a &ldquo;speech-sculpted&rdquo; phrase.</p>"},"Classes.html#/c:objc(cs)SDLSpeakResponse":{"name":"SDLSpeakResponse","abstract":"<p>Response to SDLSpeak</p>"},"Classes/SDLStartTime.html":{"name":"SDLStartTime","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStationIDNumber.html":{"name":"SDLStationIDNumber","abstract":"<p>Describes the hour, minute and second values used to set the media clock.</p>"},"Classes/SDLStreamingMediaConfiguration.html":{"name":"SDLStreamingMediaConfiguration","abstract":"<p>The streaming media configuration. Use this class to configure streaming media information.</p>"},"Classes/SDLStreamingMediaManager.html":{"name":"SDLStreamingMediaManager","abstract":"<p>Manager to help control streaming (video and audio) media services.</p>"},"Classes/SDLStreamingVideoScaleManager.html":{"name":"SDLStreamingVideoScaleManager","abstract":"<p>This class consolidates the logic of scaling between the view controller&rsquo;s coordinate system and the display&rsquo;s coordinate system.</p>"},"Classes/SDLSubscribeButton.html":{"name":"SDLSubscribeButton","abstract":"<p>Establishes a subscription to button notifications for HMI buttons. Buttons"},"Classes.html#/c:objc(cs)SDLSubscribeButtonResponse":{"name":"SDLSubscribeButtonResponse","abstract":"<p>Response to SDLSubscribeButton</p>"},"Classes/SDLSubscribeVehicleData.html":{"name":"SDLSubscribeVehicleData","abstract":"<p>Subscribes to specific published vehicle data items. The data will be only sent if it has changed. The application will be notified by the <code>onVehicleData</code> notification whenever new data is available. The update rate is dependent on sensors, vehicle architecture and vehicle type.</p>"},"Classes/SDLSubscribeVehicleDataResponse.html":{"name":"SDLSubscribeVehicleDataResponse","abstract":"<p>Response to SDLSubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLSubscribeWayPoints":{"name":"SDLSubscribeWayPoints","abstract":"<p>A SDLSubscribeWaypoints can be sent to subscribe"},"Classes.html#/c:objc(cs)SDLSubscribeWayPointsResponse":{"name":"SDLSubscribeWayPointsResponse","abstract":"<p>Response to SubscribeWayPoints</p>"},"Classes/SDLSyncMsgVersion.html":{"name":"SDLSyncMsgVersion","abstract":"<p>Specifies the version number of the SDL V4 interface. This is used by both the application and SDL to declare what interface version each is using.</p>"},"Classes.html#/c:objc(cs)SDLSyncPData":{"name":"SDLSyncPData","abstract":"<p>Allows binary data in the form of SyncP packets to be sent to the SYNC module. Binary data is in binary part of hybrid msg.</p>"},"Classes.html#/c:objc(cs)SDLSyncPDataResponse":{"name":"SDLSyncPDataResponse","abstract":"<p>Response to SyncPData</p>"},"Classes/SDLSystemCapability.html":{"name":"SDLSystemCapability","abstract":"<p>The systemCapabilityType indicates which type of data should be changed and identifies which data object exists in this struct. For example, if the SystemCapability Type is NAVIGATION then a &ldquo;navigationCapability&rdquo; should exist.</p>"},"Classes/SDLSystemCapabilityManager.html":{"name":"SDLSystemCapabilityManager","abstract":"<p>A manager that handles updating and subscribing to SDL capabilities.</p>"},"Classes/SDLSystemRequest.html":{"name":"SDLSystemRequest","abstract":"<p>An asynchronous request from the device; binary data can be included in hybrid part of message for some requests (such as HTTP, Proprietary, or Authentication requests)</p>"},"Classes/SDLTTSChunk.html":{"name":"SDLTTSChunk","abstract":"<p>Specifies what is to be spoken. This can be simply a text phrase, which SDL will speak according to its own rules. It can also be phonemes from either the Microsoft SAPI phoneme set, or from the LHPLUS phoneme set. It can also be a pre-recorded sound in WAV format (either developer-defined, or provided by the SDL platform).</p>"},"Classes/SDLTemperature.html":{"name":"SDLTemperature","abstract":"<p>Struct representing a temperature.</p>"},"Classes/SDLTemplateColorScheme.html":{"name":"SDLTemplateColorScheme","abstract":"<p>A color scheme for all display layout templates.</p>"},"Classes/SDLTemplateConfiguration.html":{"name":"SDLTemplateConfiguration","abstract":"<p>Used to set an alternate template layout to a window.</p>"},"Classes/SDLTextField.html":{"name":"SDLTextField","abstract":"<p>Struct defining the characteristics of a displayed field on the HMI.</p>"},"Classes/SDLTireStatus.html":{"name":"SDLTireStatus","abstract":"<p>Struct used in Vehicle Data; the status and pressure of the tires.</p>"},"Classes/SDLTouch.html":{"name":"SDLTouch","abstract":"<p>Describes a touch location</p>"},"Classes/SDLTouchCoord.html":{"name":"SDLTouchCoord","abstract":"<p>The coordinate of a touch, used in a touch event</p>"},"Classes/SDLTouchEvent.html":{"name":"SDLTouchEvent","abstract":"<p>A touch which occurred on the IVI system during projection</p>"},"Classes/SDLTouchEventCapabilities.html":{"name":"SDLTouchEventCapabilities","abstract":"<p>The capabilities of touches during projection applications</p>"},"Classes/SDLTouchManager.html":{"name":"SDLTouchManager","abstract":"<p>Touch Manager responsible for processing touch event notifications.</p>"},"Classes/SDLTurn.html":{"name":"SDLTurn","abstract":"<p>A struct used in UpdateTurnList for Turn-by-Turn navigation applications</p>"},"Classes/SDLUnpublishAppService.html":{"name":"SDLUnpublishAppService","abstract":"<p>Unpublish an existing service published by this application.</p>"},"Classes.html#/c:objc(cs)SDLUnpublishAppServiceResponse":{"name":"SDLUnpublishAppServiceResponse","abstract":"<p>The response to UnpublishAppService</p>"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterface":{"name":"SDLUnregisterAppInterface","abstract":"<p>Terminates an application&rsquo;s interface registration. This causes SDL&reg; to"},"Classes.html#/c:objc(cs)SDLUnregisterAppInterfaceResponse":{"name":"SDLUnregisterAppInterfaceResponse","abstract":"<p>Response to UnregisterAppInterface</p>"},"Classes/SDLUnsubscribeButton.html":{"name":"SDLUnsubscribeButton","abstract":"<p>Deletes a subscription to button notifications for the specified button. For"},"Classes.html#/c:objc(cs)SDLUnsubscribeButtonResponse":{"name":"SDLUnsubscribeButtonResponse","abstract":"<p>Response to UnsubscribeButton</p>"},"Classes/SDLUnsubscribeVehicleData.html":{"name":"SDLUnsubscribeVehicleData","abstract":"<p>This function is used to unsubscribe the notifications from the"},"Classes/SDLUnsubscribeVehicleDataResponse.html":{"name":"SDLUnsubscribeVehicleDataResponse","abstract":"<p>Response to UnsubscribeVehicleData</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPoints":{"name":"SDLUnsubscribeWayPoints","abstract":"<p>Request to unsubscribe from navigation WayPoints and Destination</p>"},"Classes.html#/c:objc(cs)SDLUnsubscribeWayPointsResponse":{"name":"SDLUnsubscribeWayPointsResponse","abstract":"<p>Response to UnsubscribeWayPoints</p>"},"Classes/SDLUpdateTurnList.html":{"name":"SDLUpdateTurnList","abstract":"<p>Updates the list of next maneuvers, which can be requested by the user pressing the softbutton<br></p>"},"Classes.html#/c:objc(cs)SDLUpdateTurnListResponse":{"name":"SDLUpdateTurnListResponse","abstract":"<p>Response to UpdateTurnList</p>"},"Classes/SDLVehicleDataResult.html":{"name":"SDLVehicleDataResult","abstract":"<p>Individual published data request result</p>"},"Classes/SDLVehicleType.html":{"name":"SDLVehicleType","abstract":"<p>Describes the type of vehicle the mobile phone is connected with.</p>"},"Classes/SDLVersion.html":{"name":"SDLVersion","abstract":"<p>Specifies a major / minor / patch version number for semantic versioning purposes and comparisons</p>"},"Classes/SDLVideoStreamingCapability.html":{"name":"SDLVideoStreamingCapability","abstract":"<p>Contains information about this system&rsquo;s video streaming capabilities</p>"},"Classes/SDLVideoStreamingFormat.html":{"name":"SDLVideoStreamingFormat","abstract":"<p>An available format for video streaming in projection applications</p>"},"Classes/SDLVoiceCommand.html":{"name":"SDLVoiceCommand","abstract":"<p>Voice commands available for the user to speak and be recognized by the IVI&rsquo;s voice recognition engine.</p>"},"Classes/SDLVRHelpItem.html":{"name":"SDLVRHelpItem","abstract":"<p>A help item for voice commands, used locally in interaction lists and globally</p>"},"Classes/SDLWeatherAlert.html":{"name":"SDLWeatherAlert","abstract":"<p>Contains information about a weather alert</p>"},"Classes/SDLWeatherData.html":{"name":"SDLWeatherData","abstract":"<p>Contains information about the current weather</p>"},"Classes/SDLWeatherServiceData.html":{"name":"SDLWeatherServiceData","abstract":"<p>This data is related to what a weather service would provide.</p>"},"Classes/SDLWeatherServiceManifest.html":{"name":"SDLWeatherServiceManifest","abstract":"<p>A weather service manifest.</p>"},"Classes/SDLWindowCapability.html":{"name":"SDLWindowCapability","abstract":"<p>Reflects content of DisplayCapabilities, ButtonCapabilities and SoftButtonCapabilities</p>"},"Classes/SDLWindowTypeCapabilities.html":{"name":"SDLWindowTypeCapabilities","abstract":"<p>Used to inform an app how many window instances per type that can be created.</p>"},"Categories/NSString%28SDLEnum%29.html#/c:objc(cs)NSString(im)isEqualToEnum:":{"name":"-isEqualToEnum:","abstract":"<p>Returns whether or not two enums are equal.</p>","parent_name":"NSString(SDLEnum)"},"Categories/NSString%28SDLEnum%29.html":{"name":"NSString(SDLEnum)","abstract":"<p>Extensions to NSString specifically for SDL string enums</p>"},"Categories.html":{"name":"Categories","abstract":"<p>The following categories are available globally.</p>"},"Classes.html":{"name":"Classes","abstract":"<p>The following classes are available globally.</p>"},"Constants.html":{"name":"Constants","abstract":"<p>The following constants are available globally.</p>"},"Enums.html":{"name":"Enumerations","abstract":"<p>The following enumerations are available globally.</p>"},"Protocols.html":{"name":"Protocols","abstract":"<p>The following protocols are available globally.</p>"},"Type%20Definitions.html":{"name":"Type Definitions","abstract":"<p>The following type definitions are available globally.</p>"}} \ No newline at end of file
diff --git a/docs/undocumented.json b/docs/undocumented.json
index b1fe95b86..eedb39d58 100644
--- a/docs/undocumented.json
+++ b/docs/undocumented.json
@@ -1,12 +1,6 @@
{
"warnings": [
- {
- "file": "/Users/joel/Development/Livio/sdl_ios/SmartDeviceLink/SDLTouch.h",
- "line": 14,
- "symbol": "SDLTouchIdentifier",
- "symbol_kind": "sourcekitten.source.lang.objc.decl.typedef",
- "warning": "undocumented"
- }
+
],
- "source_directory": "/Users/joel/Development/Livio/sdl_ios"
+ "source_directory": "/Users/joelfischer/Development/livio/sdl/sdl_ios"
} \ No newline at end of file
diff --git a/generator/README.md b/generator/README.md
new file mode 100644
index 000000000..b6ec2a0b7
--- /dev/null
+++ b/generator/README.md
@@ -0,0 +1,858 @@
+# Proxy Library RPC Generator
+
+This script provides the ability to auto-generate Objective-C RPC code (header \*.h and implementation \*.m classes) based on the SDL MOBILE_API XML specification.
+
+## Requirements and Dependencies
+
+The script requires **Python 3** pre-installed on the host system. The minimal supported Python 3 version is **3.7.6**. It may work on versions back to 3.5 (the minimal version that has not yet reached [the end-of-life](https://devguide.python.org/devcycle/#end-of-life-branches)), but this is not supported and may break in the future.
+
+Note: To install the dependencies for this script, you must use the **pip3** command.
+
+All required libraries are listed in `requirements.txt` and should be pre-installed on the system prior to using the sript. Please use the following command to install the libraries:
+
+```shell script
+$ pip3 install -r generator/requirements.txt
+```
+
+Please also make sure all git submodules are installed and up to date since the script uses the XML parser provided in a submodule.
+
+```shell script
+$ git submodule update --init --recursive
+```
+
+## Usage
+
+**Usage example**
+
+```shell script
+$ cd sdl_ios
+$ python3 generator/generator.py -xml generator/rpc_spec/MOBILE_API.xml -xsd generator/rpc_spec/MOBILE_API.xsd -d output_dir
+```
+
+
+As a result the output_dir will have all the new generated files.
+
+**Detailed usage description (keys, options)**
+
+```
+usage: generator.py [-h] [-v] [-xml SOURCE_XML] [-xsd SOURCE_XSD]
+ [-d OUTPUT_DIRECTORY] [-t [TEMPLATES_DIRECTORY]]
+ [-r REGEX_PATTERN] [--verbose] [-e] [-s] [-m] [-y] [-n]
+
+Proxy Library RPC Generator
+
+optional arguments:
+ -h, --help show this help message and exit
+ -v, --version print the version and exit
+ -xml SOURCE_XML, --source-xml SOURCE_XML, --input-file SOURCE_XML
+ should point to MOBILE_API.xml
+ -xsd SOURCE_XSD, --source-xsd SOURCE_XSD
+ -d OUTPUT_DIRECTORY, --output-directory OUTPUT_DIRECTORY
+ define the place where the generated output should be
+ placed
+ -t [TEMPLATES_DIRECTORY], --templates-directory [TEMPLATES_DIRECTORY]
+ path to directory with templates
+ -r REGEX_PATTERN, --regex-pattern REGEX_PATTERN
+ only elements matched with defined regex pattern will
+ be parsed and generated
+ --verbose display additional details like logs etc
+ -e, --enums if present, all enums will be generated
+ -s, --structs if present, all structs will be generated
+ -m, -f, --functions if present, all functions will be generated
+ -y, --overwrite force overwriting of existing files in output
+ directory, ignore confirmation message
+ -n, --skip skip overwriting of existing files in output
+ directory, ignore confirmation message
+```
+
+### How to use the generated classes
+
+All RPC classes used in **SmartDeviceLink iOS** library were created manually due to historical reasons and have public API differences from the RPC_SPEC. Therefore, the generated files will differ from the current ones. The generated files are based on the RPC_SPEC and do not contain changes to match the existing files. Therefore, do not replace existing files with generated files. If you want to update existing files with new parameters using the generator, you must generate the file and then use a diff tool to add only the new information and not to change existing information.
+
+If you are adding new RPCs entirely, you can generate those RPCs. Use the `--skip` switch to only generate new files. You must add those files to Xcode project, SmartDeviceLink.h, and podspec files manually and place them in proper groups sorting the files by their kind. Note: the groups are just virtual folders; they do not map to the file system, so all files go to the SmartDeviceLink folder on the file system.
+
+
+## Objective-C transformation rules
+
+### Overview
+These are the general transformation rules for SDL RPC classes Objective-C Library. For more information about the base classes for these RPCs, you can look in the app library.
+
+### Output Directory Structure and Package definitions
+The script creates corresponding RPC classes of `<enum>`, `<struct>` and `<function>` elements following the `MOBILE_API.xml` rules. According to existing structure of sdl_ios library the output directory will contain the following files (plain structure, no subfolders).
+
+RPC requests, responses, structs, enums, and notifications file names all have the form:
+
+* SDLxxx.h
+* SDLxxx.m
+
+Responses have the form:
+
+* SDLxxxResponse.h
+* SDLxxxResponse.m
+
+Where the **xxx** is the correspondent item name.
+
+### The License Header
+
+All files should begin with the license information.
+
+```jinja2
+/*
+ * Copyright (c) {{year}}, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+```
+
+Where `{{year}}` in the copyright line is the current year.
+
+### General rules for Objective-C classes
+1. Default initializer applies only to Functions(Request / Response / Notification) classes
+
+```objc
+- (instancetype)init {
+ self = [super initWithName:SDLRPCFunctionNameRegisterAppInterface];
+ if (!self) { return nil; }
+
+ return self;
+}
+```
+
+2. Initializer for mandatory params if there is/are any in XML (skipped if no <mandatory = true> params)
+3. Initializer for all params if there is/are any which is not mandatory in XML (skipped if no <mandatory = false> params)
+
+#### Scalars
+There are 4 type of scalar values declared in the SDL lib. These are:
+1. **SDLInt** - A declaration that this NSNumber contains an NSInteger.
+0. **SDLUInt** - A declaration that this NSNumber contains an NSUInteger.
+0. **SDLBool** - A declaration that this NSNumber contains a BOOL.
+0. **SDLFloat** - A declaration that this NSNumber contains a float.
+
+*Note: These are syntactic sugar to help the developer know what type of value is held in the `NSNumber`.*
+
+Usage example:
+```objc
+@property (strong, nonatomic) NSNumber<SDLInt> *touchEventId;
+```
+
+or in an array:
+```objc
+@property (strong, nonatomic) NSArray<NSNumber<SDLInt> *> *timeStamp;
+```
+
+#### Enums
+RPC Enums in SDL are strings. sdl_ios uses `NSString` `typedef`ed with a proper enum type. In Swift projects, however, they become real enums by using the `NS_SWIFT_ENUM` compiler tag.
+
+Base definition of `SDLEnum`:
+
+```objc
+typedef NSString* SDLEnum SDL_SWIFT_ENUM;
+
+*Note: This new defined type has already adds a pointer, so anything that inherits from `SDLEnum` needs no asterisk.*
+
+```objc
+typedef SDLEnum SDLTouchType SDL_SWIFT_ENUM; // SDLTouchType will be considered an NSString by the compiler in Obj-C, but will be an enum object of type SDLTouchType in Swift.
+```
+
+And here is a concrete 'enum' item:
+
+```objc
+extern SDLTouchType const SDLTouchTypeBegin;
+```
+
+If an item is deprecated then it will be declared as such:
+
+```objc
+__deprecated
+extern SDLTouchType const SDLTouchTypeBegin;
+```
+
+Take, for instance, the enum class `KeypressMode`:
+
+```xml
+<enum name="KeypressMode" since="3.0">
+ <description>Enumeration listing possible keyboard events.</description>
+ <element name="SINGLE_KEYPRESS">
+ <description>Each keypress is individually sent as the user presses the keyboard keys.</description>
+ </element>
+ <!-- Other elements -->
+</enum>
+```
+
+In the following example, we would define in the header:
+
+```objc
+extern SDLKeypressMode const SDLKeypressModeSingleKeypress;
+```
+
+and `SDLKeypressModeSingleKeypress` itself must be implemented in the correspondent `SDLKeypressMode.m ` file like so:
+
+```objc
+SDLKeypressMode const SDLKeypressModeSingleKeypress = @"SINGLE_KEYPRESS";
+```
+
+#### Structs
+
+Structures in sdl_ios are implemented as classes derived from the parent class SDLRPCStruct with all parameters implemented as `@property`. Let us take for an instance the `DeviceInfo` structure. In the XML it is declared as following:
+
+```xml
+<struct name="DeviceInfo" since="3.0">
+ <description>Various information about connecting device.</description>
+ <param name="hardware" type="String" minlength="0" maxlength="500" mandatory="false">
+ <description>Device model</description>
+ </param>
+ <param name="firmwareRev" type="String" minlength="0" maxlength="500" mandatory="false">
+ <description>Device firmware revision</description>
+ </param>
+ <param name="os" type="String" minlength="0" maxlength="500" mandatory="false">
+ <description>Device OS</description>
+ </param>
+ <param name="osVersion" type="String" minlength="0" maxlength="500" mandatory="false">
+ <description>Device OS version</description>
+ </param>
+ <param name="carrier" type="String" minlength="0" maxlength="500" mandatory="false">
+ <description>Device mobile carrier (if applicable)</description>
+ </param>
+ <param name="maxNumberRFCOMMPorts" type="Integer" minvalue="0" maxvalue="100" mandatory="false">
+ <description>Omitted if connected not via BT.</description>
+ </param>
+ </struct>
+ ```
+
+*Note: the file begins with the `NS_ASSUME_NONNULL_BEGIN` macro, which makes all properties / parameters mandatory. If a parameter is not mandatory, then the modifier `nullable` must be used*
+
+```objc
+// SDLDeviceInfo.h
+
+#import "SDLRPCStruct.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * Various information about connecting device.
+ *
+ * @since SDL 3.0.0
+ */
+@interface SDLDeviceInfo : SDLRPCStruct
+
+/**
+ * @param hardware - hardware
+ * @param firmwareRev - firmwareRev
+ * @param os - os
+ * @param osVersion - osVersion
+ * @param carrier - carrier
+ * @param maxNumberRFCOMMPorts - @(maxNumberRFCOMMPorts)
+ * @return A SDLDeviceInfo object
+ */
+- (instancetype)initWithHardware:(nullable NSString *)hardware firmwareRev:(nullable NSString *)firmwareRev os:(nullable NSString *)os osVersion:(nullable NSString *)osVersion carrier:(nullable NSString *)carrier maxNumberRFCOMMPorts:(UInt8)maxNumberRFCOMMPorts;
+
+/**
+ * Device model
+ * {"default_value": null, "max_length": 500, "min_length": 0}
+ */
+@property (nullable, strong, nonatomic) NSString *hardware;
+
+/**
+ * Device firmware revision
+ * {"default_value": null, "max_length": 500, "min_length": 0}
+ */
+@property (nullable, strong, nonatomic) NSString *firmwareRev;
+
+/**
+ * Device OS
+ * {"default_value": null, "max_length": 500, "min_length": 0}
+ */
+@property (nullable, strong, nonatomic) NSString *os;
+
+/**
+ * Device OS version
+ * {"default_value": null, "max_length": 500, "min_length": 0}
+ */
+@property (nullable, strong, nonatomic) NSString *osVersion;
+
+/**
+ * Device mobile carrier (if applicable)
+ * {"default_value": null, "max_length": 500, "min_length": 0}
+ */
+@property (nullable, strong, nonatomic) NSString *carrier;
+
+/**
+ * Omitted if connected not via BT.
+ * {"default_value": null, "max_value": 100, "min_value": 0}
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *maxNumberRFCOMMPorts;
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+The implementation **SDLDeviceInfo.m** file:
+
+```objc
+// SDLDeviceInfo.m
+
+#import "SDLDeviceInfo.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCParameterNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLDeviceInfo
+
+- (instancetype)initWithHardware:(nullable NSString *)hardware firmwareRev:(nullable NSString *)firmwareRev os:(nullable NSString *)os osVersion:(nullable NSString *)osVersion carrier:(nullable NSString *)carrier maxNumberRFCOMMPorts:(UInt8)maxNumberRFCOMMPorts {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+ self.hardware = hardware;
+ self.firmwareRev = firmwareRev;
+ self.os = os;
+ self.osVersion = osVersion;
+ self.carrier = carrier;
+ self.maxNumberRFCOMMPorts = @(maxNumberRFCOMMPorts);
+ return self;
+}
+
+- (void)setHardware:(nullable NSString *)hardware {
+ [self.store sdl_setObject:hardware forName:SDLRPCParameterNameHardware];
+}
+
+- (nullable NSString *)hardware {
+ return [self.store sdl_objectForName:SDLRPCParameterNameHardware ofClass:NSString.class error:nil];
+}
+
+- (void)setFirmwareRev:(nullable NSString *)firmwareRev {
+ [self.store sdl_setObject:firmwareRev forName:SDLRPCParameterNameFirmwareRev];
+}
+
+- (nullable NSString *)firmwareRev {
+ return [self.store sdl_objectForName:SDLRPCParameterNameFirmwareRev ofClass:NSString.class error:nil];
+}
+
+- (void)setOs:(nullable NSString *)os {
+ [self.store sdl_setObject:os forName:SDLRPCParameterNameOs];
+}
+
+- (nullable NSString *)os {
+ return [self.store sdl_objectForName:SDLRPCParameterNameOs ofClass:NSString.class error:nil];
+}
+
+- (void)setOsVersion:(nullable NSString *)osVersion {
+ [self.store sdl_setObject:osVersion forName:SDLRPCParameterNameOsVersion];
+}
+
+- (nullable NSString *)osVersion {
+ return [self.store sdl_objectForName:SDLRPCParameterNameOsVersion ofClass:NSString.class error:nil];
+}
+
+- (void)setCarrier:(nullable NSString *)carrier {
+ [self.store sdl_setObject:carrier forName:SDLRPCParameterNameCarrier];
+}
+
+- (nullable NSString *)carrier {
+ return [self.store sdl_objectForName:SDLRPCParameterNameCarrier ofClass:NSString.class error:nil];
+}
+
+- (void)setMaxNumberRFCOMMPorts:(nullable NSNumber<SDLUInt> *)maxNumberRFCOMMPorts {
+ [self.store sdl_setObject:maxNumberRFCOMMPorts forName:SDLRPCParameterNameMaxNumberRFCOMMPorts];
+}
+
+- (nullable NSNumber<SDLUInt> *)maxNumberRFCOMMPorts {
+ return [self.store sdl_objectForName:SDLRPCParameterNameMaxNumberRFCOMMPorts ofClass:NSNumber.class error:nil];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+#### Functions
+
+Functions in iOS are implemented as 3 different classes (`SDLRPCRequest`, `SDLRPCResponse`, and `SDLRPCNotification`) grouped by their respective type. All the 3 extend the common parent class `SDLRPCMessage`.
+
+
+##### Function ID, Function Name, and Parameter Name Special Case Class
+There is also the `SDLFunctionID` class generated though it is not declared in the XML. This class maps all function IDs that are integers to function names as strings.
+
+1. Uses of the `"name"` attribute should be normalized by the removal of the ID suffix, e.g. `RegisterAppInterfaceID -> RegisterAppInterface`.
+2. The constant name should be camel case formatted.
+3. The constant has 2 fields the first is the `int` value of the `"value"` attribute and the second is the `String` value of normalized `"name"` attribute.
+
+Internally it uses another file that lists all the function names `SDLRPCFunctionNames`.
+
+```objc
+// SDLFunctionID.h
+
+#import <Foundation/Foundation.h>
+#import "NSNumber+NumberType.h"
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/// A function ID for an SDL RPC
+@interface SDLFunctionID : NSObject
+
+/// The shared object for pulling function id information
++ (instancetype)sharedInstance;
+
+/// Gets the function name for a given SDL RPC function ID
+///
+/// @param functionID A function ID
+/// @returns An SDLRPCFunctionName
+- (nullable SDLRPCFunctionName)functionNameForId:(UInt32)functionID;
+
+/// Gets the function ID for a given SDL RPC function name
+///
+/// @param functionName The RPC function name
+- (nullable NSNumber<SDLInt> *)functionIdForName:(SDLRPCFunctionName)functionName;
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+Each <function> from MOBILE_API.XML declares its function name in `SDLRPCFunctionNames.h` and `SDLRPCFunctionNames.m` files.
+
+```objc
+SDLRPCFunctionNames.h
+#import "SDLEnum.h"
+/**
+* All RPC request / response / notification names
+*/
+typedef SDLEnum SDLRPCFunctionName SDL_SWIFT_ENUM;
+
+/// Function name for an AddCommand RPC
+extern SDLRPCFunctionName const SDLRPCFunctionNameAddCommand;
+
+/// Function name for an AddSubMenu RPC
+extern SDLRPCFunctionName const SDLRPCFunctionNameAddSubMenu;
+
+. . . and so on
+```
+
+And the implementation file SDLRPCFunctionNames.m :
+
+```objc
+//
+// SDLRPCFunctionNames.m
+// SmartDeviceLink
+//
+
+#import "SDLRPCFunctionNames.h"
+
+SDLRPCFunctionName const SDLRPCFunctionNameAddCommand = @"AddCommand";
+SDLRPCFunctionName const SDLRPCFunctionNameAddSubMenu = @"AddSubMenu";
+
+. . . and so on
+```
+
+Each <function> from MOBILE_API.XML declares its parameter name in `SDLRPCParameterNames.h` and `SDLRPCParameterNames.m` files.
+
+```objc
+// SDLRPCParameterNames.h
+
+#import <Foundation/Foundation.h>
+#import "SDLMacros.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString* SDLRPCParameterName SDL_SWIFT_ENUM;
+
+extern SDLRPCParameterName const SDLRPCParameterNameAcEnable;
+extern SDLRPCParameterName const SDLRPCParameterNameAcEnableAvailable;
+
+. . . and so on
+```
+
+And the implementation file SDLRPCParameterNames.m :
+
+```objc
+// SDLRPCParameterNames.h
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCParameterNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+SDLRPCParameterName const SDLRPCParameterNameAcEnable = @"acEnable";
+SDLRPCParameterName const SDLRPCParameterNameAcEnableAvailable = @"acEnableAvailable";
+
+. . . and so on
+```
+
+##### Request Functions (SDLRPCRequest)
+
+
+```xml
+ <function name="GetCloudAppProperties" functionID="GetCloudAppPropertiesID" messagetype="request" since="5.1">
+ <description>
+ RPC used to get the current properties of a cloud application
+ </description>
+ <param name="appID" type="String" maxlength="100" mandatory="true"></param>
+ </function>
+```
+
+
+```objc
+// SDLGetCloudAppProperties.h
+//
+
+#import "SDLRPCRequest.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * RPC used to get the current properties of a cloud application
+ *
+ * @since SDL 5.1.0
+ */
+@interface SDLGetCloudAppProperties : SDLRPCRequest
+
+/**
+ * @param appID
+ * @return A SDLGetCloudAppProperties object
+ */
+- (instancetype)initWithAppID:(NSString *)appID;
+
+/**
+ * {"default_value": null, "max_length": 100, "min_length": 1}
+ *
+ * Required, NSString *
+ */
+@property (strong, nonatomic) NSString *appID;
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+```objc
+// SDLGetCloudAppProperties.m
+//
+
+#import "SDLGetCloudAppProperties.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLGetCloudAppProperties
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (instancetype)init {
+ self = [super initWithName:SDLRPCFunctionNameGetCloudAppProperties];
+ if (!self) { return nil; }
+
+ return self;
+}
+#pragma clang diagnostic pop
+
+- (void)setAppID:(NSString *)appID {
+ [self.parameters sdl_setObject:appID forName:SDLRPCParameterNameAppId];
+}
+
+- (NSString *)appID {
+ NSError *error = nil;
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameAppId ofClass:NSString.class error:&error];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+##### Response Functions (SDLRPCResponse)
+
+
+```xml
+<function name="Alert" functionID="AlertID" messagetype="response" since="1.0">
+ <param name="success" type="Boolean" platform="documentation" mandatory="true">
+ <description> true if successful; false, if failed </description>
+ </param>
+
+ <param name="resultCode" type="Result" platform="documentation" mandatory="true">
+ <description>See Result</description>
+ <element name="SUCCESS"/>
+ <element name="INVALID_DATA"/>
+ <element name="OUT_OF_MEMORY"/>
+ <element name="TOO_MANY_PENDING_REQUESTS"/>
+ <element name="APPLICATION_NOT_REGISTERED"/>
+ <element name="GENERIC_ERROR"/>
+ <element name="REJECTED"/>
+ <element name="ABORTED"/>
+ <element name="DISALLOWED"/>
+ <element name="USER_DISALLOWED"/>
+ <element name="UNSUPPORTED_RESOURCE"/>
+ <element name="WARNINGS"/>
+ </param>
+
+ <param name="info" type="String" maxlength="1000" mandatory="false" platform="documentation">
+ <description>Provides additional human readable info regarding the result.</description>
+ </param>
+
+ <param name="tryAgainTime" type="Integer" minvalue="0" maxvalue="2000000000" mandatory="false" since="2.0">
+ <description>
+ Amount of time (in seconds) that an app must wait before resending an alert.
+ If provided, another system event or overlay currently has a higher priority than this alert.
+ An app must not send an alert without waiting at least the amount of time dictated.
+ </description>
+ </param>
+</function>
+```
+
+
+```objc
+// SDLAlertResponse.h
+//
+
+#import "SDLRPCResponse.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @since SDL 1.0.0
+ */
+@interface SDLAlertResponse : SDLRPCResponse
+
+/**
+ * @param @(tryAgainTime)
+ * @return A SDLAlertResponse object
+ */
+- (instancetype)initWithTryAgainTime:(UInt32)tryAgainTime;
+
+/**
+ * Amount of time (in seconds) that an app must wait before resending an alert. If provided, another system event or
+ * overlay currently has a higher priority than this alert. An app must not send an alert without waiting at least
+ * the amount of time dictated.
+ * {"default_value": null, "max_value": 2000000000, "min_value": 0}
+ *
+ * @since SDL 2.0.0
+ *
+ * Optional, UInt32
+ */
+@property (nullable, strong, nonatomic) NSNumber<SDLUInt> *tryAgainTime;
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+```objc
+// SDLAlertResponse.m
+//
+
+
+#import "SDLAlertResponse.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLAlertResponse
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (instancetype)init {
+ self = [super initWithName:SDLRPCFunctionNameShowAppMenu];
+ if (!self) { return nil; }
+
+ return self;
+}
+#pragma clang diagnostic pop
+
+- (void)setTryAgainTime:(nullable NSNumber<SDLUInt> *)tryAgainTime {
+ [self.parameters sdl_setObject:tryAgainTime forName:SDLRPCParameterNameTryAgainTime];
+}
+
+- (nullable NSNumber<SDLUInt> *)tryAgainTime {
+ return [self.parameters sdl_objectForName:SDLRPCParameterNameTryAgainTime ofClass:NSNumber.class error:nil];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+##### Notification Functions (SDLRPCNotification)
+
+
+```xml
+<function name="OnAppInterfaceUnregistered" functionID="OnAppInterfaceUnregisteredID" messagetype="notification" since="1.0">
+ <param name="reason" type="AppInterfaceUnregisteredReason" mandatory="true">
+ <description>See AppInterfaceUnregisteredReason</description>
+ </param>
+</function>
+```
+
+```objc
+// SDLOnAppInterfaceUnregistered.h
+
+#import "SDLRPCNotification.h"
+
+@class SDLAppInterfaceUnregisteredReason;
+
+NS_ASSUME_NONNULL_BEGIN
+
+/**
+ * @since SDL 1.0.0
+ */
+@interface SDLOnAppInterfaceUnregistered : SDLRPCNotification
+
+/**
+ * @param reason - @(reason)
+ * @return A SDLOnAppInterfaceUnregistered object
+ */
+- (instancetype)initWithReason:(SDLAppInterfaceUnregisteredReason)reason;
+
+/**
+ * See AppInterfaceUnregisteredReason
+ *
+ * Required, SDLAppInterfaceUnregisteredReason
+ */
+@property (strong, nonatomic) SDLAppInterfaceUnregisteredReason reason;
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+```objc
+// SDLOnAppInterfaceUnregistered.m
+
+#import "SDLOnAppInterfaceUnregistered.h"
+#import "NSMutableDictionary+Store.h"
+#import "SDLAppInterfaceUnregisteredReason.h"
+#import "SDLRPCParameterNames.h"
+#import "SDLRPCFunctionNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@implementation SDLOnAppInterfaceUnregistered
+
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (instancetype)init {
+ self = [super initWithName:SDLRPCFunctionNameOnAppInterfaceUnregistered];
+ if (!self) { return nil; }
+
+ return self;
+}
+#pragma clang diagnostic pop
+
+- (instancetype)initWithReason:(SDLAppInterfaceUnregisteredReason)reason {
+ self = [super init];
+ if (!self) {
+ return nil;
+ }
+ self.reason = @(reason);
+ return self;
+}
+
+- (void)setReason:(SDLAppInterfaceUnregisteredReason)reason {
+ [self.parameters sdl_setObject:reason forName:SDLRPCParameterNameReason];
+}
+
+- (SDLAppInterfaceUnregisteredReason)reason {
+ NSError *error = nil;
+ return [self.parameters sdl_enumForName:SDLRPCParameterNameReason error:&error];
+}
+
+@end
+
+NS_ASSUME_NONNULL_END
+```
+
+## Unit tests of Generator
+
+After you made any changes in python RPC generator to avoid affecting code logic you should run Unit tests as follow:
+
+```shell script
+$ cd sdl_ios
+$ python3 generator/test/runner.py
+```
+
+In case of successful execution of all Unit tests in output you will see the results as follow:
+
+```shell script
+Ran 12 tests in 0.464s
+
+OK
+```
+
+As well you can check coverage by Unit tests of python RPC generator as follow:
+
+```shell script
+coverage run generator/test/runner.py
+coverage html
+```
+
+after the you can check the report in `htmlcov/index.html`
+
+
+## Other Utilities
+
+### Generator
+
+Proxy Library RPC Generator inherits the license defined in the root folder of this project.
+
+#### Third Party Licenses
+
+Both the source and binary distributions of this software contain
+some third party software. All the third party software included
+or linked is redistributed under the terms and conditions of their
+original licenses.
+
+The third party software included and used by this project is:
+
+**xmlschema**
+
+* Licensed under MIT License
+* See [https://pypi.org/project/xmlschema/](https://pypi.org/project/xmlschema/)
+
+**Jinja2**
+
+* Licensed under BSD License (BSD-3-Clause)
+* See [https://pypi.org/project/Jinja2/](https://pypi.org/project/Jinja2/)
+
+**coverage**
+
+* Licensed under Apache Software License (Apache 2.0)
+* See [https://pypi.org/project/coverage/](https://pypi.org/project/coverage/)
+
+**pathlib2**
+
+* Licensed under MIT License
+* See [https://pypi.org/project/pathlib2/](https://pypi.org/project/pathlib2/)
+
+**flake8**
+
+* Licensed under MIT License
+* See [https://pypi.org/project/flake8/](https://pypi.org/project/flake8/)
diff --git a/generator/__init__.py b/generator/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/generator/__init__.py
diff --git a/generator/generator.py b/generator/generator.py
new file mode 100644
index 000000000..2dda4129f
--- /dev/null
+++ b/generator/generator.py
@@ -0,0 +1,489 @@
+"""
+Generator
+"""
+import asyncio
+import logging
+import re
+import sys
+from argparse import ArgumentParser
+from collections import namedtuple, OrderedDict
+from datetime import datetime, date
+from inspect import getfile
+from os.path import basename, join
+from pathlib import Path
+from re import findall
+
+from jinja2 import UndefinedError, TemplateNotFound, FileSystemLoader, Environment, ChoiceLoader, \
+ TemplateAssertionError, TemplateSyntaxError, TemplateRuntimeError
+
+ROOT = Path(__file__).absolute().parents[0]
+
+sys.path.append(ROOT.joinpath('rpc_spec/InterfaceParser').as_posix())
+
+try:
+ from parsers.rpc_base import ParseError
+ from parsers.sdl_rpc_v2 import Parser
+ from model.interface import Interface
+ from transformers.common_producer import InterfaceProducerCommon as Common
+ from transformers.enums_producer import EnumsProducer
+ from transformers.functions_producer import FunctionsProducer
+ from transformers.structs_producer import StructsProducer
+except ImportError as error:
+ print('%s.\nprobably you did not initialize submodule', error)
+ sys.exit(1)
+
+
+class Generator:
+ """
+ This class contains only technical features, as follow:
+ - parsing command-line arguments, or evaluating required container interactively;
+ - calling parsers to get Model from xml;
+ - calling producers to transform initial Model to dict used in Jinja2 templates
+ Not required to be covered by unit tests cause contains only technical features.
+ """
+
+ def __init__(self):
+ self.logger = logging.getLogger(self.__class__.__name__)
+ self._env = None
+ self._output_directory = None
+ self.loop = asyncio.get_event_loop()
+ self.paths_named = namedtuple('paths_named', 'enum_class struct_class request_class response_class '
+ 'notification_class function_names parameter_names')
+
+ _version = '1.0.0'
+
+ @property
+ def get_version(self) -> str:
+ """
+ version of the entire generator
+ :return: current entire generator version
+ """
+ return self._version
+
+ @property
+ def output_directory(self) -> Path:
+ """
+ Getter for output directory
+ :return: output directory Path
+ """
+ return self._output_directory
+
+ @output_directory.setter
+ def output_directory(self, output_directory: str):
+ """
+ Setting and validating output directory
+ :param output_directory: path to output directory
+ :return: None
+ """
+ if output_directory.startswith('/'):
+ path = Path(output_directory).absolute().resolve()
+ else:
+ path = Path('.').absolute().joinpath(output_directory).resolve()
+ if not path.exists():
+ self.logger.warning('Directory not found: %s, trying to create it', path)
+ try:
+ path.mkdir(parents=True, exist_ok=True)
+ except OSError as message1:
+ self.logger.critical('Failed to create directory %s, %s', path.as_posix(), message1)
+ sys.exit(1)
+ self._output_directory = path
+
+ @property
+ def env(self) -> Environment:
+ """
+ Getter for Jinja2 instance
+ :return: initialized Jinja2 instance
+ """
+ return self._env
+
+ @env.setter
+ def env(self, paths: list):
+ """
+ Initiating Jinja2 instance
+ :param paths: list with paths to all Jinja2 templates
+ :return: None
+ """
+ loaders = list(filter(lambda l: Path(l).exists(), paths))
+ if not loaders:
+ self.logger.error('Directory with templates not found %s', str(paths))
+ sys.exit(1)
+ loaders = [FileSystemLoader(l) for l in loaders]
+
+ self._env = Environment(loader=ChoiceLoader(loaders))
+ self._env.filters['title'] = self.title
+ self._env.globals['year'] = date.today().year
+
+ @staticmethod
+ def title(name: str):
+ """
+ Capitalizing only first character in string. Using for appropriate filter in Jinja2
+ :param name: string to be capitalized first character
+ :return: initial parameter with capitalized first character
+ """
+ return Common.title(name)
+
+ def config_logging(self, verbose):
+ """
+ Configuring logging for all application
+ :param verbose: if True setting logging.DEBUG else logging.ERROR
+ :return: None
+ """
+ handler = logging.StreamHandler()
+ handler.setFormatter(logging.Formatter(fmt='%(asctime)s.%(msecs)03d - %(levelname)s - %(message)s',
+ datefmt='%H:%M:%S'))
+ root_logger = logging.getLogger()
+
+ if verbose:
+ handler.setLevel(logging.DEBUG)
+ self.logger.setLevel(logging.DEBUG)
+ root_logger.setLevel(logging.DEBUG)
+ else:
+ handler.setLevel(logging.ERROR)
+ self.logger.setLevel(logging.ERROR)
+ root_logger.setLevel(logging.ERROR)
+ logging.getLogger().handlers.clear()
+ root_logger.addHandler(handler)
+
+ def get_parser(self):
+ """
+ Parsing and evaluating command-line arguments
+ :return: object with parsed and validated CLI arguments
+ """
+ if len(sys.argv) == 2 and sys.argv[1] in ('-v', '--version'):
+ print(self.get_version)
+ sys.exit(0)
+
+ container = namedtuple('container', 'name path')
+ xml = container('source_xml', ROOT.joinpath('rpc_spec/MOBILE_API.xml'))
+ required_source = not xml.path.exists()
+
+ out = container('output_directory', ROOT.parents[0].joinpath('SmartDeviceLink'))
+ output_required = not out.path.exists()
+
+ parser = ArgumentParser(description='Proxy Library RPC Generator')
+ parser.add_argument('-v', '--version', action='store_true', help='print the version and sys.exit')
+ parser.add_argument('-xml', '--source-xml', '--input-file', required=required_source,
+ help='should point to MOBILE_API.xml')
+ parser.add_argument('-xsd', '--source-xsd', required=False)
+ parser.add_argument('-d', '--output-directory', required=output_required,
+ help='define the place where the generated output should be placed')
+ parser.add_argument('-t', '--templates-directory', nargs='?', default=ROOT.joinpath('templates').as_posix(),
+ help='path to directory with templates')
+ parser.add_argument('-r', '--regex-pattern', required=False,
+ help='only elements matched with defined regex pattern will be parsed and generated')
+ parser.add_argument('--verbose', action='store_true', help='display additional details like logs etc')
+ parser.add_argument('-e', '--enums', required=False, action='store_true',
+ help='if present, all enums will be generated')
+ parser.add_argument('-s', '--structs', required=False, action='store_true',
+ help='if present, all structs will be generated')
+ parser.add_argument('-m', '-f', '--functions', required=False, action='store_true',
+ help='if present, all functions will be generated')
+ parser.add_argument('-y', '--overwrite', action='store_true',
+ help='force overwriting of existing files in output directory, ignore confirmation message')
+ parser.add_argument('-n', '--skip', action='store_true',
+ help='skip overwriting of existing files in output directory, ignore confirmation message')
+
+ args, unknown = parser.parse_known_args()
+
+ if unknown:
+ print('found unknown arguments: ' + ' '.join(unknown))
+ parser.print_help(sys.stderr)
+ sys.exit(1)
+
+ if args.skip and args.overwrite:
+ print('please select only one option skip "-n" or overwrite "-y"')
+ sys.exit(1)
+
+ if not args.enums and not args.structs and not args.functions:
+ args.enums = args.structs = args.functions = True
+
+ for kind in (xml, out):
+ if not getattr(args, kind.name) and kind.path.exists():
+ while True:
+ try:
+ confirm = input('Confirm default path {} for {} [Y/n]:\t'
+ .format(kind.path, kind.name))
+ if confirm.lower() == 'y' or not confirm:
+ print('{} set to {}'.format(kind.name, kind.path))
+ setattr(args, kind.name, kind.path.as_posix())
+ break
+ if confirm.lower() == 'n':
+ print('provide argument ' + kind.name)
+ sys.exit(1)
+ except KeyboardInterrupt:
+ print('\nThe user interrupted the execution of the program')
+ sys.exit(1)
+
+ self.logger.debug('parsed arguments:\n%s', vars(args))
+
+ return args
+
+ def versions_compatibility_validating(self):
+ """
+ Version of generator script requires the same or lesser version of parser script.
+ if the parser script needs to fix a bug (and becomes, e.g. 1.0.1) and the generator script stays at 1.0.0.
+ As long as the generator script is the same or greater major version, it should be parsable.
+ This requires some level of backward compatibility. E.g. they have to be the same major version.
+ """
+
+ regex = r'(\d+\.\d+).(\d)'
+
+ parser_origin = Parser().get_version
+ generator_origin = self.get_version
+ parser_split = findall(regex, parser_origin).pop()
+ generator_split = findall(regex, generator_origin).pop()
+
+ parser_major = float(parser_split[0])
+ generator_major = float(generator_split[0])
+
+ if parser_major > generator_major:
+ self.logger.critical('Generator (%s) requires the same or lesser version of Parser (%s)',
+ generator_origin, parser_origin)
+ sys.exit(1)
+
+ self.logger.info('Parser type: %s, version %s,\tGenerator version %s',
+ basename(getfile(Parser().__class__)), parser_origin, generator_origin)
+
+ def get_file_content(self, file_name: Path) -> list:
+ """
+
+ :param file_name:
+ :return:
+ """
+ try:
+ with file_name.open('r') as file:
+ content = file.readlines()
+ return content
+ except FileNotFoundError as message1:
+ self.logger.error(message1)
+ return []
+
+ def get_key_words(self, file_name=ROOT.joinpath('rpc_spec/RpcParser/RESERVED_KEYWORDS')):
+ """
+ :param file_name:
+ :return:
+ """
+ content = self.get_file_content(file_name)
+ content = tuple(map(lambda e: re.sub(r'\n', r'', e).strip().casefold(), content))
+ content = tuple(filter(lambda e: not re.search(r'^#+\s+.+|^$', e), content))
+ return content
+
+ def get_paths(self, file_name: Path = ROOT.joinpath('paths.ini')):
+ """
+ Getting and validating parent classes names
+ :param file_name: path to file with container
+ :return: namedtuple with container to key elements
+ """
+ content = self.get_file_content(file_name)
+ if not content:
+ self.logger.critical('%s not found', file_name)
+ sys.exit(1)
+ data = OrderedDict()
+
+ for line in content:
+ if line.startswith('#'):
+ self.logger.warning('commented property %s, which will be skipped', line.strip())
+ continue
+ if re.match(r'^(\w+)\s?=\s?(.+)', line):
+ if len(line.split('=')) > 2:
+ self.logger.critical('can not evaluate value, too many separators %s', str(line))
+ sys.exit(1)
+ name, var = line.partition('=')[::2]
+ if name.strip() in data:
+ self.logger.critical('duplicate key %s', name)
+ sys.exit(1)
+ data[name.strip().lower()] = var.strip()
+
+ missed = list(set(self.paths_named._fields) - set(data.keys()))
+ if missed:
+ self.logger.critical('in %s missed fields: %s ', content, str(missed))
+ sys.exit(1)
+
+ return self.paths_named(**data)
+
+ def write_file(self, file: Path, templates: list, data: dict):
+ """
+ Calling producer/transformer instance to transform initial Model to dict used in jinja2 templates.
+ Applying transformed dict to jinja2 templates and writing to appropriate file
+ :param file: output file name
+ :param templates: list with templates
+ :param data: Dictionary with prepared output data, ready to be applied to Jinja2 template
+ """
+ try:
+ render = self.env.get_or_select_template(templates).render(data)
+ with file.open('w', encoding='utf-8') as handler:
+ handler.write(render)
+ except (TemplateNotFound, UndefinedError, TemplateAssertionError, TemplateSyntaxError, TemplateRuntimeError) \
+ as error1:
+ self.logger.error('skipping %s, template not found %s', file.as_posix(), error1)
+
+ async def process_main(self, skip: bool, overwrite: bool, items: dict, transformer):
+ """
+ Process each item from initial Model. According to provided arguments skipping, overriding or asking what to to.
+ :param skip: if file exist skip it
+ :param overwrite: if file exist overwrite it
+ :param items: elements initial Model
+ :param transformer: producer/transformer instance
+ """
+ tasks = []
+ for item in items.values():
+ if item.name == 'FunctionID':
+ self.logger.warning('%s will be skipped', item.name)
+ continue
+ render = transformer.transform(item)
+ file = self.output_directory.joinpath(render.get('name', item.name))
+ for extension in ('.h', '.m'):
+ data = render.copy()
+ data['imports'] = data['imports'][extension]
+ file_with_suffix = file.with_suffix(extension)
+ templates = ['{}s/template{}.jinja2'.format(type(item).__name__.lower(), extension)]
+ if 'template' in data:
+ templates.insert(0, data['template'] + extension)
+ tasks.append(self.process_common(skip, overwrite, file_with_suffix, data, templates))
+
+ await asyncio.gather(*tasks)
+
+ async def process_function_name(self, skip: bool, overwrite: bool, functions: dict, structs: dict,
+ transformer: FunctionsProducer):
+ """
+ Processing output for SDLRPCFunctionNames and SDLRPCParameterNames
+ :param skip: if target file exist it will be skipped
+ :param overwrite: if target file exist it will be overwritten
+ :param functions: Dictionary with all functions
+ :param structs: Dictionary with all structs
+ :param transformer: FunctionsProducer (transformer) instance
+ :return:
+ """
+ tasks = []
+ for name in [transformer.function_names, transformer.parameter_names]:
+ file = self.output_directory.joinpath(name)
+ if name == transformer.function_names:
+ data = transformer.get_function_names(functions)
+ elif name == transformer.parameter_names:
+ data = transformer.get_simple_params(functions, structs)
+ else:
+ self.logger.error('No "data" for %s', name)
+ continue
+ for extension in ('.h', '.m'):
+ templates = ['{}{}.jinja2'.format(name, extension)]
+ file_with_suffix = file.with_suffix(extension)
+ tasks.append(self.process_common(skip, overwrite, file_with_suffix, data, templates))
+
+ await asyncio.gather(*tasks)
+
+ async def process_common(self, skip: bool, overwrite: bool, file_with_suffix: Path, data: dict, templates: list):
+ """
+ Processing output common
+ :param skip: if target file exist it will be skipped
+ :param overwrite: if target file exist it will be overwritten
+ :param file_with_suffix: output file name
+ :param data: Dictionary with prepared output data, ready to be applied to Jinja2 template
+ :param templates: list with paths to Jinja2 templates
+ :return: None
+ """
+ if file_with_suffix.is_file():
+ if skip:
+ self.logger.info('Skipping %s', file_with_suffix.name)
+ return
+ if overwrite:
+ self.logger.info('Overriding %s', file_with_suffix.name)
+ file_with_suffix.unlink()
+ self.write_file(file_with_suffix, templates, data)
+ else:
+ while True:
+ try:
+ confirm = input('File already exists {}. Overwrite? [Y/n]:\t'
+ .format(file_with_suffix.name))
+ if confirm.lower() == 'y' or not confirm:
+ self.logger.info('Overriding %s', file_with_suffix.name)
+ self.write_file(file_with_suffix, templates, data)
+ break
+ if confirm.lower() == 'n':
+ self.logger.info('Skipping %s', file_with_suffix.name)
+ break
+ except KeyboardInterrupt:
+ print('\nThe user interrupted the execution of the program')
+ sys.exit(1)
+ else:
+ self.logger.info('Writing new %s', file_with_suffix.name)
+ self.write_file(file_with_suffix, templates, data)
+
+ @staticmethod
+ def filter_pattern(interface, pattern):
+ """
+ Filtering Model to match with regex pattern
+ :param interface: Initial (original) Model, obtained from module 'rpc_spec/InterfaceParser'
+ :param pattern: regex pattern (string)
+ :return: Model with items which match with regex pattern
+ """
+ enum_names = tuple(interface.enums.keys())
+ struct_names = tuple(interface.structs.keys())
+
+ if pattern:
+ match = {key: OrderedDict() for key in vars(interface).keys()}
+ match['params'] = interface.params
+ for key, value in vars(interface).items():
+ if key == 'params':
+ continue
+ match[key].update({name: item for name, item in value.items() if re.match(pattern, item.name)})
+ return Interface(**match), enum_names, struct_names
+ return interface, enum_names, struct_names
+
+ async def parser(self, source_xml, source_xsd):
+ """
+ Getting Model from source_xml, parsed and validated by module 'rpc_spec/InterfaceParser'
+ :param source_xml: path to xml file
+ :param source_xsd: path to xsd file
+ :return: Model, obtained from module 'rpc_spec/InterfaceParser'
+ """
+ try:
+ start = datetime.now()
+ model = self.loop.run_in_executor(None, Parser().parse, source_xml, source_xsd)
+ model = await model
+ self.logger.debug('finish getting model in %s milisec,', (datetime.now() - start).microseconds / 1000.0)
+ return model
+ except ParseError as error1:
+ self.logger.error(error1)
+ sys.exit(1)
+
+ def main(self):
+ """
+ Entry point for parser and generator
+ :return: None
+ """
+ args = self.get_parser()
+ self.config_logging(args.verbose)
+ self.versions_compatibility_validating()
+ self.output_directory = args.output_directory
+
+ interface = self.loop.run_until_complete(self.parser(args.source_xml, args.source_xsd))
+ paths = self.get_paths()
+
+ self.env = [args.templates_directory] + [join(args.templates_directory, k) for k in vars(interface).keys()]
+
+ filtered, enum_names, struct_names = self.filter_pattern(interface, args.regex_pattern)
+
+ tasks = []
+ key_words = self.get_key_words()
+
+ functions_transformer = FunctionsProducer(paths, enum_names, struct_names, key_words)
+ if args.enums and filtered.enums:
+ tasks.append(self.process_main(args.skip, args.overwrite, filtered.enums,
+ EnumsProducer(paths.enum_class, key_words)))
+ if args.structs and filtered.structs:
+ tasks.append(self.process_main(args.skip, args.overwrite, filtered.structs,
+ StructsProducer(paths.struct_class, enum_names, struct_names, key_words)))
+ if args.functions and filtered.functions:
+ tasks.append(self.process_main(args.skip, args.overwrite, filtered.functions, functions_transformer))
+ tasks.append(self.process_function_name(args.skip, args.overwrite, interface.functions,
+ interface.structs, functions_transformer))
+ if tasks:
+ self.loop.run_until_complete(asyncio.wait(tasks))
+ else:
+ self.logger.warning('Nothing matched with "%s"', args.regex_pattern)
+
+ self.loop.close()
+
+
+if __name__ == '__main__':
+ Generator().main()
diff --git a/generator/paths.ini b/generator/paths.ini
new file mode 100644
index 000000000..9ea5bb800
--- /dev/null
+++ b/generator/paths.ini
@@ -0,0 +1,7 @@
+ENUM_CLASS = SDLEnum
+STRUCT_CLASS = SDLRPCStruct
+REQUEST_CLASS = SDLRPCRequest
+RESPONSE_CLASS = SDLRPCResponse
+NOTIFICATION_CLASS = SDLRPCNotification
+FUNCTION_NAMES = SDLRPCFunctionNames
+PARAMETER_NAMES = SDLRPCParameterNames \ No newline at end of file
diff --git a/generator/requirements.txt b/generator/requirements.txt
new file mode 100644
index 000000000..c59028039
--- /dev/null
+++ b/generator/requirements.txt
@@ -0,0 +1,5 @@
+xmlschema
+Jinja2
+coverage
+pathlib2
+flake8 \ No newline at end of file
diff --git a/generator/rpc_spec b/generator/rpc_spec
new file mode 160000
+Subproject 53e3dfb3cd7ff75a3425312ae4aeb758a1e0fc5
diff --git a/generator/templates/SDLRPCFunctionNames.h.jinja2 b/generator/templates/SDLRPCFunctionNames.h.jinja2
new file mode 100644
index 000000000..5e13b735b
--- /dev/null
+++ b/generator/templates/SDLRPCFunctionNames.h.jinja2
@@ -0,0 +1,28 @@
+{% include 'copyright.jinja2' %}
+// SDLRPCFunctionNames.h
+
+#import "SDLEnum.h"
+
+/**
+ * All RPC request / response / notification names
+ */
+typedef SDLEnum SDLRPCFunctionName SDL_SWIFT_ENUM;
+{% for param in params %}
+{#- description if exist in source xml, will be putted here
+ since if exist in source xml, will be putted here -#}
+{%- if param.description or param.since %}
+/**
+ {%- if param.description %}
+ {%- for d in param.description %}
+ * {{d}}
+ {%- endfor %}{% endif -%}
+ {%- if param.description and param.since %}
+ *
+ {%- endif %}
+ {%- if param.since %}
+ * @since SDL {{param.since}}
+ {%- endif %}
+ */
+{%- endif %}
+extern SDLRPCFunctionName const SDLRPCFunctionName{{ param.name }};
+{% endfor -%}
diff --git a/generator/templates/SDLRPCFunctionNames.m.jinja2 b/generator/templates/SDLRPCFunctionNames.m.jinja2
new file mode 100644
index 000000000..c7dc5a374
--- /dev/null
+++ b/generator/templates/SDLRPCFunctionNames.m.jinja2
@@ -0,0 +1,7 @@
+{% include 'copyright.jinja2' %}
+// SDLRPCFunctionNames.m
+
+#import "SDLRPCFunctionNames.h"
+{% for param in params %}
+SDLRPCFunctionName const SDLRPCFunctionName{{ param.name }} = @"{{ param.origin }}";
+{%- endfor %}
diff --git a/generator/templates/SDLRPCParameterNames.h.jinja2 b/generator/templates/SDLRPCParameterNames.h.jinja2
new file mode 100644
index 000000000..7a5bbb746
--- /dev/null
+++ b/generator/templates/SDLRPCParameterNames.h.jinja2
@@ -0,0 +1,14 @@
+{% include 'copyright.jinja2' %}
+// SDLRPCParameterNames.h
+
+#import <Foundation/Foundation.h>
+#import "SDLMacros.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NSString* SDLRPCParameterName SDL_SWIFT_ENUM;
+{% for param in params %}
+extern SDLRPCParameterName const SDLRPCParameterName{{ param.name }};
+{%- endfor %}
+
+NS_ASSUME_NONNULL_END \ No newline at end of file
diff --git a/generator/templates/SDLRPCParameterNames.m.jinja2 b/generator/templates/SDLRPCParameterNames.m.jinja2
new file mode 100644
index 000000000..b29a1705c
--- /dev/null
+++ b/generator/templates/SDLRPCParameterNames.m.jinja2
@@ -0,0 +1,12 @@
+{% include 'copyright.jinja2' %}
+// SDLRPCParameterNames.h
+
+#import "NSMutableDictionary+Store.h"
+#import "SDLRPCParameterNames.h"
+
+NS_ASSUME_NONNULL_BEGIN
+{% for param in params %}
+SDLRPCParameterName const SDLRPCParameterName{{ param.name }} = @"{{ param.origin }}";
+{%- endfor %}
+
+NS_ASSUME_NONNULL_END \ No newline at end of file
diff --git a/generator/templates/base_struct_function.h.jinja2 b/generator/templates/base_struct_function.h.jinja2
new file mode 100644
index 000000000..cd1c23d6b
--- /dev/null
+++ b/generator/templates/base_struct_function.h.jinja2
@@ -0,0 +1,57 @@
+{#- To avoid code duplication was crated this parent file, which contain common part used in:
+ "templates/functions/template.h" and "templates/structs/template.h". -#}
+{% include 'copyright.jinja2' %}
+{% block imports %}
+{%- for import in imports.enum %}
+#import "{{import}}.h"
+{%- endfor %}
+{%- if imports.struct %}
+{% endif -%}
+{%- for import in imports.struct %}
+@class {{import}};
+{%- endfor %}
+{%- endblock %}
+
+NS_ASSUME_NONNULL_BEGIN
+{% include 'description.jinja2' %}
+@interface {{name}} : {{extends_class}}{{ending}}
+{%- block constructors %}
+{% for c in constructors %}
+/**
+ {%- if c.description %}
+ {%- for d in c.description %}
+ * {{d}}
+ {%- endfor %}
+ *
+ {%- endif %}
+ {%- for a in c.all %}
+ * @param {{a.variable}} - {{a.constructor_argument}}
+ {%- endfor %}
+ * @return A {{name}} object
+ */
+{%- if deprecated or c.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+- (instancetype)initWith{{c.init}};
+{%- if deprecated or c.deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% endfor -%}
+{%- endblock -%}
+{%- block methods %}
+{%- for param in params %}
+{%- include 'description_param.jinja2' %}
+{%- if deprecated or param.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+@property ({{'nullable, ' if not param.mandatory}}{{param.modifier}}, nonatomic) {{param.type_sdl}}{{param.origin}}{{' __deprecated' if param.deprecated and param.deprecated is sameas true }};
+{%- if deprecated or param.deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% endfor %}
+{%- endblock %}
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/generator/templates/base_struct_function.m.jinja2 b/generator/templates/base_struct_function.m.jinja2
new file mode 100644
index 000000000..ee17b5ccf
--- /dev/null
+++ b/generator/templates/base_struct_function.m.jinja2
@@ -0,0 +1,71 @@
+{#- To avoid code duplication was crated this parent file, which contain common part used in:
+ "templates/functions/template.m" and "templates/structs/template.m". -#}
+{% include 'copyright.jinja2' %}
+{%- block imports %}
+#import "{{name}}.h"
+#import "NSMutableDictionary+Store.h"
+{%- for import in imports %}
+#import "{{import}}.h"
+{%- endfor %}
+{%- endblock %}
+
+NS_ASSUME_NONNULL_BEGIN
+{% if deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-implementations"
+{%- endif %}
+@implementation {{name}}
+{%- if deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% block constructors %}
+{%- for c in constructors %}
+{%- if deprecated or c.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+- (instancetype)initWith{{c.init}} {
+ self = [self init{{ 'With' + c.self if c.self and c.self is string }}];
+ if (!self) {
+ return nil;
+ }
+ {%- for a in c.arguments %}
+ self.{{a.origin}} = {{a.constructor_argument}};
+ {%- endfor %}
+ return self;
+}
+{%- if deprecated or c.deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% endfor -%}
+{% endblock -%}
+{%- block methods %}
+{%- for param in params %}
+{%- if deprecated or param.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+- (void)set{{param.origin|title}}:({{'nullable ' if not param.mandatory}}{{param.type_generic}}{{param.type_sdl|trim}}){{param.origin}} {
+{%- if deprecated or param.deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+ [self.{{parameters_store}} sdl_setObject:{{param.origin}} forName:SDLRPCParameterName{{param.method_suffix}}];
+}
+{% if deprecated or param.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+- ({{'nullable ' if not param.mandatory}}{{param.type_generic}}{{param.type_sdl|trim}}){{param.origin}} {
+{%- if deprecated or param.deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+ {% if param.mandatory -%}
+ NSError *error = nil;
+ {% endif -%}
+ return [self.{{parameters_store}} sdl_{{param.for_name}}ForName:SDLRPCParameterName{{param.method_suffix}}{{' ofClass:'+param.of_class if param.of_class}} error:{{'&error' if param.mandatory else 'nil'}}];
+}
+{% endfor %}
+{%- endblock %}
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/generator/templates/copyright.jinja2 b/generator/templates/copyright.jinja2
new file mode 100644
index 000000000..a037d487d
--- /dev/null
+++ b/generator/templates/copyright.jinja2
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) {{year}}, SmartDeviceLink Consortium, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the SmartDeviceLink Consortium Inc. nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */ \ No newline at end of file
diff --git a/generator/templates/description.jinja2 b/generator/templates/description.jinja2
new file mode 100644
index 000000000..fb4932270
--- /dev/null
+++ b/generator/templates/description.jinja2
@@ -0,0 +1,24 @@
+{#- Content of this file include into every item (Enum/Struct/Function) between imports and typedef/@interface declaration -#}
+{% if description or since or history %}
+/**
+ {%- if description %}
+ {%- for d in description %}
+ * {{d}}
+ {%- endfor %}{% endif -%}
+ {%- if description and ( since or history ) %}
+ *
+ {%- endif %}
+ {%- if deprecated %}
+ * @deprecated
+ {%- endif %}
+ {%- if history %}
+ * @history SDL {{ history }}
+ {%- endif %}
+ {%- if since %}
+ * @since SDL {{ since }}
+ {%- endif %}
+ */
+{%- endif -%}
+{%- if deprecated %}
+__deprecated
+{%- endif -%}
diff --git a/generator/templates/description_param.jinja2 b/generator/templates/description_param.jinja2
new file mode 100644
index 000000000..cb0cc4244
--- /dev/null
+++ b/generator/templates/description_param.jinja2
@@ -0,0 +1,21 @@
+{#- Content of this file include into every Param/sub-element of (Enum/Struct/Function) -#}
+{% if param.description or param.since or param.history %}
+/**
+ {%- if param.description %}
+ {%- for d in param.description %}
+ * {{d}}
+ {%- endfor %}{% endif -%}
+ {%- if param.description and ( param.since or param.history ) %}
+ *
+ {%- endif %}
+ {%- if param.deprecated %}
+ * @deprecated
+ {%- endif %}
+ {%- if param.history %}
+ * @history SDL {{ param.history }}
+ {%- endif %}
+ {%- if param.since %}
+ * @since SDL {{ param.since }}
+ {%- endif %}
+ */
+{%- endif %}
diff --git a/generator/templates/enums/template.h.jinja2 b/generator/templates/enums/template.h.jinja2
new file mode 100644
index 000000000..edba9f0bf
--- /dev/null
+++ b/generator/templates/enums/template.h.jinja2
@@ -0,0 +1,28 @@
+{#- String based enum -#}
+{% include 'copyright.jinja2' %}
+{% block imports -%}
+{%- for import in imports %}
+#import "{{import}}.h"
+{%- endfor %}
+{%- endblock -%}
+{%- block body %}
+{% include 'description.jinja2' %}
+typedef SDLEnum {{ name }} SDL_SWIFT_ENUM{{ending}};
+{% if deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{% endif %}
+{%- for param in params %}
+{%- include 'description_param.jinja2' %}{% if param.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+extern {{ name }} const {{ name }}{{param.name}}{{ " __deprecated" if param.deprecated and param.deprecated }};
+{% if param.deprecated -%}
+#pragma clang diagnostic pop
+{%- endif -%}
+{% endfor -%}
+{%- if deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% endblock -%}
diff --git a/generator/templates/enums/template.m.jinja2 b/generator/templates/enums/template.m.jinja2
new file mode 100644
index 000000000..0e8ca0b2b
--- /dev/null
+++ b/generator/templates/enums/template.m.jinja2
@@ -0,0 +1,25 @@
+{% include 'copyright.jinja2' %}
+
+#import "{{name}}.h"
+{%- block body %}
+{% if add_typedef %}
+typedef SDLEnum {{name}} SDL_SWIFT_ENUM;
+{% endif -%}
+{%- if deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+{%- for param in params %}
+{%- if param.deprecated %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+{%- endif %}
+{{ name }} const {{ name }}{{param.name}} = @"{{param.origin}}";
+{%- if param.deprecated %}
+#pragma clang diagnostic pop
+{% endif %}
+{%- endfor -%}
+{%- if deprecated %}
+#pragma clang diagnostic pop
+{%- endif %}
+{% endblock -%}
diff --git a/generator/templates/functions/template.h.jinja2 b/generator/templates/functions/template.h.jinja2
new file mode 100644
index 000000000..28e3fd0be
--- /dev/null
+++ b/generator/templates/functions/template.h.jinja2
@@ -0,0 +1,2 @@
+{#- This template creates RPC requests, responses, and notification .h files -#}
+{% extends "base_struct_function.h.jinja2" %} \ No newline at end of file
diff --git a/generator/templates/functions/template.m.jinja2 b/generator/templates/functions/template.m.jinja2
new file mode 100644
index 000000000..9809b8df2
--- /dev/null
+++ b/generator/templates/functions/template.m.jinja2
@@ -0,0 +1,21 @@
+{#- This template creates RPC requests, responses, and notification .m files -#}
+{% extends "base_struct_function.m.jinja2" %}
+{% block imports %}
+{{super()}}
+#import "SDLRPCFunctionNames.h"
+#import "SDLRPCParameterNames.h"
+{%- endblock %}
+{% block constructors %}
+#pragma clang diagnostic push
+#pragma clang diagnostic ignored "-Wdeprecated-declarations"
+- (instancetype)init {
+ self = [super initWithName:SDLRPCFunctionName{{origin}}];
+ if (!self) {
+ return nil;
+ }
+ return self;
+}
+#pragma clang diagnostic pop
+{{super()}}
+{%- endblock -%}
+{% set parameters_store = 'parameters' %}
diff --git a/generator/templates/structs/template.h.jinja2 b/generator/templates/structs/template.h.jinja2
new file mode 100644
index 000000000..f57d273ca
--- /dev/null
+++ b/generator/templates/structs/template.h.jinja2
@@ -0,0 +1,2 @@
+{#- This template creates RPC struct .h files -#}
+{% extends "base_struct_function.h.jinja2" %} \ No newline at end of file
diff --git a/generator/templates/structs/template.m.jinja2 b/generator/templates/structs/template.m.jinja2
new file mode 100644
index 000000000..488b076af
--- /dev/null
+++ b/generator/templates/structs/template.m.jinja2
@@ -0,0 +1,7 @@
+{#- This template creates RPC struct .m files -#}
+{% extends "base_struct_function.m.jinja2" %}
+{% block imports %}
+{{super()}}
+#import "SDLRPCParameterNames.h"
+{%- endblock %}
+{% set parameters_store = 'store' %} \ No newline at end of file
diff --git a/generator/test/__init__.py b/generator/test/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/generator/test/__init__.py
diff --git a/generator/test/runner.py b/generator/test/runner.py
new file mode 100644
index 000000000..2cb413227
--- /dev/null
+++ b/generator/test/runner.py
@@ -0,0 +1,67 @@
+"""
+All tests
+"""
+import logging
+import sys
+from pathlib import Path
+from unittest import TestLoader, TestSuite, TextTestRunner
+
+ROOT = Path(__file__).absolute()
+
+sys.path.append(ROOT.parents[1].joinpath('rpc_spec/InterfaceParser').as_posix())
+sys.path.append(ROOT.parents[1].as_posix())
+
+try:
+ from test_enums import TestEnumsProducer
+ from test_functions import TestFunctionsProducer
+ from test_structs import TestStructsProducer
+ from test_CodeFormatAndQuality import CodeFormatAndQuality
+except ImportError as error:
+ print('{}.\nProbably you did not initialize submodule'.format(error))
+ sys.exit(1)
+
+
+def config_logging():
+ """
+ Configuring logging for all application
+ """
+ handler = logging.StreamHandler()
+ handler.setFormatter(logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
+ datefmt='%m-%d %H:%M'))
+ root_logger = logging.getLogger()
+ handler.setLevel(logging.INFO)
+ root_logger.setLevel(logging.INFO)
+ root_logger.addHandler(handler)
+
+
+def main():
+ """
+ Without performing Tests (simple instances initialization) there are following initial test code coverage:
+ generator/transformers/common_producer.py 21%
+ generator/transformers/enums_producer.py 24%
+ generator/transformers/functions_producer.py 18%
+ generator/transformers/structs_producer.py 32%
+
+ After performing Tests there are following initial test code coverage:
+ generator/transformers/common_producer.py 100%
+ generator/transformers/enums_producer.py 100%
+ generator/transformers/functions_producer.py 100%
+ generator/transformers/structs_producer.py 100%
+ """
+ config_logging()
+ suite = TestSuite()
+
+ suite.addTests(TestLoader().loadTestsFromTestCase(TestFunctionsProducer))
+ suite.addTests(TestLoader().loadTestsFromTestCase(TestStructsProducer))
+ suite.addTests(TestLoader().loadTestsFromTestCase(TestEnumsProducer))
+ suite.addTests(TestLoader().loadTestsFromTestCase(CodeFormatAndQuality))
+
+ runner = TextTestRunner(verbosity=2)
+ runner.run(suite)
+
+
+if __name__ == '__main__':
+ """
+ Entry point for parser and generator.
+ """
+ main()
diff --git a/generator/test/test_CodeFormatAndQuality.py b/generator/test/test_CodeFormatAndQuality.py
new file mode 100755
index 000000000..c9b34e06f
--- /dev/null
+++ b/generator/test/test_CodeFormatAndQuality.py
@@ -0,0 +1,32 @@
+"""
+Interface model unit test
+"""
+import unittest
+from os import walk
+from os.path import join
+from pathlib import Path
+
+from flake8.api import legacy as flake8
+
+
+class CodeFormatAndQuality(unittest.TestCase):
+ def setUp(self):
+ self.list_of_files = []
+ for (directory, _, filenames) in walk(Path(__file__).absolute().parents[1].as_posix()):
+ self.list_of_files += [join(directory, file) for file in filenames
+ if file.endswith('.py') and 'test' not in directory
+ and 'rpc_spec' not in directory]
+
+ def test_checkCodeFormatAndQuality(self):
+ """
+ Performing checks of Code Format And Quality by flake8
+ If any inconvenient low quality code will be found, this will be shown in stdout and
+ each such cases will be reflected with report.total_errors number
+ """
+ style_guide = flake8.get_style_guide(max_line_length=120)
+ report = style_guide.check_files(self.list_of_files)
+ self.assertEqual(report.total_errors, 0)
+
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/generator/test/test_enums.py b/generator/test/test_enums.py
new file mode 100644
index 000000000..22650ce67
--- /dev/null
+++ b/generator/test/test_enums.py
@@ -0,0 +1,83 @@
+from collections import OrderedDict
+from unittest import TestCase
+
+try:
+ from generator import Generator
+except ImportError as error:
+ from generator.generator import Generator
+
+from model.enum import Enum
+from model.enum_element import EnumElement
+from transformers.enums_producer import EnumsProducer
+
+
+class TestEnumsProducer(TestCase):
+ """
+ The structures of tests in this class was prepared to cover all possible combinations of code branching in tested
+ class EnumsProducer.
+ All names of Enums and nested elements doesn't reflating with real Enums
+ and could be replaces with some meaningless names.
+
+ After performing Tests there are following initial test code coverage:
+ generator/transformers/common_producer.py 34%
+ generator/transformers/enums_producer.py 100%
+ """
+
+ def setUp(self):
+ self.maxDiff = None
+ key_words = Generator().get_key_words()
+
+ self.producer = EnumsProducer('SDLEnum', key_words)
+
+ def test_FunctionID(self):
+ """
+ generator/transformers/common_producer.py 34%
+ generator/transformers/enums_producer.py 80%
+ """
+ elements = OrderedDict()
+ elements['RESERVED'] = EnumElement(name='RESERVED', value=0)
+ elements['RegisterAppInterfaceID'] = EnumElement(name='RegisterAppInterfaceID', hex_value=1)
+ elements['PerformAudioPassThruID'] = EnumElement(name='PerformAudioPassThruID', hex_value=10)
+
+ item = Enum(name='FunctionID', elements=elements)
+ expected = OrderedDict()
+ expected['origin'] = 'FunctionID'
+ expected['name'] = 'SDLFunctionID'
+ expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}}
+ expected['params'] = (
+ self.producer.param_named(description=[], name='Reserved', origin='RESERVED', since=None, deprecated=False),
+ self.producer.param_named(description=[], name='RegisterAppInterface', origin='RegisterAppInterfaceID',
+ since=None, deprecated=False),
+ self.producer.param_named(description=[], name='PerformAudioPassThru', origin='PerformAudioPassThruID',
+ since=None, deprecated=False),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_TextFieldName(self):
+ """
+ generator/transformers/common_producer.py 34%
+ generator/transformers/enums_producer.py 98%
+ """
+ elements = OrderedDict()
+ elements['SUCCESS'] = EnumElement(name='SUCCESS')
+ elements['mainField1'] = EnumElement(name='mainField1')
+ elements['H264'] = EnumElement(name='H264')
+ elements['UNSUPPORTED_REQUEST'] = EnumElement(name='UNSUPPORTED_REQUEST')
+ item = Enum(name='TextFieldName', elements=elements)
+
+ expected = OrderedDict()
+ expected['origin'] = 'TextFieldName'
+ expected['name'] = 'SDLTextFieldName'
+ expected['imports'] = {'.h': {'SDLEnum'}, '.m': {'SDLEnum'}}
+ expected['params'] = (
+ self.producer.param_named(description=[], name='Success', origin='SUCCESS', since=None,
+ deprecated=False),
+ self.producer.param_named(description=[], name='MainField1', origin='mainField1', since=None,
+ deprecated=False),
+ self.producer.param_named(description=[], name='H264', origin='H264', since=None, deprecated=False),
+ self.producer.param_named(description=[], name='UnsupportedRequest', origin='UNSUPPORTED_REQUEST',
+ since=None, deprecated=False))
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
diff --git a/generator/test/test_functions.py b/generator/test/test_functions.py
new file mode 100644
index 000000000..a271fa23a
--- /dev/null
+++ b/generator/test/test_functions.py
@@ -0,0 +1,456 @@
+import re
+from collections import namedtuple, OrderedDict
+from unittest import TestCase
+
+try:
+ from generator import Generator
+except ImportError as error:
+ from generator.generator import Generator
+
+from model.array import Array
+from model.boolean import Boolean
+from model.enum import Enum
+from model.enum_element import EnumElement
+from model.float import Float
+from model.function import Function
+from model.integer import Integer
+from model.param import Param
+from model.string import String
+from model.struct import Struct
+from transformers.functions_producer import FunctionsProducer
+
+
+class TestFunctionsProducer(TestCase):
+ """
+ The structures of tests in this class was prepared to cover all possible combinations of code branching in tested
+ class FunctionsProducer.
+ All names of Functions and nested elements doesn't reflating with real Functions
+ and could be replaces with some meaningless names.
+
+ After performing Tests there are following initial test code coverage:
+ generator/transformers/common_producer.py 99%
+ generator/transformers/functions_producer.py 100%
+ """
+
+ def setUp(self):
+ self.maxDiff = None
+ key_words = Generator().get_key_words()
+
+ Paths = namedtuple('Paths', 'request_class response_class notification_class function_names parameter_names')
+ paths = Paths(request_class='SDLRPCRequest',
+ response_class='SDLRPCResponse',
+ notification_class='SDLRPCNotification',
+ function_names='SDLRPCFunctionNames',
+ parameter_names='SDLRPCParameterNames')
+
+ enum_names = ('FileType', 'Language',)
+ struct_names = ('SyncMsgVersion', 'TemplateColorScheme', 'TTSChunk', 'Choice')
+
+ self.producer = FunctionsProducer(paths, enum_names, struct_names, key_words)
+
+ def test_process_function_name(self):
+ """
+ generator/transformers/common_producer.py 29%
+ generator/transformers/functions_producer.py 61%
+ """
+ functions = {
+ 'RegisterAppInterface': Function(name='RegisterAppInterface',
+ function_id=EnumElement(name='RegisterAppInterfaceID'), since='3.0.0',
+ message_type=EnumElement(name='request'),
+ description=['RegisterAppInterface description'], params={
+ 'syncMsgVersion': Param(name='syncMsgVersion', param_type=Float(), since='3.5.0',
+ description=['syncMsgVersion description'])}),
+ 'OnHMIStatus': Function(name='OnHMIStatus', function_id=EnumElement(name='OnHMIStatusID'), since='4.0.0',
+ message_type=EnumElement(name='notification'),
+ description=['OnHMIStatus description'], params={
+ 'acEnable': Param(name='acEnable', param_type=Integer(), since='4.5.0',
+ description=['acEnable description'])})}
+ structs = {
+ 'SoftButton': Struct(name='SoftButton', members={
+ 'image': Param(name='image', param_type=String(), since='1.0.0', description=['image description']),
+ 'ignore': Param(name='ignore', param_type=Struct(name='ignore'))}),
+ 'PresetBankCapabilities': Struct(name='PresetBankCapabilities', members={
+ 'availableHdChannelsAvailable': Param(name='availableHdChannelsAvailable', param_type=Boolean(),
+ since='2.0.0',
+ description=['availableHDChannelsAvailable description'])})}
+
+ expected = [
+ self.producer.common_names(
+ description=['OnHMIStatus description'], name='OnHMIStatus', origin='OnHMIStatus', since='4.0.0'),
+ self.producer.common_names(
+ description=['RegisterAppInterface description'], name='RegisterAppInterface',
+ origin='RegisterAppInterface', since='3.0.0')]
+ actual = self.producer.get_function_names(functions)
+ self.assertListEqual(expected, actual['params'])
+
+ expected = [
+ self.producer.common_names(description=['acEnable description'], name='AcEnable',
+ origin='acEnable', since='4.5.0'),
+ self.producer.common_names(description=['availableHDChannelsAvailable description'],
+ since='2.0.0', name='AvailableHdChannelsAvailable',
+ origin='availableHdChannelsAvailable'),
+ self.producer.common_names(description=[], name='Ignore', origin='ignore', since=None),
+ self.producer.common_names(description=['image description'], name='Image', origin='image', since='1.0.0'),
+ self.producer.common_names(description=[], name='PresetBankCapabilities', origin='PresetBankCapabilities',
+ since=None),
+ self.producer.common_names(description=[], name='SoftButton', origin='SoftButton', since=None),
+ self.producer.common_names(description=['syncMsgVersion description'], name='SdlMsgVersion',
+ origin='syncMsgVersion', since='3.5.0')]
+ actual = self.producer.get_simple_params(functions, structs)
+ self.assertCountEqual(expected, actual['params'])
+
+ def test_RegisterAppInterfaceRequest(self):
+ """
+ generator/transformers/common_producer.py 85%
+ generator/transformers/functions_producer.py 63%
+ """
+ params = OrderedDict()
+ params['syncMsgVersion'] = Param(
+ name='syncMsgVersion', param_type=Struct(name='SyncMsgVersion', description=['Specifies the'], members={
+ 'majorVersion': Param(name='majorVersion', param_type=Integer())}), description=['See SyncMsgVersion'],
+ is_mandatory=True)
+ params['fullAppID'] = Param(name='fullAppID', description=['ID used'], param_type=String(), is_mandatory=False)
+ params['dayColorScheme'] = Param(
+ name='dayColorScheme', param_type=Struct(name='TemplateColorScheme', description=[
+ '\n A color scheme for all display layout templates.\n ']), is_mandatory=False)
+ params['ttsName'] = Param(
+ name='ttsName', description=['\n TTS string for'], is_mandatory=False,
+ param_type=Array(element_type=Struct(name='TTSChunk', description=['A TTS chunk'])))
+ params['isMediaApplication'] = Param(
+ name='isMediaApplication', param_type=Boolean(),
+ description=['\n Indicates if the application is a media or a '], is_mandatory=True)
+
+ item = Function(name='RegisterAppInterface', function_id=EnumElement(name='RegisterAppInterfaceID'),
+ since='1.0.0',
+ description=['\n Establishes an interface with a mobile application.\n '
+ 'Before registerAppInterface no other commands will be accepted/executed.\n '],
+ message_type=EnumElement(name='request'), params=params)
+ expected = OrderedDict()
+ expected['origin'] = 'RegisterAppInterface'
+ expected['name'] = 'SDLRegisterAppInterface'
+ expected['extends_class'] = 'SDLRPCRequest'
+ expected['imports'] = {
+ '.h': {'enum': {'SDLRPCRequest'}, 'struct': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}},
+ '.m': {'SDLTemplateColorScheme', 'SDLTTSChunk', 'SDLSdlMsgVersion'}}
+ expected['description'] = ['Establishes an interface with a mobile application. Before registerAppInterface no '
+ 'other commands will be', 'accepted/executed.']
+ expected['since'] = '1.0.0'
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='sdlMsgVersion', constructor_argument_override=None,
+ constructor_prefix='SdlMsgVersion', deprecated=False, description=['See SyncMsgVersion'],
+ for_name='object', mandatory=True, method_suffix='SdlMsgVersion', modifier='strong',
+ of_class='SDLSdlMsgVersion.class', origin='sdlMsgVersion', since=None,
+ type_native='SDLSdlMsgVersion *', type_sdl='SDLSdlMsgVersion *'),
+ self.producer.param_named(
+ constructor_argument='fullAppID', constructor_argument_override=None, constructor_prefix='FullAppID',
+ deprecated=False, description=['ID used',
+ '{"default_value": null, "max_length": null, "min_length": null}'],
+ for_name='object', mandatory=False, method_suffix='FullAppID', modifier='strong',
+ of_class='NSString.class', origin='fullAppID', since=None, type_native='NSString *',
+ type_sdl='NSString *'),
+ self.producer.param_named(
+ constructor_argument='dayColorScheme', constructor_argument_override=None, mandatory=False,
+ constructor_prefix='DayColorScheme', deprecated=False, description=[], for_name='object',
+ method_suffix='DayColorScheme', modifier='strong', of_class='SDLTemplateColorScheme.class',
+ origin='dayColorScheme', since=None, type_native='SDLTemplateColorScheme *',
+ type_sdl='SDLTemplateColorScheme *'),
+ self.producer.param_named(
+ constructor_argument='ttsName', constructor_argument_override=None, constructor_prefix='TtsName',
+ deprecated=False, description=['TTS string for'], for_name='objects', mandatory=False,
+ method_suffix='TtsName', modifier='strong', of_class='SDLTTSChunk.class', origin='ttsName', since=None,
+ type_native='NSArray<SDLTTSChunk *> *', type_sdl='NSArray<SDLTTSChunk *> *'),
+ self.producer.param_named(
+ constructor_argument='isMediaApplication', constructor_argument_override=None,
+ constructor_prefix='IsMediaApplication', deprecated=False,
+ description=['Indicates if the application is a media or a'], for_name='object', mandatory=True,
+ method_suffix='IsMediaApplication', modifier='strong', of_class='NSNumber.class',
+ origin='isMediaApplication', since=None, type_native='BOOL', type_sdl='NSNumber<SDLBool> *'))
+
+ mandatory_arguments = [
+ self.producer.argument_named(variable='sdlMsgVersion', deprecated=False, origin='sdlMsgVersion',
+ constructor_argument='sdlMsgVersion'),
+ self.producer.argument_named(variable='isMediaApplication', deprecated=False, origin='isMediaApplication',
+ constructor_argument='@(isMediaApplication)')]
+ not_mandatory_arguments = [
+ self.producer.argument_named(variable='fullAppID', deprecated=False, origin='fullAppID',
+ constructor_argument='fullAppID'),
+ self.producer.argument_named(variable='dayColorScheme', deprecated=False, origin='dayColorScheme',
+ constructor_argument='dayColorScheme'),
+ self.producer.argument_named(variable='ttsName', deprecated=False, origin='ttsName',
+ constructor_argument='ttsName')]
+ mandatory_init = 'SdlMsgVersion:(SDLSdlMsgVersion *)sdlMsgVersion ' \
+ 'isMediaApplication:(BOOL)isMediaApplication'
+
+ expected['constructors'] = (
+ self.producer.constructor_named(
+ all=mandatory_arguments, arguments=mandatory_arguments, deprecated=False,
+ init=mandatory_init, self=True),
+ self.producer.constructor_named(
+ all=mandatory_arguments + not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False,
+ init=mandatory_init + ' fullAppID:(nullable NSString *)fullAppID dayColorScheme:(nullable '
+ 'SDLTemplateColorScheme *)dayColorScheme ttsName:(nullable NSArray<SDLTTSChunk '
+ '*> *)ttsName',
+ self=re.sub(r'([\w\d]+:)\([\w\d\s<>*]*\)([\w\d]+\s*)', r'\1\2', mandatory_init)))
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_RegisterAppInterfaceResponse(self):
+ """
+ generator/transformers/common_producer.py 82%
+ generator/transformers/functions_producer.py 63%
+ """
+ params = OrderedDict()
+ params['success'] = Param(name='success', param_type=Boolean(), description=[' True if '], is_mandatory=False)
+ params['language'] = Param(name='language', is_mandatory=False, param_type=Enum(name='Language', elements={
+ 'EN-US': EnumElement(name='EN-US', description=['English - US'])}), description=['The currently'])
+ params['supportedDiagModes'] = Param(
+ name='supportedDiagModes', is_mandatory=False, description=['\n Specifies the'],
+ param_type=Array(element_type=Integer(max_value=255, min_value=0), max_size=100, min_size=1))
+ params['hmiZoneCapabilities'] = Param(name='hmiZoneCapabilities', is_mandatory=False,
+ param_type=Array(element_type=Enum(name='HmiZoneCapabilities'),
+ max_size=100, min_size=1))
+
+ item = Function(name='RegisterAppInterface', function_id=EnumElement(name='RegisterAppInterfaceID'),
+ description=['The response '], message_type=EnumElement(name='response'), params=params)
+
+ expected = OrderedDict()
+ expected['origin'] = 'RegisterAppInterface'
+ expected['name'] = 'SDLRegisterAppInterfaceResponse'
+ expected['extends_class'] = 'SDLRPCResponse'
+ expected['imports'] = {'.h': {'enum': {'SDLRPCResponse', 'SDLLanguage'}, 'struct': set()},
+ '.m': {'SDLLanguage'}}
+ expected['description'] = ['The response']
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='language', constructor_argument_override=None, constructor_prefix='Language',
+ deprecated=False, description=['The currently'], for_name='enum', mandatory=False,
+ method_suffix='Language', modifier='strong', of_class='', origin='language',
+ since=None, type_native='SDLLanguage ', type_sdl='SDLLanguage '),
+ self.producer.param_named(
+ constructor_argument='supportedDiagModes', constructor_argument_override=None,
+ constructor_prefix='SupportedDiagModes', deprecated=False, description=['Specifies the'],
+ for_name='objects', mandatory=False, method_suffix='SupportedDiagModes', modifier='strong',
+ of_class='NSNumber.class', origin='supportedDiagModes', since=None,
+ type_native='NSArray<NSNumber<SDLUInt> *> *', type_sdl='NSArray<NSNumber<SDLUInt> *> *'),
+ self.producer.param_named(
+ constructor_argument='hmiZoneCapabilities', constructor_argument_override=None,
+ constructor_prefix='HmiZoneCapabilities', deprecated=False, description=[], for_name='enums',
+ mandatory=False, method_suffix='HmiZoneCapabilities', modifier='strong',
+ of_class='', origin='hmiZoneCapabilities', since=None,
+ type_native='NSArray<SDLHmiZoneCapabilities> *', type_sdl='NSArray<SDLHmiZoneCapabilities> *'))
+
+ arguments = [self.producer.argument_named(
+ variable='language', deprecated=False, origin='language', constructor_argument='language'),
+ self.producer.argument_named(
+ variable='supportedDiagModes', deprecated=False, origin='supportedDiagModes',
+ constructor_argument='supportedDiagModes'),
+ self.producer.argument_named(
+ variable='hmiZoneCapabilities', deprecated=False, origin='hmiZoneCapabilities',
+ constructor_argument='hmiZoneCapabilities')]
+
+ expected['constructors'] = (
+ self.producer.constructor_named(
+ all=arguments, arguments=arguments, deprecated=False,
+ init='Language:(nullable SDLLanguage)language supportedDiagModes:(nullable NSArray<NSNumber<SDLUInt> *>'
+ ' *)supportedDiagModes hmiZoneCapabilities:(nullable NSArray<SDLHmiZoneCapabilities> *)'
+ 'hmiZoneCapabilities',
+ self=''),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_OnHMIStatus(self):
+ """
+ generator/transformers/common_producer.py 66%
+ generator/transformers/functions_producer.py 65%
+ """
+ item = Function(name='OnHMIStatus', function_id=EnumElement(name='OnHMIStatusID'),
+ message_type=EnumElement(name='notification'), params={
+ 'hmiLevel': Param(name='hmiLevel', param_type=Enum(name='HMILevel'))
+ })
+ expected = OrderedDict()
+ expected['origin'] = 'OnHMIStatus'
+ expected['name'] = 'SDLOnHMIStatus'
+ expected['extends_class'] = 'SDLRPCNotification'
+ expected['imports'] = {
+ ".h": {'enum': {'SDLRPCNotification'}, 'struct': set()},
+ ".m": set()
+ }
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='hmiLevel', constructor_argument_override=None, constructor_prefix='HmiLevel',
+ deprecated=False, description=[], for_name='enum', mandatory=True, method_suffix='HmiLevel',
+ modifier='strong', of_class='', origin='hmiLevel', since=None,
+ type_native='SDLHMILevel ', type_sdl='SDLHMILevel '),)
+
+ arguments = [self.producer.argument_named(variable='hmiLevel', deprecated=False, origin='hmiLevel',
+ constructor_argument='hmiLevel')]
+
+ expected['constructors'] = (self.producer.constructor_named(
+ all=arguments, arguments=arguments, deprecated=False, self=True, init='HmiLevel:(SDLHMILevel)hmiLevel'),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_CreateWindow(self):
+ """
+ generator/transformers/common_producer.py 82%
+ generator/transformers/functions_producer.py 63%
+ """
+ params = OrderedDict()
+ params['windowID'] = Param(name='windowID', param_type=Integer())
+ params['cmdID'] = Param(name='cmdID', param_type=Integer(max_value=2000000000, min_value=0))
+ params['position'] = Param(name='position', param_type=Integer(default_value=1000, max_value=1000, min_value=0))
+ params['speed'] = Param(name='speed', param_type=Float(max_value=700.0, min_value=0.0))
+ params['offset'] = Param(name='offset', param_type=Integer(max_value=100000000000, min_value=0))
+ params['duplicateUpdatesFromWindowID'] = Param(name='duplicateUpdatesFromWindowID', param_type=Integer(),
+ is_mandatory=False)
+ item = Function(name='CreateWindow', function_id=EnumElement(name='CreateWindowID'),
+ message_type=EnumElement(name='request'), params=params)
+
+ expected = OrderedDict()
+ expected['origin'] = 'CreateWindow'
+ expected['name'] = 'SDLCreateWindow'
+ expected['extends_class'] = 'SDLRPCRequest'
+ expected['imports'] = {'.m': set(), '.h': {'struct': set(), 'enum': {'SDLRPCRequest'}}}
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='windowID', constructor_argument_override=None, constructor_prefix='WindowID',
+ deprecated=False, description=['{"default_value": null, "max_value": null, "min_value": null}'],
+ for_name='object', mandatory=True, method_suffix='WindowID', modifier='strong',
+ of_class='NSNumber.class', origin='windowID', since=None, type_native='UInt32',
+ type_sdl='NSNumber<SDLInt> *'),
+ self.producer.param_named(
+ constructor_argument='cmdID', constructor_argument_override=None, constructor_prefix='CmdID',
+ deprecated=False, description=['{"default_value": null, "max_value": 2000000000, "min_value": 0}'],
+ for_name='object', mandatory=True, method_suffix='CmdID', modifier='strong', of_class='NSNumber.class',
+ origin='cmdID', since=None, type_native='UInt32', type_sdl='NSNumber<SDLUInt> *'),
+ self.producer.param_named(
+ constructor_argument='position', constructor_argument_override=None, constructor_prefix='Position',
+ deprecated=False, description=['{"default_value": 1000, "max_value": 1000, "min_value": 0}'],
+ for_name='object', mandatory=True, method_suffix='Position', modifier='strong',
+ of_class='NSNumber.class', origin='position', since=None, type_native='UInt16',
+ type_sdl='NSNumber<SDLUInt> *'),
+ self.producer.param_named(
+ constructor_argument='speed', constructor_argument_override=None, constructor_prefix='Speed',
+ deprecated=False, description=['{"default_value": null, "max_value": 700.0, "min_value": 0.0}'],
+ for_name='object', mandatory=True, method_suffix='Speed', modifier='strong', of_class='NSNumber.class',
+ origin='speed', since=None, type_native='float', type_sdl='NSNumber<SDLFloat> *'),
+ self.producer.param_named(
+ constructor_argument='offset', constructor_argument_override=None, constructor_prefix='Offset',
+ deprecated=False, description=['{"default_value": null, "max_value": 100000000000, "min_value": 0}'],
+ for_name='object', mandatory=True, method_suffix='Offset', modifier='strong', of_class='NSNumber.class',
+ origin='offset', since=None, type_native='UInt64', type_sdl='NSNumber<SDLUInt> *'),
+ self.producer.param_named(
+ constructor_argument='duplicateUpdatesFromWindowID', constructor_argument_override=None,
+ constructor_prefix='DuplicateUpdatesFromWindowID', deprecated=False,
+ description=['{"default_value": null, "max_value": null, "min_value": null}'], for_name='object',
+ mandatory=False, method_suffix='DuplicateUpdatesFromWindowID', modifier='strong',
+ of_class='NSNumber.class', origin='duplicateUpdatesFromWindowID', since=None,
+ type_native='NSNumber<SDLInt> *', type_sdl='NSNumber<SDLInt> *'))
+
+ not_mandatory_arguments = [
+ self.producer.argument_named(variable='windowID', deprecated=False, origin='windowID',
+ constructor_argument='@(windowID)'),
+ self.producer.argument_named(variable='cmdID', deprecated=False, origin='cmdID',
+ constructor_argument='@(cmdID)'),
+ self.producer.argument_named(variable='position', deprecated=False, origin='position',
+ constructor_argument='@(position)'),
+ self.producer.argument_named(variable='speed', deprecated=False, origin='speed',
+ constructor_argument='@(speed)'),
+ self.producer.argument_named(variable='offset', deprecated=False, origin='offset',
+ constructor_argument='@(offset)')]
+ mandatory_arguments = [self.producer.argument_named(
+ variable='duplicateUpdatesFromWindowID', deprecated=False, origin='duplicateUpdatesFromWindowID',
+ constructor_argument='duplicateUpdatesFromWindowID')]
+
+ expected['constructors'] = (
+ self.producer.constructor_named(
+ all=not_mandatory_arguments, arguments=not_mandatory_arguments, deprecated=False, self=True,
+ init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed '
+ 'offset:(UInt64)offset'),
+ self.producer.constructor_named(
+ all=not_mandatory_arguments + mandatory_arguments, arguments=mandatory_arguments,
+ deprecated=False, self='WindowID:windowID cmdID:cmdID position:position speed:speed offset:offset',
+ init='WindowID:(UInt32)windowID cmdID:(UInt32)cmdID position:(UInt16)position speed:(float)speed '
+ 'offset:(UInt64)offset duplicateUpdatesFromWindowID:(nullable NSNumber<SDLInt> *)'
+ 'duplicateUpdatesFromWindowID'))
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_CreateInteractionChoiceSet(self):
+ """
+ generator/transformers/common_producer.py 67%
+ generator/transformers/functions_producer.py 63%
+ """
+ params = OrderedDict()
+ params['choiceSet'] = Param(name='choiceSet', param_type=Array(element_type=Struct(name='Choice')))
+ item = Function(name='CreateInteractionChoiceSet', function_id=EnumElement(name='CreateInteractionChoiceSetID'),
+ message_type=EnumElement(name='request'), params=params)
+
+ expected = OrderedDict()
+ expected['origin'] = 'CreateInteractionChoiceSet'
+ expected['name'] = 'SDLCreateInteractionChoiceSet'
+ expected['extends_class'] = 'SDLRPCRequest'
+ expected['imports'] = {'.m': {'SDLChoice'}, '.h': {'struct': {'SDLChoice'}, 'enum': {'SDLRPCRequest'}}}
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='choiceSet', constructor_argument_override=None,
+ constructor_prefix='ChoiceSet', deprecated=False, description=[], for_name='objects', mandatory=True,
+ method_suffix='ChoiceSet', modifier='strong', of_class='SDLChoice.class', origin='choiceSet',
+ since=None, type_native='NSArray<SDLChoice *> *', type_sdl='NSArray<SDLChoice *> *'),)
+
+ argument = [
+ self.producer.argument_named(variable='choiceSet', deprecated=False, constructor_argument='choiceSet',
+ origin='choiceSet')]
+
+ expected['constructors'] = (self.producer.constructor_named(
+ all=argument, arguments=argument, deprecated=False, self=True,
+ init='ChoiceSet:(NSArray<SDLChoice *> *)choiceSet'),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_SetDisplayLayout(self):
+ """
+ generator/transformers/common_producer.py 66%
+ generator/transformers/functions_producer.py 63%
+ """
+ params = OrderedDict()
+ params['displayLayout'] = Param(name='displayLayout', param_type=String(max_length=500, min_length=1))
+ item = Function(name='SetDisplayLayout', function_id=EnumElement(name='SetDisplayLayoutID'),
+ message_type=EnumElement(name='request'), params=params, history=[
+ Function(name='SetDisplayLayout', function_id=EnumElement(name='SetDisplayLayoutID'),
+ message_type=EnumElement(name='request'), params={}, history=None, since='3.0.0',
+ until='6.0.0')
+ ], since='6.0.0', until=None, deprecated='true')
+
+ expected = OrderedDict()
+ expected['origin'] = 'SetDisplayLayout'
+ expected['name'] = 'SDLSetDisplayLayout'
+ expected['extends_class'] = 'SDLRPCRequest'
+ expected['imports'] = {'.h': {'enum': {'SDLRPCRequest'}, 'struct': set()}, '.m': set()}
+ expected['since'] = '6.0.0'
+ expected['history'] = '3.0.0'
+ expected['deprecated'] = True
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='displayLayout', constructor_argument_override=None,
+ constructor_prefix='DisplayLayout', deprecated=False,
+ description=['{"default_value": null, "max_length": 500, "min_length": 1}'], for_name='object',
+ mandatory=True, method_suffix='DisplayLayout', modifier='strong', of_class='NSString.class',
+ origin='displayLayout', since=None, type_native='NSString *', type_sdl='NSString *'),)
+
+ argument = [
+ self.producer.argument_named(variable='displayLayout', deprecated=False,
+ constructor_argument='displayLayout', origin='displayLayout')]
+
+ expected['constructors'] = (self.producer.constructor_named(
+ all=argument, arguments=argument, deprecated=False, self=True,
+ init='DisplayLayout:(NSString *)displayLayout'),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
diff --git a/generator/test/test_structs.py b/generator/test/test_structs.py
new file mode 100644
index 000000000..61ea23702
--- /dev/null
+++ b/generator/test/test_structs.py
@@ -0,0 +1,106 @@
+from collections import OrderedDict
+from unittest import TestCase
+
+try:
+ from generator import Generator
+except ImportError as error:
+ from generator.generator import Generator
+
+from model.integer import Integer
+from model.param import Param
+from model.string import String
+from model.struct import Struct
+from transformers.structs_producer import StructsProducer
+
+
+class TestStructsProducer(TestCase):
+ """
+ The structures of tests in this class was prepared to cover all possible combinations of code branching in tested
+ class StructsProducer.
+ All names of Structs and nested elements doesn't reflating with real Structs
+ and could be replaces with some meaningless names.
+
+ After performing Tests there are following initial test code coverage:
+ generator/transformers/common_producer.py 72%
+ generator/transformers/structs_producer.py 100%
+ """
+
+ def setUp(self):
+ self.maxDiff = None
+ key_words = ('value', 'id')
+
+ self.producer = StructsProducer('SDLRPCStruct', enum_names=(), struct_names=['Image'], key_words=key_words)
+
+ def test_CloudAppProperties(self):
+ """
+ generator/transformers/common_producer.py 64%
+ generator/transformers/structs_producer.py 100%
+ """
+ members = OrderedDict()
+ members['appID'] = Param(name='appID', param_type=String())
+ members['value'] = Param(name='value', param_type=String())
+ item = Struct(name='CloudAppProperties', members=members)
+ expected = OrderedDict()
+ expected['origin'] = 'CloudAppProperties'
+ expected['name'] = 'SDLCloudAppProperties'
+ expected['extends_class'] = 'SDLRPCStruct'
+ expected['imports'] = {'.m': set(), '.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}}
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='appID', constructor_argument_override=None, constructor_prefix='AppID',
+ deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'],
+ for_name='object', mandatory=True, method_suffix='AppID', modifier='strong', of_class='NSString.class',
+ origin='appID', since=None, type_native='NSString *', type_sdl='NSString *'),
+ self.producer.param_named(
+ constructor_argument='valueParam', constructor_argument_override=None, constructor_prefix='ValueParam',
+ deprecated=False, description=['{"default_value": null, "max_length": null, "min_length": null}'],
+ for_name='object', mandatory=True, method_suffix='ValueParam', modifier='strong',
+ of_class='NSString.class', origin='valueParam', since=None, type_native='NSString *',
+ type_sdl='NSString *')
+ )
+
+ argument = [
+ self.producer.argument_named(
+ variable='appID', deprecated=False, constructor_argument='appID', origin='appID'),
+ self.producer.argument_named(
+ variable='valueParam', deprecated=False, constructor_argument='valueParam', origin='valueParam')
+ ]
+
+ expected['constructors'] = (self.producer.constructor_named(
+ all=argument, arguments=argument, deprecated=False, self='',
+ init='AppID:(NSString *)appID valueParam:(NSString *)valueParam'),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
+
+ def test_TouchEvent(self):
+ """
+ generator/transformers/common_producer.py 69%
+ generator/transformers/structs_producer.py 100%
+ """
+ item = Struct(name='TouchEvent', members={
+ 'id': Param(name='id', param_type=Integer(max_value=9, min_value=0))
+ })
+ expected = OrderedDict()
+ expected['origin'] = 'TouchEvent'
+ expected['name'] = 'SDLTouchEvent'
+ expected['extends_class'] = 'SDLRPCStruct'
+ expected['imports'] = {'.h': {'enum': {'SDLRPCStruct'}, 'struct': set()}, '.m': set()}
+ expected['params'] = (
+ self.producer.param_named(
+ constructor_argument='idParam', constructor_argument_override=None,
+ constructor_prefix='IdParam', deprecated=False,
+ description=['{"default_value": null, "max_value": 9, "min_value": 0}'], for_name='object',
+ mandatory=True, method_suffix='IdParam', modifier='strong', of_class='NSNumber.class',
+ origin='idParam', since=None, type_native='UInt8', type_sdl='NSNumber<SDLUInt> *'),)
+
+ argument = [
+ self.producer.argument_named(variable='idParam', deprecated=False,
+ constructor_argument='@(idParam)', origin='idParam')]
+
+ expected['constructors'] = (self.producer.constructor_named(
+ all=argument, arguments=argument, deprecated=False, self='',
+ init='IdParam:(UInt8)idParam'),)
+
+ actual = self.producer.transform(item)
+ self.assertDictEqual(expected, actual)
diff --git a/generator/transformers/__init__.py b/generator/transformers/__init__.py
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/generator/transformers/__init__.py
diff --git a/generator/transformers/common_producer.py b/generator/transformers/common_producer.py
new file mode 100644
index 000000000..13b56fd11
--- /dev/null
+++ b/generator/transformers/common_producer.py
@@ -0,0 +1,393 @@
+"""
+All Enums/Structs/Functions Producer are inherited from this class and using features of it
+"""
+import json
+import logging
+import re
+import textwrap
+from abc import ABC, abstractmethod
+from collections import OrderedDict, namedtuple
+
+from model.array import Array
+from model.boolean import Boolean
+from model.enum import Enum
+from model.float import Float
+from model.function import Function
+from model.integer import Integer
+from model.param import Param
+from model.string import String
+from model.struct import Struct
+
+
+class InterfaceProducerCommon(ABC):
+ """
+ All Enums/Structs/Functions Producer are inherited from this class and using features of it
+ """
+
+ def __init__(self, enum_names=(), struct_names=(), key_words=()):
+ self.logger = logging.getLogger(self.__class__.__name__)
+ self.struct_names = tuple(map(lambda e: self._replace_sync(e), struct_names))
+ self.key_words = key_words
+ self.param_named = namedtuple('param_named',
+ 'origin constructor_argument constructor_prefix deprecated mandatory since '
+ 'method_suffix of_class type_native type_sdl modifier for_name description '
+ 'constructor_argument_override')
+ self.constructor_named = namedtuple('constructor', 'init self arguments all')
+ self.argument_named = namedtuple('argument', 'origin constructor_argument variable deprecated')
+ self.names = self.struct_names + tuple(map(lambda e: self._replace_sync(e), enum_names))
+
+ @property
+ @abstractmethod
+ def container_name(self):
+ pass
+
+ def transform(self, item: (Enum, Function, Struct), render: dict) -> dict:
+ """
+ Main entry point for transforming each Enum/Function/Struct into output dictionary,
+ which going to be applied to Jinja2 template
+ :param item: instance of Enum/Function/Struct
+ :param render: dictionary with pre filled entries, which going to be filled/changed by reference
+ :return: dictionary which going to be applied to Jinja2 template
+ """
+ if item.description:
+ render['description'] = self.extract_description(item.description)
+ if item.since:
+ render['since'] = item.since
+ if item.history:
+ render['history'] = item.history.pop().since
+ if item.deprecated and str(item.deprecated).lower() == 'true':
+ render['deprecated'] = True
+
+ render['params'] = OrderedDict()
+
+ for param in getattr(item, self.container_name).values():
+ render['params'][param.name] = self.extract_param(param, item.name)
+ if isinstance(item, (Struct, Function)):
+ self.extract_imports(param, render['imports'])
+
+ if 'constructors' not in render and isinstance(item, (Struct, Function)):
+ render['constructors'] = self.extract_constructors(render['params'])
+
+ render['params'] = tuple(render['params'].values())
+ return render
+
+ def _replace_keywords(self, name: str) -> str:
+ origin = name
+ if name.isupper():
+ name += '_PARAM'
+ else:
+ name += 'Param'
+ self.logger.debug('Replacing %s with %s', origin, name)
+ return name
+
+ def replace_keywords(self, name: str) -> str:
+ """
+ if :param name in self.key_words, :return: name += 'Param'
+ :param name: string with item name
+ """
+ if name.casefold() in self.key_words:
+ name = self._replace_keywords(name)
+ return self._replace_sync(name)
+
+ @staticmethod
+ def _replace_sync(name):
+ """
+ :param name: string with item name
+ :return: string with replaced 'sync' to 'Sdl'
+ """
+ if name:
+ name = re.sub(r'^([sS])ync(.+)$', r'\1dl\2', name)
+ return name
+
+ def extract_imports(self, param: Param, imports: dict):
+ """
+ Extracting appropriate imports and updating in render['imports'] by reference
+ :param param: instance of Param, which is sub element of Enum/Function/Struct
+ :param imports: dictionary from render['imports']
+ :return: dictionary with extracted imports
+ """
+
+ if isinstance(param.param_type, Array):
+ type_origin, kind = self.evaluate_import(param.param_type.element_type)
+ else:
+ type_origin, kind = self.evaluate_import(param.param_type)
+
+ if type_origin and any(map(lambda n: type_origin.lower() in n.lower(), self.names)):
+ name = 'SDL' + type_origin
+ imports['.h'][kind].add(name)
+ imports['.m'].add(name)
+
+ return imports
+
+ def evaluate_import(self, element):
+ """
+ :param element: instance of param.param_type
+ :return: tuple with element.name, type(element).__name__.lower()
+ """
+ if isinstance(element, (Struct, Enum)):
+ return self._replace_sync(element.name), type(element).__name__.lower()
+ return None, None
+
+ @staticmethod
+ def title(name: str = '') -> str:
+ """
+ Capitalizing only first character in string.
+ :param name: string to be capitalized first character
+ :return: initial parameter with capitalized first character
+ """
+ return name[:1].upper() + name[1:]
+
+ @staticmethod
+ def minimize_first(name: str = '') -> str:
+ """
+ Minimizing only first character in string.
+ :param name: string to be minimized first character
+ :return: initial parameter with minimized first character
+ """
+ return name[:1].lower() + name[1:]
+
+ @staticmethod
+ def extract_description(data, length: int = 2048) -> list:
+ """
+ Evaluate, align and delete @TODO
+ :param data: list with description
+ :param length: length of the string to be split
+ :return: evaluated string
+ """
+ if not data:
+ return []
+ if isinstance(data, list):
+ data = ' '.join(data)
+ return textwrap.wrap(re.sub(r'(\s{2,}|\n|\[@TODO.+)', ' ', data).strip(), length)
+
+ @staticmethod
+ def nullable(type_native: str, mandatory: bool) -> str:
+ """
+ Used for adding nullable modificator into initiator (constructor) parameter
+ :param type_native: native type
+ :param mandatory: is parameter mandatory
+ :return: string with modificator
+ """
+ if mandatory or re.match(r'BOOL|float|double', type_native):
+ return ''
+ return 'nullable '
+
+ def parentheses(self, item):
+ """
+ Used for wrapping appropriate initiator (constructor) parameter with '@({})'
+ :param item: named tuple with initiator (constructor) parameter
+ :return: wrapped parameter
+ """
+ if re.match(r'\w*Int\d+|BOOL|float|double', item.type_native) or \
+ any(map(lambda n: item.type_native.lower() in n.lower(), self.struct_names)):
+ return '@({})'.format(item.constructor_argument)
+ return item.constructor_argument
+
+ def extract_constructor(self, data: list, mandatory: bool) -> dict:
+ """
+ Preparing dictionary with initial initiator (constructor)
+ :param data: list with prepared parameters
+ :param mandatory: is parameter mandatory
+ :return: dictionary with initial initiator (constructor)
+ """
+ data = list(data)
+
+ first = data.pop(0)
+ init = ['{}:({}{}){}'.format(self.title(first.constructor_prefix),
+ self.nullable(first.type_native, mandatory),
+ first.type_native.strip(), first.constructor_argument)]
+ arguments = [self.argument_named(origin=first.origin, constructor_argument=self.parentheses(first),
+ variable=first.constructor_argument, deprecated=first.deprecated)]
+ for param in data:
+ arguments.append(self.argument_named(origin=param.origin, constructor_argument=self.parentheses(param),
+ variable=param.constructor_argument, deprecated=param.deprecated))
+ init.append('{}:({}{}){}'.format(self.minimize_first(param.constructor_prefix),
+ self.nullable(param.type_native, mandatory),
+ param.type_native.strip(), param.constructor_argument))
+ _self = True if 'functions' in self.__class__.__name__.lower() and mandatory else ''
+ return {'init': ' '.join(init), 'self': _self, 'arguments': arguments, 'all': arguments}
+
+ def extract_constructors(self, data: dict) -> tuple:
+ """
+ Preparing tuple with all initiators (constructors)
+ :param data: list with prepared parameters
+ :return: tuple with all initiators (constructors)
+ """
+ mandatory = []
+ not_mandatory = []
+ for param in data.values():
+ if param.deprecated:
+ # Omit deprecated parameters from the constructors
+ continue
+ if param.mandatory:
+ mandatory.append(param)
+ else:
+ not_mandatory.append(param)
+
+ result = []
+ if mandatory:
+ mandatory = self.extract_constructor(mandatory, True)
+ else:
+ mandatory = OrderedDict()
+
+ if not_mandatory:
+ not_mandatory = self.extract_constructor(not_mandatory, False)
+ if mandatory:
+ not_mandatory['init'] = '{} {}'.format(mandatory['init'], self.minimize_first(not_mandatory['init']))
+ not_mandatory['all'] = mandatory['arguments'] + not_mandatory['arguments']
+ not_mandatory['self'] = re.sub(r'([\w\d]+:)\([\w\d\s<>*]*\)([\w\d]+\s*)', r'\1\2', mandatory['init'])
+ result.append(self.constructor_named(**not_mandatory))
+
+ if mandatory:
+ result.insert(0, self.constructor_named(**mandatory))
+
+ return tuple(result)
+
+ def evaluate_type(self, instance) -> dict:
+ """
+ Extracting dictionary with evaluated output types
+ :param instance: param_type of Param
+ :return: dictionary with evaluated output types
+ """
+ if hasattr(instance, 'name'):
+ instance.name = self.replace_keywords(instance.name)
+ data = OrderedDict()
+ if isinstance(instance, Enum):
+ data['for_name'] = 'enum'
+ data['of_class'] = ''
+ else:
+ data['for_name'] = 'object'
+ if isinstance(instance, (Struct, Enum)):
+ data['type_sdl'] = 'SDL' + instance.name
+ data['type_native'] = data['type_sdl'] = 'SDL{} '.format(instance.name)
+ if isinstance(instance, Struct):
+ data['of_class'] = 'SDL{}.class'.format(instance.name)
+ data['type_native'] = data['type_sdl'] = 'SDL{} *'.format(instance.name)
+ elif isinstance(instance, (Integer, Float)):
+ if isinstance(instance, Float):
+ data['type_sdl'] = 'SDLFloat'
+ data['type_native'] = 'float'
+ if isinstance(instance, Integer):
+ if not instance.max_value:
+ data['type_native'] = 'UInt32'
+ elif instance.max_value <= 255:
+ data['type_native'] = 'UInt8'
+ elif instance.max_value <= 65535:
+ data['type_native'] = 'UInt16'
+ elif instance.max_value <= 4294967295:
+ data['type_native'] = 'UInt32'
+ elif instance.max_value > 4294967295:
+ data['type_native'] = 'UInt64'
+ if instance.min_value is None or instance.min_value < 0:
+ data['type_sdl'] = 'SDLInt'
+ elif instance.min_value >= 0:
+ data['type_sdl'] = 'SDLUInt'
+ data['of_class'] = 'NSNumber.class'
+ data['type_sdl'] = 'NSNumber<{}> *'.format(data['type_sdl'])
+ elif isinstance(instance, String):
+ data['of_class'] = 'NSString.class'
+ data['type_sdl'] = data['type_native'] = 'NSString *'
+ elif isinstance(instance, Boolean):
+ data['of_class'] = 'NSNumber.class'
+ data['type_native'] = 'BOOL'
+ data['type_sdl'] = 'NSNumber<SDLBool> *'
+ return data
+
+ def extract_type(self, param: Param) -> dict:
+ """
+ Preparing dictionary with output types information
+ :param param: sub element of Enum/Function/Struct
+ :return: dictionary with output types information
+ """
+
+ if isinstance(param.param_type, Array):
+ data = self.evaluate_type(param.param_type.element_type)
+ data['for_name'] = data['for_name'] + 's'
+ data['type_sdl'] = data['type_native'] = 'NSArray<{}> *'.format(data['type_sdl'].strip())
+ else:
+ data = self.evaluate_type(param.param_type)
+
+ if not param.is_mandatory and re.match(r'\w*Int\d*|BOOL', data['type_native']):
+ data['type_native'] = data['type_sdl']
+
+ return data
+
+ @staticmethod
+ def param_origin_change(name) -> dict:
+ """
+ Based on name preparing common part of output types information
+ :param name: Param name
+ :return: dictionary with part of output types information
+ """
+ return {'origin': name,
+ 'constructor_argument': name,
+ 'constructor_prefix': InterfaceProducerCommon.title(name),
+ 'method_suffix': InterfaceProducerCommon.title(name)}
+
+ def extract_param(self, param: Param, item_name: str):
+ """
+ Preparing self.param_named with prepared params
+ :param param: Param from initial Model
+ :return: self.param_named with prepared params
+ """
+ param.name = self.replace_keywords(param.name)
+ data = {'constructor_argument_override': None,
+ 'description': self.extract_description(param.description),
+ 'since': param.since,
+ 'mandatory': param.is_mandatory,
+ 'deprecated': json.loads(param.deprecated.lower()) if param.deprecated else False,
+ 'modifier': 'strong'}
+ if isinstance(param.param_type, (Integer, Float, String, Array)):
+ data['description'].append(self.create_param_descriptor(param.param_type, OrderedDict()))
+
+ data.update(self.extract_type(param))
+ data.update(self.param_origin_change(param.name))
+ return self.param_named(**data)
+
+ def create_param_descriptor(self, param_type, parameterItems):
+ """
+ Recursively creates a documentation string of all the descriptors for a parameter (e.g. {"string_min_length": 1, string_max_length": 500}). The parameters should be returned in the same order they were added to the parameterItems dictionary
+ :param param_type: param_type from the initial Model
+ :param parameterItems: Ordered dictionary that stores each of the parameter's descriptors
+ :return: All the descriptor params from param_type concatenated into one string
+ """
+ # The key is a descriptor (i.e. max_value) and value is the associated value (i.e. 100). Some values will be dictionaries that have to be parsed to get additional descriptors (e.g. the value for an array of strings' data type will be sub-dictionary describing the min_length, max_length, and default value for the strings used in the array)
+ for key, value in param_type.__dict__.items():
+ # If a value contains a dictionary, recurse until all the descriptors have been found. Once a descriptor (i.e. `max_size`) has been found along with its associated value (i.e. 100), add the descriptor/value pair to the parameterItems dictionary
+ if hasattr(value, '__dict__'):
+ if isinstance(value, Enum) or isinstance(value, Struct):
+ # Skip adding documentation for the data type if it is a struct or enum. This is unnecessary as each enum or struct has its own documentation
+ continue
+ else:
+ self.create_param_descriptor(value, parameterItems)
+ else:
+ if key == 'default_value' and value is None:
+ # Do not add the default_value key/value pair unless it has been explicitly set in the RPC Spec
+ continue
+ else:
+ parameterDescriptor = self.update_param_descriptor(key)
+ parameterItems[parameterDescriptor] = value
+
+ return json.dumps(parameterItems, sort_keys=False)
+
+ def update_param_descriptor(self, parameterName):
+ """
+ Updates the parameter's descriptor name for clarity. This is helpful for array documentation as the descriptors can contain both the size of the array and the size of the array's data type
+ :param parameterName: The name of the parameter
+ :return: All the descriptor params from param_type concatenated into one string
+ """
+ if parameterName == 'min_size':
+ return 'array_min_size'
+ elif parameterName == 'max_size':
+ return 'array_max_size'
+ elif parameterName == 'min_length':
+ return 'string_min_length'
+ elif parameterName == 'max_length':
+ return 'string_max_length'
+ elif parameterName == 'max_value':
+ return 'num_max_value'
+ elif parameterName == 'min_value':
+ return 'num_min_value'
+ else:
+ return parameterName
+
diff --git a/generator/transformers/enums_producer.py b/generator/transformers/enums_producer.py
new file mode 100644
index 000000000..d41cd739d
--- /dev/null
+++ b/generator/transformers/enums_producer.py
@@ -0,0 +1,81 @@
+"""
+Enums transformer
+"""
+import json
+import logging
+import re
+from collections import namedtuple, OrderedDict
+
+from model.enum import Enum
+from model.enum_element import EnumElement
+from transformers.common_producer import InterfaceProducerCommon
+
+
+class EnumsProducer(InterfaceProducerCommon):
+ """
+ Enums transformer
+ """
+
+ def __init__(self, enum_class, key_words):
+ super(EnumsProducer, self).__init__(key_words=key_words)
+ self._container_name = 'elements'
+ self.enum_class = enum_class
+ self.logger = logging.getLogger(self.__class__.__name__)
+ self.param_named = namedtuple('param_named', 'origin description name since deprecated')
+ self._item_name = None
+
+ @property
+ def container_name(self):
+ return self._container_name
+
+ def transform(self, item: Enum, render: dict = None) -> dict:
+ """
+ Main entry point for transforming each Enum into output dictionary,
+ which going to be applied to Jinja2 template
+ :param item: instance of Enum
+ :param render: empty dictionary, present in parameter for code consistency
+ :return: dictionary which going to be applied to Jinja2 template
+ """
+ item.name = self._replace_sync(item.name)
+ name = 'SDL{}{}'.format(item.name[:1].upper(), item.name[1:])
+ tmp = {self.enum_class}
+ imports = {'.h': tmp, '.m': tmp}
+ if not render:
+ render = OrderedDict()
+ render['origin'] = item.name
+ render['name'] = name
+ render['imports'] = imports
+ super(EnumsProducer, self).transform(item, render)
+ return render
+
+ def extract_param(self, param: EnumElement, item_name: str):
+ """
+ Preparing self.param_named with prepared params
+ :param param: EnumElement from initial Model
+ :param item_name:
+ :return: self.param_named with prepared params
+ """
+ data = {'origin': param.name,
+ 'description': self.extract_description(param.description),
+ 'since': param.since,
+ 'deprecated': json.loads(param.deprecated.lower()) if param.deprecated else False}
+ name = None
+ if re.match(r'^[A-Z]{1,2}\d|\d[A-Z]{1,2}$', param.name):
+ name = param.name
+ elif re.match(r'(^[a-z\d]+$|^[A-Z\d]+$)', param.name):
+ name = param.name.title()
+ elif re.match(r'^(?=\w*[a-z])(?=\w*[A-Z])\w+$', param.name):
+ if param.name.endswith('ID'):
+ name = param.name[:-2]
+ else:
+ name = param.name[:1].upper() + param.name[1:]
+ elif re.match(r'^(?=\w*?[a-zA-Z])(?=\w*?[_-])(?=[0-9])?.*$', param.name):
+ name = []
+ for item in re.split('[_-]', param.name):
+ if re.match(r'^[A-Z\d]+$', item):
+ name.append(item.title())
+ name = ''.join(name)
+ if any(re.search(r'^(sdl)?({}){}$'.format(item_name.casefold(), name.casefold()), k) for k in self.key_words):
+ name = self._replace_keywords(name)
+ data['name'] = name
+ return self.param_named(**data)
diff --git a/generator/transformers/functions_producer.py b/generator/transformers/functions_producer.py
new file mode 100644
index 000000000..fcab84a14
--- /dev/null
+++ b/generator/transformers/functions_producer.py
@@ -0,0 +1,116 @@
+"""
+Functions transformer
+"""
+
+import logging
+from collections import namedtuple, OrderedDict
+
+from model.function import Function
+from transformers.common_producer import InterfaceProducerCommon
+
+
+class FunctionsProducer(InterfaceProducerCommon):
+ """
+ Functions transformer
+ """
+
+ def __init__(self, paths, enum_names, struct_names, key_words):
+ super(FunctionsProducer, self).__init__(enum_names=enum_names, struct_names=struct_names, key_words=key_words)
+ self._container_name = 'params'
+ self.request_class = paths.request_class
+ self.response_class = paths.response_class
+ self.notification_class = paths.notification_class
+ self.function_names = paths.function_names
+ self.parameter_names = paths.parameter_names
+ self.logger = logging.getLogger(self.__class__.__name__)
+ self.common_names = namedtuple('common_names', 'name origin description since')
+
+ @property
+ def container_name(self):
+ return self._container_name
+
+ def transform(self, item: Function, render: dict = None) -> dict:
+ """
+ Main entry point for transforming each Enum/Function/Struct into output dictionary,
+ which going to be applied to Jinja2 template
+ :param item: instance of Enum/Function/Struct
+ :param render: dictionary with pre filled entries, which going to be filled/changed by reference
+ :return: dictionary which going to be applied to Jinja2 template
+ """
+ list(map(item.params.__delitem__, filter(item.params.__contains__, ['success', 'resultCode', 'info'])))
+ item.name = self._replace_sync(item.name)
+ name = 'SDL' + item.name
+ imports = {'.h': {'enum': set(), 'struct': set()}, '.m': set()}
+ extends_class = None
+ if item.message_type.name == 'response':
+ extends_class = self.response_class
+ name = name + item.message_type.name.capitalize()
+ elif item.message_type.name == 'request':
+ extends_class = self.request_class
+ elif item.message_type.name == 'notification':
+ extends_class = self.notification_class
+ if extends_class:
+ imports['.h']['enum'].add(extends_class)
+
+ if not render:
+ render = OrderedDict()
+ render['origin'] = item.name
+ render['name'] = name
+ render['extends_class'] = extends_class
+ render['imports'] = imports
+
+ super(FunctionsProducer, self).transform(item, render)
+
+ return render
+
+ def get_function_names(self, items: dict) -> dict:
+ """
+ Standalone method used for preparing SDLRPCFunctionNames collection ready to be applied to Jinja2 template
+ :param items: collection with all functions from initial Model
+ :return: collection with transformed element ready to be applied to Jinja2 template
+ """
+ render = OrderedDict()
+ for item in items.values():
+ tmp = {'name': self.title(self.replace_keywords(item.name)),
+ 'origin': item.name,
+ 'description': self.extract_description(item.description),
+ 'since': item.since}
+ render[item.name] = self.common_names(**tmp)
+
+ return {'params': sorted(render.values(), key=lambda a: a.name)}
+
+ def evaluate(self, element) -> dict:
+ """
+ Internal evaluator used for preparing SDLRPCParameterNames collection
+ :param element: Param from initial Model
+ :return: dictionary with evaluated part of output collection
+ """
+ origin = element.name
+ name = self._replace_sync(element.name)
+ # if isinstance(element.param_type, (Integer, Float, Boolean, String)):
+ return {name: self.common_names(**{
+ 'name': self.title(name),
+ 'origin': origin,
+ 'description': self.extract_description(element.description),
+ 'since': element.since})}
+ # return OrderedDict()
+
+ def get_simple_params(self, functions: dict, structs: dict) -> dict:
+ """
+ Standalone method used for preparing SDLRPCParameterNames collection ready to be applied to Jinja2 template
+ :param functions: collection with all functions from initial Model
+ :param structs: collection with all structs from initial Model
+ :return: collection with transformed element ready to be applied to Jinja2 template
+ """
+ render = OrderedDict()
+
+ for func in functions.values():
+ for param in func.params.values():
+ render.update(self.evaluate(param))
+
+ for struct in structs.values():
+ render.update(self.evaluate(struct))
+ for param in struct.members.values():
+ render.update(self.evaluate(param))
+ unique = dict(zip(list(map(lambda l: l.name, render.values())), render.values()))
+ return {'params': sorted(unique.values(), key=lambda a: a.name)}
diff --git a/generator/transformers/structs_producer.py b/generator/transformers/structs_producer.py
new file mode 100644
index 000000000..b25d86230
--- /dev/null
+++ b/generator/transformers/structs_producer.py
@@ -0,0 +1,48 @@
+"""
+Structs transformer
+"""
+
+import logging
+from collections import OrderedDict
+
+from model.struct import Struct
+from transformers.common_producer import InterfaceProducerCommon
+
+
+class StructsProducer(InterfaceProducerCommon):
+ """
+ Structs transformer
+ """
+
+ def __init__(self, struct_class, enum_names, struct_names, key_words):
+ super(StructsProducer, self).__init__(enum_names=enum_names, struct_names=struct_names, key_words=key_words)
+ self._container_name = 'members'
+ self.struct_class = struct_class
+ self.logger = logging.getLogger(self.__class__.__name__)
+
+ @property
+ def container_name(self):
+ return self._container_name
+
+ def transform(self, item: Struct, render: dict = None) -> dict:
+ """
+ Main entry point for transforming each Enum/Function/Struct into output dictionary,
+ which going to be applied to Jinja2 template
+ :param item: instance of Enum/Function/Struct
+ :param render: dictionary with pre filled entries, which going to be filled/changed by reference
+ :return: dictionary which going to be applied to Jinja2 template
+ """
+ item.name = self._replace_sync(item.name)
+ name = 'SDL' + item.name
+ imports = {'.h': {'enum': set(), 'struct': set()}, '.m': set()}
+ imports['.h']['enum'].add(self.struct_class)
+ if not render:
+ render = OrderedDict()
+ render['origin'] = item.name
+ render['name'] = name
+ render['extends_class'] = self.struct_class
+ render['imports'] = imports
+
+ super(StructsProducer, self).transform(item, render)
+
+ return render