- Adds a version of
-startListening:that returns an error, if any.
- Adds a version of
-startListening:that returns an error, if any.
- Fixes
+legalMethod:to return NO for empty string.
- Fixes
keyPairproperty nullable annotation.
- Adds support for Swift Package Manager.
- Adds F53OSC.xctestplan and comprehensive test suite.
- Properties
domainandserviceTypenow allow setting an empty string. - Fixes the getter implementation of read-only property
clientRecords. - Fixes
stopto allow for quicker restarts.
- Adds
copyWithZone:for proper subclass conformance to NSCopying, declared in theF53OSCPacketsuperclass. - Invalid
elements(i.e. non-NSData) are now discarded when setting, rather than when readingpacketData. This fixes an edge case where the bundledescriptioncould report elements that would not be included in thepacketData.
- Adds
hostIsLocalconvenience getter. - Modernizes
readStatedictionary code. - Refactors
createSocket,connect, andconnectEncryptedWithKeyPair:for clarity, with the assumption thatcreateSocketwill always populate the clientsocketproperty with a non-nil value. - Fixes a bug when connecting that prevented sending the
clientDidConnect:delegate message in cases where an encryption handshake request failed.
- Adds enum value
F53OSCEncryptionHandshakeMessageNoneat raw value0. This allowslastProcessedMessageto be initialized more accurately as "None", prior to making a handshake request. NOTE: Inserting this enum value at position 0 shifts all previously-existing raw values inF53OSCEncryptionHandshakeMessageup by 1. - Exposes
protocolVersionto public as a class method. - Changes all public properties to be read-only.
- Generic
initis now marked as unavailable in favor of using+handshakeWithEncrypter:which ensures an encrypter is provided. - Fixes a typo in
F53OSCEncryptionHandshakeMessageApprove.
- Adds missing
kCFNumberCFIndexTypeswitch cases. - Adds #define
F53OSC_EXHAUSTIVE_SWITCH_ENABLED(enabled by default) for compatibility with theGCC_WARN_CHECK_SWITCH_STATEMENTSbuild setting. - Number formatting now uses
NSNumberFormatterrounding modeNSNumberFormatterRoundHalfUp. - Fixes a small regression in
+messageWithString:related to parsing quotation marks.
- Adds
hostIsLocalconvenience getter. - Generic
initis now marked as unavailable in favor of using init methods that ensure an internal TCP or UDP socket is provided. - Fixes
keyPairproperty nullable annotation.
- Misc code cleanups.
- Removes F53OSC Monitor.xcodeproj in favor of having multiple targets in F53OSC.xcodeproj.
- Light optimizations and cleanups in the F53OSC Monitor app code.
- F53OSC.xcodeproj is updated for Xcode 16.2.
- Adds the ability to transmit OSC messages using encryption over TCP. (NOTE: this is F53OSC-specific, not based on the OSC spec.) Encryption is only supported over TCP because the multi-step handshake and per-connection state require a persistent connection. The core of the encryption is written in Swift using CryptoKit, including P521 public/private keys, HKDF derived symmetric keys, and ChaChaPoly symmetric encryption.
- Adds an encryption handshake protocol transmitted over an F53OSC control message channel (starting with
!instead of/to differentiate it from OSC messages). - Adds an encrypted message type, which consists of encrypted OSC message data prefixed by a
*character.
- Adds an encryption handshake protocol transmitted over an F53OSC control message channel (starting with
- Clients wishing to support encryption must first generate a key pair using the
generateKeyPairmethod ofF53OSCEncryptand then callconnectEncryptedWithKeyPair:on theirF53OSCClient. - Servers wishing to support encryption must first generate a key pair using the
generateKeyPairmethod ofF53OSCEncryptand then callsetKeyPair:on theirF53OSCServer. - Additionally, both servers and clients can check the
encrypter.publicKeyproperty of anF53OSCSocketto verify the identity of a peer if they wish to do so.
- Adds support for optionally enabling IPv6 support for sockets. NOTE: IPv6 support is experimental and is now disabled by default on both of the internal sockets.
- Adds a
tcpTimeoutproperty to configure an optional timeout for waiting to receive TCP data to read. Any negative value means "no timeout". The default is-1. - Adds an optional delegate method
client:didReadData:to notify about the progression of how much data has been read for the current incoming message.
- Fixes
+messageWithString:to handle quotation mark characters“(U+201C) and”(U+201D) as plain quotation marks"(U+0022) for better compatibility with certain text editors that automatically format with "smart" quotation marks. #37 - Fixes
+messageWithString:to fail parsing and returnnilif quoted string arguments are not separated by spaces.
- Adds a
tcpDataFramingproperty to allow optionally disabling SLIP framing when sending non-OSC data over TCP. - Fixes the inability to send large packets by removing the timeout when writing data.
- F53OSC.xcodeproj is updated for Xcode 13.
- Requires Swift 5.
- Requires minimum deployment target of macOS 11, iOS 14, or tvOS 14.
- Adds a new class
F53OSCBrowserto facilitate Bonjour client discovery. - Adds support for optionally enabling IPv6 support for clients and sockets. NOTE: IPv6 support is experimental and is disabled by default.
- Changes
+[F53OSCServer predicateForAttribute:matchingOSCPattern:]to return a FALSE predicate when passed a malformed OSC pattern rather than returningnil. - Several changes to protocols and delegates, namely the protocol
F53OSCServeris removed in favor of a newF53OSCServerDelegateprotocol. - Adds tests to validate OSC wildcard patterns and predicates.
- Adds support for testing arbitrary locales with the number formatter used in
+[F53OSCMessage messageWithString:]via an optional NSUserDefaults keycom.figure53.f53osc.testingLocaleIdentifier. - Updates header comments to reflect correct author name.
- F53OSC.xcodeproj is updated for Xcode 12.
- Adds support for OSC 1.1 type tags
T,F,N, andI. #23 - Fixes a bug that prevented OSC range patterns from being handled correctly, e.g.
[A-Z]. - Fixes a bug that caused the OSC wildcard
?to incorrectly match on a two-character string ending in "1". - Fixes a bug when handing an incoming
F53OSCMessagethat caused incorrect parsing of arguments that follow a "Blob" type argument. - Updates
F53OSCClientandF53OSCMessagewith support for NSSecureCoding. - Updates CocoaAsyncSocket library files
GCDAsyncSocket.h/mandGCDAsyncUdpSocket.h/mto version 7.6.4. - Adds build targets for compiling a standalone
F53OSC.frameworkbundle. - Reorganizes the project structure (with a eye toward adding Swift Package Manager support sometime in the future).
- Requires Xcode 10.3 or later.
- Starting point for semantic versioning.
- Adds F53OSC.podspec.