Skip to content

feat: new React Native architecture support#275

Merged
tien merged 13 commits intomainfrom
feat/fabric-view
Mar 21, 2026
Merged

feat: new React Native architecture support#275
tien merged 13 commits intomainfrom
feat/fabric-view

Conversation

@tien
Copy link
Copy Markdown
Owner

@tien tien commented Mar 21, 2026

Closes #272

@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Mar 21, 2026

🦋 Changeset detected

Latest commit: 7510ce4

The changes in this PR will be included in the next version bump.

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR migrates the library to React Native’s New Architecture by introducing Codegen specs, a TurboModule for AirPlay state/routes, and a Fabric component for the AirPlay route picker button, alongside updated tooling and a refreshed example app setup.

Changes:

  • Adds Codegen specs + new iOS ObjC++ implementations for a TurboModule (NativeAirplay) and Fabric view (AirplayButton).
  • Refactors JS module APIs/hooks to call into the new TurboModule and manage native listener lifecycles.
  • Modernizes repo tooling (RN 0.84, ESLint flat config, updated podspec/Podfiles) and replaces the example app scaffolding.

Reviewed changes

Copilot reviewed 70 out of 88 changed files in this pull request and generated 14 comments.

Show a summary per file
File Description
src/specs/NativeAirplay.ts New TurboModule Codegen spec + typed route models
src/specs/AirplayButtonNativeComponent.ts New Fabric native component spec for the AirPlay button
src/hooks.ts Hooks updated to use synchronous TurboModule getters + Codegen events
src/airplayModule.ts Public JS API refactored to wrap TurboModule + listener counting
src/AirplayButton.tsx Re-exports the Codegen native component as AirplayButton
README.md Removes Swift/bridging-header setup step
ReactAirplay.podspec New podspec aligned with new-arch/module deps helpers
react-airplay.podspec Removes legacy podspec
package.json Updates exports/build targets/tooling deps + adds codegenConfig
ios/ReactAirplay/Views/RAAirplayButtonViewManager.swift Removes legacy Swift view manager
ios/ReactAirplay/Views/RAAirplayButtonViewManager.m Removes legacy ObjC extern module for Swift manager
ios/ReactAirplay/Views/RAAirplayButtonView.swift Removes legacy Swift AVRoutePickerView subclass
ios/ReactAirplay/Views/AirplayButton.mm Adds Fabric component view wrapping AVRoutePickerView
ios/ReactAirplay/Views/AirplayButton.h Adds Fabric component view header
ios/ReactAirplay/Modules/RARoutePickerContext.swift Removes legacy bridge module for programmatic route picker
ios/ReactAirplay/Modules/RARoutePickerContext.m Removes legacy extern bridge for route picker module
ios/ReactAirplay/Modules/RAExternalPlaybackAvailabilityContext.swift Removes legacy event-emitter module for route availability
ios/ReactAirplay/Modules/RAExternalPlaybackAvailabilityContext.m Removes legacy extern bridge for availability module
ios/ReactAirplay/Modules/RAEventEmitter.swift Removes legacy shared event-emitter base class
ios/ReactAirplay/Modules/RAAirplayConnectivityContext.swift Removes legacy audio-route change event module
ios/ReactAirplay/Modules/RAAirplayConnectivityContext.m Removes legacy extern bridge for connectivity module
ios/ReactAirplay/Modules/NativeAirplay.mm Adds TurboModule implementation (routes, availability, route picker)
ios/ReactAirplay/Modules/NativeAirplay.h Adds TurboModule header implementing Codegen protocol
ios/ReactAirplay/Events/RAEvent.swift Removes legacy constants-export module
ios/ReactAirplay/Events/RAEvent.m Removes legacy extern bridge for constants module
ios/ReactAirplay.xcodeproj/project.pbxproj Updates project to ObjC++ sources + new-arch build flags
ios/ReactAirplay-Bridging-Header.h Removes bridging header (Swift no longer used)
ios/PrivacyInfo.xcprivacy Adds iOS privacy manifest
ios/Podfile Forces new-arch for the dev iOS project + modern RN pod helpers
ios/.xcode.env Adds Node discovery for Xcode script phases
example/src/App.tsx Updates example usage + minor prop/style tweaks
example/README.md Adds standard RN example README
example/react-native.config.js Updates RN config for monorepo/codegen compatibility
example/package.json Updates example deps/scripts to RN 0.84 scaffolding
example/metro.config.js Switches Metro config to monorepo helper
example/jest.config.js Adds Jest preset config
example/ios/ReactAirplayExample/PrivacyInfo.xcprivacy Adds example iOS privacy manifest
example/ios/ReactAirplayExample/LaunchScreen.storyboard Adds iOS launch screen
example/ios/ReactAirplayExample/Info.plist Adds/updates example iOS Info.plist for new arch
example/ios/ReactAirplayExample/Images.xcassets/Contents.json Adds iOS asset catalog metadata
example/ios/ReactAirplayExample/Images.xcassets/AppIcon.appiconset/Contents.json Adds iOS app icon set manifest
example/ios/ReactAirplayExample/AppDelegate.swift Adds RN 0.84-style AppDelegate/bootstrap
example/ios/ReactAirplayExample.xcworkspace/contents.xcworkspacedata Updates workspace contents to the new Xcode project layout
example/ios/ReactAirplayExample.xcodeproj/xcshareddata/xcschemes/ReactAirplayExample.xcscheme Adds shared Xcode scheme
example/ios/ReactAirplayExample.xcodeproj/project.pbxproj Adds new example Xcode project configuration
example/ios/ReactAirplayExample-Bridging-Header.h Updates example bridging header import for RN app delegate support
example/ios/Podfile Updates example pods setup for new architecture
example/ios/File.swift Removes placeholder Swift file
example/ios/.xcode.env Adds documented Node discovery for Xcode phases
example/Gemfile.lock Adds locked Ruby dependencies for CocoaPods
example/Gemfile Adds Ruby/CocoaPods constraints for example
example/app.json Simplifies example app.json to standard RN format
example/android/settings.gradle Migrates example to RN gradle plugin settings layout
example/android/gradlew.bat Updates Windows wrapper script invocation details
example/android/gradlew Updates POSIX wrapper script invocation details
example/android/gradle/wrapper/gradle-wrapper.properties Updates Gradle distribution version
example/android/gradle.properties Enables new architecture + Hermes and refreshes defaults
example/android/build.gradle Switches to rootproject React plugin + new SDK/tooling versions
example/android/app/src/main/res/values/styles.xml Adds Android app theme
example/android/app/src/main/res/values/strings.xml Adds Android app name resource
example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png Adds Android launcher icon asset
example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png Adds Android launcher icon asset
example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png Adds Android round launcher icon asset
example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png Adds Android launcher icon asset
example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png Adds Android round launcher icon asset
example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png Adds Android launcher icon asset
example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png Adds Android round launcher icon asset
example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png Adds Android launcher icon asset
example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png Adds Android round launcher icon asset
example/android/app/src/main/res/drawable/rn_edit_text_material.xml Adds workaround drawable to avoid known RN EditText crash
example/android/app/src/main/java/reactairplay/example/MainApplication.kt Adds RN 0.84 Application class for the example
example/android/app/src/main/java/reactairplay/example/MainActivity.kt Adds RN 0.84 Activity class for the example
example/android/app/src/main/AndroidManifest.xml Adds new example Android manifest
example/android/app/proguard-rules.pro Adds baseline Proguard rules file
example/android/app/debug.keystore Adds debug signing keystore for example
example/android/app/build.gradle Adds new example app Gradle build configuration
example/.bundle/config Adds Bundler config for the example
eslint.config.ts Migrates repo to ESLint flat config
CONTRIBUTING.md Updates native editing guidance (removes Swift mention)
babel.config.cjs Updates Babel config to use overrides for node_modules vs source
.gitignore Adds new ignores (xcode env local, codegen outputs, etc.)
.eslintrc Removes legacy ESLint config
.eslintignore Removes legacy ESLint ignore file
Files not reviewed (1)
  • example/ios/ReactAirplayExample.xcworkspace/contents.xcworkspacedata: Language not supported

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread package.json
Comment thread src/specs/NativeAirplay.ts
Comment thread src/specs/NativeAirplay.ts
Comment thread src/specs/NativeAirplay.ts
Comment thread src/airplayModule.ts
Comment thread ReactAirplay.podspec
Comment thread example/android/gradlew
Comment thread ios/ReactAirplay.xcodeproj/project.pbxproj
Comment thread example/ios/ReactAirplayExample.xcodeproj/project.pbxproj
Comment thread src/airplayModule.ts
Copy link
Copy Markdown

