visualstudio(Xamarin):DependencyService+;Nuget+;iOS=失败
我们正在编写一个Visual Studio(Xamarin)跨平台应用程序,该应用程序将与我们编写的下一个应用程序共享相当多的功能,因此我们希望将该共享功能放入一个“库”,以便我们可以测试它,轻松地共享它,等等 我们发现编写跨平台库的唯一方法是使用标准的Xamarin DependencyService范例创建库,将其转换为NuGet包,然后将该包加载到我们的主应用程序中。不管是好是坏,我们在微软提供生成NuGet库的模板之前就这样做了,所以我们不得不自己动手 这对Android来说很好,但现在我想让同样的代码在iOS上运行,但它根本不起作用。没有错误,没有警告,但是当我运行应用程序并调用visualstudio(Xamarin):DependencyService+;Nuget+;iOS=失败,ios,visual-studio,xamarin,Ios,Visual Studio,Xamarin,我们正在编写一个Visual Studio(Xamarin)跨平台应用程序,该应用程序将与我们编写的下一个应用程序共享相当多的功能,因此我们希望将该共享功能放入一个“库”,以便我们可以测试它,轻松地共享它,等等 我们发现编写跨平台库的唯一方法是使用标准的Xamarin DependencyService范例创建库,将其转换为NuGet包,然后将该包加载到我们的主应用程序中。不管是好是坏,我们在微软提供生成NuGet库的模板之前就这样做了,所以我们不得不自己动手 这对Android来说很好,但现在
Client = DependencyService.Get<IClient>();
使用DLL的应用程序具有以下iOS项目设置:
SDK Version: Default
Linker Behavior: Don't Link
Platform: Active (iPhone)
Supported Architectures: ARMv7 + ARM64
Target framework: Xamarin.IOS
Output type: Console Application
Conditional compilation symbols: __ UNIFIED__;__ MOBILE__;__ IOS__
我的“抽象”项目中的接口定义如下所示:
namespace Company.Client
{
public abstract class IClient
{
void abstract function();
}
}
using Company.Client.iOS;
[assembly: Xamarin.Forms.Dependency (typeof (IosClient))]
namespace Company.Client.iOS
{
public class IosClient : IClient
{
void override function();
}
}
我的iOS项目中的实现如下所示:
namespace Company.Client
{
public abstract class IClient
{
void abstract function();
}
}
using Company.Client.iOS;
[assembly: Xamarin.Forms.Dependency (typeof (IosClient))]
namespace Company.Client.iOS
{
public class IosClient : IClient
{
void override function();
}
}
我们尝试了许多不同的方法来创建一个NuGet包,使用DependencyService加载特定于平台的代码,每种方法都有相同的问题——在Android下工作正常,在iOS下失败
解决方案是在iOS库中创建一个未使用DependencyService加载的类,然后在iOS应用程序中创建该类的实例。这足以让iOS应用程序确信它实际上需要加载iOS库DLL,然后DependencyService的其余部分就可以正常工作了。我们尝试了许多不同的方法来创建一个NuGet包,使用DependencyService加载特定于平台的代码,每种方法都有相同的问题——在Android下工作正常,在iOS下失败
解决方案是在iOS库中创建一个未使用DependencyService加载的类,然后在iOS应用程序中创建该类的实例。这足以让iOS应用程序确信它实际上需要加载iOS库DLL,然后DependencyService魔术的其余部分才能正常工作。实现DS接口的iOS程序集是否包含
[assembly:Xamarin.Forms.Dependency(typeof…
attribute?是的,我已经更新了我的原始帖子,将其包括在内。很好。你有没有针对iOS的解决方案?我们还尝试在特定于Nuget的平台中打包依赖关系服务实现,并尝试使用另一个解决方案的PCL访问该实现,但我们的应用程序崩溃,因为它无法解决依赖关系。当我在其他解决方案的平台代码中而不是Nuget中实现依赖关系时,它就起作用了。批准的答案(下面)对我们来说很有效。我们必须对每个iOS库都这样做。实现DS接口的iOS程序集是否包含[assembly:Xamarin.Forms.dependency(typeof…
attribute?是的,我已经更新了我的原始帖子,将其包括在内。很好。你有没有针对iOS的解决方案?我们还尝试在特定于Nuget的平台中打包依赖关系服务实现,并尝试使用另一个解决方案的PCL访问该实现,但我们的应用程序崩溃,因为它无法解决依赖关系。当我在其他解决方案的平台代码中实现依赖项而不是Nuget时,它就起作用了。批准的答案(下面)对我们很有效。我们必须对每个iOS库都这样做。