ビルドに成功しても、直ちに実行が終了してしまう。【日本語】

https://docs.juce.com/master/tutorial_create_projucer_basic_plugin.html
上のページを参考にXcodeで起動してみました。
ビルド成功!と表示され、エラーも発生していないのですが、直ちにアプリケーションが終了してしまいます。

コードの問題なのか、それともProjucerの設定の問題なのか。
C++にもJUCEにも慣れないのでよく分かりません。
JUCEの他のチュートリアルのzipファイルをインストールしてそれを実行し、Windowが表示されるので、Xcode自体の問題ではないことは確かです。

Project typeはAudio Plug-in。Plugin FormatsはVST3。
Plugin CharacteristicsはPlugin MIDI Input,Plugin MIDI Outputにチェックを入れています。

どうしたら良いでしょうか?

//MainComponent.h
#pragma once
#include <JuceHeader.h>
class MainComponent  : public juce::Component
{
public:
    //==============================================================================
    MainComponent();
    ~MainComponent() override;

    void paint (juce::Graphics&) override;
    void resized() override;

private:
//    juce::Component component;
    JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainComponent)
};

//MainComponent.cpp
#include "MainComponent.h"
//#include <JuceHeader.h>

//==============================================================================
MainComponent::MainComponent()
{
    juce::Logger::outputDebugString("Stirng");
    setSize (600, 400);
}

MainComponent::~MainComponent()
{
}

//==============================================================================
void MainComponent::paint (juce::Graphics& g)
{
    
    // (Our component is opaque, so we must completely fill the background with a solid colour)
//    addAndMakeVisible(component);
    juce::Logger::outputDebugString("Stirng");
    g.fillAll (getLookAndFeel().findColour (juce::ResizableWindow::backgroundColourId));

    g.setFont (juce::Font (16.0f));
    g.setColour (juce::Colours::grey);
    g.drawText ("Hello World!?", getLocalBounds(), juce::Justification::centred, true);
    juce::Logger::outputDebugString("Stirng");
}

void MainComponent::resized()
{
//    component.setBounds(getWidth() / 2 - 50, getHeight() / 2 - 50, 100, 100);
    // This is called when the MainComponent is resized.
    // If you add any child components, this is where you should
    // update their positions.
}

#include <JuceHeader.h>
#include "MainComponent.h"

//==============================================================================
class NewProjectApplication  : public juce::JUCEApplication
{
public:
    NewProjectApplication() {}
    const juce::String getApplicationName() override       { return ProjectInfo::projectName; }
    const juce::String getApplicationVersion() override    { return ProjectInfo::versionString; }
    bool moreThanOneInstanceAllowed() override             { return true; }

    //==============================================================================
    void initialise (const juce::String& commandLine) override
    {
        juce::Logger::outputDebugString("Stirng");
        // This method is where you should put your application's initialisation code..
        juce::Logger::outputDebugString(juce::String(getApplicationName()));
        mainWindow.reset (new MainWindow (getApplicationName()));
//        mainWindow->setVisible(true);
      
//        mainWindow.reset (new MainWindow ("RectangleAdvancedTutorial", new projectName, *this));
//        mainWindow.reset (new MainWindow  ("T", new MainComponent , *this) );
    }

    void shutdown() override
    {
        // Add your application's shutdown code here..
        juce::Logger::outputDebugString("Stirng");
        mainWindow = nullptr; // (deletes our window)
    }

    //==============================================================================
    void systemRequestedQuit() override
    {
        // This is called when the app is being asked to quit: you can ignore this
        // request and let the app carry on running, or call quit() to allow the app to close.
//        quit();
        juce::Logger::outputDebugString("Stirng");
    }

    void anotherInstanceStarted (const juce::String& commandLine) override
    {
        // When another instance of the app is launched while this one is running,
        // this method is invoked, and the commandLine parameter tells you what
        // the other instance's command-line arguments were.
    }

    //==============================================================================
    /*
        This class implements the desktop window that contains an instance of
        our MainComponent class.
    */
    class MainWindow    : public juce::DocumentWindow
    {
    public:
        MainWindow (juce::String name)
            : DocumentWindow (name,
                              juce::Desktop::getInstance().getDefaultLookAndFeel()
                                                          .findColour (juce::ResizableWindow::backgroundColourId),
                              DocumentWindow::allButtons)
        {
            setUsingNativeTitleBar (true);
            setContentOwned (new MainComponent(), true);

           #if JUCE_IOS || JUCE_ANDROID
            setFullScreen (true);
           #else
            setResizable (true, true);
            centreWithSize (getWidth(), getHeight());
           #endif

            setVisible (true);
        }

        void closeButtonPressed() override
        {
            // This is called when the user tries to close this window. Here, we'll just
            // ask the app to quit when this happens, but you can change this to do
            // whatever you need.
            JUCEApplication::getInstance()->systemRequestedQuit();
        }

        /* Note: Be careful if you override any DocumentWindow methods - the base
           class uses a lot of them, so by overriding you might break its functionality.
           It's best to do all your work in your content component instead, but if
           you really have to override any DocumentWindow methods, make sure your
           subclass also calls the superclass's method.
        */

    private:
        JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MainWindow)
    };

private:
    std::unique_ptr<MainWindow> mainWindow;
};

//==============================================================================
// This macro generates the main() routine that launches the app.
START_JUCE_APPLICATION (NewProjectApplication)

と書いているのですが、ソースコードを見る限り、Project type が Application の時に通常使うソースコード構成になっています。そして、VST3プラグインを構成するのに必要なソースコード(関数の実装)が不足しているという状況になっています。

@Shiki2 さんが作りたいのは「オーディオプラグイン」というプロジェクトタイプなのに、張り付けたソースコードは「スタンドアロン・アプリケーション」というプロジェクトタイプの構成のソースコードになってしまっています。
ちなみに、ソースコードのコンパイルが通る理由は、C++のソースコードとしては問題がないからです。

こういう状況では、最初からプロジェクトを作り直す方が賢明です。
プロジェクトを作成する時に、Projucerの新規作成画面で[Plug-In]→[Basic]を選択してください。

===========
さて、私は日本人のJUCEユーザーです。
@Shiki2 さんがよろしければZoomなどでハンズオンでお助けすることもできます。日本語でお話しできます。
ぜひご検討ください。

また、JUCEの入門については、私が書いた記事を参考にしていただければ幸いです。

ちなみに、Projucerの新規作成画面で「オーディオプラグイン」のプロジェクトを作成するには、次の画像のように [Plug-In]→[Basic] を選択してください。