Adds ReactEventEmitter and full handling of broadcastStarted event

This commit is contained in:
Tiago Jacobs
2022-03-11 19:55:12 -03:00
parent 3c17cd7aed
commit a4ce10b000
52 changed files with 1737 additions and 1579 deletions

178
LICENSE
View File

@@ -1,21 +1,165 @@
MIT License
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (c) 2021 BigBlueButton Inc
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@@ -2,6 +2,9 @@
This repository contains BigBlueButton react-native component, that's used in our [sample implementation](https://github.com/bigbluebutton/bigbluebutton-mobile).
![version](https://img.shields.io/npm/v/bigbluebutton-mobile-sdk.svg)
## Installation
```sh
@@ -11,17 +14,25 @@ npm install bigbluebutton-mobile-sdk
## Usage
```js
import { BigbluebuttonMobileSdkView } from "bigbluebutton-mobile-sdk";
import { BigBlueButtonMobile } from "bigbluebutton-mobile-sdk";
// ...
<BigbluebuttonMobileSdkView color="tomato" />
<BigbluebuttonMobile
broadcastAppBundleId="org.bigbluebutton.mobile-sdk.example.BigbluebuttonMobileSdkBroadcastUploadExtension"
url="https://demo.bigbluebutton.org"
style={styles.box}
/>
```
## Contributing
See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.
## WebRTC
This project references the library [WebRTC](https://webrtc.org).
## License
MIT
LGPL-3.0

View File

@@ -54,6 +54,7 @@ repositories {
}
dependencies {
implementation project(':react-native-webview')
//noinspection GradleDynamicVersion
implementation "com.facebook.react:react-native:+" // From node_modules
}

View File

@@ -9,8 +9,8 @@ import com.facebook.react.uimanager.SimpleViewManager;
import com.facebook.react.uimanager.ThemedReactContext;
import com.facebook.react.uimanager.annotations.ReactProp;
public class BigbluebuttonMobileSdkViewManager extends SimpleViewManager<View> {
public static final String REACT_CLASS = "BigbluebuttonMobileSdkView";
public class BigbluebuttonMobileManager extends SimpleViewManager<View> {
public static final String REACT_CLASS = "BigbluebuttonMobile";
@Override
@NonNull

View File

@@ -17,6 +17,6 @@ public class BigbluebuttonMobileSdkPackage implements ReactPackage {
@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Arrays.<ViewManager>asList(new BigbluebuttonMobileSdkViewManager());
return Arrays.<ViewManager>asList(new BigbluebuttonMobileManager());
}
}

View File

@@ -10,11 +10,12 @@ Pod::Spec.new do |s|
s.license = package["license"]
s.authors = package["author"]
s.platforms = { :ios => "10.0" }
s.platforms = { :ios => "14.7" }
s.source = { :git => "https://github.com/bigbluebutton/bigbluebutton-mobile-sdk.git", :tag => "#{s.version}" }
s.source_files = "ios/**/*.{h,m,mm,swift}"
s.dependency "React-Core"
s.dependency "WebRTC-lib"
s.dependency "bigbluebutton-mobile-sdk-common"
end

7
common/README.md Normal file
View File

@@ -0,0 +1,7 @@
# Common
In this folder you will find all classes that are shared by Broadcast Upload Extension and BigBlueButtonMobile application.
This "sharing" is only at compile time (to avoid code duplication), in IOS they are completely different applications.

View File

@@ -0,0 +1,19 @@
require "json"
package = JSON.parse(File.read(File.join(__dir__, "../package.json")))
Pod::Spec.new do |s|
s.name = "bigbluebutton-mobile-sdk-common"
s.version = package["version"]
s.summary = package["description"]
s.homepage = package["homepage"]
s.license = package["license"]
s.authors = package["author"]
s.platforms = { :ios => "14.7" }
s.source = { :git => "https://github.com/bigbluebutton/bigbluebutton-mobile-sdk.git", :tag => "#{s.version}" }
s.source_files = "ios/**/*.{h,m,mm,swift}"
s.dependency "WebRTC-lib"
end

View File

@@ -0,0 +1,71 @@
//
// BBBSampleHandler.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import ReplayKit
import os
open class BBBSampleHandler : RPBroadcastSampleHandler {
// Logger (these messages are displayed in the console application)
private var logger = os.Logger(subsystem: "BigBlueButtonMobileSDK", category: "BBBSampleHandler")
private var appGroupName:String = "";
open func setAppGroupName(appGroupName:String) {
self.appGroupName = appGroupName;
}
open override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
logger.info("ReplayKit2 event - broadcastStarted")
logger.info("ReplayKit2 event - broadcastStarted - persisting information on UserDefaults")
BBBSharedData
.getUserDefaults(appGroupName: self.appGroupName)
.set(BBBSharedData.generatePayload(), forKey: BBBSharedData.SharedData.broadcastStarted)
}
open override func broadcastPaused() {
logger.info("ReplayKit2 event - broadcastPaused")
logger.info("ReplayKit2 event - broadcastPaused - persisting information on UserDefaults")
BBBSharedData
.getUserDefaults(appGroupName: self.appGroupName)
.set(BBBSharedData.generatePayload(), forKey: BBBSharedData.SharedData.broadcastPaused)
}
open override func broadcastResumed() {
logger.info("ReplayKit2 event - broadcastResumed")
logger.info("ReplayKit2 event - broadcastResumed - persisting information on UserDefaults")
BBBSharedData
.getUserDefaults(appGroupName: self.appGroupName)
.set(BBBSharedData.generatePayload(), forKey: BBBSharedData.SharedData.broadcastResumed)
}
open override func broadcastFinished() {
logger.info("ReplayKit2 event - broadcastFinished")
logger.info("ReplayKit2 event - broadcastFinished - persisting information on UserDefaults")
BBBSharedData
.getUserDefaults(appGroupName: self.appGroupName)
.set(BBBSharedData.generatePayload(), forKey: BBBSharedData.SharedData.broadcastFinished)
}
open override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) {
switch sampleBufferType {
case RPSampleBufferType.video:
logger.trace("ReplayKit2 event - processSampleBuffer(video)")
break
case RPSampleBufferType.audioApp:
logger.trace("ReplayKit2 event - processSampleBuffer(audioApp)")
break
case RPSampleBufferType.audioMic:
logger.trace("ReplayKit2 event - processSampleBuffer(audioMic)")
break
@unknown default:
// Handle other sample buffer types
fatalError("Unknown type of sample buffer")
}
}
}

View File

@@ -0,0 +1,42 @@
//
// BBBSharedData.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import ReplayKit
import os
open class BBBSharedData {
// Logger (these messages are displayed in the console application)
private static var logger = os.Logger(subsystem: "BigBlueButtonMobileSDK", category: "BBBSharedData")
private static var userDefaults:UserDefaults?
private static var userDefaultsGroup:String?
public enum SharedData {
public static let broadcastStarted = "broadcastStarted"
public static let broadcastPaused = "broadcastPaused"
public static let broadcastResumed = "broadcastResumed"
public static let broadcastFinished = "broadcastFinished"
}
public static func getUserDefaults(appGroupName:String) -> UserDefaults {
if(userDefaults == nil || userDefaultsGroup == nil || userDefaultsGroup != appGroupName) {
logger.info("getUserDefaults \(appGroupName) -> Created")
userDefaults = UserDefaults.init(suiteName: appGroupName)
userDefaultsGroup = appGroupName
} else {
logger.info("getUserDefaults \(appGroupName) -> Reused")
}
return userDefaults!
}
// Generates a unique payload
public static func generatePayload() -> String {
// TODO - replace by UUID
let now=String(DateFormatter.localizedString(from: Date(), dateStyle: .medium, timeStyle: .short));
return "{\"timestamp\": \(now)}";
}
}

View File

@@ -0,0 +1,25 @@
//
// UserDefaults.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
extension UserDefaults {
@objc open dynamic var broadcastStarted: String {
return string(forKey: BBBSharedData.SharedData.broadcastStarted) ?? ""
}
@objc open dynamic var broadcastPaused: String {
return string(forKey: BBBSharedData.SharedData.broadcastPaused) ?? ""
}
@objc open dynamic var broadcastResumed: String {
return string(forKey: BBBSharedData.SharedData.broadcastResumed) ?? ""
}
@objc open dynamic var broadcastFinished: String {
return string(forKey: BBBSharedData.SharedData.broadcastFinished) ?? ""
}
}

View File

@@ -1,4 +1,6 @@
rootProject.name = 'BigbluebuttonMobileSdkExample'
include ':react-native-webview'
project(':react-native-webview').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-webview/android')
apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings)
include ':app'

View File

@@ -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.bigbluebutton.mobile-sdk.example.DE1E7B04</string>
</array>
</dict>
</plist>

View File

@@ -0,0 +1,15 @@
<?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.broadcast-services-upload</string>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_MODULE_NAME).SampleHandler</string>
<key>RPBroadcastProcessMode</key>
<string>RPBroadcastProcessModeSampleBuffer</string>
</dict>
</dict>
</plist>

View File

@@ -0,0 +1,16 @@
//
// SampleHandler.swift
// BigBlueButtonMobileSdkBroadcastExample
//
// Created by Tiago Daniel Jacobs on 15/02/22.
//
import ReplayKit
import bigbluebutton_mobile_sdk_common
class SampleHandler: BBBSampleHandler {
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) {
super.setAppGroupName(appGroupName: Constants.appGroupName)
super.broadcastStarted(withSetupInfo: setupInfo)
}
}

View File

@@ -1,3 +0,0 @@
//
// Use this file to import your target's public headers that you would like to expose to Swift.
//

View File

@@ -7,116 +7,101 @@
objects = {
/* Begin PBXBuildFile section */
00E356F31AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m */; };
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
13B07FBF1A68108700A75B9A /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
13B07FC11A68108700A75B9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; };
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; };
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; };
2DCD954D1E0B4F2C00145EB5 /* BigbluebuttonMobileSdkExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m */; };
4C39C56BAD484C67AA576FFA /* libPods-BigbluebuttonMobileSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3E69C5B9553B26FBA2DF04 /* libPods-BigbluebuttonMobileSdkExample.a */; };
81AB9BB82411601600AC10FF /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */; };
D4107C11428E565249543452 /* libPods-BigbluebuttonMobileSdkExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F8315799A5C1BF7D3955FE7A /* libPods-BigbluebuttonMobileSdkExample.a */; };
E34840357A40CF330A083CD4 /* libPods-BigBlueButtonMobileSdkBroadcastExample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B60F7CB33D3D557C0DBFB9A /* libPods-BigBlueButtonMobileSdkBroadcastExample.a */; };
F1C81DD727BC0E5800BC9C2F /* ReplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1CB754927BBFB61007E6C31 /* ReplayKit.framework */; };
F1C81DDA27BC0E5800BC9C2F /* SampleHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1C81DD927BC0E5800BC9C2F /* SampleHandler.swift */; };
F1C81DDE27BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = F1C81DD627BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
F1CF7F4627D1A4CB00E0C7F1 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1CF7F4527D1A4CB00E0C7F1 /* Constants.swift */; };
F1CF7F4827D1AAAF00E0C7F1 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1CF7F4727D1AAAF00E0C7F1 /* AppDelegate.swift */; };
F1CF7F4A27D1AABD00E0C7F1 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = F1CF7F4927D1AABD00E0C7F1 /* Constants.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
00E356F41AD99517003FC87E /* PBXContainerItemProxy */ = {
F1C81DDC27BC0E5800BC9C2F /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 13B07F861A680F5B00A75B9A;
remoteInfo = BigbluebuttonMobileSdkExample;
};
2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = 83CBB9F71A601CBA00E9B192 /* Project object */;
proxyType = 1;
remoteGlobalIDString = 2D02E47A1E0B4A5D006451C7;
remoteInfo = "BigbluebuttonMobileSdkExample-tvOS";
remoteGlobalIDString = F1C81DD527BC0E5800BC9C2F;
remoteInfo = BigBlueButtonMobileSdkBroadcastExample;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
F1CB756127BBFB62007E6C31 /* Embed App Extensions */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 13;
files = (
F1C81DDE27BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex in Embed App Extensions */,
);
name = "Embed App Extensions";
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
008F07F21AC5B25A0029DE68 /* main.jsbundle */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = main.jsbundle; sourceTree = "<group>"; };
00E356EE1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BigbluebuttonMobileSdkExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
00E356F11AD99517003FC87E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
00E356F21AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BigbluebuttonMobileSdkExampleTests.m; sourceTree = "<group>"; };
13B07F961A680F5B00A75B9A /* BigbluebuttonMobileSdkExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BigbluebuttonMobileSdkExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = BigbluebuttonMobileSdkExample/AppDelegate.h; sourceTree = "<group>"; };
13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = BigbluebuttonMobileSdkExample/AppDelegate.m; sourceTree = "<group>"; };
13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = BigbluebuttonMobileSdkExample/Images.xcassets; sourceTree = "<group>"; };
13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = BigbluebuttonMobileSdkExample/Info.plist; sourceTree = "<group>"; };
13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = BigbluebuttonMobileSdkExample/main.m; sourceTree = "<group>"; };
2D02E47B1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "BigbluebuttonMobileSdkExample-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
2D02E4901E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "BigbluebuttonMobileSdkExample-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
47F7ED3B7971BE374F7B8635 /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigbluebuttonMobileSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample.debug.xcconfig"; sourceTree = "<group>"; };
2B60F7CB33D3D557C0DBFB9A /* libPods-BigBlueButtonMobileSdkBroadcastExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BigBlueButtonMobileSdkBroadcastExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
64F9B7FFD471972C20137BD6 /* Pods-BigBlueButtonMobileSdkBroadcastExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigBlueButtonMobileSdkBroadcastExample.debug.xcconfig"; path = "Target Support Files/Pods-BigBlueButtonMobileSdkBroadcastExample/Pods-BigBlueButtonMobileSdkBroadcastExample.debug.xcconfig"; sourceTree = "<group>"; };
7EC638C00C2D62DDC1E73F8E /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigbluebuttonMobileSdkExample.debug.xcconfig"; path = "Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample.debug.xcconfig"; sourceTree = "<group>"; };
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = LaunchScreen.storyboard; path = BigbluebuttonMobileSdkExample/LaunchScreen.storyboard; sourceTree = "<group>"; };
CA3E69C5B9553B26FBA2DF04 /* libPods-BigbluebuttonMobileSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BigbluebuttonMobileSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
E00ACF0FDA8BF921659E2F9A /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigbluebuttonMobileSdkExample.release.xcconfig"; path = "Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample.release.xcconfig"; sourceTree = "<group>"; };
B2C3B4EA07C7BC3E4B51B5D2 /* Pods-BigBlueButtonMobileSdkBroadcastExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigBlueButtonMobileSdkBroadcastExample.release.xcconfig"; path = "Target Support Files/Pods-BigBlueButtonMobileSdkBroadcastExample/Pods-BigBlueButtonMobileSdkBroadcastExample.release.xcconfig"; sourceTree = "<group>"; };
D282348F3CB6D3E26FB51C37 /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-BigbluebuttonMobileSdkExample.release.xcconfig"; path = "Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample.release.xcconfig"; sourceTree = "<group>"; };
ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; };
ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; };
F1C81DD627BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = BigBlueButtonMobileSdkBroadcastExample.appex; sourceTree = BUILT_PRODUCTS_DIR; };
F1C81DD927BC0E5800BC9C2F /* SampleHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SampleHandler.swift; sourceTree = "<group>"; };
F1C81DDB27BC0E5800BC9C2F /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
F1CB754927BBFB61007E6C31 /* ReplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ReplayKit.framework; path = System/Library/Frameworks/ReplayKit.framework; sourceTree = SDKROOT; };
F1CB755527BBFB61007E6C31 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; };
F1CF7F4527D1A4CB00E0C7F1 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
F1CF7F4727D1AAAF00E0C7F1 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AppDelegate.swift; path = BigbluebuttonMobileSdkExample/AppDelegate.swift; sourceTree = "<group>"; };
F1CF7F4927D1AABD00E0C7F1 /* Constants.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = SOURCE_ROOT; };
F1D24A0927D18674003B294F /* swift-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "swift-Bridging-Header.h"; sourceTree = "<group>"; };
F1D24A0C27D18E21003B294F /* BigbluebuttonMobileSdkExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = BigbluebuttonMobileSdkExample.entitlements; path = BigbluebuttonMobileSdkExample/BigbluebuttonMobileSdkExample.entitlements; sourceTree = "<group>"; };
F1D24A0D27D18E32003B294F /* BigBlueButtonMobileSdkBroadcastExample.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = BigBlueButtonMobileSdkBroadcastExample.entitlements; sourceTree = "<group>"; };
F8315799A5C1BF7D3955FE7A /* libPods-BigbluebuttonMobileSdkExample.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-BigbluebuttonMobileSdkExample.a"; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
00E356EB1AD99517003FC87E /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8C1A680F5B00A75B9A /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
4C39C56BAD484C67AA576FFA /* libPods-BigbluebuttonMobileSdkExample.a in Frameworks */,
D4107C11428E565249543452 /* libPods-BigbluebuttonMobileSdkExample.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4781E0B4A5D006451C7 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48D1E0B4A5D006451C7 /* Frameworks */ = {
F1C81DD327BC0E5800BC9C2F /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
F1C81DD727BC0E5800BC9C2F /* ReplayKit.framework in Frameworks */,
E34840357A40CF330A083CD4 /* libPods-BigBlueButtonMobileSdkBroadcastExample.a in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
00E356EF1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests */ = {
isa = PBXGroup;
children = (
00E356F21AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m */,
00E356F01AD99517003FC87E /* Supporting Files */,
);
path = BigbluebuttonMobileSdkExampleTests;
sourceTree = "<group>";
};
00E356F01AD99517003FC87E /* Supporting Files */ = {
isa = PBXGroup;
children = (
00E356F11AD99517003FC87E /* Info.plist */,
);
name = "Supporting Files";
sourceTree = "<group>";
};
13B07FAE1A68108700A75B9A /* BigbluebuttonMobileSdkExample */ = {
isa = PBXGroup;
children = (
F1CF7F4527D1A4CB00E0C7F1 /* Constants.swift */,
F1CF7F4727D1AAAF00E0C7F1 /* AppDelegate.swift */,
F1D24A0C27D18E21003B294F /* BigbluebuttonMobileSdkExample.entitlements */,
008F07F21AC5B25A0029DE68 /* main.jsbundle */,
13B07FAF1A68108700A75B9A /* AppDelegate.h */,
13B07FB01A68108700A75B9A /* AppDelegate.m */,
13B07FB51A68108700A75B9A /* Images.xcassets */,
13B07FB61A68108700A75B9A /* Info.plist */,
81AB9BB72411601600AC10FF /* LaunchScreen.storyboard */,
13B07FB71A68108700A75B9A /* main.m */,
F1D24A0927D18674003B294F /* swift-Bridging-Header.h */,
);
name = BigbluebuttonMobileSdkExample;
sourceTree = "<group>";
@@ -126,7 +111,10 @@
children = (
ED297162215061F000B7C4FE /* JavaScriptCore.framework */,
ED2971642150620600B7C4FE /* JavaScriptCore.framework */,
CA3E69C5B9553B26FBA2DF04 /* libPods-BigbluebuttonMobileSdkExample.a */,
F1CB754927BBFB61007E6C31 /* ReplayKit.framework */,
F1CB755527BBFB61007E6C31 /* UIKit.framework */,
2B60F7CB33D3D557C0DBFB9A /* libPods-BigBlueButtonMobileSdkBroadcastExample.a */,
F8315799A5C1BF7D3955FE7A /* libPods-BigbluebuttonMobileSdkExample.a */,
);
name = Frameworks;
sourceTree = "<group>";
@@ -134,8 +122,10 @@
6B9684456A2045ADE5A6E47E /* Pods */ = {
isa = PBXGroup;
children = (
47F7ED3B7971BE374F7B8635 /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */,
E00ACF0FDA8BF921659E2F9A /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */,
64F9B7FFD471972C20137BD6 /* Pods-BigBlueButtonMobileSdkBroadcastExample.debug.xcconfig */,
B2C3B4EA07C7BC3E4B51B5D2 /* Pods-BigBlueButtonMobileSdkBroadcastExample.release.xcconfig */,
7EC638C00C2D62DDC1E73F8E /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */,
D282348F3CB6D3E26FB51C37 /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@@ -152,7 +142,7 @@
children = (
13B07FAE1A68108700A75B9A /* BigbluebuttonMobileSdkExample */,
832341AE1AAA6A7D00B99B32 /* Libraries */,
00E356EF1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests */,
F1C81DD827BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample */,
83CBBA001A601CBA00E9B192 /* Products */,
2D16E6871FA4F8E400B85C8A /* Frameworks */,
6B9684456A2045ADE5A6E47E /* Pods */,
@@ -166,92 +156,66 @@
isa = PBXGroup;
children = (
13B07F961A680F5B00A75B9A /* BigbluebuttonMobileSdkExample.app */,
00E356EE1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.xctest */,
2D02E47B1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS.app */,
2D02E4901E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOSTests.xctest */,
F1C81DD627BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex */,
);
name = Products;
sourceTree = "<group>";
};
F1C81DD827BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample */ = {
isa = PBXGroup;
children = (
F1D24A0D27D18E32003B294F /* BigBlueButtonMobileSdkBroadcastExample.entitlements */,
F1CF7F4927D1AABD00E0C7F1 /* Constants.swift */,
F1C81DD927BC0E5800BC9C2F /* SampleHandler.swift */,
F1C81DDB27BC0E5800BC9C2F /* Info.plist */,
);
path = BigBlueButtonMobileSdkBroadcastExample;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
00E356ED1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExampleTests" */;
buildPhases = (
00E356EA1AD99517003FC87E /* Sources */,
00E356EB1AD99517003FC87E /* Frameworks */,
00E356EC1AD99517003FC87E /* Resources */,
);
buildRules = (
);
dependencies = (
00E356F51AD99517003FC87E /* PBXTargetDependency */,
);
name = BigbluebuttonMobileSdkExampleTests;
productName = BigbluebuttonMobileSdkExampleTests;
productReference = 00E356EE1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
};
13B07F861A680F5B00A75B9A /* BigbluebuttonMobileSdkExample */ = {
isa = PBXNativeTarget;
buildConfigurationList = 13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample" */;
buildPhases = (
4F0A6FC082772762E3E4C96C /* [CP] Check Pods Manifest.lock */,
595975E3173F1F7163C38D86 /* [CP] Check Pods Manifest.lock */,
FD10A7F022414F080027D42C /* Start Packager */,
13B07F871A680F5B00A75B9A /* Sources */,
13B07F8C1A680F5B00A75B9A /* Frameworks */,
13B07F8E1A680F5B00A75B9A /* Resources */,
00DD1BFF1BD5951E006B06BC /* Bundle React Native code and images */,
C1D60D28B925C94BD88E79D7 /* [CP] Copy Pods Resources */,
E4449C3631C57547AAC3C6FE /* [CP] Embed Pods Frameworks */,
F1CB756127BBFB62007E6C31 /* Embed App Extensions */,
9B21B2DFB2AEE9768BF2AAE9 /* [CP] Embed Pods Frameworks */,
81877DFAFD98A35B2F98ABA0 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
dependencies = (
F1C81DDD27BC0E5800BC9C2F /* PBXTargetDependency */,
);
name = BigbluebuttonMobileSdkExample;
productName = BigbluebuttonMobileSdkExample;
productReference = 13B07F961A680F5B00A75B9A /* BigbluebuttonMobileSdkExample.app */;
productType = "com.apple.product-type.application";
};
2D02E47A1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS */ = {
F1C81DD527BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample-tvOS" */;
buildConfigurationList = F1C81DDF27BC0E5800BC9C2F /* Build configuration list for PBXNativeTarget "BigBlueButtonMobileSdkBroadcastExample" */;
buildPhases = (
FD10A7F122414F3F0027D42C /* Start Packager */,
2D02E4771E0B4A5D006451C7 /* Sources */,
2D02E4781E0B4A5D006451C7 /* Frameworks */,
2D02E4791E0B4A5D006451C7 /* Resources */,
2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */,
E0519D6C71A3BA7DD73ADED6 /* [CP] Check Pods Manifest.lock */,
F1C81DD227BC0E5800BC9C2F /* Sources */,
F1C81DD327BC0E5800BC9C2F /* Frameworks */,
F1C81DD427BC0E5800BC9C2F /* Resources */,
);
buildRules = (
);
dependencies = (
);
name = "BigbluebuttonMobileSdkExample-tvOS";
productName = "BigbluebuttonMobileSdkExample-tvOS";
productReference = 2D02E47B1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS.app */;
productType = "com.apple.product-type.application";
};
2D02E48F1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOSTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample-tvOSTests" */;
buildPhases = (
2D02E48C1E0B4A5D006451C7 /* Sources */,
2D02E48D1E0B4A5D006451C7 /* Frameworks */,
2D02E48E1E0B4A5D006451C7 /* Resources */,
);
buildRules = (
);
dependencies = (
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */,
);
name = "BigbluebuttonMobileSdkExample-tvOSTests";
productName = "BigbluebuttonMobileSdkExample-tvOSTests";
productReference = 2D02E4901E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOSTests.xctest */;
productType = "com.apple.product-type.bundle.unit-test";
name = BigBlueButtonMobileSdkBroadcastExample;
productName = BigBlueButtonMobileSdkBroadcastExample;
productReference = F1C81DD627BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample.appex */;
productType = "com.apple.product-type.app-extension";
};
/* End PBXNativeTarget section */
@@ -259,24 +223,18 @@
83CBB9F71A601CBA00E9B192 /* Project object */ = {
isa = PBXProject;
attributes = {
LastSwiftUpdateCheck = 1320;
LastUpgradeCheck = 1130;
TargetAttributes = {
00E356ED1AD99517003FC87E = {
CreatedOnToolsVersion = 6.2;
TestTargetID = 13B07F861A680F5B00A75B9A;
};
13B07F861A680F5B00A75B9A = {
LastSwiftMigration = 1120;
DevelopmentTeam = N69T9W23TC;
LastSwiftMigration = 1320;
};
2D02E47A1E0B4A5D006451C7 = {
CreatedOnToolsVersion = 8.2.1;
F1C81DD527BC0E5800BC9C2F = {
CreatedOnToolsVersion = 13.2.1;
DevelopmentTeam = N69T9W23TC;
ProvisioningStyle = Automatic;
};
2D02E48F1E0B4A5D006451C7 = {
CreatedOnToolsVersion = 8.2.1;
ProvisioningStyle = Automatic;
TestTargetID = 2D02E47A1E0B4A5D006451C7;
};
};
};
buildConfigurationList = 83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BigbluebuttonMobileSdkExample" */;
@@ -293,21 +251,12 @@
projectRoot = "";
targets = (
13B07F861A680F5B00A75B9A /* BigbluebuttonMobileSdkExample */,
00E356ED1AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests */,
2D02E47A1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS */,
2D02E48F1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOSTests */,
F1C81DD527BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
00E356EC1AD99517003FC87E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F8E1A680F5B00A75B9A /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
@@ -317,15 +266,7 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4791E0B4A5D006451C7 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48E1E0B4A5D006451C7 /* Resources */ = {
F1C81DD427BC0E5800BC9C2F /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -349,21 +290,7 @@
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
2D02E4CB1E0B4B27006451C7 /* Bundle React Native Code And Images */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Bundle React Native Code And Images";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh";
};
4F0A6FC082772762E3E4C96C /* [CP] Check Pods Manifest.lock */ = {
595975E3173F1F7163C38D86 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -385,7 +312,7 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
C1D60D28B925C94BD88E79D7 /* [CP] Copy Pods Resources */ = {
81877DFAFD98A35B2F98ABA0 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -403,7 +330,7 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample-resources.sh\"\n";
showEnvVarsInLog = 0;
};
E4449C3631C57547AAC3C6FE /* [CP] Embed Pods Frameworks */ = {
9B21B2DFB2AEE9768BF2AAE9 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -421,6 +348,28 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-BigbluebuttonMobileSdkExample/Pods-BigbluebuttonMobileSdkExample-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
E0519D6C71A3BA7DD73ADED6 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
"${PODS_PODFILE_DIR_PATH}/Podfile.lock",
"${PODS_ROOT}/Manifest.lock",
);
name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
);
outputPaths = (
"$(DERIVED_FILE_DIR)/Pods-BigBlueButtonMobileSdkBroadcastExample-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
FD10A7F022414F080027D42C /* Start Packager */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
@@ -440,269 +389,94 @@
shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
showEnvVarsInLog = 0;
};
FD10A7F122414F3F0027D42C /* Start Packager */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Start Packager";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "export RCT_METRO_PORT=\"${RCT_METRO_PORT:=8081}\"\necho \"export RCT_METRO_PORT=${RCT_METRO_PORT}\" > \"${SRCROOT}/../node_modules/react-native/scripts/.packager.env\"\nif [ -z \"${RCT_NO_LAUNCH_PACKAGER+xxx}\" ] ; then\n if nc -w 5 -z localhost ${RCT_METRO_PORT} ; then\n if ! curl -s \"http://localhost:${RCT_METRO_PORT}/status\" | grep -q \"packager-status:running\" ; then\n echo \"Port ${RCT_METRO_PORT} already in use, packager is either not running or not running correctly\"\n exit 2\n fi\n else\n open \"$SRCROOT/../node_modules/react-native/scripts/launchPackager.command\" || echo \"Can't start packager automatically\"\n fi\nfi\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
00E356EA1AD99517003FC87E /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
00E356F31AD99517003FC87E /* BigbluebuttonMobileSdkExampleTests.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
13B07F871A680F5B00A75B9A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
13B07FBC1A68108700A75B9A /* AppDelegate.m in Sources */,
13B07FC11A68108700A75B9A /* main.m in Sources */,
F1CF7F4827D1AAAF00E0C7F1 /* AppDelegate.swift in Sources */,
F1CF7F4627D1A4CB00E0C7F1 /* Constants.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E4771E0B4A5D006451C7 /* Sources */ = {
F1C81DD227BC0E5800BC9C2F /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */,
2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
2D02E48C1E0B4A5D006451C7 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2DCD954D1E0B4F2C00145EB5 /* BigbluebuttonMobileSdkExampleTests.m in Sources */,
F1C81DDA27BC0E5800BC9C2F /* SampleHandler.swift in Sources */,
F1CF7F4A27D1AABD00E0C7F1 /* Constants.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
00E356F51AD99517003FC87E /* PBXTargetDependency */ = {
F1C81DDD27BC0E5800BC9C2F /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 13B07F861A680F5B00A75B9A /* BigbluebuttonMobileSdkExample */;
targetProxy = 00E356F41AD99517003FC87E /* PBXContainerItemProxy */;
};
2D02E4921E0B4A5D006451C7 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
target = 2D02E47A1E0B4A5D006451C7 /* BigbluebuttonMobileSdkExample-tvOS */;
targetProxy = 2D02E4911E0B4A5D006451C7 /* PBXContainerItemProxy */;
target = F1C81DD527BC0E5800BC9C2F /* BigBlueButtonMobileSdkBroadcastExample */;
targetProxy = F1C81DDC27BC0E5800BC9C2F /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
00E356F61AD99517003FC87E /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
"$(inherited)",
);
INFOPLIST_FILE = BigbluebuttonMobileSdkExampleTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bigbluebuttonmobilesdk;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BigbluebuttonMobileSdkExample.app/BigbluebuttonMobileSdkExample";
};
name = Debug;
};
00E356F71AD99517003FC87E /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
COPY_PHASE_STRIP = NO;
INFOPLIST_FILE = BigbluebuttonMobileSdkExampleTests/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 10.0;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_LDFLAGS = (
"-ObjC",
"-lc++",
"$(inherited)",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bigbluebuttonmobilesdk;
PRODUCT_NAME = "$(TARGET_NAME)";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BigbluebuttonMobileSdkExample.app/BigbluebuttonMobileSdkExample";
};
name = Release;
};
13B07F941A680F5B00A75B9A /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 47F7ED3B7971BE374F7B8635 /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */;
baseConfigurationReference = 7EC638C00C2D62DDC1E73F8E /* Pods-BigbluebuttonMobileSdkExample.debug.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = BigbluebuttonMobileSdkExample/BigbluebuttonMobileSdkExample.entitlements;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = N69T9W23TC;
ENABLE_BITCODE = NO;
INFOPLIST_FILE = BigbluebuttonMobileSdkExample/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bigbluebuttonmobilesdk;
PRODUCT_BUNDLE_IDENTIFIER = "org.bigbluebutton.mobile-sdk.example.DE1E7B04";
PRODUCT_NAME = BigbluebuttonMobileSdkExample;
SWIFT_OBJC_BRIDGING_HEADER = "swift-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
SWIFT_VERSION = 5.5.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Debug;
};
13B07F951A680F5B00A75B9A /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = E00ACF0FDA8BF921659E2F9A /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */;
baseConfigurationReference = D282348F3CB6D3E26FB51C37 /* Pods-BigbluebuttonMobileSdkExample.release.xcconfig */;
buildSettings = {
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_ENTITLEMENTS = BigbluebuttonMobileSdkExample/BigbluebuttonMobileSdkExample.entitlements;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = N69T9W23TC;
INFOPLIST_FILE = BigbluebuttonMobileSdkExample/Info.plist;
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = com.example.bigbluebuttonmobilesdk;
PRODUCT_BUNDLE_IDENTIFIER = "org.bigbluebutton.mobile-sdk.example.DE1E7B04";
PRODUCT_NAME = BigbluebuttonMobileSdkExample;
SWIFT_VERSION = 5.0;
SWIFT_OBJC_BRIDGING_HEADER = "swift-Bridging-Header.h";
SWIFT_VERSION = 5.5.2;
TARGETED_DEVICE_FAMILY = "1,2";
VERSIONING_SYSTEM = "apple-generic";
};
name = Release;
};
2D02E4971E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "BigbluebuttonMobileSdkExample-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.BigbluebuttonMobileSdkExample-tvOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 14.0;
};
name = Debug;
};
2D02E4981E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image";
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage;
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "BigbluebuttonMobileSdkExample-tvOS/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.BigbluebuttonMobileSdkExample-tvOS";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TARGETED_DEVICE_FAMILY = 3;
TVOS_DEPLOYMENT_TARGET = 14.0;
};
name = Release;
};
2D02E4991E0B4A5E006451C7 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
DEBUG_INFORMATION_FORMAT = dwarf;
ENABLE_TESTABILITY = YES;
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "BigbluebuttonMobileSdkExample-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.BigbluebuttonMobileSdkExample-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BigbluebuttonMobileSdkExample-tvOS.app/BigbluebuttonMobileSdkExample-tvOS";
TVOS_DEPLOYMENT_TARGET = 10.1;
};
name = Debug;
};
2D02E49A1E0B4A5E006451C7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CLANG_ANALYZER_NONNULL = YES;
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
CLANG_WARN_INFINITE_RECURSION = YES;
CLANG_WARN_SUSPICIOUS_MOVE = YES;
COPY_PHASE_STRIP = NO;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
GCC_NO_COMMON_BLOCKS = YES;
INFOPLIST_FILE = "BigbluebuttonMobileSdkExample-tvOSTests/Info.plist";
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks";
OTHER_LDFLAGS = (
"$(inherited)",
"-ObjC",
"-lc++",
);
PRODUCT_BUNDLE_IDENTIFIER = "org.reactjs.native.example.BigbluebuttonMobileSdkExample-tvOSTests";
PRODUCT_NAME = "$(TARGET_NAME)";
SDKROOT = appletvos;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BigbluebuttonMobileSdkExample-tvOS.app/BigbluebuttonMobileSdkExample-tvOS";
TVOS_DEPLOYMENT_TARGET = 10.1;
};
name = Release;
};
83CBBA201A601CBA00E9B192 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -750,13 +524,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
"\"$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)\"",
"\"$(inherited)\"",
);
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@@ -803,7 +572,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 14.0;
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
LD_RUNPATH_SEARCH_PATHS = "/usr/lib/swift $(inherited)";
LIBRARY_SEARCH_PATHS = (
"\"$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)\"",
@@ -816,18 +585,82 @@
};
name = Release;
};
F1C81DE027BC0E5800BC9C2F /* Debug */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = 64F9B7FFD471972C20137BD6 /* Pods-BigBlueButtonMobileSdkBroadcastExample.debug.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
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 = BigBlueButtonMobileSdkBroadcastExample/BigBlueButtonMobileSdkBroadcastExample.entitlements;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_TEAM = N69T9W23TC;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = BigBlueButtonMobileSdkBroadcastExample/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "BigBlueButton Mobile SDK Broadcast Example";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
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.bigbluebutton.mobile-sdk.example.DE1E7B04.BigBlueButtonMobileSdkBroadcastExample";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.5.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Debug;
};
F1C81DE127BC0E5800BC9C2F /* Release */ = {
isa = XCBuildConfiguration;
baseConfigurationReference = B2C3B4EA07C7BC3E4B51B5D2 /* Pods-BigBlueButtonMobileSdkBroadcastExample.release.xcconfig */;
buildSettings = {
CLANG_ANALYZER_NONNULL = YES;
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++17";
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 = BigBlueButtonMobileSdkBroadcastExample/BigBlueButtonMobileSdkBroadcastExample.entitlements;
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
DEVELOPMENT_TEAM = N69T9W23TC;
GCC_C_LANGUAGE_STANDARD = gnu11;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = BigBlueButtonMobileSdkBroadcastExample/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "BigBlueButton Mobile SDK Broadcast Example";
INFOPLIST_KEY_NSHumanReadableCopyright = "";
IPHONEOS_DEPLOYMENT_TARGET = 14.7;
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
MARKETING_VERSION = 1.0;
MTL_FAST_MATH = YES;
PRODUCT_BUNDLE_IDENTIFIER = "org.bigbluebutton.mobile-sdk.example.DE1E7B04.BigBlueButtonMobileSdkBroadcastExample";
PRODUCT_NAME = "$(TARGET_NAME)";
SKIP_INSTALL = YES;
SWIFT_EMIT_LOC_STRINGS = YES;
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.5.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
name = Release;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExampleTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
00E356F61AD99517003FC87E /* Debug */,
00E356F71AD99517003FC87E /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
13B07F931A680F5B00A75B9A /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -837,24 +670,6 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample-tvOS" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D02E4971E0B4A5E006451C7 /* Debug */,
2D02E4981E0B4A5E006451C7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "BigbluebuttonMobileSdkExample-tvOSTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
2D02E4991E0B4A5E006451C7 /* Debug */,
2D02E49A1E0B4A5E006451C7 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
83CBB9FA1A601CBA00E9B192 /* Build configuration list for PBXProject "BigbluebuttonMobileSdkExample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
@@ -864,6 +679,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
F1C81DDF27BC0E5800BC9C2F /* Build configuration list for PBXNativeTarget "BigBlueButtonMobileSdkBroadcastExample" */ = {
isa = XCConfigurationList;
buildConfigurations = (
F1C81DE027BC0E5800BC9C2F /* Debug */,
F1C81DE127BC0E5800BC9C2F /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 83CBB9F71A601CBA00E9B192 /* Project object */;

View File

@@ -50,6 +50,18 @@
ReferencedContainer = "container:BigbluebuttonMobileSdkExample.xcodeproj">
</BuildableReference>
</MacroExpansion>
<Testables>
<TestableReference
skipped = "NO">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "00E356ED1AD99517003FC87E"
BuildableName = "BigbluebuttonMobileSdkExampleTests.xctest"
BlueprintName = "BigbluebuttonMobileSdkExampleTests"
ReferencedContainer = "container:BigbluebuttonMobileSdkExample.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"

View File

@@ -1,15 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <React/RCTBridgeDelegate.h>
#import <UIKit/UIKit.h>
@interface AppDelegate : UIResponder <UIApplicationDelegate, RCTBridgeDelegate>
@property (nonatomic, strong) UIWindow *window;
@end

View File

@@ -1,63 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import "AppDelegate.h"
#import <React/RCTBridge.h>
#import <React/RCTBundleURLProvider.h>
#import <React/RCTRootView.h>
#ifdef FB_SONARKIT_ENABLED
#import <FlipperKit/FlipperClient.h>
#import <FlipperKitLayoutPlugin/FlipperKitLayoutPlugin.h>
#import <FlipperKitUserDefaultsPlugin/FKUserDefaultsPlugin.h>
#import <FlipperKitNetworkPlugin/FlipperKitNetworkPlugin.h>
#import <SKIOSNetworkPlugin/SKIOSNetworkAdapter.h>
#import <FlipperKitReactPlugin/FlipperKitReactPlugin.h>
static void InitializeFlipper(UIApplication *application) {
FlipperClient *client = [FlipperClient sharedClient];
SKDescriptorMapper *layoutDescriptorMapper = [[SKDescriptorMapper alloc] initWithDefaults];
[client addPlugin:[[FlipperKitLayoutPlugin alloc] initWithRootNode:application withDescriptorMapper:layoutDescriptorMapper]];
[client addPlugin:[[FKUserDefaultsPlugin alloc] initWithSuiteName:nil]];
[client addPlugin:[FlipperKitReactPlugin new]];
[client addPlugin:[[FlipperKitNetworkPlugin alloc] initWithNetworkAdapter:[SKIOSNetworkAdapter new]]];
[client start];
}
#endif
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
#ifdef FB_SONARKIT_ENABLED
InitializeFlipper(application);
#endif
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
moduleName:@"BigbluebuttonMobileSdkExample"
initialProperties:nil];
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UIViewController *rootViewController = [UIViewController new];
rootViewController.view = rootView;
self.window.rootViewController = rootViewController;
[self.window makeKeyAndVisible];
return YES;
}
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
{
#if DEBUG
return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil];
#else
return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"];
#endif
}
@end

View File

@@ -0,0 +1,47 @@
//
// AppDelegate.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import UIKit
import bigbluebutton_mobile_sdk
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, RCTBridgeDelegate {
var window: UIWindow?
var bridge: RCTBridge!
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
bridge = RCTBridge(delegate: self, launchOptions: launchOptions)
let rootView = RCTRootView(bridge: bridge!, moduleName: Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String, initialProperties: nil)
if #available(iOS 13.0, *) {
rootView.backgroundColor = .systemBackground
} else {
rootView.backgroundColor = .white
}
let rootViewController = UIViewController()
rootViewController.view = rootView
self.window = UIWindow(frame: UIScreen.main.bounds)
self.window?.rootViewController = rootViewController
self.window?.makeKeyAndVisible()
BigBlueButtonSDK.initialize(broadcastExtensionBundleId: Constants.broadcastExtensionBundleId, appGroupName: Constants.appGroupName)
return true
}
func sourceURL(for bridge: RCTBridge!) -> URL! {
//#if DEBUG
return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: "index", fallbackResource:nil)
//#else
// let mainBundle = Bundle.main
// return mainBundle.url(forResource: "main", withExtension: "jsbundle")!
//#endif
}
}

View File

@@ -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.bigbluebutton.mobile-sdk.example.DE1E7B04</string>
</array>
</dict>
</plist>

View File

@@ -2,37 +2,52 @@
"images" : [
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "2x"
"scale" : "2x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"size" : "29x29",
"scale" : "3x"
"scale" : "3x",
"size" : "20x20"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "2x"
"scale" : "2x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"size" : "40x40",
"scale" : "3x"
"scale" : "3x",
"size" : "29x29"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "2x"
"scale" : "2x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"size" : "60x60",
"scale" : "3x"
"scale" : "3x",
"size" : "40x40"
},
{
"idiom" : "iphone",
"scale" : "2x",
"size" : "60x60"
},
{
"idiom" : "iphone",
"scale" : "3x",
"size" : "60x60"
},
{
"idiom" : "ios-marketing",
"scale" : "1x",
"size" : "1024x1024"
}
],
"info" : {
"version" : 1,
"author" : "xcode"
"author" : "xcode",
"version" : 1
}
}
}

View File

@@ -5,7 +5,7 @@
<key>CFBundleDevelopmentRegion</key>
<string>en</string>
<key>CFBundleDisplayName</key>
<string>BigbluebuttonMobileSdk Example</string>
<string>BigBlueButton Mobile SDK Example</string>
<key>CFBundleExecutable</key>
<string>$(EXECUTABLE_NAME)</string>
<key>CFBundleIdentifier</key>
@@ -29,13 +29,7 @@
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>localhost</key>
<dict>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<true/>
</dict>
</dict>
<dict/>
</dict>
<key>NSLocationWhenInUseUsageDescription</key>
<string></string>

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="15702" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="19529" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
<device id="retina4_7" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="15704"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="19519"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -31,10 +31,11 @@
<label opaque="NO" clipsSubviews="YES" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Powered by React Native" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumFontSize="9" translatesAutoresizingMaskIntoConstraints="NO" id="MN2-I3-ftu">
<rect key="frame" x="0.0" y="626" width="375" height="21"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<color key="textColor" cocoaTouchSystemColor="darkTextColor"/>
<color key="textColor" systemColor="darkTextColor"/>
<nil key="highlightedColor"/>
</label>
</subviews>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
<color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<constraints>
<constraint firstItem="Bcu-3y-fUS" firstAttribute="centerX" secondItem="obG-Y5-kRd" secondAttribute="centerX" id="5cz-MP-9tL"/>
@@ -47,7 +48,6 @@
<constraint firstItem="GJd-Yh-RWb" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="bottom" multiplier="1/3" constant="1" id="moa-c2-u7t"/>
<constraint firstItem="GJd-Yh-RWb" firstAttribute="leading" secondItem="Bcu-3y-fUS" secondAttribute="leading" symbolic="YES" id="x7j-FC-K8j"/>
</constraints>
<viewLayoutGuide key="safeArea" id="Bcu-3y-fUS"/>
</view>
</viewController>
<placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
@@ -55,4 +55,9 @@
<point key="canvasLocation" x="52.173913043478265" y="375"/>
</scene>
</scenes>
<resources>
<systemColor name="darkTextColor">
<color white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</systemColor>
</resources>
</document>

View File

@@ -1,16 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}

View File

@@ -0,0 +1,16 @@
//
// Constants.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import Foundation
class Constants {
// This is used to filter the list of broadcast applications offered to the user (it must match with bundle id of the broadcast extension target)
public static var broadcastExtensionBundleId="org.bigbluebutton.mobile-sdk.example.DE1E7B04.BigBlueButtonMobileSdkBroadcastExample";
// This is used to allow both applications (main and broadcast) to share information
public static var appGroupName="group.org.bigbluebutton.mobile-sdk.example.DE1E7B04";
}

View File

@@ -1,6 +0,0 @@
//
// File.swift
// BigbluebuttonMobileSdkExample
//
import Foundation

View File

@@ -1,7 +1,11 @@
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '14.0'
platform :ios, '14.7'
target 'BigBlueButtonMobileSdkBroadcastExample' do
pod 'bigbluebutton-mobile-sdk-common', :path => '../../common'
end
target 'BigbluebuttonMobileSdkExample' do
config = use_native_modules!
@@ -9,13 +13,39 @@ target 'BigbluebuttonMobileSdkExample' do
use_react_native!(:path => config["reactNativePath"])
pod 'bigbluebutton-mobile-sdk', :path => '../..'
pod 'bigbluebutton-mobile-sdk-common', :path => '../../common'
# Enables Flipper.
#
# Note that if you have use_frameworks! enabled, Flipper will not work and
# you should disable these next few lines.
# use_flipper!({ 'Flipper' => '0.80.0' })
#post_install do |installer|
# flipper_post_install(installer)
#end
post_install do |installer|
flipper_post_install(installer)
fix_deployment_target(installer)
end
def fix_deployment_target(installer)
return if !installer
project = installer.pods_project
project_deployment_target = project.build_configurations.first.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
puts "Make sure all pods deployment target is #{project_deployment_target.green}"
project.targets.each do |target|
puts " #{target.name}".blue
target.build_configurations.each do |config|
config.build_settings['SWIFT_VERSION'] = '5.5.2'
old_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
new_target = project_deployment_target
next if old_target == new_target
puts " #{config.name}: #{old_target.yellow} -> #{new_target.green}"
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = new_target
end
end
end
end

View File

@@ -1,7 +1,10 @@
PODS:
- bigbluebutton-mobile-sdk (0.1.0):
- bigbluebutton-mobile-sdk (0.1.8):
- bigbluebutton-mobile-sdk-common
- React-Core
- WebRTC-lib
- bigbluebutton-mobile-sdk-common (0.1.8):
- WebRTC-lib
- boost-for-react-native (1.63.0)
- DoubleConversion (1.1.6)
- FBLazyVector (0.63.4)
@@ -188,6 +191,8 @@ PODS:
- React-cxxreact (= 0.63.4)
- React-jsi (= 0.63.4)
- React-jsinspector (0.63.4)
- react-native-webview (11.17.2):
- React-Core
- React-RCTActionSheet (0.63.4):
- React-Core/RCTActionSheetHeaders (= 0.63.4)
- React-RCTAnimation (0.63.4):
@@ -253,6 +258,7 @@ PODS:
DEPENDENCIES:
- bigbluebutton-mobile-sdk (from `../..`)
- bigbluebutton-mobile-sdk-common (from `../../common`)
- DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`)
- FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`)
- FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`)
@@ -270,6 +276,7 @@ DEPENDENCIES:
- React-jsi (from `../node_modules/react-native/ReactCommon/jsi`)
- React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`)
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-webview (from `../node_modules/react-native-webview`)
- React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`)
- React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`)
- React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`)
@@ -290,6 +297,8 @@ SPEC REPOS:
EXTERNAL SOURCES:
bigbluebutton-mobile-sdk:
:path: "../.."
bigbluebutton-mobile-sdk-common:
:path: "../../common"
DoubleConversion:
:podspec: "../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec"
FBLazyVector:
@@ -320,6 +329,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/jsiexecutor"
React-jsinspector:
:path: "../node_modules/react-native/ReactCommon/jsinspector"
react-native-webview:
:path: "../node_modules/react-native-webview"
React-RCTActionSheet:
:path: "../node_modules/react-native/Libraries/ActionSheetIOS"
React-RCTAnimation:
@@ -344,7 +355,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native/ReactCommon/yoga"
SPEC CHECKSUMS:
bigbluebutton-mobile-sdk: ba72e940eea4190f7b499ed1a9e33e2d57ad7f8d
bigbluebutton-mobile-sdk: 3b5da479ad35ed28109cc74b1f8bf7c284e61bb0
bigbluebutton-mobile-sdk-common: 1da6689f4b52a15f0225f991d9e62158e654b941
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
@@ -361,6 +373,7 @@ SPEC CHECKSUMS:
React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31
React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949
React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a
react-native-webview: 380c1a03ec94b7ed764dac8db1e7c9952d08c93a
React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336
React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b
React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0
@@ -374,6 +387,6 @@ SPEC CHECKSUMS:
WebRTC-lib: 508fe02efa0c1a3a8867082a77d24c9be5d29aeb
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
PODFILE CHECKSUM: e84704278155bd10d2637b20fd1b1519bedb0c00
PODFILE CHECKSUM: f8fce284a6a970f8f12eaf796d7b132a61b2e095
COCOAPODS: 1.11.2

