From 8d9609be0d07f134032f0e0c62346e06c18ce54a Mon Sep 17 00:00:00 2001 From: Max Cobb Date: Thu, 24 Dec 2020 16:26:17 +0000 Subject: [PATCH 1/5] added swiftui struct AgoraViewer, fixed swiftlint warnings --- .../AgoraVideoViewer+Buttons.swift | 42 +++++++------ .../AgoraVideoViewer+VideoControl.swift | 1 - Sources/Agora-UIKit/AgoraViewer.swift | 63 +++++++++++++++++++ 3 files changed, 86 insertions(+), 20 deletions(-) create mode 100644 Sources/Agora-UIKit/AgoraViewer.swift diff --git a/Sources/Agora-UIKit/AgoraVideoViewer+Buttons.swift b/Sources/Agora-UIKit/AgoraVideoViewer+Buttons.swift index 33a974d2..83a6af92 100644 --- a/Sources/Agora-UIKit/AgoraVideoViewer+Buttons.swift +++ b/Sources/Agora-UIKit/AgoraVideoViewer+Buttons.swift @@ -16,10 +16,30 @@ import AppKit // leaveChannel, toggleCam, toggleMic, flipCamera, toggleBroadcast, toggleBeautify extension AgoraVideoViewer { + fileprivate func positionButtonContainer(_ container: MPBlurView, _ contWidth: CGFloat, _ buttonMargin: CGFloat) { + #if os(iOS) + container.frame = CGRect( + origin: CGPoint( + x: (self.bounds.width - CGFloat(contWidth)) / 2, + y: (self.bounds.height - 60 - 20 - 10) + ), size: CGSize(width: contWidth, height: 60 + buttonMargin * 2) + ) + container.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin] + container.layer.cornerRadius = 20 + container.clipsToBounds = true + #else + container.frame = CGRect( + origin: CGPoint(x: (self.bounds.width - CGFloat(contWidth)) / 2, y: 10), + size: CGSize(width: contWidth, height: 60 + 20)) + container.autoresizingMask = [.minXMargin, .maxXMargin, .maxYMargin] + container.layer?.cornerRadius = 20 + #endif + } + /// Add all the relevant buttons. /// The buttons are set to add to their respective parent views /// Whenever called, so I'm discarding the result for most of them here. - func addVideoButtons() { + internal func addVideoButtons() { let container = self.getControlContainer() let buttons = [ self.getCameraButton(), self.getMicButton(), self.getFlipButton(), self.getBeautifyButton(), @@ -55,23 +75,7 @@ extension AgoraVideoViewer { #endif }) let contWidth = CGFloat(buttons.count) * (60 + buttonMargin) + buttonMargin - #if os(iOS) - container.frame = CGRect( - origin: CGPoint( - x: (self.bounds.width - CGFloat(contWidth)) / 2, - y: (self.bounds.height - 60 - 20 - 10) - ), size: CGSize(width: contWidth, height: 60 + buttonMargin * 2) - ) - container.autoresizingMask = [.flexibleLeftMargin, .flexibleRightMargin, .flexibleTopMargin] - container.layer.cornerRadius = 20 - container.clipsToBounds = true - #else - container.frame = CGRect( - origin: CGPoint(x: (self.bounds.width - CGFloat(contWidth)) / 2, y: 10), - size: CGSize(width: contWidth, height: 60 + 20)) - container.autoresizingMask = [.minXMargin, .maxXMargin, .maxYMargin] - container.layer?.cornerRadius = 20 - #endif + positionButtonContainer(container, contWidth, buttonMargin) } internal func getControlContainer() -> MPBlurView { @@ -152,7 +156,6 @@ extension AgoraVideoViewer { return button #endif } - // func prepareSystemBroadcaster() { // let frame = CGRect(x: 0, y:0, width: 60, height: 60) @@ -165,6 +168,7 @@ extension AgoraVideoViewer { // } // self.addSubview(systemBroadcastPicker) // } + /// Get the button for flipping the camera from front to rear facing /// - Returns: The button for flipping the camera if enabled, otherwise nil open func getFlipButton() -> MPButton? { diff --git a/Sources/Agora-UIKit/AgoraVideoViewer+VideoControl.swift b/Sources/Agora-UIKit/AgoraVideoViewer+VideoControl.swift index e2a5f704..cc629902 100644 --- a/Sources/Agora-UIKit/AgoraVideoViewer+VideoControl.swift +++ b/Sources/Agora-UIKit/AgoraVideoViewer+VideoControl.swift @@ -76,7 +76,6 @@ extension AgoraVideoViewer { #endif } - func startSharingScreen(displayId: UInt = 0) { #if os(macOS) let rectangle = CGRect.zero diff --git a/Sources/Agora-UIKit/AgoraViewer.swift b/Sources/Agora-UIKit/AgoraViewer.swift new file mode 100644 index 00000000..84016bc0 --- /dev/null +++ b/Sources/Agora-UIKit/AgoraViewer.swift @@ -0,0 +1,63 @@ +// +// AgoraViewer.swift +// Agora-UIKit +// +// Created by Max Cobb on 24/12/2020. +// + +import SwiftUI +import AgoraRtcKit + +/// Add AgoraVideoViewer with SwiftUI +public struct AgoraViewer: UIViewRepresentable { + public typealias UIViewType = AgoraVideoViewer + + public func makeUIView(context: Context) -> UIViewType { + self.viewer + } + + public func updateUIView(_ uiView: AgoraVideoViewer, context: Context) { + } + + /// The AgoraVideoViewer for SwiftUI to show. + public private(set) var viewer: UIViewType + /// Style and organisation to be applied to all the videos in the AgoraVideoViewer + public var style: AgoraVideoViewer.Style { + get { self.viewer.style } + set { self.viewer.style = newValue } + } + /// Settings and customisations such as position of on-screen buttons, collection view of all channel members, as well as agora video configuration. + public var agoraSettings: AgoraSettings { + self.viewer.agoraSettings + } + /// Delegate for the AgoraVideoViewer, used for some important callback methods. + public var delegate: AgoraVideoViewerDelegate? { + get { self.viewer.delegate } + set { self.viewer.delegate = newValue } + } + + /// Create an AgoraViewer, which represents an AgoraVideoViewer object. + /// - Parameters: + /// - connectionData: Storing struct for holding data about the connection to Agora service. + /// - style: Style and organisation to be applied to all the videos in this AgoraVideoViewer. + /// - agoraSettings: Settings for this viewer. This can include style customisations and information of where to get new tokens from. + /// - delegate: Delegate for the AgoraVideoViewer, used for some important callback methods. + public init( + connectionData: AgoraConnectionData, style: AgoraVideoViewer.Style = .grid, + agoraSettings: AgoraSettings = AgoraSettings(), delegate: AgoraVideoViewerDelegate? = nil + ) { + self.viewer = AgoraVideoViewer( + connectionData: connectionData, style: style, + agoraSettings: agoraSettings, delegate: delegate + ) + } + + /// Join the Agora channel + /// - Parameters: + /// - channel: Channel name to join. + /// - token: Valid token to join the channel. + /// - role: AgoraClientRole to join the channel as. Default: .broadcaster. + public func join(channel: String, with token: String?, as role: AgoraClientRole) { + self.viewer.join(channel: channel, with: token, as: role) + } +} From 3651a09df9e04db31e891cd97811f49ab1f73235 Mon Sep 17 00:00:00 2001 From: Max Cobb Date: Thu, 24 Dec 2020 16:36:29 +0000 Subject: [PATCH 2/5] swiftui for ios only --- AgoraUIKit_iOS.podspec | 2 +- AgoraUIKit_macOS.podspec | 2 +- Sources/Agora-UIKit/AgoraViewer.swift | 2 ++ 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/AgoraUIKit_iOS.podspec b/AgoraUIKit_iOS.podspec index 03335839..4c3871eb 100644 --- a/AgoraUIKit_iOS.podspec +++ b/AgoraUIKit_iOS.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'AgoraUIKit_iOS' - s.version = '1.0.3' + s.version = '1.1.0' s.summary = 'Agora video session UIKit template.' s.description = <<-DESC diff --git a/AgoraUIKit_macOS.podspec b/AgoraUIKit_macOS.podspec index 00b2f00b..fb181c5f 100644 --- a/AgoraUIKit_macOS.podspec +++ b/AgoraUIKit_macOS.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = 'AgoraUIKit_macOS' - s.version = '1.0.3' + s.version = '1.1.0' s.summary = 'Agora video session AppKit template.' s.description = <<-DESC diff --git a/Sources/Agora-UIKit/AgoraViewer.swift b/Sources/Agora-UIKit/AgoraViewer.swift index 84016bc0..68112bd7 100644 --- a/Sources/Agora-UIKit/AgoraViewer.swift +++ b/Sources/Agora-UIKit/AgoraViewer.swift @@ -5,6 +5,7 @@ // Created by Max Cobb on 24/12/2020. // +#if os(iOS) import SwiftUI import AgoraRtcKit @@ -61,3 +62,4 @@ public struct AgoraViewer: UIViewRepresentable { self.viewer.join(channel: channel, with: token, as: role) } } +#endif From 33a2b0bfad4bdda130aeaf08101d4f543dcee47e Mon Sep 17 00:00:00 2001 From: Max Cobb Date: Thu, 24 Dec 2020 16:42:35 +0000 Subject: [PATCH 3/5] updated docs directory --- docs/Classes.html | 7 +- docs/Classes/AgoraVideoViewer.html | 7 +- docs/Classes/AgoraVideoViewer/Style.html | 7 +- docs/Classes/AgoraVideoViewer/TokenError.html | 7 +- docs/Protocols.html | 7 +- docs/Protocols/AgoraVideoViewerDelegate.html | 7 +- docs/Structs.html | 35 +- docs/Structs/AgoraConnectionData.html | 7 +- docs/Structs/AgoraSettings.html | 7 +- .../Structs/AgoraSettings/BuiltinButtons.html | 7 +- docs/Structs/AgoraSettings/Position.html | 7 +- docs/Structs/AgoraViewer.html | 461 ++++++++++++++++++ .../Contents/Resources/Documents/Classes.html | 7 +- .../Documents/Classes/AgoraVideoViewer.html | 7 +- .../Classes/AgoraVideoViewer/Style.html | 7 +- .../Classes/AgoraVideoViewer/TokenError.html | 7 +- .../Resources/Documents/Protocols.html | 7 +- .../Protocols/AgoraVideoViewerDelegate.html | 7 +- .../Contents/Resources/Documents/Structs.html | 35 +- .../Structs/AgoraConnectionData.html | 7 +- .../Documents/Structs/AgoraSettings.html | 7 +- .../Structs/AgoraSettings/BuiltinButtons.html | 7 +- .../Structs/AgoraSettings/Position.html | 7 +- .../Documents/Structs/AgoraViewer.html | 461 ++++++++++++++++++ .../Contents/Resources/Documents/index.html | 7 +- .../Contents/Resources/Documents/search.json | 2 +- .../Contents/Resources/docSet.dsidx | Bin 45056 -> 45056 bytes docs/docsets/AgoraUIKit_iOS.tgz | Bin 93398 -> 95587 bytes docs/index.html | 7 +- docs/search.json | 2 +- 30 files changed, 1100 insertions(+), 50 deletions(-) create mode 100644 docs/Structs/AgoraViewer.html create mode 100644 docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraViewer.html diff --git a/docs/Classes.html b/docs/Classes.html index e9d7a317..3587d49f 100644 --- a/docs/Classes.html +++ b/docs/Classes.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@ + @@ -184,7 +187,7 @@

Declaration

diff --git a/docs/Classes/AgoraVideoViewer.html b/docs/Classes/AgoraVideoViewer.html index 448b119c..50e5f86b 100644 --- a/docs/Classes/AgoraVideoViewer.html +++ b/docs/Classes/AgoraVideoViewer.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -2687,7 +2690,7 @@

