Loopy Pro: Create music, your way.

What is Loopy Pro?Loopy Pro is a powerful, flexible, and intuitive live looper, sampler, clip launcher and DAW for iPhone and iPad. At its core, it allows you to record and layer sounds in real-time to create complex musical arrangements. But it doesn’t stop there—Loopy Pro offers advanced tools to customize your workflow, build dynamic performance setups, and create a seamless connection between instruments, effects, and external gear.

Use it for live looping, sequencing, arranging, mixing, and much more. Whether you're a live performer, a producer, or just experimenting with sound, Loopy Pro helps you take control of your creative process.

Download on the App Store

Loopy Pro is your all-in-one musical toolkit. Try it for free today.

Calling developers: anyone else notice some fundamental Core MIDI changes in iOS 14?

edited December 2020 in App Development

Amidst all the excitement about new Emojis and missing AudioUnit icons, this one sneaked past me...

rant begins

For example, it looks like the intention is to replace MIDISend() and MIDIReceived() with MIDISendEventList() and MIDIReceivedEventList(). Fair enough, I guess, but...

More worryingly, I'm seeing crashes on iOS 14.2 (*) calling MIDISend() where you'd normally get a legit error / OSCode on < 14.

Also, the former deals with PacketLists, the latter, with EventLists so trying to support multiple iOS versions and using the non-deprecated functions on iOS 14 or above, is... well, let's just say it's non-trivial. At least to me.

I think I'm maybe at the point where I'm spending 30-40% of my development time fixing or working around stuff that Apple break or deprecate...

When that hits 50/50, I'm done with music apps - I'll go back to tarting-up table views for banks for 5x the money... :smile:

(*) Problem seems to be traversing the "legacy packet list" Hmmm...

rant ends

«13