View File

@@ -0,0 +1,9 @@
// Based on: https://github.com/rhdeck/react-native-swift-core/blob/master/templates/swift-Bridging-Header.h
#import <React/RCTBridgeModule.h>
#import <React/RCTBridge.h>
#import <React/RCTEventDispatcher.h>
#import <React/RCTRootView.h>
#import <React/RCTUtils.h>
#import <React/RCTConvert.h>
#import <React/RCTBundleURLProvider.h>

View File

@@ -10,7 +10,8 @@
},
"dependencies": {
"react": "16.13.1",
"react-native": "0.63.4"
"react-native": "0.63.4",
"react-native-webview": "^11.17.2"
},
"devDependencies": {
"@babel/core": "^7.12.10",

View File

@@ -1,12 +1,15 @@
import * as React from 'react';
import { StyleSheet, View } from 'react-native';
import { BigbluebuttonMobileSdkView } from 'bigbluebutton-mobile-sdk';
import { BigbluebuttonMobile } from 'bigbluebutton-mobile-sdk';
export default function App() {
return (
<View style={styles.container}>
<BigbluebuttonMobileSdkViewManager color="#32a852" style={styles.box} />
<BigbluebuttonMobile
url="https://mobile.bbb.imdt.dev"
style={styles.bbb}
/>
</View>
);
}
@@ -14,12 +17,10 @@ export default function App() {
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
flexDirection: 'row',
},
box: {
width: 60,
height: 60,
marginVertical: 20,
bbb: {
marginTop: 48,
flex: 1,
},
});

