8000 Comparing v12.8.0...main · firebase/firebase-cpp-sdk · GitHub
[go: up one dir, main page]

Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: firebase/firebase-cpp-sdk
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: v12.8.0
Choose a base ref
...
head repository: firebase/firebase-cpp-sdk
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: main
Choose a head ref
  • 19 commits
  • 19 files changed
  • 2 contributors

Commits on Jun 11, 2025

  1. Add Analytics Windows C header and script to generate stubs and funct…

    …ion pointers. (#1728)
    
    * Add Windows C header and script to generate stubs and function pointers.
    
    * Add header and DLL for library.
    
    * Update script and generated files.
    
    * Tweak script and generated files.
    
    * Update function name.
    
    * Add copyright notices.
    
    * Format code.
    
    * Add an Unload method.
    
    * Add script name that generated headers.
    
    * Update with clang-format off.
    
    * Add copyright notices.
    jonsimantov authored Jun 11, 2025
    Configuration menu
    Copy the full SHA
    e473214 View commit details
    Browse the repository at this point in the history

Commits on Jun 12, 2025

  1. Configuration menu
    Copy the full SHA
    e171c8a View commit details
    Browse the repository at this point in the history

Commits on Jun 18, 2025

  1. Add an experimental doc as a repository for AI agent knowledge (#1734)

    * Create Jules.md AI guide and incorporate feedback
    
    This commit introduces the Jules.md file, a comprehensive guide for AI agents
    contributing to the Firebase C++ SDK.
    
    The document covers:
    - Repository setup and build commands for various platforms.
    - Testing strategy, emphasizing integration tests.
    - Overview of the API surface, including initialization, Futures, core class patterns (using Auth and Database as examples), and listeners.
    - Best practices for coding style, error handling, resource management, and platform-specific code.
    - Common coding patterns observed in the repository like Pimpl, namespace usage, and platform abstraction.
    - A section on how to prompt AI agents effectively when working with this codebase, including suggested prompt text and key directives.
    - A reminder to keep Jules.md updated with new patterns.
    
    This addresses your initial request to create a context document for AI agents
    and incorporates your feedback to:
    - Generalize API examples previously focused on Firestore.
    - Add a new section with guidance for prompting AI agents.
    
    * Formatted Jules.md to 80-character line wrap
    
    This commit reformats the Jules.md AI guide to ensure all narrative
    text is wrapped to a maximum of 80 characters per line.
    
    This change improves readability, especially in environments or editors
    with limited horizontal space, and aligns with common markdown style
    preferences. Code blocks have been preserved with minimal changes
    to maintain their integrity.
    
    * Enrich Jules.md with info from online Firebase C++ docs
    
    This commit updates Jules.md, the AI agent guide, with additional
    context and details sourced from the official Firebase C++ online
    documentation.
    
    Key enhancements include:
    
    -   **Introduction**: Added a link to the Firebase library support by
        platform table and a note on the open-source structure of the C++ SDKs
        (desktop vs. mobile).
    -   **Setup Commands**:
        -   Clarified iOS setup to include linking .framework files alongside
            pods.
        -   Added a new "Desktop Platform Setup Details" subsection, covering:
            -   Conversion of iOS `GoogleService-Info.plist` to
                `google-services-desktop.json` using the provided Python
                script.
            -   Search order for desktop configuration files.
            -   Common system library dependencies for Windows, macOS, and
                Linux desktop builds.
    -   **API Surface**:
        -   Clarified that `firebase::auth::User` objects are typically
            obtained from `firebase::auth::AuthResult` after successful
            authentication operations.
    -   **Best Practices**:
        -   Added a "Platform-Specific Considerations" subsection detailing:
            -   The REST-based nature of the Realtime Database C++ SDK on
                desktop and the consequent need for server-side indexing for
                `OrderByChild()` queries.
            -   Awareness of iOS method swizzling used by some Firebase
                products.
    
    These additions provide more comprehensive guidance for you,
    particularly regarding platform-specific nuances and SDK architecture.
    The document maintains an 80-character line wrap.
    
    * I've updated the Jules.md file with information about Analytics initialization and Future management.
    
    This update incorporates further feedback from you into Jules.md:
    
    1.  **Clarified Analytics Initialization:**
        The "API Surface" -> "Initialization" section now specifies that
        Firebase Analytics uses a different initialization pattern
        (`firebase::analytics::Initialize(app)`) compared to the common
        `GetInstance(app, ...)` pattern of other services. It also notes
        that Analytics functions are typically called globally.
    
    2.  **Added Future Lifecycle Management Guidance:**
        A new point in "Best Practices" -> "Resource Management" emphasizes
        the importance of ensuring `Future` objects complete their course
        (e.g., via `OnCompletion` or by checking results) to prevent
        potential issues with operations not finalizing or resources not
        being cleaned up promptly.
    
    These changes provide more nuanced guidance for interacting with the Firebase C++ SDK.
    
    ---------
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 18, 2025
    Configuration menu
    Copy the full SHA
    5ea2a16 View commit details
    Browse the repository at this point in the history

Commits on Jun 24, 2025

  1. Create standalone version of Get PR Comments script for use in other …

    …repos, with added features. (#1742)
    
    * Feat: Create standalone get_pr_review_comments script
    
    - Creates a new script `get_pr_review_comments_standalone.py`.
    - Inlines necessary functions from `firebase_github.py` to make it standalone.
    - Adds functionality to auto-determine GitHub owner/repo from git remote origin.
    - Allows specifying repository via `--url` or `--owner`/`--repo` arguments.
    - Prioritizes URL > owner/repo args > git remote detection.
    - Improves argument parsing and error handling for repository specification.
    
    * Fix: Remove deprecated nested argument group
    
    - Removes the deprecated nested `add_argument_group` for owner/repo.
    - `--owner` and `--repo` are now top-level arguments.
    - Implements manual validation logic after parsing to ensure correct argument pairing and exclusivity with `--url`.
    - This addresses the DeprecationWarning while maintaining the intended argument behavior.
    
    * Feat: Auto-detect PR number from current git branch
    
    - Makes the --pull_number argument optional.
    - If --pull_number is not provided, the script now attempts to:
      1. Determine the current git branch.
      2. Fetch open pull requests for this branch using the GitHub API.
      3. Select the most recently created open PR.
    - If a PR cannot be determined either way, an error is shown.
    - Incorporates the `list_pull_requests` function from the original
      `firebase_github.py` to support this feature.
    - Adds error handling for git operations and API calls related to PR detection.
    
    * Fix: Resolve conflicting --pull_number argument definition
    
    Removes the duplicate argparse definition for `--pull_number`,
    resolving the `argparse.ArgumentError`. The `--pull_number` argument
    is now correctly defined once as an optional argument, with the
    script falling back to auto-detection if it's not provided.
    
    * Refactor: Refine error reporting for auto-detection failures
    
    - Removes `parser.print_help()` calls for specific auto-detection failures:
      - When the repository owner/name cannot be determined automatically and is not specified by the user.
      - When the current git branch cannot be determined (and --pull_number is not provided).
    - The script will still print a targeted error message and exit with an error code in these scenarios.
    - Other error conditions (e.g., invalid explicit arguments, or no PR found for a valid detected branch) will continue to print full usage information.
    
    * Refactor: Standardize error reporting for argument failures
    
    - Removes `parser.print_help()` calls from all error exit paths related to missing or invalid script arguments.
    - Appends a consistent ' (use --help for more details)' note to these error messages.
    - This provides more concise error output while still guiding the user to help if needed.
    - Affects errors for token, URL, owner/repo specification, and PR number determination.
    
    * Style: Remove extraneous comments
    
    Performs a thorough pass on `get_pr_review_comments_standalone.py`
    to remove comments that are redundant, obvious restatements of code,
    obsolete placeholders, or no longer accurate due to prior changes.
    
    Retains comments that clarify complex or non-obvious logic,
    provide essential context, or document important decisions (such as
    compatibility shims or API-specific formatting).
    
    This change aims to improve code clarity and maintainability by
    reducing comment clutter.
    
    * Refactor: Set default logging verbosity to WARNING
    
    Changes the default `absl.logging` verbosity level from INFO to WARNING.
    This reduces the amount of log output during normal operation, as INFO-level
    messages detailing each API call page fetch will no longer be displayed
    by default. WARNING and ERROR level logs will still be shown.
    
    Users needing to debug API calls can temporarily change the verbosity
    level back to INFO in the script.
    
    * Feat: Include top-level PR review summaries in output
    
    - Adds functionality to fetch overall pull request reviews (e.g., approval/changes requested summaries).
    - Introduces `get_pull_request_reviews()` to call the relevant GitHub API endpoint.
    - In `main()`:
      - Fetches these overall reviews.
      - Filters them to exclude 'DISMISSED' states.
      - Applies the `--since` argument to filter reviews based on their `submitted_at` timestamp (client-side filtering).
      - Sorts the filtered reviews chronologically (oldest first).
      - Prints these overall review summaries under a new "# Overall Review Summaries" header before printing line-specific comments.
      - Output includes reviewer, submission time, state, review body (if any), and a link to the review.
    - Handles errors during the fetching of overall reviews separately.
    - Ensures that the `--since` argument continues to apply independently to line-specific comments based on their `updated_at` timestamp.
    
    * Refine: Exclude empty 'COMMENTED' overall reviews from output
    
    Further refines the display of top-level pull request review summaries.
    Overall reviews that have a state of "COMMENTED" and an empty (or whitespace-only) body are now filtered out and not displayed.
    
    This helps to reduce noise from review submissions that don't contain
    a summary message, while still showing approvals, changes requested, or
    commented reviews that do have content.
    
    * Feat: Enhance 'next command' suggestion with overall review timestamps
    
    Improves the accuracy and applicability of the suggested next command
    for fetching subsequent comments.
    
    - The script now tracks the latest `submitted_at` timestamp from
      overall PR reviews, in addition to the latest `updated_at` timestamp
      from line-specific comments.
    - The `--since` value in the suggested next command is now based on the
      globally latest timestamp found across both overall reviews and line
      comments.
    - This ensures that a 'next command' suggestion can be provided even if
      only overall reviews (or only line comments) were found, and that the
      timestamp used is the most recent activity of either type.
    
    * Feat: Create print_github_reviews.py script and add features
    
    This commit culminates a series of enhancements to create a standalone script
    for printing GitHub pull request review information.
    
    Key changes from the original `get_pr_review_comments.py` and subsequent iterations include:
    
    - Renamed script to `scripts/print_github_reviews.py` (from `scripts/gha/get_pr_review_comments_standalone.py`).
    - Made script standalone by inlining necessary GitHub API interaction functions.
    - Auto-detection of repository owner/name from git remote.
    - Auto-detection of PR number from the current git branch if not specified.
    - Added support for fetching and displaying top-level PR review summaries (e.g., Approve, Comment, Changes Requested) in addition to line comments.
      - Top-level reviews are filtered for 'DISMISSED' state and by `--since` timestamp.
      - Empty-bodied 'COMMENTED' top-level reviews are also filtered out.
    - Enhanced the 'next command' suggestion to use the latest timestamp from either overall reviews or line comments.
    - Numerous bug fixes and refinements to argument parsing, error handling, and output formatting:
      - Resolved `UnboundLocalError` for timestamp tracking.
      - Addressed `argparse` conflict for `--pull_number`.
      - Removed deprecated nested argument groups.
      - Standardized error messages to be more concise and suggest `--help`.
      - Conditional printing of section headers.
      - Default logging verbosity set to WARNING.
      - Removed extraneous comments.
    
    * Fix: Resolve UnboundLocalError and remove absl-py dependency
    
    - Fixes an `UnboundLocalError` for `latest_overall_review_activity_dt`
      by ensuring it and related timestamp-tracking variables are initialized
      at the beginning of the `main()` function scope before potential use.
    - Removes the `absl-py` dependency from the script:
      - Deletes the `absl` import and `logging.set_verbosity()` call.
      - All `logging.info()` calls (previously used for API call details)
        have been removed to reduce verbosity.
      - `logging.error()` calls have been replaced with direct writes to
        `sys.stderr`, prefixed with "Error:".
    
    This simplifies dependencies and resolves the runtime error, while ensuring
    important error messages are still reported.
    
    * Fix: Definitively resolve UnboundLocalError for timestamp tracking
    
    - Addresses a persistent `UnboundLocalError` related to `latest_overall_review_activity_dt`.
    - While the variable was initialized at the top of `main()`, to ensure robust scoping within the loop that processes overall reviews, a temporary variable (`temp_latest_overall_review_dt`) is now used for accumulating the latest timestamp within that specific loop.
    - The main `latest_overall_review_activity_dt` is then updated from this temporary variable if any overall review timestamps were processed.
    - This change ensures the variable is always defined before use in the conditional check that was causing the error.
    
    (This commit also includes prior changes for removing the absl-py dependency and refactoring logging, which were part of the same active development session.)
    
    * Fix: Ensure 'next command' suggestion considers overall reviews timestamps
    
    - Corrects the logic for generating the 'next command' suggestion to ensure
      it appears even if only overall PR reviews (and no line comments) are present.
    - The script now reliably uses the latest timestamp from either overall review
      `submitted_at` or line comment `updated_at` fields.
    - Removed a premature `return` that bypassed the suggestion logic when line
      comments were empty but overall reviews might have had timestamps.
    
    This also includes a pass for final extraneous comment removal.
    
    * Fix: Resolve UnboundLocalError for processed_comments_count
    
    - Ensures `processed_comments_count` is initialized to 0 at the
      beginning of the `main()` function scope, alongside other tracking
      variables like `latest_overall_review_activity_dt` and
      `latest_line_comment_activity_dt`.
    - This prevents an `UnboundLocalError` when the script attempts to print
      the number of processed line comments in scenarios where the line
      comment processing loop is skipped (e.g., if no line comments are fetched).
    
    This commit finalizes fixes for variable initialization and scoping issues.
    
    * Style: Final comment cleanup and text refinements
    
    - Removes the unused `TIMEOUT_LONG` constant.
    - Adds a blank line after imports for PEP 8 compliance.
    - Changes the output heading for overall review bodies from
      "### Summary Comment:" to "### Comment:".
    - Performs a final pass to remove extraneous, obsolete, or
      iteration-related comments throughout the script, while retaining
      comments that explain non-obvious logic or important context.
    
    ---------
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 24, 2025
    Configuration menu
    Copy the full SHA
    9d37ec0 View commit details
    Browse the repository at this point in the history
  2. Configuration menu
    Copy the full SHA
    21d0e9e View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    5d44914 View commit details
    Browse the repository at this point in the history

Commits on Jun 25, 2025

  1. Refactor ForEachAppDelegateClass for iOS into a new function that swi…

    …zzles [UIApplication setDelegate:] to obtain App Delegate classes. (#1737)
    
    * Refactor ForEachAppDelegateClass for iOS to use swizzling
    
    This commit refactors the `ForEachAppDelegateClass` function in
    `app/src/util_ios.mm`. Instead of scanning all runtime classes to find
    UIApplicationDelegate implementers, it now relies on method swizzling.
    
    The `[UIApplication setDelegate:]` method is swizzled at startup.
    When `setDelegate:` is called, the class of the actual application
    delegate is captured and stored globally (static to the .mm file).
    
    `ForEachAppDelegateClass` now uses this stored class. If it's called
    before `setDelegate:` has been invoked, the block passed to
    `ForEachAppDelegateClass` is queued. This queued block is then executed
    once the delegate is set via the swizzled `setDelegate:` method.
    
    This approach is more efficient and directly targets the actual
    App Delegate class used by the application.
    
    Key changes:
    - Added `Firebase_setDelegate` C function as the swizzled implementation.
    - Introduced `UIApplication(FirebaseAppDelegateSwizzling)` category with a
      `+load` method to perform the swizzling.
    - Uses `method_setImplementation` for swizzling and stores the original IMP.
    - Global static variables `g_app_delegate_class`,
      `g_original_setDelegate_imp`, and `g_pending_app_delegate_block`
      manage the state within `util_ios.mm`.
    - Modified `ForEachAppDelegateClass` to use the new mechanism and queue
      blocks if the delegate is not yet known.
    
    * I've tidied up `util_ios.mm` for you.
    
    I replaced some logging calls with NSLog for better stability during early app startup.
    
    I also removed some unnecessary comments and unused include statements to keep things clean.
    
    * feat: Support multiple pending ForEachAppDelegateClass blocks
    
    Modified `util_ios.mm` to support queueing multiple blocks (up to 8,
    defined by `MAX_PENDING_APP_DELEGATE_BLOCKS`) if `ForEachAppDelegateClass`
    is called before `[UIApplication setDelegate:]` is invoked.
    
    Changes include:
    - Replaced single pending block storage with a C array of block pointers
      and a counter (`g_pending_app_delegate_blocks` and `g_pending_block_count`).
    - `ForEachAppDelegateClass` now adds blocks to this array if the app
      delegate is not yet known. If the array is full, an error is logged
      and the block is discarded.
    - `Firebase_setDelegate` (the swizzled method) now iterates through all
      pending blocks in the array. If a valid delegate is being set, it
      executes each pending block. If the delegate is being set to nil,
      it clears all pending blocks. The array count is reset in both cases.
    - Added `#define MAX_PENDING_APP_DELEGATE_BLOCKS 8` for configurability.
    
    * fixup: Cleanup comments and update RunOnAppDelegate call in messaging
    
    - I removed extraneous developmental comments from app/src/util_ios.mm
      for better code clarity.
    - I updated a call site of firebase::util::RunOnAppDelegate (formerly
      ForEachAppDelegateClass) in messaging/src/ios/messaging.mm to use
      the new function name.
    
    * I've addressed your review comments.
    
    - I updated the documentation for RunOnAppDelegateClasses (formerly RunOnAppDelegate) in app/src/util_ios.h to accurately reflect its new behavior.
    - I renamed RunOnAppDelegate to RunOnAppDelegateClasses in all relevant locations (declaration, definition, internal logs, and call sites in invites and messaging modules) for clarity.
    - I removed the specified extraneous code comments from app/src/util_ios.mm and app/src/invites/ios/invites_ios_startup.mm.
    
    * fix: Make ClassMethodImplementationCache robust against re-swizzling
    
    I modified `ClassMethodImplementationCache::ReplaceOrAddMethod` in
    app/src/util_ios.mm to prevent re-swizzling a method if it's already
    swizzled with the target implementation. This is done by checking if the
    current method IMP is identical to the incoming IMP; if so, the function
    returns early. This resolves a recursive call issue observed when App
    Delegate hooks were applied multiple times to the same effective class
    via different GUL-proxied delegate instances.
    
    I also included a final cleanup of specified iterative code comments.
    
    * fix: Check superclasses before processing new delegates
    
    Modified `Firebase_setDelegate` in `app/src/util_ios.mm` to prevent
    redundant processing for delegate classes that are subclasses of already
    seen delegates.
    
    - When `setDelegate:` is called with a `newClass`:
      - It now first iterates through the superclasses of `newClass`. If any
        superclass is found in the `g_seen_delegate_classes` list, `newClass`
        is considered handled, and no further processing (adding to seen list
        or running pending blocks for it) occurs.
      - If no superclass is seen, it checks if `newClass` itself is already
        seen. If so, it's skipped.
      - If `newClass` is genuinely new (neither itself nor any superclass
        already seen), it's added to `g_seen_delegate_classes`, and all
        blocks from `g_pending_app_delegate_blocks` are executed for it.
    - This addresses potential issues with third-party libraries (like GUL)
      that might set their own delegate subclasses, ensuring our hooks
      and blocks run appropriately.
    - Includes cleanup of minor iterative comments.
    
    * fix: Restore source code changes and integrate learnings
    
    This commit addresses several items after an accidental reset:
    
    1.  **Restores Source Code Logic:**
        *   Re-implements the correct logic for `RunOnAppDelegateClasses` (formerly
          ForEachAppDelegateClass) and the swizzled `Firebase_setDelegate` in
          `app/src/util_ios.mm`.
        *   `Firebase_setDelegate` now correctly tracks multiple unique delegate
          classes seen, includes a superclass check to prevent redundant
          processing for subclasses of already-seen delegates, and executes
          persistent pending blocks for genuinely new delegate classes.
        *   `RunOnAppDelegateClasses` executes blocks for all currently known unique
          delegates and queues the block for future new delegate classes.
        *   Ensures `ClassMethodImplementationCache` is in its state prior to the
          reverted idempotency fix attempt.
        *   All associated constants, global variables, function declarations
          (in `util_ios.h`), and call sites (in `invites` and `messaging` modules)
          are correctly restored/updated.
        *   Logging uses `NSLog` and iterative comments have been cleaned.
    
    2.  **Integrates Learnings into `Jules.md`:**
        *   Reverts the previous commit that added a task-specific learnings section.
        *   Integrates key insights from this refactoring task directly into the
          most appropriate existing sections of `Jules.md`, covering robust
          swizzling, callback lifecycle, naming, logging safety, and agent
          interaction patterns.
    
    This commit aims to bring the branch to the desired functional state with updated documentation.
    
    * fix: Add idempotency to swizzling cache and update Jules.md
    
    - Re-implemented the idempotency check in
      ClassMethodImplementationCache::ReplaceOrAddMethod in app/src/util_ios.mm.
      This prevents re-swizzling if a method already has the target IMP,
      addressing potential recursion issues.
    
    - Updated Jules.md:
      - Integrated learnings from the recent iOS App Delegate refactoring task
        into relevant existing sections (covering robust swizzling, callback
        lifecycles, naming, logging safety, and agent interaction).
      - Added a document convention note to maintain 80-character line wrapping.
      - Word-wrapped the entire document to 80 characters for readability.
    
    This commit consolidates the fix for the swizzling cache and the comprehensive
    updates and formatting for Jules.md.
    
    * fix: Restore swizzling category and consolidate all recent changes
    
    This commit addresses several critical fixes and consolidates all recent
    updates for the iOS App Delegate handling mechanism:
    
    1.  **Restored Swizzling Mechanism:**
        - Re-added the `UIApplication(FirebaseAppDelegateSwizzling)` category
          and its `+load` method to `app/src/util_ios.mm`. This was
          inadvertently lost during a previous operation and is
          essential for swizzling `[UIApplication setDelegate:]` with
          `Firebase_setDelegate`.
    
    2.  **Core Logic (already in working tree, confirmed):**
        - `Firebase_setDelegate` correctly tracks multiple unique delegate
          classes, includes a superclass check, and executes persistent
          pending blocks for genuinely new delegate classes.
        - `RunOnAppDelegateClasses` executes blocks for all currently known
          delegates and queues blocks for future new delegates.
        - `ClassMethodImplementationCache::ReplaceOrAddMethod` includes an
          idempotency check to prevent re-swizzling if a method already
          has the target IMP.
    
    3.  **Documentation (`Jules.md`):**
        - Learnings from this refactoring are integrated into relevant
          existing sections.
        - The document is formatted with 80-character line wrapping, and a
          note regarding this convention is included.
    
    This commit aims to bring the `refactor-forEachAppDelegateClass-ios` branch
    to its fully intended functional state, including all logic fixes,
    restorations, and documentation updates.
    
    * iOS: Allow specifying your AppDelegate class's name in the Info.plist file. (#1741)
    
    * Feature: Allow specifying AppDelegate via Info.plist for RunOnAppDelegateClasses
    
    Currently, `firebase::util::RunOnAppDelegateClasses` on iOS automatically
    swizzles `[UIApplication setDelegate:]` to capture and act on any class
    set as the application delegate.
    
    This change introduces an optional feature where developers can specify their
    app's main AppDelegate class name directly in the `Info.plist` file using
    the key `FirebaseAppDelegateClassName`.
    
    If this key is present and provides a valid class name:
    - `RunOnAppDelegateClasses` will only execute blocks for this specified class.
    - `[
    10000
    UIApplication setDelegate:]` will NOT be swizzled by Firebase.
    
    If the key is not present, is invalid, or the specified class is not found,
    Firebase will fall back to the original behavior of swizzling
    `[UIApplication setDelegate:]`.
    
    This provides developers more control over Firebase's interaction with the
    AppDelegate, especially in scenarios where swizzling might be undesirable or
    needs to be more targeted.
    
    Detailed logging has been added to trace the behavior in both modes.
    A manual testing plan has been outlined to cover various scenarios.
    
    * Feature: Allow specifying AppDelegate via Info.plist for RunOnAppDelegateClasses (Refined)
    
    Currently, `firebase::util::RunOnAppDelegateClasses` on iOS automatically
    swizzles `[UIApplication setDelegate:]` to capture and act on any class
    set as the application delegate.
    
    This change introduces an optional feature where developers can specify their
    app's main AppDelegate class name directly in the `Info.plist` file using
    the key `FirebaseAppDelegateClassName`.
    
    If this key is present and provides a valid class name:
    - `RunOnAppDelegateClasses` will only execute blocks for this specified class.
      - Pending blocks are processed once for this target.
      - New blocks execute immediately on this target and are not queued for others.
    - `[UIApplication setDelegate:]` will NOT be swizzled by Firebase.
    
    If the key is not present, is invalid, or the specified class is not found,
    Firebase will fall back to the original behavior of swizzling
    `[UIApplication setDelegate:]`.
    
    This provides developers more control over Firebase's interaction with the
    AppDelegate. The implementation of `RunOnAppDelegateClasses` has been refined
    to support this new mode more simply while ensuring correct block execution
    and pending queue management.
    
    Detailed logging has been added. A manual testing plan is provided.
    
    * Refactor: Improve comments and logging for AppDelegate Info.plist feature
    
    This commit cleans up comments and refines logging messages within the
    `+load` method in `FirebaseAppDelegateSwizzling` category for clarity
    and accuracy related to the recently added feature for specifying the
    AppDelegate via Info.plist.
    
    - Clarified comments explaining the Info.plist handling path, including
      the setup of the specified delegate and the execution of pending blocks.
    - Ensured comments accurately reflect that pending blocks are not cleared
      from the queue after execution in `+load` when in Info.plist mode.
    - Minor wording improvements to log messages for better diagnostics.
    - Removed redundant or outdated comments from previous iterations.
    
    No functional code changes are included in this commit.
    
    * Docs: Simplify AppDelegate Info.plist option in README
    
    Further refines the documentation for the `FirebaseAppDelegateClassName`
    Info.plist key feature on iOS.
    
    - The explanation in `release_build_files/readme.md` under "Specifying Your
      AppDelegate Class Directly (iOS)" has been made more concise and
      user-focused, removing internal implementation details.
    - The corresponding release note for version 12.9.0 has also been
      simplified to match this approach.
    
    This change aims to make the documentation easier for developers to
    understand by focusing on the action and benefit rather than Firebase
    internal mechanisms.
    
    * Docs: Use generic 'Upcoming Release' title in README
    
    Changes the heading for the newest release notes entry from
    '### 12.9.0 (Upcoming)' to '### Upcoming Release' as the specific
    version number is not yet known.
    
    * Update logging to not be verbose unless debug logs are on.
    
    Also clean up NSLog messages elsewhere.
    
    * Update log message.
    
    * Fix build error.
    
    * Format code.
    
    ---------
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    
    * Fix build error.
    
    * Finish renaming Jules.md to AGENTS.md.
    
    ---------
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 25, 2025
    Configuration menu
    Copy the full SHA
    d299673 View commit details
    Browse the repository at this point in the history

Commits on Jun 26, 2025

  1. Add public version of Firebase C++ style guide (#1740)

    * Add new GCS service account key file.
    
    * Update C++ style guide to allow C++11 features and remove internal links
    
    * Update async operation pattern to *LastResult in style guide
    
    * Reformat STYLE_GUIDE.md to wrap at 80 characters
    
    * Reformat Jules.md to wrap at 80 characters
    
    * Revert formatting changes.
    
    * Fix filename.
    
    * Revert again.
    
    * Remove extra lines at the end.
    
    ---------
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 26, 2025
    Configuration menu
    Copy the full SHA
    e48c5ce View commit details
    Browse the repository at this point in the history
  2. Update AGENTS.md (#1748)

    * Add new GCS service account key file.
    
    * Add more information on building.
    
    * Added changes.
    jonsimantov authored Jun 26, 2025
    Configuration menu
    Copy the full SHA
    770a9af View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    2013bfd View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    f4ea8f6 View commit details
    Browse the repository at this point in the history
  5. Configuration menu
    Copy the full SHA
    d974a28 View commit details
    Browse the repository at this point in the history
  6. Configuration menu
    Copy the full SHA
    fd5ba18 View commit details
    Browse the repository at this point in the history
  7. Added note about enums.

    jonsimantov committed Jun 26, 2025
    Configuration menu
    Copy the full SHA
    a5b772d View commit details
    Browse the repository at this point in the history
  8. More on futures.

    jonsimantov committed Jun 26, 2025
    Configuration menu
    Copy the full SHA
    df805b2 View commit details
    Browse the repository at this point in the history

Commits on Jun 27, 2025

  1. Update print_github_reviews.py to read token from ~/.github_token (#1752

    )
    
    If GITHUB_TOKEN environment variable is not set and --token argument is not provided, the script will now attempt to read the GitHub token from the `~/.github_token` file.
    
    The order of precedence for token retrieval is:
    1. --token command-line argument
    2. GITHUB_TOKEN environment variable
    3. ~/.github_token file
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 27, 2025
    Configuration menu
    Copy the full SHA
    2240e3c View commit details
    Browse the repository at this point in the history
  2. Add --branch argument to print_github_reviews.py (#1755)

    This change allows the script to find a pull request based on a specified branch name, in addition to the existing methods of using a pull request number or the current git branch.
    
    The --branch argument is mutually exclusive with --pull_number.
    If neither --pull_number nor --branch is provided, the script defaults to finding the latest PR for the current git branch.
    
    Co-authored-by: google-labs-jules[bot] <161369871+google-labs-jules[bot]@users.noreply.github.com>
    jonsimantov and google-labs-jules[bot] authored Jun 27, 2025
    Configuration menu
    Copy the full SHA
    e9ab71d View commit details
    Browse the repository at this point in the history
  3. Configuration menu
    Copy the full SHA
    4014f57 View commit details
    Browse the repository at this point in the history
  4. Configuration menu
    Copy the full SHA
    648848c View commit details
    Browse the repository at this point in the history
Loading
0