Declaration

diff --git a/docs/Classes/AgoraVideoViewer/Style.html b/docs/Classes/AgoraVideoViewer/Style.html index f96dfe25..1175c804 100644 --- a/docs/Classes/AgoraVideoViewer/Style.html +++ b/docs/Classes/AgoraVideoViewer/Style.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -214,7 +217,7 @@

Declaration

diff --git a/docs/Classes/AgoraVideoViewer/TokenError.html b/docs/Classes/AgoraVideoViewer/TokenError.html index ed2f7be0..85fec1f5 100644 --- a/docs/Classes/AgoraVideoViewer/TokenError.html +++ b/docs/Classes/AgoraVideoViewer/TokenError.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -188,7 +191,7 @@

Declaration

diff --git a/docs/Protocols.html b/docs/Protocols.html index 8e51c808..56a1a14c 100644 --- a/docs/Protocols.html +++ b/docs/Protocols.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -129,7 +132,7 @@

Declaration

diff --git a/docs/Protocols/AgoraVideoViewerDelegate.html b/docs/Protocols/AgoraVideoViewerDelegate.html index f0cfd218..699940e1 100644 --- a/docs/Protocols/AgoraVideoViewerDelegate.html +++ b/docs/Protocols/AgoraVideoViewerDelegate.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -415,7 +418,7 @@

Declaration

diff --git a/docs/Structs.html b/docs/Structs.html index 43e657f4..441d1f94 100644 --- a/docs/Structs.html +++ b/docs/Structs.html @@ -17,7 +17,7 @@
-

AgoraUIKit_iOS 1.0.3 Docs (100% documented)

+

AgoraUIKit_iOS 1.1.0 Docs (100% documented)

@@ -78,6 +78,9 @@

+ @@ -178,12 +181,40 @@

Declaration

