令人惊讶的是,您现在可以通过对Xamarin.Forms解决方案进行一些调整来运行本机macOS应用程序。 而我必须说“应用程序”,因为那是桌面,对吧?
正如我在上周的Xamarin.Forms 2.3.5预发布公告中所说的,XAMarin.Forms中的macOS支持现在已经在Preview中了。 我们来试试将这个新项目添加到现有的Xamarin.Forms解决方案中,您可能面临的障碍以及当前和将来的平台功能状态。
配置一个macOS项目
D开发macOS是一个Mac的功能,所以同样的规则适用于当你在做一个Xamarin.Mac应用程序。 这里有一个很好的Xamarin.Mac指南,涵盖了先决条件。
当您将XAMarin.Forms macOS项目集成到一个持续的集成系统中,您可以轻松地在Windows上为MacOS构建,就像您现在可以使用iOS一样。
添加可可应用程序项目
直到Xamarin.Forms模板添加一个Cocoa应用程序,我们可以很容易地添加它自己。 要在Xamarin.Studio或Visual Studio for Mac中执行此操作,请在解决方案中添加一个新项目,然后选择Mac> App> Cocoa App。
配置项目
Cocoa应用程序模板配置了一个故事板实现,您将不需要它。 您可以将其留在那里,但是当应用程序运行时,最终会出现两个窗口。
以下是您需要做的快速列表:
-
添加 预览发布NuGet。
-
在您的macOS项目中,添加对您的Xamarin.Forms项目(共享或PCL)的引用
-
导入任何资源,如图像或字体
-
编辑info.plist并删除源条目(NSMainStoryboardFile)
-
更新Main.cs以初始化AppDelegate
-
static class MainClass
-
{
-
static void Main(string[] args)
-
{
-
NSApplication.Init();
-
NSApplication.SharedApplication.Delegate = new AppDelegate();
-
NSApplication.Main(args);
-
}
-
}
-
更新AppDelegate以初始化Xamarin.Forms,创建一个窗口,并加载Forms App
-
using Xamarin.Forms;
-
using Xamarin.Forms.Platform.MacOS;
-
...
-
[Register("AppDelegate")]
-
public class AppDelegate : 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)
-
{
-
Forms.Init();
-
LoadApplication(new App());
-
base.DidFinishLaunching(notification);
-
}
-
}
运行
将macOS项目作为启动,运行它。瞧! 你现在有一个本地macOS应用程序!
下一步是什么?
现在你有一个应用程序,现在是时候放上你的UX Designer帽子,并开始探索你需要在这个新的桌面环境中感受更多的变化。
造型
运行您的XAMarin.Forms UI for MacOS。 手机上使用的相同样式可能看起来不正确。 这很容易更新!
随着近期对OnPlatform的更改,您现在可以定位任意数量的平台。 那包括macOS。
-
<Button.TextColor>
-
<OnPlatform x:TypeArguments="Color">
-
<On Platform="iOS" Value="White"/>
-
<On Platform="macOS" Value="White"/>
-
<On Platform="Android" Value="Black"/>
-
</OnPlatform>
-
</Button.TextColor>
请注意,您还可以在“On Platform =”iOS,macOS“...>等平台上加倍。
窗口大小和位置
引导窗口是否太大? 太小? 在屏幕上发出奇怪的位置? 您可以在AppDelegate上调整所有这一行:
var rect = new CoreGraphics.CGRect(200, 1000, 1024, 768);
已知的问题
这是一个预览,所以你应该期望不是一切都准备好了。 以下是您在项目中添加macOS时可能遇到的几件事情。
macOS上不是所有的NuGets都准备好了
为了在macOS项目中工作,软件包必须定位到xamarinmac20。 您可能会发现一些您心爱的图书馆还不支持macOS。 你能做什么? 请发送请求给项目的维护者添加。 在获得支持之前,您可能需要寻找替代品。
Xamarin.Forms功能
这个预览有惊人的Xamarin.Forms UI和功能的覆盖,但有一些已知的差距要注意。
尚未实现 :
-
OpenGlRenderer
-
ListView – ScrollTo, UnevenRows support, refreshing, SeparatorColor, SeparatorVisibility, Footer
-
ViewCell – IsEnabled, ForceUpdateSize
-
Image – Aspect
-
Picker – Bindable / Observable implementation
-
MasterDetailPage – BackgroundColor
-
TabbedPage – BarBackgroundColor, BarTextColor
-
TableView – UnevenRows
-
WebView – Most WebNavigationEvents
-
Navigation – InsertPageBefore
发送您的反馈!
将MacOS项目和预发行版添加到您的解决方案中,让我们知道您的想法。 你觉得缺少什么? 遇到什么问题?
为了快速开始,您可以抓住我在GitHub上更新的WeatherApp:
阅读(2847) | 评论(0) | 转发(0) |