Sending the microphone
AddTrack takes a kind and a codec and returns a TsgcRTCTrack. The audio codecs are cctAudioOpus, cctAudioPCMU and cctAudioPCMA, the video codecs are cctVideoVP8, cctVideoVP9, cctVideoH264 and cctVideoJPEG.
Capture is a separate object, because you may not want the platform microphone at all. sgcCreateAudioCapture builds the right implementation for the platform the code was compiled for, waveIn on Windows, ALSA on Linux, AudioRecord on Android, a VoiceProcessingIO Audio Unit on iOS and macOS, so nothing in your code names a platform class. It returns nil on a target with no implementation, so test the result.
SendPCM wants 16-bit signed interleaved PCM at the encoder's rate and channel count, which for Opus is 48000 Hz and for G.711 is 8000 Hz. The capture source publishes what it actually delivers through AudioSampleRate, AudioChannels and AudioFrameDurationMs, so you can check rather than assume.
Adding a track after the session is already up sets the negotiation-needed flag and fires OnNegotiationNeeded. Call CreateOffer again to publish it, and the re-offer is built without touching the transport.