Sample project not running in iOS

Description
When I downloaded iOS client sdk version v5.5.12511.0421. Then I unzipped the file and open MobileRTCSample.xcodeproj. Then try to run in iOS version 13.6 . Then I am getting errors as:
** An empty identity is not valid when signing a binary for the product type ‘App Extension’. **
** An empty identity is not valid when signing a binary for the product type ‘Application’.**

So I am not able to even run the project. My xcode version is 12.4 (12D4e).

Please help me to get out of this problem.

Hey @vp-ecommerce,

Thanks for using the dev forum!

This has to do with code signing. Navigate to the MobileRTCSample target → Code Signing & Capabilities, then provide a provisioning profile. I usually just use the “Automatically manage signing” button. Set the team to be your team/you. In the bundle identifier text field, provide a unique bundle ID. In that same page under App Groups → uncheck the currently selected app group ID and click your app group ID. Now do the same thing for the MobileRTCSampleScreenShare target (note these must have different bundle ID’s. I usually just append “.screenshare” to the end of the first bundleID for my screenshare bundle ID).

Next go to your build settings of the MobileRTCSample target and search “code signing”. Under “Code signing identity” each one of those options must be populated with a code signing identity. Since I use “automatically manage signing” and I have no intention of shipping this app, I set each one of these values to “Apple Development”. Repeat this process for the screenshare target as well.

Thanks!
Michael

Hi Michael
Thanks for the solution.

Can I got the sample project in swift?
Or Can you please provide me the steps to run this sdk in a swift project.

Please help me.

Hey @vp-ecommerce,

We do not yet have a swift version of that application quite yet. However, if there are any features in the sample application you would like swift code for, I am more than happy to translate it for you.

Thanks!
Michael

Hi Michael
My use case is to join a meeting in my own ViewController. So that I can add more views in my ViewController.

meetingService.joinMeeting(with: joinMeetingParameters) When I join meeting using this, it opens meeting in some anonymous ViewController(or screen). I am unable to add any view in this.

Please provide me a way to open meeting in a ViewController in which I can add any view through storyboard.

Please provide me a simple solution that would be very great.

Hey @vp-ecommerce,

If you chose to keep the defaultUI and not create a custom UI, it will handle presentation for you. However, you can get the UIView for the meeting by grabbing the meetingView property: iOS API: MobileRTCMeetingService Class Reference

Thanks!
Michael

How to add meeting ui in my viewcontroller ?

We have already implemented jitsi for meeting in our application. Now we are planning to integrate Zoom.
Below is the video link of demo of our application (See video from 3:35 minute):
In video, we can see that there is lots of UI in top of meeting. Here what we have done that In a viewController, we add a jitsi view and some more view according to our need.

How to achieve this using zoom ? Please help me.

Hey @vp-ecommerce,

Do you want the UI to look like the Zoom iOS application UI or to look like the UI above?
The SDK provides two options for UI, one that is default and will look and feel like the Zoom iOS app. Then one that is custom where you can build the entire UI yourself.

Thanks!
Michael

Yes I want the UI look like the UI above. Please provide me a small documentation (step by step). So that I can achieve my use case. Please help me.

And also I don’t want to just customized the meeting UI. I want to add meeting UI in my own ViewController. So that I could do lots of stuff in my ViewController.

Please tell me how to achieve this??

Hey @vp-ecommerce,

I do not believe it is possible to keep the default UI and also embed it in another ViewController.

Thanks!
Michael

Can I achieve my use case using custom UI or anything?. If yes, please give me a proper documentation of this. This would be very great.

Hey @vp-ecommerce,

Yes this can be achieved using Custom UI. The documentation for this can be found here: https://marketplace.zoom.us/docs/sdk/native-sdks/iOS/mastering-zoom-sdk/in-meeting-function/customized-in-meeting-ui/overview

Thanks!
Michael

Means it’s possible to embed the meeting UI in my own ViewController while using custom UI ?

