Tag: 调试

如何在iOS上调试后台获取事件

注册您的应用以进行后台抓取,使您可以为用户做各种事情……例如更新图标的徽章计数! 但是您应该如何测试呢? 取回操作取决于操作系统…… 我将向您展示如何调试后台获取解决方案以及遇到的陷阱。 首先,在performFetchWithCompletionHandler设置一个断点,以便我们可以验证测试。 接下来,从Xcode的Debug菜单触发获取: 这应该可以正常工作,但这不是最有用的方案。 如果您想像这样进行调试,则可以直接直接调用performFetchWithCompletionHandler方法。 棘手的部分是重新创建完全不加载您的应用程序的情况,iOS将其唤醒以在后台执行。 这是我们遇到的#xcode问题。 编辑应用程序目标的方案,您将看到一个选项,用于模拟从后台提取事件启动。 在模拟器中尝试。 您将永远等待而不会出错。 显然,这曾经在模拟器中起作用。 但是不再。 精细。 让我们尝试使用该设备。 您可能会认为此错误是有意义的。 也许您需要进入手机上的“设备管理”设置,以验证您是否信任开发者证书。 我一般建议这样做,但是这里无济于事。 据我所知,这是一个通用的“超时”错误。 是什么赋予了? 好吧,这是一个错误。 在iOS 11.0.3之后,此功能就中断了。 如果您使设备保持最新状态(在撰写本文时为11.2.6),则将无法测试设备上的后台抓取。 那么现在怎么办? (编辑:自iOS 11.3和Xcode 9.3起,此功能现在可以使用!感谢Marco Mussini) 希望在Apple解决此问题之前,您可以使用较旧的测试设备。 如果您位于双子城,则可以在Livefront停留并使用运行11.0.3的iPhone 7 Plus(在FinalPass上注册-第一小时免费!)。 以此为警告-始终准备有备用测试设备,以及较旧版本的iOS! Sean在 Livefront 与Xcode有着严格的专业关系 。 ps如果您没有设备,但想验证启动顺序,我已经更新了AppLaunchSequence文档以包括后台获取。

调试断点以替代打印

Xcode中的调试断点允许您替换打印并在以后的调试会话中重用调试语句。 通过简单地启用和禁用所需的断点,您还可以摆脱通常在CocoaLumberjack之类的库中定义的调试级别。 通过在需要时启用断点来重用它们 使用断点替换打印语句 保持代码干净,而无需调试日志 在此视图中,一旦断点被​​触发,您就可以定义其行为。 这将在控制台中记录以下行: “Did add 2 content items to bucket Photos” po代表打印对象,可用于在断点行的上下文中打印任何可到达的对象。 通过Automatically continue after evaluating actions勾选“ Automatically continue after evaluating actions您可以允许调试器在击中断点后继续运行而不会暂停。 带有断点的更高级的调试 您可以通过调试断点做更多的事情。 一个很好的开始是查看Paul Hudson的演讲“如何像专业人士一样进行调试”,此处提供了该演讲。 这个故事最初发布在: https://www.avanderlee.com/debugging/debugging-breakpoints/

SKCameraNode和Xcode调试视图层次结构

