Release RuView NLOS iOS beta through TestFlight
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 94.5k
- Forks
- 12.5k
- Avg merge
- 21h 27m
- Merged PRs (30d)
- 43
Description
Objective
Publish the RuView NLOS native iOS client to a controlled TestFlight beta so an initial group of 5 to 20 LiDAR equipped iPhone testers can install it without Xcode.
Related implementation: PR 1687
Tester protocol and feedback: Issue 1690
Explainer: https://ruview-nlos.ruv.chatgpt.site
Expected effort
- First Apple account and app setup: 30 to 60 minutes.
- Archive and upload: 10 to 20 minutes.
- Apple build processing: variable and not guaranteed.
- Internal validation: about 10 minutes per tester.
- External TestFlight review: variable and not guaranteed.
Inputs
- A Mac with Xcode 26 or newer.
- Membership in the Apple Developer Program.
- Account Holder, Admin, App Manager, or Developer access for build upload.
- Account Holder, Admin, or App Manager access for external tester groups.
- Access to branch
feat/consumer-nlos-ruview. - A LiDAR equipped iPhone Pro or iPad Pro running iOS 16 or newer.
- A monitored feedback email address.
- A privacy policy URL owned by RuView.
- A support contact name, phone number, and email address for Apple review.
Output
- A signed RuView NLOS build in App Store Connect.
- A verified internal TestFlight group.
- An approved external TestFlight group.
- A controlled invitation link for qualified LiDAR testers.
- A recorded release decision with build number, test results, known limitations, and rollback owner.
Release invariants
- Display name is
RuView NLOS. - Bundle identifier is
org.ruvnet.RuViewNLOS. - Marketing version starts at
1.0. - Build number starts at
1and must increase for every upload. - Minimum deployment target is iOS 16.
- The camera purpose text must remain present.
- The app must never claim that public ARKit scene depth is physical NLOS evidence.
- Every local result must remain labeled
direct_depth. - Physical NLOS status must remain
blocked_raw_transients_unavailable. - No signing certificate, provisioning profile, private key, App Store Connect key, or tester email list may be committed to GitHub.
- Diagnostics must remain local until explicit consent and must remain below 65,536 bytes.
- The external invitation link must not be published until the internal hardware acceptance test passes.
Step 1: Confirm the source and CI state
- Open PR 1687.
- Confirm the latest commit is
4a8c8ea734b09ac5b0e6d4a47705b63f05b41fa1or a later reviewed commit. - Confirm the Consumer NLOS workflow is green.
- Confirm the native job passed Swift tests, simulator build, and unsigned generic device archive.
- Confirm the web job passed tests, type checking, lint, browser export, and Expo iOS export.
- Record the exact commit in a release comment on this issue.
Exit criterion: the release commit is immutable, reviewed, and all required feature checks are green.
Step 2: Prepare the Apple account
- Sign in to Apple Developer and App Store Connect with the RuView organization account.
- Confirm all current Apple agreements are accepted.
- Confirm the person uploading has the required role.
- In Certificates, Identifiers and Profiles, create or confirm an App ID for
org.ruvnet.RuViewNLOS. - Keep automatic signing enabled for the first beta unless RuView already operates a governed manual signing process.
- Confirm that no personal Apple team is selected by mistake.
Exit criterion: the App ID belongs to the intended RuView legal entity and the release operator can sign an archive.
Step 3: Create the App Store Connect record
- Open App Store Connect.
- Select Apps.
- Select the add control and choose New App.
- Choose iOS.
- Enter
RuView NLOSas the name. - Select the primary language.
- Select the bundle identifier for
org.ruvnet.RuViewNLOS. - Enter a unique SKU such as
ruview.nlos.ios.001. - Restrict user access if the organization uses scoped App Store Connect access.
- Save the record.
Exit criterion: the app record exists and its bundle identifier exactly matches the Xcode project.
Step 4: Prepare TestFlight metadata
- Open the app record.
- Select TestFlight.
- Open Test Information.
- Enter this beta description:
RuView NLOS validates the public LiDAR and ARKit capabilities available on supported Apple devices. It measures visible scene depth, motion stability, tracking quality, and thermal state. This beta does not claim around the corner reconstruction from Apple LiDAR because public Apple APIs do not expose the raw photon timing samples required by the research pipeline.
- Enter this feedback focus:
Complete the 15 second calibration and 30 second visible wall scan. Report device model, iOS version, completion status, average frame rate, depth coverage, tracking warnings, thermal warnings, and whether the diagnostic share flow worked. Do not include photographs, raw depth, credentials, or private location information.
- Enter the monitored feedback email.
- Enter the review contact information.
- Add the explainer URL.
- Add reviewer notes explaining that camera permission is required by ARKit, images are not displayed or stored, diagnostics are aggregate and local, and the NLOS server connection is optional.
- If Apple requests credentials for an optional server, create a revocable review account with minimum permissions. Never place production credentials in reviewer notes.
Exit criterion: all required beta metadata is complete and a reviewer can understand the camera and LiDAR behavior without guessing.
Step 5: Decide export compliance accurately
- Review the app encryption behavior before answering App Store Connect.
- The current client uses Apple platform security services and encrypted network transport.
- Confirm whether any custom or nonstandard cryptography has been added since PR 1687.
- Answer the App Store Connect encryption questions based on the released binary and the organization legal determination.
- Record the decision and owner in this issue.
- Do not copy a previous answer without comparing the current binary.
Exit criterion: export compliance is answered by an accountable release owner and matches the binary.
Step 6: Configure signing in Xcode
- Clone or update the RuView repository on the Mac.
- Check out the approved release commit.
- Open
ui/ios-nlos/RuViewNLOS.xcodeproj. - Select the RuViewNLOS target.
- Open Signing and Capabilities.
- Select the RuView development team.
- Confirm the bundle identifier is
org.ruvnet.RuViewNLOS. - Confirm automatic signing resolves without errors.
- Confirm version is
1.0. - Set the build number to a value greater than every prior upload.
- Select a connected LiDAR equipped iPhone.
- Build and run once on that device.
- Grant camera permission and confirm the setup screen loads.
Exit criterion: Xcode reports no signing error and the app launches on a physical LiDAR device.
Step 7: Run the physical device gate before upload
- Start the 45 second validation.
- Point the phone at a well lit textured surface for the 15 second calibration.
- Keep a matte visible wall between 0.5 and 4 metres away during the 30 second scan.
- Move the phone slowly, roughly 5 to 15 centimetres per second.
- Confirm frames per second is visible and stable.
- Confirm depth coverage remains above zero.
- Confirm tracking reaches
normalfor part of the run. - Confirm the result says
direct_depth. - Confirm the physical NLOS status says
blocked_raw_transients_unavailable. - Enable export consent only after completion.
- Prepare the JSON.
- Confirm the file is smaller than 65,536 bytes.
- Inspect it and confirm there is no image, raw depth map, camera transform, endpoint, token, location, or stable analytics identifier.
- Cancel a second run and confirm sensor activity stops.
- Deny camera permission once and confirm the app fails safely with understandable recovery instructions.
Exit criterion: all 15 checks pass on at least one supported physical device.
Step 8: Archive and validate
- In Xcode, select Any iOS Device as the destination.
- Select Product, then Archive.
- Wait for Organizer to open.
- Select the new archive.
- Select Validate App.
- Choose the RuView distribution identity and automatic signing.
- Resolve every error.
- Review warnings individually. Do not ignore privacy, entitlement, architecture, or signing warnings.
- Record the version, build number, commit, Xcode version, macOS version, and operator in this issue.
Exit criterion: Xcode validation succeeds with no unexplained release warning.
Step 9: Upload to App Store Connect
- In Organizer, select Distribute App.
- Choose App Store Connect.
- Choose Upload.
- Keep symbol upload enabled.
- Confirm automatic signing.
- Review the final bundle identifier, version, build number, entitlements, and destination.
- Select Upload.
- Wait for Xcode to confirm upload.
- Open App Store Connect and wait for processing to finish.
- Review any processing email or warning.
- Do not upload the same build number again. Increase the build number for every retry.
Apple documents Xcode, Transporter, and the App Store Connect API as supported upload paths. Use Xcode for this first controlled release: Apple upload guidance.
Exit criterion: the build status is ready for internal testing.
Step 10: Run an internal TestFlight pilot
- Create an internal group named
RuView NLOS Release Gate. - Add 2 to 5 trusted App Store Connect users.
- Add the uploaded build.
- Enter the feedback focus from Step 4.
- Ask each tester to install TestFlight from the App Store.
- Ask each tester to accept the invitation and install RuView NLOS.
- Require at least one LiDAR equipped device.
- Have every tester complete the physical device gate from Step 7.
- Collect crashes, sessions, screenshots of failures, and consented diagnostic JSON.
- Record results by device model and iOS version.
Apple supports up to 100 internal testers: Apple internal tester guidance.
Exit criterion: at least 3 internal runs pass, including 1 LiDAR device, with zero crash and zero privacy boundary violation.
Step 11: Create the external beta
- Create an external group named
RuView NLOS LiDAR Pilot. - Add the approved internal build.
- Enter What to Test using the feedback focus from Step 4.
- Submit the build for TestFlight App Review.
- Wait for approval before inviting external testers.
- If rejected, read the exact rejection, correct metadata or code, increase the build number, upload again, and record the resolution here.
- After approval, create a public invitation link or invite named testers by email.
- Prefer a controlled public link limited to 20 testers for the first cohort.
- Apply device and OS criteria when App Store Connect offers them.
- Paste the approved invitation link into Issue 1690 and the explainer only after the internal gate passes.
- Do not use the generic TestFlight App Store link as if it were the RuView invitation link.
Apple requires an internal group before an external group and permits up to 10,000 external testers: Apple external tester guidance.
Exit criterion: 5 to 20 qualified external testers can install the approved build through the real RuView invitation link.
Step 12: Monitor the pilot
- Review TestFlight crashes, sessions, and feedback daily during the first 7 days.
- Triage Issue 1690 daily.
- Track these measures:
| Measure | Release threshold |
|---|---|
| Installation success | at least 90 percent |
| Validation completion | at least 80 percent |
| Crash free runs | at least 99 percent |
| Diagnostic generation | at least 95 percent of completed runs |
| Diagnostic size | below 65,536 bytes in every run |
| Privacy boundary violations | zero |
| Incorrect NLOS claims | zero |
| Supported device depth coverage | above zero in at least 95 percent of completed runs |
- Segment failures by device model, iOS version, permission state, thermal state, and tracking state.
- Do not combine unsupported devices with LiDAR devices when calculating depth success.
- Stop expanding the cohort if crash free runs fall below 99 percent or any privacy invariant fails.
Exit criterion: all thresholds hold for at least 20 completed runs across at least 3 device configurations.
Rollback procedure
- In App Store Connect, open TestFlight and select the affected build.
- Stop testing the build.
- Disable the public invitation link if exposure must stop immediately.
- Remove the build from all testing groups.
- Add a visible notice to Issue 1690.
- Revoke any review or test server credentials involved.
- Preserve crash reports and consented aggregate diagnostics.
- Open a blocking defect linked to this issue.
- Correct the problem and release a new build number.
- Never attempt to replace an uploaded binary under the same build number.
Troubleshooting
Xcode cannot sign
- Confirm the selected team is the RuView organization.
- Confirm the App ID exists and exactly matches
org.ruvnet.RuViewNLOS. - Confirm the operator has certificate access.
- Refresh accounts in Xcode settings.
- Remove only stale local derived build data. Do not delete organization certificates without approval.
App Store Connect does not show the upload
- Confirm Xcode reported upload success.
- Confirm the app record bundle identifier matches the binary.
- Wait for Apple processing.
- Check the email address associated with App Store Connect for processing errors.
- Confirm the build number was unique.
External group cannot use the build
- Confirm an internal group exists.
- Confirm the build was not uploaded as TestFlight Internal Only.
- Confirm beta metadata and review contact information are complete.
- Confirm TestFlight App Review approved the build.
- Confirm the device and OS criteria match the build.
Scene depth is unavailable
- Confirm the device has LiDAR.
- Confirm camera permission is enabled in Settings.
- Use a matte, visible, textured surface.
- Improve lighting.
- Keep the surface between approximately 0.5 and 4 metres away.
- Restart the validation with the app in the foreground.
Tracking remains limited
- Slow movement to approximately 5 to 15 centimetres per second.
- Add visible texture near the wall.
- Avoid reflective glass and featureless white surfaces.
- Keep the app active.
- Let the device cool for 5 to 10 minutes if thermal state is serious or critical.
Biggest uncertainty
Public Apple APIs expose derived visible scene depth, not the raw photon timing histograms required for the MIT physical NLOS technique. TestFlight cannot remove that hardware API boundary.
Fix path: validate the public ARKit capture and diagnostic experience on iPhone now, then connect RuView to an external supported transient sensor for physical NLOS reproduction. Keep those evidence classes separate.
Final acceptance test
A new tester with no Xcode installation opens the real RuView TestFlight invitation, installs the app in under 5 minutes, reads the explainer, grants camera permission, completes the 45 second validation, sees direct_depth and blocked_raw_transients_unavailable, generates a diagnostic smaller than 65,536 bytes only after consent, and submits usable feedback to Issue 1690.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by opening PR 1687 and checking the approved commit and Consumer NLOS workflow, then open ui/ios-nlos/RuViewNLOS.xcodeproj in Xcode. Follow the physical device gate before archiving and uploading to App Store Connect. Done means the internal TestFlight gate passes and the approved external invitation is ready for qualified LiDAR testers, with results recorded in this issue and Issue 1690.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ios, swift
- Domain
- mobile, release
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Clearly specified
- Newbie friendliness
- 35/100