Audiobus: Use your music apps together.

What is Audiobus?Audiobus is an award-winning music app for iPhone and iPad which lets you use your other music apps together. Chain effects on your favourite synth, run the output of apps or Audio Units into an app like GarageBand or Loopy, or select a different audio interface output for each app. Route MIDI between apps — drive a synth from a MIDI sequencer, or add an arpeggiator to your MIDI keyboard — or sync with your external MIDI gear. And control your entire setup from a MIDI controller.

Download on the App Store

Audiobus is the app that makes the rest of your setup better.

Starting "Development" ... which framework?

tjatja
edited June 2020 in App Development

Since some time, i was interested in developing "software", mostly because i wanted to create some little Apps for myself on iOS (still no good wishlist App, for example).

But i would like to have the opportunity to create for more platforms, not only iOS / iPadOS.

An additional problems is, that i am Windows-based.
As long as my little App is not really useful and finished, i would not like to buy some Mac just to compile stuff.
But of course i need some way to start, run and debug the App - maybe only in a simulation.

About my background, i had some exposure to C, C++, Java, Python and bash.
Beside my Windows PC, i have access to a Linux server and my i-Devices.

Originally I thought to learn Swift, but as i wrote, i soon came to the conclusion that others solution would fit better.

And i want the possibility to be performant, may this be needed, so no Web Apps or something like this.