当我刚刚开始SpriteKit之旅时,我确实发现了许多问题。 当然,最常见的原因是我缺乏对Swift和Apple框架的经验,因此寻找解决方案可以帮助我学习和发展。 有时我会遇到不必要的事情,就像我前一天进入Xcode的Debug View Hierarchy 。 当涉及到SpriteKit , SKCameraNode和当前版本的Xcode v9.3.1中的调试器时,我确实遇到了一些特殊的行为。 我设置了一个非常基本的SpriteKit项目,以清楚地显示行为。 在这里,我们在SpriteKit编辑器中只有8个精灵。 正如我们所期望的,运行该应用程序将为我们提供与编辑器中完全相同的视图。 因此,让我们在运行应用程序时输入视图调试器,瞧,我们在调试器中也获得了完全相同的视图,就像在应用程序和编辑器中一样。 到目前为止,到目前为止,我们现在将SKCameraNode添加到场景中并再次执行相同的测试。 添加了SKCameraNode并再次运行该应用程序后,我们仍然可以获得预期的结果。 相机会看到我们定义的场景,并且应用程序中的视图正确。 因此,让我们再次输入Debug View Hierarchy … 哇! 这不是我期望的。 运行该应用程序时的视图是正确的,与编辑器中的视图相同,但是在调试器中获得的视图是不同的。 该视图似乎偏移了半个屏幕。 在将摄像机添加到场景(包括在开始新项目时添加到默认SpriteKit场景)后,就会始终发生这种情况。 通过SpritKit编辑器添加相机,或者以编程方式通过代码添加相机,这没有什么区别。 我发现通过将场景的锚点从默认值(0.5, 0.5) 0.5,0.5 (0.5, 0.5)更改为(0, 0)解决此问题,然后调试视图可以与SKCameraNode一起使用。 更改锚点会使调试器在使用相机时按预期显示视图,但除非场景的锚点(0,0)对我而言似乎不正确,否则无法将调试视图与SpriteKit和SKCameraNode一起使用,或成为预期的行为。 我希望调试器在运行应用程序时显示与我看到的视图相同的视图,无论我在场景中使用的锚点是什么。 这是Xcode v9.3.1中的错误吗? 还是我错过了什么? 最初于 2018 年5月16日 发布在 code.bitbebop.com 。

调试UIViewAlertForUnsatisfiableConstraints