Copilot AI commented Mar 21, 2026

@tien I've opened a new pull request, #276, to work on those changes. Once the pull request is ready, I'll request review from you.

… PR (#276)

* Initial plan

* fix: correct exports source path from index.tsx to index.ts

Co-authored-by: tien <19813755+tien@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tien/react-airplay/sessions/e2d5892c-1ea9-469d-98bb-5e33fc75f9ce

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tien <19813755+tien@users.noreply.github.com>
Copy link
Copy Markdown

Copilot AI commented Mar 21, 2026

@tien I've opened a new pull request, #277, to work on those changes. Once the pull request is ready, I'll request review from you.

Copilot AI and others added 7 commits March 21, 2026 16:39
* Initial plan

* fix: change channelLabel type from string to number

Co-authored-by: tien <19813755+tien@users.noreply.github.com>
Agent-Logs-Url: https://github.com/tien/react-airplay/sessions/9cd5d0dc-8959-4bd8-83da-ab9ac1f5493d

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: tien <19813755+tien@users.noreply.github.com>
@tien tien enabled auto-merge (squash) March 21, 2026 04:32
@tien tien disabled auto-merge March 21, 2026 04:32
@tien tien merged commit cd0c1ac into main Mar 21, 2026
1 check passed
@tien tien deleted the feat/fabric-view branch March 21, 2026 04:42
@github-actions github-actions bot mentioned this pull request Mar 21, 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.

New Arch Support

3 participants