+
  • +
    + + + + AgoraViewer + +
    +
    +
    +
    +
    +
    +

    Add AgoraVideoViewer with SwiftUI

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AgoraViewer : UIViewRepresentable
    + +
    +
    +
    +
    +
  • diff --git a/docs/Structs/AgoraConnectionData.html b/docs/Structs/AgoraConnectionData.html index 5df0a8da..f95ed6e7 100644 --- a/docs/Structs/AgoraConnectionData.html +++ b/docs/Structs/AgoraConnectionData.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -165,7 +168,7 @@

    Parameters

    diff --git a/docs/Structs/AgoraSettings.html b/docs/Structs/AgoraSettings.html index d0bb4180..2f529dc2 100644 --- a/docs/Structs/AgoraSettings.html +++ b/docs/Structs/AgoraSettings.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -383,7 +386,7 @@

    Declaration

    diff --git a/docs/Structs/AgoraSettings/BuiltinButtons.html b/docs/Structs/AgoraSettings/BuiltinButtons.html index c2991be0..1eb3077b 100644 --- a/docs/Structs/AgoraSettings/BuiltinButtons.html +++ b/docs/Structs/AgoraSettings/BuiltinButtons.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -341,7 +344,7 @@

    Parameters

    diff --git a/docs/Structs/AgoraSettings/Position.html b/docs/Structs/AgoraSettings/Position.html index a3b025d4..96069485 100644 --- a/docs/Structs/AgoraSettings/Position.html +++ b/docs/Structs/AgoraSettings/Position.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -215,7 +218,7 @@

    Declaration

    diff --git a/docs/Structs/AgoraViewer.html b/docs/Structs/AgoraViewer.html new file mode 100644 index 00000000..663732b1 --- /dev/null +++ b/docs/Structs/AgoraViewer.html @@ -0,0 +1,461 @@ + + + + AgoraViewer Structure Reference + + + + + + + + + + + + + +
    +
    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    +

    + + +

    +

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    AgoraViewer

    +
    +
    + +
    public struct AgoraViewer : UIViewRepresentable
    + +
    +
    +

    Add AgoraVideoViewer with SwiftUI

    + +
    +
    +
    +
      +
    • +
      + + + + UIViewType + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public typealias UIViewType = AgoraVideoViewer
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + makeUIView(context:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func makeUIView(context: Context) -> UIViewType
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func updateUIView(_ uiView: AgoraVideoViewer, context: Context)
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + viewer + +
      +
      +
      +
      +
      +
      +

      The AgoraVideoViewer for SwiftUI to show.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public private(set) var viewer: UIViewType { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + style + +
      +
      +
      +
      +
      +
      +

      Style and organisation to be applied to all the videos in the AgoraVideoViewer

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var style: AgoraVideoViewer.Style { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + agoraSettings + +
      +
      +
      +
      +
      +
      +

      Settings and customisations such as position of on-screen buttons, collection view of all channel members, as well as agora video configuration.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var agoraSettings: AgoraSettings { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + delegate + +
      +
      +
      +
      +
      +
      +

      Delegate for the AgoraVideoViewer, used for some important callback methods.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var delegate: AgoraVideoViewerDelegate? { get set }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create an AgoraViewer, which represents an AgoraVideoViewer object.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(
      +    connectionData: AgoraConnectionData, style: AgoraVideoViewer.Style = .grid,
      +    agoraSettings: AgoraSettings = AgoraSettings(), delegate: AgoraVideoViewerDelegate? = nil
      +)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + +
      + + connectionData + + +
      +

      Storing struct for holding data about the connection to Agora service.

      +
      +
      + + style + + +
      +

      Style and organisation to be applied to all the videos in this AgoraVideoViewer.

      +
      +
      + + agoraSettings + + +
      +

      Settings for this viewer. This can include style customisations and information of where to get new tokens from.

      +
      +
      + + delegate + + +
      +

      Delegate for the AgoraVideoViewer, used for some important callback methods.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Join the Agora channel

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func join(channel: String, with token: String?, as role: AgoraClientRole)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + channel + + +
      +

      Channel name to join.

      +
      +
      + + token + + +
      +

      Valid token to join the channel.

      +
      +
      + + role + + +
      +

      AgoraClientRole to join the channel as. Default: .broadcaster.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + +
    + diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes.html index e9d7a317..3587d49f 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@ + @@ -184,7 +187,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer.html index 448b119c..50e5f86b 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -2687,7 +2690,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/Style.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/Style.html index f96dfe25..1175c804 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/Style.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/Style.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -214,7 +217,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/TokenError.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/TokenError.html index ed2f7be0..85fec1f5 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/TokenError.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Classes/AgoraVideoViewer/TokenError.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -188,7 +191,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols.html index 8e51c808..56a1a14c 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -129,7 +132,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols/AgoraVideoViewerDelegate.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols/AgoraVideoViewerDelegate.html index f0cfd218..699940e1 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols/AgoraVideoViewerDelegate.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Protocols/AgoraVideoViewerDelegate.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -415,7 +418,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs.html index 43e657f4..441d1f94 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -178,12 +181,40 @@

    Declaration

    +
  • +
    + + + + AgoraViewer + +
    +
    +
    +
    +
    +
    +

    Add AgoraVideoViewer with SwiftUI

    + + See more +
    +
    +

    Declaration

    +
    +

    Swift

    +
    public struct AgoraViewer : UIViewRepresentable
    + +
    +
    +
    +
    +
  • diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraConnectionData.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraConnectionData.html index 5df0a8da..f95ed6e7 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraConnectionData.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraConnectionData.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -165,7 +168,7 @@

    Parameters

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings.html index d0bb4180..2f529dc2 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -383,7 +386,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/BuiltinButtons.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/BuiltinButtons.html index c2991be0..1eb3077b 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/BuiltinButtons.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/BuiltinButtons.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -341,7 +344,7 @@

    Parameters

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/Position.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/Position.html index a3b025d4..96069485 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/Position.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraSettings/Position.html @@ -17,7 +17,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -78,6 +78,9 @@

    + @@ -215,7 +218,7 @@

    Declaration

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraViewer.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraViewer.html new file mode 100644 index 00000000..663732b1 --- /dev/null +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/Structs/AgoraViewer.html @@ -0,0 +1,461 @@ + + + + AgoraViewer Structure Reference + + + + + + + + + + + + + +
    +
    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    +

    + + +

    +

    +
    +
    +
    + +
    +
    + +
    +
    +
    +

    AgoraViewer

    +
    +
    + +
    public struct AgoraViewer : UIViewRepresentable
    + +
    +
    +

    Add AgoraVideoViewer with SwiftUI

    + +
    +
    +
    +
      +
    • +
      + + + + UIViewType + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public typealias UIViewType = AgoraVideoViewer
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + makeUIView(context:) + +
      +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func makeUIView(context: Context) -> UIViewType
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func updateUIView(_ uiView: AgoraVideoViewer, context: Context)
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + viewer + +
      +
      +
      +
      +
      +
      +

      The AgoraVideoViewer for SwiftUI to show.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public private(set) var viewer: UIViewType { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + style + +
      +
      +
      +
      +
      +
      +

      Style and organisation to be applied to all the videos in the AgoraVideoViewer

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var style: AgoraVideoViewer.Style { get set }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + agoraSettings + +
      +
      +
      +
      +
      +
      +

      Settings and customisations such as position of on-screen buttons, collection view of all channel members, as well as agora video configuration.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var agoraSettings: AgoraSettings { get }
      + +
      +
      +
      +
      +
    • +
    • +
      + + + + delegate + +
      +
      +
      +
      +
      +
      +

      Delegate for the AgoraVideoViewer, used for some important callback methods.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public var delegate: AgoraVideoViewerDelegate? { get set }
      + +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Create an AgoraViewer, which represents an AgoraVideoViewer object.

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public init(
      +    connectionData: AgoraConnectionData, style: AgoraVideoViewer.Style = .grid,
      +    agoraSettings: AgoraSettings = AgoraSettings(), delegate: AgoraVideoViewerDelegate? = nil
      +)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + + + + + +
      + + connectionData + + +
      +

      Storing struct for holding data about the connection to Agora service.

      +
      +
      + + style + + +
      +

      Style and organisation to be applied to all the videos in this AgoraVideoViewer.

      +
      +
      + + agoraSettings + + +
      +

      Settings for this viewer. This can include style customisations and information of where to get new tokens from.

      +
      +
      + + delegate + + +
      +

      Delegate for the AgoraVideoViewer, used for some important callback methods.

      +
      +
      +
      +
      +
      +
    • +
    • + +
      +
      +
      +
      +
      +

      Join the Agora channel

      + +
      +
      +

      Declaration

      +
      +

      Swift

      +
      public func join(channel: String, with token: String?, as role: AgoraClientRole)
      + +
      +
      +
      +

      Parameters

      + + + + + + + + + + + + + + + +
      + + channel + + +
      +

      Channel name to join.

      +
      +
      + + token + + +
      +

      Valid token to join the channel.

      +
      +
      + + role + + +
      +

      AgoraClientRole to join the channel as. Default: .broadcaster.

      +
      +
      +
      +
      +
      +
    • +
    +
    +
    +
    + +
    +
    + +
    + diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/index.html b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/index.html index ef61e5fe..fffbff08 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/index.html +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/index.html @@ -16,7 +16,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -77,6 +77,9 @@ + @@ -168,7 +171,7 @@

    Documentation

    diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/search.json b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/search.json index f0b36aac..6af2050f 100644 --- a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/search.json +++ b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/Documents/search.json @@ -1 +1 @@ -{"Structs/AgoraConnectionData.html#/s:14AgoraUIKit_iOS0A14ConnectionDataV5appId0F5TokenACSS_SSSgtcfc":{"name":"init(appId:appToken:)","abstract":"

    Create AgoraConnectionData object

    ","parent_name":"AgoraConnectionData"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO3topyA2EmF":{"name":"top","abstract":"

    At the top of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO5rightyA2EmF":{"name":"right","abstract":"

    At the right of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO6bottomyA2EmF":{"name":"bottom","abstract":"

    At the bottom of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO4leftyA2EmF":{"name":"left","abstract":"

    At the left of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/BuiltinButtons.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV12cameraButtonAEvpZ":{"name":"cameraButton","abstract":"

    Option for displaying a button to toggle the camera on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV9micButtonAEvpZ":{"name":"micButton","abstract":"

    Option for displaying a button to toggle the microphone on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV10flipButtonAEvpZ":{"name":"flipButton","abstract":"

    Option for displaying a button to flip the camera between front and rear facing.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV14beautifyButtonAEvpZ":{"name":"beautifyButton","abstract":"

    Option for displaying a button to toggle beautify feature on or off

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV17screenShareButtonAEvpZ":{"name":"screenShareButton","abstract":"

    Option for displaying screenshare button

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV3allAEvpZ":{"name":"all","abstract":"

    Option to display all default buttons

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV8rawValueAESi_tcfc":{"name":"init(rawValue:)","abstract":"

    Initialiser for creating an option set

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV8tokenURLSSSgvp":{"name":"tokenURL","abstract":"

    URL to fetch tokens from. If supplied, this package will automatically fetch tokens","parent_name":"AgoraSettings"},"Structs/AgoraSettings/BuiltinButtons.html":{"name":"BuiltinButtons","abstract":"

    OptionSet for selecting which buttons are visible in the AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings/Position.html":{"name":"Position","abstract":"

    Position, top, left, bottom or right.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV15videoRenderModeSo0a5VideofG0Vvp":{"name":"videoRenderMode","abstract":"

    The rendering mode of the video view for all videos within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14enabledButtonsAC07BuiltinF0Vvp":{"name":"enabledButtons","abstract":"

    Which buttons should be enabled in this AgoraVideoView.","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14buttonPositionAC0F0Ovp":{"name":"buttonPosition","abstract":"

    Where the buttons such as camera enable/disable should be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV13floatPositionAC0F0Ovp":{"name":"floatPosition","abstract":"

    Where the floating collection view of video members be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV18videoConfigurationSo0a12VideoEncoderF0Cvp":{"name":"videoConfiguration","abstract":"

    Agora’s video encoder configuration.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV6colorsAA0A12ViewerColorsVvp":{"name":"colors","abstract":"

    Colors for views inside AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsVACycfc":{"name":"init()","abstract":"

    Create a new AgoraSettings object

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html":{"name":"AgoraSettings","abstract":"

    Settings used for the display and behaviour of AgoraVideoViewer

    "},"Structs.html#/s:14AgoraUIKit_iOS0A12ViewerColorsV":{"name":"AgoraViewerColors","abstract":"

    Colors for views inside AgoraVideoViewer

    "},"Structs/AgoraConnectionData.html":{"name":"AgoraConnectionData","abstract":"

    Storing struct for holding data about the connection to Agora service

    "},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)joinedChannelWithChannel:":{"name":"joinedChannel(channel:)","abstract":"

    Local user has joined the channel of a given name

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)leftChannel:":{"name":"leftChannel(_:)","abstract":"

    Local user has left the active channel.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenWillExpire:tokenPrivilegeWillExpire:":{"name":"tokenWillExpire(_:tokenPrivilegeWillExpire:)","abstract":"

    The token used to connect to the current active channel will expire in 30 seconds.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenDidExpire:":{"name":"tokenDidExpire(_:)","abstract":"

    The token used to connect to the current active channel has expired.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)presentAlertWithAlert:animated:":{"name":"presentAlert(alert:animated:)","abstract":"

    presentAlert is a way to show any alerts that the AgoraVideoViewer wants to display.","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)extraButtons":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/extraButtons()":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html":{"name":"AgoraVideoViewerDelegate","abstract":"

    An interface for getting some common delegate callbacks without needing to subclass.

    "},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO6noDatayA2EmF":{"name":"noData","abstract":"

    No data returned from the token request

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO11invalidDatayA2EmF":{"name":"invalidData","abstract":"

    Data corrupted or in the wrong format

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO10invalidURLyA2EmF":{"name":"invalidURL","abstract":"

    URL could not be created

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO4gridyA2EmF":{"name":"grid","abstract":"

    grid lays out all the videos in an NxN grid, regardless of how many there are.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO8floatingyA2EmF":{"name":"floating","abstract":"

    floating keeps track of the active speaker, displays them larger and the others in a collection view.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO6customyAEyAC_s18EnumeratedSequenceVySDySuAA0a6SingleD4ViewCGGSitc_tcAEmF":{"name":"custom(customFunction:)","abstract":"

    Method for constructing a custom layout.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Style"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8delegateAA0adE8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13agoraSettingsAA0aG0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members,","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/Style.html":{"name":"Style","abstract":"

    Style and organisation to be applied to all the videos in this view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13activeSpeakerSuSgvp":{"name":"activeSpeaker","abstract":"

    The most recently active speaker in the session. This will only ever be set to remote users, not the local user.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC21overrideActiveSpeakerSuSgvp":{"name":"overrideActiveSpeaker","abstract":"

    This user will be the main focus when using .floating style.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8userRoleSo0a6ClientG0Vvp":{"name":"userRole","abstract":"

    Gets and sets the role for the user. Either .audience or .broadcaster.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5agkitSo0A12RtcEngineKitCvp":{"name":"agkit","abstract":"

    AgoraRtcEngineKit being used by this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5styleAC5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC14connectionData5style13agoraSettings8delegateAcA0a10ConnectionG0V_AC5StyleOAA0aJ0VAA0adE8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Creates an AgoraVideoViewer object, to be placed anywhere in your application.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)initWithCoder:":{"name":"init(coder:)","abstract":"

    Create view from NSCoder

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5fills4viewySo6UIViewC_tF":{"name":"fills(view:)","abstract":"

    Helper method to fill a view with this view

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Asks your data source object for the cell that corresponds to the specified item in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Asks your data source object for the number of items in the specified section.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    Tells the delegate that the specified cell is about to be displayed in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    Tells the delegate that the specified cell was removed from the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:itemForRepresentedObjectAt:)":{"name":"collectionView(_:itemForRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/numberOfSections(in:)":{"name":"numberOfSections(in:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:numberOfItemsInSection:)":{"name":"collectionView(_:numberOfItemsInSection:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:willDisplay:forRepresentedObjectAt:)":{"name":"collectionView(_:willDisplay:forRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:didSelectItemsAt:)":{"name":"collectionView(_:didSelectItemsAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Tells the delegate that the item at the specified index path was selected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didClientRoleChanged:newRole:":{"name":"rtcEngine(_:didClientRoleChanged:newRole:)","abstract":"

    Called when the user role successfully changes

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didJoinedOfUid:elapsed:":{"name":"rtcEngine(_:didJoinedOfUid:elapsed:)","abstract":"

    New User joined the channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteAudioStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteAudioStateChangedOfUid:state:reason:elapsed:)","abstract":"

    This callback indicates the state change of the local audio stream, including the state of the audio recording and encoding, and allows you to troubleshoot issues when exceptions occur.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didOfflineOfUid:reason:":{"name":"rtcEngine(_:didOfflineOfUid:reason:)","abstract":"

    Occurs when a remote user (Communication)/host (Live Broadcast) leaves a channel. Same as userOfflineBlock.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:activeSpeaker:":{"name":"rtcEngine(_:activeSpeaker:)","abstract":"

    Occurs when the most active speaker is detected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteVideoStateChangedOfUid:state:reason:elapsed:)","abstract":"

    Occurs when the remote video state changes.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localVideoStateChange:error:":{"name":"rtcEngine(_:localVideoStateChange:error:)","abstract":"

    Occurs when the local video stream state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localAudioStateChange:error:":{"name":"rtcEngine(_:localAudioStateChange:error:)","abstract":"

    Occurs when the local audio state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:firstLocalAudioFramePublished:":{"name":"rtcEngine(_:firstLocalAudioFramePublished:)","abstract":"

    Occurs when the first audio frame is published.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngineRequestToken:":{"name":"rtcEngineRequestToken(_:)","abstract":"

    Occurs when the token expires.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:tokenPrivilegeWillExpire:":{"name":"rtcEngine(_:tokenPrivilegeWillExpire:)","abstract":"

    Occurs when the token expires in 30 seconds.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC15getCameraButtonSo8UIButtonCSgyF":{"name":"getCameraButton()","abstract":"

    Get the button for enabling/disabling the camera

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12getMicButtonSo8UIButtonCSgyF":{"name":"getMicButton()","abstract":"

    Get the button for muting/unmuting the microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC20getScreenShareButtonSo8UIButtonCSgyF":{"name":"getScreenShareButton()","abstract":"

    Get the button for sharing the current screen

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13getFlipButtonSo8UIButtonCSgyF":{"name":"getFlipButton()","abstract":"

    Get the button for flipping the camera from front to rear facing

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC17getBeautifyButtonSo8UIButtonCSgyF":{"name":"getBeautifyButton()","abstract":"

    Get the button for enabling/disabling the beautify effect.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19checkForPermissions11alsoRequest8callbackS2b_yycSgtF":{"name":"checkForPermissions(alsoRequest:callback:)","abstract":"

    Helper function to check if we currently have permission to use the camera and microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19requestCameraAccess7handleryySbcSg_tFZ":{"name":"requestCameraAccess(handler:)","abstract":"

    Request access to use the camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC23requestMicrophoneAccess7handleryySbcSg_tFZ":{"name":"requestMicrophoneAccess(handler:)","abstract":"

    Request access to use the microphone.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/TokenError.html":{"name":"TokenError","abstract":"

    Error types to expect from fetchToken on failing ot retrieve valid token.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10fetchToken7urlBase11channelName6userId8callbackySS_SSSuys6ResultOySSs5Error_pGctFZ":{"name":"fetchToken(urlBase:channelName:userId:callback:)","abstract":"

    Requests the token from our backend token service

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleCam":{"name":"toggleCam()","abstract":"

    Toggle the camera between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleMic":{"name":"toggleMic()","abstract":"

    Toggle the microphone between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleScreenShare":{"name":"toggleScreenShare()","abstract":"

    Turn screen sharing on/off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBeautify":{"name":"toggleBeautify()","abstract":"

    Turn on/off the ‘beautify’ effect. Visual and voice change.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)flipCamera":{"name":"flipCamera()","abstract":"

    Swap between front and back facing camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBroadcast":{"name":"toggleBroadcast()","abstract":"

    Toggle between being a host or a member of the audience.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC7setRole2toySo0a6ClientG0V_tF":{"name":"setRole(to:)","abstract":"

    Change the role of the local user when connecting to a channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel2as10fetchToken3uidySS_So0A10ClientRoleVSbSuSgtF":{"name":"join(channel:as:fetchToken:uid:)","abstract":"

    Join the Agora channel using token stored in AgoraVideoViewer object

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel4with2as3uidySS_SSSgSo0A10ClientRoleVSuSgtF":{"name":"join(channel:with:as:uid:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12leaveChannelys5Int32VySo0aG5StatsCcSgF":{"name":"leaveChannel(_:)","abstract":"

    Leave channel stops all preview elements

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC11updateTokenyySSF":{"name":"updateToken(_:)","abstract":"

    Update the token currently in use by the Agora SDK. Used to not interrupt an active video session.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4exityyF":{"name":"exit()","abstract":"

    Leave any open channels and kills the Agora Engine instance.

    ","parent_name":"AgoraVideoViewer"},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraCollectionViewer":{"name":"AgoraCollectionViewer","abstract":"

    Collection View to display all connected users camera feeds

    "},"Classes/AgoraVideoViewer.html":{"name":"AgoraVideoViewer","abstract":"

    View to contain all the video session objects, including camera feeds and buttons for settings

    "},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraSingleVideoView":{"name":"AgoraSingleVideoView","abstract":"

    View for the individual Agora Camera Feed.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP0C4TypeQa":{"name":"UIViewType","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP04makeC07context0C4TypeQzAA0cD7ContextVyxG_tF":{"name":"makeUIView(context:)","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP06updateC0_7contexty0C4TypeQz_AA0cD7ContextVyxGtF":{"name":"updateUIView(_:context:)","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV6viewerAA0a5VideoD0Cvp":{"name":"viewer","abstract":"

    The AgoraVideoViewer for SwiftUI to show.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV5styleAA0a5VideoD0C5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in the AgoraVideoViewer

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV13agoraSettingsAA0aF0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members, as well as agora video configuration.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV8delegateAA0a5VideoD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV14connectionData5style13agoraSettings8delegateAcA0a10ConnectionF0V_AA0a5VideoD0C5StyleOAA0aI0VAA0alD8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Create an AgoraViewer, which represents an AgoraVideoViewer object.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV4join7channel4with2asySS_SSSgSo0A10ClientRoleVtF":{"name":"join(channel:with:as:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraViewer"},"Structs/AgoraConnectionData.html#/s:14AgoraUIKit_iOS0A14ConnectionDataV5appId0F5TokenACSS_SSSgtcfc":{"name":"init(appId:appToken:)","abstract":"

    Create AgoraConnectionData object

    ","parent_name":"AgoraConnectionData"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO3topyA2EmF":{"name":"top","abstract":"

    At the top of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO5rightyA2EmF":{"name":"right","abstract":"

    At the right of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO6bottomyA2EmF":{"name":"bottom","abstract":"

    At the bottom of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO4leftyA2EmF":{"name":"left","abstract":"

    At the left of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/BuiltinButtons.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV12cameraButtonAEvpZ":{"name":"cameraButton","abstract":"

    Option for displaying a button to toggle the camera on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV9micButtonAEvpZ":{"name":"micButton","abstract":"

    Option for displaying a button to toggle the microphone on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV10flipButtonAEvpZ":{"name":"flipButton","abstract":"

    Option for displaying a button to flip the camera between front and rear facing.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV14beautifyButtonAEvpZ":{"name":"beautifyButton","abstract":"

    Option for displaying a button to toggle beautify feature on or off

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV17screenShareButtonAEvpZ":{"name":"screenShareButton","abstract":"

    Option for displaying screenshare button

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV3allAEvpZ":{"name":"all","abstract":"

    Option to display all default buttons

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV8rawValueAESi_tcfc":{"name":"init(rawValue:)","abstract":"

    Initialiser for creating an option set

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV8tokenURLSSSgvp":{"name":"tokenURL","abstract":"

    URL to fetch tokens from. If supplied, this package will automatically fetch tokens","parent_name":"AgoraSettings"},"Structs/AgoraSettings/BuiltinButtons.html":{"name":"BuiltinButtons","abstract":"

    OptionSet for selecting which buttons are visible in the AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings/Position.html":{"name":"Position","abstract":"

    Position, top, left, bottom or right.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV15videoRenderModeSo0a5VideofG0Vvp":{"name":"videoRenderMode","abstract":"

    The rendering mode of the video view for all videos within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14enabledButtonsAC07BuiltinF0Vvp":{"name":"enabledButtons","abstract":"

    Which buttons should be enabled in this AgoraVideoView.","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14buttonPositionAC0F0Ovp":{"name":"buttonPosition","abstract":"

    Where the buttons such as camera enable/disable should be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV13floatPositionAC0F0Ovp":{"name":"floatPosition","abstract":"

    Where the floating collection view of video members be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV18videoConfigurationSo0a12VideoEncoderF0Cvp":{"name":"videoConfiguration","abstract":"

    Agora’s video encoder configuration.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV6colorsAA0A12ViewerColorsVvp":{"name":"colors","abstract":"

    Colors for views inside AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsVACycfc":{"name":"init()","abstract":"

    Create a new AgoraSettings object

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html":{"name":"AgoraSettings","abstract":"

    Settings used for the display and behaviour of AgoraVideoViewer

    "},"Structs.html#/s:14AgoraUIKit_iOS0A12ViewerColorsV":{"name":"AgoraViewerColors","abstract":"

    Colors for views inside AgoraVideoViewer

    "},"Structs/AgoraConnectionData.html":{"name":"AgoraConnectionData","abstract":"

    Storing struct for holding data about the connection to Agora service

    "},"Structs/AgoraViewer.html":{"name":"AgoraViewer","abstract":"

    Add AgoraVideoViewer with SwiftUI

    "},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)joinedChannelWithChannel:":{"name":"joinedChannel(channel:)","abstract":"

    Local user has joined the channel of a given name

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)leftChannel:":{"name":"leftChannel(_:)","abstract":"

    Local user has left the active channel.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenWillExpire:tokenPrivilegeWillExpire:":{"name":"tokenWillExpire(_:tokenPrivilegeWillExpire:)","abstract":"

    The token used to connect to the current active channel will expire in 30 seconds.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenDidExpire:":{"name":"tokenDidExpire(_:)","abstract":"

    The token used to connect to the current active channel has expired.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)presentAlertWithAlert:animated:":{"name":"presentAlert(alert:animated:)","abstract":"

    presentAlert is a way to show any alerts that the AgoraVideoViewer wants to display.","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)extraButtons":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/extraButtons()":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html":{"name":"AgoraVideoViewerDelegate","abstract":"

    An interface for getting some common delegate callbacks without needing to subclass.

    "},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO6noDatayA2EmF":{"name":"noData","abstract":"

    No data returned from the token request

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO11invalidDatayA2EmF":{"name":"invalidData","abstract":"

    Data corrupted or in the wrong format

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO10invalidURLyA2EmF":{"name":"invalidURL","abstract":"

    URL could not be created

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO4gridyA2EmF":{"name":"grid","abstract":"

    grid lays out all the videos in an NxN grid, regardless of how many there are.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO8floatingyA2EmF":{"name":"floating","abstract":"

    floating keeps track of the active speaker, displays them larger and the others in a collection view.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO6customyAEyAC_s18EnumeratedSequenceVySDySuAA0a6SingleD4ViewCGGSitc_tcAEmF":{"name":"custom(customFunction:)","abstract":"

    Method for constructing a custom layout.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Style"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8delegateAA0adE8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13agoraSettingsAA0aG0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members,","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/Style.html":{"name":"Style","abstract":"

    Style and organisation to be applied to all the videos in this view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13activeSpeakerSuSgvp":{"name":"activeSpeaker","abstract":"

    The most recently active speaker in the session. This will only ever be set to remote users, not the local user.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC21overrideActiveSpeakerSuSgvp":{"name":"overrideActiveSpeaker","abstract":"

    This user will be the main focus when using .floating style.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8userRoleSo0a6ClientG0Vvp":{"name":"userRole","abstract":"

    Gets and sets the role for the user. Either .audience or .broadcaster.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5agkitSo0A12RtcEngineKitCvp":{"name":"agkit","abstract":"

    AgoraRtcEngineKit being used by this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5styleAC5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC14connectionData5style13agoraSettings8delegateAcA0a10ConnectionG0V_AC5StyleOAA0aJ0VAA0adE8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Creates an AgoraVideoViewer object, to be placed anywhere in your application.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)initWithCoder:":{"name":"init(coder:)","abstract":"

    Create view from NSCoder

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5fills4viewySo6UIViewC_tF":{"name":"fills(view:)","abstract":"

    Helper method to fill a view with this view

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Asks your data source object for the cell that corresponds to the specified item in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Asks your data source object for the number of items in the specified section.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    Tells the delegate that the specified cell is about to be displayed in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    Tells the delegate that the specified cell was removed from the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:itemForRepresentedObjectAt:)":{"name":"collectionView(_:itemForRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/numberOfSections(in:)":{"name":"numberOfSections(in:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:numberOfItemsInSection:)":{"name":"collectionView(_:numberOfItemsInSection:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:willDisplay:forRepresentedObjectAt:)":{"name":"collectionView(_:willDisplay:forRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:didSelectItemsAt:)":{"name":"collectionView(_:didSelectItemsAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Tells the delegate that the item at the specified index path was selected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didClientRoleChanged:newRole:":{"name":"rtcEngine(_:didClientRoleChanged:newRole:)","abstract":"

    Called when the user role successfully changes

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didJoinedOfUid:elapsed:":{"name":"rtcEngine(_:didJoinedOfUid:elapsed:)","abstract":"

    New User joined the channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteAudioStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteAudioStateChangedOfUid:state:reason:elapsed:)","abstract":"

    This callback indicates the state change of the local audio stream, including the state of the audio recording and encoding, and allows you to troubleshoot issues when exceptions occur.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didOfflineOfUid:reason:":{"name":"rtcEngine(_:didOfflineOfUid:reason:)","abstract":"

    Occurs when a remote user (Communication)/host (Live Broadcast) leaves a channel. Same as userOfflineBlock.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:activeSpeaker:":{"name":"rtcEngine(_:activeSpeaker:)","abstract":"

    Occurs when the most active speaker is detected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteVideoStateChangedOfUid:state:reason:elapsed:)","abstract":"

    Occurs when the remote video state changes.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localVideoStateChange:error:":{"name":"rtcEngine(_:localVideoStateChange:error:)","abstract":"

    Occurs when the local video stream state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localAudioStateChange:error:":{"name":"rtcEngine(_:localAudioStateChange:error:)","abstract":"

    Occurs when the local audio state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:firstLocalAudioFramePublished:":{"name":"rtcEngine(_:firstLocalAudioFramePublished:)","abstract":"

    Occurs when the first audio frame is published.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngineRequestToken:":{"name":"rtcEngineRequestToken(_:)","abstract":"

    Occurs when the token expires.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:tokenPrivilegeWillExpire:":{"name":"rtcEngine(_:tokenPrivilegeWillExpire:)","abstract":"

    Occurs when the token expires in 30 seconds.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC15getCameraButtonSo8UIButtonCSgyF":{"name":"getCameraButton()","abstract":"

    Get the button for enabling/disabling the camera

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12getMicButtonSo8UIButtonCSgyF":{"name":"getMicButton()","abstract":"

    Get the button for muting/unmuting the microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC20getScreenShareButtonSo8UIButtonCSgyF":{"name":"getScreenShareButton()","abstract":"

    Get the button for sharing the current screen

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13getFlipButtonSo8UIButtonCSgyF":{"name":"getFlipButton()","abstract":"

    Get the button for flipping the camera from front to rear facing

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC17getBeautifyButtonSo8UIButtonCSgyF":{"name":"getBeautifyButton()","abstract":"

    Get the button for enabling/disabling the beautify effect.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19checkForPermissions11alsoRequest8callbackS2b_yycSgtF":{"name":"checkForPermissions(alsoRequest:callback:)","abstract":"

    Helper function to check if we currently have permission to use the camera and microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19requestCameraAccess7handleryySbcSg_tFZ":{"name":"requestCameraAccess(handler:)","abstract":"

    Request access to use the camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC23requestMicrophoneAccess7handleryySbcSg_tFZ":{"name":"requestMicrophoneAccess(handler:)","abstract":"

    Request access to use the microphone.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/TokenError.html":{"name":"TokenError","abstract":"

    Error types to expect from fetchToken on failing ot retrieve valid token.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10fetchToken7urlBase11channelName6userId8callbackySS_SSSuys6ResultOySSs5Error_pGctFZ":{"name":"fetchToken(urlBase:channelName:userId:callback:)","abstract":"

    Requests the token from our backend token service

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleCam":{"name":"toggleCam()","abstract":"

    Toggle the camera between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleMic":{"name":"toggleMic()","abstract":"

    Toggle the microphone between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleScreenShare":{"name":"toggleScreenShare()","abstract":"

    Turn screen sharing on/off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBeautify":{"name":"toggleBeautify()","abstract":"

    Turn on/off the ‘beautify’ effect. Visual and voice change.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)flipCamera":{"name":"flipCamera()","abstract":"

    Swap between front and back facing camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBroadcast":{"name":"toggleBroadcast()","abstract":"

    Toggle between being a host or a member of the audience.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC7setRole2toySo0a6ClientG0V_tF":{"name":"setRole(to:)","abstract":"

    Change the role of the local user when connecting to a channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel2as10fetchToken3uidySS_So0A10ClientRoleVSbSuSgtF":{"name":"join(channel:as:fetchToken:uid:)","abstract":"

    Join the Agora channel using token stored in AgoraVideoViewer object

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel4with2as3uidySS_SSSgSo0A10ClientRoleVSuSgtF":{"name":"join(channel:with:as:uid:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12leaveChannelys5Int32VySo0aG5StatsCcSgF":{"name":"leaveChannel(_:)","abstract":"

    Leave channel stops all preview elements

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC11updateTokenyySSF":{"name":"updateToken(_:)","abstract":"

    Update the token currently in use by the Agora SDK. Used to not interrupt an active video session.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4exityyF":{"name":"exit()","abstract":"

    Leave any open channels and kills the Agora Engine instance.

    ","parent_name":"AgoraVideoViewer"},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraCollectionViewer":{"name":"AgoraCollectionViewer","abstract":"

    Collection View to display all connected users camera feeds

    "},"Classes/AgoraVideoViewer.html":{"name":"AgoraVideoViewer","abstract":"

    View to contain all the video session objects, including camera feeds and buttons for settings

    "},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraSingleVideoView":{"name":"AgoraSingleVideoView","abstract":"

    View for the individual Agora Camera Feed.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file diff --git a/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/docSet.dsidx b/docs/docsets/AgoraUIKit_iOS.docset/Contents/Resources/docSet.dsidx index 99ab83c2ef21131e08f065355b9face374b7daa2..36cbc94cc596f1d7be81330e7e93ee8be89661e1 100644 GIT binary patch delta 3904 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 delta 2328 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�~b1*|kYNaNMYp=Vw}KJWPVE8y5B!C3epO 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 M2Top8r2yIp09T%5MgRZ+ diff --git a/docs/index.html b/docs/index.html index ef61e5fe..fffbff08 100644 --- a/docs/index.html +++ b/docs/index.html @@ -16,7 +16,7 @@
    -

    AgoraUIKit_iOS 1.0.3 Docs (100% documented)

    +

    AgoraUIKit_iOS 1.1.0 Docs (100% documented)

    @@ -77,6 +77,9 @@

    + @@ -168,7 +171,7 @@

    Documentation

    diff --git a/docs/search.json b/docs/search.json index f0b36aac..6af2050f 100644 --- a/docs/search.json +++ b/docs/search.json @@ -1 +1 @@ -{"Structs/AgoraConnectionData.html#/s:14AgoraUIKit_iOS0A14ConnectionDataV5appId0F5TokenACSS_SSSgtcfc":{"name":"init(appId:appToken:)","abstract":"

    Create AgoraConnectionData object

    ","parent_name":"AgoraConnectionData"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO3topyA2EmF":{"name":"top","abstract":"

    At the top of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO5rightyA2EmF":{"name":"right","abstract":"

    At the right of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO6bottomyA2EmF":{"name":"bottom","abstract":"

    At the bottom of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO4leftyA2EmF":{"name":"left","abstract":"

    At the left of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/BuiltinButtons.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV12cameraButtonAEvpZ":{"name":"cameraButton","abstract":"

    Option for displaying a button to toggle the camera on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV9micButtonAEvpZ":{"name":"micButton","abstract":"

    Option for displaying a button to toggle the microphone on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV10flipButtonAEvpZ":{"name":"flipButton","abstract":"

    Option for displaying a button to flip the camera between front and rear facing.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV14beautifyButtonAEvpZ":{"name":"beautifyButton","abstract":"

    Option for displaying a button to toggle beautify feature on or off

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV17screenShareButtonAEvpZ":{"name":"screenShareButton","abstract":"

    Option for displaying screenshare button

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV3allAEvpZ":{"name":"all","abstract":"

    Option to display all default buttons

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV8rawValueAESi_tcfc":{"name":"init(rawValue:)","abstract":"

    Initialiser for creating an option set

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV8tokenURLSSSgvp":{"name":"tokenURL","abstract":"

    URL to fetch tokens from. If supplied, this package will automatically fetch tokens","parent_name":"AgoraSettings"},"Structs/AgoraSettings/BuiltinButtons.html":{"name":"BuiltinButtons","abstract":"

    OptionSet for selecting which buttons are visible in the AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings/Position.html":{"name":"Position","abstract":"

    Position, top, left, bottom or right.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV15videoRenderModeSo0a5VideofG0Vvp":{"name":"videoRenderMode","abstract":"

    The rendering mode of the video view for all videos within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14enabledButtonsAC07BuiltinF0Vvp":{"name":"enabledButtons","abstract":"

    Which buttons should be enabled in this AgoraVideoView.","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14buttonPositionAC0F0Ovp":{"name":"buttonPosition","abstract":"

    Where the buttons such as camera enable/disable should be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV13floatPositionAC0F0Ovp":{"name":"floatPosition","abstract":"

    Where the floating collection view of video members be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV18videoConfigurationSo0a12VideoEncoderF0Cvp":{"name":"videoConfiguration","abstract":"

    Agora’s video encoder configuration.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV6colorsAA0A12ViewerColorsVvp":{"name":"colors","abstract":"

    Colors for views inside AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsVACycfc":{"name":"init()","abstract":"

    Create a new AgoraSettings object

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html":{"name":"AgoraSettings","abstract":"

    Settings used for the display and behaviour of AgoraVideoViewer

    "},"Structs.html#/s:14AgoraUIKit_iOS0A12ViewerColorsV":{"name":"AgoraViewerColors","abstract":"

    Colors for views inside AgoraVideoViewer

    "},"Structs/AgoraConnectionData.html":{"name":"AgoraConnectionData","abstract":"

    Storing struct for holding data about the connection to Agora service

    "},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)joinedChannelWithChannel:":{"name":"joinedChannel(channel:)","abstract":"

    Local user has joined the channel of a given name

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)leftChannel:":{"name":"leftChannel(_:)","abstract":"

    Local user has left the active channel.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenWillExpire:tokenPrivilegeWillExpire:":{"name":"tokenWillExpire(_:tokenPrivilegeWillExpire:)","abstract":"

    The token used to connect to the current active channel will expire in 30 seconds.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenDidExpire:":{"name":"tokenDidExpire(_:)","abstract":"

    The token used to connect to the current active channel has expired.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)presentAlertWithAlert:animated:":{"name":"presentAlert(alert:animated:)","abstract":"

    presentAlert is a way to show any alerts that the AgoraVideoViewer wants to display.","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)extraButtons":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/extraButtons()":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html":{"name":"AgoraVideoViewerDelegate","abstract":"

    An interface for getting some common delegate callbacks without needing to subclass.

    "},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO6noDatayA2EmF":{"name":"noData","abstract":"

    No data returned from the token request

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO11invalidDatayA2EmF":{"name":"invalidData","abstract":"

    Data corrupted or in the wrong format

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO10invalidURLyA2EmF":{"name":"invalidURL","abstract":"

    URL could not be created

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO4gridyA2EmF":{"name":"grid","abstract":"

    grid lays out all the videos in an NxN grid, regardless of how many there are.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO8floatingyA2EmF":{"name":"floating","abstract":"

    floating keeps track of the active speaker, displays them larger and the others in a collection view.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO6customyAEyAC_s18EnumeratedSequenceVySDySuAA0a6SingleD4ViewCGGSitc_tcAEmF":{"name":"custom(customFunction:)","abstract":"

    Method for constructing a custom layout.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Style"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8delegateAA0adE8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13agoraSettingsAA0aG0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members,","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/Style.html":{"name":"Style","abstract":"

    Style and organisation to be applied to all the videos in this view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13activeSpeakerSuSgvp":{"name":"activeSpeaker","abstract":"

    The most recently active speaker in the session. This will only ever be set to remote users, not the local user.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC21overrideActiveSpeakerSuSgvp":{"name":"overrideActiveSpeaker","abstract":"

    This user will be the main focus when using .floating style.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8userRoleSo0a6ClientG0Vvp":{"name":"userRole","abstract":"

    Gets and sets the role for the user. Either .audience or .broadcaster.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5agkitSo0A12RtcEngineKitCvp":{"name":"agkit","abstract":"

    AgoraRtcEngineKit being used by this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5styleAC5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC14connectionData5style13agoraSettings8delegateAcA0a10ConnectionG0V_AC5StyleOAA0aJ0VAA0adE8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Creates an AgoraVideoViewer object, to be placed anywhere in your application.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)initWithCoder:":{"name":"init(coder:)","abstract":"

    Create view from NSCoder

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5fills4viewySo6UIViewC_tF":{"name":"fills(view:)","abstract":"

    Helper method to fill a view with this view

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Asks your data source object for the cell that corresponds to the specified item in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Asks your data source object for the number of items in the specified section.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    Tells the delegate that the specified cell is about to be displayed in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    Tells the delegate that the specified cell was removed from the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:itemForRepresentedObjectAt:)":{"name":"collectionView(_:itemForRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/numberOfSections(in:)":{"name":"numberOfSections(in:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:numberOfItemsInSection:)":{"name":"collectionView(_:numberOfItemsInSection:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:willDisplay:forRepresentedObjectAt:)":{"name":"collectionView(_:willDisplay:forRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:didSelectItemsAt:)":{"name":"collectionView(_:didSelectItemsAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Tells the delegate that the item at the specified index path was selected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didClientRoleChanged:newRole:":{"name":"rtcEngine(_:didClientRoleChanged:newRole:)","abstract":"

    Called when the user role successfully changes

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didJoinedOfUid:elapsed:":{"name":"rtcEngine(_:didJoinedOfUid:elapsed:)","abstract":"

    New User joined the channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteAudioStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteAudioStateChangedOfUid:state:reason:elapsed:)","abstract":"

    This callback indicates the state change of the local audio stream, including the state of the audio recording and encoding, and allows you to troubleshoot issues when exceptions occur.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didOfflineOfUid:reason:":{"name":"rtcEngine(_:didOfflineOfUid:reason:)","abstract":"

    Occurs when a remote user (Communication)/host (Live Broadcast) leaves a channel. Same as userOfflineBlock.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:activeSpeaker:":{"name":"rtcEngine(_:activeSpeaker:)","abstract":"

    Occurs when the most active speaker is detected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteVideoStateChangedOfUid:state:reason:elapsed:)","abstract":"

    Occurs when the remote video state changes.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localVideoStateChange:error:":{"name":"rtcEngine(_:localVideoStateChange:error:)","abstract":"

    Occurs when the local video stream state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localAudioStateChange:error:":{"name":"rtcEngine(_:localAudioStateChange:error:)","abstract":"

    Occurs when the local audio state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:firstLocalAudioFramePublished:":{"name":"rtcEngine(_:firstLocalAudioFramePublished:)","abstract":"

    Occurs when the first audio frame is published.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngineRequestToken:":{"name":"rtcEngineRequestToken(_:)","abstract":"

    Occurs when the token expires.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:tokenPrivilegeWillExpire:":{"name":"rtcEngine(_:tokenPrivilegeWillExpire:)","abstract":"

    Occurs when the token expires in 30 seconds.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC15getCameraButtonSo8UIButtonCSgyF":{"name":"getCameraButton()","abstract":"

    Get the button for enabling/disabling the camera

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12getMicButtonSo8UIButtonCSgyF":{"name":"getMicButton()","abstract":"

    Get the button for muting/unmuting the microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC20getScreenShareButtonSo8UIButtonCSgyF":{"name":"getScreenShareButton()","abstract":"

    Get the button for sharing the current screen

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13getFlipButtonSo8UIButtonCSgyF":{"name":"getFlipButton()","abstract":"

    Get the button for flipping the camera from front to rear facing

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC17getBeautifyButtonSo8UIButtonCSgyF":{"name":"getBeautifyButton()","abstract":"

    Get the button for enabling/disabling the beautify effect.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19checkForPermissions11alsoRequest8callbackS2b_yycSgtF":{"name":"checkForPermissions(alsoRequest:callback:)","abstract":"

    Helper function to check if we currently have permission to use the camera and microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19requestCameraAccess7handleryySbcSg_tFZ":{"name":"requestCameraAccess(handler:)","abstract":"

    Request access to use the camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC23requestMicrophoneAccess7handleryySbcSg_tFZ":{"name":"requestMicrophoneAccess(handler:)","abstract":"

    Request access to use the microphone.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/TokenError.html":{"name":"TokenError","abstract":"

    Error types to expect from fetchToken on failing ot retrieve valid token.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10fetchToken7urlBase11channelName6userId8callbackySS_SSSuys6ResultOySSs5Error_pGctFZ":{"name":"fetchToken(urlBase:channelName:userId:callback:)","abstract":"

    Requests the token from our backend token service

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleCam":{"name":"toggleCam()","abstract":"

    Toggle the camera between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleMic":{"name":"toggleMic()","abstract":"

    Toggle the microphone between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleScreenShare":{"name":"toggleScreenShare()","abstract":"

    Turn screen sharing on/off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBeautify":{"name":"toggleBeautify()","abstract":"

    Turn on/off the ‘beautify’ effect. Visual and voice change.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)flipCamera":{"name":"flipCamera()","abstract":"

    Swap between front and back facing camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBroadcast":{"name":"toggleBroadcast()","abstract":"

    Toggle between being a host or a member of the audience.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC7setRole2toySo0a6ClientG0V_tF":{"name":"setRole(to:)","abstract":"

    Change the role of the local user when connecting to a channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel2as10fetchToken3uidySS_So0A10ClientRoleVSbSuSgtF":{"name":"join(channel:as:fetchToken:uid:)","abstract":"

    Join the Agora channel using token stored in AgoraVideoViewer object

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel4with2as3uidySS_SSSgSo0A10ClientRoleVSuSgtF":{"name":"join(channel:with:as:uid:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12leaveChannelys5Int32VySo0aG5StatsCcSgF":{"name":"leaveChannel(_:)","abstract":"

    Leave channel stops all preview elements

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC11updateTokenyySSF":{"name":"updateToken(_:)","abstract":"

    Update the token currently in use by the Agora SDK. Used to not interrupt an active video session.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4exityyF":{"name":"exit()","abstract":"

    Leave any open channels and kills the Agora Engine instance.

    ","parent_name":"AgoraVideoViewer"},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraCollectionViewer":{"name":"AgoraCollectionViewer","abstract":"

    Collection View to display all connected users camera feeds

    "},"Classes/AgoraVideoViewer.html":{"name":"AgoraVideoViewer","abstract":"

    View to contain all the video session objects, including camera feeds and buttons for settings

    "},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraSingleVideoView":{"name":"AgoraSingleVideoView","abstract":"

    View for the individual Agora Camera Feed.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file +{"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP0C4TypeQa":{"name":"UIViewType","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP04makeC07context0C4TypeQzAA0cD7ContextVyxG_tF":{"name":"makeUIView(context:)","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:7SwiftUI19UIViewRepresentableP06updateC0_7contexty0C4TypeQz_AA0cD7ContextVyxGtF":{"name":"updateUIView(_:context:)","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV6viewerAA0a5VideoD0Cvp":{"name":"viewer","abstract":"

    The AgoraVideoViewer for SwiftUI to show.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV5styleAA0a5VideoD0C5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in the AgoraVideoViewer

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV13agoraSettingsAA0aF0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members, as well as agora video configuration.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV8delegateAA0a5VideoD8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV14connectionData5style13agoraSettings8delegateAcA0a10ConnectionF0V_AA0a5VideoD0C5StyleOAA0aI0VAA0alD8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Create an AgoraViewer, which represents an AgoraVideoViewer object.

    ","parent_name":"AgoraViewer"},"Structs/AgoraViewer.html#/s:14AgoraUIKit_iOS0A6ViewerV4join7channel4with2asySS_SSSgSo0A10ClientRoleVtF":{"name":"join(channel:with:as:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraViewer"},"Structs/AgoraConnectionData.html#/s:14AgoraUIKit_iOS0A14ConnectionDataV5appId0F5TokenACSS_SSSgtcfc":{"name":"init(appId:appToken:)","abstract":"

    Create AgoraConnectionData object

    ","parent_name":"AgoraConnectionData"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO3topyA2EmF":{"name":"top","abstract":"

    At the top of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO5rightyA2EmF":{"name":"right","abstract":"

    At the right of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO6bottomyA2EmF":{"name":"bottom","abstract":"

    At the bottom of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/Position.html#/s:14AgoraUIKit_iOS0A8SettingsV8PositionO4leftyA2EmF":{"name":"left","abstract":"

    At the left of the view

    ","parent_name":"Position"},"Structs/AgoraSettings/BuiltinButtons.html#/s:SY8rawValue03RawB0Qzvp":{"name":"rawValue","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV12cameraButtonAEvpZ":{"name":"cameraButton","abstract":"

    Option for displaying a button to toggle the camera on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV9micButtonAEvpZ":{"name":"micButton","abstract":"

    Option for displaying a button to toggle the microphone on or off.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV10flipButtonAEvpZ":{"name":"flipButton","abstract":"

    Option for displaying a button to flip the camera between front and rear facing.

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV14beautifyButtonAEvpZ":{"name":"beautifyButton","abstract":"

    Option for displaying a button to toggle beautify feature on or off

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV17screenShareButtonAEvpZ":{"name":"screenShareButton","abstract":"

    Option for displaying screenshare button

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV3allAEvpZ":{"name":"all","abstract":"

    Option to display all default buttons

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings/BuiltinButtons.html#/s:14AgoraUIKit_iOS0A8SettingsV14BuiltinButtonsV8rawValueAESi_tcfc":{"name":"init(rawValue:)","abstract":"

    Initialiser for creating an option set

    ","parent_name":"BuiltinButtons"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV8tokenURLSSSgvp":{"name":"tokenURL","abstract":"

    URL to fetch tokens from. If supplied, this package will automatically fetch tokens","parent_name":"AgoraSettings"},"Structs/AgoraSettings/BuiltinButtons.html":{"name":"BuiltinButtons","abstract":"

    OptionSet for selecting which buttons are visible in the AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings/Position.html":{"name":"Position","abstract":"

    Position, top, left, bottom or right.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV15videoRenderModeSo0a5VideofG0Vvp":{"name":"videoRenderMode","abstract":"

    The rendering mode of the video view for all videos within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14enabledButtonsAC07BuiltinF0Vvp":{"name":"enabledButtons","abstract":"

    Which buttons should be enabled in this AgoraVideoView.","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV14buttonPositionAC0F0Ovp":{"name":"buttonPosition","abstract":"

    Where the buttons such as camera enable/disable should be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV13floatPositionAC0F0Ovp":{"name":"floatPosition","abstract":"

    Where the floating collection view of video members be positioned within the view.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV18videoConfigurationSo0a12VideoEncoderF0Cvp":{"name":"videoConfiguration","abstract":"

    Agora’s video encoder configuration.

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsV6colorsAA0A12ViewerColorsVvp":{"name":"colors","abstract":"

    Colors for views inside AgoraVideoViewer

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html#/s:14AgoraUIKit_iOS0A8SettingsVACycfc":{"name":"init()","abstract":"

    Create a new AgoraSettings object

    ","parent_name":"AgoraSettings"},"Structs/AgoraSettings.html":{"name":"AgoraSettings","abstract":"

    Settings used for the display and behaviour of AgoraVideoViewer

    "},"Structs.html#/s:14AgoraUIKit_iOS0A12ViewerColorsV":{"name":"AgoraViewerColors","abstract":"

    Colors for views inside AgoraVideoViewer

    "},"Structs/AgoraConnectionData.html":{"name":"AgoraConnectionData","abstract":"

    Storing struct for holding data about the connection to Agora service

    "},"Structs/AgoraViewer.html":{"name":"AgoraViewer","abstract":"

    Add AgoraVideoViewer with SwiftUI

    "},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)joinedChannelWithChannel:":{"name":"joinedChannel(channel:)","abstract":"

    Local user has joined the channel of a given name

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)leftChannel:":{"name":"leftChannel(_:)","abstract":"

    Local user has left the active channel.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenWillExpire:tokenPrivilegeWillExpire:":{"name":"tokenWillExpire(_:tokenPrivilegeWillExpire:)","abstract":"

    The token used to connect to the current active channel will expire in 30 seconds.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)tokenDidExpire:":{"name":"tokenDidExpire(_:)","abstract":"

    The token used to connect to the current active channel has expired.

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)presentAlertWithAlert:animated:":{"name":"presentAlert(alert:animated:)","abstract":"

    presentAlert is a way to show any alerts that the AgoraVideoViewer wants to display.","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/c:@M@AgoraUIKit_iOS@objc(pl)AgoraVideoViewerDelegate(im)extraButtons":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html#/extraButtons()":{"name":"extraButtons()","abstract":"

    An array of any additional buttons to be displayed alongside camera, and microphone buttons

    ","parent_name":"AgoraVideoViewerDelegate"},"Protocols/AgoraVideoViewerDelegate.html":{"name":"AgoraVideoViewerDelegate","abstract":"

    An interface for getting some common delegate callbacks without needing to subclass.

    "},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO6noDatayA2EmF":{"name":"noData","abstract":"

    No data returned from the token request

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO11invalidDatayA2EmF":{"name":"invalidData","abstract":"

    Data corrupted or in the wrong format

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/TokenError.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10TokenErrorO10invalidURLyA2EmF":{"name":"invalidURL","abstract":"

    URL could not be created

    ","parent_name":"TokenError"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO4gridyA2EmF":{"name":"grid","abstract":"

    grid lays out all the videos in an NxN grid, regardless of how many there are.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO8floatingyA2EmF":{"name":"floating","abstract":"

    floating keeps track of the active speaker, displays them larger and the others in a collection view.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5StyleO6customyAEyAC_s18EnumeratedSequenceVySDySuAA0a6SingleD4ViewCGGSitc_tcAEmF":{"name":"custom(customFunction:)","abstract":"

    Method for constructing a custom layout.

    ","parent_name":"Style"},"Classes/AgoraVideoViewer/Style.html#/s:SQ2eeoiySbx_xtFZ":{"name":"==(_:_:)","parent_name":"Style"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8delegateAA0adE8Delegate_pSgvp":{"name":"delegate","abstract":"

    Delegate for the AgoraVideoViewer, used for some important callback methods.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13agoraSettingsAA0aG0Vvp":{"name":"agoraSettings","abstract":"

    Settings and customisations such as position of on-screen buttons, collection view of all channel members,","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/Style.html":{"name":"Style","abstract":"

    Style and organisation to be applied to all the videos in this view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13activeSpeakerSuSgvp":{"name":"activeSpeaker","abstract":"

    The most recently active speaker in the session. This will only ever be set to remote users, not the local user.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC21overrideActiveSpeakerSuSgvp":{"name":"overrideActiveSpeaker","abstract":"

    This user will be the main focus when using .floating style.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC8userRoleSo0a6ClientG0Vvp":{"name":"userRole","abstract":"

    Gets and sets the role for the user. Either .audience or .broadcaster.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5agkitSo0A12RtcEngineKitCvp":{"name":"agkit","abstract":"

    AgoraRtcEngineKit being used by this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5styleAC5StyleOvp":{"name":"style","abstract":"

    Style and organisation to be applied to all the videos in this AgoraVideoViewer.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC14connectionData5style13agoraSettings8delegateAcA0a10ConnectionG0V_AC5StyleOAA0aJ0VAA0adE8Delegate_pSgtcfc":{"name":"init(connectionData:style:agoraSettings:delegate:)","abstract":"

    Creates an AgoraVideoViewer object, to be placed anywhere in your application.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)initWithCoder:":{"name":"init(coder:)","abstract":"

    Create view from NSCoder

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC5fills4viewySo6UIViewC_tF":{"name":"fills(view:)","abstract":"

    Helper method to fill a view with this view

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:cellForItemAtIndexPath:":{"name":"collectionView(_:cellForItemAt:)","abstract":"

    Asks your data source object for the cell that corresponds to the specified item in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:numberOfItemsInSection:":{"name":"collectionView(_:numberOfItemsInSection:)","abstract":"

    Asks your data source object for the number of items in the specified section.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:willDisplayCell:forItemAtIndexPath:":{"name":"collectionView(_:willDisplay:forItemAt:)","abstract":"

    Tells the delegate that the specified cell is about to be displayed in the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didEndDisplayingCell:forItemAtIndexPath:":{"name":"collectionView(_:didEndDisplaying:forItemAt:)","abstract":"

    Tells the delegate that the specified cell was removed from the collection view.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:itemForRepresentedObjectAt:)":{"name":"collectionView(_:itemForRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/numberOfSections(in:)":{"name":"numberOfSections(in:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:numberOfItemsInSection:)":{"name":"collectionView(_:numberOfItemsInSection:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:willDisplay:forRepresentedObjectAt:)":{"name":"collectionView(_:willDisplay:forRepresentedObjectAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/collectionView(_:didSelectItemsAt:)":{"name":"collectionView(_:didSelectItemsAt:)","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)collectionView:didSelectItemAtIndexPath:":{"name":"collectionView(_:didSelectItemAt:)","abstract":"

    Tells the delegate that the item at the specified index path was selected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didClientRoleChanged:newRole:":{"name":"rtcEngine(_:didClientRoleChanged:newRole:)","abstract":"

    Called when the user role successfully changes

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didJoinedOfUid:elapsed:":{"name":"rtcEngine(_:didJoinedOfUid:elapsed:)","abstract":"

    New User joined the channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteAudioStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteAudioStateChangedOfUid:state:reason:elapsed:)","abstract":"

    This callback indicates the state change of the local audio stream, including the state of the audio recording and encoding, and allows you to troubleshoot issues when exceptions occur.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:didOfflineOfUid:reason:":{"name":"rtcEngine(_:didOfflineOfUid:reason:)","abstract":"

    Occurs when a remote user (Communication)/host (Live Broadcast) leaves a channel. Same as userOfflineBlock.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:activeSpeaker:":{"name":"rtcEngine(_:activeSpeaker:)","abstract":"

    Occurs when the most active speaker is detected.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:remoteVideoStateChangedOfUid:state:reason:elapsed:":{"name":"rtcEngine(_:remoteVideoStateChangedOfUid:state:reason:elapsed:)","abstract":"

    Occurs when the remote video state changes.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localVideoStateChange:error:":{"name":"rtcEngine(_:localVideoStateChange:error:)","abstract":"

    Occurs when the local video stream state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:localAudioStateChange:error:":{"name":"rtcEngine(_:localAudioStateChange:error:)","abstract":"

    Occurs when the local audio state changes.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:firstLocalAudioFramePublished:":{"name":"rtcEngine(_:firstLocalAudioFramePublished:)","abstract":"

    Occurs when the first audio frame is published.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngineRequestToken:":{"name":"rtcEngineRequestToken(_:)","abstract":"

    Occurs when the token expires.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)rtcEngine:tokenPrivilegeWillExpire:":{"name":"rtcEngine(_:tokenPrivilegeWillExpire:)","abstract":"

    Occurs when the token expires in 30 seconds.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC15getCameraButtonSo8UIButtonCSgyF":{"name":"getCameraButton()","abstract":"

    Get the button for enabling/disabling the camera

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12getMicButtonSo8UIButtonCSgyF":{"name":"getMicButton()","abstract":"

    Get the button for muting/unmuting the microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC20getScreenShareButtonSo8UIButtonCSgyF":{"name":"getScreenShareButton()","abstract":"

    Get the button for sharing the current screen

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC13getFlipButtonSo8UIButtonCSgyF":{"name":"getFlipButton()","abstract":"

    Get the button for flipping the camera from front to rear facing

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC17getBeautifyButtonSo8UIButtonCSgyF":{"name":"getBeautifyButton()","abstract":"

    Get the button for enabling/disabling the beautify effect.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19checkForPermissions11alsoRequest8callbackS2b_yycSgtF":{"name":"checkForPermissions(alsoRequest:callback:)","abstract":"

    Helper function to check if we currently have permission to use the camera and microphone

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC19requestCameraAccess7handleryySbcSg_tFZ":{"name":"requestCameraAccess(handler:)","abstract":"

    Request access to use the camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC23requestMicrophoneAccess7handleryySbcSg_tFZ":{"name":"requestMicrophoneAccess(handler:)","abstract":"

    Request access to use the microphone.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer/TokenError.html":{"name":"TokenError","abstract":"

    Error types to expect from fetchToken on failing ot retrieve valid token.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC10fetchToken7urlBase11channelName6userId8callbackySS_SSSuys6ResultOySSs5Error_pGctFZ":{"name":"fetchToken(urlBase:channelName:userId:callback:)","abstract":"

    Requests the token from our backend token service

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleCam":{"name":"toggleCam()","abstract":"

    Toggle the camera between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleMic":{"name":"toggleMic()","abstract":"

    Toggle the microphone between on and off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleScreenShare":{"name":"toggleScreenShare()","abstract":"

    Turn screen sharing on/off

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBeautify":{"name":"toggleBeautify()","abstract":"

    Turn on/off the ‘beautify’ effect. Visual and voice change.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)flipCamera":{"name":"flipCamera()","abstract":"

    Swap between front and back facing camera.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/c:@CM@AgoraUIKit_iOS@objc(cs)AgoraVideoViewer(im)toggleBroadcast":{"name":"toggleBroadcast()","abstract":"

    Toggle between being a host or a member of the audience.","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC7setRole2toySo0a6ClientG0V_tF":{"name":"setRole(to:)","abstract":"

    Change the role of the local user when connecting to a channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel2as10fetchToken3uidySS_So0A10ClientRoleVSbSuSgtF":{"name":"join(channel:as:fetchToken:uid:)","abstract":"

    Join the Agora channel using token stored in AgoraVideoViewer object

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4join7channel4with2as3uidySS_SSSgSo0A10ClientRoleVSuSgtF":{"name":"join(channel:with:as:uid:)","abstract":"

    Join the Agora channel

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC12leaveChannelys5Int32VySo0aG5StatsCcSgF":{"name":"leaveChannel(_:)","abstract":"

    Leave channel stops all preview elements

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC11updateTokenyySSF":{"name":"updateToken(_:)","abstract":"

    Update the token currently in use by the Agora SDK. Used to not interrupt an active video session.

    ","parent_name":"AgoraVideoViewer"},"Classes/AgoraVideoViewer.html#/s:14AgoraUIKit_iOS0A11VideoViewerC4exityyF":{"name":"exit()","abstract":"

    Leave any open channels and kills the Agora Engine instance.

    ","parent_name":"AgoraVideoViewer"},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraCollectionViewer":{"name":"AgoraCollectionViewer","abstract":"

    Collection View to display all connected users camera feeds

    "},"Classes/AgoraVideoViewer.html":{"name":"AgoraVideoViewer","abstract":"

    View to contain all the video session objects, including camera feeds and buttons for settings

    "},"Classes.html#/c:@M@AgoraUIKit_iOS@objc(cs)AgoraSingleVideoView":{"name":"AgoraSingleVideoView","abstract":"

    View for the individual Agora Camera Feed.

    "},"Classes.html":{"name":"Classes","abstract":"

    The following classes are available globally.

    "},"Protocols.html":{"name":"Protocols","abstract":"

    The following protocols are available globally.

    "},"Structs.html":{"name":"Structures","abstract":"

    The following structures are available globally.

    "}} \ No newline at end of file From 3439b8378f23715ff9e3a7d9f612922b3032fdfa Mon Sep 17 00:00:00 2001 From: Max Cobb Date: Tue, 29 Dec 2020 18:11:58 +0000 Subject: [PATCH 4/5] added SwiftUI example --- .../project.pbxproj | 403 ++++++++++++++++++ .../Agora_SwiftUI_ExampleApp.swift | 17 + .../AccentColor.colorset/Contents.json | 11 + .../AppIcon.appiconset/Contents.json | 98 +++++ .../Assets.xcassets/Contents.json | 6 + .../Agora-SwiftUI-Example/ContentView.swift | 70 +++ .../Agora-SwiftUI-Example/Info.plist | 56 +++ .../Preview Assets.xcassets/Contents.json | 6 + Agora-SwiftUI-Example/Podfile | 11 + 9 files changed, 678 insertions(+) create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example.xcodeproj/project.pbxproj create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Agora_SwiftUI_ExampleApp.swift create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AppIcon.appiconset/Contents.json create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/Contents.json create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Info.plist create mode 100644 Agora-SwiftUI-Example/Agora-SwiftUI-Example/Preview Content/Preview Assets.xcassets/Contents.json create mode 100644 Agora-SwiftUI-Example/Podfile diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example.xcodeproj/project.pbxproj b/Agora-SwiftUI-Example/Agora-SwiftUI-Example.xcodeproj/project.pbxproj new file mode 100644 index 00000000..6889b2d4 --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example.xcodeproj/project.pbxproj @@ -0,0 +1,403 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 51; + objects = { + +/* Begin PBXBuildFile section */ + 306318CA8BF377CC8FDFF4A5 /* Pods_Agora_SwiftUI_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA53642AF916CFDB0EE5B114 /* Pods_Agora_SwiftUI_Example.framework */; }; + F327FCFB259B97ED00922764 /* Agora_SwiftUI_ExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = F327FCFA259B97ED00922764 /* Agora_SwiftUI_ExampleApp.swift */; }; + F327FCFD259B97ED00922764 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F327FCFC259B97ED00922764 /* ContentView.swift */; }; + F327FCFF259B97EF00922764 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F327FCFE259B97EF00922764 /* Assets.xcassets */; }; + F327FD02259B97EF00922764 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = F327FD01259B97EF00922764 /* Preview Assets.xcassets */; }; +/* End PBXBuildFile section */ + +/* Begin PBXFileReference section */ + CA53642AF916CFDB0EE5B114 /* Pods_Agora_SwiftUI_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Agora_SwiftUI_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CDDC5FC6F79B8CA5E5CF172B /* Pods-Agora-SwiftUI-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Agora-SwiftUI-Example.debug.xcconfig"; path = "Target Support Files/Pods-Agora-SwiftUI-Example/Pods-Agora-SwiftUI-Example.debug.xcconfig"; sourceTree = ""; }; + DC7ED9F771D2716C1075D668 /* Pods-Agora-SwiftUI-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Agora-SwiftUI-Example.release.xcconfig"; path = "Target Support Files/Pods-Agora-SwiftUI-Example/Pods-Agora-SwiftUI-Example.release.xcconfig"; sourceTree = ""; }; + F327FCF7259B97ED00922764 /* Agora-SwiftUI-Example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Agora-SwiftUI-Example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + F327FCFA259B97ED00922764 /* Agora_SwiftUI_ExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Agora_SwiftUI_ExampleApp.swift; sourceTree = ""; }; + F327FCFC259B97ED00922764 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; + F327FCFE259B97EF00922764 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + F327FD01259B97EF00922764 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + F327FD03259B97EF00922764 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F327FCF4259B97ED00922764 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 306318CA8BF377CC8FDFF4A5 /* Pods_Agora_SwiftUI_Example.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 8918EA116B5F4228ED5205AF /* Pods */ = { + isa = PBXGroup; + children = ( + CDDC5FC6F79B8CA5E5CF172B /* Pods-Agora-SwiftUI-Example.debug.xcconfig */, + DC7ED9F771D2716C1075D668 /* Pods-Agora-SwiftUI-Example.release.xcconfig */, + ); + path = Pods; + sourceTree = ""; + }; + E6474C2AB7901B25267AFBB5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + CA53642AF916CFDB0EE5B114 /* Pods_Agora_SwiftUI_Example.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F327FCEE259B97ED00922764 = { + isa = PBXGroup; + children = ( + F327FCF9259B97ED00922764 /* Agora-SwiftUI-Example */, + F327FCF8259B97ED00922764 /* Products */, + 8918EA116B5F4228ED5205AF /* Pods */, + E6474C2AB7901B25267AFBB5 /* Frameworks */, + ); + sourceTree = ""; + }; + F327FCF8259B97ED00922764 /* Products */ = { + isa = PBXGroup; + children = ( + F327FCF7259B97ED00922764 /* Agora-SwiftUI-Example.app */, + ); + name = Products; + sourceTree = ""; + }; + F327FCF9259B97ED00922764 /* Agora-SwiftUI-Example */ = { + isa = PBXGroup; + children = ( + F327FCFA259B97ED00922764 /* Agora_SwiftUI_ExampleApp.swift */, + F327FCFC259B97ED00922764 /* ContentView.swift */, + F327FCFE259B97EF00922764 /* Assets.xcassets */, + F327FD03259B97EF00922764 /* Info.plist */, + F327FD00259B97EF00922764 /* Preview Content */, + ); + path = "Agora-SwiftUI-Example"; + sourceTree = ""; + }; + F327FD00259B97EF00922764 /* Preview Content */ = { + isa = PBXGroup; + children = ( + F327FD01259B97EF00922764 /* Preview Assets.xcassets */, + ); + path = "Preview Content"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F327FCF6259B97ED00922764 /* Agora-SwiftUI-Example */ = { + isa = PBXNativeTarget; + buildConfigurationList = F327FD06259B97EF00922764 /* Build configuration list for PBXNativeTarget "Agora-SwiftUI-Example" */; + buildPhases = ( + 09FE095BB038E9FDC49B8628 /* [CP] Check Pods Manifest.lock */, + F327FCF3259B97ED00922764 /* Sources */, + F327FCF4259B97ED00922764 /* Frameworks */, + F327FCF5259B97ED00922764 /* Resources */, + 5D1F0096B6B9B1453E4EFECD /* [CP] Embed Pods Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Agora-SwiftUI-Example"; + productName = "Agora-SwiftUI-Example"; + productReference = F327FCF7259B97ED00922764 /* Agora-SwiftUI-Example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F327FCEF259B97ED00922764 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 1230; + LastUpgradeCheck = 1230; + TargetAttributes = { + F327FCF6259B97ED00922764 = { + CreatedOnToolsVersion = 12.3; + }; + }; + }; + buildConfigurationList = F327FCF2259B97ED00922764 /* Build configuration list for PBXProject "Agora-SwiftUI-Example" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = F327FCEE259B97ED00922764; + productRefGroup = F327FCF8259B97ED00922764 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F327FCF6259B97ED00922764 /* Agora-SwiftUI-Example */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F327FCF5259B97ED00922764 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F327FD02259B97EF00922764 /* Preview Assets.xcassets in Resources */, + F327FCFF259B97EF00922764 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 09FE095BB038E9FDC49B8628 /* [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-Agora-SwiftUI-Example-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; + }; + 5D1F0096B6B9B1453E4EFECD /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Agora-SwiftUI-Example/Pods-Agora-SwiftUI-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Agora-SwiftUI-Example/Pods-Agora-SwiftUI-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Agora-SwiftUI-Example/Pods-Agora-SwiftUI-Example-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F327FCF3259B97ED00922764 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F327FCFD259B97ED00922764 /* ContentView.swift in Sources */, + F327FCFB259B97ED00922764 /* Agora_SwiftUI_ExampleApp.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin XCBuildConfiguration section */ + F327FD04259B97EF00922764 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + F327FD05259B97EF00922764 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 14.3; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F327FD07259B97EF00922764 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = CDDC5FC6F79B8CA5E5CF172B /* Pods-Agora-SwiftUI-Example.debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"Agora-SwiftUI-Example/Preview Content\""; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = "Agora-SwiftUI-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + F327FD08259B97EF00922764 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = DC7ED9F771D2716C1075D668 /* Pods-Agora-SwiftUI-Example.release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + CODE_SIGN_STYLE = Automatic; + DEVELOPMENT_ASSET_PATHS = "\"Agora-SwiftUI-Example/Preview Content\""; + DEVELOPMENT_TEAM = ""; + ENABLE_PREVIEWS = YES; + INFOPLIST_FILE = "Agora-SwiftUI-Example/Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = ""; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F327FCF2259B97ED00922764 /* Build configuration list for PBXProject "Agora-SwiftUI-Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F327FD04259B97EF00922764 /* Debug */, + F327FD05259B97EF00922764 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F327FD06259B97EF00922764 /* Build configuration list for PBXNativeTarget "Agora-SwiftUI-Example" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F327FD07259B97EF00922764 /* Debug */, + F327FD08259B97EF00922764 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F327FCEF259B97ED00922764 /* Project object */; +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Agora_SwiftUI_ExampleApp.swift b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Agora_SwiftUI_ExampleApp.swift new file mode 100644 index 00000000..e3180fef --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Agora_SwiftUI_ExampleApp.swift @@ -0,0 +1,17 @@ +// +// Agora_SwiftUI_ExampleApp.swift +// Agora-SwiftUI-Example +// +// Created by Max Cobb on 29/12/2020. +// + +import SwiftUI + +@main +struct Agora_SwiftUI_ExampleApp: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AccentColor.colorset/Contents.json b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 00000000..eb878970 --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AppIcon.appiconset/Contents.json b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 00000000..9221b9bb --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/Contents.json b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift new file mode 100644 index 00000000..4bc5c3d9 --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift @@ -0,0 +1,70 @@ +// +// ContentView.swift +// Agora-SwiftUI-Example +// +// Created by Max Cobb on 29/12/2020. +// + +import SwiftUI +import AgoraUIKit_iOS + +struct ContentView: View { + @State private var connectedToChannel = false + + let agview = AgoraViewer( + connectionData: AgoraConnectionData( + appId: <#Agora App ID#>, + appToken: <#Agora Token or nil#> + ), + style: .floating + ) + + @State private var agoraViewerStyle = 0 + var body: some View { + ZStack { + agview + VStack { + Picker("Format", selection: $agoraViewerStyle) { + Text("Floating").tag(0) + Text("Grid").tag(1) + }.pickerStyle(SegmentedPickerStyle()) + .frame( + minWidth: 0, idealWidth: 100, maxWidth: 200, + minHeight: 0, idealHeight: 40, maxHeight: .infinity, alignment: .topTrailing + ).onChange( + of: agoraViewerStyle, + perform: { + self.agview.viewer.style = $0 == 0 ? .floating : .grid + } + ) + Spacer() + HStack { + Spacer() + Button(action: { + connectedToChannel.toggle() + if connectedToChannel { + agview.join(channel: "test", with: nil, as: .broadcaster) + } else { + agview.viewer.leaveChannel() + } + }, label: { + if connectedToChannel { + Text("Disconnect").padding(3.0).background(Color.red).cornerRadius(3.0).hidden() + } else { + Text("Connect").padding(3.0).background(Color.green).cornerRadius(3.0) + } + }).disabled(connectedToChannel) + Spacer() + } + Spacer() + } + } + + } +} + +struct ContentView_Previews: PreviewProvider { + static var previews: some View { + ContentView() + } +} diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Info.plist b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Info.plist new file mode 100644 index 00000000..f70a0a1a --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Info.plist @@ -0,0 +1,56 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + $(PRODUCT_BUNDLE_PACKAGE_TYPE) + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + LSRequiresIPhoneOS + + NSCameraUsageDescription + So the audience and other broadcasters can see you + NSLocalNetworkUsageDescription + + NSMicrophoneUsageDescription + So the audience and other broadcasters can hear you + UIApplicationSceneManifest + + UIApplicationSupportsMultipleScenes + + + UIApplicationSupportsIndirectInputEvents + + UILaunchScreen + + UIRequiredDeviceCapabilities + + armv7 + + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + + diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Preview Content/Preview Assets.xcassets/Contents.json b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Preview Content/Preview Assets.xcassets/Contents.json new file mode 100644 index 00000000..73c00596 --- /dev/null +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/Preview Content/Preview Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Agora-SwiftUI-Example/Podfile b/Agora-SwiftUI-Example/Podfile new file mode 100644 index 00000000..c9aa5e6f --- /dev/null +++ b/Agora-SwiftUI-Example/Podfile @@ -0,0 +1,11 @@ +# Uncomment the next line to define a global platform for your project +platform :ios, '13.0' + +target 'Agora-SwiftUI-Example' do + # Comment the next line if you don't want to use dynamic frameworks + use_frameworks! + + # Pods for Agora-UIKit-Example + pod 'AgoraUIKit_iOS', :path => '../' + +end From 43659c66cef35252297b50ee3769a915f969abd1 Mon Sep 17 00:00:00 2001 From: Max Cobb Date: Mon, 4 Jan 2021 10:03:33 +0000 Subject: [PATCH 5/5] add checks for camera and mic permissions --- .../Agora-SwiftUI-Example/ContentView.swift | 35 ++++++++++++------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift index 4bc5c3d9..e3c14747 100644 --- a/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift +++ b/Agora-SwiftUI-Example/Agora-SwiftUI-Example/ContentView.swift @@ -40,20 +40,16 @@ struct ContentView: View { Spacer() HStack { Spacer() - Button(action: { - connectedToChannel.toggle() - if connectedToChannel { - agview.join(channel: "test", with: nil, as: .broadcaster) - } else { - agview.viewer.leaveChannel() + Button( + action: { connectToAgora() }, + label: { + if connectedToChannel { + Text("Disconnect").padding(3.0).background(Color.red).cornerRadius(3.0).hidden() + } else { + Text("Connect").padding(3.0).background(Color.green).cornerRadius(3.0) + } } - }, label: { - if connectedToChannel { - Text("Disconnect").padding(3.0).background(Color.red).cornerRadius(3.0).hidden() - } else { - Text("Connect").padding(3.0).background(Color.green).cornerRadius(3.0) - } - }).disabled(connectedToChannel) + ).disabled(connectedToChannel) Spacer() } Spacer() @@ -61,6 +57,19 @@ struct ContentView: View { } } + + func connectToAgora() { + guard agview.viewer.checkForPermissions(alsoRequest: true) else { + connectToAgora() + return + } + connectedToChannel.toggle() + if connectedToChannel { + agview.join(channel: "test", with: nil, as: .broadcaster) + } else { + agview.viewer.leaveChannel() + } + } } struct ContentView_Previews: PreviewProvider {