From 6e190276c0ec5713e3407f6b28d2929fab34c8c9 Mon Sep 17 00:00:00 2001 From: Hiroshi Horie <548776+hiroshihorie@users.noreply.github.com> Date: Tue, 28 Jul 2026 03:51:03 +0900 Subject: [PATCH] Remove non-public buttonPressed: selector from broadcast picker activation Apple's automated App Review flags the literal buttonPressed: selector string in application binaries (ITMS-90338 / Guideline 2.5.1), blocking submissions for any app that includes the plugin, even without using screen sharing. Replace the private-selector invocation with public API: locate the picker's UIButton subview and fire it via sendActions(for:). --- .changes/broadcast-picker-private-selector | 1 + ios/Classes/BroadcastManager.swift | 9 ++++++--- 2 files changed, 7 insertions(+), 3 deletions(-) create mode 100644 .changes/broadcast-picker-private-selector diff --git a/.changes/broadcast-picker-private-selector b/.changes/broadcast-picker-private-selector new file mode 100644 index 000000000..e1415c5dd --- /dev/null +++ b/.changes/broadcast-picker-private-selector @@ -0,0 +1 @@ +patch type="fixed" "Remove non-public buttonPressed: selector from broadcast picker activation" diff --git a/ios/Classes/BroadcastManager.swift b/ios/Classes/BroadcastManager.swift index 104ec055d..3f2c2e5ea 100644 --- a/ios/Classes/BroadcastManager.swift +++ b/ios/Classes/BroadcastManager.swift @@ -16,6 +16,7 @@ import Combine import ReplayKit +import UIKit @available(iOS 13.0, *) final class BroadcastManager { @@ -44,8 +45,10 @@ final class BroadcastManager { view.preferredExtension = preferredExtension view.showsMicrophoneButton = false - let selector = NSSelectorFromString("buttonPressed:") - guard view.responds(to: selector) else { return } - view.perform(selector, with: nil) + guard let button = view.subviews.compactMap({ $0 as? UIButton }).first else { + print("[LiveKit] Unable to find button in RPSystemBroadcastPickerView") + return + } + button.sendActions(for: .touchUpInside) } }