Xamarin - 使用便携式类库是一种强制性的方法吗?

时间:2015-04-14 20:21:15

标签: xamarin xamarin.ios cross-platform portable-class-library

最近我被要求为新应用程序设置设计,需要使用Xamarin构建。该团队已经为Android,iOS和Windows Phone创建了一个DEMO应用程序。因此,基本上这个演示版本需要转换/重构为适当的可维护产品。

在查看代码当前在DEMO应用程序中实现的内容时,我发现使用了一些不可用作PCL的第三方库。这意味着我无法使用PCL构建我的应用程序,除非我可以将此第三方库移植到PCL中。

我的发现是:

  • 我们在第三方库中使用的功能在所有3个平台上都能正常运行
  • 我找不到任何阻止的原因不应该使用普通的类库

问题:

  • 是否有阻止的原因导致我无法使用普通的类库?
  • 公共应用商店是否会接受这些应用,或者这根本不是问题?
  • 如果没有..你能否提出建议,特别是照顾普通的班级图书馆
  • 如果有..如何将第三方库移植到PCL或有其他方法可以解决?

1 个答案:

答案 0 :(得分:7)

首先:公共应用商店不关心您应用的内部,只要它遵循他们的指导方针。这就是Xamarin所关注的事情,因此从编译器中删除的所有东西都可以。

第二:如果能以更好的方式满足您的需求,那么不使用PCL就完全没问题了。除了PCL之外,您还可以使用Shared Projects或仅将公共库项目中的文件链接到每个特定于平台的项目中。

但是根据我的个人经验,PCL是确保您正在编写的代码以及您正在使用的工具确实在每个平台上工作的好方法,因此您不必担心之后会出现意外情况。而对于PCL配置文件78,LINQ等东西的支持非常好。

另外,您可以在共享PCL代码中使用外观,隐藏具体实现,然后单独为每个平台提供。

这可能看起来像:

(PCL)

public interface ILogger
{
    void Log(string message);
}

public static class SharedUtilities
{
    public static ILogger Logger { get; private set; }

    public static void SetUp(ILogger logger)
    {
        Logger = logger;
    }
}

// Now Use it from everywhere in your code:
SharedUtilities.Logger.Log("Hello PCL!");

在您的iOS应用中,例如:

public class IOSLogger : ILogger
{
    public void Log(string message) 
    {
        // Make use of a native logging library or whatever you want
    }
}

// AppDelegate:
SharedUtilities.SetUp(new IOSLogger());