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

Wol*_*urs 4 mono xamarin.ios xamarin.android portable-class-library

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

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

所以我的问题如下:

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

Stu*_*art 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-未来是-portable.html

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


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

  • 对于那些从事PCL工作的人,我发布了一个修补过的MonoDevelop 3.1.1版本,其中包含改进的PCL支持:https://files.xamarin.com/~jeff/MonoDevelop-3.1.1.dmg - 它仍然不完美,但是它比目前的官方版本更好(我的补丁将在未来的正式版本中发布) (2认同)