2

我在共享应用程序的 iOS 端运行 Xamarin UItests 时遇到了一些问题。测试在 Android 上运行没有问题,但是 System.Exception当我尝试在 iOS 上运行它们时,我得到了一个。

设置:System.Exception:此应用程序包不适用于在模拟器上运行。要解决此问题,请确保您的目标设备是模拟器。要针对物理设备上已安装的应用程序运行,您可以使用 InstalledApp("ie.eoin.myapp")

我尝试在模拟器上以及在具有相同异常的真实设备上运行测试。下面是堆栈跟踪的开始。

Xamarin.UITest.iOS.iOSAppLauncher.LaunchAppLocal(Xamarin.UITest.Configurati`enter code here`on.IiOSAppConfiguration appConfiguration, Xamarin.UITest.Shared.Http.HttpClient httpClient, System.Boolean clearAppData) [0x0008a] in <b034e37336b84a95a2482a0c5f0be621>:0 
  at Xamarin.UITest.iOS.iOSAppLauncher.LaunchApp (Xamarin.UITest.Configuration.IiOSAppConfiguration appConfiguration, Xamarin.UITest.Shared.Http.HttpClient httpClient, Xamarin.UITest.TestCloud.TestCloudiOSAppConfiguration testCloudAppConfiguration, Xamarin.UITest.Shared.Http.HttpClient testCloudWsClient, Xamarin.UITest.Shared.Http.HttpClient xtcServicesClient, System.Boolean testCloudUseDeviceAgent) [0x0007a] in <b034e37336b84a95a2482a0c5f0be621>:0 
  at Xamarin.UITest.iOS.iOSApp..ctor (Xamarin.UITest.Configuration.IiOSAppConfiguration appConfiguration) [0x00302] in <b034e37336b84a95a2482a0c5f0be621>:0 
  at Xamarin.UITest.Configuration.iOSAppConfigurator.StartApp (Xamarin.UITest.Configuration.AppDataMode appDataMode) [0x00017] in <b034e37336b84a95a2482a0c5f0be621>:0 
  at Shared.UITest.AppInitializer.StartApp () [0x00036] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/AppInitializer.cs:23 
  at Shared.UITest.Common.SetUp () [0x00002] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/Common.cs:17 
  at Shared.UITests.MapScreensTests.SetUp () [0x00002] in /Users/eoinahern/Documents/xamarin_projs/HomeApp.Mobile/Shared/Shared.UITests/MapScreens/MapScreensTests.cs:16 
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in /private/tmp/source-mono-4.6.0/bockbuild-mono-4.6.0-branch/profiles/mono-mac-xamarin/build-root/mono-x86/mcs/class/corlib/System.Reflection/MonoMethod.cs:305 

在我startApp()在课堂上的方法中AppInitializer,路径指向.appbin 目录中的正确文件。

public static IApp StartApp()
        {
            switch (TestEnvironment.Platform)
            {
                case TestPlatform.Local:
#if __IOS__
                    platform = Platform.iOS;
                    return ConfigureApp
                                    .iOS
                                    .AppBundle(GetLocalIOSTestAppPath())                                        .StartApp(Xamarin.UITest.Configuration.AppDataMode.Clear) as IApp;
#endif

}

我不确定为什么测试不会运行。我尝试更改为实际设备。此外,该.app文件的图标看起来像停车标志中的符号。不知道这意味着什么。接下来我会看看这意味着什么,但现在我很难过。任何帮助表示赞赏。严重卡在这里。

4

2 回答 2

0

你解决了这个问题吗?就像假设:也许你需要使用 .ipa 文件而不是 .app

于 2016-12-28T19:57:38.020 回答
0

希望您已经解决了这个问题,但对于发现这个问题的其他人来说:iOS 对真实设备和模拟器的配置非常挑剔。这一点文档应该可以帮助您,但总而言之:

对于真实设备,您的应用配置应如下所示:

IApp app = ConfigureApp
    .iOS
    .InstalledApp("your.app.name")
    .StartApp();

如果您使用已安装的应用程序,您必须在尝试运行测试之前在设备上安装应用程序。

对于模拟器设备,您的应用配置应如下所示:

IApp app = ConfigureApp
    .iOS
    .AppBundle("your.app.bundle")
    .StartApp();

在我写这篇文章时,还有InstalledApp“配置要使用的已安装应用程序。将强制在物理设备上运行。”的说明,而AppBundle“配置要使用的应用程序包。将强制在模拟器上运行。 " 这些区别似乎是 iOS 独有的。Android 上的行为不同。

还有两个其他应用程序配置设置可能适用于此处:DeviceIdentifierPreferIdeSettings. 您可以使用设备标识符指定要在哪个设备上运行,但问题是模拟器和设备在不同的机器上都有不同的 id,因此在检查该配置时要小心。PreferIdeSettings 应该允许您使用 Visual Studio Mac 设备定位——查看测试布局、单元测试板和测试应用程序。正确配置后,您应该会看到一个 ios 和 android 项目,目标显示类似Virtual Device / my_android_emulator (API 28)or Device / Your iPhone

于 2020-01-30T16:57:17.900 回答