Objcetive C methods not "visible" from MacRuby
To start playing with mixed Cocoa and MacRuby classes I created a Foo Objcetive C Framework containing just one class Roo: #import <Cocoa/Cocoa.h> @interface Roo : NSObject { float aValue; NSNumber *anotherValue; NSMutableString *aString; } @property float aValue; @property(retain) NSNumber *anotherValue; @property(retain) NSMutableString *aString; @end #import "Roo.h" @implementation Roo @synthesize aValue; @synthesize anotherValue; @synthesize aString; @end added garbage collection support and stated the public role of the header file then I copied the Foo.framework into ~/Library/Frameworks and MacBook:~ uliano$ macirb irb(main):001:0> framework 'Foo' => true irb(main):002:0> a=Roo.new => #<Roo:0x20009f520> irb(main):003:0> a.aValue=12 => 12 irb(main):004:0> a.anotherValue=150 => 150 irb(main):005:0> a.anotherValue/a.aValue => 12.5 irb(main):006:0> a.aString='Pancetta affumicata!' => "Pancetta affumicata!" irb(main):007:0> a.aString+a.anotherValue.to_s => "Pancetta affumicata!150" wonderful! isn't it? well not completely: I expected to find aValue, setAValue, anotherValue, ... in the list of methods of a but this is not the case irb(main):008:0> a.methods.sort => [:!, :!=, :!~, :==, :===, :=~, :Complex, :Rational, :__callee__, :__id__, :__method__, :__native__?, :__send__, :__type__, :clone, :define_singleton_method, :dup, :enum_for, :eql?, :equal?, :extend, :freeze, :frozen?, :hash, :inspect, :instance_eval, :instance_exec, :instance_of?, :instance_variable_defined?, :instance_variable_get, :instance_variable_set, :instance_variables, :is_a?, :kind_of?, :load_bridge_support_file, :method, :methods, :nil?, :object_id, :private_methods, :protected_methods, :public_method, :public_methods, :public_send, :respond_to?, :send, :singleton_methods, :taint, :tainted?, :tap, :to_enum, :to_s, :trust, :untaint, :untrust, :untrusted?] so I thought that it was just too magic that everything worked so smoothly without doing nothing, maybe to have the correct behavior something should be done with the bridgesupport metadata whom I know nothing and I tried MacBook:~ uliano$ cd /Library/BridgeSupport/ MacBook:BridgeSupport uliano$ gen_bridge_metadata -f Foo -o Foo.bridgesupport MacBook:BridgeSupport uliano$ cat Foo.bridgesupport <?xml version='1.0'?> <!DOCTYPE signatures SYSTEM "file://localhost/System/Library/DTDs/BridgeSupport.dtd"> <signatures version='0.9'> <depends_on path='/System/Library/Frameworks/Cocoa.framework'/> <depends_on path='/System/Library/Frameworks/CoreFoundation.framework'/> </signatures>MacBook:BridgeSupport uliano$ not a clue about any method! I'm stuck here. How can I have Obcjetive C methods "visibile" from MacRuby? uliano
I'm stuck here. How can I have Objective C methods "visible" from MacRuby? In MacRuby there's a hidden additional parameter to methods or instance_methods to include Objective-C methods in the lists they return, for instance:
String.instance_methods(true, true)
The first parameter is already in MRI, true by default. If true will return all the methods, if false only the methods declared on the object itself, not its ancestors. The second parameter is specific to MacRuby, false by default. If true it will return the methods created in Objective-C, if false it won't.
participants (2)
-
Uliano Guerrini
-
Vincent Isambart