Skip to content
This repository was archived by the owner on Apr 26, 2026. It is now read-only.

feat(ios): add tvOS, macOS, and watchOS platform support#3145

Merged
hyochan merged 4 commits into
mainfrom
feat/tvos-macos-platform-support
Feb 10, 2026
Merged

feat(ios): add tvOS, macOS, and watchOS platform support#3145
hyochan merged 4 commits into
mainfrom
feat/tvos-macos-platform-support

Conversation

@hyochan

@hyochan hyochan commented Feb 10, 2026

Copy link
Copy Markdown
Owner

Summary

  • Add tvOS 15.0 and macOS 14.0 platform support to podspec
  • Add platform detection helpers for Apple platforms
  • Fix Nitro initialization timing for non-iOS platforms

Closes #3141 #3143

Changes

Podspec (NitroIap.podspec)

  • Add :tvos => '15.0' and :macos => '14.0' platforms alongside existing iOS 15 and visionOS

iOS Native (ios/HybridRnIap.swift)

  • Update @available annotation to include all Apple platforms: iOS 15.0, macOS 14.0, tvOS 15.0, watchOS 8.0

TypeScript (src/index.ts)

  • Add isTVOS() - Detects tvOS (Platform.OS='ios' with isTV=true)
  • Add isMacOS() - Detects macOS and Mac Catalyst
  • Add isStandardIOS() - Detects iPhone/iPad (not tvOS or Mac Catalyst)
  • Add isNitroReady() - Check if Nitro runtime is initialized
  • Skip promotedProductListenerIOS on tvOS/macOS (promoted products not supported)

Hooks (src/hooks/useIAP.ts)

  • Register listeners AFTER initConnection succeeds instead of before
  • This ensures Nitro runtime is fully initialized (fixes tvOS where Nitro may initialize later)
  • Skip promoted product listener on tvOS/macOS platforms

Tests (src/tests/)

  • Add comprehensive platform detection tests in platform-detection.test.ts
  • Add basic platform detection export tests in index.test.ts

Test plan

  • yarn typecheck passes
  • yarn lint passes
  • yarn test passes (236 tests)

🤖 Generated with Claude Code

Summary by CodeRabbit

  • New Features

    • Added platform-detection APIs (isTVOS, isMacOS, isStandardIOS), a Nitro readiness check (isNitroReady), and expanded Apple platform support (tvos, macos, watchos) including updated availability.
  • Bug Fixes

    • Deferred listener registration until after initialization, added mount guards and improved cleanup to prevent listener leaks; platform-specific listener gating.
  • Documentation

    • Added commit workflow and PR review guides.
  • Tests

    • Added comprehensive platform-detection and Nitro readiness tests.
  • Chores

    • Narrowed .claude ignore to local settings only.

- Add tvOS 15.0, macOS 14.0 to podspec platforms alongside iOS 15 and visionOS
- Update Swift @available annotation to include all Apple platforms
- Add platform detection helpers: isTVOS(), isMacOS(), isStandardIOS(), isNitroReady()
- Skip promoted product listener on tvOS/macOS (not supported)
- Register listeners AFTER initConnection to ensure Nitro runtime is ready
- Add comprehensive platform detection tests

This enables react-native-iap to work on Apple TV and Mac apps in addition
to iPhone, iPad, and Vision Pro.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Feb 10, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

Adds platform-detection APIs and Nitro readiness checks, delays listener registration until initConnection succeeds, extends native platform availability and podspec targets, adds tests for platform detection and Nitro readiness, and adds internal docs for commit and PR-review workflows.

Changes

Cohort / File(s) Summary
Docs & config
.claude/commands/commit.md, .claude/commands/review-pr.md, .gitignore
Adds commit and PR-review guidance docs; narrows .gitignore to only ignore .claude/settings.local.json.
CocoaPods & native availability
NitroIap.podspec, ios/HybridRnIap.swift
Expands supported platforms in Podspec (tvos, macos, watchos) and updates Swift @available annotation to match.
Runtime & platform helpers
src/index.ts
Adds public helpers isNitroReady, isTVOS, isMacOS, isStandardIOS; makes promotedProduct listener inert/short-circuited on non-standard iOS.
Hook initialization & listeners
src/hooks/useIAP.ts
Defers listener registration until after successful initConnection(); adds isMounted guard, platform-specific listener registration, robust cleanup on error/unmount, and Android-specific listener gating.
Tests
src/__tests__/index.test.ts, src/__tests__/platform-detection.test.ts
Adds platform-detection and Nitro readiness tests; adjusts an existing test to clear platform flags when simulating iOS.

