事先为这个长问题道歉,但我浪费了三天时间未能成功建立Xamarin.iOS开发环境,该环境允许我在物理设备(而不是iPhone模拟器)上进行调试,因此我无所适从尝试下一个。

我相信我的设置是相当标准的Xamarin配置:


运行Visual Studio 2015和Xamarin v4.2.0.703的Windows 10 PC
通过USB连接到PC的HTC手机进行Android调试(工作正常)
运行OS X 10.11和Xamarin Studio v6.1.1和Xcode v8.0的MacBook
iPhone或iPad USB连接到Mac以进行iOS调试


我首先在Visual Studio中创建Xamarin解决方案,该解决方案最初是在Android上开发和调试的。

为了进行iOS调试,我随后使用Xcode和Xamarin Studio设置了Mac,使其能够进行远程登录,并创建了一个虚拟Xcode项目,该项目具有与Xamarin.iOS应用相同的包标识符。我还尝试了一个相当复杂的过程,即为该应用程序创建签名身份和配置文件,然后在Mac上下载/安装它们。这个过程太不直观了(而且Xcode中的视觉反馈很差),以至于我不确定自己做得是否正确。但是,我可以在iPhone上运行虚拟Xcode项目,因此我认为它一定可以吗?

在Windows PC上,Visual Studio设置中的“ Xamarin> iOS选项”窗格会确认Visual Studio已连接到Mac,并且所连接的iPhone也已列为候选目标设备,因此似乎所有内容都已设置好以进行设备调试。

如果我尝试通过Visual Studio在iPhone模拟器上调试该应用程序,则它将正常运行。但是,在物理iPhone上的调试失败,并显示以下无用的消息:

Xamarin.Messaging.Exceptions.MonotouchException: error MT1006: Could not install the
application '/Users/Tim/Library/Caches/Xamarin/mtbs/builds/Test.iOS/c4f40041b6c58fc579a727bccfc18614/bin/iPhoneSimulator/Debug/TestiOS.app'
on the device 'Tim’s iPhone': AMDeviceSecureInstallApplicationBundle returned: 0xe8008001.


作为比较,我还尝试使用Xamarin Studio在Mac上直接调试。同样,iPhone模拟器可以正常运行,但是甚至无法使用物理设备启动调试会话,因为连接的iPhone并未列为“调试|调试”的候选目标设备。 iPhone配置。

如果打开项目选项并导航到iOS Debug视图,则可以看到与Debug配置关联的平台是iPhoneSimulator。将其更改为iPhone并保存配置后,它似乎可以工作,但所做的更改实际上并未保存。我想这就是未列出我的测试设备的原因,但是我不清楚要让Xamarin Studio接受我的更改需要做什么。

因此,经过所有这些实验,我完全迷失了。对于此设置过程,有一个完整的,健壮的A-Z教程将很有帮助,但是如果失败,那么我接下来应该尝试的任何建议将不胜感激。

更新:如果我使用Ad-Hoc项目配置(在Visual Studio或Xamarin Studio中),它将在设备上正确部署和启动应用程序,但不附加调试器。如果我在Ad-Hoc项目配置中明确启用调试,则Xamarin Studio将忽略它,但是Visual Studio随后将附加调试器,但不会遇到任何断点。这听起来不错吗?它提供了任何提示以使真正的Debug配置正常工作需要改变什么吗?

最佳答案

对于面临类似问题的任何人,我最终采用的解决方案都需要一种“蛮力”方法。

我首先创建一个新的Xamarin.Forms解决方案(使用标准的Visual Studio模板),然后删除不需要的平台项目(UWP和Windows Phone)。在此初始状态下,我验证了它能够在Android和iOS设备以及它们各自的模拟器/模拟器上启动调试。一切正常,确认我的Mac设置正确,并为我提供调试所需的确切iOS项目配置。

在这一点上,我认为配置问题必须是我先前的问题所致,因此我在原始解决方案中精确地复制了工作配置的每个细节。仍然拒绝在iOS上进行调试。

然后,我开始怀疑引用的Nuget软件包引起了问题,因此我将原始实现中的所有引用的软件包添加到了新的测试解决方案中。我期望这会中断在iOS上的调试,但事实并非如此。

最后,我仔细地将原始解决方案的所有内容(XAML和代码隐藏文件,视图模型,资源等)移植到了测试解决方案中,并继续正确地进行调试。

因此,在没有可行的诊断程序的情况下,我通过从头开始重新构建解决方案来有效地解决了该问题。无需更改代码,就我所知,没有更改配置设置,但是新实现现在可以在所有目标环境中可靠地调试。

07-24 19:02
查看更多