     }
 
     @objc public private(set) var midiClient = MIDIClientRef()
-    @objc public private(set) var name =
+        // Note: This is actually a typedef to an int, not a pointer like you'd expect,
+        // so this initializer just makes it 0. It's overwritten later.
+    @objc public let name =
         (Bundle.main.object(forInfoDictionaryKey: kCFBundleNameKey as String) as? String) ?? ProcessInfo.processInfo.processName
-    @objc public var postsExternalSetupChangeNotification = true
+    @objc public var postsExternalSetupChangeNotification = true    // TODO Should this be public? Seems like an internal detail
     @objc public private(set) var isHandlingSetupChange = false
 
     @objc public func forceCoreMIDIToUseNewSysExSpeed() {

    // userInfo contains:
    //    SMClientMIDINotificationStruct    NSValue (a pointer to a struct MIDINotification)

    // Sent for unknown notifications from CoreMIDI:
    static public let clientUnknownChange = Notification.Name("SMClientMIDINotification")
    // userInfo contains:
    //    SMClientMIDINotificationStruct    NSValue (a pointer to a struct MIDINotification)


// TODO Duplicate stuff while migrating from ObjC to Swift
@objc extension NSNotification {

    static public let clientSetupChanged = Notification.Name.clientSetupChanged
    static public let clientObjectAdded = Notification.Name.clientObjectAdded
    static public let clientObjectRemoved = Notification.Name.clientObjectRemoved
    static public let clientObjectPropertyChanged = Notification.Name.clientObjectPropertyChanged
    static public let clientThruConnectionsChanged = Notification.Name.clientThruConnectionsChanged
    static public let clientSerialPortOwnerChanged = Notification.Name.clientSerialPortOwnerChanged
    static public let clientMIDIIOErrorNotification = Notification.Name.clientMIDIIOError
    static public let clientUnknownNotification = Notification.Name.clientUnknownNotification

}

