提前为这个长期问题道歉,但是我浪费了3天没有成功尝试建立一个允许我在物理设备(而不是iPhone模拟器)上调试的Xamarin.iOS开发环境,并且我在不知道接下来要做什么。
我相信我的设置是一个标准的Xamarin配置:
我首先在Visual Studio中创建了一个Xamarin解决方案,我最初是在Android上开发和调试的。
要进行iOS调试,我将使用Xcode和Xamarin Studio设置Mac,启用它进行远程登录,并使用与我的Xamarin.iOS应用程序相同的包标识符创建一个虚拟Xcode项目。我还尝试了为应用程序创建签名身份和配置文件以及在Mac上下载/安装它们的相当复杂的过程。这个过程太不直观了(Xcode中的视觉反馈很差),我不确定我是否已经正确完成了。但是,我能够在iPhone上运行虚拟Xcode项目,所以我认为它一定可以吗?
在Windows PC上, Xamarin > Visual Studio设置中的 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未被列为 Debug |的候选目标设备。 iPhone 配置。
如果我打开项目选项并导航到 iOS Debug 视图,我可以看到与调试配置相关联的平台是 iPhoneSimulator 。将其更改为 iPhone 并保存配置它似乎有效,但实际上并未保存更改。我想这就是我的测试设备未列出的原因,但我不清楚我需要做些什么来让Xamarin Studio接受我的更改。
所以,经过所有这些实验,我完全迷失了。为这个设置过程提供一个完整,强大的A-Z教程会很有帮助,但是如果没有这个,那么我将非常感谢我接下来应该尝试的任何建议。
更新:如果我使用 Ad-Hoc 项目配置(在Visual Studio或Xamarin Studio中),它会在设备上正确部署和启动应用程序,但不会附加调试程序。如果我在Ad-Hoc项目配置中明确启用调试,Xamarin Studio会忽略它,但Visual Studio会附加调试器但不会遇到任何断点。这一切听起来都合适吗?它是否提供了我需要更改的线索,以使真正的调试配置正常工作?
答案 0 :(得分:1)
对于任何面临类似问题的人来说,我最终采用的解决方案都采用了“强力”方法。
我首先创建了一个新的Xamarin.Forms解决方案(使用标准的Visual Studio模板)并删除了不需要的平台项目(UWP和Windows Phone)。在这个初始状态,我验证它能够在Android和iOS设备以及它们各自的仿真器/模拟器上启动调试。一切正常,确认我的Mac设置正确,并为我提供了调试所需的确切iOS项目配置。
此时,我认为配置问题必须对我之前的问题负责,因此我在原始解决方案中完全复制了工作配置的每个细节。仍然拒绝在iOS上调试。
然后我开始怀疑引用的Nuget包导致了问题,因此我将原始实现中的所有引用包添加到新的测试解决方案中。我希望这能打破iOS上的调试,但事实并非如此。
最后,我仔细地将原始解决方案的全部内容(XAML和代码隐藏文件,视图模型,资源等)移植到测试解决方案中,并继续正确调试。
因此,在没有可行的诊断程序的情况下,我通过从头开始重建我的解决方案有效地解决了这个问题。没有更改代码,据我所知,没有更改配置设置,但现在可以在所有目标环境中可靠地调试新实现。
答案 1 :(得分:1)
这是可能的,如文档中所述:https://developer.xamarin.com/guides/ios/getting_started/installation/device_provisioning/free-provisioning/
(抱歉,我只是认为当前接受的答案更适合故障排除页面,而不是一般情况。)