View File

@@ -1806,16 +1806,16 @@ escape-html@~1.0.3:
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
escape-string-regexp@^1.0.5:
version "1.0.5"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
escape-string-regexp@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344"
integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==
esprima@^4.0.0:
version "4.0.1"
resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
@@ -2273,7 +2273,7 @@ inquirer@^3.0.6:
strip-ansi "^4.0.0"
through "^2.3.6"
invariant@^2.2.4:
invariant@2.2.4, invariant@^2.2.4:
version "2.2.4"
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6"
integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==
@@ -3514,6 +3514,14 @@ react-is@^16.12.0, react-is@^16.13.1, react-is@^16.8.4:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
react-native-webview@^11.17.2:
version "11.17.2"
resolved "https://registry.yarnpkg.com/react-native-webview/-/react-native-webview-11.17.2.tgz#5b107edbf95b5eaf789882f03f0c84c3298c1ded"
integrity sha512-7Sac02xq11qFACJmSUuCnH0aUFtSWUvSRC09EZ2qwNXq4IvT05xlX6978nlKUXf2ljw/0qZIzqbKzuXnu6Wq8Q==
dependencies:
escape-string-regexp "2.0.0"
invariant "2.2.4"
react-native@0.63.4:
version "0.63.4"
resolved "https://registry.yarnpkg.com/react-native/-/react-native-0.63.4.tgz#2210fdd404c94a5fa6b423c6de86f8e48810ec36"