Sequence Diagram

sequenceDiagram
    participant App as Application
    participant Hook as useIAP / initConnection()
    participant Nitro as Nitro Module (HybridObject)
    participant Platform as Platform helpers
    participant Listeners as Event listeners

    App->>Hook: call initConnection()
    Hook->>Nitro: lazy-initialize HybridObject / check isNitroReady()
    alt Nitro Ready
        Nitro-->>Hook: ready
        Hook->>Platform: evaluate isTVOS/isMacOS/isStandardIOS
        alt Standard iOS
            Platform-->>Hook: standard iOS
            Hook->>Listeners: register promotedProductListenerIOS
            Listeners->>Nitro: addPromotedProductListenerIOS
        else tvOS/macOS/other
            Platform-->>Hook: non-standard iOS
            Hook-->>Listeners: skip promotedProductListener
        end
        Hook->>Listeners: register purchaseUpdate & purchaseError (+ Android-specific if applicable)
        Listeners-->>Hook: listeners registered
        Hook-->>App: connected
    else Nitro Not Ready
        Nitro-->>Hook: not ready
        Hook-->>App: warn and exit without listeners
    end
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

  • #3003: Overlapping lazy Nitro/HybridObject initialization and runtime readiness guards in src/index.ts.
  • #3061: Related native changes to ios/HybridRnIap.swift and platform surface.
  • #3100: Touches the same native IAP bridge and Podspec targets.

Suggested labels

🎯 feature, 🛠 bugfix

Poem

🐇 I hopped through pods and platform trees,
I waited for Nitro before setting listeners, please,
tvOS, macOS, watch now get a nod,
Tests whisper "ready" where once we trod,
A happy rabbit cheers this tidy change ✨

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: adding tvOS, macOS, and watchOS platform support to the iOS IAP library.
Linked Issues check ✅ Passed The PR comprehensively addresses issue #3141 by detecting Apple platforms, deferring listener registration until initConnection succeeds, and skipping unsupported features on tvOS/macOS.
Out of Scope Changes check ✅ Passed All changes are scoped to enabling tvOS/macOS support: platform configuration, Nitro initialization timing, platform detection exports, and comprehensive tests.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch feat/tvos-macos-platform-support

No actionable comments were generated in the recent review. 🎉


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gemini-code-assist

Copy link
Copy Markdown
Contributor

Summary of Changes

Hello @hyochan, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly expands the library's compatibility by adding official support for tvOS, macOS, and watchOS platforms. It introduces robust platform detection utilities and refines the initialization sequence for the Nitro runtime, ensuring stable operation across all supported Apple environments. These changes enhance the library's versatility and reliability for developers targeting a broader range of Apple devices.

Highlights

  • Platform Support Expansion: Extended platform support to include tvOS 15.0, macOS 14.0, and watchOS 8.0 in the podspec and native Swift code, enhancing compatibility across Apple devices.
  • Platform Detection Helpers: Introduced new TypeScript helper functions (isTVOS, isMacOS, isStandardIOS, isNitroReady) for accurate platform detection within the JavaScript layer.
  • Nitro Initialization Timing Fix: Refactored the useIAP hook to register listeners after initConnection succeeds, addressing potential Nitro runtime initialization timing issues on non-iOS platforms like tvOS.
  • Promoted Product Listener Logic: Disabled the promotedProductListenerIOS on tvOS and macOS platforms, as promoted products are not supported in the App Store on these environments.
  • Developer Workflow Documentation: Added new markdown files detailing recommended commit guidelines and PR review processes to standardize development practices.

🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console.

