App for Apple platforms

I’d like to make a Flipper app for Apple platforms, beginning with iOS.

I intend to go with the latest SwiftUI (iOS 14 and up) to support iOS, iPadOS, watchOS and macOS with little effort.

A very rough draft roadmap will look like this:

Stage 0

  1. Bluetooth connections setup.
  2. Basic data exchange with extensible support of different data types (dumps, plugins, settings, whatever).
  3. Some simple interface for testing.
  4. Base Shortcuts integration.

Stage 1

  1. Plugins store.
  2. Flipper basic features support.
  3. Some App Store worthy interface work. Basic iPadOS support.

Stage 2

  1. Advanced platform features, such as iCloud sync AirDrop, file browser, widgets etc.
  2. Keyboard&mouse support, iPadOS and macOS interface.
  3. watchOS.

Collaboration

I appreciate any advice about Bluetooth interaction, since I don’t have experience with it and expect a major pain there.

Any feature requests or concepts are welcome, too.

8 Likes

We need some sort of mockup to emulate Flipper server side logic and protocol, because it should be shared across Android / IOs / something else. For protocol protobuffers good choice, and it can be handled by nanopb as sugested at Android thread.

1 Like

vopash, I want to join to your project. Starting with iOS 14 is a good idea. If flipper team or community create repo for plugins, it will be nice to manage and install them from such app.

Another idea is to make mobile app a companion for flipper. For example, flipper team said you can create a quick link for saved iButton or RFID key from start menu by pressing some button. But this is only one key. With companion app you can send location request to iPhone and emulate key that is connected to current location.

1 Like

xmvlad, what do you mean by server side?

Yeah, it’s a great idea. I’ve had some thoughts about that. It might be possible to autoswitch the keys based on shortcuts automations (and Siri, of course).

It would be nice if iOS supported Bluetooth connections to Flipper in background shortcuts actions. I think we’ll need a proof of concept after we nail basic bluetooth connections.

“server side” may be wrong words. i’m just mean that there should be single protocol between Flipper and different applications (Android / IOs / etc). And we need some sort of flipper side mockup implementation of this protocol, to develop and test against.

1 Like

Yeah, I think you’re right. We’ll need to use a single protocol, since Flipper can’t support many due to memory restrictions.

It will be possible to obtain some pre-release hardware in some point in the future, so we’ll be able to test bluetooth connectivity early enough. However, not in the nearest month for sure.

2 Likes

vopash i want to join your project since I personally will be using the flipper zero mostly with apple products so the end user experience is an important aspect for me and I will be of great help in that area.

1 Like

Thank you! The UX is paramount, that’s why we’re intending to do native development.

Shortcuts are the first priority now!

After some discussion I’ve had with @LionZXY, it seems like Shortcuts support should be a first priority for iOS. Shortcuts provide awesome automation support, even JavaScript is supported. Also, watchOS 7 can run shortcuts even without iOS, that’s great.

However, macOS doesn’t have Shortcuts, so we’ll need to think of a workaround.

2 Likes

What else was your discussion about?

General app features and architecture.
For now, Flipper hardware/firmware staff has its hands full, and mobile apps are low priority, so we don’t have that much knowledge yet. We’ve gathered what we know and what can we do with it. I’ll post a more verbose update later today.

I’ve promised a more detailed post, so here it is.

At stage 1, the main feature of the app is to download modules from the Gallery and install them on Flipper.

There are (at least) two kinds of modules we might need:

  1. Flipper firmware addons.
  2. Mobile app interface for these addons, so the phone can use Flipper’s features.

Flipper modules are straightforward: load them from the Gallery, upload via BLE and let Flipper do its install thing.

However, downloadable interface addons on iOS are a no-go. We can manage first-party support for some modules, but definitely not all of them, and this is a problem.
IMO, the best way is support Shortcuts. They are powerful by themselves (no-code programming at its finest), but the best part is they allow to run Javascript, so it’s trivial to distribute community-made Shortcuts along with community-made Flipper firmware addons. Siri support comes as a free bonus.

Anyway, the roadmap doesn’t change much. We still have to make an MVP with Flipper prototype exchanging some data with mobile app and installing addons, then we can make it pretty and usable.

1 Like

Hey guys, I’d like to join and write some code. So, do you have any thoughts on overall app design:

  1. Just default Swift UI MVVM, or something else (maybe UDF, Redux)?
  2. Combine or RxSwift?
  3. DI?
  4. Dependency management (SwiftPM, CocoaPods)?

What do you think on adding a wiki to the repo with discussion state, guidelines and expected milestones?
Also would be nice to see some tasks (as GitHub issues) available to grab, so people won’t work on the same stuff.

Please make sure to register an Apple Dev account and claim the bundle ID

Hey guys, I’d like to join and write some code. So, do you have any thoughts on overall app design:

  1. Just default Swift UI MVVM, or something else (maybe UDF, Redux)?
  2. Combine or RxSwift?
  3. DI?
  4. Dependency management (SwiftPM, CocoaPods)?

Hi!

I think we can safely assume we aren’t doing any legacy support. Since Flipper releases no earlier than February, targeting iOS 14 etc. looks nice.

I don’t have anything against default MVVM, and since there’s no legacy, I’d stick with Combine. But everything is discussable at this point.

What do you think on adding a wiki to the repo with discussion state, guidelines and expected milestones?
Also would be nice to see some tasks (as GitHub issues) available to grab, so people won’t work on the same stuff.

Please make sure to register an Apple Dev account and claim the bundle ID

Definitely will do ASAP.

I think we need a work chat for more detailed discussions.
There will be a general Flipper developer chat, and in time we’ll move there. But, since I don’t know when it happens, let’s hop on to this Telegram group for now.

Official Discord chat

We’ve got an official Discord chat now.

News on Bluetooth

We’ve had an amazing talk with firmware development team. Here’s the news:

  1. We’re using protobuf, it’s decided.
  2. Firmware team will try to implement a common bus for messaging with Flipper’s firmware modules/apps. Good news is such bus can be easily made available via BLE, since it works in a similar fashion. Thus, iOS app modules supposedly will be able to send messages and to subscribe to updates, and then respond.

Hi vopash, I am an iOS engineer at TKLABS in Florida, and I have stumbled upon your project on Instagram. As I dug deeper I to it after donating what I could to the project, I wanted to be involved as I think it is a great idea. I would like to be a part of it and share my years of experience with this team. If I can be of any help clearing doubts of the iOS and Apple environments.

1 Like

Hi, Abraham, and welcome!
We are only in the very early stages of development and will certainly need any help we can get. Join our Discord server and Github project.

We’ve got two problems on hand:

  1. BLE support and talking to an STM32 device via protobuf. @evnik is on it.
  2. Support for community-provided custom interface modules which will talk to Flipper firmware addons. I think Shortcuts are the best for this, but any other ideas are welcome.

Why not to use Apple’s SwiftProtobuf instead of nanopb? Does nanopb have any advantage over SwiftProtobuf for a native app? Sorry if it is an amateur question, have never used Protobuf on iOS yet.

Hello and welcome!

You are right that we can use any other package on iOS. nanopb is being used on the Flipper itself.

1 Like