View File

@@ -1,7 +0,0 @@
#import "React/RCTViewManager.h"
@interface RCT_EXTERN_MODULE(BigbluebuttonMobileSdkViewManager, RCTViewManager)
RCT_EXPORT_VIEW_PROPERTY(color, NSString)
@end

View File

@@ -1,32 +0,0 @@
@objc(BigbluebuttonMobileSdkViewManager)
class BigbluebuttonMobileSdkViewManager: RCTViewManager {
override func view() -> (BigbluebuttonMobileSdkView) {
return BigbluebuttonMobileSdkView()
}
}
class BigbluebuttonMobileSdkView : UIView {
@objc var color: String = "" {
didSet {
self.backgroundColor = hexStringToUIColor(hexColor: color)
}
}
func hexStringToUIColor(hexColor: String) -> UIColor {
let stringScanner = Scanner(string: hexColor)
if(hexColor.hasPrefix("#")) {
stringScanner.scanLocation = 1
}
var color: UInt32 = 0
stringScanner.scanHexInt32(&color)
let r = CGFloat(Int(color >> 16) & 0x000000FF)
let g = CGFloat(Int(color >> 8) & 0x000000FF)
let b = CGFloat(Int(color) & 0x000000FF)
return UIColor(red: r / 255.0, green: g / 255.0, blue: b / 255.0, alpha: 1)
}
}