Changelog
  • .claude/commands/commit.md
    • Added new documentation for commit guidelines and workflow.
  • .claude/commands/review-pr.md
    • Added new documentation for PR review comments and project conventions.
  • .gitignore
    • Updated ignore rules to exclude local Claude settings.
  • NitroIap.podspec
    • Updated platform support to include tvOS 15.0, macOS 14.0, and watchOS 8.0.
  • ios/HybridRnIap.swift
    • Updated @available annotation to extend support to macOS 14.0, tvOS 15.0, and watchOS 8.0.
  • src/tests/index.test.ts
    • Added tests for exported platform detection functions.
    • Updated promotedProductListenerIOS test to include isTV and isMacCatalyst flags.
  • src/tests/platform-detection.test.ts
    • Added a new test file for comprehensive platform detection helper functions and promoted product listener behavior.
  • src/hooks/useIAP.ts
    • Imported new platform detection helpers (isTVOS, isMacOS).
    • Moved listener registration to occur after initConnection succeeds.
    • Conditionally registered promotedProductListenerIOS only for standard iOS platforms.
  • src/index.ts
    • Added isNitroReady function to check Nitro runtime initialization status.
    • Added isTVOS function for tvOS platform detection.
    • Added isMacOS function for macOS (native and Catalyst) platform detection.
    • Added isStandardIOS function for standard iOS (iPhone/iPad) detection.
    • Modified promotedProductListenerIOS to return early on tvOS and macOS platforms.
Activity
  • No human activity has been recorded on this pull request yet.
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 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 counter productive. 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.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

@codecov

codecov Bot commented Feb 10, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 64.91228% with 20 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.54%. Comparing base (1527252) to head (e2bf318).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
src/hooks/useIAP.ts 50.00% 20 Missing ⚠️
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #3145      +/-   ##
==========================================
+ Coverage   68.18%   68.54%   +0.35%     
==========================================
  Files           9        9              
  Lines        1751     1777      +26     
  Branches      580      587       +7     
==========================================
+ Hits         1194     1218      +24     
- Misses        552      554       +2     
  Partials        5        5              
