MonoTouch:使用Portable Class Libraries创建多平台应用程序

时间:2013-02-08 00:56:31

标签: mono xamarin.ios xamarin.android portable-class-library

我的场景:尝试将我们公司创建的应用程序的一小部分从本机代码(用于iOS的iOS / Java的ObjC)移植到C-Sharp。该项目将与我们的Web服务进行交互。该项目的目标是确定将整个应用程序移植到Mono的可行性。

要创建网址,我想使用String.Format()。我认为将这个'服务层'放在可移植类库(PCL)中是个明智的想法,因为我不希望这些代码在不同平台上发生变化。可悲的是,似乎字符串库不适用于PCL。

所以我的问题如下:

  1. 我认为PCL相对于“普通”库的主要优点是它们不需要针对不同平台进行重新编译。这个假设是否正确?
  2. 这段经历让我觉得目前PCL相当有限。我是否应该坚持使用PCL并解决这些问题,或者现在最好坚持使用“普通”库? ---我假设“普通”库有更多功能暴露。

2 个答案:

答案 0 :(得分:10)

您目前可以在多个平台上使用PCL,但它确实需要一些小的黑客攻击。

这些黑客列在http://slodge.blogspot.co.uk/2012/12/cross-platform-winrt-monodroid.html

一旦你有了这些工作,那么可用的功能相当广泛 - 它肯定包括像String.Format

这样的东西

对于PCL配置文件不够广泛的情况,您可以使用多种技术来扩展它们 - 请参阅http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.aspx。我通常使用的技术是使用MvvmCross插件 - 它基本上是具有平台特定实现的PCL接口。 这些插件通常处于“制作蓝牙工作”的级别,而不是在String.Format级别

我在WinRT,WP,WPF,MonoTouch和Mono for Android上做了很多PCL工作 - 请参阅http://slodge.blogspot.co.uk/p/mvvmcross-quicklist.html了解有关PCL工作的大量链接。

Xamarin确实建议不要使用PCL几年,但这种情况现在已经改变,官方对PCL的支持正在进行中 - 见http://slodge.blogspot.co.uk/2013/02/the-future-is-portable.html

从开发的角度来看 - 特别是从使用重构和测试工具的角度来看 - 我毫不犹豫地建议您现在使用PCL ...特别是对于String.Format级别的操作。但是,每个项目都是独一无二的......所以它并不总是正确答案。


一个重要的注意事项:现在最好将PCL二进制文件重用到MonoTouch平台 - 现在,针对特定的MonoTouch库平台构建可移植库。见http://slodge.blogspot.co.uk/2013/01/almost-portable-binaries.html?m=1

答案 1 :(得分:2)

也许你想看看其他人已经在相当程度上使用monotouch和monodroid进行PCL工作的努力。

例如,请参阅http://www.slideshare.net/cirrious/mvvm-cross-going-portable。您还可以在http://slodge.blogspot.co.uk/2012/09/mvvmcross-vnext-portable-class.html找到有关如何为MVVMCross设置PCL支持的说明。

Xamarin最近承诺提供更多的PCL支持,而不是人们不得不做的一些变通办法,但值得付出努力。