ios Document current as of 03/21/ :20 AM. Guides Installation Install SDL SDK

Size: px
Start display at page:

Download "ios Document current as of 03/21/ :20 AM. Guides Installation Install SDL SDK"

Transcription

1 Guides ios Document current as of 03/21/ :20 AM. Installation In order to build your app on a SmartDeviceLink (SDL) Core, the SDL software development kit (SDK) must be installed in your app. The following steps will guide you through adding the SDL SDK to your workspace and configuring the environment. Install SDL SDK We have provided three different ways to install the SDL SDK in your project: CocoaPods, Carthage, or manually. COCOAPODS INSTALL ATION 1. Xcode should be closed for the following steps. 2. Open the terminal app on your Mac.

2 3. Make sure you have the latest version of CocoaPods installed. For more information on installing CocoaPods on your system please consult: sudo gem install cocoapods 1. Navigate to the root directory of your app. Make sure your current folder contains the.xcodeproj file 2. Create a new Podfile. pod init 1. In the Podfile, add the following text. This tells CocoaPods to install SDL SDK for ios. target <#Your Project Name#> do pod SmartDeviceLink-iOS, ~> <#SDL Version#> end

3 N O T E SDL Versions are available on Github. We suggest always using the latest release. 1. Install SDL SDK for ios: pod install 1. There will be a newly created.xcworkspace file in the directory in addition to the.xcodeproj file. Always use the.xcworkspace file from now on. 2. Open the.xcworkspace file. To open from the terminal, type: open <#Your Project Name#>.xcworkspace CARTHAGE INSTALL ATION SDL ios supports Carthage! Install using Carthage by following this guide. Carthage supports ios 8+.

4 MANUAL INSTALL ATION Tagged to our releases is a dynamic framework file that can be drag-anddropped into the application. Dynamic frameworks are supported on ios 8+. Please Note: You cannot submit your app to the app store with the framework as is. You MUST strip the simulator part of the framework first. Use a script such as Carthage's to accomplish this. SDK Configuration 1. Get a SDL Core If you do not have a SDL enabled head unit for testing, you should build the sdl_core project. The sdl_core project is an emulator that lets you simulate sending and receiving remote procedure calls between a smartphone app and a SDL Core. 2. Enable Background Capabilities Your application must be able to maintain a connection to the SDL Core even when it is in the background. This capability must be explicitly enabled for your application (available for ios 5+). To enable the feature, select your application's build target, go to Capabilities, Background Modes, and select External accessory communication mode. 3. Add SDL Protocol Strings Your application must support a set of SDL protocol strings in order to be connected to SDL enabled head units. Go to your application's.plist file and add the following code under the top level dictionary.

5 N O T E This is only required for USB and Bluetooth enabled head units. It is not necessary during development using SDL Core. <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> </array>

6 4. Access the Documentation You can find the latest reference documentation on CocoaDocs. D O W N L O A D T H E D O C U M E N TAT I O N Install this documentation to Dash or to Xcode by using Docs for Xcode. On the SDL Docs page, click the upload icon located in the upper right hand corner of the screen and add the documentation to Dash or Xcode. 5. Get an App Id An app id is required for production level apps. The app id gives your app special permissions to access vehicle data. If your app does not need to access vehicle data, a dummy app id (i.e. create a fake id like "1234") is sufficient during the development stage. However, you must get an app id before releasing the app to the public. To obtain an app id, sign up at smartdevicelink.com. Integration Basics How SDL Works SmartDeviceLink works by sending remote procedure calls (RPCs) back and forth between a smartphone application and the SDL Core. These RPCs allow you to build the user interface, detect button presses, play audio, and get

7 vehicle data, among other things. You will use the SDL library to build your app on the SDL Core. Set Up a Proxy Manager Class You will need a class that manages the RPCs sent back and forth between your app and SDL Core. Since there should be only one active connection to the SDL Core, you may wish to implement this proxy class using the singleton pattern. OBJECTIVE-C ProxyManager.h #import <Foundation/Foundation.h> SDLMananger : NSObject + NS_ASSUME_NONNULL_END ProxyManager.m

8 #import "ProxyManager.h" ProxyManager + (instancetype)sharedmanager { static ProxyManager* sharedmanager = nil; static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ sharedmanager = [[ProxyManager alloc] init]; ); return sharedmanager; - (instancetype)init { self = [super init]; if (!self) { return NS_ASSUME_NONNULL_END