View File

@@ -0,0 +1,44 @@
//
// BigBlueButton.swift
// bigbluebutton-mobile-sdk
//
// Created by Tiago Daniel Jacobs on 03/03/22.
//
import Foundation
import os
import bigbluebutton_mobile_sdk_common
open class BigBlueButtonSDK: NSObject {
// Logger (these messages are displayed in the console application)
private static var logger = os.Logger(subsystem: "BigBlueButtonMobileSDK", category: "BigBlueButton")
private static var broadcastExtensionBundleId = ""
private static var appGroupName = ""
private static var userDefaults:UserDefaults?
private static var observer: NSKeyValueObservation?
public static func initialize(broadcastExtensionBundleId:String, appGroupName:String) {
self.broadcastExtensionBundleId = broadcastExtensionBundleId
self.appGroupName = appGroupName
userDefaults = BBBSharedData.getUserDefaults(appGroupName: appGroupName)
// Observe keys modified by BroadcastUploadExtension and emit this event to react native
//broadcastStarted
observer = userDefaults?.observe(\.broadcastStarted, options: [.new]) { (defaults, change) in
ReactNativeEventEmitter.emitter.sendEvent(withName: ReactNativeEventEmitter.EVENT.onBroadcastStarted.rawValue, body: nil)
}
}
public static func getBroadcastExtensionBundleId() -> String {
return self.broadcastExtensionBundleId;
}
public static func deinitialize () {
observer?.invalidate()
}
}

