Compare commits
1 Commits
jitihouse/
...
ios_locksc
Author | SHA1 | Date |
---|---|---|
Alex Bumbu | 1893ced556 |
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal",
|
||||||
|
"platform" : "ios",
|
||||||
|
"size" : "1024x1024"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
{
|
||||||
|
"colors" : [
|
||||||
|
{
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
12
ios/app/Widgets Extension/Assets.xcassets/leave_meeting.imageset/Contents.json
vendored
Normal file
12
ios/app/Widgets Extension/Assets.xcassets/leave_meeting.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "end_call_button.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
ios/app/Widgets Extension/Assets.xcassets/leave_meeting.imageset/end_call_button.pdf
vendored
Normal file
BIN
ios/app/Widgets Extension/Assets.xcassets/leave_meeting.imageset/end_call_button.pdf
vendored
Normal file
Binary file not shown.
12
ios/app/Widgets Extension/Assets.xcassets/microphone_off.imageset/Contents.json
vendored
Normal file
12
ios/app/Widgets Extension/Assets.xcassets/microphone_off.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "microphone_off_button.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
ios/app/Widgets Extension/Assets.xcassets/microphone_off.imageset/microphone_off_button.pdf
vendored
Normal file
BIN
ios/app/Widgets Extension/Assets.xcassets/microphone_off.imageset/microphone_off_button.pdf
vendored
Normal file
Binary file not shown.
12
ios/app/Widgets Extension/Assets.xcassets/microphone_on.imageset/Contents.json
vendored
Normal file
12
ios/app/Widgets Extension/Assets.xcassets/microphone_on.imageset/Contents.json
vendored
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
{
|
||||||
|
"images" : [
|
||||||
|
{
|
||||||
|
"filename" : "microphone_on_button.pdf",
|
||||||
|
"idiom" : "universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"info" : {
|
||||||
|
"author" : "xcode",
|
||||||
|
"version" : 1
|
||||||
|
}
|
||||||
|
}
|
BIN
ios/app/Widgets Extension/Assets.xcassets/microphone_on.imageset/microphone_on_button.pdf
vendored
Normal file
BIN
ios/app/Widgets Extension/Assets.xcassets/microphone_on.imageset/microphone_on_button.pdf
vendored
Normal file
Binary file not shown.
|
@ -0,0 +1,101 @@
|
||||||
|
//
|
||||||
|
// DarwinNotificationsObserver.swift
|
||||||
|
// WidgetsExtension
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 17.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
enum DarwinNotification: String {
|
||||||
|
case meetingMutedChanged = "iOS_MeetingMutedChanged"
|
||||||
|
}
|
||||||
|
|
||||||
|
extension DarwinNotification {
|
||||||
|
|
||||||
|
var name: String { rawValue }
|
||||||
|
}
|
||||||
|
|
||||||
|
class DarwinNotificationsObserver {
|
||||||
|
|
||||||
|
private static var observers = Array<ProxyObserver>()
|
||||||
|
|
||||||
|
private let queue = DispatchQueue(label: "org.jitsi.meet.darwinNotificationObserver", qos: .default, autoreleaseFrequency: .workItem)
|
||||||
|
private var notificationCenter: CFNotificationCenter
|
||||||
|
|
||||||
|
init() {
|
||||||
|
notificationCenter = CFNotificationCenterGetDarwinNotifyCenter()
|
||||||
|
}
|
||||||
|
|
||||||
|
func observe(notification: DarwinNotification, handler: @escaping () -> Void) {
|
||||||
|
let proxyObserver = ProxyObserver(observer: self, notificationName: notification.name, handler: handler)
|
||||||
|
queue.async {
|
||||||
|
DarwinNotificationsObserver.observers.append(proxyObserver)
|
||||||
|
}
|
||||||
|
|
||||||
|
let callback: CFNotificationCallback = { _, observer, name, _, _ in
|
||||||
|
guard let observer = observer else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Extract pointer to `observer` from void pointer:
|
||||||
|
let proxyObserver = Unmanaged<ProxyObserver>.fromOpaque(observer).takeUnretainedValue()
|
||||||
|
var observers = DarwinNotificationsObserver.observers
|
||||||
|
if !proxyObserver.forwardNotification(), let index = observers.firstIndex(of: proxyObserver) {
|
||||||
|
// cleanup if `forwardNotification` fails
|
||||||
|
observers.remove(at: index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CFNotificationCenterAddObserver(notificationCenter,
|
||||||
|
Unmanaged.passUnretained(proxyObserver).toOpaque(),
|
||||||
|
callback,
|
||||||
|
notification.name as CFString,
|
||||||
|
nil,
|
||||||
|
.deliverImmediately)
|
||||||
|
}
|
||||||
|
|
||||||
|
func stopObserving(notification: DarwinNotification) {
|
||||||
|
queue.sync {
|
||||||
|
DarwinNotificationsObserver.observers.removeAll { $0.observer == nil }
|
||||||
|
}
|
||||||
|
|
||||||
|
if let index = DarwinNotificationsObserver.observers.firstIndex(where: { $0.observer === self && $0.notificationName == notification.name }) {
|
||||||
|
let proxyObserver = DarwinNotificationsObserver.observers[index]
|
||||||
|
CFNotificationCenterRemoveObserver(notificationCenter,
|
||||||
|
Unmanaged.passUnretained(proxyObserver).toOpaque(),
|
||||||
|
CFNotificationName(notification.name as CFString),
|
||||||
|
nil)
|
||||||
|
queue.async {
|
||||||
|
DarwinNotificationsObserver.observers.remove(at: index)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ProxyObserver: Equatable {
|
||||||
|
|
||||||
|
let notificationName: String
|
||||||
|
weak var observer: AnyObject?
|
||||||
|
|
||||||
|
private let handler: () -> (Void)
|
||||||
|
|
||||||
|
static func == (lhs: ProxyObserver, rhs: ProxyObserver) -> Bool {
|
||||||
|
lhs.observer === rhs.observer && lhs.notificationName == rhs.notificationName
|
||||||
|
}
|
||||||
|
|
||||||
|
init(observer: AnyObject? = nil, notificationName: String, handler: @escaping () -> Void) {
|
||||||
|
self.notificationName = notificationName
|
||||||
|
self.handler = handler
|
||||||
|
self.observer = observer
|
||||||
|
}
|
||||||
|
|
||||||
|
func forwardNotification() -> Bool {
|
||||||
|
guard observer != nil else {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
handler()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>NSExtension</key>
|
||||||
|
<dict>
|
||||||
|
<key>NSExtensionPointIdentifier</key>
|
||||||
|
<string>com.apple.widgetkit-extension</string>
|
||||||
|
</dict>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -0,0 +1,54 @@
|
||||||
|
//
|
||||||
|
// LockScreenLeaveMeetingWidget.swift
|
||||||
|
// WidgetsExtension
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 31.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
import WidgetKit
|
||||||
|
|
||||||
|
struct LockScreenLeaveMeetingWidget: Widget {
|
||||||
|
let kind: String = "LockScreenLeaveMeetingWidget"
|
||||||
|
|
||||||
|
var body: some WidgetConfiguration {
|
||||||
|
StaticConfiguration(kind: kind, provider: Provider()) { entry in
|
||||||
|
WidgetsEntryView(entry: entry)
|
||||||
|
}
|
||||||
|
.configurationDisplayName("Leave Jitsi Meeting Widget")
|
||||||
|
.description("This is a lockscreen widget for leaving the ongoing Jitsi meeting.")
|
||||||
|
.supportedFamilies([.accessoryCircular])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//struct LockScreenLeaveMeetingWidget_Preview: PreviewProvider {
|
||||||
|
// static var previews: some View {
|
||||||
|
// let meetingState = MeetingState(audioMuted: true)
|
||||||
|
//
|
||||||
|
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||||
|
// .previewContext(WidgetPreviewContext(family: .accessoryCircular))
|
||||||
|
// .previewDisplayName("Circular")
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
private struct WidgetsEntryView: View {
|
||||||
|
@Environment(\.widgetFamily) var widgetFamily
|
||||||
|
var entry: Provider.Entry
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
if entry.meetingState != nil, widgetFamily == .accessoryCircular {
|
||||||
|
AccessoryCircularWidgetView()
|
||||||
|
} else {
|
||||||
|
EmptyView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct AccessoryCircularWidgetView: View {
|
||||||
|
var body: some View {
|
||||||
|
Image("leave_meeting")
|
||||||
|
.resizable()
|
||||||
|
.aspectRatio(contentMode: .fit)
|
||||||
|
.widgetURL(URL(string: "meet/leaveMeeting")!)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,89 @@
|
||||||
|
//
|
||||||
|
// LockScreenMuteAudioWidget.swift
|
||||||
|
// WidgetsExtension
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 31.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import SwiftUI
|
||||||
|
import WidgetKit
|
||||||
|
|
||||||
|
struct LockScreenMuteAudioWidget: Widget {
|
||||||
|
let kind: String = "LockScreenMuteAudioWidget"
|
||||||
|
|
||||||
|
var body: some WidgetConfiguration {
|
||||||
|
StaticConfiguration(kind: kind, provider: Provider()) { entry in
|
||||||
|
WidgetsEntryView(entry: entry)
|
||||||
|
}
|
||||||
|
.configurationDisplayName("Mute Jitsi Audio Widget")
|
||||||
|
.description("This is a lockscreen widget for muting or unmuting the audio for the ongoing Jitsi meeting.")
|
||||||
|
.supportedFamilies([.accessoryCircular])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//struct LockScreenMuteAudioWidget_Preview: PreviewProvider {
|
||||||
|
// static var previews: some View {
|
||||||
|
// let meetingState = MeetingState(audioMuted: true)
|
||||||
|
//
|
||||||
|
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||||
|
// .previewContext(WidgetPreviewContext(family: .accessoryInline))
|
||||||
|
// .previewDisplayName("Inline")
|
||||||
|
//
|
||||||
|
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||||
|
// .previewContext(WidgetPreviewContext(family: .accessoryCircular))
|
||||||
|
// .previewDisplayName("Circular")
|
||||||
|
//
|
||||||
|
// WidgetsEntryView(entry: CurrentMeetingEntry(date: Date(), meetingState: meetingState))
|
||||||
|
// .previewContext(WidgetPreviewContext(family: .accessoryRectangular))
|
||||||
|
// .previewDisplayName("Rectangular")
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
private struct WidgetsEntryView: View {
|
||||||
|
@Environment(\.widgetFamily) var widgetFamily
|
||||||
|
var entry: Provider.Entry
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
if let meetingState = entry.meetingState {
|
||||||
|
switch widgetFamily {
|
||||||
|
case .accessoryInline:
|
||||||
|
Text("Some meeting name")
|
||||||
|
case .accessoryRectangular:
|
||||||
|
AccessoryCircularWidgetView(audioMuted: meetingState.audioMuted)
|
||||||
|
case .accessoryCircular:
|
||||||
|
AccessoryCircularWidgetView(audioMuted: meetingState.audioMuted)
|
||||||
|
default:
|
||||||
|
EmptyView()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
EmptyView()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct AccessoryRectangularWidgetView: View {
|
||||||
|
var audioMuted: Bool
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
let imageName: String = audioMuted ? "microphone_on" : "microphone_off"
|
||||||
|
let caption: String = audioMuted ? "Unmute \naudio" : "Mute \naudio"
|
||||||
|
HStack {
|
||||||
|
Image(imageName)
|
||||||
|
.resizable()
|
||||||
|
.aspectRatio(contentMode: .fit)
|
||||||
|
Text(caption)
|
||||||
|
}.widgetURL(URL(string: "meet/toggleAudioMute")!)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private struct AccessoryCircularWidgetView: View {
|
||||||
|
var audioMuted: Bool
|
||||||
|
|
||||||
|
var body: some View {
|
||||||
|
let imageName: String = audioMuted ? "microphone_on" : "microphone_off"
|
||||||
|
Image(imageName)
|
||||||
|
.resizable()
|
||||||
|
.aspectRatio(contentMode: .fit)
|
||||||
|
.widgetURL(URL(string: "meet/toggleAudioMute")!)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,30 @@
|
||||||
|
//
|
||||||
|
// MeetingState.swift
|
||||||
|
// WidgetsExtension
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 28.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import Foundation
|
||||||
|
|
||||||
|
struct MeetingState: Decodable {
|
||||||
|
var audioMuted: Bool
|
||||||
|
}
|
||||||
|
|
||||||
|
extension MeetingState {
|
||||||
|
private static var stateFileURL: URL? {
|
||||||
|
return FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.org.jitsi.meet.appgroup")?.appending(component: "widgetState")
|
||||||
|
}
|
||||||
|
|
||||||
|
static func load() -> MeetingState? {
|
||||||
|
guard
|
||||||
|
let stateFileURL = stateFileURL,
|
||||||
|
let data = try? Data(contentsOf: stateFileURL)
|
||||||
|
else {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
let decoder = PropertyListDecoder()
|
||||||
|
return try? decoder.decode(MeetingState.self, from: data)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
//
|
||||||
|
// Provider.swift
|
||||||
|
// WidgetsExtension
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 31.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import WidgetKit
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
struct CurrentMeetingEntry: TimelineEntry {
|
||||||
|
let date: Date
|
||||||
|
var meetingState: MeetingState?
|
||||||
|
}
|
||||||
|
|
||||||
|
class Provider: TimelineProvider {
|
||||||
|
private var currentMeetingState: MeetingState? {
|
||||||
|
return MeetingState.load()
|
||||||
|
}
|
||||||
|
|
||||||
|
func placeholder(in context: Context) -> CurrentMeetingEntry {
|
||||||
|
CurrentMeetingEntry(date: Date(),
|
||||||
|
meetingState: MeetingState(audioMuted: false))
|
||||||
|
}
|
||||||
|
|
||||||
|
func getSnapshot(in context: Context, completion: @escaping (CurrentMeetingEntry) -> ()) {
|
||||||
|
var meetingState = currentMeetingState
|
||||||
|
if context.isPreview {
|
||||||
|
meetingState = MeetingState(audioMuted: false)
|
||||||
|
}
|
||||||
|
|
||||||
|
let entry = CurrentMeetingEntry(date: Date(), meetingState: meetingState)
|
||||||
|
completion(entry)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getTimeline(in context: Context, completion: @escaping (Timeline<CurrentMeetingEntry>) -> ()) {
|
||||||
|
var entries: [CurrentMeetingEntry] = []
|
||||||
|
let entry = CurrentMeetingEntry(date: Date(), meetingState: currentMeetingState)
|
||||||
|
entries.append(entry)
|
||||||
|
|
||||||
|
let timeline = Timeline(entries: entries, policy: .atEnd)
|
||||||
|
completion(timeline)
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,19 @@
|
||||||
|
//
|
||||||
|
// Widgets.swift
|
||||||
|
// Widgets
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 17.10.2022.
|
||||||
|
// Copyright © 2022 Facebook. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
import WidgetKit
|
||||||
|
import SwiftUI
|
||||||
|
|
||||||
|
@main
|
||||||
|
struct Widgets: WidgetBundle {
|
||||||
|
@WidgetBundleBuilder
|
||||||
|
var body: some Widget {
|
||||||
|
LockScreenMuteAudioWidget()
|
||||||
|
LockScreenLeaveMeetingWidget()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||||
|
<plist version="1.0">
|
||||||
|
<dict>
|
||||||
|
<key>com.apple.security.application-groups</key>
|
||||||
|
<array>
|
||||||
|
<string>group.org.jitsi.meet.appgroup</string>
|
||||||
|
</array>
|
||||||
|
</dict>
|
||||||
|
</plist>
|
|
@ -23,14 +23,26 @@
|
||||||
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
|
13B07FBD1A68108700A75B9A /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; };
|
||||||
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
|
||||||
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
|
||||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */; };
|
4E46D952290FF39E00761DEF /* LockScreenMuteAudioWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */; };
|
||||||
|
4E46D954290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */; };
|
||||||
|
4E6920B828FD84D700645D9E /* DarwinNotificationsObserver.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */; };
|
||||||
|
4E6A3E17291024B900E6B0B5 /* Provider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E6A3E16291024B900E6B0B5 /* Provider.swift */; };
|
||||||
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
|
4E90F9402632D1AB001102D4 /* Atomic.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E90F93F2632D1AB001102D4 /* Atomic.swift */; };
|
||||||
|
4EA73DA3290C1D6C00A16FF8 /* MeetingState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */; };
|
||||||
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
|
4EB06024260E026600F524C5 /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4EC49B8625BED71300E76218 /* ReplayKit.framework */; };
|
||||||
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
|
4EB06027260E026600F524C5 /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06026260E026600F524C5 /* SampleHandler.swift */; };
|
||||||
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
|
4EB0603C260E09D000F524C5 /* SocketConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB06039260E09D000F524C5 /* SocketConnection.swift */; };
|
||||||
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
|
4EB0603D260E09D000F524C5 /* DarwinNotificationCenter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */; };
|
||||||
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
|
4EB0603E260E09D000F524C5 /* SampleUploader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EB0603B260E09D000F524C5 /* SampleUploader.swift */; };
|
||||||
|
4EBB458A28FFFD4100855769 /* RoutesHandler.m in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB458928FFFD4100855769 /* RoutesHandler.m */; };
|
||||||
|
4EBB458E2902E85B00855769 /* WidgetKitHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */; };
|
||||||
|
4ECA496628FD590000085365 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4ECA496528FD590000085365 /* WidgetKit.framework */; };
|
||||||
|
4ECA496828FD590000085365 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4ECA496728FD590000085365 /* SwiftUI.framework */; };
|
||||||
|
4ECA496B28FD590000085365 /* Widgets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4ECA496A28FD590000085365 /* Widgets.swift */; };
|
||||||
|
4ECA496D28FD590000085365 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4ECA496C28FD590000085365 /* Assets.xcassets */; };
|
||||||
|
4ECA497128FD590000085365 /* WidgetsExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 4ECA496428FD590000085365 /* WidgetsExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||||
|
C2116A7673E01A1CCD5DC1F4 /* libPods-JitsiMeet.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */; };
|
||||||
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
|
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */ = {isa = PBXBuildFile; fileRef = DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */; };
|
||||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; };
|
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; };
|
||||||
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
DEA9F28A258A6EA800D4CD74 /* JitsiMeetSDK.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DEA9F288258A6EA800D4CD74 /* JitsiMeetSDK.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
|
||||||
|
@ -64,6 +76,13 @@
|
||||||
remoteGlobalIDString = 4EB06022260E026600F524C5;
|
remoteGlobalIDString = 4EB06022260E026600F524C5;
|
||||||
remoteInfo = "JitsiMeetBroadcast Extension";
|
remoteInfo = "JitsiMeetBroadcast Extension";
|
||||||
};
|
};
|
||||||
|
4ECA496F28FD590000085365 /* PBXContainerItemProxy */ = {
|
||||||
|
isa = PBXContainerItemProxy;
|
||||||
|
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
|
||||||
|
proxyType = 1;
|
||||||
|
remoteGlobalIDString = 4ECA496328FD590000085365;
|
||||||
|
remoteInfo = WidgetsExtension;
|
||||||
|
};
|
||||||
/* End PBXContainerItemProxy section */
|
/* End PBXContainerItemProxy section */
|
||||||
|
|
||||||
/* Begin PBXCopyFilesBuildPhase section */
|
/* Begin PBXCopyFilesBuildPhase section */
|
||||||
|
@ -108,6 +127,7 @@
|
||||||
dstPath = "";
|
dstPath = "";
|
||||||
dstSubfolderSpec = 13;
|
dstSubfolderSpec = 13;
|
||||||
files = (
|
files = (
|
||||||
|
4ECA497128FD590000085365 /* WidgetsExtension.appex in Embed App Extensions */,
|
||||||
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */,
|
4EB0602B260E026600F524C5 /* JitsiMeetBroadcastExtension.appex in Embed App Extensions */,
|
||||||
);
|
);
|
||||||
name = "Embed App Extensions";
|
name = "Embed App Extensions";
|
||||||
|
@ -134,6 +154,7 @@
|
||||||
0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = "<group>"; };
|
0BEA5C3A1F7B8F73000D0AB4 /* ComplicationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComplicationController.swift; sourceTree = "<group>"; };
|
||||||
0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
0BEA5C3C1F7B8F73000D0AB4 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
0BEA5C3E1F7B8F73000D0AB4 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
13B07F961A680F5B00A75B9A /* jitsi-meet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jitsi-meet.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
13B07F961A680F5B00A75B9A /* jitsi-meet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "jitsi-meet.app"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; };
|
||||||
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; };
|
||||||
|
@ -141,8 +162,12 @@
|
||||||
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; };
|
||||||
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
|
||||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenMuteAudioWidget.swift; sourceTree = "<group>"; };
|
||||||
|
4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockScreenLeaveMeetingWidget.swift; sourceTree = "<group>"; };
|
||||||
|
4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DarwinNotificationsObserver.swift; sourceTree = "<group>"; };
|
||||||
|
4E6A3E16291024B900E6B0B5 /* Provider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Provider.swift; sourceTree = "<group>"; };
|
||||||
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
|
4E90F93F2632D1AB001102D4 /* Atomic.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Atomic.swift; sourceTree = "<group>"; };
|
||||||
|
4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MeetingState.swift; sourceTree = "<group>"; };
|
||||||
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = JitsiMeetBroadcastExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
4EB06026260E026600F524C5 /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
|
||||||
4EB06028260E026600F524C5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
4EB06028260E026600F524C5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
@ -150,10 +175,21 @@
|
||||||
4EB06039260E09D000F524C5 /* SocketConnection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketConnection.swift; sourceTree = "<group>"; };
|
4EB06039260E09D000F524C5 /* SocketConnection.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SocketConnection.swift; sourceTree = "<group>"; };
|
||||||
4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = "<group>"; };
|
4EB0603A260E09D000F524C5 /* DarwinNotificationCenter.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DarwinNotificationCenter.swift; sourceTree = "<group>"; };
|
||||||
4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = "<group>"; };
|
4EB0603B260E09D000F524C5 /* SampleUploader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SampleUploader.swift; sourceTree = "<group>"; };
|
||||||
|
4EBB458828FFFD4100855769 /* RoutesHandler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RoutesHandler.h; sourceTree = "<group>"; };
|
||||||
|
4EBB458928FFFD4100855769 /* RoutesHandler.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RoutesHandler.m; sourceTree = "<group>"; };
|
||||||
|
4EBB458B2902A94700855769 /* WidgetsExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WidgetsExtension.entitlements; sourceTree = "<group>"; };
|
||||||
|
4EBB458C2902E85B00855769 /* JitsiMeet-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "JitsiMeet-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||||
|
4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetKitHelper.swift; sourceTree = "<group>"; };
|
||||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
|
4EC49B8625BED71300E76218 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
|
||||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
4ECA496428FD590000085365 /* WidgetsExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WidgetsExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
4ECA496528FD590000085365 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; };
|
||||||
|
4ECA496728FD590000085365 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; };
|
||||||
|
4ECA496A28FD590000085365 /* Widgets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Widgets.swift; sourceTree = "<group>"; };
|
||||||
|
4ECA496C28FD590000085365 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
|
||||||
|
4ECA496E28FD590000085365 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||||
|
7052390E12D7319D36D8E4CA /* Pods-JitsiMeet.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.debug.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.debug.xcconfig"; sourceTree = "<group>"; };
|
||||||
|
8CAA3C5A38E868335D1C1EC1 /* Pods-JitsiMeet.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-JitsiMeet.release.xcconfig"; path = "Target Support Files/Pods-JitsiMeet/Pods-JitsiMeet.release.xcconfig"; sourceTree = "<group>"; };
|
||||||
B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = "<group>"; };
|
B3B083EB1D4955FF0069CEE7 /* app.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = app.entitlements; sourceTree = "<group>"; };
|
||||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-JitsiMeet.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
|
||||||
DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = "<group>"; };
|
DE050388256E904600DEE3A5 /* WebRTC.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = WebRTC.xcframework; path = "../../node_modules/react-native-webrtc/apple/WebRTC.xcframework"; sourceTree = "<group>"; };
|
||||||
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
|
DE4C455F21DE1E4E00EA0709 /* FIRUtilities.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FIRUtilities.m; sourceTree = "<group>"; };
|
||||||
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
|
DE4C456021DE1E4E00EA0709 /* FIRUtilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FIRUtilities.h; sourceTree = "<group>"; };
|
||||||
|
@ -180,7 +216,7 @@
|
||||||
DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */,
|
DED016F128ECBC9D009D5E8D /* WebRTC.xcframework in Frameworks */,
|
||||||
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
DEA9F289258A6EA800D4CD74 /* JitsiMeetSDK.framework in Frameworks */,
|
||||||
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
|
FD572B9827EDF32300A800FB /* GiphyUISDK.xcframework in Frameworks */,
|
||||||
2681BB562C7A0B42CFBA6719 /* libPods-JitsiMeet.a in Frameworks */,
|
C2116A7673E01A1CCD5DC1F4 /* libPods-JitsiMeet.a in Frameworks */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -199,6 +235,15 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4ECA496128FD590000085365 /* Frameworks */ = {
|
||||||
|
isa = PBXFrameworksBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4ECA496828FD590000085365 /* SwiftUI.framework in Frameworks */,
|
||||||
|
4ECA496628FD590000085365 /* WidgetKit.framework in Frameworks */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXFrameworksBuildPhase section */
|
/* End PBXFrameworksBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXGroup section */
|
/* Begin PBXGroup section */
|
||||||
|
@ -213,7 +258,9 @@
|
||||||
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */,
|
DEFDBBDB25656E3B00344B23 /* WebRTC.xcframework */,
|
||||||
0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */,
|
0BD6B4361EF82A6B00D1F4CD /* WebRTC.framework */,
|
||||||
4EC49B8625BED71300E76218 /* ReplayKit.framework */,
|
4EC49B8625BED71300E76218 /* ReplayKit.framework */,
|
||||||
D6152FF9E9F7B0E86F70A21D /* libPods-JitsiMeet.a */,
|
4ECA496528FD590000085365 /* WidgetKit.framework */,
|
||||||
|
4ECA496728FD590000085365 /* SwiftUI.framework */,
|
||||||
|
0BF9FEBA4DEAB800AD735681 /* libPods-JitsiMeet.a */,
|
||||||
);
|
);
|
||||||
name = Frameworks;
|
name = Frameworks;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -261,6 +308,10 @@
|
||||||
0BBD021F212EB69D00CCB19F /* Types.h */,
|
0BBD021F212EB69D00CCB19F /* Types.h */,
|
||||||
0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */,
|
0B412F1D1EDEE6E800B1A0A6 /* ViewController.h */,
|
||||||
0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */,
|
0B412F1E1EDEE6E800B1A0A6 /* ViewController.m */,
|
||||||
|
4EBB458828FFFD4100855769 /* RoutesHandler.h */,
|
||||||
|
4EBB458928FFFD4100855769 /* RoutesHandler.m */,
|
||||||
|
4EBB458D2902E85B00855769 /* WidgetKitHelper.swift */,
|
||||||
|
4EBB458C2902E85B00855769 /* JitsiMeet-Bridging-Header.h */,
|
||||||
);
|
);
|
||||||
path = src;
|
path = src;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
@ -282,9 +333,25 @@
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
tabWidth = 4;
|
tabWidth = 4;
|
||||||
};
|
};
|
||||||
|
4ECA496928FD590000085365 /* Widgets Extension */ = {
|
||||||
|
isa = PBXGroup;
|
||||||
|
children = (
|
||||||
|
4ECA496A28FD590000085365 /* Widgets.swift */,
|
||||||
|
4E46D951290FF39E00761DEF /* LockScreenMuteAudioWidget.swift */,
|
||||||
|
4E46D953290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift */,
|
||||||
|
4E6A3E16291024B900E6B0B5 /* Provider.swift */,
|
||||||
|
4EA73DA2290C1D6C00A16FF8 /* MeetingState.swift */,
|
||||||
|
4E6920B728FD84D700645D9E /* DarwinNotificationsObserver.swift */,
|
||||||
|
4ECA496C28FD590000085365 /* Assets.xcassets */,
|
||||||
|
4ECA496E28FD590000085365 /* Info.plist */,
|
||||||
|
);
|
||||||
|
path = "Widgets Extension";
|
||||||
|
sourceTree = "<group>";
|
||||||
|
};
|
||||||
83CBB9F61A601CBA00E9B192 = {
|
83CBB9F61A601CBA00E9B192 = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
|
4EBB458B2902A94700855769 /* WidgetsExtension.entitlements */,
|
||||||
B3B083EB1D4955FF0069CEE7 /* app.entitlements */,
|
B3B083EB1D4955FF0069CEE7 /* app.entitlements */,
|
||||||
0B26BE711EC5BC4D00EEFB41 /* Frameworks */,
|
0B26BE711EC5BC4D00EEFB41 /* Frameworks */,
|
||||||
83CBBA001A601CBA00E9B192 /* Products */,
|
83CBBA001A601CBA00E9B192 /* Products */,
|
||||||
|
@ -292,11 +359,12 @@
|
||||||
0BEA5C261F7B8F73000D0AB4 /* Watch app */,
|
0BEA5C261F7B8F73000D0AB4 /* Watch app */,
|
||||||
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
|
0BEA5C351F7B8F73000D0AB4 /* WatchKit extension */,
|
||||||
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
|
4EB06025260E026600F524C5 /* JitsiMeetBroadcast Extension */,
|
||||||
CDD71F5E1157E9F283DF92A8 /* Pods */,
|
4ECA496928FD590000085365 /* Widgets Extension */,
|
||||||
|
BD4E28FA984EA7018FD927DF /* Pods */,
|
||||||
);
|
);
|
||||||
indentWidth = 2;
|
indentWidth = 4;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
tabWidth = 2;
|
tabWidth = 4;
|
||||||
};
|
};
|
||||||
83CBBA001A601CBA00E9B192 /* Products */ = {
|
83CBBA001A601CBA00E9B192 /* Products */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
|
@ -305,15 +373,16 @@
|
||||||
0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */,
|
0BEA5C251F7B8F73000D0AB4 /* JitsiMeetCompanion.app */,
|
||||||
0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */,
|
0BEA5C311F7B8F73000D0AB4 /* JitsiMeetCompanion Extension.appex */,
|
||||||
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */,
|
4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */,
|
||||||
|
4ECA496428FD590000085365 /* WidgetsExtension.appex */,
|
||||||
);
|
);
|
||||||
name = Products;
|
name = Products;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
};
|
};
|
||||||
CDD71F5E1157E9F283DF92A8 /* Pods */ = {
|
BD4E28FA984EA7018FD927DF /* Pods */ = {
|
||||||
isa = PBXGroup;
|
isa = PBXGroup;
|
||||||
children = (
|
children = (
|
||||||
756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */,
|
7052390E12D7319D36D8E4CA /* Pods-JitsiMeet.debug.xcconfig */,
|
||||||
3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */,
|
8CAA3C5A38E868335D1C1EC1 /* Pods-JitsiMeet.release.xcconfig */,
|
||||||
);
|
);
|
||||||
name = Pods;
|
name = Pods;
|
||||||
path = ../Pods;
|
path = ../Pods;
|
||||||
|
@ -361,7 +430,7 @@
|
||||||
isa = PBXNativeTarget;
|
isa = PBXNativeTarget;
|
||||||
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */;
|
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "JitsiMeet" */;
|
||||||
buildPhases = (
|
buildPhases = (
|
||||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */,
|
58E2CB346F2C2A873294F481 /* [CP] Check Pods Manifest.lock */,
|
||||||
0BBA83C41EC9F7600075A103 /* Run React packager */,
|
0BBA83C41EC9F7600075A103 /* Run React packager */,
|
||||||
13B07F871A680F5B00A75B9A /* Sources */,
|
13B07F871A680F5B00A75B9A /* Sources */,
|
||||||
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
13B07F8C1A680F5B00A75B9A /* Frameworks */,
|
||||||
|
@ -380,6 +449,7 @@
|
||||||
dependencies = (
|
dependencies = (
|
||||||
0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */,
|
0BEA5C401F7B8F73000D0AB4 /* PBXTargetDependency */,
|
||||||
4EB0602A260E026600F524C5 /* PBXTargetDependency */,
|
4EB0602A260E026600F524C5 /* PBXTargetDependency */,
|
||||||
|
4ECA497028FD590000085365 /* PBXTargetDependency */,
|
||||||
);
|
);
|
||||||
name = JitsiMeet;
|
name = JitsiMeet;
|
||||||
productName = "Jitsi Meet";
|
productName = "Jitsi Meet";
|
||||||
|
@ -403,15 +473,32 @@
|
||||||
productReference = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */;
|
productReference = 4EB06023260E026600F524C5 /* JitsiMeetBroadcastExtension.appex */;
|
||||||
productType = "com.apple.product-type.app-extension";
|
productType = "com.apple.product-type.app-extension";
|
||||||
};
|
};
|
||||||
|
4ECA496328FD590000085365 /* WidgetsExtension */ = {
|
||||||
|
isa = PBXNativeTarget;
|
||||||
|
buildConfigurationList = 4ECA497428FD590100085365 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */;
|
||||||
|
buildPhases = (
|
||||||
|
4ECA496028FD590000085365 /* Sources */,
|
||||||
|
4ECA496128FD590000085365 /* Frameworks */,
|
||||||
|
4ECA496228FD590000085365 /* Resources */,
|
||||||
|
);
|
||||||
|
buildRules = (
|
||||||
|
);
|
||||||
|
dependencies = (
|
||||||
|
);
|
||||||
|
name = WidgetsExtension;
|
||||||
|
productName = WidgetsExtension;
|
||||||
|
productReference = 4ECA496428FD590000085365 /* WidgetsExtension.appex */;
|
||||||
|
productType = "com.apple.product-type.app-extension";
|
||||||
|
};
|
||||||
/* End PBXNativeTarget section */
|
/* End PBXNativeTarget section */
|
||||||
|
|
||||||
/* Begin PBXProject section */
|
/* Begin PBXProject section */
|
||||||
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
83CBB9F71A601CBA00E9B192 /* Project object */ = {
|
||||||
isa = PBXProject;
|
isa = PBXProject;
|
||||||
attributes = {
|
attributes = {
|
||||||
LastSwiftUpdateCheck = 1240;
|
LastSwiftUpdateCheck = 1400;
|
||||||
LastUpgradeCheck = 1020;
|
LastUpgradeCheck = 1020;
|
||||||
ORGANIZATIONNAME = Facebook;
|
ORGANIZATIONNAME = "";
|
||||||
TargetAttributes = {
|
TargetAttributes = {
|
||||||
0BEA5C241F7B8F73000D0AB4 = {
|
0BEA5C241F7B8F73000D0AB4 = {
|
||||||
CreatedOnToolsVersion = 9.0;
|
CreatedOnToolsVersion = 9.0;
|
||||||
|
@ -424,6 +511,7 @@
|
||||||
ProvisioningStyle = Automatic;
|
ProvisioningStyle = Automatic;
|
||||||
};
|
};
|
||||||
13B07F861A680F5B00A75B9A = {
|
13B07F861A680F5B00A75B9A = {
|
||||||
|
LastSwiftMigration = 1400;
|
||||||
SystemCapabilities = {
|
SystemCapabilities = {
|
||||||
com.apple.SafariKeychain = {
|
com.apple.SafariKeychain = {
|
||||||
enabled = 1;
|
enabled = 1;
|
||||||
|
@ -436,6 +524,9 @@
|
||||||
4EB06022260E026600F524C5 = {
|
4EB06022260E026600F524C5 = {
|
||||||
CreatedOnToolsVersion = 12.4;
|
CreatedOnToolsVersion = 12.4;
|
||||||
};
|
};
|
||||||
|
4ECA496328FD590000085365 = {
|
||||||
|
CreatedOnToolsVersion = 14.0.1;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */;
|
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */;
|
||||||
|
@ -455,6 +546,7 @@
|
||||||
0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */,
|
0BEA5C241F7B8F73000D0AB4 /* JitsiMeetCompanion */,
|
||||||
0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */,
|
0BEA5C301F7B8F73000D0AB4 /* JitsiMeetCompanion Extension */,
|
||||||
4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */,
|
4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */,
|
||||||
|
4ECA496328FD590000085365 /* WidgetsExtension */,
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
/* End PBXProject section */
|
/* End PBXProject section */
|
||||||
|
@ -494,6 +586,14 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4ECA496228FD590000085365 /* Resources */ = {
|
||||||
|
isa = PBXResourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4ECA496D28FD590000085365 /* Assets.xcassets in Resources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXResourcesBuildPhase section */
|
/* End PBXResourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXShellScriptBuildPhase section */
|
/* Begin PBXShellScriptBuildPhase section */
|
||||||
|
@ -543,7 +643,7 @@
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n \n /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\nfi\n";
|
shellScript = "if test \"$PRODUCT_BUNDLE_IDENTIFIER\" = \"com.atlassian.JitsiMeet.ios\"; then\n ENTITLEMENTS_PLIST=\"$PROJECT_DIR/app.entitlements\"\n \n /usr/libexec/PlistBuddy -c \"Add :com.apple.developer.avfoundation.multitasking-camera-access bool 1\" $ENTITLEMENTS_PLIST\nfi\n";
|
||||||
};
|
};
|
||||||
69BC5020DBE393B56BD76636 /* [CP] Check Pods Manifest.lock */ = {
|
58E2CB346F2C2A873294F481 /* [CP] Check Pods Manifest.lock */ = {
|
||||||
isa = PBXShellScriptBuildPhase;
|
isa = PBXShellScriptBuildPhase;
|
||||||
buildActionMask = 2147483647;
|
buildActionMask = 2147483647;
|
||||||
files = (
|
files = (
|
||||||
|
@ -642,8 +742,10 @@
|
||||||
files = (
|
files = (
|
||||||
0B412F1F1EDEE6E800B1A0A6 /* ViewController.m in Sources */,
|
0B412F1F1EDEE6E800B1A0A6 /* ViewController.m in Sources */,
|
||||||
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
|
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
|
||||||
|
4EBB458E2902E85B00855769 /* WidgetKitHelper.swift in Sources */,
|
||||||
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */,
|
DE4C456121DE1E4E00EA0709 /* FIRUtilities.m in Sources */,
|
||||||
13B07FC11A68108700A75B9A /* main.m in Sources */,
|
13B07FC11A68108700A75B9A /* main.m in Sources */,
|
||||||
|
4EBB458A28FFFD4100855769 /* RoutesHandler.m in Sources */,
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
@ -659,6 +761,19 @@
|
||||||
);
|
);
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
};
|
};
|
||||||
|
4ECA496028FD590000085365 /* Sources */ = {
|
||||||
|
isa = PBXSourcesBuildPhase;
|
||||||
|
buildActionMask = 2147483647;
|
||||||
|
files = (
|
||||||
|
4ECA496B28FD590000085365 /* Widgets.swift in Sources */,
|
||||||
|
4E6920B828FD84D700645D9E /* DarwinNotificationsObserver.swift in Sources */,
|
||||||
|
4E46D954290FF55600761DEF /* LockScreenLeaveMeetingWidget.swift in Sources */,
|
||||||
|
4EA73DA3290C1D6C00A16FF8 /* MeetingState.swift in Sources */,
|
||||||
|
4E6A3E17291024B900E6B0B5 /* Provider.swift in Sources */,
|
||||||
|
4E46D952290FF39E00761DEF /* LockScreenMuteAudioWidget.swift in Sources */,
|
||||||
|
);
|
||||||
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
|
};
|
||||||
/* End PBXSourcesBuildPhase section */
|
/* End PBXSourcesBuildPhase section */
|
||||||
|
|
||||||
/* Begin PBXTargetDependency section */
|
/* Begin PBXTargetDependency section */
|
||||||
|
@ -677,6 +792,11 @@
|
||||||
target = 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */;
|
target = 4EB06022260E026600F524C5 /* JitsiMeetBroadcastExtension */;
|
||||||
targetProxy = 4EB06029260E026600F524C5 /* PBXContainerItemProxy */;
|
targetProxy = 4EB06029260E026600F524C5 /* PBXContainerItemProxy */;
|
||||||
};
|
};
|
||||||
|
4ECA497028FD590000085365 /* PBXTargetDependency */ = {
|
||||||
|
isa = PBXTargetDependency;
|
||||||
|
target = 4ECA496328FD590000085365 /* WidgetsExtension */;
|
||||||
|
targetProxy = 4ECA496F28FD590000085365 /* PBXContainerItemProxy */;
|
||||||
|
};
|
||||||
/* End PBXTargetDependency section */
|
/* End PBXTargetDependency section */
|
||||||
|
|
||||||
/* Begin PBXVariantGroup section */
|
/* Begin PBXVariantGroup section */
|
||||||
|
@ -845,11 +965,12 @@
|
||||||
};
|
};
|
||||||
13B07F941A680F5B00A75B9A /* Debug */ = {
|
13B07F941A680F5B00A75B9A /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 756FCE06C08D9B947653C98A /* Pods-JitsiMeet.debug.xcconfig */;
|
baseConfigurationReference = 7052390E12D7319D36D8E4CA /* Pods-JitsiMeet.debug.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconDebug;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
@ -871,16 +992,20 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||||
PRODUCT_NAME = "jitsi-meet";
|
PRODUCT_NAME = "jitsi-meet";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "src/JitsiMeet-Bridging-Header.h";
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Debug;
|
name = Debug;
|
||||||
};
|
};
|
||||||
13B07F951A680F5B00A75B9A /* Release */ = {
|
13B07F951A680F5B00A75B9A /* Release */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
baseConfigurationReference = 3E0F4ED943C0B12BE77F6B45 /* Pods-JitsiMeet.release.xcconfig */;
|
baseConfigurationReference = 8CAA3C5A38E868335D1C1EC1 /* Pods-JitsiMeet.release.xcconfig */;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||||
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
ARCHS = "$(ARCHS_STANDARD_64_BIT)";
|
||||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;
|
ASSETCATALOG_COMPILER_APPICON_NAME = AppIconRelease;
|
||||||
|
CLANG_ENABLE_MODULES = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
CODE_SIGN_ENTITLEMENTS = app.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
@ -901,6 +1026,8 @@
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet;
|
||||||
PRODUCT_NAME = "jitsi-meet";
|
PRODUCT_NAME = "jitsi-meet";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
SWIFT_OBJC_BRIDGING_HEADER = "src/JitsiMeet-Bridging-Header.h";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
@ -973,6 +1100,91 @@
|
||||||
};
|
};
|
||||||
name = Release;
|
name = Release;
|
||||||
};
|
};
|
||||||
|
4ECA497228FD590100085365 /* Debug */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = dwarf;
|
||||||
|
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = "Widgets Extension/Info.plist";
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = Widgets;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Facebook. All rights reserved.";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@executable_path/../../Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.widgets.extension;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Debug;
|
||||||
|
};
|
||||||
|
4ECA497328FD590100085365 /* Release */ = {
|
||||||
|
isa = XCBuildConfiguration;
|
||||||
|
buildSettings = {
|
||||||
|
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
|
||||||
|
ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground;
|
||||||
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
|
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
|
||||||
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||||
|
CLANG_ENABLE_OBJC_WEAK = YES;
|
||||||
|
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
|
||||||
|
CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
|
||||||
|
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
|
||||||
|
CODE_SIGN_ENTITLEMENTS = WidgetsExtension.entitlements;
|
||||||
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
COPY_PHASE_STRIP = NO;
|
||||||
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
|
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||||
|
DEVELOPMENT_TEAM = FC967L3QRG;
|
||||||
|
GCC_C_LANGUAGE_STANDARD = gnu11;
|
||||||
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
|
INFOPLIST_FILE = "Widgets Extension/Info.plist";
|
||||||
|
INFOPLIST_KEY_CFBundleDisplayName = Widgets;
|
||||||
|
INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 Facebook. All rights reserved.";
|
||||||
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||||
|
LD_RUNPATH_SEARCH_PATHS = (
|
||||||
|
"$(inherited)",
|
||||||
|
"@executable_path/Frameworks",
|
||||||
|
"@executable_path/../../Frameworks",
|
||||||
|
);
|
||||||
|
MARKETING_VERSION = 1.0;
|
||||||
|
MTL_FAST_MATH = YES;
|
||||||
|
PRODUCT_BUNDLE_IDENTIFIER = org.jitsi.meet.widgets.extension;
|
||||||
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
|
SKIP_INSTALL = YES;
|
||||||
|
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||||
|
SWIFT_OPTIMIZATION_LEVEL = "-O";
|
||||||
|
SWIFT_VERSION = 5.0;
|
||||||
|
TARGETED_DEVICE_FAMILY = "1,2";
|
||||||
|
};
|
||||||
|
name = Release;
|
||||||
|
};
|
||||||
83CBBA201A601CBA00E9B192 /* Debug */ = {
|
83CBBA201A601CBA00E9B192 /* Debug */ = {
|
||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
|
@ -1126,6 +1338,15 @@
|
||||||
defaultConfigurationIsVisible = 0;
|
defaultConfigurationIsVisible = 0;
|
||||||
defaultConfigurationName = Release;
|
defaultConfigurationName = Release;
|
||||||
};
|
};
|
||||||
|
4ECA497428FD590100085365 /* Build configuration list for PBXNativeTarget "WidgetsExtension" */ = {
|
||||||
|
isa = XCConfigurationList;
|
||||||
|
buildConfigurations = (
|
||||||
|
4ECA497228FD590100085365 /* Debug */,
|
||||||
|
4ECA497328FD590100085365 /* Release */,
|
||||||
|
);
|
||||||
|
defaultConfigurationIsVisible = 0;
|
||||||
|
defaultConfigurationName = Release;
|
||||||
|
};
|
||||||
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */ = {
|
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "app" */ = {
|
||||||
isa = XCConfigurationList;
|
isa = XCConfigurationList;
|
||||||
buildConfigurations = (
|
buildConfigurations = (
|
||||||
|
|
|
@ -0,0 +1,124 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<Scheme
|
||||||
|
LastUpgradeVersion = "1400"
|
||||||
|
wasCreatedForAppExtension = "YES"
|
||||||
|
version = "2.0">
|
||||||
|
<BuildAction
|
||||||
|
parallelizeBuildables = "YES"
|
||||||
|
buildImplicitDependencies = "YES">
|
||||||
|
<BuildActionEntries>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4ECA496328FD590000085365"
|
||||||
|
BuildableName = "WidgetsExtension.appex"
|
||||||
|
BlueprintName = "WidgetsExtension"
|
||||||
|
ReferencedContainer = "container:app.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
<BuildActionEntry
|
||||||
|
buildForTesting = "YES"
|
||||||
|
buildForRunning = "YES"
|
||||||
|
buildForProfiling = "YES"
|
||||||
|
buildForArchiving = "YES"
|
||||||
|
buildForAnalyzing = "YES">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
|
BuildableName = "jitsi-meet.app"
|
||||||
|
BlueprintName = "JitsiMeet"
|
||||||
|
ReferencedContainer = "container:app.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildActionEntry>
|
||||||
|
</BuildActionEntries>
|
||||||
|
</BuildAction>
|
||||||
|
<TestAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||||
|
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||||
|
<Testables>
|
||||||
|
</Testables>
|
||||||
|
</TestAction>
|
||||||
|
<LaunchAction
|
||||||
|
buildConfiguration = "Debug"
|
||||||
|
selectedDebuggerIdentifier = ""
|
||||||
|
selectedLauncherIdentifier = "Xcode.IDEFoundation.Launcher.PosixSpawn"
|
||||||
|
launchStyle = "0"
|
||||||
|
askForAppToLaunch = "Yes"
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
ignoresPersistentStateOnLaunch = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
debugServiceExtension = "internal"
|
||||||
|
allowLocationSimulation = "YES"
|
||||||
|
launchAutomaticallySubstyle = "2">
|
||||||
|
<RemoteRunnable
|
||||||
|
runnableDebuggingMode = "2"
|
||||||
|
BundleIdentifier = "com.apple.springboard">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "4ECA496328FD590000085365"
|
||||||
|
BuildableName = "WidgetsExtension.appex"
|
||||||
|
BlueprintName = "WidgetsExtension"
|
||||||
|
ReferencedContainer = "container:app.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</RemoteRunnable>
|
||||||
|
<MacroExpansion>
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
|
BuildableName = "jitsi-meet.app"
|
||||||
|
BlueprintName = "JitsiMeet"
|
||||||
|
ReferencedContainer = "container:app.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</MacroExpansion>
|
||||||
|
<EnvironmentVariables>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "_XCWidgetKind"
|
||||||
|
value = "LockScreenLeaveMeetingWidget"
|
||||||
|
isEnabled = "YES">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "_XCWidgetDefaultView"
|
||||||
|
value = "timeline"
|
||||||
|
isEnabled = "NO">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
<EnvironmentVariable
|
||||||
|
key = "_XCWidgetFamily"
|
||||||
|
value = "medium"
|
||||||
|
isEnabled = "NO">
|
||||||
|
</EnvironmentVariable>
|
||||||
|
</EnvironmentVariables>
|
||||||
|
</LaunchAction>
|
||||||
|
<ProfileAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||||
|
savedToolIdentifier = ""
|
||||||
|
useCustomWorkingDirectory = "NO"
|
||||||
|
debugDocumentVersioning = "YES"
|
||||||
|
askForAppToLaunch = "Yes"
|
||||||
|
launchAutomaticallySubstyle = "2">
|
||||||
|
<BuildableProductRunnable
|
||||||
|
runnableDebuggingMode = "0">
|
||||||
|
<BuildableReference
|
||||||
|
BuildableIdentifier = "primary"
|
||||||
|
BlueprintIdentifier = "13B07F861A680F5B00A75B9A"
|
||||||
|
BuildableName = "jitsi-meet.app"
|
||||||
|
BlueprintName = "JitsiMeet"
|
||||||
|
ReferencedContainer = "container:app.xcodeproj">
|
||||||
|
</BuildableReference>
|
||||||
|
</BuildableProductRunnable>
|
||||||
|
</ProfileAction>
|
||||||
|
<AnalyzeAction
|
||||||
|
buildConfiguration = "Debug">
|
||||||
|
</AnalyzeAction>
|
||||||
|
<ArchiveAction
|
||||||
|
buildConfiguration = "Release"
|
||||||
|
revealArchiveInOrganizer = "YES">
|
||||||
|
</ArchiveAction>
|
||||||
|
</Scheme>
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
#import "AppDelegate.h"
|
#import "AppDelegate.h"
|
||||||
#import "FIRUtilities.h"
|
#import "FIRUtilities.h"
|
||||||
|
#import "RoutesHandler.h"
|
||||||
#import "Types.h"
|
#import "Types.h"
|
||||||
#import "ViewController.h"
|
#import "ViewController.h"
|
||||||
|
|
||||||
|
@ -108,6 +109,10 @@
|
||||||
return NO;
|
return NO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ([[RoutesHandler sharedInstance] routeURL:url]) {
|
||||||
|
return YES;
|
||||||
|
}
|
||||||
|
|
||||||
NSURL *openUrl = url;
|
NSURL *openUrl = url;
|
||||||
|
|
||||||
if ([FIRUtilities appContainsRealServiceInfoPlist]) {
|
if ([FIRUtilities appContainsRealServiceInfoPlist]) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"info" : {
|
"info" : {
|
||||||
"version" : 1,
|
"author" : "xcode",
|
||||||
"author" : "xcode"
|
"version" : 1
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
//
|
||||||
|
// Use this file to import your target's public headers that you would like to expose to Swift.
|
||||||
|
//
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
//
|
||||||
|
// RoutesHandler.h
|
||||||
|
// JitsiMeet
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 19.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import <Foundation/Foundation.h>
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_BEGIN
|
||||||
|
|
||||||
|
@protocol RouteObserving <NSObject>
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) void (^didRouteCallback)(NSString *route);
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface RoutesHandler : NSObject
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance;
|
||||||
|
- (void)registerObserver:(id<RouteObserving>)observer forRoute:(NSString *)route;
|
||||||
|
- (void)unregisterObserver:(id<RouteObserving>)observer;
|
||||||
|
- (BOOL)routeURL:(NSURL *)url;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
NS_ASSUME_NONNULL_END
|
|
@ -0,0 +1,123 @@
|
||||||
|
//
|
||||||
|
// RoutesHandler.m
|
||||||
|
// JitsiMeet
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 19.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
#import "RoutesHandler.h"
|
||||||
|
|
||||||
|
@protocol Routing <NSObject>
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) NSString *route;
|
||||||
|
@property (nonatomic, readonly) id<RouteObserving> observer;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@interface Route: NSObject <Routing>
|
||||||
|
|
||||||
|
@property (nonatomic, readonly) NSString *route;
|
||||||
|
@property (nonatomic, readonly, weak) id<RouteObserving> observer;
|
||||||
|
|
||||||
|
+ (instancetype)routeWithString:(nonnull NSString *)route observer:(id<RouteObserving>)observer;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
|
||||||
|
@implementation RoutesHandler {
|
||||||
|
NSMutableArray *routes;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ (instancetype)sharedInstance {
|
||||||
|
static RoutesHandler *sharedInstance = nil;
|
||||||
|
static dispatch_once_t onceToken;
|
||||||
|
dispatch_once(&onceToken, ^{
|
||||||
|
sharedInstance = [[self alloc] init];
|
||||||
|
});
|
||||||
|
|
||||||
|
return sharedInstance;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)init {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
routes = [[NSMutableArray alloc] init];
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)registerObserver:(id<RouteObserving>)observer forRoute:(NSString *)route {
|
||||||
|
[routes addObject:[Route routeWithString:route observer:observer]];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)unregisterObserver:(id<RouteObserving>)observer {
|
||||||
|
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||||
|
return evaluatedObject.observer == nil || evaluatedObject.observer == observer;
|
||||||
|
}];
|
||||||
|
NSArray *routesToClear = [routes filteredArrayUsingPredicate:predicate];
|
||||||
|
[routes removeObjectsInArray:routesToClear];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (BOOL)routeURL:(NSURL *)url {
|
||||||
|
[self clearRoutes];
|
||||||
|
|
||||||
|
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:false];
|
||||||
|
if (!components) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
NSString *route = components.path;
|
||||||
|
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||||
|
return [evaluatedObject.route isEqualToString:route];
|
||||||
|
}];
|
||||||
|
NSArray *routesToHandle = [routes filteredArrayUsingPredicate:predicate];
|
||||||
|
if ([routesToHandle count] == 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (id<Routing> route in routesToHandle) {
|
||||||
|
route.observer.didRouteCallback(route.route);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
- (void)clearRoutes {
|
||||||
|
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id<Routing> _Nullable evaluatedObject, NSDictionary<NSString *,id> * _Nullable bindings) {
|
||||||
|
return evaluatedObject.observer == nil;
|
||||||
|
}];
|
||||||
|
NSArray *routesToClear = [routes filteredArrayUsingPredicate:predicate];
|
||||||
|
[routes removeObjectsInArray:routesToClear];
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
|
||||||
|
#pragma mark -
|
||||||
|
|
||||||
|
@interface Route()
|
||||||
|
|
||||||
|
@property (nonatomic, nonnull, copy) NSString *route;
|
||||||
|
@property (nonatomic, weak) id<RouteObserving> observer;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
|
@implementation Route
|
||||||
|
|
||||||
|
+ (instancetype)routeWithString:(nonnull NSString *)route observer:(nonnull id<RouteObserving>)observer {
|
||||||
|
return [[Route alloc] initWithString:route observer:observer];
|
||||||
|
}
|
||||||
|
|
||||||
|
- (instancetype)initWithString:(nonnull NSString *)route observer:(nonnull id<RouteObserving>)observer {
|
||||||
|
self = [super init];
|
||||||
|
if (self) {
|
||||||
|
self.route = route;
|
||||||
|
self.observer = observer;
|
||||||
|
}
|
||||||
|
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
|
@ -21,8 +21,16 @@
|
||||||
@import JitsiMeetSDK;
|
@import JitsiMeetSDK;
|
||||||
|
|
||||||
#import "Types.h"
|
#import "Types.h"
|
||||||
|
#import "RoutesHandler.h"
|
||||||
#import "ViewController.h"
|
#import "ViewController.h"
|
||||||
|
#import "jitsi_meet-Swift.h"
|
||||||
|
|
||||||
|
@interface ViewController() <RouteObserving>
|
||||||
|
|
||||||
|
@property (nonatomic, nonnull, copy) void (^didRouteCallback)(NSString *);
|
||||||
|
@property (nonatomic, assign) BOOL audioMuted;
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
@implementation ViewController
|
@implementation ViewController
|
||||||
|
|
||||||
|
@ -33,6 +41,8 @@
|
||||||
view.delegate = self;
|
view.delegate = self;
|
||||||
|
|
||||||
[view join:[[JitsiMeet sharedInstance] getInitialConferenceOptions]];
|
[view join:[[JitsiMeet sharedInstance] getInitialConferenceOptions]];
|
||||||
|
|
||||||
|
[self registerRouteObserver];
|
||||||
}
|
}
|
||||||
|
|
||||||
// JitsiMeetViewDelegate
|
// JitsiMeetViewDelegate
|
||||||
|
@ -54,6 +64,10 @@
|
||||||
- (void)conferenceJoined:(NSDictionary *)data {
|
- (void)conferenceJoined:(NSDictionary *)data {
|
||||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data];
|
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_JOINED" withData:data];
|
||||||
|
|
||||||
|
self.audioMuted = [[data objectForKey:@"isAudioMuted"] boolValue];
|
||||||
|
|
||||||
|
[self refreshWidgetState:self.audioMuted];
|
||||||
|
|
||||||
// Register a NSUserActivity for this conference so it can be invoked as a
|
// Register a NSUserActivity for this conference so it can be invoked as a
|
||||||
// Siri shortcut.
|
// Siri shortcut.
|
||||||
NSUserActivity *userActivity
|
NSUserActivity *userActivity
|
||||||
|
@ -82,6 +96,12 @@
|
||||||
|
|
||||||
- (void)conferenceTerminated:(NSDictionary *)data {
|
- (void)conferenceTerminated:(NSDictionary *)data {
|
||||||
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_TERMINATED" withData:data];
|
[self _onJitsiMeetViewDelegateEvent:@"CONFERENCE_TERMINATED" withData:data];
|
||||||
|
|
||||||
|
NSURL *sharedContainer = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.org.jitsi.meet.appgroup"];
|
||||||
|
NSURL *widgetStateFileURL = [sharedContainer URLByAppendingPathComponent:@"widgetState"];
|
||||||
|
[[NSFileManager defaultManager] removeItemAtURL:widgetStateFileURL error:nil];
|
||||||
|
|
||||||
|
[WidgetKitHelper reloadAllWidgets];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)conferenceWillJoin:(NSDictionary *)data {
|
- (void)conferenceWillJoin:(NSDictionary *)data {
|
||||||
|
@ -108,6 +128,15 @@
|
||||||
|
|
||||||
- (void)audioMutedChanged:(NSDictionary *)data {
|
- (void)audioMutedChanged:(NSDictionary *)data {
|
||||||
NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]);
|
NSLog(@"%@%@", @"Audio muted changed: ", data[@"muted"]);
|
||||||
|
// CFNotificationCenterRef notificationCenter = CFNotificationCenterGetDarwinNotifyCenter();
|
||||||
|
// CFNotificationCenterPostNotification(notificationCenter,
|
||||||
|
// (__bridge CFStringRef)@"iOS_MeetingMutedChanged",
|
||||||
|
// NULL,
|
||||||
|
// NULL,
|
||||||
|
// true);
|
||||||
|
|
||||||
|
self.audioMuted = [[data objectForKey:@"muted"] boolValue];
|
||||||
|
[self refreshWidgetState:self.audioMuted];
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)endpointTextMessageReceived:(NSDictionary *)data {
|
- (void)endpointTextMessageReceived:(NSDictionary *)data {
|
||||||
|
@ -132,9 +161,40 @@
|
||||||
|
|
||||||
#pragma mark - Helpers
|
#pragma mark - Helpers
|
||||||
|
|
||||||
|
- (void)registerRouteObserver {
|
||||||
|
__weak typeof(self) weakSelf = self;
|
||||||
|
__weak JitsiMeetView *view = (JitsiMeetView *)self.view;
|
||||||
|
self.didRouteCallback = ^(NSString *route) {
|
||||||
|
if ([route isEqual:@"meet/toggleAudioMute"]) {
|
||||||
|
weakSelf.audioMuted = !weakSelf.audioMuted;
|
||||||
|
[view setAudioMuted:weakSelf.audioMuted];
|
||||||
|
} else if ([route isEqualToString:@"meet/leaveMeeting"]) {
|
||||||
|
[weakSelf terminate];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
[[RoutesHandler sharedInstance] registerObserver:self forRoute:@"meet/toggleAudioMute"];
|
||||||
|
[[RoutesHandler sharedInstance] registerObserver:self forRoute:@"meet/leaveMeeting"];
|
||||||
|
}
|
||||||
|
|
||||||
- (void)terminate {
|
- (void)terminate {
|
||||||
JitsiMeetView *view = (JitsiMeetView *) self.view;
|
JitsiMeetView *view = (JitsiMeetView *) self.view;
|
||||||
[view leave];
|
[view leave];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void)refreshWidgetState:(BOOL)audioMuted {
|
||||||
|
// let sharedContainer = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: Constants.appGroupIdentifier)
|
||||||
|
// return sharedContainer?.appendingPathComponent("rtc_SSFD").path ?? ""
|
||||||
|
|
||||||
|
NSURL *sharedContainer = [[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:@"group.org.jitsi.meet.appgroup"];
|
||||||
|
NSURL *widgetStateFileURL = [sharedContainer URLByAppendingPathComponent:@"widgetState"];
|
||||||
|
|
||||||
|
NSDictionary *meetingState = @{@"audioMuted": @(audioMuted)};
|
||||||
|
if (![meetingState writeToURL:widgetStateFileURL atomically:true]) {
|
||||||
|
NSLog(@"error saving state file");
|
||||||
|
}
|
||||||
|
|
||||||
|
[WidgetKitHelper reloadAllWidgets];
|
||||||
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
//
|
||||||
|
// WidgetKitHelper.swift
|
||||||
|
// JitsiMeet
|
||||||
|
//
|
||||||
|
// Created by Alex Bumbu on 21.10.2022.
|
||||||
|
//
|
||||||
|
|
||||||
|
import WidgetKit
|
||||||
|
|
||||||
|
@available(iOS 14.0, *)
|
||||||
|
@objcMembers final class WidgetKitHelper: NSObject {
|
||||||
|
|
||||||
|
class func reloadAllWidgets(){
|
||||||
|
|
||||||
|
#if arch(arm64) || arch(i386) || arch(x86_64)
|
||||||
|
WidgetCenter.shared.reloadAllTimelines()
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue