Conversation
🦋 Changeset detectedLatest 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 |
There was a problem hiding this comment.
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.
… 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>
* 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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #272