Same SDKDeviceInfo issue

Description
I am getting an error “Undefined symbol: OBJC_CLASS $_SDKDeviceInfo”
This is done when assigning the SDKDeviceInfo to any object.

Which macOS Meeting SDK version?
zoom-sdk-macos-5.10.3.6470

Device (please complete the following information):

  • Device: Apple MacBook Pro (16-inch, M1)

Additional context
I can type the following and it will give me this above error message.

var item = SDKDeviceInfo()

Removing that line of code will allow the app to compile with no errors. If this line is left in, the complier will throw this error above.

See the example project. This file is a project to specifically show you the issue. Look at the ViewController viewDidLoad.

Here is more of the error:

ld: warning: directory not found for option '-L/Users/.../MyZoomAPP/Frameworks'
 ld: warning: directory not found for option '-F//Users/.../MyZoomAPP/Frameworks'
 Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$_SDKDeviceInfo", referenced from:
       objc-class-ref in AVinitSetup.o
 ld: symbol(s) not found for architecture arm64
 clang: error: linker command failed with exit code 1 (use -v to see invocation)

I posted this question a while back here SDKDeviceInfo Error
Followed the steps in checking the build phases, and they were matched perfectly.

Hi @vasoundman,

I am unable to access the project you’ve linked to, but can you please provide context around how the SDK was added to your project? Also are you importing the SDK into the file you’re trying to call that line from? It compiles in my project, so the issue must be with how the SDK was integrated on your end.

Thanks!

Hi @vasoundman,

Apologies, but that site is also giving me issues. Let’s try something different. Can you open a ticket on our developer support site and send it that way? Let me know the ticket number once it’s been created so I can locate it.

Thanks!

Thank you for your response. My issue number is #14384285.

Hi @vasoundman,

Thanks for sending that over. Looking at the project, I noticed a couple things:

  1. Your Copy Bundle Resources build phase should not contain the SDK files
  2. The Link Binaries With Libraries build phase should only contain the ZoomSDK.framework and the *.dylib files.
  3. The ZoomSDK directory itself is empty. This may be due to how you sent the project over, but be sure that this directory contains all of the SDK files, since that is where your project is configured to search for them.

Please let me know if you’re still seeing issues after making these changes and we can investigate further.

Thanks!

Thanks for looking into this Jon!

I did the adjustments you stated in the Bundle Resources and Link Binaries With Libraries. Still no go, same exact error. It will not compile but gives the “Undefined symbol: OBJC_CLASS $_SDKDeviceInfo” error.
It is true that the ZoomSDK was empty since I had to reduce size of the file to get it to you.
I am taking the contents of the ZoomSDK directory in your download and dropping it right into the empty ZoomSDK folder you see in the app.

Hi @vasoundman,

Can you please provide screenshots of the SDK in your project’s file structure and your updated build phases so that I can confirm everything looks correct? Also, which version of Xcode are you using?

Thanks!

Hello! Thanks for your response. Here is the project screenshots as requested. Let me know if I missed something.

Xcode 13.4


jpeg)

Hi @vasoundman,

Can you please clarify what exactly you are trying to do by creating an instance of SDKDeviceInfo? Usually instances of this are created internally to the SDK, so creating your own instance could result in unexpected behavior.

Thanks!

Jon,

That is a very good question. I am trying to get a list of audio devices using the SDK.

So here is the example code in my real project.

let audioOutDev = ZoomSDK.shared().getSettingService().getAudioSetting().getAudioDeviceList(false) as? [SDKAudioDevice]

for avOut in audioOutDev
{
print(avOut)
}

If I write the code:

let audioOutDev = ZoomSDK.shared().getSettingService().getAudioSetting().getAudioDeviceList(false)

The code will NOT crash, but I get back [ANY].

I want to use these items and not just throw them into an array of [ANY].

Chris

Hi @vasoundman,

The array returned from getAudioDeviceList will contain only SDKDeviceInfo instances, so you can cast each array element to that type.

Thanks!

Thanks, but once I try and cast to the type, the complier crashes.

If I write the following code it will not compile:

let audioOutDev = ZoomSDK.shared().getSettingService().getAudioSetting().getAudioDeviceList(false) as? [SDKDeviceInfo]

Or, if I write:

var deviceArray = [SDKDeviceInfo]()

let deviceItems = ZoomSDK.shared().getSettingService().getAudioSetting().getAudioDeviceList(false)
deviceArray.append(contentsOf: deviceItems)

This will not compile.

Hi @vasoundman,

It looks like you are trying to cast the entire array of devices to a single instance of SDKDeviceInfo, which is not possible. You would need to cast the individual elements in the array in order to access them. :slightly_smiling_face:

Thanks!

No I am not. Lets try it a different way. Please see the attached screen captures. You will see the first one if I cast them as an object of [SDKDeviceInfo] I will get an error.
If I just dump them without trying to cast, it works and I get an array of [ANY]. I do not want an array of ANY I want to have individual SDKDeviceInfo objects.