Xamarin - 使用便携式 Class 库是强制性的方式吗?
Xamarin - Using Portable Class Libraries a mandatory way to go?
最近我被要求设置一个新应用程序的设计,它需要使用 Xamarin 构建。该团队已经为 Android、iOS 和 Windows Phone 创建了一个演示应用程序。所以基本上这个演示版本需要 transformed/refactored 成为一个适当的可维护产品。
在查看当前在 DEMO 应用程序中实现的代码时,我发现使用了一些第三方库,这些库在 PCL 中不可用。这意味着我无法使用 PCL 构建我的应用程序,除非我可以将此第三方库移植到 PCL.
我的发现是:
- 我们从这个第三方库中使用的功能在所有 3 个平台上都能正常工作
- 我找不到任何阻塞原因不应该使用正常的Class库
问题:
- 是否有任何阻塞原因导致我无法使用正常的Class库?
- public 应用商店会接受这些应用吗?还是这根本不是问题?
- 如果没有.. 你能给一些建议,尤其是要注意使用普通的 Class 图书馆的
- 如果有..我如何将第三方库移植到 PCL 或者是否有其他解决方法?
首先:public 应用商店不关心您应用的内部结构,只要它遵循他们的指南。这是 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());
最近我被要求设置一个新应用程序的设计,它需要使用 Xamarin 构建。该团队已经为 Android、iOS 和 Windows Phone 创建了一个演示应用程序。所以基本上这个演示版本需要 transformed/refactored 成为一个适当的可维护产品。
在查看当前在 DEMO 应用程序中实现的代码时,我发现使用了一些第三方库,这些库在 PCL 中不可用。这意味着我无法使用 PCL 构建我的应用程序,除非我可以将此第三方库移植到 PCL.
我的发现是:
- 我们从这个第三方库中使用的功能在所有 3 个平台上都能正常工作
- 我找不到任何阻塞原因不应该使用正常的Class库
问题:
- 是否有任何阻塞原因导致我无法使用正常的Class库?
- public 应用商店会接受这些应用吗?还是这根本不是问题?
- 如果没有.. 你能给一些建议,尤其是要注意使用普通的 Class 图书馆的
- 如果有..我如何将第三方库移植到 PCL 或者是否有其他解决方法?
首先:public 应用商店不关心您应用的内部结构,只要它遵循他们的指南。这是 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());