Beside Progressive Web Apps, there are some frameworks that allow such things.

  • Facebook React Native (JavaScript): iOS / iPadOS, Android, Web and Universal Windows Platform

  • Nativescript (JavaScript, TypeScript): iOS / iPadOS and Android (also Web, i would assume)

  • Microsoft Xamarin (C#): iOS / iPadOS, Android, Windows, Mac OS, Linux (?)

  • Google Flutter (Dart): iOS / iPadOS, Android, Windows, Web, Mac OS, Linux

As NativeScript does only support Mobile, it is less attractive, even if i like that you can use TypeScript instead of JavaScript.

The remaining 3 build on 3 different languages: JavaScript, C# and Dart.
I would need to learn any and all of them, so i have no real preference here.

But strangely, React Native does not seem to support Mac OS, meaning desktop Apps.

This would reduce my list to Xamarin and Flutter.

On iOS / iPadOS, i would need the possibility to use Slide Over, Split View and Drag-and-Drop, but i got the impression that this may be possible with both of them.

Is my reasoning solid so far?

Which of those two frameworks to choose?

Any other thoughts?

BTW, I am very much interested in Rust and WebAssembly, which seem to be the future of development.

«1

Comments

  • wimwim
    edited June 2020

    If the app you're considering to make is audio or midi related, then the obvious choice is JUCE, I think. Multi-Platform, free to get started**, and perfectly comfortable in Windows.

    ** The free version requires usage tracking, "Made with JUCE" splash screen, and below $50,000 revenue. $35/month or $700 one-time to get rid of those restrictions and go up to $200,000 revenue.

    If it's a utility rather than a music app, then I would go with Python.

  • tjatja
    edited June 2020

    Thanks, @wim
    But this is not about musical Apps.
    Anyway, thanks for the link!

    Also i tend towards performant, native applications, therefor the question about the 4 frameworks which allow exactly this.
    I originally wanted to start in Swift, until i understood that multi-platform would be preferable.

    So, no Python - i want native Apps for all platforms.
    Also, as far as i understood, the Python Apps on iOS do not support, Split View and Slide-Over, but i may be wrong. Drag-and-Drop?

    Not much people seem to have done something like this.

    Meanwhile, i will have a look at Flutter first.

  • tjatja
    edited June 2020

    The stable version of Flutter seems to be geared towards Android development.
    Only the beta channel has early support for building web applications.

    And only the beta versions seems to include "dart", but still i find it in a sub-directory of flutter.
    The documentation is way off the reality, which is never a good sign.

    https://flutter.dev/docs/deployment/ios seems to imply, that you need to develop on Mac to be able to produce an iOS App.

    Nothing hints to iOS development on Windows, beside a "Cupertino" package.
    https://flutter.dev/docs/get-started/flutter-for/ios-devs

    But where is also no hint that this is possible on Windows.
    I only need a working simulator.

    The "Test drive" with "flutter create myapp" pointed to a missing Android SDK.

    I will tomorrow try to install the Android SDK to test if i could select an i-Device with Cupertino, or if it is as i fear.
    Very sad.

    I also found this:

    https://stackoverflow.com/questions/47006906/developing-for-ios-device-in-windows-environment-with-flutter

    With links to

    https://medium.com/flutter-community/how-to-sign-flutter-apps-for-ios-automatically-without-a-mac-a2dc9cfa5a6c

    and

    https://medium.com/flutter-community/developing-and-debugging-flutter-apps-for-ios-without-a-mac-8d362a8ec667

    But i am finally not sure that i like this.

    In summary, it seems that i need to develop Android Apps as there is no iOS simulator outside Xcode and only at a later stage may use the above workaround or simply get a Mac.

    This did not go as easy as i thought.

  • tjatja
    edited June 2020

    I installed the Android SDK and the Virtual Device Manager and chose a Nexus 10 tablet as something at least similar to an iPad.

    The default orientation "landscape" does not get honored, as it seems.
    Only the device is in landscape orientation, not the screen or App.

    Anyway, now i can simulate Android devices :smiley:

    When trying to install the Flutter plugin, it did not seem to work, but then i suspected my router settings to be the cause, which was true. I tend to disable access to the Windows update servers...

    Anyway, after some more flutter magic and starting the emulation, i could run the test drive app.

    That's a start

    BUT, the "java" binary tried to call home and my Windows firewall popped up.

    I am not sure if some step requires this, but i don't like this!

  • Phonegap is still a thing?

  • @TheDubbyLabby said:
    Phonegap is still a thing?

    I think, yes.
    But it's for WebApps, not native.

  • tjatja
    edited June 2020

    I finally read that my initial information about the capabilities of Flutter are.... not the whole truth.

    The Mac OS support is only "alpha".

    And the support for Windows and Linux is even only a "technical preview".

    This is unexpected.

    Tomorrow, i will try to compile the test drive for Windows and see if that is possible at all.

    Otherwise, i may instead have a look at Xamarin, or as i just now noticed, React Native again.
    As it seems, Joplin is written with React Native, and they are able to target any and all operating systems! Will check out, how they are doing this...

    Also unexpected, but positively 🤗

  • Ohhhhh.

    More unexpected, brand new stuff!

    Many thanks!

    For me, iOS / iPadOS and Windows are more important than Android or Mac.

    Very exiting.

  • Not sure about the OP needs but I also remembered “tumult hype” as something useful for certain kind of apps. Not sure about windows being native just for mac app.

  • @TheDubbyLabby said:
    Not sure about the OP needs but I also remembered “tumult hype” as something useful for certain kind of apps. Not sure about windows being native just for mac app.

    This is a WebApp, so not exactly what i am looking for.
    I may have the need for high performance and cannot affort to go in different direction.
    I want to make my decision soon and then stay at that path.

    But thanks

  • Why don't you just develop a browser centric app and host it on platform independent micro-servers. You can do this with Python or with Javascript and Node for the web server and many more. Since the browsers like Chrome run everywhere your app will too.

    Lots of documentation and code to re-use or build from.

    If you want to do more complex media types then I'd start with Flutter and watch it mature. Google tends to do the best multi-platform standards, IMHO and they have the revenue to support and maintain projects that have lots of users.

  • @tja said:

    @TheDubbyLabby said:
    Not sure about the OP needs but I also remembered “tumult hype” as something useful for certain kind of apps. Not sure about windows being native just for mac app.

    This is a WebApp, so not exactly what i am looking for.
    I may have the need for high performance and cannot affort to go in different direction.
    I want to make my decision soon and then stay at that path.

    But thanks

    Don’t worry, just throwing some options for anyone reading the post without similar needs that maybe those fit their needs.

    Good luck in your journey!

  • cp3cp3
    edited June 2020

    if your goal is to mainly target iOS and Windows, Xamarin seems a suitable option. I believe Xamarin, but also React Native et al., work by mapping their own UI framework's common components (lists, buttons, switches) to those of the various target platforms, so there will usually be some limitation as to which of the target platform's UI components you can access, especially the ones more specific to a platform (i.e., Slide Over, Split View etc. might not be available). also, there will be a (small) performance overhead compared to an app that is built using the native tools, since there has to be some 'glue' code between the framework and the targeted platform.

    most importantly, however, choosing a platform such as Xamarin/.NET means investing a lot time and effort into that particular ecosystem by learning a programming language (C#), editor (Visual Studio), SDK (.NET) and many of its lower and higher level API's. a lot of this is specific to that platform/company, so there isn't a huge amount of transferable knowledge apart from general programming patterns/experience. similarly, if you choose Apple you would spend time learning Swift, Xcode, UIKit and/or SwiftUI, etc. these are giant systems with huge communities of users around and it can take years to master all the quirks of a specific SDK, programming language, UI framework, build system, etc. but again, if you're a happy Windows user and will continue to be, learning Xamarin could be a good investment.

    then of course there are a lot of more portable technologies like C, C++, Python or web. however, on iOS and Android, being the closed systems that they are, you're pretty much tied to either the Apple/Google SDKs, progressive web apps or frameworks like the ones you mentioned unless you're comfortable coding your own UI framework in low-level C and OpenGL or something like that (and even then you'd still need a MacOS and Xcode to build and run your app on an iDevice).

    my two cents, hope this is useful!

  • I’ve been very timidly dipping my toe in the Flutter pond, admittedly I’m using it on Macs only. I’m finding it very interesting. It’s almost the total opposite to the kind of programming I like and understand (ie, CSS, SVG SMIL) but I’m kind of gritting my teeth and tolerating the mess of brackets and other punctuation clutter. Also, the indenting seems insane. Still, I think I’m coming round to the idea that it might well develop into an ideal way of ‘describing’ what the end result should look like and behave like under all UA scenarios. I’m persisting with it.

    Admittedly I’m a UX/UI Product designer, so I really have no care whatsoever whether my code produces anything functional or even works at all. As long as it looks good, that’s my bit done.

  • @tja said:

    @TheDubbyLabby said:
    Phonegap is still a thing?

    I think, yes.
    But it's for WebApps, not native.

    PhoneGap or at least Cordova, can have native Audio access.
    We, at my company, are working on a Universal framework for years now.Although PhoneGap or Cordova is not the solution Because it use a lot of web technologies, it could be par of the complete solution as you have access to native view and native apis.
    Our Framework although is still not ready for production, (maybe a year or more).
    It’s based on a Urho3D engine, Cordova, Q-Audio DSP library and more.
    That means It’ll have a full permissive open source licence.
    Anyway we’ll be happy if anyone is interested to help us...

  • @McD, many thanks for your reply!

    I hear the recommendation to use HTML/JS/CSS again and again, also that the performance is good enough and there there are enough ways to get this running on all platforms.

    But, for example, i could not create a musical App with this.
    And for features like Slide Over or Split View, it seems that i need to use Swift or Objective C anyways.

    But i do this as a hobby only.

    I simply cannot afford to learn everything.

    Therefor, my goal was to find something that run on as much platforms as possible with the best possible performance.

    And as i have zero experience in regards to such multi-platform questions, i am seeking advice.

    Choosing TypeScript or JavaScript, maybe with React Native may be the "best" way to get a multi-platform App running.

    But i am restricting myself and would need to learn more and more stuff.

    Performance-wide, i have the impression that Rust would be the best way to go.
    Also, it can be compiled to WebAssembly which would open additional platforms.

    But i need to be able to add some GUI, for multiple platforms.

    And my initial impression was that Xamarin and Flutter would be the best for this.

    Flutter is not yet there, as it seems.
    So i could wait, which may be fine.

    But i will also check out Xamarin to get a hands-on experience.

    React Native ... as much as i get recommendations for it, would most probably not suffice for everything and i would need to add more and more stuff.
    I am not sure that i could do this, finally.
    It may cost too much time and effort and also cause burn-out.

    But i am open ears, of course.

    Thanks a bunch

  • @cp3 , this was a long reply with many informations, many thanks!

    And yes, i fear that my time will not be enough or that i need to open too many topics to get somewhere.

    Therefor, i am seeking one elegant way that allows for everything: Performant Apps for many or most platforms.

    Currently, i am split between Flutter (and also waiting for it) and Xamarin (but first i need to check it out) ..

    But the latest information i got about Swift may even be better!

    If Swift will be supported on more platform, esp. Windows, this may be everything i need. It would be performance on all platforms and i only need to learn one language / framework.

    So observing Swift and waiting for things to come would be valid too.

    And Swift could most probably fast enough for everything, besides some low level stuff which may require to go down to Objective C, from what i read.
    But this is still less possible topics than JavaScript, React Native, HTML, CSS and Swift too.

    But i could not start with Swift easily, as i prefer to stay on my Windows PC.
    You see, no easy way to decide for me :smile:

    I cannot run in one direction and then later make a turn to run in a different direction.

    As i wrote above, my heart want' s me to start with Rust.
    But how to couple this with a GUI, even on multiple platforms?

    I had the hope, that people on the forum already made similar decisions.
    We are a versatile bunch :smiley:

    And yes, your reply was very useful, thanks!

  • edited June 2020

    @tja

    Check Cordova https://cordova.apache.org/ ...

    i'm playing with it some time and it's really perfect... you develop whole app basically using HTML/CSS/Javascript and then you compile/deploy it to iOS, Android or Windows Mobile or WebBrowser app (or all of them)

    It has plethora of plugins which are working as wrappers for calling native code directly from javascript ...

    It's really great for anything except of realtime audio apps, thanks to fact you're developing app in HTML/CSS/JS it's super fast and easy to debug, and most of plugins for accessing things like camera, device storage and stuff like that are cross platform somyou don't need take a care about comparibility - your app will work on both Android and iOS

    For music apps, i would choose C++ in case you have experience with it and JUCE.

    Even if you choose Swift - for realtime audio part of code you will still need write C/C++ code because it is needed for non-blocking audio thread operations (in that case Swift is for all UI and non-realtime stuff, and then realtime DSP code written in C is bridget to Swift code using ObjectiveC adapter class.

    Regarding frameworks - some best iOS apps are using JUCE (Gadget for example)

  • @u0421793 , thanks for your reply.

    Very interesting that you also use Flutter.
    I am very curious to hear more :smile:

    I am quite the opposite, i never ever created any UI / GUI.

    I wrote low level library that would be call by binaries for overload to change things for binaries.

    Maybe this explains why i am interested in Rust :blush:

  • @Jeezs , i simply knew that some people on the forum have their fingers in similar topic :smile:
    Thanks for the information.

    I also heard "Cordova" several times already, so i think that i need to have a look at it.
    Thanks a bunch!

    I don't think that i could be useful for your project, though.

  • Unless Apple decides to make SwiftUI multi-platform, Swift is going to be a hard road for any cross-platform GUI plans you have. Personally, I don't see Apple doing that. But, we'll see.

  • @dendy , many thanks.

    Another mention of Cordova.

    I will have a look at this.

    But ... i am hestitating :D
    For the above mentioned reasons.

  • @wim said:
    Unless Apple decides to make SwiftUI multi-platform, Swift is going to be a hard road for any cross-platform GUI plans you have. Personally, I don't see Apple doing that. But, we'll see.

    I was referring to @Jocphone

    https://www.infoq.com/news/2020/05/swift-5-3-windows-linux/

    Sounds valid, or?

  • wimwim
    edited June 2020

    @tja said:

    @wim said:
    Unless Apple decides to make SwiftUI multi-platform, Swift is going to be a hard road for any cross-platform GUI plans you have. Personally, I don't see Apple doing that. But, we'll see.

    I was referring to @Jocphone

    https://www.infoq.com/news/2020/05/swift-5-3-windows-linux/

    Sounds valid, or?

    Yes, sounds valid. But read again the third paragraph from the end. Without SwiftUI, building a cross-platform GUI would be difficult. There could be open-source cross-platform GUI frameworks that can be used with Swift. I haven't checked, but also haven't heard anything mentioned.

    I kind of doubt Apple will release SwiftUI, but I could be wrong.

  • wimwim
    edited June 2020

    BTW, if you want to mess with Swift and still stay on your PC, its pretty easy to run Linux in VirtualBox or other virtual machine host software.

  • There's no perfect solution for this. Really you have to decide what it is you're trying to do, what your priorities are and pick the framework that best fits them. There is no solution that works for performance, and cross platform and native feel. You're going to have to give something up, and it's part of the engineer's job to work out what you can give up.

  • How about the Audiokit framework? Although I suppose it doesn't apply if the app you want to develop isn't audio related.

    https://audiokit.io/

  • @wim said:
    BTW, if you want to mess with Swift and still stay on your PC, its pretty easy to run Linux in VirtualBox or other virtual machine host software.

    With Swift?

    Or did you mean Rust?

  • @cian said:
    There's no perfect solution for this. Really you have to decide what it is you're trying to do, what your priorities are and pick the framework that best fits them. There is no solution that works for performance, and cross platform and native feel. You're going to have to give something up, and it's part of the engineer's job to work out what you can give up.

    Yes, that's my current impression.

    But i still have some options:

    1. Looking at Xamarin.
    2. Waiting for Flutter to reach Windows (going to check the current state today or tomorrow).
    3. Waiting for Swift to reach Windows.
    4. Or just starting with Rust, without any GUI at all and just waiting for any multi-platform solution for this.

    2 seems promising, as is 3.
    But for both i need to wait.

    Meanwhile i can check out Xamarin.
    And if that is not my thing, i can decide to use Cordova or React Native with WebApps ...

    Or go the Rust route instead.

Sign In or Register to comment.