Skip to content

Pre-release SDK infrastructure: CI, Tuist generation, and docs - #3

Merged
milanhorvatovic merged 12 commits into
masterfrom
chore/pre-release-sdk-infrastructure
Jun 16, 2026
Merged

milanhorvatovic merged 12 commits into
masterfrom
chore/pre-release-sdk-infrastructure

Conversation

@milanhorvatovic

@milanhorvatovic milanhorvatovic commented Jun 16, 2026 •

Copy link
Copy Markdown
Contributor

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

  • CI (.github/workflows/ci.yml)
    • Add a step that comments out the SampleApp #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.
    • Cache CocoaPods (Pods/ and the download cache) keyed on Podfile.lock.
    • Run pod install --deployment on every build to integrate the local OnfleetDriver pod and regenerate the workspace; --deployment fails fast if Podfile.lock drifts from Podfile.
  • Project generation (Project.swift) — Add a Tuist manifest that generates SampleApp.xcodeproj from source. OnfleetDriver stays a CocoaPods dependency, which keeps framework wiring out of the manifest.
  • Dependencies (Podfile, Podfile.lock) — Raise the SampleApp iOS deployment target 13.0 → 16.0, and commit Podfile.lock pinning OnfleetDriver 0.17.2 (CocoaPods 1.16.2) so --deployment has a lockfile to validate against.
  • Docs (README.md, CONTRIBUTING.md) — Move the Continuous integration section into a new CONTRIBUTING.md; simplify the Sample App application_id setup step.
  • .gitignore — Ignore DerivedData, document why the tuist-generated SampleApp.xcodeproj is committed, and label the CocoaPods / Xcode user-state entries.

Test plan

  • CI build job passes on this PR (builds SampleApp on macos-26 / Xcode 26.5, simulator, no signing).
  • Verified locally that the CI sed step is a no-op against current code and comments out an injected #error("…") line (idempotent on re-run).
  • ci.yml validated as well-formed YAML.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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).

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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.

@cubic-dev-ai cubic-dev-ai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

@milanhorvatovic
milanhorvatovic merged commit 2aefded into master Jun 16, 2026
2 checks passed
@milanhorvatovic
milanhorvatovic deleted the chore/pre-release-sdk-infrastructure branch June 16, 2026 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants