Making Mac Plugins

How to export a SynthEdit plugin to run on Mac OSX

Get latest SynthEdit

Export-Plugins

Export your plugin using the 'Export Plugins' 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, check the file sem list.txt (in Documents\SynthEdit Projects\Mac Export), 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.9 "Mavericks" or better. "Mavericks" was shipped on Macs built since 2014.

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' that 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 gets you an Apple Developer Account. This costs money.

Alternatively, you can 'self-sign' your plugin. This is free but the tradeoff is that the plugin will run only on your own computer. To self-sign a plugin use the string "-" as the certificate name. 

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 your 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

Code signing errors

If you receive the error: "resource fork, Finder information, or similar detritus not allowed" you can try cleaning the components with:

xattr -lr /Library/Audio/Plug-Ins/Components/MyPlugin.component