肇鑫的技术博客

业精于勤,荒于嬉

watchOS 10无法在Xcode 15下配对问题的解决

之前我的苹果表s5无法和Xcode 15配对。用了很多办法也没解决。后来我发现,这个问题在Xcode 15上几乎是普遍存在的。于是死心了。等苹果修。结果等来的却是WWDC2024的watchOS 11不再支持我的s5的消息。索性,趁着618的促销,把s5卖掉,换成s9。

打开开发者选项

出乎我意料的,s9与Xcode 15的配对也不是一帆风顺。最初遇到的难题就是,手表没法打开开发者模式。我使用方式是:

  1. 将s9与iPhone进行配对。设置为全新手表,并且不安装任何软件。这样的目的是保证系统的纯正,以及尽快完成设置。
  2. 手表要显示开发者模式选项,必须现在手机端开启开发者模式。
    1. 但是由于我的手机是在和手表配对之前就已经开启了开发者模式。因此需要先关闭手机的开发者模式,然后重新开启,重启手机。
    2. 手机成功开启开发者模式后。手表端需要关机,然后重启。这样应该就能看到开发者模式的选项了。

我这么做完之后,我的s9并没有成功显示开发者选项。这时,我看到了手机提示手表系统可以升级,点开一看,原来手表的系统是watchOS 10.4,而最新的是watchOS 10.5。于是将s9连上充电器,开始升级系统。

升级系统完成后,直接就发现了开发者选项。可见,第一步应该是升级系统到最新的10.5,然后是上面的那几步。

与Xcode配对

结果和Xcode 15的配置还是不成功。于是我打开Xcode 16 beta配对。结果提示了这个错误。

Transport error
Domain: com.apple.CoreDevice.ControlChannelConnectionError
Code: 0
User Info: {
    DVTErrorCreationDateKey = "2024-06-16 08:32:19 +0000";
    "com.apple.dt.DVTCoreDevice.operationName" = connect;
}
--
Control channel connection timed out while in state preparing
Domain: com.apple.dt.RemotePairingError
Code: 4
--


System Information

macOS Version 14.5 (Build 23F79)
Xcode 16.0 (23037.4) (Build 16A5171c)
Timestamp: 2024-06-16T16:32:19+08:00

我怀疑和VPN的设置有关。我使用的是Clash Pro。于是重启到macOS 15 beta系统。那个系统中Clash Pro没有设置为开机启动。果然,进入到macOS 15 beta之后,和Xcode 16 beta的配对成功了。

然后我又重启回macOS 14.5,这回提示为另外一个错误了。

Previous preparation error: A networking error occurred.. Control channel connection was invalidated while creating tunnel connection

我将Clash Pro的策略从“规则”,修改为“全局”。然后重开Xcode 15,这次可以成功配对了。

最后,我创建了一个手表应用测试了一下,可以成功调试了。

Xcode在开发SwiftUI项目时,持续CPU占用过高问题的解决

问题的发现

在使用Xcode开发SwiftUI项目时,经常会遇到Xcode持续高CPU占用的问题。以往我没有重视这个问题,经常是很久之后才发现。此时,原本冰冷的Mac mini摸起来已经温热了。为此,我特意开发了一个小工具,提醒我关于这个问题。

App Helper

问题的解决

最初,我发现这个问题出现的几率,和我打开的SwiftUI的文件的数量相关。打开的SwiftUI的文件越多,越有可能遇到这个问题。

就在我以为这就是真正的原因,并发文之后,我在仅打开2-3个SwiftUI文件的时候又遇到了这个问题。这次,我终于找到了是哪个文件导致的这个问题了。是MainView。应该是文件功能太多导致的。我的MainView,是一个接近2000行的文件。它包含多项功能:

  1. 主视图布局,侧栏视图实现
  2. 工具栏实现
  3. 各种错误弹窗处理
  4. 文件处理(打开、解析、保存)
  5. 用户订阅状态管理等。

我尝试将代码分离按照功能为多个小文件。但是问题仍旧存在。最后发现,解决的办法就是注释掉预览的代码。

关于这个问题的一些补充

  1. CPU占用过高是因为MainView的功能太多导致的。
  2. 将MainView的代码拆分到多个文件不能解决这个问题。
  3. 即便MainView没有在预览,即预览视图显示为刷新按钮的状态。也还是会有这个问题。也就是说,只要预览视图开着,不管有没有要求运行预览,都会导致Xcode的CPU高占用。
  4. 此时,就算关闭了预览也没有用。所以,后台应该是某种卡死的状态。
  5. 解决办法只有
    1. 直接关闭预览。
    2. 一开始就不开预览。