iOS AUv3 size negotiation


Ok, I’ll try your way to go. Nevertheless, I have the feeling, that there are two different approaches. Yours seems to replace the AudioProcessorEditor::standardConstrainer with your own one.
My way is to adjust the standardConstrainer with setResizeLimit () and setResizable (). In my opinion both approaches should work.

@t0m Could you maybe comment this?


You’re correct: if you haven’t created an explicit constrainer and assigned it to the resizer, then this will not work. I don’t know why that is. The entire size negotiation is a bit of a hack, as it devolves from an AUv3 method for asking whether the plugin wants a keyboard, supportsHostMIDIControllerPresence, which is lame for an effect. But it’s worth noting that AUv3 is very much a moving target, so this sort of nonsense is to be expected.

EDIT: I think I see why it doesn’t work. If you just adjust the standard constrainer, the resizer doesn’t have a pointer to it. The negotiation looks for a resizer, and then asks that resizer for the constrainer it points to. If one hasn’t been assigned, the fallthrough works in the standard method, but not the size negotiation. You should make one anyhow, because you have more control over the sizing and suchlike.


Unfortunately no success, yet (I now followed exactly your approach). I’ll go on tomorrow.


I’m having the same issue with Garageband. Cubasis and Audiobus show a full size option but nothing I do, including the above tips, makes the full size option appear in GB. I’ve tried numerous constrainer bounds and aspect ratios.

I tried setting a breakpoint in getSupportedViewConfigurations to see what Garageband is looking for in terms of size, but it never triggers, so it appears that method isn’t being called. Is there something I have to set in order to have getSupportedViewConfigurations called?


Okay. I think there might be some confusion. Cubase and AudioBus don’t do a negotiation. They just full-screen. They’ll fullscreen anything. Ditto AUM and BeatMaker 3. (Go ahead and try it. Hardly any commercial AUv3s have size negotiation, yet all of them will fullscreen in those hosts.) The negotiation is really only for GarageBand at this point, and as far as I’m aware, only for instruments. I do not believe that effects can be fullscreened in GarageBand, but I’m willing to accept empirical evidence to the contrary.

One could test this by making a quicky instrument with the code I provided above. Also note that the minimum build target for this entire process is iOS11.

I get around this entire nonsense by building the UI how I want it (in our case, identical to our desktop versions, for the most part) then adding a button to slide the entire thing up. This lets one use the full UI in hosts that support it, or the natural AUv3 size in hosts that don’t, or for convenience’s sake. e.g…

Versus the same plug in AUM…


@crandall1 It was the deployment target setting iOS 11!!!
It was on 10. Thank you for highlighting this!

Your plugin looks great. Cool idea with the up/down shifting.


iOS 11 deployment fixed it for me as well. Thanks for all of the info.


I’m just sorry I didn’t mention that at the top; would have saved you both a lot of head-scratching. :slight_smile:

But yes, AUv3 size negotiation didn’t appear until iOS 11. (Virtually all the good features of AUv3 are iOS 11 or greater. Prior to that, it’s just stupid rectangular turtles all the way down.)


Hi, anyone managed to get constrain limits working on AUM? I’ve tried examples shown by @crandall1 above, but don’t seem to have any effect.



Sorry, just saw this.

As I mentioned above, constrain limits do not work in iOS AUv3. The plugin has no control over the sizing, other than telling the size negotiation what your range of available sizes is (and this is only to allow fullscreen in GarageBand. It serves no other purpose.)

Once again:

  1. Set your resizer min, max, and aspect ratio in Editor’s constructor, and attach the constrainer to the Editor.
  2. At the top of resize(), ask for the width and height you’ve been handed. (I suggest using an arbitrary scaling, and draw everything off that. e.g. myX = getWidth() * 0.01)
  3. Draw everything.
  4. Profit.

You can not tell an iOS AUv3 anything about the size otherwise. You are strictly reactive, and have to take in to account what you’ve been handed. Look at our (Audio Damage) or Bram Bos’ more recent products like Ruismaker Noir to see how to deal with this in various ways.