PlugIns directory. That one rule explains all three ways to run a plugin you built locally, and which of them a release build of TablePro would also accept. The dev script is the normal route; the other two are for when the signature check itself is in your way. See Plugin Development for writing the driver and Plugin Registry for publishing it.
Where plugins load from
PluginManager reads two directories on launch and treats them differently.
The version key goes first either way: a plugin whose
TableProPluginKitVersion falls outside the app’s compatible range is rejected before anything looks at its signature.
The signature check accepts one signer: the Apple team that signed the running app, which for a release is TablePro. Your own debug build accepts what your own Xcode signed for the same reason. Every other signature, ad-hoc signing and an unsigned bundle are refused, and nothing asks.
Do not reuse a built-in plugin’s bundle ID. Installing over one fails outright, and at discovery the higher build (CFBundleVersion) wins, with the built-in taking a tie and the losing user copy deleted from disk.
Install with the dev script
MyDriverPlugin.tableplugin under DerivedData and copies it into the user plugins directory. Relaunch TablePro to load it. Build from Xcode first: the script reads DerivedData, and a command-line xcodebuild writes to build/Debug instead, where the script never looks.
Bundle it into the app instead
A plugin embedded inPlugIns/ skips the signature check entirely, which is the shortest path when the team check is the thing in your way. Add the target to the app’s dependency list in apple/project.yml:
apple/scripts/generate-project.sh and build. XcodeGen puts the bundle in an Embed Dependencies copy phase with CodeSignOnCopy, so it is re-signed with your debug identity on the way in.
Skip the signature check
A Debug build skips signature verification altogether whenTABLEPRO_ALLOW_UNSIGNED_PLUGINS is set to 1. Set it under Product > Scheme > Edit Scheme > Run > Arguments, in the environment variables list.
This is the route for a bundle built on another machine or signed by another team. The bundle still has to be validly signed for dyld to load it at all. The escape hatch is compiled out of Release builds, so it cannot mask a signing problem that would reach a user.
When it does not load
The reason lands in a Plugin Installation Failed alert when installing, and in the banner in Settings > Extensions otherwise.
Once it loads and works, publish it through the Plugin Registry so users get a signed binary.