View File

@@ -0,0 +1,15 @@
//
// ReactNativeEventEmitter.m
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface RCT_EXTERN_MODULE(ReactNativeEventEmitter, RCTEventEmitter)
RCT_EXTERN_METHOD(supportedEvents)
@end

View File

@@ -0,0 +1,35 @@
//
// ReactNativeEventEmitter.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import Foundation
import React
@objc(ReactNativeEventEmitter)
open class ReactNativeEventEmitter: RCTEventEmitter {
public static var emitter: RCTEventEmitter!
public enum EVENT: String, CaseIterable {
case onBroadcastRequested = "onBroadcastRequested"
case onBroadcastStarted = "onBroadcastStarted"
case onBroadcastPaused = "onBroadcastPaused"
case onBroadcastResumed = "onBroadcastResumed"
case onBroadcastFinished = "onBroadcastFinished"
}
override init() {
super.init()
ReactNativeEventEmitter.emitter = self
}
open override func supportedEvents() -> [String] {
EVENT.allCases.map { $0.rawValue }
}
@objc open override class func requiresMainQueueSetup() -> Bool {
return false
}
}

View File

@@ -0,0 +1,13 @@
//
// ScreenShareServiceManager.m
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
#import <Foundation/Foundation.h>
#import "React/RCTBridgeModule.h"
@interface RCT_EXTERN_REMAP_MODULE(BBBN_ScreenShareService, ScreenShareServiceManager, NSObject)
RCT_EXTERN_METHOD(initializeScreenShare)
@end

