65 lines
2.0 KiB
Swift
65 lines
2.0 KiB
Swift
|
|
//
|
||
|
|
// BroadcastLauncher.swift
|
||
|
|
// TUIRoomKit
|
||
|
|
//
|
||
|
|
// Created by janejntang on 2023/1/17.
|
||
|
|
// Copyright © 2023 Tencent. All rights reserved.
|
||
|
|
//
|
||
|
|
|
||
|
|
import ReplayKit
|
||
|
|
import UIKit
|
||
|
|
|
||
|
|
@available(iOS 12.0, *)
|
||
|
|
class BroadcastLauncher: NSObject {
|
||
|
|
var systemExtensionPicker = RPSystemBroadcastPickerView()
|
||
|
|
var prevLaunchEventTime: CFTimeInterval = 0
|
||
|
|
|
||
|
|
static let sharedInstance = BroadcastLauncher()
|
||
|
|
|
||
|
|
override private init() {
|
||
|
|
super.init()
|
||
|
|
let picker = RPSystemBroadcastPickerView(frame: CGRect(x: 0, y: 0, width: 44, height: 44))
|
||
|
|
picker.showsMicrophoneButton = false
|
||
|
|
picker.autoresizingMask = [.flexibleTopMargin, .flexibleRightMargin]
|
||
|
|
systemExtensionPicker = picker
|
||
|
|
|
||
|
|
if let pluginPath = Bundle.main.builtInPlugInsPath,
|
||
|
|
let contents = try? FileManager.default.contentsOfDirectory(atPath: pluginPath) {
|
||
|
|
for content in contents where content.hasSuffix(".appex") {
|
||
|
|
guard let bundle = Bundle(path: URL(fileURLWithPath: pluginPath).appendingPathComponent(content).path),
|
||
|
|
let identifier: String = (bundle.infoDictionary?["NSExtension"] as? [String: Any])? ["NSExtensionPointIdentifier"] as? String
|
||
|
|
else {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
if identifier == "com.apple.broadcast-services-upload" {
|
||
|
|
picker.preferredExtension = bundle.bundleIdentifier
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
static func launch() {
|
||
|
|
BroadcastLauncher.sharedInstance.launch()
|
||
|
|
}
|
||
|
|
|
||
|
|
func launch() {
|
||
|
|
let now = CFAbsoluteTimeGetCurrent()
|
||
|
|
if now - prevLaunchEventTime < 1.0 {
|
||
|
|
return
|
||
|
|
}
|
||
|
|
prevLaunchEventTime = now
|
||
|
|
|
||
|
|
for view in systemExtensionPicker.subviews {
|
||
|
|
if let button = view as? UIButton {
|
||
|
|
button.sendActions(for: .allTouchEvents)
|
||
|
|
break
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
deinit {
|
||
|
|
debugPrint("deinit \(self)")
|
||
|
|
}
|
||
|
|
}
|