Update Syphon framework to support macOS 10.13+ with universal binary

- Built custom Syphon framework with deployment target 10.13 (High Sierra)
- Universal binary with x86_64 and arm64 architectures
- Fixes crash on macOS 10.13.6 caused by missing objc_alloc_init symbol
- Signed and notarized with Developer ID
develop
James H Ball 2025-10-11 19:53:05 +01:00
rodzic f770da97db
commit 299011e7ef
12 zmienionych plików z 37 dodań i 37 usunięć

Wyświetl plik

@ -33,7 +33,7 @@ NS_ASSUME_NONNULL_BEGIN
DEPRECATED_MSG_ATTRIBUTE("Use SyphonOpenGLClient")
@interface SyphonClient : SyphonOpenGLClient
- (id)initWithServerDescription:(NSDictionary *)description context:(CGLContextObj)context options:(nullable NSDictionary *)options newFrameHandler:(nullable void (^)(SyphonClient *client))handler;
- (id)initWithServerDescription:(NSDictionary<NSString *, id> *)description context:(CGLContextObj)context options:(nullable NSDictionary<NSString *, id> *)options newFrameHandler:(nullable void (^)(SyphonClient *client))handler;
@end
NS_ASSUME_NONNULL_END

Wyświetl plik

@ -42,9 +42,9 @@ NS_ASSUME_NONNULL_BEGIN
- (instancetype)initWithServerDescription:(NSDictionary<NSString *, id> *)description options:(nullable NSDictionary<NSString *, id> *)options newFrameHandler:(nullable void (^)(id client))handler NS_DESIGNATED_INITIALIZER;
/*!
Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary contains
Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary may contain
*/
@property (readonly) NSDictionary *serverDescription;
@property (readonly) NSDictionary<NSString *, id> *serverDescription;
/*!
A client is valid if it has a working connection to a server. Once this returns NO, the SyphonClient will not yield any further frames.

Wyświetl plik

@ -43,9 +43,9 @@ NS_ASSUME_NONNULL_BEGIN
@param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created.
@returns A newly initialized SyphonMetalClient object, or nil if a client could not be created.
*/
- (id)initWithServerDescription:(NSDictionary *)description
- (id)initWithServerDescription:(NSDictionary<NSString *, id> *)description
device:(id<MTLDevice>)device
options:(nullable NSDictionary *)options
options:(nullable NSDictionary<NSString *, id> *)options
newFrameHandler:(nullable void (^)(SyphonMetalClient *client))handler;
/*!

Wyświetl plik

@ -57,7 +57,7 @@ extern NSString * const SyphonServerOptionIsPrivate;
@param options A dictionary containing key-value pairs to specify options for the server. The only currently supported option is SyphonServerOptionIsPrivate. See its description for details.
@returns A newly intialized SyphonMetalServer. Nil on failure.
*/
- (id)initWithName:(nullable NSString*)name device:(id<MTLDevice>)device options:(nullable NSDictionary *)options;
- (id)initWithName:(nullable NSString*)name device:(id<MTLDevice>)device options:(nullable NSDictionary<NSString *, id> *)options;
/*!
The MTLDevice the server uses for drawing.
@ -70,9 +70,9 @@ A string representing the name of the server.
@property (nullable, strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the `<NSCoding>` protocol.
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary.
*/
@property (readonly) NSDictionary* serverDescription;
@property (readonly) NSDictionary<NSString *, id<NSCoding>>* serverDescription;
/*!
`YES` if clients are currently attached, `NO` otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call ``publishFrameTexture:onCommandBuffer:imageRegion:flipped:`` when clients are attached.

Wyświetl plik

@ -53,7 +53,7 @@ NS_ASSUME_NONNULL_BEGIN
@param handler A block which is invoked when a new frame becomes available. handler may be nil. This block may be invoked on a thread other than that on which the client was created.
@returns A newly initialized SyphonOpenGLClient object, or nil if a client could not be created.
*/
- (id)initWithServerDescription:(NSDictionary *)description context:(CGLContextObj)context options:(nullable NSDictionary *)options newFrameHandler:(nullable void (^)(SyphonOpenGLClient *client))handler;
- (id)initWithServerDescription:(NSDictionary<NSString *, id> *)description context:(CGLContextObj)context options:(nullable NSDictionary<NSString *, id> *)options newFrameHandler:(nullable void (^)(SyphonOpenGLClient *client))handler;
/*!
Returns the CGLContextObj associated with the client.
@ -68,7 +68,7 @@ NS_ASSUME_NONNULL_BEGIN
/*!
Returns a dictionary with a description of the server the client is attached to. See SyphonServerDirectory for the keys this dictionary contains
*/
@property (readonly) NSDictionary *serverDescription;
@property (readonly) NSDictionary<NSString *, id> *serverDescription;
/*!
Returns YES if the server has output a new frame since the last time newFrameImage was called for this client, NO otherwise.

Wyświetl plik

@ -80,7 +80,7 @@ extern NSString * const SyphonServerOptionStencilBufferResolution;
@param options A dictionary containing key-value pairs to specify options for the server.
@returns A newly intialized ``SyphonOpenGLServer``. `nil` on failure.
*/
- (instancetype)initWithName:(nullable NSString*)serverName context:(CGLContextObj)context options:(nullable NSDictionary *)options;
- (instancetype)initWithName:(nullable NSString*)serverName context:(CGLContextObj)context options:(nullable NSDictionary<NSString *, id> *)options;
/*!
The `CGLContext` the server uses for drawing. This may or may not be the context passed in at init.
@ -93,9 +93,9 @@ extern NSString * const SyphonServerOptionStencilBufferResolution;
@property (nullable, strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the `<NSCoding>` protocol.
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using ``SyphonServerOptionIsPrivate``) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary.
*/
@property (readonly) NSDictionary* serverDescription;
@property (readonly) NSDictionary<NSString *, id<NSCoding>>* serverDescription;
/*!
`YES` if clients are currently attached, `NO` otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call ``publishFrameTexture:textureTarget:imageRegion:textureDimensions:flipped:`` when clients are attached.

Wyświetl plik

@ -55,9 +55,9 @@ extern NSString * const SyphonServerOptionIsPrivate;
@property (strong) NSString* name;
/*!
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using SyphonServerOptionIsPrivate) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary. The content will always conform to the \<NSCoding\> protocol.
A dictionary describing the server. Normally you won't need to access this, however if you created the server as private (using SyphonServerOptionIsPrivate) then you must pass this dictionary to any process in which you wish to create a SyphonClient. You should not rely on the presence of any particular keys in this dictionary.
*/
@property (readonly) NSDictionary* serverDescription;
@property (readonly) NSDictionary<NSString *, id<NSCoding>>* serverDescription;
/*!
YES if clients are currently attached, NO otherwise. If you generate frames frequently (for instance on a display-link timer), you may choose to test this and only call publishFrameTexture:textureTarget:imageRegion:textureDimensions:flipped: when clients are attached.

Wyświetl plik

@ -88,7 +88,7 @@ extern NSString * const SyphonServerRetireNotification;
/*!
`NSArray` of `NSDictionaries` that describe (using the keys above) currently available SyphonServer instances on the system.
*/
@property (readonly) NSArray *servers;
@property (readonly) NSArray<NSDictionary<NSString *, id<NSCoding>> *> *servers;
/*!
Use this method to discover servers based soley on their name, or application host name. Both parameters are optional. If you do not specify either, all available Syphon servers will be returned.
@ -96,7 +96,7 @@ extern NSString * const SyphonServerRetireNotification;
@param appname Optional (pass `nil` to not specify) Application name of the published Syphon server, matches the key value for ``SyphonServerDescriptionAppNameKey``
@returns An array of dictionaries matching the query you specified.
*/
- (NSArray *)serversMatchingName:(nullable NSString *)name appName:(nullable NSString *)appname;
- (NSArray<NSDictionary<NSString *, id<NSCoding>> *> *)serversMatchingName:(nullable NSString *)name appName:(nullable NSString *)appname;
@end

