Published on

We need to bring iOS development experience to embedded and robotics

Authors

If you’ve ever come from iOS or Android development and tried to build anything for embedded systems, robotics, or autonomous vehicles you are in for a world of hurt. It is death by a thousand hammers to the face.

  1. There is no standard programming language. In iOS or Android, you have Swift and Kotlin respectively. This causes incredible problems with the developer ecosystem. Looking for tutorials or sample code for “Building a Camera sensor” could render code in C#, JavaScript, Python, C++, Rust etc… Everyone picks their own adventure and it’s awful.

  2. There is no standard library collection. iOS and Android development is much more than an operating system. You can get world class libraries built in the system such as:

    1. Network.framework
    2. CoreData.framework
    3. CoreBluetooth.framework
    4. CoreML.framework - for machine learning and AI
    5. AVFoundation.framework - for audio recording and playback
    6. Security.framework - encryption
    7. WebKit.framework - web rendering and traversal

    Best of all there are no linker errors for these base frameworks! Today, developers have to hunt for random packages, develop on their own machine

  3. There is no out-of the box debugging system. If you use an IDE to deploy for Raspberry Pi, there is no easy way to run your application on the Pi and instantly debug your app, step through break points, or capture instrumentation. It’s completely a do-it-your-self project that includes:

    1. Setting up SSH
    2. Selecting your language server (see problem #1),
    3. Successfully following some obtuse instruction
    4. Connecting your IDE
  4. There is no out of the box deployment functionality. In XCode for iOS or Android Studio, you can just

    1. run your application with Cmd + R to deploy development
    2. publish to MDM, Apple App Store, or Google Play Store
  5. No package manager! To download 3rd party packages, requires intimate knowledge of Linux Package Managers, or if your lucky how to statically or dynamically link packages. On iOS and Android you can use Swift Package Manager or Gradle

Solution

  1. Create an IDE for embedded systems
  2. Build a framework system that has Networking, Driver integration APIs, Databases, Security
  3. Pick a programming language (JUST ONE): I recommend Rust
  4. Make sure the IDE can deploy to the device with debugging and release capabilities