And also can you please provide me any github link or tutorial of Custom UI. It’s very difficult to follow the marketplace documentation.

Hey @vp-ecommerce,

Yes, with a custom UI you build out the meeting UI however/wherever you would like. We are aware the custom ui docs are in need of an update and we are trying to provide that soon. In the meantime, here is a thread where I walked through how to set it up using Swift:

Thanks!
Michael

Hi @Michael_Condon
Thanks for your reply. I have implemented custom UI as explained in the last link you sent. I faced two problems-

  1. When try to show remote person video, I got Started showing remote user video. But remote side person is not visible. I have attached a photo of this.

  2. When try to show local person video, I got Failed to show local user video.

Below is my some code of CustomMeetingUIViewController

private func updateViews(userId: UInt) {
let dd = CustomMeetingUIViewController.remoteUserVideoView(userID: userId, videoAspect: MobileRTCVideoAspect_PanAndScan, frame: CGRect(x: 0.0, y: 0.0, width: 300.0, height: 500.0))
self.videoView.addSubview(dd!)
}

Here videoView is a UIView placed in storyboard.

I called updateViews in a method of MobileRTCUserServiceDelegate like:

extension CustomMeetingUIViewController: MobileRTCUserServiceDelegate {
func onSinkMeetingUserJoin(_ userID: UInt) {
updateViews(userId: userID)
}
}

Note - this onSinkMeetingUserJoin called two times in my case. I don’t know why. I made some logic inside this method so that only first time updateViews method get called. And again made some logic inside this method so that only second time updateViews method get called. But it’s not working in any case.

Did you got the solution? I want to integrate in my website. And also iOS app.

Hey @vp-ecommerce,

When trying to show the local user view are you passing in the userID of the local user or zero?

Thanks!
Michael

Hi @Michael_Condon

You have given method for local user video view (which takes meetingService.activeUserID() as userId) like:

static func localUserVideoView(_ videoAspect: MobileRTCVideoAspect, frame: CGRect) -> MobileRTCVideoView? {
            guard let meetingService = MobileRTC.shared().getMeetingService() else { return nil }

            let localUserID = meetingService.activeUserID()
            let localUserVideoView = MobileRTCVideoView(frame: frame)
            localUserVideoView.setVideoAspect(videoAspect)
            let showAttendeeVideoSuccessful = localUserVideoView.showAttendeeVideo(withUserID: localUserID)

            if showAttendeeVideoSuccessful {
                print("Started showing local user video.")
            } else {
                print("Failed to show local user video.")
            }

            return localUserVideoView
        }

Note - It always gives Failed to show local user video. This problem happens for local user.

One problem is happening for remote user which I explained in above message. Method for remote user video view is as follow:

static func remoteUserVideoView(userID: UInt, videoAspect: MobileRTCVideoAspect, frame: CGRect) -> MobileRTCVideoView? {
            let remoteUserVideoView = MobileRTCVideoView(frame: frame)
            remoteUserVideoView.setVideoAspect(videoAspect)
            let showAttendeeVideoSuccessful = remoteUserVideoView.showAttendeeVideo(withUserID: userID)

            if showAttendeeVideoSuccessful {
                print("Started showing remote user video.")
            } else {
                print("Failed to show remote user video.")
            }

            return remoteUserVideoView
        }

I am getting userId from the following method:

extension CustomMeetingUIViewController: MobileRTCUserServiceDelegate {
func onSinkMeetingUserJoin(_ userID: UInt) {
updateViews(userId: userID).   // I am getting userId here and call the updateViews function
}
}

After called the function, we get Started showing remote user video. But still video is not visible. I also attached a screenshot in last message.

Please provide me solution of both problem. Please help me @Michael_Condon

Hi @Michael_Condon
Actually the remote video is visible sometimes. But it takes too long time to get the video visible. It seems like no one is on another side.

Please help me to get out of this.