macOS 15下通过dlopen/dlsym调用C API创建RTP-MIDI会话的技术求助
macOS 15下通过dlopen/dlsym调用C API创建RTP-MIDI会话的技术求助
大家好,我是一名业余开发者,最近在为作曲家/制作人开发一款免费工具,其中macOS版本需要实现从命令行在Audio MIDI Setup(AMS)中创建并命名RTP-MIDI会话——这样我就能打包一个小型C辅助工具,不用让用户手动点击UI完成操作。
我已经尝试了多种方案,但都没能成功,具体如下:
- Plist修改方案:往
~/Library/Audio/MIDI Configurations/*.mcfg中注入<dict>格式的配置条目,在AMS关闭时能生效,但只要AMS处于打开状态,它会立刻锁定配置文件并还原我的修改。 - CoreMIDI C API尝试:我可以通过
MIDISourceCreate成功创建虚拟端口,但针对apple.midirtp.session插件调用MIDIObjectGetDataProperty时,始终返回错误码-10836。 - Obj-C & Swift方案:加载
MIDINetworkSession类,调用defaultSession、init、setNetworkName:方法并设置enabled = YES,但在AMS的Network面板里完全看不到新生成的会话对象。 - dlopen/dlsym动态绑定尝试:我从dyld共享缓存中提取了真实的CoreMIDI二进制文件,尝试绑定
_MIDINetworkSessionCreate、_SetName、_SetEnabled等私有符号,但要么所有符号返回null,要么我的工具直接触发段错误。 - 插件注册尝试:我从
/System/Library/Extensions/AppleMIDIRTPDriver.plugin/Contents/Info.plist中提取了工厂UUID(70C9C5EA-7C65-11D8-B317-000393A34B5A),并调用CFPlugInRegisterFactories进行注册,但还是无法获取到创建会话的相关调用接口。
目前我怀疑自己要么是加载了错误的二进制文件,要么是在注册RTP-MIDI插件的私有API时漏掉了某个关键步骤。
我现在迫切需要以下帮助:
- 真正导出
MIDINetworkSessionCreate/MIDINetworkSessionSetName/MIDINetworkSessionSetEnabled这些符号的dylib或bundle的准确路径; - 一段能可靠创建并命名Network-MIDI会话的最小可运行代码片段(C或Obj-C语言均可);
- 在macOS 15系统中,苹果到底把RTP-MIDI会话创建的核心功能藏在了哪里?
内容来源于stack exchange
相关产品推荐
相关产品推荐