View File

@@ -0,0 +1,28 @@
//
// ScreenShareServiceManager.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import Foundation
import os
@objc(ScreenShareServiceManager)
class ScreenShareServiceManager: NSObject {
// Logger (these messages are displayed in the console application)
private var logger = os.Logger(subsystem: "BigBlueButtonMobileSDK", category: "ScreenShareServiceManager")
// React native exposed method (called when user click the button to share screen)
@objc func initializeScreenShare() -> Void {
logger.info("initializeScreenShare")
// Request the system broadcast
logger.info("initializeScreenShare - requesting broadcast")
SystemBroadcastPicker.requestBroadcast()
let eventName = ReactNativeEventEmitter.EVENT.onBroadcastRequested.rawValue
logger.info("initializeScreenShare - emitting event \(eventName)")
ReactNativeEventEmitter.emitter.sendEvent(withName: eventName, body: nil);
}
}

View File

@@ -0,0 +1,13 @@
//
// SystemBroadcastPickerManager.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
#import "React/RCTViewManager.h"
@interface RCT_EXTERN_REMAP_MODULE(BBBN_SystemBroadcastPicker, SystemBroadcastPickerManager, RCTViewManager)
+ (BOOL)requiresMainQueueSetup { return YES; }
@end

View File

@@ -0,0 +1,67 @@
//
// SystemBroadcastPicker.swift
//
// Created by Tiago Daniel Jacobs on 11/03/22.
//
import ReplayKit
import os
@objc(SystemBroadcastPickerManager)
class SystemBroadcastPickerManager: RCTViewManager {
override func view() -> (SystemBroadcastPicker) {
return SystemBroadcastPicker();
}
}
class SystemBroadcastPicker : UIView {
// Logger (these messages are displayed in the console application)
private var logger = os.Logger(subsystem: "BigBlueButtonMobileSDK", category: "SystemBroadcastPicker")
// Reference to the broadcast screen picker
private static var broadcastPicker: RPSystemBroadcastPickerView?
//initWithFrame to init view from code
override init(frame: CGRect) {
super.init(frame: frame)
self.translatesAutoresizingMaskIntoConstraints = false
setupView()
}
//initWithCode to init view from xib or storyboard
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setupView()
}
/**
* Adds RPSystemBroadcastPickerView to the view
*/
private func setupView() {
logger.info("Initializing SystemBroadcastPickerManager")
let pickerFrame = CGRect(x: 30, y: 30, width: 100, height: 100)
SystemBroadcastPicker.broadcastPicker = RPSystemBroadcastPickerView(frame: pickerFrame)
SystemBroadcastPicker.broadcastPicker?.showsMicrophoneButton=false
SystemBroadcastPicker.broadcastPicker?.isHidden=true
SystemBroadcastPicker.broadcastPicker?.translatesAutoresizingMaskIntoConstraints = false
SystemBroadcastPicker.broadcastPicker?.preferredExtension = BigBlueButtonSDK.getBroadcastExtensionBundleId()
self.addSubview(SystemBroadcastPicker.broadcastPicker!)
}
/**
* Automatize the action of broadcast picker click
*/
public static func requestBroadcast(/*data*/) {
// write the data that will be accessed from broadcast application
DispatchQueue.main.async {
for view in broadcastPicker?.subviews ?? [] {
if let button = view as? UIButton {
button.sendActions(for: .allEvents)
}
}
}
}
}

