A QR check-in can pass every test that feeds it a decoded string and still leave someone stuck at the door. Try this on an iPhone before calling the flow ready. Tap Scan, deny camera access, then see if you can finish check-in after enabling it in Settings. That’s a useful test to keep in view now that GitHub Copilot is available in public preview inside Xcode’s built-in coding assistant. GitHub announced the integration on November 4 for Xcode 27.3 beta on macOS Tahoe 26.6 or later. The separate Copilot extension remains available. GitHub’s announcement
AI generated and fact-checked this article against the linked public sources. It was prepared through an automated workflow, and Keith has not reviewed it.
From Strangers is a web project built around in-person events. Its public case study describes a static frontend with Firebase-backed services, phone-based sign-in, a QR check-in pattern, and gated participation in shared event spaces. The flow below is a proposed native iOS adaptation of that pattern. From Strangers case study
Put the test seam after the scanner
Give the check-in logic a way to receive a decoded value without starting a capture session. A test can then provide three small fixtures. A malformed value should produce an error without a check-in request. A well-formed code for a different event should leave the attendee unchecked in after the service rejects it. A successful service response should move the UI from checking in to confirmed. For that last test, hold the response open long enough to assert what the attendee sees while waiting.
Camera access and event access answer different questions. iOS decides whether the app can read video. The check-in service decides whether the signed-in attendee and the submitted code can produce a check-in for the selected event. Keep that decision on the service even if the app can spot an obvious mismatch early. A scanner can recognize a perfectly legible code printed for yesterday’s event.
This split gives a coding assistant a bounded task. Ask it to add the wrong-event fixture and show the assertion that keeps the screen out of the confirmed state. Then read the test to see what was replaced. If it stubs the entire check-in controller and tells it to reject the code, it can pass while the real controller still shows success too early. Feed the controller an input and control the service response at the boundary it already uses.
Deny access on the build you plan to ship
Apple’s AVCam sample requires a physical device because the Simulator has no access to device cameras. On iOS, AVFoundation lets you check the current capture authorization and request access when the user has yet to make a choice. iOS remembers the choice, and users can change it in Settings. The camera usage description belongs in the app target’s Info.plist and is shown in the system prompt. Apple’s AVCam sample · Apple’s camera authorization reference
Start on an iPhone where the test build has never requested camera access. Use a synthetic attendee and a printed code for a staging event. Sign in, tap Scan, and deny the prompt. Check that the screen explains why scanning is unavailable and offers a route back or to staff. If staff can check someone in, that path should use its own authorized workflow. Verify the denied scan leaves the staging attendee unchecked in.
Open the app’s camera setting and enable it. Return to the app and try Scan again. The screen should reflect the current permission and allow a scan without requiring the attendee to clear their app data. Use the printed code and confirm the resulting staging record. Then turn permission off again and return. This catches a screen that read authorization once and kept presenting a scanner after the setting changed.
The fixture suite can run on every change and cover many more event cases than someone can scan by hand. Reserve the device run for changes to capture, permission handling, or the check-in screen, and repeat it on the release candidate. At a venue, the person holding up the line may have pressed Don’t Allow two minutes earlier. The pass condition is that they can recover or reach the staff path and know whether their check-in actually went through.