9 SWIFT class ProxyManager: NSObject { // Singleton static let sharedmanager = ProxyManager() private override init() { super.init() Your app should always start passively watching for a connection with a SDL Core as soon as the app launches. The easy way to do this is by instantiating the ProxyManager class in the didfinishlaunchingwithoptions() method in your AppDelegate class. The connect method will be implemented later. To see a full example, navigate to the bottom of this page. AppDelegate - (BOOL)application:(UIApplication *)application didfinishlaunchingwithoptions:(nsdictionary *)launchoptions { // Initialize and start the proxy [[ProxyManager sharedmanager]

10 SWIFT class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didfinishlaunchingwithoptions launchoptions: [ UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Initialize and start the proxy ProxyManager.shared.connect() return true Import the SDL Library At the top of the ProxyManager class, import the SDL for ios library. OBJECTIVE-C #import "SmartDeviceLink.h"

11 SWIFT import SmartDeviceLink_iOS Implement the SDL Manager The SDLManager is a helper class that will handle setting up the initial connection with the SDL Core. It will also help you upload images and send RPCs.

12 OBJECTIVE-C #import "ProxyManager.h" #import "SmartDeviceLink.h" ProxyManager (nonatomic, strong) ProxyManager + (instancetype)sharedmanager { static ProxyManager *sharedmanager = nil; static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ sharedmanager = [[ProxyManager alloc] init]; ); return sharedmanager; - (instancetype)init { self = [super init]; if (!self) { return NS_ASSUME_NONNULL_END

13 SWIFT class ProxyManager: NSObject { // Manager fileprivate let sdlmanager: SDLManager // Singleton static let sharedmanager = ProxyManager() private override init() { super.init() 1. Create a Lifecycle Configuration In order to instantiate the SDLManager class, you must first configure an SDLLifecycleConfiguration instance with the application name and application id. During the development stage, a dummy app id is usually sufficient. For more information about obtaining an application id, please consult the SDK Configuration section of this guide. You must also decide which network configuration to use to connect the app to the SDL Core. Optional, but recommended, configuration properties include short app name, app icon, and app type. NETWORK CONNECTION TYPE There are two different ways to connect your app to a SDL Core: with a TCP (Wifi) network connection or with an iap (USB) network connection. Use TCP for debugging and use iap for production level apps.

14 IAP OBJECTIVE-C SDLLifecycleConfiguration* lifecycleconfiguration = [ SDLLifecycleConfiguration Name#>" appid:@"<#app Id#>"]; SWIFT let lifecycleconfiguration = SDLLifecycleConfiguration. defaultconfiguration(withappname:"<#app Name#>", appid: "<#App Id#>")

15 TCP OBJECTIVE-C SDLLifecycleConfiguration* lifecycleconfiguration = [ SDLLifecycleConfiguration Name#>" appid:@"<#app Id#>" ipaddress:@"<#ip Address#>" port:<#port#>]; SWIFT let lifecycleconfiguration = SDLLifecycleConfiguration. debugconfiguration(withappname: "<#App Name#>", appid: "<#App Id#>", ipaddress: "<#IP Address#>", port: <#Port#>)) N O T E If you are using an emulator, the IP address is your computer or virtual machine s IP address, and the port number is usually If these values are not correct, or emulator is not running, your app with not run, as TCP connections occur on the main thread.

16 N O T E If you are using a head unit or TDK, and are using the relay app for debugging, the IP address and port number should be set to the same IP address and port number as the app. This information appears in the relay app once the server is turned on in the relay app. Also be sure that the device is on the same network as your app. 2. Short app name (optional) This is a shortened version of your app name that is substituted when the full app name will not be visible due to character count constraints OBJECTIVE-C lifecycleconfiguration.shortappname App Name#>";

17 SWIFT lifecycleconfiguration.shortappname = "<#Shortened App Name#>" 3. App Icon This is a custom icon for your application. Please refer to Uploading Files and Graphics for icon sizes. OBJECTIVE-C UIImage* appimage = [UIImage imagenamed:@"<#appicon Name#>" ]; if (appimage) { SDLArtwork* appicon = [SDLArtwork persistentartworkwithimage:appimage name:@"<#name to Upload As#>" asimageformat:sdlartworkimageformatjpg /* or SDLArtworkImageFormatPNG */]; lifecycleconfiguration.appicon = appicon;

18 SWIFT if let appimage = UIImage(named: "<#AppIcon Name#>") else { let appicon = SDLArtwork.persistentArtwork(with: appimage, name: "<#Name to Upload As#>", as:.jpg /* or.png */) lifecycleconfiguration.appicon = appicon N O T E We recommend using SDLArtwork when building an image. Persistent files are used when the image ought to remain on the remote system between ignition cycles. This is commonly used for menu artwork and app icons 4. App Type (optional) The app type is used by car manufacturers to decide how to categorize your app. Each car manufacturer has different categorization system. For example, if you set your app type as media, your app will also show up in the audio tab as well as the apps tab of Ford s SYNC3 head unit. The app type options are:

19 default, communication, media (i.e. music/podcasts/radio), messaging, navigation, information, and social. OBJECTIVE-C lifecycleconfiguration.apptype = SDLAppHMIType.MEDIA; SWIFT lifecycleconfiguration.apptype =.media() 2. Set the Configuration The SDLConfiguration class is used to set the lifecycle and lock screen configurations for the app. Use the lifecycle configuration settings above to instantiate a SDLConfiguration instance.

20 OBJECTIVE-C SDLConfiguration* configuration = [SDLConfiguration configurationwithlifecycle:lifecycleconfiguration lockscreen :[SDLLockScreenConfiguration enabledconfiguration]]; SWIFT let configuration = SDLConfiguration(lifecycle: lifecycleconfiguration, lockscreen:.enabled()) 3. Lock screen A lock screen is used to prevent the user from interacting with the app on the smartphone while they are driving. When the vehicle starts moving, the lock screen is activated. Similarly, when the vehicle stops moving, the lock screen is removed. You must implement the lock screen in your app for safety reasons. Any application without a lock screen will not get approval for release to the public. The SDL SDK takes care of the lock screen implementation for you, and even includes the resources for a default lock screen, as well as using the app icon you set, and a connected vehicle's logo. If you do not want to use the default lock screen, you can implement your own custom lock screen.

21 For more information, please refer to the Adding the Lock Screen section, for this guide we will be using SDLLockScreenConfiguration 's enabledconfiguration. OBJECTIVE-C [SDLLockScreenConfiguration enabledconfiguration] SWIFT SDLLockScreenConfiguration.enabled() 4. Create a SDLManager Now you can use the SDLConfiguration instance to instantiate the SDLManager.

22 OBJECTIVE-C self.sdlmanager = [[SDLManager alloc] initwithconfiguration: configuration delegate:self]; SWIFT** sdlmanager = SDLManager(configuration: configuration, delegate: self) 5. Start the SDLManager The manager should be started as soon as possible in your application's lifecycle. We suggest doing this in the didfinishlaunchingwithoptions() method in your AppDelegate class. Once the manager has been initialized, it will immediately start watching for a connection with the remote system. The manager will passively search for a connection with a SDL Core during the

23 entire lifespan of the app. If the manager detects a connection with a SDL Core, the startwithreadyhandler will be called. OBJECTIVE-C [self.sdlmanager startwithreadyhandler:^(bool success, NSError * _Nullable error) { if (success) { // Your app has successfully connected with the SDL Core. ]; SWIFT sdlmanager.start(readyhandler { (success, error) in if success { // Your app has successfully connected with the SDL Core. ) N O T E In production, your app will be watching for connections using iap, which will not use any additional battery power than normal.

24 If the connection is successful, you can start sending RPCs to the SDL Core. However, some RPCs can only be sent when the HMI is in the FULL or LIMITED state. If the SDL Core's HMI is not ready to accept these RPCs, your requests will be ignored. If you want to make sure that the SDL Core will not ignore your RPCs, use the SDLManagerDelegate methods in the next section. 6. Example Implementation of a Proxy Class The following code snippet has an example of setting up both a TCP and iap connection. OBJECTIVE-C ProxyManager.h #import <Foundation/Foundation.h> ProxyManager : NSObject + (instancetype)sharedmanager; - NS_ASSUME_NONNULL_END ProxyManager.m

25 #import "SmartDeviceLink.h" NS_ASSUME_NONNULL_BEGIN static NSString* const AppName Name#>"; static NSString* const AppId ProxyManager () (nonatomic, strong) ProxyManager + (instancetype)sharedmanager { static ProxyManager *sharedmanager = nil; static dispatch_once_t oncetoken; dispatch_once(&oncetoken, ^{ sharedmanager = [[ProxyManager alloc] init]; ); return sharedmanager; - (instancetype)init { self = [super init]; if (!self) { return nil; // Used for USB Connection SDLLifecycleConfiguration* lifecycleconfiguration = [ SDLLifecycleConfiguration defaultconfigurationwithappname: AppName appid:appid]; // Used for TCP/IP Connection // SDLLifecycleConfiguration* lifecycleconfiguration = [SDLLifecycleConfiguration debugconfigurationwithappname:appname appid:appid ipaddress:@"<#ip Address#>" port:<#port#>]; UIImage* appimage = [UIImage imagenamed:@"<#appicon Name#>"]; if (appimage) { SDLArtwork* appicon = [SDLArtwork persistentartworkwithimage:appimage name:@"<#name to Upload As#>" asimageformat:sdlartworkimageformatjpg /* or SDLArtworkImageFormatPNG */]; lifecycleconfiguration.appicon = appicon;

26 lifecycleconfiguration.shortappname App Name#>"; lifecycleconfiguration.apptype = [SDLAppHMIType MEDIA]; SDLConfiguration* configuration = [SDLConfiguration configurationwithlifecycle:lifecycleconfiguration lockscreen :[SDLLockScreenConfiguration enabledconfiguration]]; self.sdlmanager = [[SDLManager alloc] initwithconfiguration:configuration delegate:self]; return self; - (void)connect { [self.sdlmanager startwithreadyhandler:^(bool success, NSError * _Nullable error) { if (success) { // Your app has successfully connected with the SDL Core ]; #pragma mark SDLManagerDelegate - (void)managerdiddisconnect { NSLog(@"Manager disconnected!"); - (void)hmilevel:(sdlhmilevel *)oldlevel didchangetolevel:( SDLHMILevel *)newlevel { NSLog(@"Went from HMI level %@ to HMI Level %@", oldlevel, NS_ASSUME_NONNULL_END

27 SWIFT

28 import SmartDeviceLink_iOS class ProxyManager: NSObject { private let appname = "<#App Name#>" private let appid = "<#App Id#>" // Manager fileprivate let sdlmanager: SDLManager // Singleton static let sharedmanager = ProxyManager() private override init( ) { // Used for USB Connection let lifecycleconfiguration = SDLLifecycleConfiguration.defaultConfiguration(withAppName: appname, appid: appid) // Used for TCP/IP Connection // let lifecycleconfiguration = SDLLifecycleConfiguration.debugConfiguration(withAppName: appname, appid: appid, ipaddress: "<#IP Address#>", port: <#Port#>) // App icon image if let appimage = UIImage(named: "<#AppIcon Name#>") { let appicon = SDLArtwork.persistentArtwork(with: appimage, name: "<#Name to Upload As#>", as:.jpg /* or.png */) lifecycleconfiguration.appicon = appicon lifecycleconfiguration.shortappname = "<#Shortened App Name#>" lifecycleconfiguration.apptype =.media() let configuration = SDLConfiguration(lifecycle: lifecycleconfiguration, lockscreen:.enabled()) sdlmanager = SDLManager(configuration: configuration, delegate: nil) super.init() sdlmanager.delegate = self

29 func connect() { // Start watching for a connection with a SDL Core sdlmanager.start { (success, error) in if success { // Your app has successfully connected with the SDL Core //MARK: SDLManagerDelegate extension ProxyManager: SDLManagerDelegate { func managerdiddisconnect() { print("manager disconnected!") func hmilevel(_ oldlevel: SDLHMILevel, didchangeto newlevel: SDLHMILevel) { print("went from HMI level \(oldlevel) to HMI level \( newlevel)") Implement the SDL Manager Delegate The ProxyManager class should conform to the SDLManagerDelegate protocol. This means that the Proxy class must implement the following required functions: 1. managerdiddisconnect() This function is called only once, when the proxy disconnects from the SDL Core. Do any cleanup you need to do in this function. 2. hmilevel(oldlevel: SDLHMILevel!, didchangetolevel newlevel: SDLHMILevel!) This function is called when the HMI level changes for the app. The HMI level can be FULL, LIMITED, BACKGROUND, or NONE. It is important to note that most RPCs sent while the HMI is in BACKGROUND or NONE mode will be ignored by the SDL Core. The Different HMI Levels: Please refer to Knowing the In-Car UI Status for information about HMI levels.

30 Connecting to a SDL Core Connect with an Emulator To connect to a SDL Core emulator, make sure to implement a TCP connection. The emulator and app should be on the same network (i.e. remember to set the correct IP address and port number in the SDLLifecycleConfiguration ). The IP will most likely be the IP address of the operating system running the SDL Core emulator. The port will most likely be N O T E Known issues: When app is in the background mode, the app will be unable to communicate with SDL Core. This will work on IAP connections. Audio will not play on the SDL Core. Only IAP connections are currently able to play audio.

31 Connect with a Vehicle Head Unit or a Technical Development Kit (TDK) PRODUCTION To connect your ios device directly to a vehicle head unit or TDK, make sure to implement an iap ( default ) connection in the SDLLifecycleConfiguration. Then connect the ios device to the head unit or TDK using a USB cord. DEBUGGING If you are testing with a vehicle head unit or TDK and want to see debug logs in Xcode while the app is running, you must use another app called the relay app to help you connect to the device. When using the relay app, make sure to implement a TCP connection. Please see the guide for the relay app to learn how to setup the connection between the device, the relay app and your app. N O T E The same issues apply when connecting the Relay app with a TDK or head unit as do when connecting to SDL Core. Please see the issues above, under the Connect with an Emulator heading.

32 Designing a User Interface Designing for Different User Interfaces Each car manufacturer has different user interface style guidelines, so the number of lines of text, buttons, and images supported will vary between different types of head units. When the app first connects to the SDL Core, a RegisterAppInterface RPC will be sent by the SDL Core containing the displaycapability properties. You can use this information to determine how to layout the user interface. Register App Interface RPC The RegisterAppInterface response contains information about the display type, the type of images supported, the number of text fields supported, the HMI display language, and a lot of other useful properties. For a full list of displaycapability properties returned by the RegisterAppInterface response, please consult the SDLRegisterAppInterfaceResponse.h file. The table below has a list of all possible properties that can be returned by the RegisterAppInterface response. Each property is optional, so you may not get information for all the parameters in the table.

33 PA R A M E T E R S D E S C R I P T I O N N O T E S syncmsgversion 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. Check SDLSyncMsgVersio n.h for more information language The currently active voice-recognition and text-to-speech language on Sync. Check SDLLanguage.h for more information hmidisplaylanguag e The currently active display language on Sync. Check SDLLanguage.h for more information displaycapabilities Information about the Sync display. This includes information about available templates, whether or not graphics are supported, and a list of all text fields and the max number of characters allowed in each text field. Check SDLRPCMessage.h for more information buttoncapabilities A list of available buttons and whether the buttons support long, short and updown presses. Check SDLButtonCapabiliti es.h for more information

34 PA R A M E T E R S D E S C R I P T I O N N O T E S softbuttoncapabiliti es A list of available soft buttons and whether the button support images. Also information about whether the button supports long, short and up-down presses. Check SDLSoftButtonCapa bilities.h for more information presetbankcapabili ties If returned, the platform supports custom on-screen presets. Check SDLPresetBankCap abilities.h for more information hmizonecapabilitie s Specifies HMI Zones in the vehicle. There may be a HMI available for back seat passengers as well as front seat passengers. Check SDLHMIZoneCapabi lities.h for more information speechcapabilities Contains information about TTS capabilities on the SDL platform. Platforms may support text, SAPI phonemes, LH PLUS phonemes, prerecorded speech, and silence. Check SDLSpeechCapabili ties.h for more information prerecordedspeech A list of pre-recorded sounds you can use in your app. Sounds may include a help, initial, listen, positive, or a negative jingle. Check SDLPrerecordedSpe ech.h for more information

35 PA R A M E T E R S D E S C R I P T I O N N O T E S vrcapabilities The voicerecognition capabilities of the connected SDL platform. The platform may be able to recognize spoken text in the current language. Check SDLVRCapabilities.h for more information audiopassthrucapa bilities Describes the sampling rate, bits per sample, and audio types available. Check SDLAudioPassThru Capabilities.h for more information vehicletype The make, model, year, and the trim of the vehicle. Check SDLVehicleType.h for more information supporteddiagmod es Specifies the whitelist of supported diagnostic modes (0x00-0xFF) capable for DiagnosticMessage requests. If a mode outside this list is requested, it will be rejected. Check SDLDiagnosticMess age.h for more information hmicapabilities Returns whether or not the app can support built-in navigation and phone calls. Check SDLHMICapabilities. h for more information sdlversion The SmartDeviceLink version String

36 PA R A M E T E R S D E S C R I P T I O N N O T E S systemsoftwarever sion The software version of the system that implements the SmartDeviceLink core String Templates Each car manufacturer supports a set of templates for the user interface. These templates determine the position and size of the text, images, and buttons on the screen. A list of supported templates is sent with RegisterAppInterface response. To change a template at any time, send a SDLSetDisplayLayout RPC to the SDL Core. If you want to ensure that the new template is used, wait for a response from the SDL Core before sending any more user interface RPCs. OBJECTIVE-C SDLSetDisplayLayout* display = [[SDLSetDisplayLayout alloc] initwithpredefinedlayout:sdlpredefinedlayout. GRAPHIC_WITH_TEXT]; [self.sdlmanager sendrequest:display withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The template has been set successfully ];

37 SWIFT let display = SDLSetDisplayLayout(predefinedLayout:. graphic_with_text())! sdlmanager.send(display) { (request, response, error) in if response?.resultcode ==.success() { // The template has been set successfully Available Templates There are fifteen standard templates to choose from, however some head units may only support a subset of these templates. Please check the RegisterAppInterface response for the supported templates. The following examples show how templates will appear on the generic head unit. 1. MEDIA - WITH AND WITHOUT PROGRESS BAR

38 F O R D H M I 2. NON-MEDIA - WITH AND WITHOUT SOFT BUTTONS

39 F O R D H M I 3. GRAPHIC_WITH_TEXT

40 F O R D H M I 4. TEXT_WITH_GRAPHIC F O R D H M I 5. TILES_ONLY

41 F O R D H M I 6. GRAPHIC_WITH_TILES F O R D H M I 7. TILES_WITH_GRAPHIC

42 F O R D H M I 8. GRAPHIC_WITH_TEXT_AND_SOFTBUTTONS F O R D H M I 9. TEXT_AND_SOFTBUTTONS_WITH_GRAPHIC

43 F O R D H M I 10. GRAPHIC_WITH_TEXTBUTTONS F O R D H M I 11. DOUBLE_GRAPHIC_SOFTBUTTONS

44 F O R D H M I 12. TEXTBUTTONS_WITH_GRAPHIC F O R D H M I 13. TEXTBUTTONS_ONLY

45 F O R D H M I 14. L ARGE_GRAPHIC_WITH_SOFTBUTTONS F O R D H M I 15. L ARGE_GRAPHIC_ONLY

46 F O R D H M I Text, Images, and Buttons All text, images, and buttons on the HMI screen must be sent as part of a SDLShow RPC. Subscribe buttons are sent as part of a SDLSubscribeButton RPC. Text A maximum of four lines of text can be set in SDLShow RPC, however, some templates may only support 1, 2, or 3 lines of text. If all four lines of text are

47 set in the SDLShow RPC, but the template only supports three lines of text, then the fourth line will simply be ignored. OBJECTIVE-C SDLShow* show = [[SDLShow alloc] initwithmainfield1:@"<line 1 of Text#>" mainfield2:@"<line 2 of Text#>" 3 of Text#>" mainfield4:@"<line 4 of Text#>" alignment:sdltextalignment.centered()]; self.sdlmanager sendrequest:show withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The text has been set successfully ]; SWIFT let show = SDLShow(mainField1: "<#Line 1 of Text#>", mainfield2: "<#Line 2 of Text#>", mainfield3: "<#Line 3 of Text#>", mainfield4: "<#Line 4 of Text#>", alignment:. centered()) sdlmanager.send(show) { (request, response, error) in guard let response = response else { return if response.resultcode.isequal(to: SDLResult.success()) { // The text has been set successfully

48 Images The position and size of images on the screen is determined by the currently set template. All images must first be uploaded to the remote system using the SDLManager s file manager before being used in a SDLShow RPC. Once the image has been successfully uploaded, the app will be notified in the upload method's completion handler. For information relating to how to upload images, go to the Uploading Files and Graphics section. N O T E Some head units you may be connected to may not support images at all. Please consult the graphicssupported property in the display capabilities property of the RegisterAppInterface response. SHOW THE IMAGE ON A HEAD UNIT Once the image has been uploaded to the head unit, you can show the image on the user interface. To send the image, create a SDLImage, and send it using the SDLShow RPC. The value property should be set to the same value used

49 in the name property of the uploaded SDLArtwork. Since you are uploading your own image, the imagetype property should be set to dynamic. OBJECTIVE-C SDLImage* image = [[SDLImage alloc] As Name#>" oftype:sdlimagetype.dynamic]; SDLShow* show = [[SDLShow alloc] init]; show.graphic = image; self.sdlmanager sendrequest:show withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The text has been set successfully ];

50 SWIFT let sdlimage = SDLImage(name: "<#Uploaded As Name", of:. dynamic()) let show = SDLShow() show.graphic = image sdlmanager.send(show) { (request, response, error) in guard let response = response else { return if response.resultcode.isequal(to: SDLResult.success()) { // Success Soft & Subscribe Buttons Buttons on the HMI screen are referred to as soft buttons to distinguish them from hard buttons, which are physical buttons on the head unit. Don t confuse soft buttons with subscribe buttons, which are buttons that can detect user selection on hard buttons (or built-in soft buttons). SOFT BUTTONS Soft buttons can be created with text, images or both text and images. The location, size, and number of soft buttons visible on the screen depends on the template. If the button has an image, remember to upload the image first to the head unit before setting the image in the SDLSoftButton instance.

51 N O T E If a button type is set to image or both but no image is stored on the head unit, the button might not show up on the HMI screen.

52 OBJECTIVE-C

53 SDLSoftButton* softbutton = [[SDLSoftButton alloc] init]; // Button Id softbutton.softbuttonid Button Id#>); // Button handler - This is called when user presses the button softbutton.handler = ^(SDLRPCNotification *notification) { if ([notification iskindofclass:[sdlonbuttonpress class ]]) { SDLOnButtonPress *onbuttonpress = (SDLOnButtonPress* )notification; if ([onbuttonpress.buttonpressmode isequaltoenum: SDLButtonPressMode.SHORT]) { // Short button press else if ([onbuttonpress.buttonpressmode isequaltoenum:sdlbuttonpressmode.long]) { // Long button press else if ([notification iskindofclass:[sdlonbuttonevent class]]) { SDLOnButtonEvent *onbuttonevent = (SDLOnButtonEvent* )notification; if ([onbuttonevent.buttoneventmode isequaltoenum: SDLButtonEventMode.BUTTONUP]) { // Button up else if ([onbuttonevent.buttoneventmode isequaltoenum:sdlbuttoneventmode.buttondown]) { // Button down ; // Button type can be text, image, or both text and image softbutton.type = SDLSoftButtonType.BOTH; // Button text softbutton.text Text#>"; // Button image softbutton.image = [[SDLImage alloc] initwithname:@"<#save As Name#>" oftype: SDLImageType.DYNAMIC]; SDLShow *show = [[SDLShow alloc] init]; // The buttons are set as part of an array show.softbuttons = [NSMutableArray arraywithobject: softbutton]

54 // Send the request [self.sdlmanager sendrequest:show withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The button was created successfully ];

55 SWIFT

56 let softbutton = SDLSoftButton()! // Button Id softbutton.softbuttonid = <#Unique Button Id#> // Button handler - This is called when user presses the button softbutton.handler = { (notification) in if let onbuttonpress = notification as? SDLOnButtonPress { if onbuttonpress.buttonpressmode.isequal(to: SDLButtonPressMode.short()) { // Short button press else if onbuttonpress.buttonpressmode.isequal(to: SDLButtonPressMode.long()) { // Long button press else if let onbuttonevent = notification as? SDLOnButtonEvent { if onbuttonevent.buttoneventmode.isequal(to: SDLButtonEventMode.buttonup()) { // Button up else if onbuttonevent.buttoneventmode.isequal(to: SDLButtonEventMode.buttondown()) { // Button down // Button type can be text, image, or both text and image softbutton.type =.both() // Button text softbutton.text = "<#Button Text#>" // Button image softbutton.image = SDLImage(name: "<#Save As Name#>", of:. dynamic()) let show = SDLShow()! // The buttons are set as part of an array show.softbuttons = [softbutton] // Send the request sdlmanager.send(show) { (request, response, error) in guard let response = response else { return if response.resultcode.isequal(to: SDLResult.success())

57 { // The button was created successfully SUBSCRIBE BUTTONS Subscribe buttons are used to detect changes to hard buttons. You can subscribe to the following hard buttons: B U T T O N T E M P L AT E B U T T O N T Y P E Ok (play/pause) media template only soft button and hard button Seek left media template only soft button and hard button Seek right media template only soft button and hard button Tune up media template only hard button Tune down media template only hard button Preset 0-9 any template hard button Search any template hard button Custom any template hard button

58 Audio buttons like the OK (i.e. the play/pause button), seek left, seek right, tune up, and tune down buttons can only be used with a media template. The OK, seek left, and seek right buttons will also show up on the screen in a predefined location dictated by the media template on touchscreens. The app will be notified when the user selects the subscribe button on the screen or when the user manipulates the corresponding hard button. N O T E You will automatically be assigned the media template if you set your configuration app type as MEDIA. Menus You have two different options when creating menus. One is to simply add items to the default menu available in every template. The other is to create a custom menu that pops up when needed. Default Menu

59 F O R D H M I Every template has a default menu button. The position of this button varies between templates, and can not be removed from the template. The default menu is initially empty except for an "Exit Your App Name" button. Items can be

60 added to the menu at the root level or to a submenu. It is important to note that a submenu can only be one level deep. Menu Structure ADD MENU ITEMS The SDLAddCommand RPC can be used to add items to the root menu or to a submenu. Each SDLAddCommand RPC must be sent with a unique id, a voicerecognition command, and a set of menu parameters. The menu parameters include the menu name, the position of the item in the menu, and the id of the menu item s parent. If the menu item is being added to the root menu, then the

61 parent id is 0. If it is being added to a submenu, then the parent id is the submenu s id. OBJECTIVE-C // Create the menu parameters // The parent id is 0 if adding to the root menu // If adding to a submenu, the parent id is the submenu's id SDLMenuParams* menuparameters = [[SDLMenuParams alloc] initwithmenuname:@"menu Item Name" parentid:0 position:0]; // For menu items, be sure to use unique ids. SDLAddCommand* menuitem = [[SDLAddCommand alloc] initwithid: <#Unique Id#> vrcommands:@[@"<#voice Recognition Command#>"] handler:^(sdlrpcnotification *notification) { if (![notification iskindofclass:sdloncommand.class]) { return; SDLOnCommand* oncommand = (SDLOnCommand*)notification; if ([oncommand.triggersource isequaltoenum: SDLTriggerSource.MENU]) { // Menu Item Was Selected ]; // Set the menu parameters menuitem.menuparams = menuparameters; [self.sdlmanager sendrequest:menuitem withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The menuitem was created successfully ];

62 SWIFT // Create the menu parameters // The parent id is 0 if adding to the root menu // If adding to a submenu, the parent id is the submenu's id let menuparameters = SDLMenuParams(menuName: "<#Menu Item Name#>", parentid: 0, position: 0)! // For menu items, be sure to use unique ids. let menuitem = SDLAddCommand(id: <#Unique Id#>, vrcommands: ["<#Voice Recognition Command#>"]) { (notification) in guard let oncommand = notification as? SDLOnCommand else { return if oncommand.triggersource ==.menu() { // Menu Item Was Selected! // Set the menu parameters menuitem.menuparams = menuparameters sdlmanager.send(menuitem) { (request, response, error) in if response?.resultcode ==.success() { // The menuitem was created successfully ADD A SUBMENU To create a submenu, first send a SDLAddSubMenu RPC. When a response is received from the SDL Core, check if the submenu was added successfully. If it was, send an SDLAddCommand RPC for each item in the submenu.

63 OBJECTIVE-C SDLAddSubMenu* submenu = [[SDLAddSubMenu alloc] initwithid:< #Unique Id#> menuname:@"<#submenu Item Name#>"]; [self.sdlmanager sendrequest:submenu withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success]) { // The submenu was created successfully, start adding the submenu items ]; SWIFT let submenu = SDLAddSubMenu(id: <#Unique Id#>, menuname: "<#SubMenu Item Name#>")! sdlmanager.send(submenu) { (request, response, error) in if response?.resultcode ==.success() { // The submenu was created successfully, start adding the submenu items )

64 DELETE MENU ITEMS Use the cmdid of the menu item to tell the SDL Core which item to delete using the SDLDeleteCommand RPC. OBJECTIVE-C SDLDeleteCommand* deletemenuitem = [[SDLDeleteCommand alloc] initwithid:<#id of Menu Item To Delete#>]; [self.sdlmanager sendrequest:deletemenuitem withresponsehandler:^(sdlrpcrequest *request, SDLRPCResponse *response, NSError *error) { if ([response.resultcode isequaltoenum:sdlresult.success]) { // The menu item was successfully deleted ];

65 SWIFT let deletemenuitem = SDLDeleteCommand(id: <#Id of Menu Item To Delete#>)! sdlmanager.send(deletemenuitem) { (request, response, error) in if response?.resultcode ==.success() { // The menu item was successfully deleted DELETE SUBMENUS Use the menuid to tell the SDLCore which item to delete using the SDLDeleteSubMenu RPC.

66 OBJECTIVE-C SDLDeleteSubMenu* deletesubmenu = [[SDLDeleteSubMenu alloc] initwithid:<#id of Sub Menu Item to Delete#>]; [self.sdlmanager sendrequest:deletesubmenu withresponsehandler:^(sdlrpcrequest *request, SDLRPCResponse *response, NSError *error) { if ([response.resultcode isequaltoenum:sdlresult.success]) { // The sub menu was successfully deleted ]; SWIFT let deletesubmenu = SDLDeleteSubMenu(id: <#Id of Sub Menu Item to Delete#>)! sdlmanager.send(deletesubmenu) { (request, response, error) in if response?.resultcode ==.success() { // The sub menu was successfully deleted

67 Custom Menus Custom menus, called perform interactions, are one level deep, however, you can create submenus by triggering another perform interaction when the user selects a row in a menu. Perform interactions can be set up to recognize speech, so a user can select an item in the menu by speaking their preference rather than physically selecting the item. Perform interactions are created by sending two different RPCs. First a SDLCreateInteractionChoiceSet RPC must be sent. This RPC sends a list of items that will show up in the menu. When the request has been registered successfully, then a SDLPerformInteraction RPC is sent. The

68 SDLPerformInteraction RPC sends the formatting requirements, the voicerecognition commands, and a timeout command. CREATE A SET OF CUSTOM MENU ITEMS Each menu item choice defined in SDLChoice should be assigned a unique id. The choice set in SDLCreateInteractionChoiceSet should also have its own unique id. OBJECTIVE-C SDLChoice* choice = [[SDLChoice alloc] initwithid:<#unique Id#> menuname:@"<#menu Title#>" vrcommands:@[@"<#menu Commands#>"]]; SDLCreateInteractionChoiceSet* createrequest = [[ SDLCreateInteractionChoiceSet alloc] initwithid:<#unique Id# > choiceset:@[choice]]; [self.sdlmanager sendrequest:createrequest withresponsehandler:^(sdlrpcrequest *request, SDLRPCResponse *response, NSError *error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The request was successful, now send the SDLPerformInteraction RPC ];

69 SWIFT let choice = SDLChoice(id: <#Unique Id#>, menuname: "<#Menu Title#>", vrcommands: ["<#Menu Command#>"])! let createrequest = SDLCreateInteractionChoiceSet(id: <# Unique Id#>, choiceset: [choice])! sdlmanager.send(createrequest) { (request, response, error) in if response?.resultcode ==.success() { // The request was successful, now send the SDLPerformInteraction RPC FORMAT THE SET OF CUSTOM MENU ITEMS Once the set of menu items has been sent to SDL Core, send a SDLPerformInteraction RPC to get the items to show up on the HMI screen.

70 OBJECTIVE-C SDLPerformInteraction* performinteraction = [[ SDLPerformInteraction alloc] initwithinitialprompt:nil initialtext:@"<#text Displayed When Shown#>" interactionchoicesetid:<#sdlcreateinteractionchoiceset id#> ]; SWIFT let performinteraction = SDLPerformInteraction(initialPrompt : nil, initialtext: "<#Text Displayed When Shown#>", interactionchoicesetid: <#SDLCreateInteractionChoiceSet id#> )! INTERACTION MODE The interaction mode specifies the way the user is prompted to make a section and the way in which the user s selection is recorded.

71 I N T E R A C T I O N M O D E D E S C R I P T I O N Manual only Interactions occur only through the display VR only Interactions occur only through text-to-speech and voice recognition Both Interactions can occur both manually or through VR OBJECTIVE-C performinteraction.interactionmode = SDLInteractionMode. MANUAL_ONLY; SWIFT performinteraction.interactionmode =.manual_only() VR INTERACTION MODE

72 F O R D H M I MANUAL INTERACTION MODE

73 F O R D H M I INTERACTION L AYOUT The items in the perform interaction can be shown as a grid of buttons (with optional images) or as a list of choices.

74 L AY O U T M O D E F O R M AT T I N G D E S C R I P T I O N Icon only A grid of buttons with images Icon with search A grid of buttons with images along with a search field in the HMI List only A vertical list of text List with search A vertical list of text with a search field in the HMI Keyboard A keyboard shows up immediately in the HMI N O T E Keyboard is currently only supported for the navigation app type. OBJECTIVE-C performinteraction.interactionlayout = SDLLayoutMode. LIST_ONLY;

75 SWIFT performinteraction.interactionlayout =.list_only() ICON ONLY INTERACTION L AYOUT F O R D H M I LIST ONLY INTERACTION L AYOUT

76 F O R D H M I LIST WITH SEARCH INTERACTION L AYOUT F O R D H M I

77 TEXT-TO -SPEECH (TTS) A text-to-speech chunk is a text phrase or prerecorded sound that will be spoken by the head unit. The text parameter specifies the text to be spoken or the name of the pre-recorded sound. Use the type parameter to define the type of information in the text parameter. The SDLPerformInteraction request can have a initial, timeout, and a help prompt. OBJECTIVE-C SDLTTSChunk* ttschunk = [[SDLTTSChunk alloc] to Speak#>" type:sdlspeechcapabilities.text]; performinteraction.initialprompt = [NSMutableArray arraywithobject:ttschunk]; // or - more easily performinteraction.initialprompt = [SDLTTSChunk textchunksfromstring:@"<#text to Speak#>"];

78 SWIFT let ttschunk = SDLTTSChunk(text: "<#Text to Speak#>", type:.text()) performinteraction.initialprompt = NSMutableArray(array: [ prompt!]) // or - more easily performinteraction.initialprompt = SDLTTSChunk.textChunks( from: "<#Text to Speak#>") TIMEOUT The timeout parameter defines the amount of time the menu will appear on the screen before the menu is dismissed automatically by the HMI. OBJECTIVE-C performinteraction.timeout // 30 seconds

79 SWIFT performinteraction.timeout = // 30 seconds SEND THE REQUEST OBJECTIVE-C [self.sdlmanager sendrequest:performinteraction withresponsehandler:^(sdlrpcrequest *request, SDLRPCResponse *response, NSError *error) { if (![response iskindofclass: SDLPerformInteractionResponse.class]) { return; SDLPerformInteractionResponse* performinteractionresponse = (SDLPerformInteractionResponse* )response; if ([performinteractionresponse.resultcode isequaltoenum :SDLResult.TIMED_OUT]) { // The custom menu timed out before the user could select an item else if ([performinteractionresponse.resultcode isequaltoenum:sdlresult.success]) { NSNumber* choiceid = performinteractionresponse. choiceid; // The user selected an item in the custom menu ];

80 SWIFT sdlmanager.send(performinteraction) { (request, response, error) in guard let performinteractionresponse = response as? SDLPerformInteractionResponse else { return; // Wait for user's selection or for timeout if performinteractionresponse.resultcode ==.timed_out() { // The custom menu timed out before the user could select an item else if performinteractionresponse.resultcode ==. success() { let choiceid = performinteractionresponse.choiceid // The user selected an item in the custom menu DELETE THE CUSTOM MENU If the information in the menu is dynamic, then the old interaction choice set needs to be deleted with a SDLDeleteInteractionChoiceSet RPC before the

81 new information can be added to the menu. Use the interaction choice set id to delete the menu. OBJECTIVE-C SDLDeleteInteractionChoiceSet* deleterequest = [[ SDLDeleteInteractionChoiceSet alloc] initwithid:<# SDLCreateInteractionChoiceSet id#>]; [self.sdlmanager sendrequest:deleterequest withresponsehandler:^(sdlrpcrequest *request, SDLRPCResponse *response, NSError *error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // The custom menu was deleted successfully ]; SWIFT let deleterequest = SDLDeleteInteractionChoiceSet(id: <# SDLCreateInteractionChoiceSet id#>)! sdlmanager.send(deleterequest) { (request, response, error) in if response?.resultcode ==.success() { // The custom menu was deleted successfully

82 Alerts An alert is a pop-up window with some lines of text and optional soft buttons. When an alert is activated, it will abort any SDL operation that is in-progress, except the already-in-progress alert. If an alert is issued while another alert is still in progress, the newest alert will simply be ignored. Dismissing the Alert The alert will persist on the screen until the timeout has elapsed, or the user dismisses the alert by selecting a button. There is no way to dismiss the alert programmatically other than to set the timeout length. Alert UI Depending the platform, an alert can have up to three lines of text, a progress indicator (e.g. a spinning wheel or hourglass), and up to four soft buttons. ALERT WITHOUT SOFT BUTTONS

83 F O R D H M I ALERT WITH SOFT BUTTONS F O R D H M I Alert TTS The alert can also be formatted to speak a prompt when the alert appears on the screen. Do this by setting the ttschunks parameter. To play the alert tone before the text-to-speech is spoken, set playtone to true.

84 Example OBJECTIVE-C

85 SDLAlert *alert = [[SDLAlert alloc] 1#>" alerttext2:@"<#line 2#>" alerttext3:@"<#line 3#>"]; // Maximum time alert appears before being dismissed // Timeouts are must be between 3-10 seconds // Timeouts may not work when soft buttons are also used in the alert alert.duration // A progress indicator (e.g. spinning wheel or hourglass) // Not all head units support the progress indicator alert.progressindicator // Text-to-speech alert.ttschunks = [SDLTTSChunk to speak#>"]; // Special tone played before the tts is spoken alert.playtone // Soft buttons SDLSoftButton *okbutton = [[SDLSoftButton alloc] init]; okbutton.text okbutton.type = SDLSoftButtonType.TEXT; okbutton.softbuttonid Button Id#>; okbutton.handler = ^(SDLRPCNotification *notification) { if (![notification iskindofclass:sdlonbuttonpress.class ]) { return; SDLOnButtonPress *onbuttonpress = (SDLOnButtonPress*) notification; NSNumber *buttonid = onbuttonpress.custombuttonid; // create a custom action for the selected button ; alert.softbuttons = [NSMutableArray arraywithobject:okbutton ]; // Send the alert [self.sdlmanager sendrequest:alert withresponsehandler:^( SDLRPCRequest *request, SDLRPCResponse *response, NSError * error) { if ([response.resultcode isequaltoenum:sdlresult.success ]) { // alert was dismissed successfully ];

86 SWIFT let alert = SDLAlert(alertText1: "<#Line 1#>", alerttext2: "<#Line 2#>", alerttext3: "<#Line 3#>")! // Maximum time alert appears before being dismissed // Timeouts are must be between 3-10 seconds // Timeouts may not work when soft buttons are also used in the alert alert.duration = 5000 // A progress indicator (e.g. spinning wheel or hourglass) // Not all head units support the progress indicator alert.progressindicator = true // Text-to-speech alert.ttschunks = SDLTTSChunk.textChunks(from: "<#Text to speak#>") // Special tone played before the tts is spoken alert.playtone = true // Soft buttons let okbutton = SDLSoftButton()! okbutton.text = "OK" okbutton.type =.text() okbutton.softbuttonid = <#Soft Button Id#> okbutton.handler = { (notification) in guard let notification = notification as? SDLOnButtonPress else { return guard let id = notification.custombuttonid else { return // create a custom action for the selected button alert.softbuttons = [okbutton] // Send the alert sdlmanager.send(alert) { (request, response, error) in if response?.resultcode ==.success() { // alert was dismissed successfully

87 Uploading Files and Graphics Graphics allows for you to better customize what you would like to have your users see, and provide a better User Interface. To learn how to use these graphics once they are uploaded, please see Displaying Information > Text, Images, and Buttons. When developing an application using SmartDeviceLink, two things must always be remembered when using graphics: 1. You may be connected to a head unit that does not display graphics. 2. You must upload them from your mobile device to Core before using them. Detecting if Graphics are Supported Being able to know if graphics are supported is a very important feature of your application, as this avoids you uploading unneccessary images to the head unit. In order to see if graphics are supported, take a look at SDLManager 's registerresponse property once in the completion handler for startwithreadyhandler. N O T E If you need to know how to create and setup SDLManager, please see Getting Started > Integration Basics.

88 OBJECTIVE-C weak typeof (self) weakself = self; [self.sdlmanager startwithreadyhandler:^(bool success, NSError * _Nullable error) { if (!success) { NSLog(@"SDL errored starting up: %@", error); return; SDLDisplayCapabilities *displaycapabilities = weakself. sdlmanager.registerresponse.displaycapabilities; BOOL aregraphicssupported = NO; if (displaycapabilities!= nil) { aregraphicssupported = displaycapabilities. graphicsupported.boolvalue; ];

89 SWIFT sdlmanager.start { (success, error) in if success == false { print("sdl errored starting up: \(error)") return var aregraphicssupported = false if let displaycapabilities = self.sdlmanager. registerresponse?.displaycapabilities { aregraphicssupported = displaycapabilities. graphicsupported.boolvalue Uploading a File using SDLFileManager As of SDL 4.3, we have provided a class that makes managing files easier. SDLFileManager handles uploading files, like images, and keeping track of what already exists and what does not. To assist, there are two classes: SDLFile and SDLArtwork. SDLFile is the base class for file uploads and handles pulling data from local NSURL s and NSData. SDLArtwork is subclass

90 of this, and provides additional functionality such as creating a file from a UIImage. OBJECTIVE-C UIImage* image = [UIImage imagenamed:@"<#image Name#>"]; if (!image) { NSLog(@"Error reading from Assets"); return; SDLArtwork* file = [SDLArtwork artworkwithimage:image to Upload As#>" asimageformat: SDLArtworkImageFormatJPG /* or SDLArtworkImageFormatPNG */]; [self.sdlmanager.filemanager uploadfile:file completionhandler:^(bool success, NSUInteger bytesavailable, NSError * _Nullable error) { if (error) { if (error.code == SDLFileManagerErrorCannotOverwrite ) { // Attempting to replace a file, but failed due to settings in SDLArtwork. else { // Error uploading return; ]; // Successfully uploaded.

91 SWIFT guard let image = UIImage(named: "<#Image Name#>") else { print("error reading from Assets") return let file = SDLArtwork.artwork(with: image, name: "<#Name to Upload As#>", as:.jpg /* or.png */) sdlmanager.filemanager.uploadfile(file) { (success, bytesavailable, error) in if let error = error as? NSError { if error.code == SDLFileManagerError.cannotOverwrite.rawValue { // Attempting to replace a file, but failed due to settings in SDLArtwork. else { // Error uploading return; // Successfully uploaded File Naming The file name can only consist of letters (a-z) and numbers (0-9), otherwise the SDL Core may fail to find the uploaded file (even if it was uploaded successfully). File Persistance SDLFile, and it's subclass SDLArtwork, support uploading persistant images, i.e. images that do not become deleted when your application

92 disconnects. Persistance should be used for images relating to your UI, and not for dynamic aspects, such as Album Artwork. OBJECTIVE-C file.persistent = YES; SWIFT file.persistent = true N O T E Be aware that persistance will not work if space on the head unit is limited. SDLFileManager will always handle uploading images if they are non-existant.

93 Overwrite Stored Files If a file being uploaded has the same name as an already uploaded image, the new image will be ignored. To override this setting, set the SDLFile s overwrite property to true. OBJECTIVE-C file.overwrite = YES; SWIFT file.overwrite = true Check the Amount of File Storage To find the amount of file storage left on the head unit, use the SDLFileManager s bytesavailable property.

94 OBJECTIVE-C NSUInteger bytesavailable = self.sdlmanager.filemanager. bytesavailable; SWIFT let bytesavailable = sdlmanager.filemanager.bytesavailable Check if a File Has Already Been Uploaded Although the file manager will return with an error if you attempt to upload a file of the same name that already exists, you may still be able to find out the

95 currently uploaded images via SDLFileManager 's remotefilenames property. OBJECTIVE-C BOOL isfileonheadunit = [self.sdlmanager.filemanager. remotefilenames containsobject:@"<#name Uploaded As#>"]; SWIFT let isfileonheadunit = sdlmanager.filemanager. remotefilenames.contains("<#name Uploaded As#>") Delete Stored Files Use the file manager s delete request to delete a file associated with a file name.

96 OBJECTIVE-C [self.sdlmanager.filemanager As Name#>" completionhandler:^(bool success, NSUInteger bytesavailable, NSError *error) { if (success) { // Image was deleted successfully ]; SWIFT sdlmanager.filemanager.deleteremotefilewithname("<#save As Name#>") { (success, bytesavailable, error) in if success { // Image was deleted successfully

97 Image Specifics Image File Type Images may be formatted as PNG, JPEG, or BMP. Check the displaycapability properties to find out what image formats the head unit supports. Image Sizes If an image is uploaded that is larger than the supported size, that image will be scaled down to accomodate. All image sizes are available from the

98 SDLManager 's registerresponse property once in the completion handler for startwithreadyhandler.

99 IMAGE SPECIFICATIONS

100 I M A G E N A M E U S E D I N R P C D E TA I L S H E I G H T W I D T H T Y P E softbu ttonim age Show Will be shown on softbutt ons on the base screen 70px 70px png, jpg, bmp choice Image CreateI nteracti onchoic eset Will be shown in the manual part of an perform Interact ion either big (ICON_ ONLY) or small (LIST_O NLY) 70px 70px png, jpg, bmp choice Secon daryi mage CreateI nteracti onchoic eset Will be shown on the right side of an entry in (LIST_O NLY) perform Interact ion 35px 35px png, jpg, bmp vrhelp Item SetGlob alprope rties Will be shown during voice interact ion 35px 35px png, jpg, bmp

101 I M A G E N A M E U S E D I N R P C D E TA I L S H E I G H T W I D T H T Y P E menui con SetGlob alprope rties Will be shown on the More button 35px 35px png, jpg, bmp cmdic on AddCo mmand Will be shown for comma nds in the "More " menu 35px 35px png, jpg, bmp appic on SetAppI con Will be shown as Icon in the "Mobile Apps" menu 70px 70px png, jpg, bmp graphi c Show Will be shown on the basescr een as cover art 185px 185px png, jpg, bmp Knowing the In-Car UI Status Once your app is connected to Core, most of the interaction you will be doing requires knowledge of the current In-Car UI, or HMI, Status. For a refresher on how to get your app integrated with SDL, and to connect to Core, head to

102 Getting Started > Integration Basics. The HMI Status informs you of where the user is within the head unit in a general sense. Refer to the table below of all possible HMI States: H M I S TAT E W H AT D O E S T H I S M E A N? NONE The user has not been opened your app, or it has been Exited via the "Menu" button. BACKGROUND The user has opened your app, but is currently in another part of the Head Unit. If you have a Media app, this means that another Media app has been selected. LIMITED For Media apps, this means that a user has opened your app, but is in another part of the Head Unit. FULL Your app is currently in focus on the screen. Monitoring HMI Status Monitoring HMI Status is provided through a required delegate callback of SDLManagerDelegate. The function hmilevel:didchangetolevel: will give

103 you information relating the previous and new HMI levels your app is progressing through. OBJECTIVE-C - (void)hmilevel:(sdlhmilevel *)hmilevel didchangetonewlevel:(sdlhmilevel *)newlevel { SWIFT func hmilevel(_ oldlevel: SDLHMILevel, didchangeto newlevel: SDLHMILevel) { More Detailed HMI Information When an interaction occurs relating to your application, there is some additional pieces of information that can be observed that help figure out a more descriptive picture of what is going on with the Head Unit.

104 AUDIO STREAMING STATE From the documentation, Audio Streaming State informs your app whether any currently streaming audio is audible to user (AUDIBLE) or not (NOT_AUDIBLE). A value of NOT_AUDIBLE means that either the application's audio will not be audible to the user, or that the application's audio should not be audible to the user (i.e. some other application on the mobile device may be streaming audio and the application's audio would be blended with that other audio). You will see this come in for things such as Alert, PerformAudioPassThru, Speaks, etc. A U D I O S T R E A M I N G S TAT E W H AT D O E S T H I S M E A N? AUDIBLE Any audio you are streaming will be audible to the user. ATTENUATED Some kind of audio mixing is occuring between what you are streaming, if anything, and some system level sound. This can be visible is displaying an Alert with playtone set to true. NOT_AUDIBLE Your streaming audio is not audible. This could occur during a VRSESSSION System Context. SYSTEM CONTEXT System Context informs your app if there is potentially a blocking HMI component while your app is still visible. An example of this would be if your

105 application is open, and you display an Alert. Your app will receive a System Context of ALERT while it is presented on the screen, followed by MAIN when it is dismissed. S Y S T E M C O N T E X T S TAT E W H AT D O E S T H I S M E A N? MAIN No user interaction is in progress that could be blocking your app's visibility. VRSESSION Voice Recognition is currently in progress. MENU A menu interaction is currently in-progress. HMI_OBSCURED The app's display HMI is being blocked by either a system or other app's overlay (another app's Alert, for instance). ALERT An alert that you have sent is currently visible (Other apps will not receive this). Monitoring Audio Streaming State and System Context Monitoring these two properties is quite easy using the provided SDLDidChangeHMIStatusNotification notification. First, observe the notification:

106 OBJECTIVE-C [[NSNotificationCenter defaultcenter] addobserver:self name: SDLDidChangeHMIStatusNotification object:nil]; SWIFT NotificationCenter.default.addObserver(self, selector: # selector(hmistatuschanged(_:)), name:.sdldidchangehmistatus, object: nil) Next, handle the notification:

107 OBJECTIVE-C - (void)hmistatuschanged:(sdlrpcnotificationnotification *) notification { if (![notification.notification iskindofclass: SDLOnHMIStatus.class]) { return; SDLOnHMIStatus *onhmistatus = (SDLOnHMIStatus *) notification.notification; SDLAudioStreamingState *audiostreamingstate = onhmistatus.audiostreamingstate; SDLSystemContext *systemcontext = onhmistatus. systemcontext; SWIFT func hmistatuschanged(_ notification: SDLRPCNotificationNotification) { guard let onhmistatus = notification.notification as? SDLOnHMIStatus else { return let audiostreamingstate = onhmistatus. audiostreamingstate let systemcontext = onhmistatus.systemcontext

108 Adding the Lock Screen The lock screen is a vital part of SmartDeviceLink, as this does not allow the user to use your application while the vehicle is in motion. Prior to SDL 4.3, creating and maintaining the lock screen was up to the developer to do. Now, SDL takes care of the lock screen for you. It still allows you to use your own view controller if you prefer your own look, but still want the recommended logic that SDL provides for free. A benefit to using the provided Lock Screen, is that we also handle support for retrieving a lock screen icon for versions of Core that support it, so that you do not have to be concerned with what car manufacturer you are connected to. If you would not like to use any of the following code, you may use the SDLLockScreenConfiguration class function disabledconfiguration, and manage the entire lifecycle of the lock screen yourself. To see where the SDLLockScreenConfiguration is used, refer to the Getting Started > Integration Basics. Using the Provided Lock Screen Using the default lock screen is simple. Using the lock screen this way will automatically load an automaker's logo, if supported, to show alongside your logo. If it is not, the default lock screen will show your logo alone.

109 To do this, instantiate a new SDLLockScreenConfiguration : OBJECTIVE-C SDLLockScreenConfiguration *lockscreenconfiguration = [ SDLLockScreenConfiguration enabledconfiguration]; Swift let lockscreenconfiguration = SDLLockScreenConfiguration. enabled()

110 Customizing the Provided Lock Screen If you would like to use the provided lock screen, however would like to add your own appearance to it, we provide that as well. SDLLockScreenConfiguration allows you to customize the background color as well as your app's icon. If the app icon is not included, we will use the SDL logo. OBJECTIVE-C UIImage *appicon = <# Retreive App Icon #> UIColor *backgroundcolor = <# Desired Background Color #> SDLLockScreenConfiguration *lockscreenconfiguration = [ SDLLockScreenConfiguration enabledconfigurationwithappicon: appicon backgroundcolor:backgroundcolor];

111 SWIFT let appicon = <# Retrieve App Icon #> let backgroundcolor = <# Desired Background Color #> let lockscreenconfiguration = SDLLockScreenConfiguration. enabledconfiguration(withappicon: appicon, backgroundcolor: backgroundcolor) Using Your Own Lock Screen If you would like to use your own lock screen instead of the provided SDL one, but still use the logic we provide, you can use a new initializer within SDLLockScreenConfiguration : OBJECTIVE-C UIViewController *lockscreenviewcontroller = <# Initialize Your View Controller #>; SDLLockScreenConfiguration *lockscreenconfiguration = [ SDLLockScreenConfiguration enabledconfigurationwithviewcontroller: lockscreenviewcontroller];

112 SWIFT let lockscreenviewcontroller = <# Initialize Your View Controller #> let lockscreenconfiguration = SDLLockScreenConfiguration. enabledconfiguration(with: lockscreenviewcontroller) Retrieving Make and Model If you have decided to create your own lock screen, a best practice is to display the OEM you are connect to's logo, as this adds a more personal touch for the end user. OBJECTIVE-C weak typeof (self) weakself = self; [self.sdlmanager startwithreadyhandler:^(bool success, NSError * _Nullable error) { if (!success) { NSLog(@"SDL errored starting up: %@", error); return; SDLVehicleType *vehicletype = weakself.sdlmanager. registerresponse.vehicletype; NSString *make = vehicletype.make; NSString *model = vehicletype.model; ];

113 SWIFT sdlmanager.start { (success, error) in if success == false { print("sdl errored starting up: \(error)") return guard let vehicletype = self.sdlmanager.registerresponse?.vehicletype, let make = vehicletype.make, let model = vehicletype.model else { // No make/model found. return Retrieving Lock Screen URL A newer feature that some OEMs may adapt is the ability for the head unit to provide SDLManager a URL for a logo to display on the Lock Screen. If you are creating your own lock screen, it is a best practice to utilize this feature. This notifcation comes through after we have downloaded the icon for you, and sent it in the SDLDidReceiveLockScreenIcon notification. First, register for the SDLDidReceiveLockScreenIcon Notification:

114 OBJECTIVE-C [[NSNotificationCenter defaultcenter] addobserver:self name: SDLDidReceiveLockScreenIcon object:nil]; SWIFT NotificationCenter.default.addObserver(self, selector: # selector(lockscreeniconreceived(_:)), name: SDLDidReceiveLockScreenIcon, object: nil) Then, act on the notification:

115 OBJECTIVE-C - (void)lockscreeniconreceived:(nsnotification *) notification { if (![notification.userinfo[ SDLNotificationUserInfoObject] iskindofclass:[uiimage class ]]) { return; UIImage *icon = notification.userinfo[ SDLNotificationUserInfoObject]; SWIFT func lockscreeniconreceived(_ notification: NSNotification) { guard let image = notification.userinfo[ SDLNotificationUserInfoObject] as? UIImage else { return

116 Get Vehicle Data Use the SDLGetVehicleData RPC call to get vehicle data. The HMI level must be FULL, LIMITED, or BACKGROUND in order to get data. Each vehicle manufacturer decides which data it will expose. Please check the SDLRPCResponse RPC to find out which data you will have access to in your head unit. N O T E You may only ask for vehicle data that is available to your appname & appid combination. These will be specified by each OEM separately.

117 V E H I C L E D ATA PA R A M E T E R N A M E D E S C R I P T I O N GPS gps Longitude and latitude, current time in UTC, degree of precision, altitude, heading, speed, satellite data vs dead reckoning, and supported dimensions of the GPS Speed speed Speed in KPH RPM rpm The number of revolutions per minute of the engine Fuel level fuellevel The fuel level in the tank (percentage) Fuel level state fuellevel_state The fuel level state: unknown, normal, low, fault, alert, or not supported Instant fuel consumption instantfuelconsumpt ion The instantaneous fuel consumption in microlitres External temperature externaltemperature The external temperature in degrees celsius VIN vin The Vehicle Identification Number

118 V E H I C L E D ATA PA R A M E T E R N A M E D E S C R I P T I O N PRNDL prndl The selected gear the car is in: park, reverse, neutral, drive, sport, low gear, first, second, third, fourth, fifth, sixth, seventh or eighth gear, unknown, or fault Tire pressure tirepressure Tire status of each wheel in the vehicle: normal, low, fault, alert, or not supported. Warning light status for the tire pressure: off, on, flash, or not used Odometer odometer Odometer reading in km Belt status beltstatus The status of each of the seat belts: no, yes, not supported, fault, or no event Body information bodyinformation Door ajar status for each door. The Ignition status. The ignition stable status. The park brake active status.

119 V E H I C L E D ATA PA R A M E T E R N A M E D E S C R I P T I O N Device status devicestatus Contains information about the smartphone device. Is voice recognition on or off, has a bluetooth connection been established, is a call active, is the phone in roaming mode, is a text message available, the battery level, the status of the mono and stereo output channels, the signal level, the primary audio source, whether or not an emergency call is currently taking place Driver braking driverbraking The status of the brake pedal: yes, no, no event, fault, not supported Wiper status wiperstatus The status of the wipers: off, automatic off, off moving, manual interaction off, manual interaction on, manual low, manual high, manual flick, wash, automatic low, automatic high, courtesy wipe, automatic adjust, stalled, no data exists

120 V E H I C L E D ATA PA R A M E T E R N A M E D E S C R I P T I O N Head lamp status headlampstatus Status of the head lamps: whether or not the low and high beams are on or off. The ambient light sensor status: night, twilight 1, twilight 2, twilight 3, twilight 4, day, unknown, invalid Engine torque enginetorque Torque value for engine (in Nm) on non-diesel variants Acceleration pedal position accpedalposition Accelerator pedal position (percentage depressed) Steering wheel angle steeringwheelangle Current angle of the steering wheel (in degrees) E-Call infomation ecallinfo Information about the status of an emergency call Airbag status airbagstatus Status of each of the airbags in the vehicle: yes, no, no event, not supported, fault

121 V E H I C L E D ATA PA R A M E T E R N A M E D E S C R I P T I O N Emergency event emergencyevent The type of emergency: frontal, side, rear, rollover, no event, not supported, fault. Fuel cutoff status: normal operation, fuel is cut off, fault. The roll over status: yes, no, no event, not supported, fault. The maximum change in velocity. Whether or not multiple emergency events have occurred Cluster mode status clustermodestatus Whether or not the power mode is active. The power mode qualification status: power mode undefined, power mode evaluation in progress, not defined, power mode ok. The car mode status: normal, factory, transport, or crash. The power mode status: key out, key recently out, key approved, post accessory, accessory, post ignition, ignition on, running, crank My key mykey Information about whether or not the emergency 911 override has been activated

122 Single Time Vehicle Data Retrieval Using SDLGetVehicleData, we can ask for vehicle data a single time, if needed.

123 OBJECTIVE-C SDLGetVehicleData *getvehicledata = [[SDLGetVehicleData alloc] init]; getvehicledata.prndl [self.sdlmanager sendrequest:getvehicledata withresponsehandler:^( kindof SDLRPCRequest * _Nullable request, kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (error) { NSLog(@"Encountered Error sending GetVehicleData: error); return; if (![response iskindofclass:sdlgetvehicledataresponse. class]) { return; SDLGetVehicleDataResponse* getvehicledataresponse = ( SDLGetVehicleDataResponse *)response; SDLResult *resultcode = getvehicledataresponse. resultcode; if (![resultcode isequaltoenum:sdlresult.success]) { if ([resultcode isequaltoenum:sdlresult.rejected]) { NSLog(@"GetVehicleData was rejected. Are you in an appropriate HMI?"); else if ([resultcode isequaltoenum:sdlresult. DISALLOWED]) { NSLog(@"Your app is not allowed to use GetVehicleData"); else { NSLog(@"Some unknown error has occured!"); return; ]; SDLPRNDL *prndl = getvehicledataresponse.prndl;

124 SWIFT let getvehicledata = SDLGetVehicleData()! getvehicledata.prndl = true sdlmanager.send(getvehicledata) { (request, response, error) in guard let response = response as? SDLGetVehicleDataResponse, let resultcode = response.resultcode else { return if let error = error { print("encountered Error sending GetVehicleData: \( error)") return if!resultcode.isequal(to: SDLResult.success()) { if resultcode.isequal(to: SDLResult.rejected()) { print("getvehicledata was rejected. Are you in an appropriate HMI?") else if resultcode.isequal(to: SDLResult. disallowed()) { print("your app is not allowed to use GetVehicleData") else { print("some unknown error has occured!") return let prndl = response.prndl

125 Subscribing to Vehicle Data Subscribing to vehicle data allows you to get notified whenever we have new data available. This data should not be relied upon being received in a consistent manner. New vehicle data is available roughly every second. First, Register to observe the SDLDidReceiveVehicleDataNotification notification: OBJECTIVE-C [[NSNotificationCenter defaultcenter] addobserver:self selector:@selector(vehicledataavailable:) name: SDLDidReceiveVehicleDataNotification object:nil]; SWIFT NotificationCenter.default.addObserver(self, selector: # selector(vehicledataavailable(_:)), name:. SDLDidReceiveVehicleData, object: nil) Then. Send the Subscribe Vehicle Data Request

126 OBJECTIVE-C

127 SDLSubscribeVehicleData *subscribevehicledata = [[ SDLSubscribeVehicleData alloc] init]; subscribevehicledata.prndl [self.sdlmanager sendrequest:subscribevehicledata withresponsehandler:^( kindof SDLRPCRequest * _Nullable request, kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (![response iskindofclass:[ SDLSubscribeVehicleDataResponse class]]) { return; if (!response.success.boolvalue) { SDLSubscribeVehicleDataResponse * subscribevehicledataresponse = ( SDLSubscribeVehicleDataResponse*)response; SDLVehicleDataResult *prndldata = subscribevehicledataresponse.prndl; if ([response.resultcode isequaltoenum:sdlresult. DISALLOWED]) { // Not allowed to register for this vehicle data. else if ([response.resultcode isequaltoenum: SDLResult.USER_DISALLOWED]) { // User disabled the ability to give you this vehicle data else if ([response.resultcode isequaltoenum: SDLResult.IGNORED]) { if ([prndldata.resultcode isequaltoenum: SDLVehicleDataResultCode.DATA_ALREADY_SUBSCRIBED]) { // You have access to this data item, and you are already subscribed to this item so we are ignoring. else if ([prndldata.resultcode isequaltoenum: SDLVehicleDataResultCode.VEHICLE_DATA_NOT_AVAILABLE]) { // You have access to this data item, but the vehicle you are connected to does not provide it. else { NSLog(@"Unknown reason for being ignored: prndldata.resultcode.value); else if (error) { NSLog(@"Encountered Error sending SubscribeVehicleData: %@", error);

128 return; if (![response iskindofclass: SDLSubscribeVehicleDataResponse.class]) { return; ]; // Successfully subscribed

129 SWIFT

130 let subscribevehicledata = SDLGetVehicleData()! subscribevehicledata.prndl = true sdlmanager.send(subscribevehicledata) { (request, response, error) in guard let response = response as? SDLSubscribeVehicleDataResponse else { return guard response.success.boolvalue == true else { if response.resultcode.isequal(to: SDLResult. disallowed()) { // Not allowed to register for this vehicle data. else if response.resultcode.isequal(to: SDLResult. user_disallowed()) { // User disabled the ability to give you this vehicle data else if response.resultcode.isequal(to: SDLResult. ignored()) { if let prndldata = response.prndl { if prndldata.resultcode.isequal(to: SDLVehicleDataResultCode.data_ALREADY_SUBSCRIBED()) { // You have access to this data item, and you are already subscribed to this item so we are ignoring. else if prndldata.resultcode.isequal(to: SDLVehicleDataResultCode.vehicle_DATA_NOT_AVAILABLE()) { // You have access to this data item, but the vehicle you are connected to does not provide it. else { print("unknown reason for being ignored: \(prndldata.resultcode.value)") else { print("unknown reason for being ignored: \( response.info)") else if let error = error { print("encountered Error sending SubscribeVehicleData: \(error)") return // Successfully subscribed

131 Finally, react to notification when Vehicle Data is received: OBJECTIVE-C - (void)vehicledataavailable:(sdlrpcnotificationnotification *)notification { if (![notification.notification iskindofclass: SDLOnVehicleData.class]) { return; SDLOnVehicleData *onvehicledata = (SDLOnVehicleData *) notification.notification; SDLPRNDL *prndl = onvehicledata.prndl; SWIFT func vehicledataavailable(_ notification: SDLRPCNotificationNotification) { guard let onvehicledata = notification.notification as? SDLOnVehicleData else { return let prndl = onvehicledata.prndl

132 Unsubscribing from Vehicle Data Sometimes you may not always need all of the vehicle data you are listening to. We suggest that you only are subscribing when the vehicle data is needed.

133 To stop listening to specific vehicle data items, utilize SDLUnsubscribeVehicleData.

134 OBJECTIVE-C

135 SDLUnsubscribeVehicleData *unsubscribevehicledata = [[ SDLUnsubscribeVehicleData alloc] init]; unsubscribevehicledata.prndl [self.sdlmanager sendrequest:unsubscribevehicledata withresponsehandler:^( kindof SDLRPCRequest * _Nullable request, kindof SDLRPCResponse * _Nullable response, NSError * _Nullable error) { if (![response iskindofclass:[ SDLUnsubscribeVehicleDataResponse class]]) { return; if (!response.success.boolvalue) { SDLUnsubscribeVehicleDataResponse * unsubscribevehicledataresponse = ( SDLUnsubscribeVehicleDataResponse*)response; SDLVehicleDataResult *prndldata = unsubscribevehicledataresponse.prndl; if ([response.resultcode isequaltoenum:sdlresult. DISALLOWED]) { // Not allowed to register for this vehicle data, so unsubscribe also will not work. else if ([response.resultcode isequaltoenum: SDLResult.USER_DISALLOWED]) { // User disabled the ability to give you this vehicle data, so unsubscribe also will not work. else if ([response.resultcode isequaltoenum: SDLResult.IGNORED]) { if ([prndldata.resultcode isequaltoenum: SDLVehicleDataResultCode.DATA_NOT_SUBSCRIBED]) { // You have access to this data item, but it was never subscribed to so we ignored it. else { NSLog(@"Unknown reason for being ignored: prndldata.resultcode.value); else if (error) { NSLog(@"Encountered Error sending UnsubscribeVehicleData: %@", error); return; ]; // Successfully unsubscribed

136 SWIFT

137 let unsubscribevehicledata = SDLUnsubscribeVehicleData()! unsubscribevehicledata.prndl = true sdlmanager.send(unsubscribevehicledata) { (request, response, error) in guard let response = response as? SDLUnsubscribeVehicleDataResponse else { return guard response.success == true else { if response.resultcode.isequal(to: SDLResult. disallowed()) { else if response.resultcode.isequal(to: SDLResult. user_disallowed()) { else if response.resultcode.isequal(to: SDLResult. ignored()) { if let prndldata = response.prndl { if prndldata.resultcode.isequal(to: SDLVehicleDataResultCode.data_ALREADY_SUBSCRIBED()) { // You have access to this data item, and you are already unsubscribed to this item so we are ignoring. else if prndldata.resultcode.isequal(to: SDLVehicleDataResultCode.vehicle_DATA_NOT_AVAILABLE()) { // You have access to this data item, but the vehicle you are connected to does not provide it. else { print("unknown reason for being ignored: \(prndldata.resultcode.value)") else { print("unknown reason for being ignored: \( response.info)") else if let error = error { print("encountered Error sending UnsubscribeVehicleData: \(error)") return // Successfully unsubscribed

138 Getting In-Car Audio Capturing in-car audio allows developers to interact with users via raw audio data provided to them from the car's microphones. In order to gather the raw audio from the vehicle, we must leverage the SDLPerformAudioPassThru RPC. N O T E PerformAudioPassThru does not support automatic speech cancellation detection, so if this feature is desired, it is up to the developer to implement. Starting Audio Capture To initiate audio capture, we must construct an SDLPerformAudioPassThru object. The properties we will set in this object's constructor relate to how we wish to gather the audio data from the vehicle we are connected to.

139 OBJECTIVE-C SDLPerformAudioPassThru *audiopassthru = [[ SDLPerformAudioPassThru alloc] initwithinitialprompt:@"talk to me." audiopassthrudisplaytext1:@"ask me \"What's the weather?\"" audiopassthrudisplaytext2:@"or \"What is 1 + 2? \"" samplingrate:sdlsamplingrate._16khz bitspersample: SDLBitsPerSample._16_BIT audiotype:sdlaudiotype.pcm maxduration: muteaudio:yes]; [self.sdlmanager sendrequest:audiopassthru]; SWIFT let audiopassthru = SDLPerformAudioPassThru(initialPrompt: "Talk to me.", audiopassthrudisplaytext1: "Ask me \"What's the weather?\"", audiopassthrudisplaytext2: "or \"What is 1 + 2?\"", samplingrate:._16khz(), bitspersample:._8_bit(), audiotype:.pcm(), maxduration: , muteaudio: true)! sdlmanager.send(audiopassthru)

140 FORD HMI In order to know the currently supported audio capture capabilities of the connected head unit, please refer to the SDLRegisterAppInterfaceResponse, which contains a property audiopassthrucapabilities. N O T E Currently, Ford's SYNC 3 vehicles only support Sampling Rates of 16 khz and Bit Rates of 16 bit. Gathering Audio Data SDL provides audio data as fast as it can gather it, and sends it to the developer in chunks. In order to retrieve this audio data, the developer must:

Guides ios Document current as of 08/22/ :11 PM. Installation. Install SDL SDK

Guides ios Document current as of 08/22/ :11 PM. Installation. Install SDL SDK Guides ios Document current as of 08/22/2017 05:11 PM. Installation In order to build your app on a SmartDeviceLink (SDL) Core, the SDL software development kit (SDK) must be installed in your app. The

More information

Guides ios Documentation Document current as of 04/03/ :20 PM. Installation. Install SDL SDK

Guides ios Documentation Document current as of 04/03/ :20 PM. Installation. Install SDL SDK Guides ios Documentation Document current as of 04/03/2018 05:20 PM. Installation In order to build your app on a SmartDeviceLink (SDL) Core, the SDL software development kit (SDK) must be installed in

More information

There are three different ways to install the SDL SDK in your project: CocoaPods, Carthage, or manually.

There are three different ways to install the SDL SDK in your project: CocoaPods, Carthage, or manually. Guides ios Documentation Document current as of 07/24/2018 09:35 AM. Installation In order to build your app on a SmartDeviceLink (SDL) Core, the SDL software development kit (SDK) must be installed in

More information

We have provided three different ways to install the SDL SDK in your project: CocoaPods, Carthage, or manually.

We have provided three different ways to install the SDL SDK in your project: CocoaPods, Carthage, or manually. Guides ios Document current as of 12/20/2016 10:19 AM. Installation In order to build your app on a SmartDeviceLink (SDL) Core, the SDL software development kit (SDK) must be installed in your app. The

More information

AppLink Best Practices. Aaron DeGrow Ty Strayer

AppLink Best Practices. Aaron DeGrow Ty Strayer AppLink Best Practices Aaron DeGrow Ty Strayer Static Buttons Soft Buttons Voice Commands 9/19/15 2 Considerations Detecting different displays and graphics support Performance in-vehicle How to best initialize

More information

Guides Best Practices Document current as of 08/22/ :40 PM. Display Information. Display vs Voice. General Guidelines

Guides Best Practices Document current as of 08/22/ :40 PM. Display Information. Display vs Voice. General Guidelines Guides Best Practices Document current as of 08/22/2017 05:40 PM. Display Information Display vs Voice Designing your application on a mobile device is entirely a visual process. However, designing application

More information

Justin Dickow, Product Manager

Justin Dickow, Product Manager Justin Dickow, Product Manager Agenda Features Components Tools Resources An enabler of features SDL itself is not a feature for your customers SDL enables features in the vehicle related to brought-in

More information

Miscellaneous Topics

Miscellaneous Topics Miscellaneous Topics Mobile Application Development in ios School of EECS Washington State University Instructor: Larry Holder Mobile Application Development in ios 1 Outline Renaming Xcode project and

More information

Import the code in the top level sdl_android folder as a module in Android Studio:

Import the code in the top level sdl_android folder as a module in Android Studio: Guides Android Documentation Document current as of 12/22/2017 10:31 AM. Installation SOURCE Download the latest release from GitHub Extract the source code from the archive Import the code in the top

More information

To gain access to the JCenter repository, make sure your app's build.gradle file includes the following:

To gain access to the JCenter repository, make sure your app's build.gradle file includes the following: Android Documentation Document current as of 11/20/2018 03:14 PM. Installation Introduction Each SDL Android library release is published to JCenter. By adding a few lines in their app's gradle script,

More information

Login with Amazon. Getting Started Guide for ios apps

Login with Amazon. Getting Started Guide for ios apps Login with Amazon Getting Started Guide for ios apps Login with Amazon: Getting Started Guide for ios Copyright 2017 Amazon.com, Inc., or its affiliates. All rights reserved. Amazon and the Amazon logo

More information

Please read this manual carefully before you use the unit and save it for future reference.

Please read this manual carefully before you use the unit and save it for future reference. ANDROID STEREO RECEIVER Please read this manual carefully before you use the unit and save it for future reference. Installation Precaution: 1. This unit is designed for using a 12V negative ground system

More information

zuvo User Guide For zuvo -D Speech-Generating Devices Find more resources online:

zuvo User Guide For zuvo -D Speech-Generating Devices Find more resources online: zuvo User Guide TM For zuvo -D Speech-Generating Devices Find more resources online: www.talktometechnologies.com/support/ Table of contents Technical Hardware and features... 2 Speech settings... 3 Take

More information

ios Core Data Example Application

ios Core Data Example Application ios Core Data Example Application The Core Data framework provides an abstract, object oriented interface to database storage within ios applications. This does not require extensive knowledge of database

More information

User Guide PUSH TO TALK PLUS. For Android

User Guide PUSH TO TALK PLUS. For Android User Guide PUSH TO TALK PLUS For Android PUSH TO TALK PLUS For Android Contents Introduction and Key Features...4 PTT+ Calling to Individuals and Groups...4 Supervisory Override...4 Real-Time Presence...4

More information

OVERVIEW AND FUTURE. Joey Grover, Livio SMARTDEVICELINK

OVERVIEW AND FUTURE. Joey Grover, Livio SMARTDEVICELINK OVERVIEW AND FUTURE Joey Grover, Livio SMARTDEVICELINK OVERVIEW WHAT IS SMARTDEVICELINK? SDL connects in-vehicle infotainment systems to smartphone applications A software library is placed on both the

More information

User s Guide. Attainment s. GTN v4.11

User s Guide. Attainment s. GTN v4.11 Attainment s User s Guide A printable PDF of this user guide is available from the Attainment Company website: https://www.attainmentcompany.com/gotalk-now Contents 1 Getting Started with GoTalk NOW 1

More information

User Guide: Sprint Direct Connect Plus - ios. User Guide. Sprint Direct Connect Plus Application. ios. Release 8.3. December 2017.

User Guide: Sprint Direct Connect Plus - ios. User Guide. Sprint Direct Connect Plus Application. ios. Release 8.3. December 2017. User Guide Sprint Direct Connect Plus Application ios Release 8.3 December 2017 Contents 1. Introduction and Key Features... 6 2. Application Installation & Getting Started... 8 Prerequisites... 8 Download...

More information

AUDIO AND CONNECTIVITY

AUDIO AND CONNECTIVITY AUDIO AND CONNECTIVITY Learn how to operate the vehicle s audio system. Basic Audio Operation Connect audio devices and operate buttons and displays for the audio system. USB Port Connect a USB flash drive

More information

Key Features: Be notified of incoming calls, texts, , calendar and social media events with vibration and LED light

Key Features: Be notified of incoming calls, texts,  , calendar and social media events with vibration and LED light Product Overview Congratulations on your purchase of the MARTIAN WATCH! MARTIAN provides you with connectivity to your voice-command-enabled smartphone or tablet via Bluetooth wireless technology. Key

More information

BLUETOOTH is a trademark owned by Bluetooth SIG, Inc, U.S.A. and used by Ford Motor Company under license.

BLUETOOTH is a trademark owned by Bluetooth SIG, Inc, U.S.A. and used by Ford Motor Company under license. Bluetooth Pt 4_final.book Page 1 Friday, January 6, 2006 8:35 AM The information contained in this publication was correct at the time of going to print. In the interest of development the right is reserved

More information

Smart Music Control Application

Smart Music Control Application Smart Music Control Application JVC KENWOOD Corporation 2015 Smart Music Control Application User Guide 2014 JVC KENWOOD Corporation CONTENTS CONTENTS 2 GETTING STARTED 1 Installing Smart Music Control

More information

BE Share. Microsoft Office SharePoint Server 2010 Basic Training Guide

BE Share. Microsoft Office SharePoint Server 2010 Basic Training Guide BE Share Microsoft Office SharePoint Server 2010 Basic Training Guide Site Contributor Table of Contents Table of Contents Connecting From Home... 2 Introduction to BE Share Sites... 3 Navigating SharePoint

More information

The MVC Design Pattern

The MVC Design Pattern The MVC Design Pattern The structure of iphone applications is based on the Model-View-Controller (MVC) design pattern because it benefits object-oriented programs in several ways. MVC based programs tend

More information

IdeaTab A1000L-F. User Guide V1.0. Please read the Important safety and handling information in the supplied manuals before use.

IdeaTab A1000L-F. User Guide V1.0. Please read the Important safety and handling information in the supplied manuals before use. IdeaTab A1000L - UserGuide IdeaTab A1000L-F User Guide V1.0 Please read the Important safety and handling information in the supplied manuals before use. file:///c /Users/xieqy1/Desktop/EN UG/index.html[2013/8/14

More information

AdFalcon ios SDK Developer's Guide. AdFalcon Mobile Ad Network Product of Noqoush Mobile Media Group

AdFalcon ios SDK Developer's Guide. AdFalcon Mobile Ad Network Product of Noqoush Mobile Media Group AdFalcon ios SDK 4.1.0 Developer's Guide AdFalcon Mobile Ad Network Product of Noqoush Mobile Media Group Table of Contents 1 Introduction... 3 Prerequisites... 3 2 Install AdFalcon SDK... 4 2.1 Use CocoaPods

More information

User Guide. Kronodoc Kronodoc Oy. Intelligent methods for process improvement and project execution

User Guide. Kronodoc Kronodoc Oy. Intelligent methods for process improvement and project execution User Guide Kronodoc 3.0 Intelligent methods for process improvement and project execution 2003 Kronodoc Oy 2 Table of Contents 1 User Guide 5 2 Information Structure in Kronodoc 6 3 Entering and Exiting

More information

Mobile Application Programing: ios. Messaging

Mobile Application Programing: ios. Messaging Mobile Application Programing: ios Messaging Application Model View Controller (MVC) Application Controller User Action Update View Notify Update Model Messaging Controller User Action Update Notify Update

More information

User Guide: Sprint Direct Connect Plus Application Kyocera DuraXTP. User Guide. Sprint Direct Connect Plus Kyocera DuraXTP. Release 8.

User Guide: Sprint Direct Connect Plus Application Kyocera DuraXTP. User Guide. Sprint Direct Connect Plus Kyocera DuraXTP. Release 8. User Guide Sprint Direct Connect Plus Kyocera DuraXTP Release 8.1 December 2017 Table of Contents 1. Introduction and Key Features... 5 2. Application Installation & Getting Started... 6 Prerequisites...

More information

NAVIGATION/TELECOMMUNICATION - SERVICE INFORMATION

NAVIGATION/TELECOMMUNICATION - SERVICE INFORMATION 8T - 56 NAVIGATION/TELECOMMUNICATION - SERVICE INFORMATION LX NAVIGATION/TELECOMMUNICATION - SERVICE INFORMATION DESCRIPTION TELECOMMUNICATIONS The hands-free cellular system uses Bluetooth technology

More information

MITSUBISHI MOTORS NORTH AMERICA, INC. SMARTPHONE LINK DISPLAY AUDIO SYSTEM (SDA) QUICK REFERENCE GUIDE FOR ANDROID USERS

MITSUBISHI MOTORS NORTH AMERICA, INC. SMARTPHONE LINK DISPLAY AUDIO SYSTEM (SDA) QUICK REFERENCE GUIDE FOR ANDROID USERS MITSUBISHI MOTORS NORTH AMERICA, INC. SMARTPHONE LINK DISPLAY AUDIO SYSTEM (SDA) QUICK REFERENCE GUIDE FOR ANDROID USERS SMARTPHONE LINK DISPLAY AUDIO SYSTEM (SDA): ANDROID AUTO SMARTPHONE LINK DISPLAY

More information

Enabling Your App for CarPlay

Enabling Your App for CarPlay Session App Frameworks #WWDC17 Enabling Your App for CarPlay 719 Albert Wan, CarPlay Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Premium Auto Attendant USER GUIDE

Premium Auto Attendant USER GUIDE Premium Auto Attendant USER GUIDE CONTENTS 1.0 Introduction 4 2.0 Setting up for the First Time 4 3.0 Working with the Interface 5 3.1 Names and Descriptions 5 3.2 Error Icons 6 4.0 Configuring your Schedule

More information

Thank you for choosing VOYAGER

Thank you for choosing VOYAGER Svenska English Thank you for choosing VOYAGER VOYAGER is a 3G Connected Vehicle Smartphone using software based on Android OS. VOYAGER was created specifically for use in a vehicle. The device was designed

More information

TDS managedip Hosted Unified Communication (UC) User Guide

TDS managedip Hosted Unified Communication (UC) User Guide Installation and Setup To Install the Application: The application is available for both PC and MAC. To download, visit the TDS Support Site at: http://support.tdsmanagedip.com/hosted To log into the Application:

More information

FREQUENTLY ASKED QUESTIONS

FREQUENTLY ASKED QUESTIONS TITLE: Over-the-Air Software Update DOCUMENT DATE: 10-March-2017 BACKGROUND: Just like your smartphone, the Uconnect systems in FCA vehicles work best when they have the latest software available from

More information

lecture 10 UI/UX and Programmatic Design cs : spring 2018

lecture 10 UI/UX and Programmatic Design cs : spring 2018 lecture 10 UI/UX and Programmatic Design cs198-001 : spring 2018 1 Announcements custom app progress form due before lab (~1 minute) will be released after lecture only 2 labs left (both very important)

More information

Models with Display Audio Touchscreen Operation*

Models with Display Audio Touchscreen Operation* Touchscreen Operation* Use simple gestures including touching, swiping, and scrolling to operate certain audio functions. Some items may be grayed out during driving to reduce the potential for distraction.

More information

KENWOOD Remote Application. JVCKENWOOD Corporation. User Guide. Caution: Do not operate any function that takes your attention away from safe driving.

KENWOOD Remote Application. JVCKENWOOD Corporation. User Guide. Caution: Do not operate any function that takes your attention away from safe driving. KENWOOD Remote Application JVCKENWOOD Corporation KENWOOD Remote Application User Guide Caution: Do not operate any function that takes your attention away from safe driving. CONTENTS GETTING STARTED 1

More information

Sprint Direct Connect Now 3.0

Sprint Direct Connect Now 3.0 Sprint Direct Connect Now 3.0 User Guide [UG template version 14c] [Sprint Direct Connect Now 3.0_ug_101914_f1] Table of Contents Introduction to Sprint Direct Connect Now... 1 Before Using Direct Connect...

More information

DSS User Guide. End User Guide. - i -

DSS User Guide. End User Guide. - i - DSS User Guide End User Guide - i - DSS User Guide Table of Contents End User Guide... 1 Table of Contents... 2 Part 1: Getting Started... 1 How to Log in to the Web Portal... 1 How to Manage Account Settings...

More information

SG Project OnePage User Guide

SG Project OnePage User Guide SG Project OnePage User Guide Simple Genius Software November 2012 Document Version 4.0.1 Table of Contents Overview...3 Introduction...3 Data Management...3 Key Concepts...3 12-by-12 Project Management...

More information

Architecting ios Project. Massimo Oliviero

Architecting ios Project. Massimo Oliviero Architecting ios Project Massimo Oliviero Massimo Oliviero Freelance Software Developer web http://www.massimooliviero.net email massimo.oliviero@gmail.com slide http://www.slideshare.net/massimooliviero

More information

Studio 5.5. User Manual

Studio 5.5. User Manual Studio 5.5 User Manual 1 Table of Contents Safety Information... 3 Appearance and Key Function... 4 Introduction... 5 Call Functions... 6 Contacts... 7 Messaging... 8 Internet Browser... 9 Bluetooth...

More information

Documentation for the new Self Admin

Documentation for the new Self Admin Documentation for the new Self Admin The following documentation describes the structure of the new Self Admin site along with the purpose of each site section. The improvements that have been made to

More information

End-User Reference Guide Troy University OU Campus Version 10

End-User Reference Guide Troy University OU Campus Version 10 End-User Reference Guide Troy University OU Campus Version 10 omniupdate.com Table of Contents Table of Contents... 2 Introduction... 3 Logging In... 4 Navigating in OU Campus... 6 Dashboard... 6 Content...

More information

Connect for iphone. Aug, 2012 Ver 5.3b AWest. 1 P a g e

Connect for iphone. Aug, 2012 Ver 5.3b AWest. 1 P a g e Connect for iphone Aug, 2012 Ver 5.3b AWest 1 P a g e About the Connect for iphone App... 3 iphone app system requirements... 3 Required Software... 3 Blackboard Requirements... 3 iphone App Installation,

More information

SharePoint General Instructions

SharePoint General Instructions SharePoint General Instructions Table of Content What is GC Drive?... 2 Access GC Drive... 2 Navigate GC Drive... 2 View and Edit My Profile... 3 OneDrive for Business... 3 What is OneDrive for Business...

More information

Proloquo4Text Type. Speak. Communicate.

Proloquo4Text Type. Speak. Communicate. Version 3.5 Proloquo4Text Type. Speak. Communicate. AssistiveWare Contents 2 1. Introduction to Proloquo4Text 3 Introduction The Text Pad Multiple languages Access the manual in the App 2. Startup wizard

More information

DRAGON CENTER User Guide

DRAGON CENTER User Guide DRAGON CENTER User Guide 1 Contents About DRAGON CENTER... 4 Get Started... 5 System Requirements... 5 Supported Hardware... 5 Installing DRAGON CENTER... 5 Launching DRAGON CENTER... 5 DRAGON CENTER Basics...

More information

SuperNova. Screen Reader. Version 14.0

SuperNova. Screen Reader. Version 14.0 SuperNova Screen Reader Version 14.0 Dolphin Computer Access Publication Date: 09 April 2014 Copyright 1998-2014 Dolphin Computer Access Ltd. Technology House Blackpole Estate West Worcester WR3 8TJ United

More information

Interaction Desktop framework Printed help. PureConnect powered by Customer Interaction Center (CIC) 2018 R1. Abstract

Interaction Desktop framework Printed help. PureConnect powered by Customer Interaction Center (CIC) 2018 R1. Abstract Interaction Desktop framework Printed help PureConnect powered by Customer Interaction Center (CIC) 2018 R1 Last updated October 12, 2017 Abstract This document is a printable version of the Interaction

More information

QUICK START GUIDE NTS HOSTED PBX CALL MANAGER. Welcome. Getting Oriented

QUICK START GUIDE NTS HOSTED PBX CALL MANAGER.   Welcome. Getting Oriented QUICK START GUIDE NTS HOSTED PBX Welcome Welcome to NTS Hosted PBX! This guide is intended to get you up and running with the basic features associated with the product. For more in-depth information,

More information

Here you will find guides on how to use different features of the SDL Core application.

Here you will find guides on how to use different features of the SDL Core application. Guides Core Document current as of 10/10/2017 04:18 PM. SDL Core Guides Here you will find guides on how to use different features of the SDL Core application. Table of Contents: Transport Manager Programmers

More information

Premium Auto Attendant User Guide

Premium Auto Attendant User Guide Premium Auto Attendant User Guide Contents Introduction to Premium Attendant... 1 Setting up Premium Attendant for the First Time...1 Working with the Premium Attendant Interface... 2 Names and Descriptions...2

More information

Lesson 1: Hello ios! 1

Lesson 1: Hello ios! 1 Contents Introduction xxv Lesson 1: Hello ios! 1 ios Developer Essentials 1 A Suitable Mac 1 A Device for Testing 2 Device Differences 2 An ios Developer Account 4 The Official ios SDK 6 The Typical App

More information

Start Here. Accessing Cisco Show and Share. Prerequisites CHAPTER

Start Here. Accessing Cisco Show and Share. Prerequisites CHAPTER CHAPTER 1 Revised: May 31, 2011 Accessing Cisco Show and Share, page 1-1 Cisco Show and Share Quick Start, page 1-4 Sign In to Cisco Show and Share, page 1-20 Set Your Personal Preferences, page 1-22 Accessing

More information

Document revision: F

Document revision: F Document revision: F Important Notice Copyright 2017 Enforcement Video, L.L.C. (dba WatchGuard Video). All rights reserved. This document and supporting data are the exclusive property of Enforcement Video,

More information

Guides SDL Server Documentation Document current as of 04/06/ :35 PM.

Guides SDL Server Documentation Document current as of 04/06/ :35 PM. Guides SDL Server Documentation Document current as of 04/06/2018 02:35 PM. Overview This document provides the information for creating and integrating the SmartDeviceLink (SDL) server component with

More information

Register by completing the form, or connecting via your GitHub or Google account.

Register by completing the form, or connecting via your GitHub or Google account. SDL Developer Portal Registration Guide In order to register an application on the SDL developer portal, you must first create both a developer and company profile. Developer Profile Registration To create

More information

Overview NOTE: Listing Overview. User Profile. Language Selection. Asset(s) View. Asset(s) Details. Editing Mode

Overview NOTE: Listing Overview. User Profile. Language Selection. Asset(s) View. Asset(s) Details. Editing Mode Overview Listing Overview User Profile Language Selection Asset(s) View Asset(s) Details Editing Mode NOTE: Some functions may not be available to all users depending on permissions granted. Some of the

More information

HPE Intelligent Management Center v7.3

HPE Intelligent Management Center v7.3 HPE Intelligent Management Center v7.3 Service Operation Manager Administrator Guide Abstract This guide contains comprehensive conceptual information for network administrators and other personnel who

More information

CarPlay Navigation App Programming Guide. September 28, 2018

CarPlay Navigation App Programming Guide. September 28, 2018 CarPlay Navigation App Programming Guide September 28, 2018 apple Developer Table of Contents Introduction... 3 CarPlay Navigation Apps... 4 CarPlay Navigation App Entitlement... 4 Development Environment...

More information

COPYRIGHTED MATERIAL. chapter 1. How Do I Configure My iphone? 2

COPYRIGHTED MATERIAL. chapter 1. How Do I Configure My iphone? 2 chapter 1 How Do I Configure My iphone? 2 Customizing the Home Screen to Suit Your Style 4 Creating an app folder 5 Adding a Safari web clip to the Home screen 6 Resetting the default Home screen layout

More information

Home Phone Quick Start Guide. Review these helpful instructions to understand your Midco home phone service and its many convenient features.

Home Phone Quick Start Guide. Review these helpful instructions to understand your Midco home phone service and its many convenient features. Home Phone Quick Start Guide Review these helpful instructions to understand your Midco home phone service and its many convenient features. 1 Staying Connected Has Never Been Easier Thank you for choosing

More information

Windows Desktop User Guide

Windows Desktop User Guide 1 P a g e Windows Desktop User Guide nextiva.com/support 1 P age Contents About Nextiva App for Desktop... 3 Getting Started... 3 Installation... 3 Sign In... 3 Main Window... 4 Communications Window...

More information

Building TPS Web Pages with Dreamweaver

Building TPS Web Pages with Dreamweaver Building TPS Web Pages with Dreamweaver Title Pages 1. Folder Management 7 2. Defining Your Site 8-11 3. Overview of Design Features 12-22 4. Working with Templates 23-25 5. Publishing Your Site to the

More information

Updated August 7 th, 2017 introduction

Updated August 7 th, 2017 introduction Solstice User Guide Updated August 7 th, 2017 introduction The Solstice User Reference Guide provides a summary of how Solstice works for users, including an overview of a Solstice system and steps for

More information

My First iphone App (for Xcode version 6.4)

My First iphone App (for Xcode version 6.4) My First iphone App (for Xcode version 6.4) 1. Tutorial Overview In this tutorial, you re going to create a very simple application on the iphone or ipod Touch. It has a text field, a label, and a button

More information

Version 2.0. Campus 2.0 Student s Guide

Version 2.0. Campus 2.0 Student s Guide Campus 2.0 Student s Guide Version 2.0 Campus 2.0 Student s Guide Error! No text of specified style in document. i Important Notice Copyright 2008 Tegrity, Inc. Disclaimer 2008 Tegrity, Inc. all rights

More information

Guides SDL Server Documentation Document current as of 05/24/ :13 PM.

Guides SDL Server Documentation Document current as of 05/24/ :13 PM. Guides SDL Server Documentation Document current as of 05/24/2018 04:13 PM. Overview This document provides the information for creating and integrating the SmartDeviceLink (SDL) server component with

More information

Percussion Documentation Table of Contents

Percussion Documentation Table of Contents Percussion Documentation Table of Contents Intro to the Percussion Interface... 2 Logging In to Percussion... 2 The Dashboard... 2 Managing Dashboard Gadgets... 3 The Menu... 4 The Finder... 4 Editor view...

More information

SharePoint: Fundamentals

SharePoint: Fundamentals SharePoint: Fundamentals This class will introduce you to SharePoint and cover components available to end users in a typical SharePoint site. To access SharePoint, you will need to log into Office 365.

More information

Mailbox sharing and permissions in UNify Mac OS X

Mailbox sharing and permissions in UNify Mac OS X Mailbox sharing and permissions in UNify Mac OS X Use these instructions if you want to allow someone else to frequently send and reply to emails, or respond to meeting requests on your behalf. (In GroupWise

More information

Use apps Tap an app to open it. Customize the unit Arrange apps Touch and hold any app on the Home screen, then drag the app around. Drag an app to the edge of the screen to move it to a different Home

More information

VMware AirWatch Google Sync Integration Guide Securing Your Infrastructure

VMware AirWatch Google Sync Integration Guide Securing Your  Infrastructure VMware AirWatch Google Sync Integration Guide Securing Your Email Infrastructure Workspace ONE UEM v9.5 Have documentation feedback? Submit a Documentation Feedback support ticket using the Support Wizard

More information

ITP 342 Mobile App Dev. Table Views

ITP 342 Mobile App Dev. Table Views ITP 342 Mobile App Dev Table Views Table Views The most common mechanism used to display lists of data to the user Highly configurable objects that can be made to look practically any way you want them

More information

ViGo Developer Guide. Mobile application development with ViGo

ViGo Developer Guide. Mobile application development with ViGo ViGo Developer Guide Mobile application development with ViGo Title: ViGo Developer Guide Part number: VV/VIGO/DOC/189/B Copyright 2015 VoiceVault Inc. All rights reserved. This document may not be copied,

More information

Touchscreen Operation

Touchscreen Operation Touchscreen Operation Use simple gestures including touching, swiping, and scrolling to operate certain audio functions. Some items may be grayed out during driving to reduce the potential for distraction.

More information

SharePoint: Fundamentals

SharePoint: Fundamentals SharePoint: Fundamentals This class will introduce you to SharePoint and cover components available to end users in a typical SharePoint site. To access SharePoint, you will need to log into Office 365.

More information

Models with Display Audio Display Audio Operation

Models with Display Audio Display Audio Operation AUDIO AND CONNECTIVITY Models with Display Audio Display Audio Operation Use simple gestures including touching, swiping, and scrolling to operate certain audio functions. Some items may be grayed out

More information

Sync User Guide. Powered by Axient Anchor

Sync User Guide. Powered by Axient Anchor Sync Powered by Axient Anchor TABLE OF CONTENTS End... Error! Bookmark not defined. Last Revised: Wednesday, October 10, 2018... Error! Bookmark not defined. Table of Contents... 2 Getting Started... 7

More information

Functional Reactive Programming on ios

Functional Reactive Programming on ios Functional Reactive Programming on ios Functional reactive programming introduction using ReactiveCocoa Ash Furrow This book is for sale at http://leanpub.com/iosfrp This version was published on 2016-05-28

More information

VMware AirWatch SDK for ios (Swift) v17.5. Technical Implementation Guide Empowering your enterprise applications with MDM capabilities

VMware AirWatch SDK for ios (Swift) v17.5. Technical Implementation Guide Empowering your enterprise applications with MDM capabilities VMware AirWatch SDK for ios (Swift) Technical Implementation Guide Empowering your enterprise applications with MDM capabilities VMware AirWatch SDK for ios (Swift) v17.5 Have documentation feedback? Submit

More information

PROFESSIONAL TUTORIAL. Trinity Innovations 2010 All Rights Reserved.

PROFESSIONAL TUTORIAL. Trinity Innovations 2010 All Rights Reserved. PROFESSIONAL TUTORIAL Trinity Innovations 2010 All Rights Reserved www.3dissue.com PART ONE Converting PDFs into the correct JPEG format To create a new digital edition from a PDF we are going to use the

More information

Collaborate App for Android Smartphones

Collaborate App for Android Smartphones Collaborate App for Android Smartphones The AT&T Collaborate service provides the Collaborate app to help you manage calls and conferences on the go. The app comes in 3 versions: Collaborate - Mobile Collaborate

More information

Solutions Reference Guide. IP TalkSM. Voic & Navigator Web Portal

Solutions Reference Guide. IP TalkSM. Voic & Navigator Web Portal IP Talk SM Solutions Reference Guide IP TalkSM Voicemail & Navigator Web Portal Table of Contents Voicemail Accessing Your Voicemail................... 1 Voicemail Main Menu........................ 2

More information

Key Features: Learning Objectives: Table of Contents:

Key Features: Learning Objectives: Table of Contents: Key Features: Skype for Business is a communications platform available on Windows, Mac, and mobile devices. Skype for Business is designed to allow user interaction between colleagues and external contacts.

More information

BroadTouch Business Communicator for Desktop

BroadTouch Business Communicator for Desktop BroadTouch Business Communicator for Desktop User Guide Release 20.2.0 Document Version 2 Table of Contents 1 About BroadTouch Business Communicator for Desktop...4 2 Getting Started...5 2.1 Installation...

More information

Sage Construction Central Setup Guide (Version 18.1)

Sage Construction Central Setup Guide (Version 18.1) Sage 300 Construction and Real Estate Sage Construction Central Setup Guide (Version 18.1) Certified course curriculum Important Notice The course materials provided are the product of Sage. Please do

More information

Working with PDF s. To open a recent file on the Start screen, double click on the file name.

Working with PDF s. To open a recent file on the Start screen, double click on the file name. Working with PDF s Acrobat DC Start Screen (Home Tab) When Acrobat opens, the Acrobat Start screen (Home Tab) populates displaying a list of recently opened files. The search feature on the top of the

More information

Configurations, Troubleshooting, and Advanced Secure Browser Installation Guide for Mac For Technology Coordinators

Configurations, Troubleshooting, and Advanced Secure Browser Installation Guide for Mac For Technology Coordinators Wyoming Assessment Program Configurations, Troubleshooting, and Advanced Secure Browser Installation Guide for Mac For Technology Coordinators 2018-2019 Published December 19, 2018 Prepared by the American

More information

Salesforce Lightning Experience

Salesforce Lightning Experience Salesforce Lightning Experience Web Content Accessibility Guidelines 2.0 Level A and AA Voluntary Product Accessibility Template (VPAT) July 2016 This Voluntary Product Accessibility Template, or VPAT,

More information

Electronic data system application end user manual

Electronic data system application end user manual The MalariaCare Toolkit Tools for maintaining high-quality malaria case management services Electronic data system application end user manual Download all the MalariaCare tools from: www.malariacare.org/resources/toolkit.

More information

CompsFromSpreadsheet Version 5.1 user guide

CompsFromSpreadsheet Version 5.1 user guide CompsFromSpreadsheet Version 5.1 user guide CompsFromSpreadsheet is an After Effects script that will allow you to create limitless copies of your original comp, filling in text and replacing layers based

More information

1. Enter your User ID or Address associated with your Chalk & Wire account.

1. Enter your User ID or  Address associated with your Chalk & Wire account. Once you have been provided with your Chalk & Wire User ID and Password, go to the Chalk & Wire login web page for your institution. If you do not know the correct URL, please visit ep.chalkandwire.com

More information

GRS Enterprise Synchronization Tool

GRS Enterprise Synchronization Tool GRS Enterprise Synchronization Tool Last Revised: Thursday, April 05, 2018 Page i TABLE OF CONTENTS Anchor End User Guide... Error! Bookmark not defined. Last Revised: Monday, March 12, 2018... 1 Table

More information

WHICH PHONES ARE COMPATIBLE WITH MY HYBRID SMARTWATCH?

WHICH PHONES ARE COMPATIBLE WITH MY HYBRID SMARTWATCH? GENERAL SET-UP & APP o WHICH PHONES ARE COMPATIBLE WITH MY HYBRID SMARTWATCH? o Your Hybrid smartwatch is compatible with Android(TM) phones and iphone(r), specifically with Android OS 4.4 or higher, ios

More information

IBM Notes Client V9.0.1 Reference Guide

IBM Notes Client V9.0.1 Reference Guide IBM Notes Client V9.0.1 Reference Guide Revised 05/20/2016 1 Accessing the IBM Notes Client IBM Notes Client V9.0.1 Reference Guide From your desktop, double-click the IBM Notes icon. Logging in to the

More information

NUMBER: DATE: June 10, 2017

NUMBER: DATE: June 10, 2017 NUMBER: 08 047 17 GROUP: 08 Electrical DATE: June 10, 2017 This bulletin is supplied as technical information only and is not an authorization for repair. No part of this publication may be reproduced,

More information