diff --git a/src/CoreMidi/MidiServices.cs b/src/CoreMidi/MidiServices.cs
index 16cdde831554..0e5f71d4ad16 100644
--- a/src/CoreMidi/MidiServices.cs
+++ b/src/CoreMidi/MidiServices.cs
@@ -2544,6 +2544,23 @@ public bool UmpCanTransmitGroupless {
SetInt (MidiPropertyExtensions.kMIDIPropertyUMPCanTransmitGroupless, value ? 1 : 0);
}
}
+
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [UnsupportedOSPlatform ("tvos")]
+#else
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ public int AssociatedEndpoint {
+ get {
+ return GetInt (MidiPropertyExtensions.kMIDIPropertyAssociatedEndpoint);
+ }
+ set {
+ SetInt (MidiPropertyExtensions.kMIDIPropertyAssociatedEndpoint, value);
+ }
+ }
// MidiEndpoint
#endif // !COREBUILD
}
@@ -2557,6 +2574,14 @@ enum MidiNotificationMessageId : int {
ThruConnectionsChanged,
SerialPortOwnerChanged,
IOError,
+#if !MONOMAC
+#if NET
+ [SupportedOSPlatform ("ios")]
+ [SupportedOSPlatform ("maccatalyst")]
+ [UnsupportedOSPlatform ("macos")]
+#endif
+ InternalStart = 0x1000,
+#endif
}
//
diff --git a/src/CoreMidi/MidiStructs.cs b/src/CoreMidi/MidiStructs.cs
new file mode 100644
index 000000000000..4832946a4a46
--- /dev/null
+++ b/src/CoreMidi/MidiStructs.cs
@@ -0,0 +1,165 @@
+#if !TVOS && !WATCH
+#nullable enable
+
+using System;
+using System.Runtime.InteropServices;
+
+using ObjCRuntime;
+using CoreFoundation;
+using Foundation;
+
+using MidiObjectRef = System.Int32;
+using MidiClientRef = System.Int32;
+using MidiDeviceRef = System.Int32;
+using MidiDeviceListRef = System.Int32;
+using MidiPortRef = System.Int32;
+using MidiEndpointRef = System.Int32;
+using MidiEntityRef = System.Int32;
+
+namespace CoreMidi {
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [SupportedOSPlatform ("tvos18.0")]
+#else
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ [NativeName ("MIDI2DeviceManufacturer")]
+ public struct Midi2DeviceManufacturer {
+ // Byte sysExIDByte[3]; // 1-byte SysEx IDs are padded with trailing zeroes
+ byte sysExIdByte0;
+ byte sysExIdByte1;
+ byte sysExIdByte2;
+
+ public byte [] SysExIdByte {
+ get {
+ return new byte [] { sysExIdByte0, sysExIdByte1, sysExIdByte2 };
+ }
+ set {
+ if (value is null)
+ ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (value));
+ if (value.Length != 3)
+ ObjCRuntime.ThrowHelper.ThrowArgumentOutOfRangeException (nameof (value), "Length must be 3");
+
+ sysExIdByte0 = value [0];
+ sysExIdByte1 = value [1];
+ sysExIdByte2 = value [2];
+ }
+ }
+ }
+
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [SupportedOSPlatform ("tvos18.0")]
+#else
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ [NativeName ("MIDI2DeviceRevisionLevel")]
+ public struct Midi2DeviceRevisionLevel {
+ // Byte revisionLevel[4];
+ byte revisionLevel0;
+ byte revisionLevel1;
+ byte revisionLevel2;
+ byte revisionLevel3;
+
+ public byte [] RevisionLevel {
+ get {
+ return new byte [] { revisionLevel0, revisionLevel1, revisionLevel2, revisionLevel3 };
+ }
+ set {
+ if (value is null)
+ ObjCRuntime.ThrowHelper.ThrowArgumentNullException (nameof (value));
+ if (value.Length != 4)
+ ObjCRuntime.ThrowHelper.ThrowArgumentOutOfRangeException (nameof (value), "Length must be 4");
+
+ revisionLevel0 = value [0];
+ revisionLevel1 = value [1];
+ revisionLevel2 = value [2];
+ revisionLevel3 = value [3];
+ }
+ }
+ }
+
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [SupportedOSPlatform ("tvos18.0")]
+#else
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ [NativeName ("MIDICIProfileIDStandard")]
+ public struct MidiCIProfileIdStandard {
+ public byte /* MIDIUInteger7 */ ProfileIdByte1;
+ public byte /* MIDIUInteger7 */ ProfileBank;
+ public byte /* MIDIUInteger7 */ ProfileNumber;
+ public byte /* MIDIUInteger7 */ ProfileVersion;
+ public byte /* MIDIUInteger7 */ ProfileLevel;
+ }
+
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [SupportedOSPlatform ("tvos18.0")]
+#else
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ [NativeName ("MIDICIProfileIDManufacturerSpecific")]
+ public struct MidiCIProfileIdManufacturerSpecific {
+ public byte /* MIDIUInteger7 */ SysExId1;
+ public byte /* MIDIUInteger7 */ SysExId2;
+ public byte /* MIDIUInteger7 */ SysExId3;
+ public byte /* MIDIUInteger7 */ Info1;
+ public byte /* MIDIUInteger7 */ Info2;
+ }
+
+#if NET
+ [SupportedOSPlatform ("ios18.0")]
+ [SupportedOSPlatform ("maccatalyst18.0")]
+ [SupportedOSPlatform ("macos15.0")]
+ [SupportedOSPlatform ("tvos18.0")]
+#else
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+#endif
+ [NativeName ("MIDICIProfileID")]
+ public struct MidiCIProfileId {
+ // This is a union between MidiCIProfileIdStandard and MidiCIProfileIdManufacturerSpecific, each with the same size (5 bytes)
+ // So declare a struct with 5 bytes, and then do some memory copies to convert to each element of the union.
+ byte /* MIDIUInteger7 */ Value0;
+ byte /* MIDIUInteger7 */ Value1;
+ byte /* MIDIUInteger7 */ Value2;
+ byte /* MIDIUInteger7 */ Value3;
+ byte /* MIDIUInteger7 */ Value4;
+
+ public unsafe MidiCIProfileIdStandard Standard {
+ get {
+ fixed (MidiCIProfileId* self = &this) {
+ return *(MidiCIProfileIdStandard*) self;
+ }
+ }
+ set {
+ fixed (MidiCIProfileId* self = &this) {
+ *self = *(MidiCIProfileId*) &value;
+ }
+ }
+ }
+
+ public unsafe MidiCIProfileIdManufacturerSpecific ManufacturerSpecific {
+ get {
+ fixed (MidiCIProfileId* self = &this) {
+ return *(MidiCIProfileIdManufacturerSpecific*) self;
+ }
+ }
+ set {
+ fixed (MidiCIProfileId* self = &this) {
+ *self = *(MidiCIProfileId*) &value;
+ }
+ }
+ }
+ }
+}
+#endif
diff --git a/src/coremidi.cs b/src/coremidi.cs
index 4ff8de0b0b8e..c8e3b1e51852 100644
--- a/src/coremidi.cs
+++ b/src/coremidi.cs
@@ -32,6 +32,10 @@
using ObjCRuntime;
using MidiObjectRef = System.Int32;
+using MidiEndpointRef = System.Int32;
+using MidiUmpFunctionBlockId = System.Byte;
+using MidiUmpGroupNumber = System.Byte;
+using MidiChannelNumber = System.Byte;
#if !NET
using NativeHandle = System.IntPtr;
@@ -41,6 +45,9 @@
using MidiEndpoint = System.Object;
using MidiCIDeviceIdentification = System.Object;
using MidiCIDeviceIdentification_Blittable = System.Object;
+using MidiCIProfileId = System.Object;
+using Midi2DeviceManufacturer = System.Object;
+using Midi2DeviceRevisionLevel = System.Object;
#endif
namespace CoreMidi {
@@ -97,7 +104,17 @@ public enum MidiMessageType : uint {
SysEx = 3,
ChannelVoice2 = 4,
Data128 = 5,
- UnknownF = 15,
+ FlexData = 0xD,
+#if !XAMCORE_5_0
+ [Deprecated (PlatformName.iOS, 18, 0, message: "Use 'Stream' instead.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "Use 'Stream' instead.")]
+ [Deprecated (PlatformName.TvOS, 18, 0, message: "Use 'Stream' instead.")]
+ [Deprecated (PlatformName.WatchOS, 11, 0, message: "Use 'Stream' instead.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "Use 'Stream' instead.")]
+ UnknownF = Stream,
+#endif
+ Stream = 0xF,
+ Invalid = 0xFF,
}
[Mac (11, 0), iOS (14, 0), TV (15, 0), Watch (8, 0)]
@@ -160,6 +177,158 @@ public enum MidiUtilityStatus : uint {
Noop = 0,
JitterReductionClock = 1,
JitterReductionTimestamp = 2,
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ DeltaClockstampTicksPerQuarterNote = 0x3,
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ TicksSinceLastEvent = 0x4
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("UMPStreamMessageStatus")]
+ public enum UmpStreamMessageStatus : uint {
+ EndpointDiscovery = 0x00,
+ EndpointInfoNotification = 0x01,
+ DeviceIdentityNotification = 0x02,
+ EndpointNameNotification = 0x03,
+ ProductInstanceIDNotification = 0x04,
+ StreamConfigurationRequest = 0x05,
+ StreamConfigurationNotification = 0x06,
+ FunctionBlockDiscovery = 0x10,
+ FunctionBlockInfoNotification = 0x11,
+ FunctionBlockNameNotification = 0x12,
+ StartOfClip = 0x20,
+ EndOfClip = 0x21,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDIUMPFunctionBlockMIDI1Info")]
+ public enum MidiUmpFunctionBlockMidi1Info {
+ NotMidi1 = 0,
+ UnrestrictedBandwidth = 1,
+ RestrictedBandwidth = 2
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDIUMPFunctionBlockUIHint")]
+ public enum MidiUmpFunctionBlockUIHint {
+ Unknown = 0,
+ Receiver = 1,
+ Sender = 2,
+ SenderReceiver = 3
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDIUMPFunctionBlockDirection")]
+ public enum MidiUmpFunctionBlockDirection {
+ Unknown = 0,
+ Input = 1,
+ Output = 2,
+ Bidirectional = 3
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("UMPStreamMessageFormat")]
+ public enum UmpStreamMessageFormat : byte {
+ Complete = 0x00,
+ Start = 0x01,
+ Continuing = 0x02,
+ End = 0x03
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICICategoryOptions")]
+ public enum MidiCICategoryOptions : byte /* MIDIUInteger7 = typedef UInt8 MIDIUInteger7; //! 7 bits usable; allowed values 0x0~0x7F */ {
+ ProtocolNegotiation = (1 << 1),
+ ProfileConfigurationSupported = (1 << 2),
+ PropertyExchangeSupported = (1 << 3),
+ ProcessInquirySupported = (1 << 4),
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIDeviceType")]
+ public enum MidiCIDeviceType : byte /* UInt8 */ {
+ Unknown = 0,
+ LegacyMidi1,
+ Virtual,
+ UsbMidi,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIProfileMessageType")]
+ public enum MidiCIProfileMessageType : byte /* MIDIUInteger7 = typedef UInt8 MIDIUInteger7; //! 7 bits usable; allowed values 0x0~0x7F */ {
+ ProfileInquiry = 0x20,
+ ReplyToProfileInquiry = 0x21,
+ SetProfileOn = 0x22,
+ SetProfileOff = 0x23,
+ ProfileEnabledReport = 0x24,
+ ProfileDisabledReport = 0x25,
+ ProfileAdded = 0x26,
+ ProfileRemoved = 0x27,
+ DetailsInquiry = 0x28,
+ ReplyToDetailsInquiry = 0x29,
+ ProfileSpecificData = 0x2F,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIPropertyExchangeMessageType")]
+ public enum MidiCIPropertyExchangeMessageType : byte /* MIDIUInteger7 = typedef UInt8 MIDIUInteger7; //! 7 bits usable; allowed values 0x0~0x7F */ {
+ InquiryPropertyExchangeCapabilities = 0x30,
+ ReplyToPropertyExchangeCapabilities = 0x31,
+ InquiryHasPropertyData_Reserved = 0x32,
+ InquiryReplyToHasPropertyData_Reserved = 0x33,
+ InquiryGetPropertyData = 0x34,
+ ReplyToGetProperty = 0x35,
+ InquirySetPropertyData = 0x36,
+ ReplyToSetPropertyData = 0x37,
+ Subscription = 0x38,
+ ReplyToSubscription = 0x39,
+ Notify = 0x3F,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIProcessInquiryMessageType")]
+ public enum MidiCIProcessInquiryMessageType : byte /* MIDIUInteger7 = typedef UInt8 MIDIUInteger7; //! 7 bits usable; allowed values 0x0~0x7F */ {
+ InquiryProcessInquiryCapabilities = 0x40,
+ ReplyToProcessInquiryCapabilities = 0x41,
+ InquiryMidiMessageReport = 0x42,
+ ReplyToMidiMessageReport = 0x43,
+ EndOfMidiMessageReport = 0x44,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIManagementMessageType")]
+ public enum MidiCIManagementMessageType : byte /* MIDIUInteger7 = typedef UInt8 MIDIUInteger7; //! 7 bits usable; allowed values 0x0~0x7F */ {
+ Discovery = 0x70,
+ ReplyToDiscovery = 0x71,
+ InquiryEndpointInformation = 0x72,
+ ReplyToEndpointInformation = 0x73,
+ MIDICIACK = 0x7D,
+ InvalidateMUID = 0x7E,
+ MIDICINAK = 0x7F,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIProfileType")]
+ public enum MidiCIProfileType : byte /* UInt8 */ {
+ SingleChannel = 1,
+ Group = 2,
+ FunctionBlock = 3,
+ Multichannel = 4,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDIUMPCIObjectBackingType")]
+ public enum MidiUmpCIObjectBackingType : byte /* UInt8 */ {
+ Unknown = 0,
+ Virtual,
+ DriverDevice,
+ UsbMidi,
+ }
+
+ [Watch (11, 0), TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDICIPropertyExchangeRequestID")]
+ public enum MidiCIPropertyExchangeRequestID : byte /* UInt8 */ {
+ BadRequest = 0xFF,
}
/// A remote MIDI host.
@@ -329,6 +498,17 @@ interface MidiCIProfile : NSSecureCoding {
[MacCatalyst (14, 0)]
[Export ("initWithData:")]
NativeHandle Constructor (NSData data);
+
+ /* Notifications */
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [Field ("MIDICIProfileWasUpdatedNotification")]
+ [Notification]
+ NSString WasUpdatedNotification { get; }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [Field ("MIDICIProfileWasRemovedNotification")]
+ [Notification]
+ NSString WasRemovedNotification { get; }
}
[NoWatch, NoTV, iOS (12, 0)]
@@ -342,15 +522,15 @@ interface MidiCIProfileState : NSSecureCoding {
[Export ("disabledProfiles")]
MidiCIProfile [] DisabledProfiles { get; }
- [Deprecated (PlatformName.iOS, 14, 0, message: "Use the '(byte midiChannel, MidiCIProfile[] enabled, MidiCIProfile[] disabled)' constructor instead.")]
- [Deprecated (PlatformName.MacOSX, 11, 0, message: "Use the '(byte midiChannel, MidiCIProfile[] enabled, MidiCIProfile[] disabled)' constructor instead.")]
- [Deprecated (PlatformName.MacCatalyst, 14, 0, message: "Use the '(byte midiChannel, MidiCIProfile[] enabled, MidiCIProfile[] disabled)' constructor instead.")]
[Export ("initWithEnabledProfiles:disabledProfiles:")]
NativeHandle Constructor (MidiCIProfile [] enabled, MidiCIProfile [] disabled);
[Mac (11, 0), iOS (14, 0)]
[MacCatalyst (14, 0)]
[Export ("initWithChannel:enabledProfiles:disabledProfiles:")]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "Use the other constructor instead (without the 'midiChannelNumber' parameter).")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "Use the other constructor instead (without the 'midiChannelNumber' parameter).")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "Use the other constructor instead (without the 'midiChannelNumber' parameter).")]
NativeHandle Constructor (byte midiChannelNumber, MidiCIProfile [] enabled, MidiCIProfile [] disabled);
[Mac (11, 0), iOS (14, 0)]
@@ -367,6 +547,9 @@ interface MidiCIProfileState : NSSecureCoding {
[MacCatalyst (13, 1)]
[BaseType (typeof (NSObject), Name = "MIDICISession")]
[DisableDefaultCtor]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "No longer supported.")]
interface MidiCISession {
[Export ("entity")]
uint Entity { get; }
@@ -444,6 +627,9 @@ interface MidiCISession {
[MacCatalyst (14, 0)]
[BaseType (typeof (NSObject), Name = "MIDICIDeviceInfo")]
[DisableDefaultCtor]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "No longer supported.")]
interface MidiCIDeviceInfo : NSSecureCoding {
[Export ("manufacturerID")]
NSData ManufacturerId { get; }
@@ -476,6 +662,9 @@ interface MidiCIDeviceInfo : NSSecureCoding {
[MacCatalyst (14, 0)]
[BaseType (typeof (NSObject), Name = "MIDICIDiscoveredNode")]
[DisableDefaultCtor]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "No longer supported.")]
interface MidiCIDiscoveredNode : NSSecureCoding {
[Internal]
[Export ("destination")]
@@ -504,6 +693,9 @@ interface MidiCIDiscoveredNode : NSSecureCoding {
[MacCatalyst (14, 0)]
[DisableDefaultCtor]
[BaseType (typeof (NSObject), Name = "MIDICIDiscoveryManager")]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "No longer supported.")]
interface MidiCIDiscoveryManager {
[Static]
[Export ("sharedInstance")]
@@ -543,6 +735,9 @@ interface MidiCIProfileResponderDelegate {
[MacCatalyst (14, 0)]
[BaseType (typeof (NSObject), Name = "MIDICIResponder")]
[DisableDefaultCtor]
+ [Deprecated (PlatformName.iOS, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacCatalyst, 18, 0, message: "No longer supported.")]
+ [Deprecated (PlatformName.MacOSX, 15, 0, message: "No longer supported.")]
interface MidiCIResponder {
[BindAs (typeof (int []))]
[Export ("initiators")]
@@ -774,5 +969,302 @@ enum MidiProperty {
[Mac (14, 0), iOS (17, 0), MacCatalyst (17, 0), NoTV, NoWatch]
[Field ("kMIDIPropertyUMPCanTransmitGroupless")]
UmpCanTransmitGroupless,
+
+ [Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0), NoTV, NoWatch]
+ [Field ("kMIDIPropertyAssociatedEndpoint")]
+ AssociatedEndpoint,
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDICIDevice")]
+ [DisableDefaultCtor]
+ interface MidiCIDevice {
+ [Export ("deviceInfo")]
+ Midi2DeviceInfo DeviceInfo { get; }
+
+ [Export ("MUID")]
+ /* MIDICIMUID -> MIDIUInteger28 -> UInt32 */
+ uint Muid { get; }
+
+ [Export ("supportsProtocolNegotiation")]
+ bool SupportsProtocolNegotiation { get; }
+
+ [Export ("supportsProfileConfiguration")]
+ bool SupportsProfileConfiguration { get; }
+
+ [Export ("supportsPropertyExchange")]
+ bool SupportsPropertyExchange { get; }
+
+ [Export ("supportsProcessInquiry")]
+ bool SupportsProcessInquiry { get; }
+
+ [Export ("maxSysExSize")]
+ nuint MaxSysExSize { get; }
+
+ [Export ("maxPropertyExchangeRequests")]
+ nuint MaxPropertyExchangeRequests { get; }
+
+ [Export ("deviceType")]
+ MidiCIDeviceType DeviceType { get; }
+
+ [Export ("profiles")]
+ MidiUmpCIProfile [] Profiles { get; }
+
+ /* Notifications */
+ [Field ("MIDICIDeviceWasAddedNotification")]
+ [Notification]
+ NSString WasAddedNotification { get; }
+
+ [Field ("MIDICIDeviceWasRemovedNotification")]
+ [Notification]
+ NSString WasRemovedNotification { get; }
+
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDICIDeviceManager")]
+ [DisableDefaultCtor]
+ interface MidiCIDeviceManager {
+ [Static]
+ [Export ("sharedInstance")]
+ MidiCIDeviceManager SharedInstance { get; }
+
+ [Export ("discoveredCIDevices", ArgumentSemantic.Copy)]
+ MidiCIDevice [] DiscoveredCIDevices { get; }
+
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDIUMPCIProfile")]
+ [DisableDefaultCtor]
+ interface MidiUmpCIProfile {
+ [Export ("name")]
+ string Name { get; }
+
+ [Export ("profileID")]
+ MidiCIProfileId ProfileId { get; }
+
+ [Export ("profileType")]
+ MidiCIProfileType ProfileType { get; }
+
+ [Export ("groupOffset")]
+ MidiUmpGroupNumber GroupOffset { get; }
+
+ [Export ("firstChannel")]
+ MidiChannelNumber FirstChannel { get; }
+
+ [Export ("enabledChannelCount")]
+ ushort /* MIDIUInteger14 */ EnabledChannelCount { get; }
+
+ [Export ("totalChannelCount")]
+ ushort /* MIDIUInteger14 */ TotalChannelCount { get; }
+
+ [Export ("isEnabled")]
+ bool IsEnabled { get; }
+
+ [Export ("setProfileState:enabledChannelCount:error:")]
+ bool SetProfileState (bool isEnabled, ushort enabledChannelCount, out NSError error);
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDI2DeviceInfo")]
+ [DisableDefaultCtor]
+ interface Midi2DeviceInfo {
+ [Export ("manufacturerID")]
+ Midi2DeviceManufacturer ManufacturerId { get; }
+
+ [Export ("family")]
+ ushort /* MIDIUInteger14 */ Family { get; }
+
+ [Export ("modelNumber")]
+ ushort /* MIDIUInteger14 */ ModelNumber { get; }
+
+ [Export ("revisionLevel")]
+ Midi2DeviceRevisionLevel RevisionLevel { get; }
+
+ [Export ("initWithManufacturerID:family:modelNumber:revisionLevel:")]
+ NativeHandle Constructor (Midi2DeviceManufacturer manufacturerId, ushort family, ushort modelNumber, Midi2DeviceRevisionLevel revisionLevel);
+ }
+
+ [Flags]
+ [NoWatch, TV (18, 0), Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [NativeName ("MIDIUMPProtocolOptions")]
+ public enum MidiUmpProtocolOptions : byte /* MIDIUInteger4 */ {
+ SupportedProtocolMidi1 = 1,
+ SupportedProtocolMidi2 = 1 << 1,
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDIUMPEndpoint")]
+ [DisableDefaultCtor]
+ interface MidiUmpEndpoint {
+ [Export ("name")]
+ string Name { get; }
+
+ [Export ("MIDIProtocol")]
+ MidiProtocolId MidiProtocol { get; }
+
+ [Export ("supportedMIDIProtocols")]
+ MidiUmpProtocolOptions SupportedMidiProtocols { get; }
+
+ [Export ("MIDIDestination")]
+ MidiEndpointRef MidiDestination { get; }
+
+ [Export ("MIDISource")]
+ MidiEndpointRef MidiSource { get; }
+
+ [Export ("deviceInfo")]
+ Midi2DeviceInfo DeviceInfo { get; }
+
+ [Export ("productInstanceID")]
+ string ProductInstanceId { get; }
+
+ [Export ("hasStaticFunctionBlocks")]
+ bool HasStaticFunctionBlocks { get; }
+
+ [Export ("hasJRTSReceiveCapability")]
+ bool HasJrtsReceiveCapability { get; }
+
+ [Export ("hasJRTSTransmitCapability")]
+ bool HasJrtsTransmitCapability { get; }
+
+ [Export ("endpointType")]
+ MidiUmpCIObjectBackingType EndpointType { get; }
+
+ [Export ("functionBlocks", ArgumentSemantic.Copy)]
+ MidiUmpFunctionBlock [] FunctionBlocks { get; set; }
+
+ /* Notifications */
+ [Notification]
+ [Field ("MIDIUMPEndpointWasAddedNotification")]
+ NSString WasAddedNotification { get; }
+
+ [Notification]
+ [Field ("MIDIUMPEndpointWasRemovedNotification")]
+ NSString WasRemovedNotification { get; }
+
+ [Notification]
+ [Field ("MIDIUMPEndpointWasUpdatedNotification")]
+ NSString WasUpdatedNotification { get; }
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDIUMPFunctionBlock")]
+ [DisableDefaultCtor]
+ interface MidiUmpFunctionBlock {
+ [Export ("name")]
+ string Name { get; }
+
+ [Export ("functionBlockID")]
+ MidiUmpFunctionBlockId FunctionBlockId { get; }
+
+ [Export ("direction")]
+ MidiUmpFunctionBlockDirection Direction { get; }
+
+ [Export ("firstGroup")]
+ MidiUmpGroupNumber FirstGroup { get; }
+
+ [Export ("totalGroupsSpanned")]
+ byte /* MIDIUInteger7 */ TotalGroupsSpanned { get; }
+
+ [Export ("maxSysEx8Streams")]
+ byte MaxSysEx8Streams { get; }
+
+ [Export ("MIDI1Info")]
+ MidiUmpFunctionBlockMidi1Info Midi1Info { get; }
+
+ [Export ("UIHint")]
+ MidiUmpFunctionBlockUIHint UIHint { get; }
+
+ [Export ("UMPEndpoint", ArgumentSemantic.Weak), NullAllowed]
+ MidiUmpEndpoint UmpEndpoint { get; }
+
+ [Export ("midiCIDevice", ArgumentSemantic.Weak), NullAllowed]
+ MidiCIDevice MidiCIDevice { get; }
+
+ [Export ("isEnabled")]
+ bool IsEnabled { get; }
+
+ /* Notifications */
+ [Notification]
+ [Field ("MIDIUMPFunctionBlockWasUpdatedNotification")]
+ NSString WasUpdatedNotification { get; }
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [Static]
+ interface MidiCIDeviceManagerDictionaryKey {
+ [Field ("MIDICIDeviceObjectKey")]
+ NSString CIDeviceObject { get; }
+
+ [Field ("MIDICIProfileObjectKey")]
+ NSString CIProfileObjectKey { get; }
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [Static]
+ interface MidiUmpEndpointManagerDictionaryKey {
+ [Field ("MIDIUMPEndpointObjectKey")]
+ NSString UmpEndpointObject { get; }
+
+ [Field ("MIDIUMPFunctionBlockObjectKey")]
+ NSString UmpFunctionBlockObject { get; }
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (NSObject), Name = "MIDIUMPEndpointManager")]
+ [DisableDefaultCtor]
+ interface MidiUmpEndpointManager {
+ [Static]
+ [Export ("sharedInstance")]
+ MidiUmpEndpointManager SharedInstance { get; }
+
+ [Export ("UMPEndpoints", ArgumentSemantic.Copy)]
+ MidiUmpEndpoint [] UmpEndpoints { get; }
+ }
+
+ delegate void MidiReceiveBlock (IntPtr eventList, IntPtr srcConnRefCon);
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (MidiUmpEndpoint), Name = "MIDIUMPMutableEndpoint")]
+ [DisableDefaultCtor]
+ interface MidiUmpMutableEndpoint {
+ [Export ("mutableFunctionBlocks", ArgumentSemantic.Copy)]
+ MidiUmpMutableFunctionBlock [] MutableFunctionBlocks { get; set; }
+
+ [Export ("isEnabled")]
+ bool IsEnabled { get; }
+
+ [Export ("initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback:")]
+ NativeHandle Constructor (string name, Midi2DeviceInfo deviceInfo, string productInstanceId, MidiProtocolId midiProtocol, MidiReceiveBlock destinationCallback);
+
+ [Export ("setName:error:")]
+ bool SetName (string name, out NSError error);
+
+ [Export ("registerFunctionBlocks:markAsStatic:error:")]
+ bool RegisterFunctionBlocks (MidiUmpMutableFunctionBlock [] functionBlocks, bool markAsStatic, out NSError error);
+
+ [Export ("setEnabled:error:")]
+ bool SetEnabled (bool isEnabled, out NSError error);
+ }
+
+ [NoWatch, NoTV, Mac (15, 0), iOS (18, 0), MacCatalyst (18, 0)]
+ [BaseType (typeof (MidiUmpFunctionBlock), Name = "MIDIUMPMutableFunctionBlock")]
+ [DisableDefaultCtor]
+ interface MidiUmpMutableFunctionBlock {
+ [Export ("UMPEndpoint", ArgumentSemantic.Weak), NullAllowed]
+ MidiUmpMutableEndpoint UmpEndpoint { get; }
+
+ [Export ("initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled:")]
+ NativeHandle Constructor (string name, MidiUmpFunctionBlockDirection direction, MidiUmpGroupNumber firstGroup, byte /* MIDIUInteger7 */ totalGroupsSpanned, byte /* MIDIUInteger7 */ maxSysEx8Streams, MidiUmpFunctionBlockMidi1Info midi1Info, MidiUmpFunctionBlockUIHint uiHint, bool isEnabled);
+
+ [Export ("setEnabled:error:")]
+ bool SetEnabled (bool isEnabled, out NSError error);
+
+ [Export ("setName:error:")]
+ bool SetName (string name, out NSError error);
+
+ [Export ("reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error:")]
+ bool ReconfigureWithFirstGroup (MidiUmpGroupNumber firstGroup, MidiUmpFunctionBlockDirection direction, MidiUmpFunctionBlockMidi1Info midi1Info, MidiUmpFunctionBlockUIHint uiHint, out NSError error);
}
}
diff --git a/src/frameworks.sources b/src/frameworks.sources
index 0183ff55da04..e706f621c6f8 100644
--- a/src/frameworks.sources
+++ b/src/frameworks.sources
@@ -617,6 +617,7 @@ COREMIDI_CORE_SOURCES = \
CoreMidi/MidiCompat.cs \
CoreMidi/MidiCIDeviceIdentification.cs \
CoreMidi/MidiServices.cs \
+ CoreMidi/MidiStructs.cs \
CoreMidi/MidiThruConnection.cs \
CoreMidi/MidiThruConnectionParams.cs \
diff --git a/tests/cecil-tests/Documentation.KnownFailures.txt b/tests/cecil-tests/Documentation.KnownFailures.txt
index a8215195ae6e..9020ef989d64 100644
--- a/tests/cecil-tests/Documentation.KnownFailures.txt
+++ b/tests/cecil-tests/Documentation.KnownFailures.txt
@@ -7478,11 +7478,68 @@ F:CoreMedia.LensStabilizationStatus.None
F:CoreMedia.LensStabilizationStatus.Off
F:CoreMedia.LensStabilizationStatus.OutOfRange
F:CoreMedia.LensStabilizationStatus.Unavailable
+F:CoreMidi.MidiCICategoryOptions.ProcessInquirySupported
+F:CoreMidi.MidiCICategoryOptions.ProfileConfigurationSupported
+F:CoreMidi.MidiCICategoryOptions.PropertyExchangeSupported
+F:CoreMidi.MidiCICategoryOptions.ProtocolNegotiation
F:CoreMidi.MidiCIDeviceIdentification.Family
F:CoreMidi.MidiCIDeviceIdentification.Manufacturer
F:CoreMidi.MidiCIDeviceIdentification.ModelNumber
F:CoreMidi.MidiCIDeviceIdentification.Reserved
F:CoreMidi.MidiCIDeviceIdentification.RevisionLevel
+F:CoreMidi.MidiCIDeviceType.LegacyMidi1
+F:CoreMidi.MidiCIDeviceType.Unknown
+F:CoreMidi.MidiCIDeviceType.UsbMidi
+F:CoreMidi.MidiCIDeviceType.Virtual
+F:CoreMidi.MidiCIManagementMessageType.Discovery
+F:CoreMidi.MidiCIManagementMessageType.InquiryEndpointInformation
+F:CoreMidi.MidiCIManagementMessageType.InvalidateMUID
+F:CoreMidi.MidiCIManagementMessageType.MIDICIACK
+F:CoreMidi.MidiCIManagementMessageType.MIDICINAK
+F:CoreMidi.MidiCIManagementMessageType.ReplyToDiscovery
+F:CoreMidi.MidiCIManagementMessageType.ReplyToEndpointInformation
+F:CoreMidi.MidiCIProcessInquiryMessageType.EndOfMidiMessageReport
+F:CoreMidi.MidiCIProcessInquiryMessageType.InquiryMidiMessageReport
+F:CoreMidi.MidiCIProcessInquiryMessageType.InquiryProcessInquiryCapabilities
+F:CoreMidi.MidiCIProcessInquiryMessageType.ReplyToMidiMessageReport
+F:CoreMidi.MidiCIProcessInquiryMessageType.ReplyToProcessInquiryCapabilities
+F:CoreMidi.MidiCIProfileIdManufacturerSpecific.Info1
+F:CoreMidi.MidiCIProfileIdManufacturerSpecific.Info2
+F:CoreMidi.MidiCIProfileIdManufacturerSpecific.SysExId1
+F:CoreMidi.MidiCIProfileIdManufacturerSpecific.SysExId2
+F:CoreMidi.MidiCIProfileIdManufacturerSpecific.SysExId3
+F:CoreMidi.MidiCIProfileIdStandard.ProfileBank
+F:CoreMidi.MidiCIProfileIdStandard.ProfileIdByte1
+F:CoreMidi.MidiCIProfileIdStandard.ProfileLevel
+F:CoreMidi.MidiCIProfileIdStandard.ProfileNumber
+F:CoreMidi.MidiCIProfileIdStandard.ProfileVersion
+F:CoreMidi.MidiCIProfileMessageType.DetailsInquiry
+F:CoreMidi.MidiCIProfileMessageType.ProfileAdded
+F:CoreMidi.MidiCIProfileMessageType.ProfileDisabledReport
+F:CoreMidi.MidiCIProfileMessageType.ProfileEnabledReport
+F:CoreMidi.MidiCIProfileMessageType.ProfileInquiry
+F:CoreMidi.MidiCIProfileMessageType.ProfileRemoved
+F:CoreMidi.MidiCIProfileMessageType.ProfileSpecificData
+F:CoreMidi.MidiCIProfileMessageType.ReplyToDetailsInquiry
+F:CoreMidi.MidiCIProfileMessageType.ReplyToProfileInquiry
+F:CoreMidi.MidiCIProfileMessageType.SetProfileOff
+F:CoreMidi.MidiCIProfileMessageType.SetProfileOn
+F:CoreMidi.MidiCIProfileType.FunctionBlock
+F:CoreMidi.MidiCIProfileType.Group
+F:CoreMidi.MidiCIProfileType.Multichannel
+F:CoreMidi.MidiCIProfileType.SingleChannel
+F:CoreMidi.MidiCIPropertyExchangeMessageType.InquiryGetPropertyData
+F:CoreMidi.MidiCIPropertyExchangeMessageType.InquiryHasPropertyData_Reserved
+F:CoreMidi.MidiCIPropertyExchangeMessageType.InquiryPropertyExchangeCapabilities
+F:CoreMidi.MidiCIPropertyExchangeMessageType.InquiryReplyToHasPropertyData_Reserved
+F:CoreMidi.MidiCIPropertyExchangeMessageType.InquirySetPropertyData
+F:CoreMidi.MidiCIPropertyExchangeMessageType.Notify
+F:CoreMidi.MidiCIPropertyExchangeMessageType.ReplyToGetProperty
+F:CoreMidi.MidiCIPropertyExchangeMessageType.ReplyToPropertyExchangeCapabilities
+F:CoreMidi.MidiCIPropertyExchangeMessageType.ReplyToSetPropertyData
+F:CoreMidi.MidiCIPropertyExchangeMessageType.ReplyToSubscription
+F:CoreMidi.MidiCIPropertyExchangeMessageType.Subscription
+F:CoreMidi.MidiCIPropertyExchangeRequestID.BadRequest
F:CoreMidi.MidiControlTransform.ControlNumber
F:CoreMidi.MidiControlTransform.ControlType
F:CoreMidi.MidiControlTransform.Param
@@ -7522,6 +7579,9 @@ F:CoreMidi.MidiError.WrongThread
F:CoreMidi.MidiMessageType.ChannelVoice1
F:CoreMidi.MidiMessageType.ChannelVoice2
F:CoreMidi.MidiMessageType.Data128
+F:CoreMidi.MidiMessageType.FlexData
+F:CoreMidi.MidiMessageType.Invalid
+F:CoreMidi.MidiMessageType.Stream
F:CoreMidi.MidiMessageType.SysEx
F:CoreMidi.MidiMessageType.System
F:CoreMidi.MidiMessageType.UnknownF
@@ -7576,9 +7636,44 @@ F:CoreMidi.MidiTransformType.MaxValue
F:CoreMidi.MidiTransformType.MinValue
F:CoreMidi.MidiTransformType.None
F:CoreMidi.MidiTransformType.Scale
+F:CoreMidi.MidiUmpCIObjectBackingType.DriverDevice
+F:CoreMidi.MidiUmpCIObjectBackingType.Unknown
+F:CoreMidi.MidiUmpCIObjectBackingType.UsbMidi
+F:CoreMidi.MidiUmpCIObjectBackingType.Virtual
+F:CoreMidi.MidiUmpFunctionBlockDirection.Bidirectional
+F:CoreMidi.MidiUmpFunctionBlockDirection.Input
+F:CoreMidi.MidiUmpFunctionBlockDirection.Output
+F:CoreMidi.MidiUmpFunctionBlockDirection.Unknown
+F:CoreMidi.MidiUmpFunctionBlockMidi1Info.NotMidi1
+F:CoreMidi.MidiUmpFunctionBlockMidi1Info.RestrictedBandwidth
+F:CoreMidi.MidiUmpFunctionBlockMidi1Info.UnrestrictedBandwidth
+F:CoreMidi.MidiUmpFunctionBlockUIHint.Receiver
+F:CoreMidi.MidiUmpFunctionBlockUIHint.Sender
+F:CoreMidi.MidiUmpFunctionBlockUIHint.SenderReceiver
+F:CoreMidi.MidiUmpFunctionBlockUIHint.Unknown
+F:CoreMidi.MidiUmpProtocolOptions.SupportedProtocolMidi1
+F:CoreMidi.MidiUmpProtocolOptions.SupportedProtocolMidi2
+F:CoreMidi.MidiUtilityStatus.DeltaClockstampTicksPerQuarterNote
F:CoreMidi.MidiUtilityStatus.JitterReductionClock
F:CoreMidi.MidiUtilityStatus.JitterReductionTimestamp
F:CoreMidi.MidiUtilityStatus.Noop
+F:CoreMidi.MidiUtilityStatus.TicksSinceLastEvent
+F:CoreMidi.UmpStreamMessageFormat.Complete
+F:CoreMidi.UmpStreamMessageFormat.Continuing
+F:CoreMidi.UmpStreamMessageFormat.End
+F:CoreMidi.UmpStreamMessageFormat.Start
+F:CoreMidi.UmpStreamMessageStatus.DeviceIdentityNotification
+F:CoreMidi.UmpStreamMessageStatus.EndOfClip
+F:CoreMidi.UmpStreamMessageStatus.EndpointDiscovery
+F:CoreMidi.UmpStreamMessageStatus.EndpointInfoNotification
+F:CoreMidi.UmpStreamMessageStatus.EndpointNameNotification
+F:CoreMidi.UmpStreamMessageStatus.FunctionBlockDiscovery
+F:CoreMidi.UmpStreamMessageStatus.FunctionBlockInfoNotification
+F:CoreMidi.UmpStreamMessageStatus.FunctionBlockNameNotification
+F:CoreMidi.UmpStreamMessageStatus.ProductInstanceIDNotification
+F:CoreMidi.UmpStreamMessageStatus.StartOfClip
+F:CoreMidi.UmpStreamMessageStatus.StreamConfigurationNotification
+F:CoreMidi.UmpStreamMessageStatus.StreamConfigurationRequest
F:CoreML.MLComputeUnits.All
F:CoreML.MLComputeUnits.CpuAndGpu
F:CoreML.MLComputeUnits.CPUAndNeuralEngine
@@ -32608,6 +32703,7 @@ M:CoreMidi.IOErrorEventArgs.#ctor(CoreMidi.MidiDevice,System.Int32)
M:CoreMidi.Midi.GetDevice(System.IntPtr)
M:CoreMidi.Midi.GetExternalDevice(System.IntPtr)
M:CoreMidi.Midi.Restart
+M:CoreMidi.Midi2DeviceInfo.#ctor(CoreMidi.Midi2DeviceManufacturer,System.UInt16,System.UInt16,CoreMidi.Midi2DeviceRevisionLevel)
M:CoreMidi.MidiBluetoothDriver.#ctor
M:CoreMidi.MidiBluetoothDriver.ActivateAllConnections
M:CoreMidi.MidiBluetoothDriver.Disconnect(Foundation.NSString)
@@ -32727,6 +32823,17 @@ M:CoreMidi.MidiThruConnection.SetParams(CoreMidi.MidiThruConnectionParams)
M:CoreMidi.MidiThruConnectionEndpoint.#ctor(System.Int32,System.Int32)
M:CoreMidi.MidiThruConnectionParams.#ctor
M:CoreMidi.MidiTransform.#ctor(CoreMidi.MidiTransformType,System.Int16)
+M:CoreMidi.MidiUmpCIProfile.SetProfileState(System.Boolean,System.UInt16,Foundation.NSError@)
+M:CoreMidi.MidiUmpFunctionBlock.Dispose(System.Boolean)
+M:CoreMidi.MidiUmpMutableEndpoint.#ctor(System.String,CoreMidi.Midi2DeviceInfo,System.String,CoreMidi.MidiProtocolId,CoreMidi.MidiReceiveBlock)
+M:CoreMidi.MidiUmpMutableEndpoint.RegisterFunctionBlocks(CoreMidi.MidiUmpMutableFunctionBlock[],System.Boolean,Foundation.NSError@)
+M:CoreMidi.MidiUmpMutableEndpoint.SetEnabled(System.Boolean,Foundation.NSError@)
+M:CoreMidi.MidiUmpMutableEndpoint.SetName(System.String,Foundation.NSError@)
+M:CoreMidi.MidiUmpMutableFunctionBlock.#ctor(System.String,CoreMidi.MidiUmpFunctionBlockDirection,System.Byte,System.Byte,System.Byte,CoreMidi.MidiUmpFunctionBlockMidi1Info,CoreMidi.MidiUmpFunctionBlockUIHint,System.Boolean)
+M:CoreMidi.MidiUmpMutableFunctionBlock.Dispose(System.Boolean)
+M:CoreMidi.MidiUmpMutableFunctionBlock.ReconfigureWithFirstGroup(System.Byte,CoreMidi.MidiUmpFunctionBlockDirection,CoreMidi.MidiUmpFunctionBlockMidi1Info,CoreMidi.MidiUmpFunctionBlockUIHint,Foundation.NSError@)
+M:CoreMidi.MidiUmpMutableFunctionBlock.SetEnabled(System.Boolean,Foundation.NSError@)
+M:CoreMidi.MidiUmpMutableFunctionBlock.SetName(System.String,Foundation.NSError@)
M:CoreMidi.ObjectAddedOrRemovedEventArgs.#ctor(CoreMidi.MidiObject,CoreMidi.MidiObject)
M:CoreMidi.ObjectPropertyChangedEventArgs.#ctor(CoreMidi.MidiObject,System.String)
M:CoreML.IMLBatchProvider.GetFeatures(System.IntPtr)
@@ -63532,10 +63639,32 @@ P:CoreMidi.Midi.NetworkBonjourServiceType
P:CoreMidi.Midi.NetworkNotificationContactsDidChange
P:CoreMidi.Midi.NetworkNotificationSessionDidChange
P:CoreMidi.Midi.SourceCount
+P:CoreMidi.Midi2DeviceInfo.Family
+P:CoreMidi.Midi2DeviceInfo.ManufacturerId
+P:CoreMidi.Midi2DeviceInfo.ModelNumber
+P:CoreMidi.Midi2DeviceInfo.RevisionLevel
+P:CoreMidi.Midi2DeviceManufacturer.SysExIdByte
+P:CoreMidi.Midi2DeviceRevisionLevel.RevisionLevel
+P:CoreMidi.MidiCIDevice.DeviceInfo
+P:CoreMidi.MidiCIDevice.DeviceType
+P:CoreMidi.MidiCIDevice.MaxPropertyExchangeRequests
+P:CoreMidi.MidiCIDevice.MaxSysExSize
+P:CoreMidi.MidiCIDevice.Muid
+P:CoreMidi.MidiCIDevice.Profiles
+P:CoreMidi.MidiCIDevice.SupportsProcessInquiry
+P:CoreMidi.MidiCIDevice.SupportsProfileConfiguration
+P:CoreMidi.MidiCIDevice.SupportsPropertyExchange
+P:CoreMidi.MidiCIDevice.SupportsProtocolNegotiation
+P:CoreMidi.MidiCIDevice.WasAddedNotification
+P:CoreMidi.MidiCIDevice.WasRemovedNotification
P:CoreMidi.MidiCIDeviceInfo.Family
P:CoreMidi.MidiCIDeviceInfo.ManufacturerId
P:CoreMidi.MidiCIDeviceInfo.ModelNumber
P:CoreMidi.MidiCIDeviceInfo.RevisionLevel
+P:CoreMidi.MidiCIDeviceManager.DiscoveredCIDevices
+P:CoreMidi.MidiCIDeviceManager.SharedInstance
+P:CoreMidi.MidiCIDeviceManagerDictionaryKey.CIDeviceObject
+P:CoreMidi.MidiCIDeviceManagerDictionaryKey.CIProfileObjectKey
P:CoreMidi.MidiCIDiscoveredNode.DeviceInfo
P:CoreMidi.MidiCIDiscoveredNode.MaximumSysExSize
P:CoreMidi.MidiCIDiscoveredNode.SupportsProfiles
@@ -63543,6 +63672,10 @@ P:CoreMidi.MidiCIDiscoveredNode.SupportsProperties
P:CoreMidi.MidiCIDiscoveryManager.SharedInstance
P:CoreMidi.MidiCIProfile.Name
P:CoreMidi.MidiCIProfile.ProfileId
+P:CoreMidi.MidiCIProfile.WasRemovedNotification
+P:CoreMidi.MidiCIProfile.WasUpdatedNotification
+P:CoreMidi.MidiCIProfileId.ManufacturerSpecific
+P:CoreMidi.MidiCIProfileId.Standard
P:CoreMidi.MidiCIProfileState.DisabledProfiles
P:CoreMidi.MidiCIProfileState.EnabledProfiles
P:CoreMidi.MidiCIProfileState.MidiChannel
@@ -63607,6 +63740,7 @@ P:CoreMidi.MidiDevice.TransmitsProgramChanges
P:CoreMidi.MidiDevice.UniqueID
P:CoreMidi.MidiDevice.UsesSerial
P:CoreMidi.MidiEndpoint.AdvanceScheduleTimeMuSec
+P:CoreMidi.MidiEndpoint.AssociatedEndpoint
P:CoreMidi.MidiEndpoint.ConnectionUniqueIDData
P:CoreMidi.MidiEndpoint.ConnectionUniqueIDInt
P:CoreMidi.MidiEndpoint.DisplayName
@@ -63712,6 +63846,48 @@ P:CoreMidi.MidiThruConnectionParams.PitchBend
P:CoreMidi.MidiThruConnectionParams.ProgramChange
P:CoreMidi.MidiThruConnectionParams.Sources
P:CoreMidi.MidiThruConnectionParams.Velocity
+P:CoreMidi.MidiUmpCIProfile.EnabledChannelCount
+P:CoreMidi.MidiUmpCIProfile.FirstChannel
+P:CoreMidi.MidiUmpCIProfile.GroupOffset
+P:CoreMidi.MidiUmpCIProfile.IsEnabled
+P:CoreMidi.MidiUmpCIProfile.Name
+P:CoreMidi.MidiUmpCIProfile.ProfileId
+P:CoreMidi.MidiUmpCIProfile.ProfileType
+P:CoreMidi.MidiUmpCIProfile.TotalChannelCount
+P:CoreMidi.MidiUmpEndpoint.DeviceInfo
+P:CoreMidi.MidiUmpEndpoint.EndpointType
+P:CoreMidi.MidiUmpEndpoint.FunctionBlocks
+P:CoreMidi.MidiUmpEndpoint.HasJrtsReceiveCapability
+P:CoreMidi.MidiUmpEndpoint.HasJrtsTransmitCapability
+P:CoreMidi.MidiUmpEndpoint.HasStaticFunctionBlocks
+P:CoreMidi.MidiUmpEndpoint.MidiDestination
+P:CoreMidi.MidiUmpEndpoint.MidiProtocol
+P:CoreMidi.MidiUmpEndpoint.MidiSource
+P:CoreMidi.MidiUmpEndpoint.Name
+P:CoreMidi.MidiUmpEndpoint.ProductInstanceId
+P:CoreMidi.MidiUmpEndpoint.SupportedMidiProtocols
+P:CoreMidi.MidiUmpEndpoint.WasAddedNotification
+P:CoreMidi.MidiUmpEndpoint.WasRemovedNotification
+P:CoreMidi.MidiUmpEndpoint.WasUpdatedNotification
+P:CoreMidi.MidiUmpEndpointManager.SharedInstance
+P:CoreMidi.MidiUmpEndpointManager.UmpEndpoints
+P:CoreMidi.MidiUmpEndpointManagerDictionaryKey.UmpEndpointObject
+P:CoreMidi.MidiUmpEndpointManagerDictionaryKey.UmpFunctionBlockObject
+P:CoreMidi.MidiUmpFunctionBlock.Direction
+P:CoreMidi.MidiUmpFunctionBlock.FirstGroup
+P:CoreMidi.MidiUmpFunctionBlock.FunctionBlockId
+P:CoreMidi.MidiUmpFunctionBlock.IsEnabled
+P:CoreMidi.MidiUmpFunctionBlock.MaxSysEx8Streams
+P:CoreMidi.MidiUmpFunctionBlock.Midi1Info
+P:CoreMidi.MidiUmpFunctionBlock.MidiCIDevice
+P:CoreMidi.MidiUmpFunctionBlock.Name
+P:CoreMidi.MidiUmpFunctionBlock.TotalGroupsSpanned
+P:CoreMidi.MidiUmpFunctionBlock.UIHint
+P:CoreMidi.MidiUmpFunctionBlock.UmpEndpoint
+P:CoreMidi.MidiUmpFunctionBlock.WasUpdatedNotification
+P:CoreMidi.MidiUmpMutableEndpoint.IsEnabled
+P:CoreMidi.MidiUmpMutableEndpoint.MutableFunctionBlocks
+P:CoreMidi.MidiUmpMutableFunctionBlock.UmpEndpoint
P:CoreMidi.MidiValueMap.Value
P:CoreMidi.ObjectAddedOrRemovedEventArgs.Child
P:CoreMidi.ObjectAddedOrRemovedEventArgs.Parent
@@ -80642,17 +80818,34 @@ T:CoreMedia.LensStabilizationStatus
T:CoreMedia.TextMarkupColor
T:CoreMidi.IMidiCIProfileResponderDelegate
T:CoreMidi.IOErrorEventArgs
+T:CoreMidi.Midi2DeviceInfo
+T:CoreMidi.Midi2DeviceManufacturer
+T:CoreMidi.Midi2DeviceRevisionLevel
T:CoreMidi.MidiBluetoothDriver
+T:CoreMidi.MidiCICategoryOptions
+T:CoreMidi.MidiCIDevice
T:CoreMidi.MidiCIDeviceIdentification
T:CoreMidi.MidiCIDeviceInfo
+T:CoreMidi.MidiCIDeviceManager
+T:CoreMidi.MidiCIDeviceManagerDictionaryKey
+T:CoreMidi.MidiCIDeviceType
T:CoreMidi.MidiCIDiscoveredNode
T:CoreMidi.MidiCIDiscoveryManager
T:CoreMidi.MidiCIDiscoveryResponseDelegate
+T:CoreMidi.MidiCIManagementMessageType
+T:CoreMidi.MidiCIProcessInquiryMessageType
T:CoreMidi.MidiCIProfile
T:CoreMidi.MidiCIProfileChangedHandler
+T:CoreMidi.MidiCIProfileId
+T:CoreMidi.MidiCIProfileIdManufacturerSpecific
+T:CoreMidi.MidiCIProfileIdStandard
+T:CoreMidi.MidiCIProfileMessageType
T:CoreMidi.MidiCIProfileResponderDelegate
T:CoreMidi.MidiCIProfileSpecificDataHandler
T:CoreMidi.MidiCIProfileState
+T:CoreMidi.MidiCIProfileType
+T:CoreMidi.MidiCIPropertyExchangeMessageType
+T:CoreMidi.MidiCIPropertyExchangeRequestID
T:CoreMidi.MidiCIResponder
T:CoreMidi.MidiCISession
T:CoreMidi.MidiCISessionDisconnectHandler
@@ -80675,6 +80868,7 @@ T:CoreMidi.MidiPerNoteManagementOptions
T:CoreMidi.MidiPort
T:CoreMidi.MidiProgramChangeOptions
T:CoreMidi.MidiProtocolId
+T:CoreMidi.MidiReceiveBlock
T:CoreMidi.MidiSysExStatus
T:CoreMidi.MidiSystemStatus
T:CoreMidi.MidiThruConnection
@@ -80683,10 +80877,24 @@ T:CoreMidi.MidiThruConnectionParams
T:CoreMidi.MidiTransform
T:CoreMidi.MidiTransformControlType
T:CoreMidi.MidiTransformType
+T:CoreMidi.MidiUmpCIObjectBackingType
+T:CoreMidi.MidiUmpCIProfile
+T:CoreMidi.MidiUmpEndpoint
+T:CoreMidi.MidiUmpEndpointManager
+T:CoreMidi.MidiUmpEndpointManagerDictionaryKey
+T:CoreMidi.MidiUmpFunctionBlock
+T:CoreMidi.MidiUmpFunctionBlockDirection
+T:CoreMidi.MidiUmpFunctionBlockMidi1Info
+T:CoreMidi.MidiUmpFunctionBlockUIHint
+T:CoreMidi.MidiUmpMutableEndpoint
+T:CoreMidi.MidiUmpMutableFunctionBlock
+T:CoreMidi.MidiUmpProtocolOptions
T:CoreMidi.MidiUtilityStatus
T:CoreMidi.MidiValueMap
T:CoreMidi.ObjectAddedOrRemovedEventArgs
T:CoreMidi.ObjectPropertyChangedEventArgs
+T:CoreMidi.UmpStreamMessageFormat
+T:CoreMidi.UmpStreamMessageStatus
T:CoreML.IMLComputeDeviceProtocol
T:CoreML.IMLWritable
T:CoreML.MLComputePlan
diff --git a/tests/monotouch-test/CoreMidi/Midi2DeviceManufacturerTest.cs b/tests/monotouch-test/CoreMidi/Midi2DeviceManufacturerTest.cs
new file mode 100644
index 000000000000..2c0fc4a208e0
--- /dev/null
+++ b/tests/monotouch-test/CoreMidi/Midi2DeviceManufacturerTest.cs
@@ -0,0 +1,29 @@
+//
+// Unit tests for Midi2DeviceManufacturer
+//
+
+#if !__TVOS__ && !__WATCHOS__
+using System;
+using Foundation;
+using CoreMidi;
+using NUnit.Framework;
+
+namespace MonoTouchFixtures.CoreMidi {
+ [TestFixture]
+ [Preserve (AllMembers = true)]
+ public class Midi2DeviceManufacturerTest {
+ [Test]
+ public void SysExIdByte ()
+ {
+ var value = default (Midi2DeviceManufacturer);
+ CollectionAssert.AreEqual (new byte [] { 0, 0, 0 }, value.SysExIdByte, "A");
+
+ value.SysExIdByte = new byte [] { 1, 2, 3 };
+ CollectionAssert.AreEqual (new byte [] { 1, 2, 3 }, value.SysExIdByte, "B");
+
+ Assert.Throws (() => value.SysExIdByte = null, "C");
+ Assert.Throws (() => value.SysExIdByte = new byte [2], "D");
+ }
+ }
+}
+#endif
diff --git a/tests/monotouch-test/CoreMidi/Midi2DeviceRevisionLevelTest.cs b/tests/monotouch-test/CoreMidi/Midi2DeviceRevisionLevelTest.cs
new file mode 100644
index 000000000000..b3e1bb4905d0
--- /dev/null
+++ b/tests/monotouch-test/CoreMidi/Midi2DeviceRevisionLevelTest.cs
@@ -0,0 +1,29 @@
+//
+// Unit tests for Midi2DeviceRevisionLevel
+//
+
+#if !__TVOS__ && !__WATCHOS__
+using System;
+using Foundation;
+using CoreMidi;
+using NUnit.Framework;
+
+namespace MonoTouchFixtures.CoreMidi {
+ [TestFixture]
+ [Preserve (AllMembers = true)]
+ public class Midi2DeviceRevisionLevelTest {
+ [Test]
+ public void RevisionLevel ()
+ {
+ var value = default (Midi2DeviceRevisionLevel);
+ CollectionAssert.AreEqual (new byte [] { 0, 0, 0, 0 }, value.RevisionLevel, "A");
+
+ value.RevisionLevel = new byte [] { 1, 2, 3, 4 };
+ CollectionAssert.AreEqual (new byte [] { 1, 2, 3, 4 }, value.RevisionLevel, "B");
+
+ Assert.Throws (() => value.RevisionLevel = null, "C");
+ Assert.Throws (() => value.RevisionLevel = new byte [2], "D");
+ }
+ }
+}
+#endif
diff --git a/tests/monotouch-test/CoreMidi/MidiCIProfileIdTest.cs b/tests/monotouch-test/CoreMidi/MidiCIProfileIdTest.cs
new file mode 100644
index 000000000000..120a30721c3b
--- /dev/null
+++ b/tests/monotouch-test/CoreMidi/MidiCIProfileIdTest.cs
@@ -0,0 +1,66 @@
+//
+// Unit tests for MidiCIProfileId
+//
+
+#if !__TVOS__ && !__WATCHOS__
+using System;
+using Foundation;
+using CoreMidi;
+using NUnit.Framework;
+
+namespace MonoTouchFixtures.CoreMidi {
+ [TestFixture]
+ [Preserve (AllMembers = true)]
+ public class MidiCIProfileIdTest {
+ [Test]
+ public void Standard ()
+ {
+ var value = default (MidiCIProfileId);
+ Assert.AreEqual (0, value.Standard.ProfileIdByte1, "ProfileIdByte1 A");
+ Assert.AreEqual (0, value.Standard.ProfileBank, "ProfileBank A");
+ Assert.AreEqual (0, value.Standard.ProfileNumber, "ProfileNumber A");
+ Assert.AreEqual (0, value.Standard.ProfileVersion, "ProfileVersion A");
+ Assert.AreEqual (0, value.Standard.ProfileLevel, "ProfileLevel A");
+
+ value.Standard = new MidiCIProfileIdStandard () {
+ ProfileIdByte1 = 1,
+ ProfileBank = 2,
+ ProfileNumber = 3,
+ ProfileVersion = 4,
+ ProfileLevel = 5,
+ };
+
+ Assert.AreEqual (1, value.Standard.ProfileIdByte1, "ProfileIdByte1 B");
+ Assert.AreEqual (2, value.Standard.ProfileBank, "ProfileBank B");
+ Assert.AreEqual (3, value.Standard.ProfileNumber, "ProfileNumber B");
+ Assert.AreEqual (4, value.Standard.ProfileVersion, "ProfileVersion B");
+ Assert.AreEqual (5, value.Standard.ProfileLevel, "ProfileLevel B");
+ }
+
+ [Test]
+ public void ManufacturerSpecific ()
+ {
+ var value = default (MidiCIProfileId);
+ Assert.AreEqual (0, value.ManufacturerSpecific.SysExId1, "SysExId1 A");
+ Assert.AreEqual (0, value.ManufacturerSpecific.SysExId2, "SysExId2 A");
+ Assert.AreEqual (0, value.ManufacturerSpecific.SysExId3, "SysExId3 A");
+ Assert.AreEqual (0, value.ManufacturerSpecific.Info1, "Info1 A");
+ Assert.AreEqual (0, value.ManufacturerSpecific.Info2, "Info2 A");
+
+ value.ManufacturerSpecific = new MidiCIProfileIdManufacturerSpecific () {
+ SysExId1 = 1,
+ SysExId2 = 2,
+ SysExId3 = 3,
+ Info1 = 4,
+ Info2 = 5,
+ };
+
+ Assert.AreEqual (1, value.ManufacturerSpecific.SysExId1, "SysExId1 B");
+ Assert.AreEqual (2, value.ManufacturerSpecific.SysExId2, "SysExId2 B");
+ Assert.AreEqual (3, value.ManufacturerSpecific.SysExId3, "SysExId3 B");
+ Assert.AreEqual (4, value.ManufacturerSpecific.Info1, "Info1 B");
+ Assert.AreEqual (5, value.ManufacturerSpecific.Info2, "Info2 B");
+ }
+ }
+}
+#endif
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.ignore b/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.ignore
index fb581291134c..df40d9225eae 100644
--- a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.ignore
+++ b/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.ignore
@@ -25,3 +25,6 @@
!missing-pinvoke! MIDIReceivedEventList is not bound
!missing-pinvoke! MIDISendEventList is not bound
!missing-pinvoke! MIDISourceCreateWithProtocol is not bound
+!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
+!missing-pinvoke! MIDISendUMPSysex is not bound
+!missing-pinvoke! MIDISendUMPSysex8 is not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.todo b/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.todo
deleted file mode 100644
index d2fc1ad6beb8..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/MacCatalyst-CoreMIDI.todo
+++ /dev/null
@@ -1,115 +0,0 @@
-!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
-!missing-pinvoke! MIDISendUMPSysex is not bound
-!missing-pinvoke! MIDISendUMPSysex8 is not bound
-!deprecated-attribute-missing! MIDICIDeviceInfo missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveredNode missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveryManager missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIProfileState::initWithChannel:enabledProfiles:disabledProfiles: missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIResponder missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICISession missing a [Deprecated] attribute
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-field! kMIDIPropertyAssociatedEndpoint not bound
-!missing-field! MIDICIDeviceObjectKey not bound
-!missing-field! MIDICIDeviceWasAddedNotification not bound
-!missing-field! MIDICIDeviceWasRemovedNotification not bound
-!missing-field! MIDICIProfileObjectKey not bound
-!missing-field! MIDICIProfileWasRemovedNotification not bound
-!missing-field! MIDICIProfileWasUpdatedNotification not bound
-!missing-field! MIDIUMPEndpointObjectKey not bound
-!missing-field! MIDIUMPEndpointWasAddedNotification not bound
-!missing-field! MIDIUMPEndpointWasRemovedNotification not bound
-!missing-field! MIDIUMPEndpointWasUpdatedNotification not bound
-!missing-field! MIDIUMPFunctionBlockObjectKey not bound
-!missing-field! MIDIUMPFunctionBlockWasUpdatedNotification not bound
-!missing-selector! +MIDICIDeviceManager::sharedInstance not bound
-!missing-selector! +MIDIUMPEndpointManager::sharedInstance not bound
-!missing-selector! MIDI2DeviceInfo::family not bound
-!missing-selector! MIDI2DeviceInfo::initWithManufacturerID:family:modelNumber:revisionLevel: not bound
-!missing-selector! MIDI2DeviceInfo::manufacturerID not bound
-!missing-selector! MIDI2DeviceInfo::modelNumber not bound
-!missing-selector! MIDI2DeviceInfo::revisionLevel not bound
-!missing-selector! MIDICIDevice::deviceInfo not bound
-!missing-selector! MIDICIDevice::deviceType not bound
-!missing-selector! MIDICIDevice::maxPropertyExchangeRequests not bound
-!missing-selector! MIDICIDevice::maxSysExSize not bound
-!missing-selector! MIDICIDevice::MUID not bound
-!missing-selector! MIDICIDevice::profiles not bound
-!missing-selector! MIDICIDevice::supportsProcessInquiry not bound
-!missing-selector! MIDICIDevice::supportsProfileConfiguration not bound
-!missing-selector! MIDICIDevice::supportsPropertyExchange not bound
-!missing-selector! MIDICIDevice::supportsProtocolNegotiation not bound
-!missing-selector! MIDICIDeviceManager::discoveredCIDevices not bound
-!missing-selector! MIDIUMPCIProfile::enabledChannelCount not bound
-!missing-selector! MIDIUMPCIProfile::firstChannel not bound
-!missing-selector! MIDIUMPCIProfile::groupOffset not bound
-!missing-selector! MIDIUMPCIProfile::isEnabled not bound
-!missing-selector! MIDIUMPCIProfile::name not bound
-!missing-selector! MIDIUMPCIProfile::profileID not bound
-!missing-selector! MIDIUMPCIProfile::profileType not bound
-!missing-selector! MIDIUMPCIProfile::setProfileState:enabledChannelCount:error: not bound
-!missing-selector! MIDIUMPCIProfile::totalChannelCount not bound
-!missing-selector! MIDIUMPEndpoint::deviceInfo not bound
-!missing-selector! MIDIUMPEndpoint::endpointType not bound
-!missing-selector! MIDIUMPEndpoint::functionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSReceiveCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSTransmitCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasStaticFunctionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::MIDIDestination not bound
-!missing-selector! MIDIUMPEndpoint::MIDIProtocol not bound
-!missing-selector! MIDIUMPEndpoint::MIDISource not bound
-!missing-selector! MIDIUMPEndpoint::name not bound
-!missing-selector! MIDIUMPEndpoint::productInstanceID not bound
-!missing-selector! MIDIUMPEndpoint::setFunctionBlocks: not bound
-!missing-selector! MIDIUMPEndpoint::supportedMIDIProtocols not bound
-!missing-selector! MIDIUMPEndpointManager::UMPEndpoints not bound
-!missing-selector! MIDIUMPFunctionBlock::direction not bound
-!missing-selector! MIDIUMPFunctionBlock::firstGroup not bound
-!missing-selector! MIDIUMPFunctionBlock::functionBlockID not bound
-!missing-selector! MIDIUMPFunctionBlock::isEnabled not bound
-!missing-selector! MIDIUMPFunctionBlock::maxSysEx8Streams not bound
-!missing-selector! MIDIUMPFunctionBlock::MIDI1Info not bound
-!missing-selector! MIDIUMPFunctionBlock::midiCIDevice not bound
-!missing-selector! MIDIUMPFunctionBlock::name not bound
-!missing-selector! MIDIUMPFunctionBlock::totalGroupsSpanned not bound
-!missing-selector! MIDIUMPFunctionBlock::UIHint not bound
-!missing-selector! MIDIUMPFunctionBlock::UMPEndpoint not bound
-!missing-selector! MIDIUMPMutableEndpoint::initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback: not bound
-!missing-selector! MIDIUMPMutableEndpoint::isEnabled not bound
-!missing-selector! MIDIUMPMutableEndpoint::mutableFunctionBlocks not bound
-!missing-selector! MIDIUMPMutableEndpoint::registerFunctionBlocks:markAsStatic:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setMutableFunctionBlocks: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::UMPEndpoint not bound
-!missing-type! MIDI2DeviceInfo not bound
-!missing-type! MIDICIDevice not bound
-!missing-type! MIDICIDeviceManager not bound
-!missing-type! MIDIUMPCIProfile not bound
-!missing-type! MIDIUMPEndpoint not bound
-!missing-type! MIDIUMPEndpointManager not bound
-!missing-type! MIDIUMPFunctionBlock not bound
-!missing-type! MIDIUMPMutableEndpoint not bound
-!missing-type! MIDIUMPMutableFunctionBlock not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/common-CoreMIDI.ignore b/tests/xtro-sharpie/api-annotations-dotnet/common-CoreMIDI.ignore
index cf41239c51e9..f5f3a3b4ae0b 100644
--- a/tests/xtro-sharpie/api-annotations-dotnet/common-CoreMIDI.ignore
+++ b/tests/xtro-sharpie/api-annotations-dotnet/common-CoreMIDI.ignore
@@ -1,3 +1,4 @@
# https://github.com/xamarin/xamarin-macios/issues/4452#issuecomment-660220392
!missing-pinvoke! MIDIEventListAdd is not bound
!missing-pinvoke! MIDIEventListInit is not bound
+!missing-pinvoke! MIDIEventListForEachEvent is not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.ignore b/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.ignore
index fb581291134c..df40d9225eae 100644
--- a/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.ignore
+++ b/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.ignore
@@ -25,3 +25,6 @@
!missing-pinvoke! MIDIReceivedEventList is not bound
!missing-pinvoke! MIDISendEventList is not bound
!missing-pinvoke! MIDISourceCreateWithProtocol is not bound
+!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
+!missing-pinvoke! MIDISendUMPSysex is not bound
+!missing-pinvoke! MIDISendUMPSysex8 is not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.todo b/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.todo
deleted file mode 100644
index 38b73ab32af3..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/iOS-CoreMIDI.todo
+++ /dev/null
@@ -1,115 +0,0 @@
-!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
-!missing-pinvoke! MIDISendUMPSysex is not bound
-!missing-pinvoke! MIDISendUMPSysex8 is not bound
-!deprecated-attribute-missing! MIDICIDeviceInfo missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveredNode missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveryManager missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIProfileState::initWithChannel:enabledProfiles:disabledProfiles: missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIResponder missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICISession missing a [Deprecated] attribute
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-field! kMIDIPropertyAssociatedEndpoint not bound
-!missing-field! MIDICIDeviceObjectKey not bound
-!missing-field! MIDICIDeviceWasAddedNotification not bound
-!missing-field! MIDICIDeviceWasRemovedNotification not bound
-!missing-field! MIDICIProfileObjectKey not bound
-!missing-field! MIDICIProfileWasRemovedNotification not bound
-!missing-field! MIDIUMPEndpointObjectKey not bound
-!missing-field! MIDIUMPEndpointWasAddedNotification not bound
-!missing-field! MIDIUMPEndpointWasRemovedNotification not bound
-!missing-field! MIDIUMPFunctionBlockObjectKey not bound
-!missing-selector! +MIDICIDeviceManager::sharedInstance not bound
-!missing-selector! +MIDIUMPEndpointManager::sharedInstance not bound
-!missing-selector! MIDI2DeviceInfo::family not bound
-!missing-selector! MIDI2DeviceInfo::initWithManufacturerID:family:modelNumber:revisionLevel: not bound
-!missing-selector! MIDI2DeviceInfo::manufacturerID not bound
-!missing-selector! MIDI2DeviceInfo::modelNumber not bound
-!missing-selector! MIDI2DeviceInfo::revisionLevel not bound
-!missing-selector! MIDICIDevice::deviceInfo not bound
-!missing-selector! MIDICIDevice::deviceType not bound
-!missing-selector! MIDICIDevice::maxPropertyExchangeRequests not bound
-!missing-selector! MIDICIDevice::maxSysExSize not bound
-!missing-selector! MIDICIDevice::MUID not bound
-!missing-selector! MIDICIDevice::profiles not bound
-!missing-selector! MIDICIDevice::supportsProcessInquiry not bound
-!missing-selector! MIDICIDevice::supportsProfileConfiguration not bound
-!missing-selector! MIDICIDevice::supportsPropertyExchange not bound
-!missing-selector! MIDICIDevice::supportsProtocolNegotiation not bound
-!missing-selector! MIDICIDeviceManager::discoveredCIDevices not bound
-!missing-selector! MIDIUMPCIProfile::enabledChannelCount not bound
-!missing-selector! MIDIUMPCIProfile::firstChannel not bound
-!missing-selector! MIDIUMPCIProfile::groupOffset not bound
-!missing-selector! MIDIUMPCIProfile::isEnabled not bound
-!missing-selector! MIDIUMPCIProfile::name not bound
-!missing-selector! MIDIUMPCIProfile::profileID not bound
-!missing-selector! MIDIUMPCIProfile::profileType not bound
-!missing-selector! MIDIUMPCIProfile::setProfileState:enabledChannelCount:error: not bound
-!missing-selector! MIDIUMPCIProfile::totalChannelCount not bound
-!missing-selector! MIDIUMPEndpoint::deviceInfo not bound
-!missing-selector! MIDIUMPEndpoint::endpointType not bound
-!missing-selector! MIDIUMPEndpoint::functionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSReceiveCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSTransmitCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasStaticFunctionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::MIDIDestination not bound
-!missing-selector! MIDIUMPEndpoint::MIDIProtocol not bound
-!missing-selector! MIDIUMPEndpoint::MIDISource not bound
-!missing-selector! MIDIUMPEndpoint::name not bound
-!missing-selector! MIDIUMPEndpoint::productInstanceID not bound
-!missing-selector! MIDIUMPEndpoint::setFunctionBlocks: not bound
-!missing-selector! MIDIUMPEndpoint::supportedMIDIProtocols not bound
-!missing-selector! MIDIUMPEndpointManager::UMPEndpoints not bound
-!missing-selector! MIDIUMPFunctionBlock::direction not bound
-!missing-selector! MIDIUMPFunctionBlock::firstGroup not bound
-!missing-selector! MIDIUMPFunctionBlock::functionBlockID not bound
-!missing-selector! MIDIUMPFunctionBlock::isEnabled not bound
-!missing-selector! MIDIUMPFunctionBlock::maxSysEx8Streams not bound
-!missing-selector! MIDIUMPFunctionBlock::MIDI1Info not bound
-!missing-selector! MIDIUMPFunctionBlock::midiCIDevice not bound
-!missing-selector! MIDIUMPFunctionBlock::name not bound
-!missing-selector! MIDIUMPFunctionBlock::totalGroupsSpanned not bound
-!missing-selector! MIDIUMPFunctionBlock::UIHint not bound
-!missing-selector! MIDIUMPFunctionBlock::UMPEndpoint not bound
-!missing-selector! MIDIUMPMutableEndpoint::initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback: not bound
-!missing-selector! MIDIUMPMutableEndpoint::isEnabled not bound
-!missing-selector! MIDIUMPMutableEndpoint::mutableFunctionBlocks not bound
-!missing-selector! MIDIUMPMutableEndpoint::registerFunctionBlocks:markAsStatic:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setMutableFunctionBlocks: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::UMPEndpoint not bound
-!missing-type! MIDI2DeviceInfo not bound
-!missing-type! MIDICIDevice not bound
-!missing-type! MIDICIDeviceManager not bound
-!missing-type! MIDIUMPCIProfile not bound
-!missing-type! MIDIUMPEndpoint not bound
-!missing-type! MIDIUMPEndpointManager not bound
-!missing-type! MIDIUMPFunctionBlock not bound
-!missing-type! MIDIUMPMutableEndpoint not bound
-!missing-type! MIDIUMPMutableFunctionBlock not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
-!missing-field! MIDICIProfileWasUpdatedNotification not bound
-!missing-field! MIDIUMPEndpointWasUpdatedNotification not bound
-!missing-field! MIDIUMPFunctionBlockWasUpdatedNotification not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.ignore b/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.ignore
index bd67333c4287..20bfae56def7 100644
--- a/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.ignore
+++ b/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.ignore
@@ -30,3 +30,9 @@
!missing-pinvoke! MIDIReceivedEventList is not bound
!missing-pinvoke! MIDISendEventList is not bound
!missing-pinvoke! MIDISourceCreateWithProtocol is not bound
+
+# header's clearly say this enum value is not supported on macOS, yet xtro claims it is
+!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
+!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
+!missing-pinvoke! MIDISendUMPSysex is not bound
+!missing-pinvoke! MIDISendUMPSysex8 is not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.todo b/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.todo
deleted file mode 100644
index 38b73ab32af3..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/macOS-CoreMIDI.todo
+++ /dev/null
@@ -1,115 +0,0 @@
-!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
-!missing-pinvoke! MIDISendUMPSysex is not bound
-!missing-pinvoke! MIDISendUMPSysex8 is not bound
-!deprecated-attribute-missing! MIDICIDeviceInfo missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveredNode missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveryManager missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIProfileState::initWithChannel:enabledProfiles:disabledProfiles: missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIResponder missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICISession missing a [Deprecated] attribute
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-field! kMIDIPropertyAssociatedEndpoint not bound
-!missing-field! MIDICIDeviceObjectKey not bound
-!missing-field! MIDICIDeviceWasAddedNotification not bound
-!missing-field! MIDICIDeviceWasRemovedNotification not bound
-!missing-field! MIDICIProfileObjectKey not bound
-!missing-field! MIDICIProfileWasRemovedNotification not bound
-!missing-field! MIDIUMPEndpointObjectKey not bound
-!missing-field! MIDIUMPEndpointWasAddedNotification not bound
-!missing-field! MIDIUMPEndpointWasRemovedNotification not bound
-!missing-field! MIDIUMPFunctionBlockObjectKey not bound
-!missing-selector! +MIDICIDeviceManager::sharedInstance not bound
-!missing-selector! +MIDIUMPEndpointManager::sharedInstance not bound
-!missing-selector! MIDI2DeviceInfo::family not bound
-!missing-selector! MIDI2DeviceInfo::initWithManufacturerID:family:modelNumber:revisionLevel: not bound
-!missing-selector! MIDI2DeviceInfo::manufacturerID not bound
-!missing-selector! MIDI2DeviceInfo::modelNumber not bound
-!missing-selector! MIDI2DeviceInfo::revisionLevel not bound
-!missing-selector! MIDICIDevice::deviceInfo not bound
-!missing-selector! MIDICIDevice::deviceType not bound
-!missing-selector! MIDICIDevice::maxPropertyExchangeRequests not bound
-!missing-selector! MIDICIDevice::maxSysExSize not bound
-!missing-selector! MIDICIDevice::MUID not bound
-!missing-selector! MIDICIDevice::profiles not bound
-!missing-selector! MIDICIDevice::supportsProcessInquiry not bound
-!missing-selector! MIDICIDevice::supportsProfileConfiguration not bound
-!missing-selector! MIDICIDevice::supportsPropertyExchange not bound
-!missing-selector! MIDICIDevice::supportsProtocolNegotiation not bound
-!missing-selector! MIDICIDeviceManager::discoveredCIDevices not bound
-!missing-selector! MIDIUMPCIProfile::enabledChannelCount not bound
-!missing-selector! MIDIUMPCIProfile::firstChannel not bound
-!missing-selector! MIDIUMPCIProfile::groupOffset not bound
-!missing-selector! MIDIUMPCIProfile::isEnabled not bound
-!missing-selector! MIDIUMPCIProfile::name not bound
-!missing-selector! MIDIUMPCIProfile::profileID not bound
-!missing-selector! MIDIUMPCIProfile::profileType not bound
-!missing-selector! MIDIUMPCIProfile::setProfileState:enabledChannelCount:error: not bound
-!missing-selector! MIDIUMPCIProfile::totalChannelCount not bound
-!missing-selector! MIDIUMPEndpoint::deviceInfo not bound
-!missing-selector! MIDIUMPEndpoint::endpointType not bound
-!missing-selector! MIDIUMPEndpoint::functionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSReceiveCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSTransmitCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasStaticFunctionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::MIDIDestination not bound
-!missing-selector! MIDIUMPEndpoint::MIDIProtocol not bound
-!missing-selector! MIDIUMPEndpoint::MIDISource not bound
-!missing-selector! MIDIUMPEndpoint::name not bound
-!missing-selector! MIDIUMPEndpoint::productInstanceID not bound
-!missing-selector! MIDIUMPEndpoint::setFunctionBlocks: not bound
-!missing-selector! MIDIUMPEndpoint::supportedMIDIProtocols not bound
-!missing-selector! MIDIUMPEndpointManager::UMPEndpoints not bound
-!missing-selector! MIDIUMPFunctionBlock::direction not bound
-!missing-selector! MIDIUMPFunctionBlock::firstGroup not bound
-!missing-selector! MIDIUMPFunctionBlock::functionBlockID not bound
-!missing-selector! MIDIUMPFunctionBlock::isEnabled not bound
-!missing-selector! MIDIUMPFunctionBlock::maxSysEx8Streams not bound
-!missing-selector! MIDIUMPFunctionBlock::MIDI1Info not bound
-!missing-selector! MIDIUMPFunctionBlock::midiCIDevice not bound
-!missing-selector! MIDIUMPFunctionBlock::name not bound
-!missing-selector! MIDIUMPFunctionBlock::totalGroupsSpanned not bound
-!missing-selector! MIDIUMPFunctionBlock::UIHint not bound
-!missing-selector! MIDIUMPFunctionBlock::UMPEndpoint not bound
-!missing-selector! MIDIUMPMutableEndpoint::initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback: not bound
-!missing-selector! MIDIUMPMutableEndpoint::isEnabled not bound
-!missing-selector! MIDIUMPMutableEndpoint::mutableFunctionBlocks not bound
-!missing-selector! MIDIUMPMutableEndpoint::registerFunctionBlocks:markAsStatic:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setMutableFunctionBlocks: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::UMPEndpoint not bound
-!missing-type! MIDI2DeviceInfo not bound
-!missing-type! MIDICIDevice not bound
-!missing-type! MIDICIDeviceManager not bound
-!missing-type! MIDIUMPCIProfile not bound
-!missing-type! MIDIUMPEndpoint not bound
-!missing-type! MIDIUMPEndpointManager not bound
-!missing-type! MIDIUMPFunctionBlock not bound
-!missing-type! MIDIUMPMutableEndpoint not bound
-!missing-type! MIDIUMPMutableFunctionBlock not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
-!missing-field! MIDICIProfileWasUpdatedNotification not bound
-!missing-field! MIDIUMPEndpointWasUpdatedNotification not bound
-!missing-field! MIDIUMPFunctionBlockWasUpdatedNotification not bound
diff --git a/tests/xtro-sharpie/api-annotations-dotnet/tvOS-CoreMIDI.todo b/tests/xtro-sharpie/api-annotations-dotnet/tvOS-CoreMIDI.todo
deleted file mode 100644
index 810f1f56d5af..000000000000
--- a/tests/xtro-sharpie/api-annotations-dotnet/tvOS-CoreMIDI.todo
+++ /dev/null
@@ -1,19 +0,0 @@
-!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
diff --git a/tests/xtro-sharpie/iOS-CoreMIDI.todo b/tests/xtro-sharpie/iOS-CoreMIDI.todo
index 38b73ab32af3..bb58aad14417 100644
--- a/tests/xtro-sharpie/iOS-CoreMIDI.todo
+++ b/tests/xtro-sharpie/iOS-CoreMIDI.todo
@@ -2,114 +2,3 @@
!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
!missing-pinvoke! MIDISendUMPSysex is not bound
!missing-pinvoke! MIDISendUMPSysex8 is not bound
-!deprecated-attribute-missing! MIDICIDeviceInfo missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveredNode missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveryManager missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIProfileState::initWithChannel:enabledProfiles:disabledProfiles: missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIResponder missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICISession missing a [Deprecated] attribute
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-field! kMIDIPropertyAssociatedEndpoint not bound
-!missing-field! MIDICIDeviceObjectKey not bound
-!missing-field! MIDICIDeviceWasAddedNotification not bound
-!missing-field! MIDICIDeviceWasRemovedNotification not bound
-!missing-field! MIDICIProfileObjectKey not bound
-!missing-field! MIDICIProfileWasRemovedNotification not bound
-!missing-field! MIDIUMPEndpointObjectKey not bound
-!missing-field! MIDIUMPEndpointWasAddedNotification not bound
-!missing-field! MIDIUMPEndpointWasRemovedNotification not bound
-!missing-field! MIDIUMPFunctionBlockObjectKey not bound
-!missing-selector! +MIDICIDeviceManager::sharedInstance not bound
-!missing-selector! +MIDIUMPEndpointManager::sharedInstance not bound
-!missing-selector! MIDI2DeviceInfo::family not bound
-!missing-selector! MIDI2DeviceInfo::initWithManufacturerID:family:modelNumber:revisionLevel: not bound
-!missing-selector! MIDI2DeviceInfo::manufacturerID not bound
-!missing-selector! MIDI2DeviceInfo::modelNumber not bound
-!missing-selector! MIDI2DeviceInfo::revisionLevel not bound
-!missing-selector! MIDICIDevice::deviceInfo not bound
-!missing-selector! MIDICIDevice::deviceType not bound
-!missing-selector! MIDICIDevice::maxPropertyExchangeRequests not bound
-!missing-selector! MIDICIDevice::maxSysExSize not bound
-!missing-selector! MIDICIDevice::MUID not bound
-!missing-selector! MIDICIDevice::profiles not bound
-!missing-selector! MIDICIDevice::supportsProcessInquiry not bound
-!missing-selector! MIDICIDevice::supportsProfileConfiguration not bound
-!missing-selector! MIDICIDevice::supportsPropertyExchange not bound
-!missing-selector! MIDICIDevice::supportsProtocolNegotiation not bound
-!missing-selector! MIDICIDeviceManager::discoveredCIDevices not bound
-!missing-selector! MIDIUMPCIProfile::enabledChannelCount not bound
-!missing-selector! MIDIUMPCIProfile::firstChannel not bound
-!missing-selector! MIDIUMPCIProfile::groupOffset not bound
-!missing-selector! MIDIUMPCIProfile::isEnabled not bound
-!missing-selector! MIDIUMPCIProfile::name not bound
-!missing-selector! MIDIUMPCIProfile::profileID not bound
-!missing-selector! MIDIUMPCIProfile::profileType not bound
-!missing-selector! MIDIUMPCIProfile::setProfileState:enabledChannelCount:error: not bound
-!missing-selector! MIDIUMPCIProfile::totalChannelCount not bound
-!missing-selector! MIDIUMPEndpoint::deviceInfo not bound
-!missing-selector! MIDIUMPEndpoint::endpointType not bound
-!missing-selector! MIDIUMPEndpoint::functionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSReceiveCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSTransmitCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasStaticFunctionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::MIDIDestination not bound
-!missing-selector! MIDIUMPEndpoint::MIDIProtocol not bound
-!missing-selector! MIDIUMPEndpoint::MIDISource not bound
-!missing-selector! MIDIUMPEndpoint::name not bound
-!missing-selector! MIDIUMPEndpoint::productInstanceID not bound
-!missing-selector! MIDIUMPEndpoint::setFunctionBlocks: not bound
-!missing-selector! MIDIUMPEndpoint::supportedMIDIProtocols not bound
-!missing-selector! MIDIUMPEndpointManager::UMPEndpoints not bound
-!missing-selector! MIDIUMPFunctionBlock::direction not bound
-!missing-selector! MIDIUMPFunctionBlock::firstGroup not bound
-!missing-selector! MIDIUMPFunctionBlock::functionBlockID not bound
-!missing-selector! MIDIUMPFunctionBlock::isEnabled not bound
-!missing-selector! MIDIUMPFunctionBlock::maxSysEx8Streams not bound
-!missing-selector! MIDIUMPFunctionBlock::MIDI1Info not bound
-!missing-selector! MIDIUMPFunctionBlock::midiCIDevice not bound
-!missing-selector! MIDIUMPFunctionBlock::name not bound
-!missing-selector! MIDIUMPFunctionBlock::totalGroupsSpanned not bound
-!missing-selector! MIDIUMPFunctionBlock::UIHint not bound
-!missing-selector! MIDIUMPFunctionBlock::UMPEndpoint not bound
-!missing-selector! MIDIUMPMutableEndpoint::initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback: not bound
-!missing-selector! MIDIUMPMutableEndpoint::isEnabled not bound
-!missing-selector! MIDIUMPMutableEndpoint::mutableFunctionBlocks not bound
-!missing-selector! MIDIUMPMutableEndpoint::registerFunctionBlocks:markAsStatic:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setMutableFunctionBlocks: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::UMPEndpoint not bound
-!missing-type! MIDI2DeviceInfo not bound
-!missing-type! MIDICIDevice not bound
-!missing-type! MIDICIDeviceManager not bound
-!missing-type! MIDIUMPCIProfile not bound
-!missing-type! MIDIUMPEndpoint not bound
-!missing-type! MIDIUMPEndpointManager not bound
-!missing-type! MIDIUMPFunctionBlock not bound
-!missing-type! MIDIUMPMutableEndpoint not bound
-!missing-type! MIDIUMPMutableFunctionBlock not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
-!missing-field! MIDICIProfileWasUpdatedNotification not bound
-!missing-field! MIDIUMPEndpointWasUpdatedNotification not bound
-!missing-field! MIDIUMPFunctionBlockWasUpdatedNotification not bound
diff --git a/tests/xtro-sharpie/macOS-CoreMIDI.todo b/tests/xtro-sharpie/macOS-CoreMIDI.todo
index 38b73ab32af3..ee524653cbf2 100644
--- a/tests/xtro-sharpie/macOS-CoreMIDI.todo
+++ b/tests/xtro-sharpie/macOS-CoreMIDI.todo
@@ -2,114 +2,4 @@
!missing-pinvoke! MIDIEventPacketSysexBytesForGroup is not bound
!missing-pinvoke! MIDISendUMPSysex is not bound
!missing-pinvoke! MIDISendUMPSysex8 is not bound
-!deprecated-attribute-missing! MIDICIDeviceInfo missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveredNode missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIDiscoveryManager missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIProfileState::initWithChannel:enabledProfiles:disabledProfiles: missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICIResponder missing a [Deprecated] attribute
-!deprecated-attribute-missing! MIDICISession missing a [Deprecated] attribute
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
!missing-enum-value! MidiNotificationMessageId native value kMIDIMsgInternalStart = 4096 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-field! kMIDIPropertyAssociatedEndpoint not bound
-!missing-field! MIDICIDeviceObjectKey not bound
-!missing-field! MIDICIDeviceWasAddedNotification not bound
-!missing-field! MIDICIDeviceWasRemovedNotification not bound
-!missing-field! MIDICIProfileObjectKey not bound
-!missing-field! MIDICIProfileWasRemovedNotification not bound
-!missing-field! MIDIUMPEndpointObjectKey not bound
-!missing-field! MIDIUMPEndpointWasAddedNotification not bound
-!missing-field! MIDIUMPEndpointWasRemovedNotification not bound
-!missing-field! MIDIUMPFunctionBlockObjectKey not bound
-!missing-selector! +MIDICIDeviceManager::sharedInstance not bound
-!missing-selector! +MIDIUMPEndpointManager::sharedInstance not bound
-!missing-selector! MIDI2DeviceInfo::family not bound
-!missing-selector! MIDI2DeviceInfo::initWithManufacturerID:family:modelNumber:revisionLevel: not bound
-!missing-selector! MIDI2DeviceInfo::manufacturerID not bound
-!missing-selector! MIDI2DeviceInfo::modelNumber not bound
-!missing-selector! MIDI2DeviceInfo::revisionLevel not bound
-!missing-selector! MIDICIDevice::deviceInfo not bound
-!missing-selector! MIDICIDevice::deviceType not bound
-!missing-selector! MIDICIDevice::maxPropertyExchangeRequests not bound
-!missing-selector! MIDICIDevice::maxSysExSize not bound
-!missing-selector! MIDICIDevice::MUID not bound
-!missing-selector! MIDICIDevice::profiles not bound
-!missing-selector! MIDICIDevice::supportsProcessInquiry not bound
-!missing-selector! MIDICIDevice::supportsProfileConfiguration not bound
-!missing-selector! MIDICIDevice::supportsPropertyExchange not bound
-!missing-selector! MIDICIDevice::supportsProtocolNegotiation not bound
-!missing-selector! MIDICIDeviceManager::discoveredCIDevices not bound
-!missing-selector! MIDIUMPCIProfile::enabledChannelCount not bound
-!missing-selector! MIDIUMPCIProfile::firstChannel not bound
-!missing-selector! MIDIUMPCIProfile::groupOffset not bound
-!missing-selector! MIDIUMPCIProfile::isEnabled not bound
-!missing-selector! MIDIUMPCIProfile::name not bound
-!missing-selector! MIDIUMPCIProfile::profileID not bound
-!missing-selector! MIDIUMPCIProfile::profileType not bound
-!missing-selector! MIDIUMPCIProfile::setProfileState:enabledChannelCount:error: not bound
-!missing-selector! MIDIUMPCIProfile::totalChannelCount not bound
-!missing-selector! MIDIUMPEndpoint::deviceInfo not bound
-!missing-selector! MIDIUMPEndpoint::endpointType not bound
-!missing-selector! MIDIUMPEndpoint::functionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSReceiveCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasJRTSTransmitCapability not bound
-!missing-selector! MIDIUMPEndpoint::hasStaticFunctionBlocks not bound
-!missing-selector! MIDIUMPEndpoint::MIDIDestination not bound
-!missing-selector! MIDIUMPEndpoint::MIDIProtocol not bound
-!missing-selector! MIDIUMPEndpoint::MIDISource not bound
-!missing-selector! MIDIUMPEndpoint::name not bound
-!missing-selector! MIDIUMPEndpoint::productInstanceID not bound
-!missing-selector! MIDIUMPEndpoint::setFunctionBlocks: not bound
-!missing-selector! MIDIUMPEndpoint::supportedMIDIProtocols not bound
-!missing-selector! MIDIUMPEndpointManager::UMPEndpoints not bound
-!missing-selector! MIDIUMPFunctionBlock::direction not bound
-!missing-selector! MIDIUMPFunctionBlock::firstGroup not bound
-!missing-selector! MIDIUMPFunctionBlock::functionBlockID not bound
-!missing-selector! MIDIUMPFunctionBlock::isEnabled not bound
-!missing-selector! MIDIUMPFunctionBlock::maxSysEx8Streams not bound
-!missing-selector! MIDIUMPFunctionBlock::MIDI1Info not bound
-!missing-selector! MIDIUMPFunctionBlock::midiCIDevice not bound
-!missing-selector! MIDIUMPFunctionBlock::name not bound
-!missing-selector! MIDIUMPFunctionBlock::totalGroupsSpanned not bound
-!missing-selector! MIDIUMPFunctionBlock::UIHint not bound
-!missing-selector! MIDIUMPFunctionBlock::UMPEndpoint not bound
-!missing-selector! MIDIUMPMutableEndpoint::initWithName:deviceInfo:productInstanceID:MIDIProtocol:destinationCallback: not bound
-!missing-selector! MIDIUMPMutableEndpoint::isEnabled not bound
-!missing-selector! MIDIUMPMutableEndpoint::mutableFunctionBlocks not bound
-!missing-selector! MIDIUMPMutableEndpoint::registerFunctionBlocks:markAsStatic:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setMutableFunctionBlocks: not bound
-!missing-selector! MIDIUMPMutableEndpoint::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::initWithName:direction:firstGroup:totalGroupsSpanned:maxSysEx8Streams:MIDI1Info:UIHint:isEnabled: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::reconfigureWithFirstGroup:direction:MIDI1Info:UIHint:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setEnabled:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::setName:error: not bound
-!missing-selector! MIDIUMPMutableFunctionBlock::UMPEndpoint not bound
-!missing-type! MIDI2DeviceInfo not bound
-!missing-type! MIDICIDevice not bound
-!missing-type! MIDICIDeviceManager not bound
-!missing-type! MIDIUMPCIProfile not bound
-!missing-type! MIDIUMPEndpoint not bound
-!missing-type! MIDIUMPEndpointManager not bound
-!missing-type! MIDIUMPFunctionBlock not bound
-!missing-type! MIDIUMPMutableEndpoint not bound
-!missing-type! MIDIUMPMutableFunctionBlock not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
-!missing-field! MIDICIProfileWasUpdatedNotification not bound
-!missing-field! MIDIUMPEndpointWasUpdatedNotification not bound
-!missing-field! MIDIUMPFunctionBlockWasUpdatedNotification not bound
diff --git a/tests/xtro-sharpie/tvOS-CoreMIDI.todo b/tests/xtro-sharpie/tvOS-CoreMIDI.todo
index 810f1f56d5af..a12928239a94 100644
--- a/tests/xtro-sharpie/tvOS-CoreMIDI.todo
+++ b/tests/xtro-sharpie/tvOS-CoreMIDI.todo
@@ -1,19 +1 @@
!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-enum! MIDICICategoryOptions not bound
-!missing-enum! MIDIUMPProtocolOptions not bound
diff --git a/tests/xtro-sharpie/watchOS-CoreMIDI.todo b/tests/xtro-sharpie/watchOS-CoreMIDI.todo
index 810f1f56d5af..d9cf98491e10 100644
--- a/tests/xtro-sharpie/watchOS-CoreMIDI.todo
+++ b/tests/xtro-sharpie/watchOS-CoreMIDI.todo
@@ -1,19 +1,2 @@
!missing-pinvoke! MIDIEventListForEachEvent is not bound
-!missing-enum! MIDICIDeviceType not bound
-!missing-enum! MIDICIManagementMessageType not bound
-!missing-enum! MIDICIProcessInquiryMessageType not bound
-!missing-enum! MIDICIProfileMessageType not bound
-!missing-enum! MIDICIProfileType not bound
-!missing-enum! MIDICIPropertyExchangeMessageType not bound
-!missing-enum! MIDIUMPCIObjectBackingType not bound
-!missing-enum! MIDIUMPFunctionBlockDirection not bound
-!missing-enum! MIDIUMPFunctionBlockMIDI1Info not bound
-!missing-enum! MIDIUMPFunctionBlockUIHint not bound
-!missing-enum! UMPStreamMessageFormat not bound
-!missing-enum! UMPStreamMessageStatus not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeFlexData = 13 not bound
-!missing-enum-value! MidiMessageType native value kMIDIMessageTypeInvalid = 255 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusDeltaClockstampTicksPerQuarterNote = 3 not bound
-!missing-enum-value! MidiUtilityStatus native value kMIDIUtilityStatusTicksSinceLastEvent = 4 not bound
-!missing-enum! MIDICICategoryOptions not bound
!missing-enum! MIDIUMPProtocolOptions not bound
diff --git a/tests/xtro-sharpie/xtro-sharpie/EnumCheck.cs b/tests/xtro-sharpie/xtro-sharpie/EnumCheck.cs
index 8fc99906ebe2..f583aaec68c2 100644
--- a/tests/xtro-sharpie/xtro-sharpie/EnumCheck.cs
+++ b/tests/xtro-sharpie/xtro-sharpie/EnumCheck.cs
@@ -127,6 +127,8 @@ public override void VisitEnumDecl (EnumDecl decl, VisitKind visitKind)
case "UInt8":
case "int8_t":
case "uint8_t":
+ case "MIDIUInteger4": // 4 usable bits in 8 bits
+ case "MIDIUInteger7": // 7 usable bits in 8 bits
native_size = 1;
break;
default:
diff --git a/tools/common/StaticRegistrar.cs b/tools/common/StaticRegistrar.cs
index 340d6a06a6dc..231f97165bf9 100644
--- a/tools/common/StaticRegistrar.cs
+++ b/tools/common/StaticRegistrar.cs
@@ -1713,14 +1713,22 @@ bool GetLegacyAvailabilityAttribute (ICustomAttribute ca, ApplePlatform platform
switch (kind) {
case AvailabilityKind.Introduced:
if (shorthand) {
- sdkVersion = new Version (majorVersion, minorVersion, subminorVersion);
+ if (subminorVersion == 0) {
+ sdkVersion = new Version (majorVersion, minorVersion);
+ } else {
+ sdkVersion = new Version (majorVersion, minorVersion, subminorVersion);
+ }
} else {
switch (ca.ConstructorArguments.Count) {
case 5:
sdkVersion = new Version (majorVersion, minorVersion);
break;
case 6:
- sdkVersion = new Version (majorVersion, minorVersion, subminorVersion);
+ if (subminorVersion == 0) {
+ sdkVersion = new Version (majorVersion, minorVersion);
+ } else {
+ sdkVersion = new Version (majorVersion, minorVersion, subminorVersion);
+ }
break;
default:
throw ErrorHelper.CreateError (4163, Errors.MT4163, caType.Name, ca.ConstructorArguments.Count);