如何在物理iOS设备上调试Xamarin.iOS应用程序

13

很抱歉,提前说一下这个问题比较长,但我已经浪费了3天的时间,无法成功地设置Xamarin.iOS开发环境,以便在物理设备上进行调试(而不是iPhone模拟器)。我不知道接下来该尝试什么。

我认为我的配置是相当标准的Xamarin配置:

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

我首先在Visual Studio中创建了一个Xamarin解决方案,最初在Android上进行开发和调试。

为了进入iOS调试,我使用Xcode和Xamarin Studio设置了Mac,启用了远程登录,并创建了一个与我的Xamarin.iOS应用程序具有相同bundle identifier的虚拟Xcode项目。我还尝试了创建一个用于应用程序的签名标识和配置文件的复杂过程,并将它们下载/安装到Mac上。这个过程非常不直观(而且Xcode内部的视觉反馈非常差),我不确定是否正确完成了它。但是,我能够在iPhone上运行虚拟的Xcode项目,所以我认为应该没问题?

在Windows PC上,Visual Studio设置中的Xamarin> iOS Options面板确认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.
作为比较,我还尝试了在Mac上直接使用Xamarin Studio进行调试。同样,iPhone模拟器可以正常工作,但是无法使用实际设备启动调试会话,因为连接的iPhone未列为“Debug | iPhone”配置的目标设备候选项。
如果我打开项目选项并导航到“iOS Debug”视图,则可以看到与“Debug”配置关联的平台为“iPhoneSimulator”。将其更改为“iPhone”并保存配置似乎可以工作,但实际上并未保存更改。我想这就是我的测试设备未被列出的原因,但我不清楚需要做什么才能使Xamarin Studio接受我的更改。
所以,经过所有这些实验,我完全迷失了方向。拥有一个完整、强大的A-Z教程来完成此设置过程将非常有帮助,但如果没有,任何建议都将非常感激。
更新:如果我使用“Ad-Hoc”项目配置(无论是在Visual Studio还是Xamarin Studio中),它都可以正确地在设备上部署和启动应用程序,但不能附加调试器。如果我在Ad-Hoc项目配置中明确启用调试,Xamarin Studio会忽略它,但是Visual Studio会附加调试器,但不会触发任何断点。这一切听起来是否正确?它提供了任何线索,说明我需要更改哪些内容才能使“Debug”配置正确地工作吗?

似乎你还没有为你的iPhone/iPad进行配置:https://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/ - SushiHangover
@SushiHangover:谢谢。我使用Xcode > 窗口 > 设备,刚刚检查了iPhone上安装的配置文件。我在我的Apple账户中交叉检查了已安装的配置文件,它包括我的开发签名ID并列出了3个设备,其中一个是我正在尝试调试的iPhone。 - Tim Coulter
奇怪...我们有一堆Android设备,无法使用Xamarin的调试器(但可以使用A.S.),但如果它们被授权,则从未出现iOS问题。iDevices上运行的iOS版本是什么(10?)? - SushiHangover
iPhone 4 搭载 iOS 9.3,而 iPhone 5 和 6+ 则搭载 iOS 10。 - Tim Coulter
2个回答

3

1
对于遇到类似问题的任何人,我最终采用的解决方案是一种“蛮力”方法。我首先创建了一个新的Xamarin.Forms解决方案(使用标准的Visual Studio模板),并删除了不需要的平台项目(UWP和Windows Phone)。在这个初始状态下,我验证它能够在Android和iOS设备上启动调试,以及它们各自的模拟器。一切都正常工作,证实我的Mac设置正确,并为我提供了进行调试所需的确切iOS项目配置。
此时,我认为配置问题必须是导致我之前问题的原因,因此我复制了工作配置的每个细节到原始解决方案中。但仍然无法在iOS上调试。
然后,我开始怀疑一个引用的Nuget包会导致问题,因此我将原始实现中所有引用的包添加到新的测试解决方案中。我预计这会破坏iOS上的调试,但事实并非如此。
最后,我仔细地将原始解决方案的所有内容(XAML和代码后台文件、视图模型、资源等)移植到测试解决方案中,它继续正确地进行调试。

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


2
您可能需要在IOS项目的属性中手动设置VS中的配置文件,在iOS Bundle签名部分进行设置,如下文所述:https://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/free-provisioning/#Launching_your_App (这是第10步)。 - nrudnyk
说句题外话,我在安卓设备上也遇到了同样的问题和“解决方案”。所以这可能是 Xamarin 的问题而不是 iOS / Android 的问题? - dlchambers

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接