Skip to content

WIP - [Perf] Migrate unswizzle-based unit tests to SPM (#11903)#16276

Draft
JesusRojass wants to merge 7 commits into
firebase:mainfrom
JesusRojass:JesusRojass/#11903
Draft

WIP - [Perf] Migrate unswizzle-based unit tests to SPM (#11903)#16276
JesusRojass wants to merge 7 commits into
firebase:mainfrom
JesusRojass:JesusRojass/#11903

Conversation

@JesusRojass

@JesusRojass JesusRojass commented Jun 12, 2026

Copy link
Copy Markdown
Member

Addresses #11903

This migrates the unswizzle-based FirebasePerformance unit tests to run under Swift Package Manager. These suites currently run only through the CocoaPods pod gen based CI job, so their coverage disappears once CocoaPods tooling is retired.

Discussion

The seven gated suites (selector/class instrumentor, instrument, instrumentation, NSURLSession, NSURLConnection, and UIViewController instrumentation tests) were excluded from SPM with #if !SWIFT_PACKAGE when SPM support landed in #8412. The underlying reason is that unswizzling in FPRSelectorInstrumentor was compiled only when UNSWIZZLE_AVAILABLE was defined, which only the CocoaPods path wired up via the FPR_UNSWIZZLE_AVAILABLE env var and a test dependency on GoogleUtilities/SwizzlerTestHelpers.

Changes:

  • FPRSelectorInstrumentor now detects the GULSwizzler unswizzle category at runtime instead of using the compile-time flag. Behavior for production apps is unchanged: the category is absent, so unswizzle still hits the same assertion as before.
  • The PerformanceUnit SPM test target links GULSwizzlerTestHelpers (and GULMethodSwizzler), making the category available to tests.
  • All #if !SWIFT_PACKAGE test gates are removed, plus the #ifdef UNSWIZZLE_AVAILABLE gates in FPRCounterListTest.
  • FPRUIViewControllerInstrumentTest no longer depends on a host app key window; the shared application and key window are stubbed so the test is deterministic both hosted (CocoaPods) and unhosted (SPM).
  • Removes the now-unused FPR_UNSWIZZLE_AVAILABLE wiring from the podspec, scripts/build.sh, and generate_project.sh.

Testing

  • SPM: PerformanceUnit scheme on iOS and tvOS simulators
  • CocoaPods: scripts/build.sh Performance-iOS-unit (no longer needs the env var)
  • Watch items: ObjC category linking from the static helpers library under SPM, and the NSURLSession suite running unhosted (hermetic server plus run loops)

API Changes

  • No API changes

@gemini-code-assist

Copy link
Copy Markdown
Contributor
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize the Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counterproductive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

@JesusRojass JesusRojass self-assigned this Jun 12, 2026
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.

1 participant