CTObjectiveCRuntimeAdditions
Objc runtime additions.
Install / Use
/learn @ebf/CTObjectiveCRuntimeAdditionsREADME
CTObjectiveCRuntimeAdditions
CTObjectiveCRuntimeAdditions introduces the following new runtime additions:
void class_swizzleSelector(Class class, SEL originalSelector, SEL newSelector);void class_swizzlesMethodsWithPrefix(Class class, NSString *prefix);void class_enumerateMethodList(Class class, CTMethodEnumertor enumerator);Class class_subclassPassingTest(Class class, CTClassTest test);IMP class_replaceMethodWithBlock(Class class, SEL originalSelector, id block);void class_implementPropertyInUserDefaults(Class class, NSString *propertyName, BOOL automaticSynchronizeUserDefaults);void class_implementProperty(Class class, NSString *propertyName, objc_AssociationPolicy associationPolicy);
Getting runtime information about blocks
CTBlockDescription lets you inspect blocks including arguments and compile time features at runtime.
One could use CTBlockDescription for the following test block:
// a test block.
BOOL(^testBlock)(BOOL animated, id object) = ^BOOL(BOOL animated, id object) {
return YES;
};
// allocating a block description
CTBlockDescription *blockDescription = [[CTBlockDescription alloc] initWithBlock:testBlock];
// getting a method signature for this block
NSMethodSignature *methodSignature = blockDescription.blockSignature;
/**
<NSMethodSignature: 0x253f080>
number of arguments = 3
frame size = 12
is special struct return? NO
return value: -------- -------- -------- --------
type encoding (c) 'c'
flags {isSigned}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 4, size adjust = -3}
memory {offset = 0, size = 1}
argument 0: -------- -------- -------- --------
type encoding (@) '@?'
flags {isObject, isBlock}
modifiers {}
frame {offset = 0, offset adjust = 0, size = 4, size adjust = 0}
memory {offset = 0, size = 4}
argument 1: -------- -------- -------- --------
type encoding (c) 'c'
flags {isSigned}
modifiers {}
frame {offset = 4, offset adjust = 0, size = 4, size adjust = -3}
memory {offset = 0, size = 1}
argument 2: -------- -------- -------- --------
type encoding (@) '@'
flags {isObject}
modifiers {}
frame {offset = 8, offset adjust = 0, size = 4, size adjust = 0}
memory {offset = 0, size = 4}
*/
License
MIT
Thanks goes to the Block Implementation Specification and the A2DynamicDelegate project for some good libffi samples and convertion from encodings to libffi types.
Related Skills
node-connect
337.3kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.2kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
337.3kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.2kCommit, push, and open a PR
