Screen share iOS SDK

Description
I can’t do the procedure to activate screen share feature to my sample iOS app. The documentation seems to be incompatible to the SDK actual version

Which version?
v4.6.21666.0428 (SDK)
XCODE Version 11.4.1
iOS 13.4

To Reproduce

  1. I downloaded SDK v4.6.21666.0428, specifically the version to use emulator
  2. Did the procedure to add SDK key, etc and got the sample running just fine
  3. Tried to follow the documentation to activate the screen share extension
  4. Prints in the documentation are different to what happens when you try to do that
  5. Screens are different, some codes are different…
  6. Got this error at the end: “ld: framework not found MobileRTCScreenShare”

Smartphone (please complete the following information):

  • Device: Emulator
  • OS: 13.4

Additional context
Please SOS

Hi @tetteu777,

Thanks for the post. The screenshots in the documentation were taken in an older version of Xcode(Xcode 10). It might look a little bit different now in Xcode 11 but the steps and the concepts are still the same.

Based on the error message, it seems like your Xcode is not able to locate the MobileRTCScreenShare.framework, please double check the “Framework search path” in your Build Settings, make sure the MobileRTCScreenShare.framework is in the search path, and correctly imported.

If you are still facing this issue, you may refer to the solutions in the following links:

And please also configure your broadcast extension setting to be the following:

  • Enable BitCode: NO
  • Objective-C ARC: NO
  • C++ language dialect: Compiler Default

Hope this helps. Thanks!

Hi @Carson_Chen,

Thank you very much! I could make it work. The “framework not found” error was solved.
The app launched but there was no option to share the screen.

I checked this link => ( https://support.zoom.us/hc/en-us/articles/115005890803-iOS-Screen-Sharing ) but I can’t find Control Center in my Emulator. Does it only work in real devices?

Hi @tetteu777,

Glad to hear that! In order to show the “Share” button, you need to follow Step 7 in https://marketplace.zoom.us/docs/sdk/native-sdks/iOS/mastering-zoom-sdk/in-meeting-function/zoom-meeting-ui/screen-share and implement the callback function. Please note that: Implementing this callback will show the “Share” button, but you still need to handle and to trigger the screen sharing feature.

According to https://stackoverflow.com/questions/49816794/cannot-open-iphone-control-center-on-simulator, Control Center is not available in the emulator. The screen sharing should work in an emulator but the control center in iOS is out of our control.

Thanks!

Hi @Carson_Chen,

Thank you for your attention.

I actually have added this to SampleHandler.m:

What do you mean by saying that I need to handle and to trigger the screen sharing feature?
Is there any example or tutorial about that?

I have others 2 questions too:

  1. In the documentation it says that there is a version for device only and another for emulators. Alright. But it says that to deploy to App Store I must use the version for devices only. In this case, if I want to test in emulators and after the app is done I want to send it to App Store what should I do?

  2. The iOS SDK is implemented in Objective-C, is it possible to use the SDK in a Swift project? Is there any tutorial about that?

Cordially,

Matheus Neumann

Hi again,

I found a tutorial posted recently about how to use the iOS Zoom SDK with Swift.

AppDelegate.swift

import UIKit
import MobileRTC
import MobileCoreServices
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,MobileRTCAuthDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil)
let newViewController = storyBoard.instantiateViewController(withIdentifier: "ViewController") as! ViewController
let navigationController = UINavigationController(rootViewController: newViewController)
window?.rootViewController = navigationController
window?.makeKeyAndVisible()
let mainSDK = MobileRTCSDKInitContext()
mainSDK.domain = "zoom.us"
MobileRTC.shared().initialize(mainSDK)
let authService = MobileRTC.shared().getAuthService()
print(MobileRTC.shared().mobileRTCVersion)
authService?.delegate        = self
authService?.clientKey       = "Your Client Key"
authService?.clientSecret    = "Your Client Secret Key"
authService?.sdkAuth()
return true
}
func onMobileRTCAuthReturn(_ returnValue: MobileRTCAuthError) {
print(returnValue)
if (returnValue != MobileRTCAuthError_Success)
{
   let msg = "SDK authentication failed, error code: \(returnValue)"
    print(msg)
 }
  }
}

and ViewController.swift

import UIKit
import MobileRTC
class ViewController: UIViewController {
let meetingNo = "Your Meeting Number"
let kSDKUserName = ""
override func viewDidLoad() {
super.viewDidLoad()
if(self.meetingNo == "") {
      // If the meeting number is empty, return error.
       print("Please enter a meeting number")
       return
} else {
     // If the meeting number is not empty.
     let getservice = MobileRTC.shared().getMeetingService()
     if let service = getservice {
         service.delegate = self
         let paramDict =      [kMeetingParam_Username:kSDKUserName,kMeetingParam_MeetingNumber:meetingNo, kMeetingParam_MeetingPassword:"",kMeetingParam_WebinarToken:"Your Webinar Token"]
         let response = service.joinMeeting(with: paramDict)
         print("onJoinMeeting, response: \(response)")
      }
   }
  }
}
extension ViewController: MobileRTCMeetingServiceDelegate{
    func onMeetingStateChange(_ state: MobileRTCMeetingState) {
       print("\(state)")
    }
}

I tried to run that and got this “error”:
MobileRTCAuthError(rawValue: 0)

Do you have any clue about how to fix this?

And by the way, I think it would be important to have an official sample using Swift.

Hi @tetteu777,

Thanks for the replies. Regarding your questions:

So implementing the onClickShareScreen callback will show the “Screen” button in the share option UI, but pressing it won’t start sharing. Since the broadcast extension is relying on the system’s screen recording, you need to trigger the screen recording feature in that callback(Use something like https://developer.apple.com/documentation/replaykit/rpsystembroadcastpickerview?language=objc or any other ways you prefer) so that when you press the “Screen” button, you will start sharing.

RawValue means success in all interface returns.

I agree with you, we do not have it because we have limited bandwidth here. Once we have enough bandwidth, we will definitely think about having a Swift version of the iOS sample.

Thanks!