Skip to content

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

Open
JesusRojass wants to merge 17 commits into
firebase:mainfrom
JesusRojass:JesusRojass/#11903
Open

[Perf] Migrate unswizzle-based unit tests to SPM (#11903)#16276
JesusRojass wants to merge 17 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
@JesusRojass JesusRojass marked this pull request as ready for review June 25, 2026 22:27
@JesusRojass JesusRojass requested a review from a team as a code owner June 25, 2026 22:27
@JesusRojass JesusRojass changed the title WIP - [Perf] Migrate unswizzle-based unit tests to SPM (#11903) [Perf] Migrate unswizzle-based unit tests to SPM (#11903) Jun 25, 2026
@JesusRojass

Copy link
Copy Markdown
Member Author

Ready for review @paulb777

@ncooke3

ncooke3 commented Jun 25, 2026

Copy link
Copy Markdown
Member

/gemini review

@ncooke3 ncooke3 self-requested a review June 25, 2026 22:31

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Code Review

This pull request refactors unswizzling capabilities in Firebase Performance, moving from compile-time preprocessor flags to runtime selector checks, enabling unswizzle-based unit tests to run under Swift Package Manager. It also stabilizes network and view controller tests, and improves the SPM dependency update scripts to safely handle special characters via environment variables. Feedback suggests avoiding the deprecated [UIScreen mainScreen] in tests by using a constant frame, and adding error handling to the jq parsing in quickstart_build_spm.sh to prevent unexpected script failures.

Comment thread FirebasePerformance/Tests/Unit/Instruments/FPRUIViewControllerInstrumentTest.m Outdated
Comment thread scripts/quickstart_build_spm.sh Outdated
@cursor cursor Bot force-pushed the JesusRojass/#11903 branch from 6b31a19 to 539733b Compare July 2, 2026 15:00
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