Flag Coverage Δ
library 68.54% <64.91%> (+0.35%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
src/index.ts 70.17% <100.00%> (+0.59%) ⬆️
src/hooks/useIAP.ts 68.96% <50.00%> (+0.48%) ⬆️
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@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 effectively adds platform support for tvOS, macOS, and watchOS. The changes are well-structured, including updates to the podspec, Swift availability annotations, and the addition of platform detection helpers in TypeScript. A significant improvement is the fix for a race condition by initializing the IAP connection before registering listeners, which is crucial for platforms like tvOS. The new unit tests for platform detection are also a great addition. I have identified a few areas for improvement: a minor formatting issue in a markdown file, a discrepancy in the podspec regarding watchOS support, and an opportunity to refactor a condition in the useIAP hook by using a newly created helper function.

Comment thread NitroIap.podspec Outdated
Comment thread .claude/commands/commit.md Outdated
Comment thread src/hooks/useIAP.ts Outdated

@coderabbitai coderabbitai 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.

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@src/hooks/useIAP.ts`:
- Around line 386-469: The race condition occurs because listeners
(purchaseUpdatedListener, purchaseErrorListener, promotedProductListenerIOS,
userChoiceBillingListenerAndroid) are registered after awaiting initConnection,
allowing an unmount/cleanup to run before listeners are set and later leak; fix
by tracking a mounted/cancelled ref (e.g., isMountedRef) set true on mount and
false on cleanup and check it immediately after initConnection resolves before
registering any listeners (or bail out and remove any listeners if isMountedRef
is false); also ensure the catch cleanup still clears subscriptionsRef.current
and that connectedRef and optionsRef checks remain correct before invoking
callbacks (use the same isMountedRef guard when attaching listeners and before
calling optionsRef.current callbacks).
🧹 Nitpick comments (3)
NitroIap.podspec (1)

26-27: Inconsistent quoting for visionos platform version.

All other platform versions are quoted strings ('15.0', '14.0') but :visionos uses a bare numeric 1.0. While CocoaPods accepts both, this is inconsistent and could cause confusion.

Also, the comment on Line 26 mentions watchOS 8+, but watchOS is not listed in the s.platforms map (presumably intentional since React Native doesn't target watchOS). Consider updating the comment to clarify that watchOS is only annotated at the Swift level.

Suggested fix
-  # Platform versions match OpenIAP requirements: iOS 15+, macOS 14+, tvOS 15+, watchOS 8+
-  s.platforms    = { :ios => '15.0', :tvos => '15.0', :macos => '14.0', :visionos => 1.0 }
+  # Platform versions match OpenIAP requirements: iOS 15+, macOS 14+, tvOS 15+, visionOS 1+
+  # watchOS 8+ is annotated in Swift `@available` but not as a podspec target (no RN support)
+  s.platforms    = { :ios => '15.0', :tvos => '15.0', :macos => '14.0', :visionos => '1.0' }
src/index.ts (1)

133-146: isNitroReady() silently initializes the IAP singleton as a side effect.

The function name and JSDoc imply a read-only check, but it creates and caches iapRef on success. A caller using it as a harmless probe (e.g., in a polling loop or conditional UI) will unknowingly trigger full initialization. Consider documenting this prominently, or renaming to something like ensureNitroReady() to make the side effect explicit.

src/__tests__/platform-detection.test.ts (1)

178-178: Redundant mockClear() calls — beforeEach already runs jest.clearAllMocks().

The explicit mockIap.addPromotedProductListenerIOS.mockClear() calls at lines 178, 192, 210, and 224 are unnecessary since jest.clearAllMocks() on line 29 already resets all mock state. Not harmful, just noise.

Also applies to: 192-192, 210-210, 224-224

Comment thread src/hooks/useIAP.ts
- Add watchOS 8.0 to podspec platforms (matches comment and Swift annotation)
- Fix markdown table formatting in commit.md
- Use isStandardIOS() helper instead of duplicating logic
- Add isMountedRef guard to prevent listener leaks on early unmount

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In @.claude/commands/commit.md:
- Line 237: Replace the mistakenly bolded markdown string "**tests**/" with the
literal directory name "__tests__/" in the header (currently "### Tests
(src/**tests**/)") so the documentation shows the actual directory path; locate
the header line containing "**tests**/" and change it to "__tests__/".

In `@src/hooks/useIAP.ts`:
- Around line 422-440: The code double-normalizes the error code inside the
purchaseErrorListener callback: purchaseErrorListener already returns a
PurchaseError with a normalized code, so in the callback (where
subscriptionsRef.current.purchaseError is assigned) remove the extra
normalizeErrorCodeFromNative call and use the provided error.code directly when
building mappedError; keep the other fields (message, productId) and existing
init-error ignore check that references connectedRef.current and the
optionsRef.current?.onPurchaseError invocation unchanged.
🧹 Nitpick comments (4)
.claude/commands/commit.md (2)

7-9: Add language specifier to fenced code block.

The code block should specify bash as the language for proper syntax highlighting and to satisfy the markdownlint rule.

📝 Proposed fix
-```
+```bash
 /commit [options]
</details>

---

`177-188`: **Add language specifiers to fenced code blocks.**

The three example commit message code blocks should specify a language (e.g., `text` or `gitcommit`) for proper rendering and to satisfy the markdownlint rule.

<details>
<summary>📝 Proposed fix</summary>

```diff
 **Feature addition:**
 
-```
+```text
 feat(ios): add tvOS and macOS platform support
 
 - Add tvOS 15.0 and macOS 14.0 to podspec platforms
 **Bug fix:**
 
-```
+```text
 fix(hooks): register listeners after initConnection
 
 Move listener registration after initConnection succeeds
 **Chore/maintenance:**
 
-```
+```text
 chore(deps): update OpenIAP to 1.3.11
 
 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Also applies to: 192-200, 204-208

NitroIap.podspec (1)

26-27: Platform versions look correct per OpenIAP/StoreKit 2 requirements.

The added platforms (tvOS 15.0, macOS 14.0, watchOS 8.0) align with Apple's StoreKit 2 minimum versions and match the @available annotation in HybridRnIap.swift.

One minor note: :visionos => 1.0 is a numeric literal while all others are strings ('15.0'). This is pre-existing, but worth harmonizing for consistency if CocoaPods treats them differently.

Also, since React Native doesn't officially support watchOS, consider whether declaring :watchos => '8.0' here could cause confusion for consumers. If it's purely to match the Swift @available annotation and the underlying OpenIAP dependency, a brief comment clarifying that would help.

src/hooks/useIAP.ts (1)

485-499: Cleanup correctly handles unmount; note a subtle edge case for future maintainers.

The captured currentSubscriptions works because subscriptionsRef.current is mutated in-place (properties assigned), not replaced with a new object. Combined with isMountedRef, this prevents listener leaks on unmount.

One subtlety: isMountedRef is shared across effect re-runs. If initIapWithSubscriptions ever became unstable (causing the effect to re-fire), a stale in-flight initConnection could resolve after isMountedRef.current is set back to true by the new effect invocation, bypassing the guard and potentially double-registering listeners. This isn't an issue today since all useCallback dependencies are stable, but a generation counter or AbortController would be more robust if the deps ever change.

Comment thread .claude/commands/commit.md Outdated
Comment thread src/hooks/useIAP.ts
- Fix __tests__ directory name formatting in commit.md (was bolded)
- Remove double normalization of error code in useIAP hook
  (purchaseErrorListener already normalizes via normalizeErrorCodeFromNative)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

@coderabbitai coderabbitai 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.

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In @.claude/commands/commit.md:
- Around line 7-9: The fenced code block containing "/commit [options]" in
.claude/commands/commit.md should include a language identifier to satisfy
markdownlint MD040 and improve readability; update the fence around the snippet
(the block showing "/commit [options]") to use a language token such as "text"
or "bash" (e.g., replace ``` with ```text) so the linter no longer flags the
fence.
- Around line 192-200: Add a language tag ("text") to the triple-backtick fenced
code block that contains the commit message starting with "fix(hooks): register
listeners after initConnection" in .claude/commands/commit.md so the fence
becomes ```text; update the opening fence only (leave the commit message content
unchanged) to satisfy MD040 and ensure consistent linting/document rendering.
- Around line 177-188: The fenced commit-message example in
.claude/commands/commit.md triggers MD040 because it lacks a language; update
the triple-backtick fence that contains the example commit (the block starting
with "feat(ios): add tvOS and macOS platform support") to include a language
token such as text (e.g., ```text) so the linter stops complaining; ensure any
other similar commit example fences in that file are updated the same way.
- Around line 204-208: Add a language tag ("text") to the fenced commit-example
block in .claude/commands/commit.md so the example fence uses ```text instead of
```; update the specific fenced block that contains the commit message
"chore(deps): update OpenIAP to 1.3.11" to begin with ```text and keep the
content unchanged to satisfy MD040 linting.

Comment thread .claude/commands/commit.md Outdated
Comment thread .claude/commands/commit.md Outdated
Comment thread .claude/commands/commit.md Outdated
Comment thread .claude/commands/commit.md Outdated
Add 'text' language tag to commit message example blocks
for markdownlint MD040 compliance.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@hyochan

hyochan commented Feb 10, 2026

Copy link
Copy Markdown
Owner Author

/gemini review

@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 introduces comprehensive support for tvOS, macOS, and watchOS platforms, which is a significant enhancement. The changes include updating the podspec and Swift availability annotations, adding robust platform detection helpers in TypeScript, and refining the Nitro initialization and listener registration logic within the useIAP hook. The new platform detection tests are well-structured and ensure the correctness of the new helpers. The adjustment to listener registration after initConnection is a critical fix for potential race conditions, especially on non-iOS platforms like tvOS, and the inclusion of isMountedRef for cleanup is a good practice for React hooks. Overall, the changes are well-implemented and contribute positively to the library's cross-platform capabilities and stability.

Comment thread .claude/commands/commit.md
Comment thread .claude/commands/commit.md
Comment thread .claude/commands/commit.md
Comment thread .claude/commands/commit.md
@hyochan hyochan merged commit d01c222 into main Feb 10, 2026
10 checks passed
@hyochan hyochan deleted the feat/tvos-macos-platform-support branch February 10, 2026 13:54
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

🥋 compatibility Compatibility issue 📱 iOS Related to iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

useIAP() fails on tvOS with "Nitro runtime not installed yet" error

1 participant