你是正確的,你不能簡單地將框架添加到XCode項目,因爲它是由MonoDevelop生成的 - 從這個意義上說它不是一個「真正的」項目。
你有兩個選擇:
1 - 寫在C#
2你自己的實現 - 選擇一個開源實現(如鉻標籤),並移植到C#。這應該工作,但顯然會很費時。此外,您可能會發現您需要訪問MonoMac中尚未提供的一些Cocoa API - 您需要找出解決方法或實施它們。
3 - 可以將本機框架綁定到您的應用程序中。也許你可以找到一個已經爲你感興趣的框架做過這件事的人;或者你可以自己做。
我一直在爲#3自己奮鬥了一兩天,但最後都想通了,所以我會與你分享這個過程,也許這會有所幫助。
我下載了鉻標籤源代碼並編譯了框架。你只需要將它編譯爲i386;因爲MonoMac目前只提供32位運行時間
我將ChromiumTabs.framework添加到我的項目中,並設置了一個預生成腳本以將其複製到$ {TargetDir}/$ {ProjectName} .app/Contents/Frameworks/
我手動加載框架內主,調用NSApplication.Init()之前:
var baseAppPath = Directory.GetParent(Directory.GetParent(System.AppDomain.CurrentDomain.BaseDirectory).ToString());
var chromiumPath = baseAppPath + "/Frameworks/ChromiumTabs.framework/ChromiumTabs";
var hresult = Dlfcn.dlopen(chromiumPath, 0); // Non-zero result indicates success
接着,使用parse.exe(提供的MonoMac當你從源代碼編譯)和飼料它.h文件從框架。使用生成的輸出來創建定義綁定的接口(關於綁定類型here有很好的文檔)。例如:
using System;
using System.Drawing;
using MonoMac.Foundation;
using MonoMac.AppKit;
namespace ChromiumTabs
{
[BaseType (typeof (NSWindowController))]
interface CTTabWindowController {
}
[BaseType (typeof (CTTabWindowController))]
interface CTBrowserWindowController {
[Export ("browser")]
CTBrowser Browser { get; }
[Export ("initWithBrowser:")]
IntPtr Constructor (CTBrowser browser);
}
[BaseType (typeof (NSObject))]
interface CTBrowser {
[Export ("addBlankTabInForeground:")]
CTTabContents AddBlankTabInForeground (bool foreground);
[Export ("createBlankTabBasedOn:")]
CTTabContents CreateBlankTabBasedOn (CTTabContents baseContents);
}
[BaseType (typeof (NSDocument))]
interface CTTabContents {
[Export ("initWithBaseTabContents:")]
IntPtr Constructor ([NullAllowed]CTTabContents baseContents);
[Export ("viewFrameDidChange:")]
void ViewFrameDidChange (RectangleF newFrame);
}
}
現在,將該.cs文件提供給bmac.exe(檢查您需要提供的參數的幫助)。這將輸出一個託管的DLL,您可以在項目中引用它。
你現在應該可以使用你的新綁定!
我在庫上做了一個非常小的綁定,足以讓它啓動並運行。您可以下載here。