Wyświetl plik

@ -3,7 +3,7 @@
<plist version="1.0">
<dict>
<key>BuildMachineOSBuild</key>
<string>23F79</string>
<string>24G84</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
@ -29,20 +29,20 @@
<key>DTCompiler</key>
<string>com.apple.compilers.llvm.clang.1_0</string>
<key>DTPlatformBuild</key>
<string></string>
<string>25A352</string>
<key>DTPlatformName</key>
<string>macosx</string>
<key>DTPlatformVersion</key>
<string>14.5</string>
<string>26.0</string>
<key>DTSDKBuild</key>
<string>23F73</string>
<string>25A352</string>
<key>DTSDKName</key>
<string>macosx14.5</string>
<string>macosx26.0</string>
<key>DTXcode</key>
<string>1540</string>
<string>2601</string>
<key>DTXcodeBuild</key>
<string>15F31d</string>
<string>17A400</string>
<key>LSMinimumSystemVersion</key>
<string>10.14.6</string>
<string>10.13</string>
</dict>
</plist>

Plik binarny nie jest wyświetlany.

Wyświetl plik

@ -6,11 +6,11 @@
<dict>
<key>Resources/Info.plist</key>
<data>
yxUj4GSIaau8e+8oANXa2rkqRKM=
SZm2aKzm3vbIEoimyULj8iuRpKs=
</data>
<key>Resources/default.metallib</key>
<data>
y9yCbGjZlc3Q2mA9X4ne5dh2lfo=
tHM7nqTcQ3g3wCbQmC9kuJlojJ0=
</data>
<key>Resources/en.lproj/InfoPlist.strings</key>
<dict>
@ -35,14 +35,14 @@
<dict>
<key>hash2</key>
<data>
CXLWpC7I4+uJRJfpY2bqLIBeLla+V1m8RP0VMqRq5xo=
Jk8cSTKDY3DZCdpvIx/1eg0RglH7/nm5aCR/WXXfcRg=
</data>
</dict>
<key>Headers/SyphonClientBase.h</key>
<dict>
<key>hash2</key>
<data>
3gL3bBGg9UgPiqeGGi69LcxA74EFvnOyRDhVOjAqfU8=
zQLUZe74c6JO9xjBiX+xuHUageofa+bjX2mNXhbyGWg=
</data>
</dict>
<key>Headers/SyphonImage.h</key>
@ -63,21 +63,21 @@
<dict>
<key>hash2</key>
<data>
xM+qPGYKvRgZHB9je7qep+GiD577lOGNGw3qmxtGPj8=
Kk9F3txvPQUrBEqyJ2hpfhSH1K/JJqmTy6PbDiCv7SY=
</data>
</dict>
<key>Headers/SyphonMetalServer.h</key>
<dict>
<key>hash2</key>
<data>
izsmNjGV3axQRMWbsAaGcB/n/5HWBzOY2BvYY8QGyAU=
LQa5C3EWy8x0MLnjTUlY1a25r6+GhWex9ZmWdQAr4rQ=
</data>
</dict>
<key>Headers/SyphonOpenGLClient.h</key>
<dict>
<key>hash2</key>
<data>
35RXj7wesL4MU1FfBdN9/uujWmDKqnVfTmv1aEORvcY=
Y9YT0UpgdQngGd88C3kHZ00pJ3v6KqPsYErhpx+ZZ1A=
</data>
</dict>
<key>Headers/SyphonOpenGLImage.h</key>
@ -91,7 +91,7 @@
<dict>
<key>hash2</key>
<data>
ZbEfiEHzk5SzCxBeEHNCUkfeKYL+HxhzKtZYExTkfGQ=
37XiVDPQ+Q/fOTv0ciPn9USqEzlXSHGBuIt2OCtLqA0=
</data>
</dict>
<key>Headers/SyphonServer.h</key>
@ -105,14 +105,14 @@
<dict>
<key>hash2</key>
<data>
+aLvZiQEGiO0ltZUpi3age7wcGfX7A7sGmo2Yz0BCG0=
4IFngiHTLC9pUhM2LPy48xvjiHqdZCPHpql0fmE5x6M=
</data>
</dict>
<key>Headers/SyphonServerDirectory.h</key>
<dict>
<key>hash2</key>
<data>
bODRqLi0K9qDLxr8QjK7DMkr8WKXJItwRuF1QBQV5+0=
5NgycyRAZnB+UCFHhj9rgTbLJ9EXjjF/W+xGcD0vvI8=
</data>
</dict>
<key>Headers/SyphonSubclassing.h</key>
@ -133,14 +133,14 @@
<dict>
<key>hash2</key>
<data>
Yiet3hYzxZ694WKjPGC+bjn+45g5jNspR+/S/nCq/zA=
Xv5G7n8RjzP5k/L0Sil+Lu1o5aOLnka/lLW9M824xAI=
</data>
</dict>
<key>Resources/default.metallib</key>
<dict>
<key>hash2</key>
<data>
48b4CmXv0Da50Av/YKtU2CeOhkcescLZ18sflYJt6Ds=
y4apBrgdVfHJvHbMoX2vKD1oshLppZbRArEfM4JSQ5c=
</data>
</dict>
<key>Resources/en.lproj/InfoPlist.strings</key>