View File

@@ -1,6 +1,6 @@
{
"name": "bigbluebutton-mobile-sdk",
"version": "0.1.0",
"version": "0.1.8",
"description": "This repository contains BigBlueButton react-native component, that's used in our [sample implementation](https://github.com/bigbluebutton/bigbluebutton-mobile).",
"main": "lib/commonjs/index",
"module": "lib/module/index",
@@ -12,6 +12,7 @@
"lib",
"android",
"ios",
"common",
"cpp",
"bigbluebutton-mobile-sdk.podspec",
"!lib/typescript/example",
@@ -38,7 +39,7 @@
],
"repository": "https://github.com/bigbluebutton/bigbluebutton-mobile-sdk",
"author": "BigBlueButton Inc <bigbluebutton@bigbluebutton.org> (https://bigbluebutton.org)",
"license": "MIT",
"license": "LGPL-3.0",
"bugs": {
"url": "https://github.com/bigbluebutton/bigbluebutton-mobile-sdk/issues"
},
@@ -62,7 +63,7 @@
"pod-install": "^0.1.0",
"prettier": "^2.0.5",
"react": "16.13.1",
"react-native": "0.63.4",
"react-native": "^0.67.2",
"react-native-builder-bob": "^0.18.0",
"release-it": "^14.2.2",
"typescript": "^4.1.3"
@@ -143,5 +144,8 @@
}
]
]
},
"dependencies": {
"react-native-webview": "^11.17.2"
}
}

12
sonar-project.properties Normal file
View File

@@ -0,0 +1,12 @@
sonar.projectKey=bigbluebutton_bigbluebutton-mobile-sdk
sonar.organization=bigbluebutton
# This is the name and version displayed in the SonarCloud UI.
sonar.projectName=bigbluebutton-mobile-sdk
sonar.projectVersion=1.0
# Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows.
sonar.sources=.
# Encoding of the source code. Default is default system encoding
sonar.sourceEncoding=UTF-8

View File

@@ -1,26 +1,38 @@
import {
requireNativeComponent,
UIManager,
Platform,
ViewStyle,
} from 'react-native';
const LINKING_ERROR =
`The package 'bigbluebutton-mobile-sdk' doesn't seem to be linked. Make sure: \n\n` +
Platform.select({ ios: "- You have run 'pod install'\n", default: '' }) +
'- You rebuilt the app after installing the package\n' +
'- You are not using Expo managed workflow\n';
import { Platform, ViewStyle } from 'react-native';
import React, { useRef } from 'react';
import BBBN_SystemBroadcastPicker from './native-components/BBBN_SystemBroadcastPicker';
import { WebView } from 'react-native-webview';
import { handleWebviewMessage } from './webview/message-handler';
type BigbluebuttonMobileSdkProps = {
color: string;
url: string;
style: ViewStyle;
};
const ComponentName = 'BigbluebuttonMobileSdkView';
const renderPlatformSpecificComponents = () =>
Platform.select({
ios: <BBBN_SystemBroadcastPicker />,
android: null,
});
export const BigbluebuttonMobileSdkView =
UIManager.getViewManagerConfig(ComponentName) != null
? requireNativeComponent<BigbluebuttonMobileSdkProps>(ComponentName)
: () => {
throw new Error(LINKING_ERROR);
};
export const BigbluebuttonMobile = ({
url,
style,
}: BigbluebuttonMobileSdkProps) => {
const webViewRef = useRef(null);
return (
<>
{renderPlatformSpecificComponents()}
{
<WebView
ref={webViewRef}
source={{ uri: url }}
style={{ ...style }}
onMessage={(msg) => handleWebviewMessage(webViewRef, msg)}
applicationNameForUserAgent="BBBMobile"
/>
}
</>
);
};

View File

@@ -0,0 +1,36 @@
import { initializeScreenShare as nativeInitializeScreenShare } from '../native-components/BBBN_ScreenShareService';
import nativeEmitter from '../native-messaging/emitter';
// Reference to the resolver of last call
let resolve = (a: String) => {
console.log(
`default resolve function called, this should never happen: ${a}`
);
};
// Log a message when broadcast is requested
nativeEmitter.addListener('onBroadcastRequested', () => {
console.log(`Broadcast requested`);
});
// Resolve promise when broadcast is started (this event means that user confirmed the screenshare)
nativeEmitter.addListener('onBroadcastStarted', () => {
resolve('null');
});
// Entry point of this method
function initializeScreenShare() {
return new Promise((res, rej) => {
// store the resolver for later call (when event is received)
resolve = res;
try {
// call native swift method that triggers the broadcast popup
nativeInitializeScreenShare();
} catch (e) {
rej(`Call to nativeInitializeScreenShare failed`);
}
});
}
export default initializeScreenShare;

View File

@@ -0,0 +1,7 @@
import { NativeModules } from 'react-native';
const ScreenShareService = NativeModules.BBBN_ScreenShareService;
export function initializeScreenShare() {
ScreenShareService.initializeScreenShare();
}

View File

@@ -0,0 +1,8 @@
import { HostComponent, requireNativeComponent } from 'react-native';
interface Props {}
const BBBN_SystemBroadcastPicker: HostComponent<Props> = requireNativeComponent(
'BBBN_SystemBroadcastPicker'
);
export default BBBN_SystemBroadcastPicker;

View File

@@ -0,0 +1,10 @@
import * as reactNative from 'react-native';
// ...
const emitter: reactNative.EventEmitter =
reactNative.Platform.OS === 'ios'
? new reactNative.NativeEventEmitter(
reactNative.NativeModules.ReactNativeEventEmitter
)
: reactNative.DeviceEventEmitter;
export default emitter;

View File

@@ -0,0 +1,51 @@
import type { MutableRefObject } from 'react';
import type { WebView, WebViewMessageEvent } from 'react-native-webview';
import initializeScreenShare from '../methods/initializeScreenShare';
function observePromiseResult(
webViewRef: MutableRefObject<WebView>,
sequence: number,
prom: Promise<any>
) {
prom
.then((result: any) => {
console.log(`Promise ${sequence} resolved!`, result);
webViewRef.current.injectJavaScript(
`window.nativeMethodCallResult(${sequence}, true ${
result ? ',' + JSON.stringify(result) : ''
});`
);
})
.catch((exception: any) => {
console.error(`Promise ${sequence} failed!`, exception);
webViewRef.current.injectJavaScript(
`window.nativeMethodCallResult(${sequence}, false ${
exception ? ',' + JSON.stringify(exception) : ''
});`
);
});
}
export function handleWebviewMessage(
webViewRef: MutableRefObject<any>,
event: WebViewMessageEvent
) {
const stringData = event?.nativeEvent?.data;
const data = JSON.parse(stringData);
if (data?.method && data?.sequence) {
let promise;
switch (data?.method) {
case 'initializeScreenShare':
promise = initializeScreenShare();
break;
default:
throw `Unknown method ${data?.method}`;
}
observePromiseResult(webViewRef, data.sequence, promise);
} else {
console.log(`Ignoring unknown message: $stringData`);
}
}
export default { handleWebviewMessage };

1472
yarn.lock

File diff suppressed because it is too large Load Diff