Comments

  • Yes, I've seen it mentioned on forums a couple of times by other developers. So it's not just you.

    Also, yeah.. developing and supporting standalone audio apps on iOS is increasingly becoming a massive pain. I can't wait for the day we can simply ship AUv3 plugins and no longer waste time with all these ancient standalone connectivity standards.

  • @moodscaper said:
    I think I'm maybe at the point where I'm spending 30-40% of my development time fixing or working around stuff that Apple break or deprecate...

    ...you forgot dealing with IDs, certificates, provisioning profiles, "WhyDoesTheAppUseTheLocalNetwork" descriptions and entitlements 😂

  • edited December 2020

    @SevenSystems - true indeed, and in my limited experience, all of that stuff is much more of a pain when you work on business type apps and / or have more than one developer in the team, so I can be thankful that doesn't apply to me for the time being.

    What I don't understand is how they came to prioritise this change for iOS 14. Handling MIDI on AUv3 is totally different, right? And AUv3 is THE FUTURE so why futz around with this old crap? So now we have at least three data structure representations of a MIDI message?

    Reminds me of AudioUnit, AUAudioUnit and AVAudioUnit...

    I guess I'll just have to suck it up and update my definition of deprecated to mean wilful destruction :smile:

  • And people wonder why apps disappear from the app store... :D

    Seriously chaps - I respect all of you who keep going developing apps under the conditions I've read about on this forum. Kudos!

  • Gene De Lisa wrote an interesting blog on this very topic recently:

    rockhoppertech.com/blog/core-midi-midipacket-midipacketlist-and-builders

    Thanks @Hypervox ! :smile: There are easier ways to make a living in iOS app development, that's for sure!

  • Why are you using midi?

    Don’t you realise your app won’t actually make any sound so everybody will refund it?

  • @u0421793 - um....

    1) because MIDI was feature requested by users
    2) I would realise that if it didn't, but it does

    :smile:

  • edited December 2020

    This is the cool kids’ room.

    @u0421793 , what are you doing in here?

    😉

  • @CracklePot said: This is the cool kids’ room.

    I'll get my coat... :smile:

  • Support the latest iOS version only and if the app is 'worthy' users will update their iOS/iPad OS as well...

  • @Samu - you're kidding right? :smile: I get messages every other week demanding moodunits support iOS < 13.0 which is the current minimum version.

    Plus event list constructors on 14.2 is broken (as per Gene's blog) so go figure... :neutral: It's a hot mess is what it is, and latest sure as hell ain't greatest from a developer perspective.

  • edited December 2020

    @moodscaper said:

    @CracklePot said: This is the cool kids’ room.

    I'll get my coat... :smile:

    Your going to leave?
    Oh, you’re just too cool, eh? (aka ‘cold’)
    In that case, the coat would help.
    But...
    Dude, this is your room.
    Just change the thermostat, but please don’t leave!
    😎

  • Only joking. I'll get my coat is a reference to a UK comedy show (The Fast Show) that may be lost on an international audience :smile:

  • @moodscaper said:
    Only joking. I'll get my coat is a reference to a UK comedy show (The Fast Show) that may be lost on an international audience :smile:

    Got the reference though it's been awhile.

  • edited December 2020

    I'm not sure I'm getting all this "Builders" and "Iterators" bullshit. It's just a damn flat byte array, why can't I do normal pointer arithmetic, which I'm sure is 100000000x faster because it directly translates to CPU instructions? Why does everything nowadays have to be wrapped in 10 layers of interfaces?

    (sorry, I'm REALLY oldschool in my ways... I know...)

    (It's doubly funny because the "guys at MIDI" back in the 80s ripped their ass off to make MIDI as optimized and space-efficient as possible so that an entire orchestra arrangement fits into one millibyte, but now all this millenial builders and iterators stuff comes along :D )

    (as always, take everything with a grain of salt, but not too many grains!)

  • @Hypervox said:
    And people wonder why apps disappear from the app store... :D

    Seriously chaps - I respect all of you who keep going developing apps under the conditions I've read about on this forum. Kudos!

    👆🏻

  • I'm just starting to look at doing some controller side things with MIDI, bluetooth, WiFI, etc. So, haven't delved in to this change yet and it's been a long time since I wrote a MIDI app on macOS, but it looks like these new API's are centered around MIDI 2.0 and coincide with the move to eliminating kexts from the systems.

    It looks like MIDI 2.0 is only going to work with 14.0+. It looks like this is going to be a dividing line for CoreAudio and CoreMIDI on both iOS and macOS. It seems to me like this is a good time to move support up to 14.0 and greater -- possibly painful, but probably worth it in the end.

  • @SevenSystems said:
    Why does everything nowadays have to be wrapped in 10 layers of interfaces?

    It's called Paranoid Security Syndrome ;)

    But yea, it's getting a bit ridiculous like the timer on the Apple Watch that keeps track on how long you should wash hands, sooner or later they'll bake in a 'wank detector' with endurance exercises or some other stupid sh*t like that.

    Oh well, things are the way they are...

  • @Samu said:

    @SevenSystems said:
    Why does everything nowadays have to be wrapped in 10 layers of interfaces?

    It's called Paranoid Security Syndrome ;)

    But yea, it's getting a bit ridiculous like the timer on the Apple Watch that keeps track on how long you should wash hands, sooner or later they'll bake in a 'wank detector' with endurance exercises or some other stupid sh*t like that.

    Oh well, things are the way they are...

    Check out this article that just came out today, https://arstechnica.com/gadgets/2020/12/iphone-zero-click-wi-fi-exploit-is-one-of-the-most-breathtaking-hacks-ever/

    This is why Apple is moving the drivers out of the kernel and this sort of thing is why direct access to things that interact with drivers is being wrapped up.

    If you ask me, these sorts of changes are long overdue. Sure, on an embedded system that doesn't store people's personal data you can play with things they way you want. You can't to it on general purpose computers anymore.

    Being able to write stuff at a low level is certainly more fun. That's a big part of the reason I've been moving most of my audio dev to embedded systems. I recommend it to anyone. It's lots of fun and many fewer headaches.

  • edited December 2020

    @Samu said:

    @SevenSystems said:
    Why does everything nowadays have to be wrapped in 10 layers of interfaces?

    It's called Paranoid Security Syndrome ;)

    That's another thing I should mention... after spending 50% of nowadays' development time with certificates, provisioning profiles, entitlements and "WhyDoIUseThis" explanations, a further 30% is spent with somehow inventing hacks to get around the 10 other new security limitations that the last iOS version has introduced.

    Yeah, I get it, security is important. Maybe this whole "one device for everything from banking to sports to music making" thing isn't working out somehow...

    But yea, it's getting a bit ridiculous like the timer on the Apple Watch that keeps track on how long you should wash hands, sooner or later they'll bake in a 'wank detector' with endurance exercises or some other stupid sh*t like that.

    Oh well, things are the way they are...

    I'm very careful with my opinions on this stuff normally because I realize the world has been getting extremely paranoid in the past two decades or so (for my taste) -- but everyone seems to accept it all as normal. It doesn't stop with computery stuff. The "LETHAL DANGER" signposts next to every creek and puddle of mud are a symptom of the same societal illness.

    (my personal bottom line is: Life is dangerous. That's NORMAL. Absolute safety doesn't exist and if it did, it would make life miserable). But I think that's also a very oldschool attitude :) (well I'm 41, so...)

  • @SevenSystems said:

    (my personal bottom line is: Life is dangerous. That's NORMAL. Absolute safety doesn't exist and if it did, it would make life miserable). But I think that's also a very oldschool attitude :) (well I'm 41, so...)

    I agree with that and I'm 48...
    Nowadays people want to blame someone else for their own stupidity :D

  • @Samu said:

    @SevenSystems said:

    (my personal bottom line is: Life is dangerous. That's NORMAL. Absolute safety doesn't exist and if it did, it would make life miserable). But I think that's also a very oldschool attitude :) (well I'm 41, so...)

    I agree with that and I'm 48...
    Nowadays people want to blame someone else for their own stupidity :D

    @NeonSilicon interesting Ars Technica article, thanks! That kind of proves the point -- you can add dozens of confirmation dialogs and API layers and stuff, but more important would be to hire smarter or more focused developers (or QA testers) for privileged code... :) (I know, easier said than done.)

  • I remember when MIDI came out. I'm older than all of the above :smile:

    I remember marvelling at its simplicity, and efficiency in terms of data structure usage, message byte, data 1, data 2, blah blah. Then Apple came along and made it hard. Twice.

    AUv3?

    Thrice? :smile:

  • @moodscaper said:
    I remember marvelling at its simplicity, and efficiency in terms of data structure usage, message byte, data 1, data 2, blah blah.

    Not to mention the genius "running status" and the use of Bit 7!

  • @SevenSystems :smile: quirky, but at least it worked. Mostly. Well, took a couple of decades to get it working, but... y'know...

  • @SevenSystems said:

    @Samu said:

    @SevenSystems said:

    (my personal bottom line is: Life is dangerous. That's NORMAL. Absolute safety doesn't exist and if it did, it would make life miserable). But I think that's also a very oldschool attitude :) (well I'm 41, so...)

    I agree with that and I'm 48...
    Nowadays people want to blame someone else for their own stupidity :D

    @NeonSilicon interesting Ars Technica article, thanks! That kind of proves the point -- you can add dozens of confirmation dialogs and API layers and stuff, but more important would be to hire smarter or more focused developers (or QA testers) for privileged code... :) (I know, easier said than done.)

    The hack is really pretty impressive. I think that the truth is that no matter how good the system devs are there are devs on the other side that are just as good. The only workable solution is to re-engineer the OS itself to get everything you can out of privileged execution. That seems to be the main focus of most of what is happening with the moves in iOS 14 and macOS 11. I think it's going to work out to be a good thing in the end. I just wish they would put some effort into documenting the freaking API's.

  • @moodscaper said:
    I remember when MIDI came out. I'm older than all of the above :smile:

    I remember marvelling at its simplicity, and efficiency in terms of data structure usage, message byte, data 1, data 2, blah blah. Then Apple came along and made it hard. Twice.

    AUv3?

    Thrice? :smile:

    I think I'm even older. I remember when MIDI only ran on vacuum tubes. (Yes, I did just make that up. Though, I am pretty old.)

    Apple gave us RTP-MIDI. That's got to count for something. I actually prefer working on AUv3 over the old AU spec, but again, I'd really like some decent docs for it. It's still better than the old days of totally spec-less VST.

  • @moodscaper said:
    For example, it looks like the intention is to replace MIDISend() and MIDIReceived() with MIDISendEventList() and MIDIReceivedEventList(). Fair enough, I guess, but...

    More worryingly, I'm seeing crashes on iOS 14.2 (*) calling MIDISend() where you'd normally get a legit error / OSCode on < 14.

    Also, the former deals with PacketLists, the latter, with EventLists so trying to support multiple iOS versions and using the non-deprecated functions on iOS 14 or above, is... well, let's just say it's non-trivial. At least to me.

    I've had two crash reports of this type recently, both on iOS 14.2, and was baffled by them.

    The trace goes:

    0 CoreMIDI MIDI::Packetizer::add
    1 CoreMIDI MIDI::LegacyPacketList::traverse
    2 CoreMIDI MIDI::LegacyPacketList::traverse
    3 CoreMIDI MIDIProcess::WriteOutput
    4 CoreMIDI MIDISend

    On both occasions it happened when the app was sending a MIDI Stop 0xFC in response to a user action. I can't recreate it, and I've wasted a lot of time trying.

  • Hey @AlanC3 - been tearing my hair out on this too - crashing in same area, in my case, I'm just sending a single MIDI packet / message to reset aftertouch.

    Exactly the same trace. I guess they have some clunky code in place to convert packet lists to event lists or something like that...

    Funnily enough, I was just about to update on this thread as I've been digging around this morning.

    I read on the JUCE forum that allegedly this issue is fixed in iOS 14.3.

    Core Audio team really do seem to have The Reverse Midas Touch these days don't they? :neutral:

Sign In or Register to comment.