Xamarin.Forms 针对 macOS

Xamarin.Forms targeting macOS

我正在使用 Visual Studio for Mac 7.6.6 创建一个针对 macOS 的 Xamarin.Forms 应用程序(与 Windows 上的某些 运行 共享).我创建了一个新项目 select

  1. 多平台应用 |空白表格应用程序。单击下一步
  2. 配置您的空白表单应用程序。有目标平台:Android 和 iOS。 (macOS 没有任何内容)。因为我还没有为 iOS 和 android 安装构建工具包,所以这两个复选框都被禁用了。因此,此向导页面上的“下一步”按钮被禁用。

我该如何进行?我假设没有办法为此使用新建项目向导。

我遇到了一个 old post 开始使用 Xamarin Cocoa 应用程序并使用 NuGet 放置 Xamarin Forms 功能但不理解代码

LoadApplication(new App());  // <-- don't know what App is

我怀疑 VS Mac 和 Xamarin.Forms 在最前沿不同步。有人让这个工作吗?

我建议遵循 SushiHangover 的建议,因为这更简单,而您已经这样做了:

  1. 向您的解决方案添加一个新的 CocoaApp 项目。
  2. 将 Xamarin.Forms NuGet 包安装到您的 CocoaApp 中。
  3. 从您的 CocoaApp 项目中引用共享项目或 .NET Standard 项目。
  4. 编辑 info.plist 并删除源条目 (NSMainStoryboardFile)。
  5. 更改 AppDelegate 以派生自 Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate.
  6. 更新 Main.cs 以初始化 AppDelegate
  7. 在 AppDelegate 的 DidFinishLaunching 添加代码来初始化 Xamarin.Forms。
  8. 创建一个新的 NSWindow,它应该从 AppDelegate 中的 MainWindow 属性 返回。

Main.cs:

static class MainClass
{
    static void Main(string[] args)
    {
        NSApplication.Init();
        NSApplication.SharedApplication.Delegate = new AppDelegate();
        NSApplication.Main(args);
    }
}

AppDelegate.cs:

[Register("AppDelegate")]
public class AppDelegate : Xamarin.Forms.Platform.MacOS.FormsApplicationDelegate
{
    NSWindow window;
    public AppDelegate()
    {
        var style = NSWindowStyle.Closable | NSWindowStyle.Resizable | NSWindowStyle.Titled;

        var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
        window = new NSWindow(rect, style, NSBackingStore.Buffered, false);
        window.Title = "Xamarin.Forms on Mac!";
        window.TitleVisibility = NSWindowTitleVisibility.Hidden;
    }

    public override NSWindow MainWindow
    {
        get { return window; }
    }


    public override void DidFinishLaunching(NSNotification notification)
    {
        Xamarin.Forms.Forms.Init();
        LoadApplication(new App());

        base.DidFinishLaunching(notification);
    }

    public override void WillTerminate(NSNotification notification)
    {
        // Insert code here to tear down your application
    }
}

但是 Visual Studio for Mac 确实包括一个带有 Xamarin.Forms 项目模板的 Mac 项目。但是,它目前不会在“新建项目”对话框中公开这一点。您可以从该模板创建一个 Mac Forms 项目,但它比 SushiHangover 建议的和您已经使用的要多一些工作。

  1. 将 Xamarin.Forms 项目模板安装到 .NET Core 项目模板中

    dotnet new --install "/Applications/Visual Studio.app/Contents/Resources/lib/monodevelop/AddIns/Xamarin.Forms.Addin/Templates/Xamarin.Templates.Multiplatform.0.0.1.nupkg"

  2. 创建一个新的 Forms 项目,包括 Mac 项目(您可能想要查看并设置其他模板参数 - 下面创建一个空白的 Forms 应用程序 Android,iOS、Mac、UWP 和共享项目)。

    dotnet new forms-app --CreateMacProject -k blank

  3. 在刚刚创建的项目的父目录中新建一个空白解决方案(Other - Miscellaneous - Blank Solution)

  4. 将创建的所有项目添加到解决方案中。

然后您可以构建 运行 Mac 项目,其中包括 Xamarin.Forms.

请注意,您可能希望从 .NET Core 项目模板中删除 Xamarin.Forms 项目模板,您可以通过 运行 执行以下操作:

dotnet new --debug:reinit

除了最近的更新不完整的已批准答案之外,现在您还需要执行一个步骤。 Link Mac 主项目中的委托 class

main.cs:

static class MainClass
{
   static void Main(string[] args)
   {
       NSApplication.Init();
       NSApplication.SharedApplication.Delegate = new AppDelegate();
       NSApplication.Main(args);
    }
}

注意。我的编辑被拒绝,我不允许添加评论。所以我添加了一个补充答案来帮助那些现在寻求帮助的人。