目标:使用Xamarin工作室开发跨平台移动应用程序,在特定日期和时间显示消息。
问题:
a)如果我想开发这样的应用程序,平台之间将会/可以共享什么。 (结构设计可能会有类别)
b)使用Timer或AlarmManager更好吗?
c)应该为共享核心项目(可移植类库/平台特定库/普通C#项目)创建什么类型的项目?
先谢谢。
答案 0 :(得分:18)
过去几周我一直专注于如何在Android和iOS之间分享最佳代码,以下是根据我的经验提出的建议:
a)通常,您可以在非平台特定的平台之间共享任何内容。
我倾向于使用包含对接口定义的视图的引用的演示者或调解器。例如,如果我有一个登录视图,我会让我的iOS UIViewController和我的Android Activity都实现一个ILoginView接口。此接口将具有以下定义:
演示者/调解员将负责监听正在提交的登录,获取用户名/密码,并将这些内容传递给服务调用或命令。每当调解器收到命令/服务的结果时,它就会负责调用ShowLoginFailed或GoNextScreen。
我还使用接口来定义我的SQLite Manager(https://github.com/praeclarum/sqlite-net/tree/master/src),或者负责进行实际Web API服务调用的委托。我发现我必须这样做,因为SQLite管理器和RestSharp需要进行一些特定于平台的编译。
长话短说,接口是你的朋友,特别是当你将它们与某种依赖注入系统耦合时。
b)如果您希望用户在设备处于睡眠模式或其他应用程序时收到警报提示,我会使用适用于Android的AlarmManager和适用于iOS的LocalNotification。
c)你可以使用Xamarin.Android和Xamarin.iOS来使用PCL。问题是PCL尚未100%支持。但是,您可以对您的开发环境进行一些调整,希望能够将您带到您想要的位置:
切换到Xamarin Studio中的Beta或Alpha频道:“Xamarin Studio” - > “检查更新” - >更改弹出的对话框左上角组合框中的频道 - >选择“重新启动并安装更新”。这样,您就可以让Android和iOS项目在同一解决方案中链接到同一个PCL。
更新XS后,关闭XS并按照本文中的说明修改Mono安装,以便PCL正确编译:MonoDevelop: is it possible to switch PCL's compiler?
要使代码提示在PCL项目中更好地运行,您需要从Mono安装中获取mscorlib.dll并将其放在项目目录的DLLs文件夹中,并在其中添加对它的引用你的PCL项目。你可以在这里找到dll:/Library/Frameworks/Mono.framework/Versions/3.0.10/lib/mono/4.0
一旦你完成了所有这些,你应该处于良好状态,让你的PCL工作。我发现这是值得的额外工作,因为我现在可以在XS中创建一个单元测试项目,将其链接到PCL并在IDE中运行测试。另外,我可以使用像Moq这样的库来模拟我的视图并进行集成测试。
Xamarin承诺,“很快”将提供完整的PCL支持,我们将不必为这些黑客而烦恼。答案 1 :(得分:2)
Xamarin,截至目前,可以帮助您分享业务逻辑。即数据库,Web服务或任何此类代码,它们不依赖于您正在处理的平台。你用c#编码。因此,您可以访问基本的c#功能,或者在口头上正确使用您可以使用的单声道特定功能。
作为结论,我可以总结的是:您可以为工作的后端创建一个单独的项目,并为UI及其代码创建一个单独的项目。 (两者显然都处于相同的工作空间)。然后你可以在IOS应用程序,Android应用程序中使用这种中央核心类型的后端项目,默认情况下在WP8应用程序中使用(甚至是Mac和Windows应用程序)。 因此,除了Core之外,您需要为UI,其处理程序和代码背后的所有平台单独编写代码。
答案 2 :(得分:2)
我知道这是一篇老帖子,但是现在任何想要这样做的人都应该看看今年早些时候发布的Xamarin.Forms,这是一套真正的跨平台控件,所以你只创建一个UI
答案 3 :(得分:1)
查看Xamarin团队的本指南,开始使用: http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications
此外,右侧的Xamarin Studio仪表板/主屏幕(?)有两个可以下载的应用程序,它们可以完全正常工作并定位2-3个平台,因此您可以在项目之间共享代码时看到它们如何构建应用程序。
在他们的网站上有更多的指南和教程,不需要花费太多时间来阅读和练习。