Making Mac Plugins

How to export a SynthEdit plugin to run on Mac OSX

Get latest SynthEdit 1.4 (64-bit)

Export-as-VST3

Export your plugin using the VST3 option in the export dialog box. In addition to a VST3 plugin, SynthEdit will export a Mac Audio-Unit plugin. The Audio Unit will be exported to the folder ...\Documents\SynthEdit Projects\Mac Export\ , The plugin will be a folder (Mac users call these folders "bundles") named for example like MySynth.component.

After you've exported, open the exported MySynth.component folder and check the file sem list.txt, this lists all the modules (SEMs) needed to run this plugin on Mac. The file will indicate which Mac modules have been successfully found and which were not. If you don't have Mac-compatible modules, the Mac plugin will not function correctly.

IMPORTANT: A Mac plugin MUST use Mac-specific modules (SEMs). SynthEdit will automatically choose the right type of module,  but to use a module in a Mac plugin please ensure that you have installed not only the Windows version but also the Mac version.

You install 3rd-party Mac modules in:
C:\Program Files\Common Files\SynthEdit\modules_mac

SynthEdit ships with Mac versions of most standard modules. These are stored in:
C:\Program Files\SynthEdit 1.4\mac_assets\modules

Not all 3rd-party modules are available in Mac format, it depends on the individual developer. Some may not have access to a Mac.

Copy plugin to Mac

Copy the entire MySynth.component bundle (folder) to your Mac, place it in folder /Library/Audio/Plug-Ins/Components/ on your Mac.

Copy presets to Mac

During export, SynthEdit will create a presets folder, e.g. ...\Documents\SynthEdit Projects\Mac Export\Presets\MyVendorName\MySynth\, copy this folder to your Mac to the user's ~/Library/Audio/Presets/ folder. for example on my mac the full path is /Users/Jeff/Library/Audio/Presets/Jeff McClintock/PD303/

Note that the Library folder on a Mac is a hidden folder. More information: https://www.macworld.com/article/2057221/how-to-view-the-library-folder-in-mavericks.html

To run your Audio Units you will need an Intel Mac computer running operating system version 10.8 "Mountain Lion" or better. "Mountain Lion" was shipped on Macs built since 2012.

If possible it's preferable to have a machine capable of running macOS Version 10.11 "El Capitan", which is the minimum to be able to run the new Version 3 Audio Unit spec. SynthEdit may move to AU Version 3 in a future update. "El Capitan" was shipped on Macs built since 2015.

Limitations on Mac plugins

Parameters (e.g. sliders and knobs) must not have an inverted range. For example, a typical slider with a minimum value of zero and a maximum of 10 will work fine on Mac, however, a Slider with a maximum of 0 and a minimum of 10 will fail to validate on a Mac. This was not a problem on Windows.

Using Plugins on macOS Catalina (V10.15.4) and later

macOS now requires applications and plugins to be 'notarized', which means they need a digital signature to identify who made them. Plugins that are not notarized are blocked from running. You will see a message like "Plugin cannot be opened because the developer cannot be verified". You can either work around these restrictions or officially notarize your plugin to allow it to be installed anywhere without hassle.

Working around Mac security requirements

The following two methods may help get a plugin running on macOS Catalina. If the first doesn't work, try the second.

  1. In your DAW, hit <Cancel> to the message, then open System Preferences/Security & Privacy, you should see the plugin mentioned at the bottom. Click 'Allow Anyway' to enable it.
  2. Open Terminal. Type the following three commands, hitting <return> in between.
    sudo spctl --master-disable
    auval -a
    sudo spctl --master-enable
Notarizing your plugin

Notarizing a plugin provides an assurance to end-users that the plugin can be trusted not to perform malicious actions. There are two main steps: 1 - code-signing, 2 - notarizing with Apple.

Code-signing protects against anyone modifying your plugin after it leaves your hands. If anyone modifies the plugin, the code-signing is broken and macOS will refuse to install it.

Notarization involves sending your plugin to Apple for verification. Apple will run some basic tests and check for malware. If Apple is satisfied they will approve the plugin by adding it to their list of 'safe' software. macOS can use this online list anytime a user installs your plugin to verify that the plugin is trusted. Apple will also send you a 'ticket' than can be 'stapled' to your installer. The purpose of the ticket is to provide an offline verification that the installer is trusted. 'stapling' is optional.

 Code Signing example

The following command in the macOS terminal shows an example of how to code sign a plugin.

codesign -s "Developer ID Application: SynthEdit Limited (87KAYFXDS5)" "/Users/jeffmcclintock/Desktop/MySynth.component" --timestamp --deep

Notarization example

The following command in the macOS terminal shows an example of how to notarize a plugin.

xcrun altool --notarize-app -f "MySynth.component.zip" --primary-bundle-id com.Xvrk.audiounit.JQkl --username "jef@synthedit.com" --password "htww-pwjf-yfjd-hzip"

Code Signing - Breaking it down

codesign -s "Developer ID Application: SynthEdit Limited (87KAYFXDS5)" "/Users/jeffmcclintock/Desktop/MySynth.component" --timestamp --deep

What do all these commands mean?

codesign -s - This is the command that performs code signing. Type this part as-is.

"Developer ID Application: SynthEdit Limited (87KAYFXDS5)" - This is the name of the certificate that identifies you. Substitute your own certificate name here.

"/Users/jeffmcclintock/Desktop/MySynth.component" - This is the path of the plugin.  Substitute your own plugin here.

--timestamp - adds a timestamp to the signature. Mandatory. Type this as-is.

--deep - Signs not only the plugin but also the SEMs (modules) inside the plugin. Type this as-is.

Where do I get a Certificate?

Certificates are issued by Apple. To get one you need to sign up to the Apple Developer Program. This costs money.

more about obtaining a certificate

There are several types of certificates. To sign a plugin you need a "Developer ID Application" certificate. i.e. The name of the certificate MUST start with those words. Other types will sign OK, but won't pass the notarization step later.

To list you currently available certificates, type in the terminal: security find-identity

Notarization - Breaking it down

xcrun altool --notarize-app -f "MySynth.component.zip" --primary-bundle-id com.Xvrk.audiounit.JQkl --username "jef@synthedit.com" --password "htww-pwjf-yfjd-hzip"

What do all these commands mean?

xcrun altool --notarize-app -f - this is the terminal command that does the notarizing. Type this part as-is.

"MySynth.component.zip" - This is your plugin, zipped up. To 'zip' a plugin on macOS right-click the plugin, select "Compress". The plugin will be compressed and placed in your home folder.

Note: you will need to set the terminal to the same folder as the plugin. e.g. type

cd users/jeffmcclintock/Desktop/

--primary-bundle-id com.Xvrk.audiounit.JQkl - In bold is the identity of the plugin (JQkl) and vendor (Xvrk). Substitute the identity of your plugin. You can get this info by typing auval -a in the terminal (and looking for your plugin), or by looking inside your plugin for the file Info.plist

To look inside an Audiounit plugin, right-click, choose Show Contents.

--username "jef@synthedit.com" --password "htww-pwjf-yfjd-hzip" - In bold are the email and App-specific password to log into the Apple Developer notarization website. Substitute your own details.

How to get an app-specific-password

Other Notes

SynthEdit currently adds a text file to your plugin called sem list.txt. This file seems to cause notarizing to fail. This file is only for information and you can delete it before signing and notarizing. Future versions of SE will omit this file.