作为iOS平台上的应用程序开发人员,我经常遇到如下约束警告, 无法同时满足约束条件。 以下列表中至少有一个约束是您不想要的约束。 尝试以下操作: (1)查看每个约束,并尝试找出不期望的约束; (2)查找添加了一个或多个不必要约束的代码并进行修复。 ( “” “, ” “, ” “, ” <“,” “ ”, “ “, ” “ ) 将尝试通过以下方式恢复 打破约束 在UIViewAlertForUnsatisfiableConstraints上创建一个符号断点,以在调试器中捕获该断点。 当我看到此类问题时,我们立即使用UIViewAlertForUnsatisfiableConstraints设置了符号断点。 当我再次运行该应用程序以重现该问题时,Xcode将在上述约束警告处停止。 现在如何处理指针和汇编代码? 经过研究,我找到了一些调试此断点的解决方案。 如果您看到上面的图像,您会看到%rbp,%rsp,%rbx,%r15等字符串。这些属性保存视图和约束的地址,这是约束问题背后的原因。 我们可以在Xcode控制台中打印它们,以查看有关此内容的更多详细信息。 我通常从打印rbx开始,因为根据我的经验,它通常是NSArray ,其中包含该问题涉及的所有视图和约束。 打开Xcode控制台并执行以下命令。 po $ rbx 以上结果看起来与警告消息完全一样,因此,我们可以如何处理它。 三想记住这里, 程序执行在断点处停止 您具有约束问题所涉及的所有视图的内存地址。 LLDB使您可以在运行时评估obj-c表达式 如果查看po $ rbx命令的结果,可以看到view的内存地址。 例如UIView:0x7f94ff5b3c70 我通常会为某些视图提供外观并继续执行程序。 使用从上一个打印命令获得的内存地址,在Xcode控制台中执行以下命令。 ex [(UIView *)0x7f94ff5b3890 setBackgroundColor:[UIColor greenColor]] ex [(UIView […]

Xcode调试工具:快速入门指南

了解调试工具的方法将使您成为一个更好,更高效,更快乐的程序员。 了解一些方便的技巧,以帮助您入门。 在本文中,我将分享一些有关如何使用Xcode中集成的调试工具的提示。 我将向您展示一些LLDB命令以及如何将它们与断点一起使用。 希望我会为您提供新的武器来分析您的代码并查找错误。 Xcode在其主窗口中集成了一组调试工具。 下图显示了在断点处暂停应用程序时Xcode调试器的布局。 本地数据库 LLDB是一个开源调试器,它是LLVM编译器开发套件的一部分。 它与Xcode捆绑在一起,您可以在窗口右下角的控制台中找到它,如上图所示。 以下是一些基本的LLDB命令: 救命 help命令列出了所有可用的命令。 如果您想了解有关特定命令的更多信息,可以键入help 以获取有关该特定命令的所有详细信息。 打印 打印命令非常有用。 它使您可以在控制台上打印变量值,从而不必诉诸诸如记录变量值或简化程序行为之类的技术。 上图显示了一种非常常见的做法,其中包括记录变量以检查其值。 通过在给变量赋值后放置一个断点(第5行),程序将暂停执行。 如图所示,在这里我们可以使用print命令检查变量的值。 LLDB会进行前缀匹配,因此如果键入prin , pri或p会很好。 您还可以使用$ 0引用结果和类型,例如,p $ 0 + 10获得109的结果。 表达 expression命令也非常有用,因为它允许您修改变量的值。 在上面的示例中,我们使用表达式命令将count的值更改为80。 如您所见,它不仅改变了调试器中变量的值,而且实际上改变了程序中的变量值。 您可以从print命令的结果中观察到这一点。 断点 下图显示了Xcode的断点管理器。 在这里,您可以管理程序中的断点列表,并执行其他操作,例如删除或启用和禁用断点。 一种非常普遍的做法是使用断点来停止程序的执行,检查其状态并搜索错误。 但是,还有更多…… 断点为我们提供了其他可能性,正如我们在本文中已演示的那样。 通过使用断点,我们证明了我们可以指示程序何时停止,以及使用LLDB在其上运行命令,从而使我们能够检查和修改变量。 Xcode允许我们创建符号断点,从而可以节省大量时间来查找错误。 要创建符号断点,请单击XCode调试管理器左下角的“ +”按钮,然后选择“符号断点”。 将出现一个弹出窗口,允许您插入任何符号,并且只要在程序中的任何位置或在Apple的代码中执行此符号,断点将导致程序停止。 在图片中,您可以看到一个示例。 我将变量计数转换为NSNumber类型的对象。 我插入了符号[NSNumber numberWithUnsignedInteger:] ,以便在进行转换时使程序停止。 如您在图片中所见,即使在该特定代码行中没有断点,执行符号时程序也会停止。 结合LLDB和断点 将LLDB命令与断点结合使用会带来很多可能性。 我将向您展示两个实际示例,以演示如何结合使用这两种工具,以帮助您从程序中获取更多信息,并根据需要对程序进行更改。 […]

Como utilizar Wireless调试无Xcode 9

Apple宣布了无线调试功能,没有Xcode 9或WWDC17。 Essa功能允许使用通用的构建调试器的设备(iOS或tvOS),可以使用对应的USB和Mac操作系统。 在Xcode 9或更高级别上使用无线工具进行调试的必要工具,在iOS 11或更高版本上使用estar设备。 1- Abra seu projeto no Xcode 2- Conecte seu iPhone no USB(Apenas primeira vez para fazer aconfiguração) 3- Abra窗口/设备和模拟器(teclas de atalho Shift + Command + 2) 4- Selecione a Primeira aba“设备”,selecione seu设备,ao lado esquerdo 5- Selecione o复选框“通过网络连接”。 Dépreaaparecer oéconede rede na frente do sume device。 6- Desconecte seu设备可连接USB和Macestáconectado的mesmaconexão无线产品。 无线连接,没有任何可用的iPhone和iPod […]

Xcode中的3个基本调试工具

Xcode是一个功能强大的IDE,它提供了各种各样的调试工具。 尽管许多工具很容易发现和使用,但我注意到许多iOS开发人员并不知道Xcode隐藏的高级功能(但必不可少)的调试功能是否存在。 我决定为Xcode编写一份简短的调试技巧清单,它表示大多数情况下用于调试代码的工具。 我与他们分享是希望发现这些隐藏的宝石后能提高您的生产率。 1.查看层次结构调试器 我很惊讶地看到一些经验丰富的iOS工程师不知道此功能的存在。 通常,通过以编程方式更改屏幕上所有视图的背景颜色来调试视图层次结构,以便观察发生的情况。 如果您知道“ Debug View Hierarchy”按钮,该按钮隐藏在Debug Area栏中(“恢复/暂停”调试按钮旁边),则您会觉得效率很低。 此功能使您可以在称为视图层次结构调试器的3D渲染中研究视图对象的关系 。 您可以很好地看到布局树,您可以在其中立即注意到UI是否有问题。 在设置付费工具(例如Reveal App)之前,请尝试使用此功能。 Xcode内置的视图层次结构调试器功能非常强大,通常是调试视图层次结构所需的所有工具。 在为我为iOS App模板创建的通用集合视图控制器上工作时,此工具在调试流畅的布局类方面非常了不起,该类允许集合视图单元具有灵活(不相等)的宽度和高度。 另一个提示-我喜欢使用此工具来查找特定屏幕/组件的代码在哪里,因为您可以识别轻松备份用户界面的类的名称。 在不熟悉的代码库中非常方便。 2.丰富的断点 如果您是iOS的新手,则可能只使用了简单的断点,即可在调试期间闯入所需的任何方法,以观察当前的运行时上下文(变量,状态,对象关系等)。 您可以通过简单地单击特定代码行的左侧栏来设置断点,并且只要该行正在运行,Xcode就会暂停程序的执行。 许多iOS开发人员不知道的是,断点甚至比常规用例还要聪明。 实际上,它们令人印象深刻。 您可以使用以下一些实用技巧: 条件断点 -仅当给定条件为true时,断点才会命中。 这对于调试列表(例如)非常有用,例如,您只在乎第N个单元格中发生的事情,并希望跳过暂停每个上一个列表项的执行。 忽略 —您可以在断点处忽略固定次数的暂停。 这在许多情况下都派上用场,包括上述情况。 动作断点 -遇到断点时 ,您可以告诉Xcode执行特定的动作。 这些动作可以是记录消息,运行调试器命令(例如“ po”)甚至运行Shell脚本。 断点激活时,此处的一个非常有趣的功能是播放声音。 在处理经常调用的方法(例如layoutSubviews )中的断点时,这样可以节省大量调试时间。 要使用所有这些功能,可以在断点上单击鼠标右键,然后选择“ 编辑断点 ”。 3.异常断点 调试异常时,这是救生员。 您可以仅添加此通用Xcode断点,而不是手动查找导致异常的代码,该断点将在引发异常之前暂停执行。 这样,您可以调查引发异常时的确切上下文,几乎可以在几秒钟内准确显示出错误所在。 在调试不熟悉的代码时非常有帮助。 要设置此断点,请转到断点导航器( Command + 8 ),单击底部的“ […]

iOS开发人员的Charles技巧和窍门:模拟

注意:本文中的几乎所有内容均可用于iOS,Android,Web或您正在使用的任何技术的任何平台。 在第一篇文章《查尔斯:iOS开发人员的技巧和窍门》(第1卷)中,我就如何配置和开始使用查尔斯做了一个友好的分步指南。 正如我在那篇文章中提到的,查尔斯打开了另一个世界的大门,从可视化简单请求到即时模拟数据以伪造不存在的端点。 在本文中,我将向您展示如何使用Charles来模拟来自现有或不存在的端点的数据。 改写 让我们从一个简单的技巧开始。 我想在其中更改“ 浏览”部分 Meetups应用程序,并使用Charles更改我的位置以查看外观。 例如,我将更改端点中的某些参数以伪造我在日本的位置。 对于“ 探索 ”部分,他们使用端点调用api.meetup.com/self/home,我们可以添加一些与位置有关的参数,我们将更改纬度和经度,并指定要探索的城市。 Charles使我们能够使用位于工具>重写中的重写工具来处理HTTP事务中的任何数据。 该工具使我们能够在执行请求之前更改请求的不同部分,甚至操纵响应。 确保检查“ 启用重写”指示器。 对于此示例,我们要操纵纬度和经度参数,因此我们需要添加一个新的重写项。 我们将其称为: Meetup家庭位置模拟。 该位置是指您要模拟的URL。 因为我们想为多个位置创建一个可重用的Mock,所以我们指定https://api.meetup.com/self/home 作为我们的网址。 如果仅将完整的URL粘贴到主机文件中,则速度会更快,Charles会自动解析URL并为您填充其他字段。 让我们继续添加一些重写位置参数的规则。 添加新规则,然后在“ 类型”下拉列表中选择您要更改的内容。 对于此示例,请使用Modify Query Param 。 由于我们只想操纵请求 ,因此在“位置”部分中选择“ 请求 ”。 在“ 匹配”部分中,指定要查找的参数,并在“ 替换”部分中指定要更改的值。 考虑到139.77和35.67是东京的经度和纬度,因此规则如下所示。 在测试之前,请确保您按“ 应用”。 这是我们的重写。 我建议您花时间弄乱更多的位置或不同的url参数,以了解应用程序如何处理不同的响应。 操纵响应体 正如您在“ 重写规则”窗口中看到的那样,我们有很多选项可以处理数据。 通常,在我的工作中,我需要测试一些仅针对特定用户或服务器通常不返回的数据显示的行为,例如某些状态或错误消息。 因此,让我们使用Charles嘲笑全新的Category来操纵Meetup App的Category部分。 我注意到, home端点以符合以下结构的类别列表作为响应: { “ id”:242, “简称”:“户外探险”, […]

找到内存泄漏的根源。

我真的很喜欢Emilien Stremsdoerfer的内存泄漏文章,并想在结尾部分进行扩展。 您可以启用称为Malloc堆栈日志的功能,这将使Xcode内存调试器能够找到导致内存泄漏的确切代码行。 去年在Visual Debugging WWDC会话中几乎没有涉及到这一点,我认为我应该与错过它的人分享。 启用Malloc堆栈日志记录: 首先,您需要启用Malloc堆栈日志记录。 这是每个scheme都启用的功能,因此您需要在用于运行/调试项目的任何scheme上启用它。 通常,您将需要在Run scheme执行此操作: 现在,您将拥有一个升级的内存调试器。 如果在应用程序运行时单击可视调试器,则可以浏览内存泄漏,如下所示: 都是一样的,但是如果您查看右侧面板,现在就可以直接跳到导致泄漏的行: 我必须重申Emilien Stremsdoerfer关于内存调试器有点误导的观点。 在我的特定情况下,问题的根源最终是来自缺乏弱声明的第三方框架的委托-Xcode并未将其列为泄漏。 但是,由于有了内存图,我得以对其进行跟踪并提交了框架的PR。 我还要提及的是,在调试内存泄漏时应打开和关闭此选项。 启用Malloc堆栈日志记录后,使用调试器逐步调试时,某些属性未完全记录下来,这会使调试代码变得困难。 祝您调试愉快! 👍🏼 www.daniel-williams.co

XCode显示调试导航器

Yenifarkettiğimbuözelliksayesindeuygulamanızçalışırkenekstraözelliklerinigörselleştiripdurumunu monitor edebiliyorsunuz。 CPU Durumu 恩吉(Enerji Etkisi) 磁碟 网络 Bunun haricinde cihaza 4图片açısıile bakabiliyorsunuz Sizin UIbileşenlerinisoldaki gibigörselleştirerekhiyerarşisini运行时görmenizisağlatıyor。 Bellek adreshiyerarşisigörmenizisağlıyor。