I will share what works for me.&nbsp; First I use <a href="http://www.monobjc.net/">monobjc</a>.&nbsp; Great documentation.&nbsp; Easy to use.&nbsp; Well supported. &nbsp; I am using the latest mono install 2.0, though this worked with 1.9 as well.&nbsp; And I use Xcode 3.1.&nbsp; I place my mono EXE in build/Debug/MyCocoa.app/Content/Libraries, along with the Monobjc DLLs.&nbsp; As you will see in the code (main.m) below, I load the EXE relative to the app bundle location.<br>
<br>For me anyway I hit a bug in 2.0 that required me to load an EXE rather than a DLL.&nbsp; In some ways the EXE is better.&nbsp; I have a Program.cs (see below) that initializes the MonoObjc environment.&nbsp; It is important to load the MonoObjc environment prior to Cocoa setting up the IB references.&nbsp; This way when the NIB file is loaded it will find your [ObjectiveCClass] references, see MainForm.cs below, which is snippets only.&nbsp; <br>
<br>In my NIB file I have an object that has its class MonoMessage.&nbsp; I hookup the array, tree, outline view, fields, etc to this object.&nbsp; At runtime they are hooked up to my mono class.&nbsp; I have some objC code (MainDocument.m below) that sends messages to my mono class.&nbsp; And my mono class sends messages back to the objC world.<br>
<br>We wanted the best of both worlds.&nbsp; The power of C# and the ability to reuse the code on Mac and Windows.&nbsp; But we also wanted the native build environment for the Leopard frontend.&nbsp; So not only was using IB a requirement but so was writing the UI code in objC.&nbsp; Thanks to mono and monobjc we accomplished this with a very clean environment.<br>
<br>You can also take the mono EXE and fully embed it within the cocoa app.&nbsp; This way the end user is not required to install mono.&nbsp; But that is a topic for a different thread.<br><br><ul><li>Other C Flags = -D_THREAD_SAFE -D_REENTRANT -I/Library/Frameworks/Mono.framework/Versions/2.0/include/mono-1.0 -I/Library/Frameworks/Mono.framework/Versions/2.0/include/glib-2.0 -I/Library/Frameworks/Mono.framework/Versions/2.0/lib/glib-2.0/include</li>
<li>Other C++ Flags = $(OTHER_CFLAGS)</li><li>OTHER_LDFLAGS = -pthread -L/Library/Frameworks/Mono.framework/Versions/Current/lib -lmono -lpthread -lm -lgthread-2.0 -lglib-2.0 -lintl -rpath@loader_path/../Libraries</li></ul>
<br><br>main.m:<br><span style="font-family: courier new,monospace;">#import &lt;Cocoa/Cocoa.h&gt;<br>#include &lt;mono/jit/jit.h&gt;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">#include &lt;mono/metadata/assembly.h&gt;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">#include &lt;mono/metadata/mono-config.h&gt;</span><br style="font-family: courier new,monospace;"><br><span style="font-family: courier new,monospace;">int main(int argc, char *argv[])</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; NSAutoreleasePool *pool;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; pool = [[NSAutoreleasePool alloc] init];</span><br><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; MonoDomain *domain;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; NSString *libraryPath = [[[NSBundle mainBundle] bundlePath] stringByAppendingPathComponent:@&quot;Contents/Libraries&quot;];</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; NSString *sampleAssemblyPath = [libraryPath stringByAppendingPathComponent:@&quot;MacMonoClient.exe&quot;];</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; NSLog(@&quot;libraryPath: %@&quot;, sampleAssemblyPath);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; mono_config_parse (&quot;config&quot;);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; domain = mono_jit_init ([sampleAssemblyPath UTF8String]);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; MonoAssembly *monoAssembly = mono_domain_assembly_open(domain, [sampleAssemblyPath UTF8String]);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; mono_jit_exec (domain, monoAssembly, 1, argv);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; NSLog(@&quot;sample assembly: %p&quot;, monoAssembly);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; [pool release];</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; </span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; return NSApplicationMain(argc, (const char **) argv);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">}</span><br><br>Program.cs:<br><span style="font-family: courier new,monospace;">using System;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">using Monobjc;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">using Monobjc.Cocoa;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">namespace MacClient</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; static class Program</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public static void Main()</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectiveCRuntime.LoadFramework(&quot;Cocoa&quot;);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectiveCRuntime.LoadFramework(&quot;QTKit&quot;);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectiveCRuntime.Initialize();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">}</span><br>&nbsp;<br>MainForm.cs:<br><span style="font-family: courier new,monospace;">using System;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">using Monobjc;</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">using Monobjc.Cocoa;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">using Monobjc.QuickTime;</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">namespace MacClient</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">{</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; [ObjectiveCClass(&quot;MonoMessage&quot;)]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; public class MyControl : NSObject</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; private static readonly Class ControllerClass = Class.GetClassFromType(typeof(MyControl));</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public MyControl() { }</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public MyControl(IntPtr np) : base(np) { }</span><br style="font-family: courier new,monospace;">
<br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NSAutoreleasePool pool = new NSAutoreleasePool();</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ~MyControl()</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pool.Drain();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCField]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public NSArrayController projectsController;</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCField(&quot;itemsController&quot;)]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public NSTreeController folderContent;</span><br><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCField]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public NSOutlineView folderOutline;</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCMessage(&quot;init&quot;)]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public override Id Init()</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;"></span><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ObjectiveCRuntime.SendMessageSuper&lt;IntPtr&gt;(this, ControllerClass, &quot;init&quot;);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NSNotificationCenter.DefaultCenter.AddObserverSelectorNameObject(this, ObjectiveCRuntime.Selector(&quot;doAuth:&quot;), &quot;doAuth&quot;, null);</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-family: courier new,monospace;"> }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCMessage(&quot;awakeFromNib&quot;)]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void awakeFromNib()</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [ObjectiveCMessage(&quot;doAuth:&quot;)]</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; public void SelectionChanged(NSNotification notification)</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {</span><span style="font-family: courier new,monospace;"></span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NSArray loginParms = notification.UserInfo.ObjectForKey(new NSString(&quot;params&quot;)).CastTo&lt;NSArray&gt;();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Login(loginParms[0].CastTo&lt;NSString&gt;(), loginParms[1].CastTo&lt;NSString&gt;());</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }</span><br>
<span style="font-family: courier new,monospace;">&nbsp;&nbsp;&nbsp; }<br>}<br><br><span style="font-family: arial,helvetica,sans-serif;">MainDocument.m</span><br>- (IBAction)login:(id)sender<br>{<br>&nbsp;&nbsp;&nbsp; NSLog(@&quot;Starting login process...&quot;);<br>
<br>&nbsp;&nbsp;&nbsp; NSString *username = [usernameTextField stringValue];<br>&nbsp;&nbsp;&nbsp; NSString *password = [passwordTextField stringValue];<br><br>&nbsp;&nbsp;&nbsp; NSArray *loginParams = [NSArray arrayWithObjects:username, password, nil];<br>&nbsp;&nbsp;&nbsp; NSDictionary* dict =&nbsp; [NSDictionary dictionaryWithObject:loginParams forKey:@&quot;params&quot;];<br>
&nbsp;&nbsp;&nbsp; NSNotificationCenter *nc = [NSNotificationCenter defaultCenter];<br>&nbsp;&nbsp;&nbsp; [nc postNotificationName:@&quot;doAuth&quot; object:nil userInfo:dict];&nbsp;&nbsp;&nbsp; <br>}<br><br></span><div class="gmail_quote">On Fri, Oct 24, 2008 at 10:13 PM, Kevin Heeney <span dir="ltr">&lt;<a href="mailto:koheeney@gmail.com">koheeney@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">&nbsp;&nbsp;&nbsp;I think I have hit a wall. &nbsp;I am fairly new to mono on mac; however am familiar with .NET and Objc/Cocoa. &nbsp;I am unable to successfully &#39;embed mono&#39; or call methods from my Mono dll in ObjC. &nbsp;I have created a UI using Interface Builder and have my App Controller in ObjC ready to call my C# dll which contains my logic. &nbsp;Cocoa# and ObjCSharp both claim to be 2 way bridges; however I can only find code for calling Cocoa from C# and not the other way around. &nbsp;In addition, I cannot get the samples from &lt;<a href="http://www.mono-project.com/Embedding_Mono" target="_blank">http://www.mono-project.com/Embedding_Mono</a>&gt; on Embedding Mono to work in XCode. &nbsp;My actual issue with the latter is I cannot get XCode to link to the mono framework. &nbsp;I am getting errors like &quot;<span style="font-size: 11px;">main.c:1: error: mono/jit/jit.h: No such file or directory<span style="font-family: arial; font-size: 13px;">&quot;.</span></span><div>

<div>&nbsp;&nbsp; I am not sure what I am missing; it may be simple. &nbsp;</div><div><br></div><div>Any guidance would be appreciated.</div><div>Thanks,</div><div>Kevin</div></div>
<br>_______________________________________________<br>
Mono-osx mailing list<br>
<a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-osx" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-osx</a><br>
<br></blockquote></div><br>