<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[AU component version is always 0 in exported plugins (Xcode exporter misses versionAsHex)]]></title><description><![CDATA[<p dir="auto">Every AU exported from HISE on macOS registers with a component version of 0.0.0, regardless of the project version. The bundle version fields are correct, so this only shows up when a host or validator reads the AudioComponents registration.</p>
<p dir="auto"><strong>Repro</strong></p>
<p dir="auto">Export any project as AU on macOS, then look at Binaries/Builds/MacOSX/Info-AU.plist:</p>
<pre><code>&lt;key&gt;AudioComponents&lt;/key&gt;
&lt;array&gt;
  &lt;dict&gt;
    ...
    &lt;key&gt;subtype&lt;/key&gt;
    &lt;string&gt;Mbsf&lt;/string&gt;
    &lt;key&gt;version&lt;/key&gt;
    &lt;integer&gt;0&lt;/integer&gt;   &lt;!-- always 0 --&gt;
  &lt;/dict&gt;
&lt;/array&gt;
...
&lt;key&gt;CFBundleShortVersionString&lt;/key&gt;
&lt;string&gt;0.0.30&lt;/string&gt;    &lt;!-- correct --&gt;
&lt;key&gt;CFBundleVersion&lt;/key&gt;
&lt;string&gt;0.0.30&lt;/string&gt;    &lt;!-- correct --&gt;
</code></pre>
<p dir="auto">I see this on a 0.0.30 project and on two untouched 1.0.0 test projects, so it is not version-string specific.</p>
<p dir="auto"><code>pluginval</code> reports the plugin as version 0.0.0 as a result. That is JUCE's own AU format reading it back: juce_AudioUnitPluginFormat.mm calls AudioComponentGetVersion, which returns the value from that plist entry.</p>
<p dir="auto"><strong>Cause</strong></p>
<p dir="auto">In <code>JUCE/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h</code>, <code>writeInfoPlistFile()</code> sets <code>options.version</code> (around line 1839) but never sets <code>options.versionAsHex</code>. That member defaults to 0 in <code>juce_PlistOptions.h</code>, and <code>juce_PlistOptions.cpp</code> writes it straight into the <code>AudioComponents</code> dict:</p>
<pre><code>addPlistDictionaryKey (*dict, "version", versionAsHex);
</code></pre>
<p dir="auto">The Mac Makefile exporter does set it (<code>jucer_ProjectExport_MacMake.h</code>: <code>options.versionAsHex = project.getVersionAsHexInteger();</code>), so the Xcode path is the only one affected, and that is the path HISE uses for macOS export.</p>
<p dir="auto"><strong>Fix</strong></p>
<p dir="auto">One line next to the existing options.version assignment in the Xcode exporter:</p>
<pre><code>options.versionAsHex = owner.project.getVersionAsHexInteger();
</code></pre>
<p dir="auto">Since HISE 5 ships a prebuilt Projucer in the JUCE submodule, this needs a Projucer rebuild to reach users, not just the source change.</p>
<p dir="auto"><strong>Impact</strong></p>
<p dir="auto">Fairly mild but worth fixing. The compiled binary is fine: <code>JucePlugin_VersionCode</code> is set correctly from <code>getVersionAsHex()</code>, so the AU wrapper's <code>Version()</code> returns the right value at runtime and the plugin loads and works normally. What breaks is the registration metadata:</p>
<ul>
<li>Hosts display the plugin as version 0.0.0.</li>
<li>AU caches keyed on component version never invalidate across releases, so users updating a plugin may need to clear their AU cache manually before macOS notices anything changed.</li>
</ul>
<p dir="auto"><strong>Workaround</strong></p>
<p dir="auto">Until the exporter is fixed you can patch the value per build, but note <em>where</em>: <code>Info-AU.plist</code> is written by the Projucer <code>--resave</code> step inside <code>batchCompileOSX</code>, not by the HISE export, so editing it straight after exporting gets overwritten.</p>
<p dir="auto">The AU component version is the project version packed as <code>major * 65536 + minor * 256 + patch</code> written as a decimal integer, so 0.0.30 becomes 30 and 1.2.3 becomes 66051.</p>
<p dir="auto">Set it with <code>/usr/libexec/PlistBuddy -c "Set :AudioComponents:0:version 30" "Binaries/Builds/MacOSX/Info-AU.plist"</code> after the resave, then build the <code>.xcodeproj</code> in Xcode.</p>
<p dir="auto">If you drive the build from a script, insert that command into your copy of <code>batchCompileOSX</code> between the <code>--resave</code> line and the <code>xcodebuild</code> line.</p>
<p dir="auto">Tested against the JUCE 6.1.3 submodule on macOS.</p>
]]></description><link>https://forum.hise.audio/topic/15026/au-component-version-is-always-0-in-exported-plugins-xcode-exporter-misses-versionashex</link><generator>RSS for Node</generator><lastBuildDate>Mon, 31 Aug 2026 22:11:09 GMT</lastBuildDate><atom:link href="https://forum.hise.audio/topic/15026.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Aug 2026 19:51:48 GMT</pubDate><ttl>60</ttl></channel></rss>