Forum
    • Categories
    • Register
    • Login

    AU component version is always 0 in exported plugins (Xcode exporter misses versionAsHex)

    Scheduled Pinned Locked Moved Bug Reports
    19 Posts 6 Posters 1.1k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • dannytaurusD
      dannytaurus
      last edited by dannytaurus

      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.

      Repro

      Export any project as AU on macOS, then look at Binaries/Builds/MacOSX/Info-AU.plist:

      <key>AudioComponents</key>
      <array>
        <dict>
          ...
          <key>subtype</key>
          <string>Mbsf</string>
          <key>version</key>
          <integer>0</integer>   <!-- always 0 -->
        </dict>
      </array>
      ...
      <key>CFBundleShortVersionString</key>
      <string>0.0.30</string>    <!-- correct -->
      <key>CFBundleVersion</key>
      <string>0.0.30</string>    <!-- correct -->
      

      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.

      pluginval 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.

      Cause

      In JUCE/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h, writeInfoPlistFile() sets options.version (around line 1839) but never sets options.versionAsHex. That member defaults to 0 in juce_PlistOptions.h, and juce_PlistOptions.cpp writes it straight into the AudioComponents dict:

      addPlistDictionaryKey (*dict, "version", versionAsHex);
      

      The Mac Makefile exporter does set it (jucer_ProjectExport_MacMake.h: options.versionAsHex = project.getVersionAsHexInteger();), so the Xcode path is the only one affected, and that is the path HISE uses for macOS export.

      Fix

      One line next to the existing options.version assignment in the Xcode exporter:

      options.versionAsHex = owner.project.getVersionAsHexInteger();
      

      Since HISE 5 ships a prebuilt Projucer in the JUCE submodule, this needs a Projucer rebuild to reach users, not just the source change.

      Impact

      Fairly mild but worth fixing. The compiled binary is fine: JucePlugin_VersionCode is set correctly from getVersionAsHex(), so the AU wrapper's Version() returns the right value at runtime and the plugin loads and works normally. What breaks is the registration metadata:

      • Hosts display the plugin as version 0.0.0.
      • 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.

      Workaround

      Until the exporter is fixed you can patch the value per build, but note where: Info-AU.plist is written by the Projucer --resave step inside batchCompileOSX, not by the HISE export, so editing it straight after exporting gets overwritten.

      The AU component version is the project version packed as major * 65536 + minor * 256 + patch written as a decimal integer, so 0.0.30 becomes 30 and 1.2.3 becomes 66051.

      Set it with /usr/libexec/PlistBuddy -c "Set :AudioComponents:0:version 30" "Binaries/Builds/MacOSX/Info-AU.plist" after the resave, then build the .xcodeproj in Xcode.

      If you drive the build from a script, insert that command into your copy of batchCompileOSX between the --resave line and the xcodebuild line.

      Tested against the JUCE 6.1.3 submodule on macOS.

      HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
      Meat Beats: https://meatbeats.com
      Klippr Video: https://klippr.video

      dannytaurusD LindonL 2 Replies Last reply Reply Quote 3
      • dannytaurusD
        dannytaurus @dannytaurus
        last edited by

        Update: workaround of setting the version manually in the .plist confirmed working here.

        After rebuilding, Logic reported the AU version in Plug-in Manager as 0.0.30 instead on invalid.

        HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
        Meat Beats: https://meatbeats.com
        Klippr Video: https://klippr.video

        David HealeyD 1 Reply Last reply Reply Quote 1
        • LindonL
          Lindon @dannytaurus
          last edited by

          @dannytaurus
          Perhaps report this - and your findings on the JUCE forums?

          HISE Development for hire.
          www.channelrobot.com

          dannytaurusD 1 Reply Last reply Reply Quote 0
          • dannytaurusD
            dannytaurus @Lindon
            last edited by

            @Lindon It appears to be specific to @Christoph-Hart's customised JUCE fork.

            Revised (more detailed) cause from Claude:

            Cause

            JUCE/extras/Build/juce_build_tools/utils/juce_PlistOptions.h in JUCE_customized carries the pre-6.1 API, where versionAsHex is a member each exporter has to fill in.

            jucer_ProjectExport_Xcode.h writeInfoPlistFile() sets options.version but never options.versionAsHex, so it keeps its default of 0 and juce_PlistOptions.cpp writes that straight into the AudioComponents dict.

            juceaide and jucer_ProjectExport_MacMake.h both set it, so only the Xcode path - the one HISE uses for macOS export - is affected.

            Upstream JUCE is not affected either way: 6.0.8 has the same member and its Xcode exporter does set it, and 6.1.0 removed the member altogether, computing the value inside the plist writer (getAUVersionAsHexInteger at juce_PlistOptions.cpp:315 in 6.1.3).

            So this looks like an assignment lost while carrying the older plist code onto a 6.1.3 base.

            Fix: one line next to the existing options.version assignment, matching what upstream 6.0.8 had:

            options.versionAsHex = owner.project.getVersionAsHexInteger();
            

            Since HISE 5 ships a prebuilt Projucer in the JUCE submodule, this needs a Projucer rebuild to reach users, not just the source change.

            HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
            Meat Beats: https://meatbeats.com
            Klippr Video: https://klippr.video

            dannytaurusD 1 Reply Last reply Reply Quote 0
            • dannytaurusD
              dannytaurus @dannytaurus
              last edited by dannytaurus

              Ha. A fix from @DanH is already sitting in a PR in the custom JUCE repo sine June 16th: https://github.com/christophhart/JUCE_customized/pull/3

              HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
              Meat Beats: https://meatbeats.com
              Klippr Video: https://klippr.video

              DanHD 1 Reply Last reply Reply Quote 3
              • DanHD
                DanH @dannytaurus
                last edited by

                @dannytaurus nearly all my PRs get ignored 😆

                DHPlugins / DC Breaks | Artist / Producer / DJ / Developer
                https://dhplugins.com/ | https://dcbreaks.com/
                London, UK

                1 Reply Last reply Reply Quote 2
                • ustkU
                  ustk
                  last edited by ustk

                  I stopped trying to push PRs because a lot of us are cross fixing the same stuff over and over before having a chance to see them reviewed and merged, unfortunately...

                  Hise made me an F5 dude, any other app just suffers...

                  Christoph HartC 1 Reply Last reply Reply Quote 1
                  • Christoph HartC
                    Christoph Hart @ustk
                    last edited by

                    Sorry guys I‘m currently completely submersed in a theatre project, so this month will still be slow but then I‘ll pick up the work and review / merge all the PRs - just keep them coming they are not ignored but sit around waiting to be reviewed.

                    1 Reply Last reply Reply Quote 5
                    • David HealeyD
                      David Healey @dannytaurus
                      last edited by

                      @dannytaurus I just had a user on Tahoe report this issue

                      Logic Pro's plug-in manager says Libre wave > Rhapsody is compatible but the version is invalid.

                      Is that related to what you've described here?

                      Free HISE Bootcamp Full Course for beginners.
                      YouTube Channel - HISE tutorials
                      My Patreon - More HISE tutorials

                      dannytaurusD 1 Reply Last reply Reply Quote 0
                      • dannytaurusD
                        dannytaurus @David Healey
                        last edited by dannytaurus

                        @David-Healey Yep. Below shows 'invalid' value from current HISE build, a post-export fixed one and a non-HISE version number.

                        HISE-AU-versions-in-Logic.png

                        HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
                        Meat Beats: https://meatbeats.com
                        Klippr Video: https://klippr.video

                        David HealeyD 1 Reply Last reply Reply Quote 1
                        • David HealeyD
                          David Healey @dannytaurus
                          last edited by

                          @dannytaurus wonder why the issue is only showing up for this one use though.

                          At least it's a simple fix

                          Free HISE Bootcamp Full Course for beginners.
                          YouTube Channel - HISE tutorials
                          My Patreon - More HISE tutorials

                          dannytaurusD 1 Reply Last reply Reply Quote 0
                          • dannytaurusD
                            dannytaurus @David Healey
                            last edited by

                            @David-Healey

                            issue is only showing up for this one use

                            What do you mean? As far as I know all AU plugins exported from HISE since Dec 2021 have had this 'invalid' version in Logic. VST3 is unaffected.

                            HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
                            Meat Beats: https://meatbeats.com
                            Klippr Video: https://klippr.video

                            David HealeyD 1 Reply Last reply Reply Quote 0
                            • David HealeyD
                              David Healey @dannytaurus
                              last edited by David Healey

                              @dannytaurus It's the first time a user has reported that Rhapsody won't load because of this version issue. Or possibly the user just saw invalid and didn't try and load it on a track - I shall ask.

                              Free HISE Bootcamp Full Course for beginners.
                              YouTube Channel - HISE tutorials
                              My Patreon - More HISE tutorials

                              dannytaurusD 1 Reply Last reply Reply Quote 0
                              • dannytaurusD
                                dannytaurus @David Healey
                                last edited by

                                @David-Healey The AU with an invalid version works fine. It just shows 'invalid' in the plug-in manager.

                                HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
                                Meat Beats: https://meatbeats.com
                                Klippr Video: https://klippr.video

                                1 Reply Last reply Reply Quote 1
                                • David HealeyD
                                  David Healey
                                  last edited by

                                  Yeah the fix works

                                  7fb42a36-974e-4a84-9931-983f61ed86bb-image.png

                                  Free HISE Bootcamp Full Course for beginners.
                                  YouTube Channel - HISE tutorials
                                  My Patreon - More HISE tutorials

                                  dannytaurusD 1 Reply Last reply Reply Quote 1
                                  • dannytaurusD
                                    dannytaurus @David Healey
                                    last edited by

                                    @David-Healey Nice. Did you do the JUCE fix? Or the post-export manual fix?

                                    HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
                                    Meat Beats: https://meatbeats.com
                                    Klippr Video: https://klippr.video

                                    David HealeyD 1 Reply Last reply Reply Quote 0
                                    • David HealeyD
                                      David Healey @dannytaurus
                                      last edited by

                                      @dannytaurus I pulled in Dan's PR and rebuilt Projucer

                                      Free HISE Bootcamp Full Course for beginners.
                                      YouTube Channel - HISE tutorials
                                      My Patreon - More HISE tutorials

                                      1 Reply Last reply Reply Quote 1
                                      • ustkU
                                        ustk
                                        last edited by

                                        In PluginDoctor it's saying v0.0.0 (before the fix) so it kinda stands for "invalid". I'll report to DDMF so it shows a "invalid" string of some sort as well...

                                        Hise made me an F5 dude, any other app just suffers...

                                        dannytaurusD 1 Reply Last reply Reply Quote 0
                                        • dannytaurusD
                                          dannytaurus @ustk
                                          last edited by

                                          @ustk Yeah, good idea. I asked Claude if the version reports as an invalid number, or just as 0.0.0.

                                          • The AU plist has AudioComponents.version = 0.
                                          • Pluginval decoded that as v0.0.0.
                                          • JUCE’s decoder explicitly formats the packed integer 0 as 0.0.0.

                                          0.0.0 is valid as a semantic version, but AU metadata uses a packed UInt32, not a SemVer string.

                                          In practice, hosts treat raw value 0 as “version unset.” Logic therefore labels it invalid, while pluginval merely displays the decoded value.

                                          For 0.0.30, the AU field should contain integer 30. The bundle’s separate CFBundleVersion can remain the string 0.0.30.

                                          HISE dev latest / super.engineering + Claude Fable / Figma + Affinity
                                          Meat Beats: https://meatbeats.com
                                          Klippr Video: https://klippr.video

                                          1 Reply Last reply Reply Quote 0
                                          • David HealeyD David Healey referenced this topic
                                          • First post
                                            Last post

                                          13

                                          Online

                                          2.9k

                                          Users

                                          14.0k

                                          Topics

                                          121.6k

                                          Posts