• Stars
    star
    169
  • Rank 224,453 (Top 5 %)
  • Language
    Objective-C
  • License
    BSD 3-Clause "New...
  • Created about 10 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Get your app connected to the πŸš™, make your users feel like a 🌟

Accio compatible Carthage compatible CocoaPods Version Swift Package Manager compatible License SmartDeviceLink Tests codecov Documentation Slack Status

What is SmartDeviceLink (SDL)

SmartDeviceLink (SDL) is a standard set of protocols and messages that connect applications on a smartphone to a vehicle head unit. This messaging enables a consumer to interact with their application using common in-vehicle interfaces such as a touch screen display, embedded voice recognition, steering wheel controls and various vehicle knobs and buttons. There are three main components that make up the SDL ecosystem.

  • The Core component is the software which Vehicle Manufacturers (OEMs) implement in their vehicle head units. Integrating this component into their head unit and HMI based on a set of guidelines and templates enables access to various smartphone applications.
  • The optional SDL Server can be used by Vehicle OEMs to update application policies and gather usage information for connected applications.
  • The iOS, Android / Java Suite, and JavaScript libraries are implemented by app developers into their applications to enable command and control via the connected head unit.
  • To suggest new features to SDL, including the iOS library, go to the SDL Evolution github project.
  • To understand if a contribution should be entered as an iOS Pull Request or Issue, or an SDL Evolution Proposal, please reference this document.

SDL iOS App Library

The mobile library component of SDL is meant to run on the end user’s smart-device from within SDL enabled apps. The library allows the apps to connect to SDL enabled head-units and hardware through Bluetooth, USB, and TCP. Once the library establishes a connection between the smart device and head-unit through the preferred method of transport, the two devices are able to communicate using the SDL defined protocol. The app integrating this library project is then able to expose its functionality to the head-unit through text, media, and other interactive elements.

You can find guides and documentation on how to use this library at the SmartDeviceLink website. You can find the upcoming releases roadmap at the SDL Evolution Github.

Installing

To install this library as a framework in your app, see the Installation Guide. There are instructions on how to install using the dependency managers Accio, Carthage, CocoaPods, and Swift Package Manager, as well as how to install the library framework manually.

Adding a Dynamic Framework

Tagged to our releases is a dynamic framework file that can be drag-and-dropped into the application. Dynamic frameworks are supported on iOS 8+. WARNING: You cannot submit your app to the app store with the framework as is. You MUST strip the simulator part of the framework first. Strip the x64 and i386 portions first like so:

lipo -remove i386 -remove x86_64 -o SmartDeviceLink.framework/SmartDeviceLink SmartDeviceLink.framework/SmartDeviceLink

You can check the current architectures like so:

lipo -info SmartDeviceLink.framework/SmartDeviceLink

Getting Help

If you have questions, first view our guides on the SmartDeviceLink website.

If you see a bug, please post an issue on the appropriate repository. Please see the contribution guidelines before proceeding. If you need general assistance, or have other questions, you can sign up for the SDL Slack and chat with other developers and the maintainers of the project.

Example Apps

This library repository contains two example apps: one written in Objective-C and one in Swift. If you have CocoaPods installed, you can easily run one of the example apps by executing pod try SmartDeviceLink in your terminal. Alternatively, you can clone or download the project, but before attempting to build and run the example apps you must follow the installation steps.

There are additional example apps available in the example organization, these require CocoaPods to install dependencies.

Contributing to the Project

We welcome contributors to the project, but it helps to know a few things about how the project is organized.

  1. All Pull Requests must fix an issue. Before creating a PR for a bug or feature, ensure that there is an open issue for it. If there is not, open one!
  2. We recommend telling the project maintainers that you intend to contribute a PR for an issue. This allows us to internally track what PRs will be contributed and to plan time to review your PR. Furthermore, we may ask you not to work on a PR for that issue for various reasons (see below).
  3. We welcome PRs for bug fixes! If there's a confirmed issue for a bug, we would welcome a bug fix. The PR will require a review from a project maintainer before it can be merged.
  4. PRs for features require additional planning. Features must be approved by the SDLC using the Evolution Process before an issue can be opened. Furthermore, a feature must be approved to be developed for a release by the SDLC before a PR can be opened. Finally, a PR cannot be merged if the underlying feature requires or should have alignment across multiple projects until PRs for all those projects are ready for review.

