Sequoia - Cannot drop MIDI onto Logic

Can you supply some more information please:

  • Which Logic version are you testing?
  • On which platform, Intel/Arm?
  • If Arm, are you running under Rosetta?
  • Are you building AU or AUv3?
  • Which directory are you using to store the intermediate MIDI file?
  • Have you enabled macOS security technologies such as entitlements, sandboxing, or hardened runtime?

I tested the following plugin project as an AU on Logic 11.0.1 Arm, macOS 15.0.1. This is using the AudioPlugin CMake example, so it doesn’t have any extra entitlements/sandboxing. The plugin is able to drop a MIDI snippet into the timeline as expected:

class AudioPluginAudioProcessorEditor final : public juce::AudioProcessorEditor,
                                              public juce::DragAndDropContainer
{
public:
    explicit AudioPluginAudioProcessorEditor (AudioPluginAudioProcessor&);

    void paint (juce::Graphics& g) override
    {
        g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));

        g.setColour (juce::Colours::white);
        g.setFont (15.0f);
        g.drawFittedText (juce::SystemStats::getJUCEVersion(), getLocalBounds(), juce::Justification::centred, 1);
    }

    void mouseDrag (const juce::MouseEvent&) override
    {
        const auto f = juce::File::getSpecialLocation (juce::File::userDesktopDirectory).getChildFile ("drag.midi");

        {
            constexpr auto ticks = 96;

            juce::MidiFile midiFile;
            midiFile.setTicksPerQuarterNote (ticks);

            juce::MidiMessageSequence sequence;
            sequence.addEvent (juce::MidiMessage::noteOn (1, 64, 0.5f).withTimeStamp (0));
            sequence.addEvent (juce::MidiMessage::noteOff (1, 64, 0.5f).withTimeStamp (ticks));

            midiFile.addTrack (sequence);

            juce::FileOutputStream stream { f };
            stream.setPosition (0);
            stream.truncate();

            midiFile.writeTo (stream);
        }

        performExternalDragDropOfFiles ({ f.getFullPathName() }, false, this, {});
    }

private:
    AudioPluginAudioProcessor& processorRef;

    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AudioPluginAudioProcessorEditor)
};

input