Skip to main content
Glama
AXClientSwizzler.swift1.86 kB
import Foundation import XCTest // Use a global to pass to the swizzled implementation: // Instance variables are not accessible after swizzling. private var _overwriteDefaultParameters = [String: Int]() struct AXClientSwizzler { fileprivate static let proxy = AXClientiOS_Standin() // Make this type not-initializable private init() {} static var overwriteDefaultParameters: [String: Int] { get { _overwriteDefaultParameters } set { setup; _overwriteDefaultParameters = newValue } } static let setup: Void = { let axClientiOSClass: AnyClass = objc_getClass("XCAXClient_iOS") as! AnyClass let defaultParametersSelector = Selector(("defaultParameters")) let original = class_getInstanceMethod(axClientiOSClass, defaultParametersSelector)! let replaced = class_getInstanceMethod( AXClientiOS_Standin.self, #selector(AXClientiOS_Standin.swizzledDefaultParameters))! method_exchangeImplementations(original, replaced) }() } @objc private class AXClientiOS_Standin: NSObject { func originalDefaultParameters() -> NSDictionary { let selector = Selector(("defaultParameters")) let swizzeledSelector = #selector(swizzledDefaultParameters) let imp = class_getMethodImplementation(AXClientiOS_Standin.self, swizzeledSelector) typealias Method = @convention(c) (NSObject, Selector) -> NSDictionary let method = unsafeBitCast(imp, to: Method.self) return method(self, selector) } @objc func swizzledDefaultParameters() -> NSDictionary { let defaultParameters = originalDefaultParameters().mutableCopy() as! NSMutableDictionary for (key, value) in _overwriteDefaultParameters { defaultParameters[key] = value } return defaultParameters } }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mobile-dev-inc/Maestro'

If you have feedback or need assistance with the MCP directory API, please join our Discord server