Preparing for Development

To prepare the library for development, you will need to take a few steps:

  1. Clone this repository.
  2. Install submodules with git submodule init and git submodule update.
  3. Install testing dependencies.
  4. Ensure that you can run the Example test apps.

Creating or Updating an RPC

When creating or updating an RPC, you will need to install and use the RPC generator. The generator must be used to ensure that the content is correct. To use the generator, the RPC must be updated on the RPC spec repository.

Running Tests

To run tests, you will need to bootstrap the Carthage testing libraries. To do so, first install Carthage.

Then, from the root project directory, run:

carthage bootstrap --use-xcframeworks --platform ios

At this point, you can run tests from Xcode, or, if you wish to run the tests exactly as they will be run on the CI server, see the YAML document describing those tests. You can also check the previously run CI tests to see how they're currently being run.

More Repositories

1

sdl_core

SmartDeviceLink In-Vehicle Software and Sample HMI
C++
241
star
2

sdl_java_suite

SmartDeviceLink libraries for Android, Java SE, and Java EE
Java
186
star
3

sdl_evolution

Tracking and proposing changes to SDL's public APIs.
Objective-C
33
star
4

sdl_server

The SmartDeviceLink (SDL) server handles authentication, data collection, and basic configurations for SDL connected vehicles.
JavaScript
20
star
5

sdl_app_library_guides

DocDown Guide Content for
16
star
6

sdl_javascript_suite

SmartDeviceLink library for applications developed in JavaScript
JavaScript
15
star
7

rpc_spec

Spec for RPC messages
Python
15
star
8

protocol_spec

Describes the communication protocol between a smartdevicelink enabled head unit and mobile application
14
star
9

sdl_hmi

JavaScript
14
star
10

rpc_builder_app_ios

App designed to allow free testing of the SDL Interface during development
Objective-C
13
star
11

relay_app_ios

Objective-C
13
star
12

sdl_hmi_integration_guidelines

Integration Guidelines for SDL Core into the vehicle HMI
12
star
13

generic_hmi

A sample HMI to use with sdl_core
JavaScript
8
star
14

sdl_core_docker

Docker build for SDL Core
Shell
7
star
15

manticore

Dynamically provision SDL Core and SDL HMI instances in the cloud
JavaScript
6
star
16

sdl_atf

Automated Tests for SmartDeviceLink
Lua
5
star
17

sdl_core_guides

3
star
18

rpc_builder_app_android

RPC builder for Android
Java
3
star
19

sdl_core_documentation

Software Architecture Documentation for SDL Core
3
star
20

sdl_security_ios

A TLS based security library built to interact with sdl_ios and provide TLS certificate authentication and encryption / decryption
Objective-C
3
star
21

sdl_requirements

Collection of requirements/technical tasks for new sdl_core features
2
star
22

sdl_markdown_spec

Specification writing documentation in DocDown
2
star
23

sdl_security_java_suite

Open Source TLS Based Security Library for SDL Java Suite
C
2
star
24

sdl_overview_guides

Python
2
star
25

sdl_atf_test_scripts

Test scripts for sdl_atf
Lua
2
star
26

sdl_whitepaper

Technical overview whitepaper markdown repository
1
star
27

SHAIDkit_js

A Javascript API wrapper for SHAID
JavaScript
1
star
28

hardwarevalidator_android

Hardware Validator - Android
1
star
29

sdl_server_guides

Documentation for the sdl_server
1
star
30

manticore-images

A repository of the code used to construct images for use by Manticore
JavaScript
1
star
31

sdl_shaid_docs

Documentation in DocDown for SHAID.
1
star
32

bson_c_lib

Library for converting a map to and from BSON format
Shell
1
star
33

sdl_broker

JavaScript
1
star
34

sdl_ci

Documentation and configurations for Jenkins CI projects tied to sdl_core
1
star
35

sdl_core_ci

Repository for housing continuous integration related scripts and files for SDL Core
Shell
1
star