This directory contains Xcode build configuration files for building Adobe Illustrator plugins on macOS.
Adobe Illustrator plugins require a PIPL (Plugin Property List) resource that tells Illustrator how to load and identify the plugin. On macOS, this resource is compiled from .r (Rez) files using Apple's Rez compiler.
Xcode handles PIPL compilation automatically, while CMake requires manual configuration. For the most reliable Mac builds, we recommend using Xcode.
mac/
├── xcconfig/
│ ├── AIPluginCommon.xcconfig # Common build settings
│ ├── AIPluginDebug.xcconfig # Debug configuration
│ └── AIPluginRelease.xcconfig # Release configuration
├── resources/
│ ├── PiPL.r # PIPL resource type definitions
│ ├── Plugin.r # Plugin PIPL resource template
│ └── Info.plist # Bundle Info.plist template
└── README.md # This file
- Copy the
xcconfig/andresources/directories to your plugin directory - In Xcode, go to Project → Info → Configurations
- Set Debug configuration to use
AIPluginDebug.xcconfig - Set Release configuration to use
AIPluginRelease.xcconfig
- Create new Xcode project (macOS → Bundle)
- Set bundle extension to
aip - Add your source files and NUXP sources
- Add the
.rresource files to your project - Configure using the xcconfig files
Each plugin needs its own resource file to define its PIPL. Create YourPlugin.r:
//========================================================================================
// YourPlugin Resource File
//========================================================================================
// Define your plugin name BEFORE including Plugin.r
#define PIPL_PLUGIN_NAME "YourPluginName"
// Include the base PIPL template
#include "Plugin.r"For HiDPI support, also create YourPlugin2x.r:
//========================================================================================
// YourPlugin HiDPI Resource File
//========================================================================================
#define PIPL_PLUGIN_NAME "YourPluginName"
// HiDPI resource definitions go here
// (Can be empty if you don't have HiDPI icons)The xcconfig files set these key paths (customize as needed):
| Setting | Default | Description |
|---|---|---|
NUXP_SDK_PATH |
$(PROJECT_DIR)/../sdk |
Path to Illustrator SDK headers |
NUXP_LIB_PATH |
$(PROJECT_DIR)/../lib |
Path to third-party libs (httplib, json) |
NUXP_SRC_PATH |
$(PROJECT_DIR)/../src |
Path to NUXP plugin sources |
Override in your project settings or environment:
# Example: Set via environment
export NUXP_SDK_PATH=/path/to/illustrator/sdk
⚠️ CRITICAL: Adobe's Undocumented Bundle RequirementsIllustrator silently ignores plugins that don't have the correct bundle metadata. No error message, no log entry - it just won't load. These settings are not documented in Adobe's SDK but are absolutely required:
Info.plist Key Required Value Wrong Value (won't load) CFBundlePackageTypeARPIBNDL,APPLCFBundleSignatureART5????The NUXP templates (
Info.plistandInfo.plist.in) already have these correct values, but if you're creating your own Info.plist or using Xcode's defaults, you must change them.
-
Check PIPL resource: Use
DeRezto verify PIPL was compiled:DeRez -only 'PiPL' YourPlugin.aip/Contents/Resources/plugin.pipl -
Check bundle structure: Ensure your .aip contains:
YourPlugin.aip/ ├── Contents/ │ ├── Info.plist │ ├── MacOS/ │ │ └── YourPlugin # Binary │ ├── PkgInfo # Contains "ARPIART5" │ └── Resources/ │ └── pipl/ │ └── plugin.pipl # PIPL resource -
Check CFBundlePackageType: Must be
ARPI(Adobe Resource Plug-In), NOTBNDL- Also check CFBundleSignature: Must be
ART5(Illustrator's signature), NOT???? - WARNING: If these are wrong, Illustrator silently ignores the plugin with NO error message!
- Also check CFBundleSignature: Must be
- Ensure
.rfiles have#include "PiPL.r" - Define
PIPL_PLUGIN_NAMEbefore the include - Check
REZ_SEARCH_PATHSin xcconfig includes the path toPiPL.r
If you prefer CMake, you can add Rez compilation:
# Find Rez compiler
find_program(REZ_COMPILER Rez HINTS /usr/bin)
if(REZ_COMPILER AND APPLE)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/plugin.pipl
COMMAND ${REZ_COMPILER}
-d PIPL_PLUGIN_NAME=\\"${PLUGIN_NAME}\\"
-I ${CMAKE_CURRENT_SOURCE_DIR}/mac/resources
-o ${CMAKE_CURRENT_BINARY_DIR}/plugin.pipl
${CMAKE_CURRENT_SOURCE_DIR}/Resources/Mac/${PLUGIN_NAME}.r
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/Resources/Mac/${PLUGIN_NAME}.r
COMMENT "Compiling PIPL resource"
)
endif()