11

目标:使用 Xamarin 工作室开发一个跨平台移动应用程序,在特定日期和时间显示一条消息。

问题:

a)如果我想开发这样的应用程序,平台之间将/可以共享什么东西。(将不胜感激具有可能类的结构设计)

b) 使用 Timer 或 AlarmManager 更好吗?

c) 应该为共享核心项目(可移植类库/平台特定库/普通 C# 项目)创建什么类型的项目?

提前致谢。

4

4 回答 4

18

在过去的几周里,我一直专注于如何在 Android 和 iOS 之间最好地共享代码,以下是根据我的经验提出的建议:

a) 通常,您可以在平台之间共享任何非平台特定的东西。

我倾向于使用对由接口定义的视图进行引用的演示者或调解者。例如,如果我有一个登录视图,我会让我的 iOS UIViewController 和我的 Android Activity 都实现一个 ILoginView 接口。该接口将定义以下内容:

  • 用户名和密码的获取器
  • 一个名为 LoginSubmitted 的事件
  • ShowLoginFailed 和 GoNextScreen 两种方法

演示者/中介者将负责监听正在提交的登录,获取用户名/密码,并将这些内容传递给服务调用或命令。每当中介收到命令/服务的结果时,它将负责调用 ShowLoginFailed 或 GoNextScreen。

我还使用接口来定义我的 SQLite 管理器 ( https://github.com/praeclarum/sqlite-net/tree/master/src ),或负责进行实际 Web API 服务调用的委托。我发现我必须这样做,因为 SQLite 管理器和 RestSharp 需要进行一些特定于平台的编译。

长话短说,接口是你的朋友,尤其是当你将它们与某种依赖注入系统结合时。

b) 如果您希望您的用户在设备处于睡眠模式或在另一个应用程序中时收到警报提示,我会使用 AlarmManager for Android 和 LocalNotification for iOS。

c) 您可以将 PCL 与 Xamarin.Android 和 Xamarin.iOS 一起使用。问题是 PCL 还没有得到 100% 的支持。但是,您可以对开发环境进行一些调整,希望能将您带到您想要的位置:

  • 在 Xamarin Studio 中切换到 Beta 或 Alpha 通道:“Xamarin Studio”->“检查更新”->在弹出的对话框左上角的组合框中更改通道->选择“重启并安装更新” 。” 这将让您让 Android 和 iOS 项目能够在同一个解决方案中链接到同一个 PCL。

  • 更新 XS 后,关闭 XS 并按照本文中的说明修改您的 Mono 安装,以便 PCL 正确编译:MonoDevelop:是否可以切换 PCL 的编译器?

  • 为了让代码提示在您的 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 支持,我们不必为这些黑客行为而烦恼。

于 2013-05-11T12:51:15.477 回答
2

到目前为止,Xamarin 可以帮助您共享业务逻辑。即数据库、Web 服务或任何此类代码,它们不依赖于您正在使用的平台。你用 c# 编码。因此,您可以访问基本的 c# 功能,或者准确地说,是您可以使用的单声道特定功能。

作为结论,我可以总结的是:您可以为工作的后端创建一个单独的项目,并为 UI 及其背后的代码创建一个单独的项目。(显然两者都在同一个工作空间中)。然后,您可以在 IOS 应用程序、android 应用程序以及默认情况下在 WP8 应用程序(甚至是 Mac 和 Windows 应用程序)中使用这种中央核心类型的后端项目。因此,除了核心之外,您需要在所有平台上分别针对 UI、其处理程序和代码背后进行一些额外的编码。

于 2014-05-06T10:49:11.147 回答
2

我知道这是一篇旧文章,但现在任何想要这样做的人都应该看看今年早些时候推出的 Xamarin.Forms,它是一组真正的跨平台控件,因此您只需创建一个 UI

于 2014-11-14T16:47:27.980 回答
1

查看 Xamarin 团队的本指南以开始使用: http: //docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications

这是在 C 部分解决您的问题的第四部分。 http://docs.xamarin.com/guides/cross-platform/application_fundamentals/building_cross_platform_applications/part_4_-_platform_divergence_abstraction_divergent_implementation

此外,右侧的 Xamarin Studio 仪表板/主屏幕 (?) 有 2 个应用程序可供您下载,这些应用程序可以完全工作并面向 2-3 个平台,因此您可以在项目之间共享代码时查看它们如何构建应用程序。

他们的网站上有更多的指南和教程,不需要太多时间来阅读和练习。

于 2013-03-25T17:20:07.933 回答