class Xcodeproj::Plist::FFI::DevToolsCore::NSObject

def self.extern(symbol, parameter_types, return_type)

def self.extern(symbol, parameter_types, return_type)
  CoreFoundation.extern_image(image, symbol, parameter_types, return_type)
end

def self.image

def self.image
  @image ||= Fiddle::Handle.new
end

def self.objc_class

def self.objc_class
  @objc_class ||= CoreFoundation.objc_getClass(name.split('::').last)
end

def self.objc_msgSend(args, return_type = CoreFoundation::VoidPointer)

def self.objc_msgSend(args, return_type = CoreFoundation::VoidPointer)
  arguments = [CoreFoundation::VoidPointer, CoreFoundation::VoidPointer] + args
  Fiddle::Function.new(image['objc_msgSend'], arguments, return_type)
end

def self.respondsToSelector(instance, sel)

def self.respondsToSelector(instance, sel)
  selector = CoreFoundation.NSSelectorFromString(CoreFoundation.RubyStringToCFString(sel))
  respondsToSelector = objc_msgSend([CoreFoundation::CharPointer], CoreFoundation::Boolean)
  result = respondsToSelector.call(
    instance,
    CoreFoundation.NSSelectorFromString(CoreFoundation.RubyStringToCFString('respondsToSelector:')),
    selector)
  result == CoreFoundation::TRUE ? true : false
end