Pre-release SDK infrastructure: CI, Tuist generation, and docs - #3
Conversation
The next release reintroduces `#error("insert your application_id here")` in SampleApp/AppDelegate.swift to force SDK consumers to set a real app id; adding the CI workaround now keeps that release diff minimal. A sed substitution comments the directive out before the build so CI can compile the sample.
The step is a no-op against the current placeholder code, so it changes nothing until the directive lands.
Caches Pods/, the generated SampleApp.xcworkspace, and the CocoaPods download cache, keyed on Podfile.lock and SampleApp.xcodeproj/project.pbxproj so the cache invalidates whenever dependencies or the Xcode project change. This avoids re-resolving and re-downloading pods on every run. pod install now runs only on a cache miss or restore-keys partial restore; on an exact hit the restored Pods and workspace are reused directly. It runs with --deployment so CI fails fast if Podfile.lock drifts from Podfile and never mutates the lock. The committed project.pbxproj already carries the CocoaPods integration, so skipping install on a hit still yields a buildable workspace.
Adds Project.swift, the Tuist source deploy-sdk.sh copies into the published repo and feeds to `tuist generate`, so the shipped SampleApp.xcodeproj is ready to open and integrators only need `pod install`. OnfleetDriver stays a CocoaPods dependency rather than a Tuist one, which keeps the framework wiring out of the manifest. Reworks .gitignore to ignore DerivedData and the derived-data logs, document why the generated SampleApp.xcodeproj is committed, and label the existing CocoaPods and Xcode user-state entries.
Bumps the Podfile platform from iOS 13.0 to 16.0 to match the SampleApp deployment target declared in the Tuist manifest, and trims trailing whitespace and the missing final newline.
Commits the resolved CocoaPods lockfile so `pod install --deployment` in CI has a lock to validate against and dependency resolution is deterministic at OnfleetDriver 0.17.2. Generated with CocoaPods 1.16.2.
Introduces CONTRIBUTING.md and relocates the Continuous integration note there, since CI guidance fits a contributor doc better than the SDK README. The README's Sample app section no longer carries the trailing CI subsection.
Trims step 4 of the Sample App setup to "add your Onfleet application_id", dropping the placeholder-compiles wording ahead of reintroducing the #error app-id gate that requires a real id at build time.
There was a problem hiding this comment.
No issues found across 7 files
Confidence score: 5/5
- Automated review surfaced no issues in the provided summaries.
- No files require special attention.
Shadow auto-approve: would auto-approve. CI, project generation, dependency pinning, and documentation infrastructure changes only. No SDK or SampleApp source logic modifications.
Re-trigger cubic
Moves the build job to the latest GA macOS runner (macOS 26) for its newer Xcode toolchain. Both labels are Arm64, so the simulator build is unaffected.
There was a problem hiding this comment.
0 issues found across 1 file (changes from recent commits).
Shadow auto-approve: would auto-approve. CI caching, Tuist manifest, Podfile.lock and deployment target bump, plus docs restructuring; all infrastructure/tooling, no source logic changes.
Re-trigger cubic
The macos-26 default toolchain (Xcode 26.5) fails to resolve the prebuilt OnfleetDriver.xcframework under explicit module builds. Adds a root .xcode-version file and a CI step that selects the matching installed Xcode (26.4.x) before building, keeping the job on the macos-26 runner.
There was a problem hiding this comment.
0 issues found across 2 files (changes from recent commits).
Shadow auto-approve: would auto-approve. CI, tooling, and documentation updates for the Sample App release. No business logic or SDK source changes.
Re-trigger cubic
Xcode 26.x (both 26.5 and 26.4.1) cannot resolve the prebuilt OnfleetDriver.xcframework under explicitly-built modules, so macos-26 fails to build the SampleApp. Reverts the runner to macos-15 (Xcode 16), which builds green, and drops the .xcode-version pin and its select step since they only applied to macos-26.
There was a problem hiding this comment.
0 issues found across 2 files (changes from recent commits).
Shadow auto-approve: would auto-approve. CI, tooling, and documentation updates only; no SDK or sample app logic changes. Low risk.
Re-trigger cubic
Skipping pod install on an exact cache hit left the build without the OnfleetDriver module ("no such module 'OnfleetDriver'"): the cached Pods/ and workspace alone do not integrate the local path pod, so pod install must run every time. Makes the step unconditional and simplifies the cache to Pods/ plus the download cache keyed on Podfile.lock, which also busts the cross-runner cache the macos-26 detour populated (the key used runner.os, shared between macos-15 and macos-26).
There was a problem hiding this comment.
0 issues found across 1 file (changes from recent commits).
Shadow auto-approve: would auto-approve. CI workflow hardening, Tuist project generation for SampleApp, dependency pinning to Podfile.lock, and documentation reorganization.
Re-trigger cubic
Now that pod install runs on every build (no longer skipped on a cache hit), a fresh integration under the runner's Xcode 26.5 resolves OnfleetDriver and the SampleApp builds green on the latest GA runner. Verified on a scratch run before landing.
There was a problem hiding this comment.
0 issues found across 1 file (changes from recent commits).
Shadow auto-approve: would auto-approve. CI, tooling, and documentation updates only; no business logic, database, or SDK source changes.
Re-trigger cubic
Summary
Prepares the repository for the next SDK release: hardens the SampleApp CI build, introduces Tuist-based project generation, pins CocoaPods dependencies, and reorganizes contributor docs. Build/CI/tooling/docs infrastructure only — no SDK or SampleApp source changes.
Changes
.github/workflows/ci.yml)#error("insert your application_id here")app-id gate before building. It's a no-op against the current placeholder code and only takes effect once the next release reintroduces the directive.Pods/and the download cache) keyed onPodfile.lock.pod install --deploymenton every build to integrate the local OnfleetDriver pod and regenerate the workspace;--deploymentfails fast ifPodfile.lockdrifts fromPodfile.Project.swift) — Add a Tuist manifest that generatesSampleApp.xcodeprojfrom source. OnfleetDriver stays a CocoaPods dependency, which keeps framework wiring out of the manifest.Podfile,Podfile.lock) — Raise the SampleApp iOS deployment target 13.0 → 16.0, and commitPodfile.lockpinning OnfleetDriver 0.17.2 (CocoaPods 1.16.2) so--deploymenthas a lockfile to validate against.README.md,CONTRIBUTING.md) — Move the Continuous integration section into a newCONTRIBUTING.md; simplify the Sample Appapplication_idsetup step..gitignore— IgnoreDerivedData, document why the tuist-generatedSampleApp.xcodeprojis committed, and label the CocoaPods / Xcode user-state entries.Test plan
buildjob passes on this PR (builds SampleApp onmacos-26/ Xcode 26.5, simulator, no signing).sedstep is a no-op against current code and comments out an injected#error("…")line (idempotent on re-run).ci.ymlvalidated as well-formed YAML.