- First, check that you have the necessary tools installed.
- Go to https://my.telegram.org/apps and register a new app.
- Clone the repository recursively by using
git clone --recursive https://github.com/UnigramDev/Unigram.git. - Create a new file inside
Unigram/Unigram/Unigramand name itConstants.Secret.cs:
namespace Unigram
{
public static partial class Constants
{
static Constants()
{
ApiId = your_api_id;
ApiHash = "your_api_hash";
AppChannel = "Telegram channel username used for in-app updates";
AppCenterId = "AppCenter ID used for crash data";
BingMapsApiKey = "Bing Maps API key used for map previews";
}
}
}- Replace
your_api_idandyour_api_hashwith the data obtained from step 2.
Unigram uses NuGet for managed dependencies and vcpkg for unmanaged ones. Run the following commands to clone vcpkg:
> git clone https://github.com/Microsoft/vcpkg.git
> cd vcpkg
> git checkout 1b1ae50e1a69f7c659bd7d731e80b358d21c86ad
> ./bootstrap-vcpkg.batNow that vcpkg is ready, you must customize the ffmpeg port to be built with all the flags needed by the app:
- Navigate to
vcpkg\ports\ffmpeg - Open
portfile.cmake - Locate
--enable-libvpxand replace it with the following:
--disable-everything --enable-hwaccel=h264_d3d11va --enable-hwaccel=h264_d3d11va2 --enable-hwaccel=h264_dxva2 --enable-hwaccel=hevc_d3d11va --enable-hwaccel=hevc_d3d11va2 --enable-hwaccel=hevc_dxva2 --enable-hwaccel=mpeg2_d3d11va --enable-hwaccel=mpeg2_d3d11va2 --enable-hwaccel=mpeg2_dxva2 --enable-protocol=file --enable-libopus --enable-libvpx --enable-decoder=aac --enable-decoder=aac_fixed --enable-decoder=aac_latm --enable-decoder=aasc --enable-decoder=alac --enable-decoder=flac --enable-decoder=gif --enable-decoder=h264 --enable-decoder=hevc --enable-decoder=libvpx_vp8 --enable-decoder=libvpx_vp9 --enable-decoder=mp1 --enable-decoder=mp1float --enable-decoder=mp2 --enable-decoder=mp2float --enable-decoder=mp3 --enable-decoder=mp3adu --enable-decoder=mp3adufloat --enable-decoder=mp3float --enable-decoder=mp3on4 --enable-decoder=mp3on4float --enable-decoder=mpeg4 --enable-decoder=msmpeg4v2 --enable-decoder=msmpeg4v3 --enable-decoder=opus --enable-decoder=pcm_alaw --enable-decoder=pcm_f32be --enable-decoder=pcm_f32le --enable-decoder=pcm_f64be --enable-decoder=pcm_f64le --enable-decoder=pcm_lxf --enable-decoder=pcm_mulaw --enable-decoder=pcm_s16be --enable-decoder=pcm_s16be_planar --enable-decoder=pcm_s16le --enable-decoder=pcm_s16le_planar --enable-decoder=pcm_s24be --enable-decoder=pcm_s24daud --enable-decoder=pcm_s24le --enable-decoder=pcm_s24le_planar --enable-decoder=pcm_s32be --enable-decoder=pcm_s32le --enable-decoder=pcm_s32le_planar --enable-decoder=pcm_s64be --enable-decoder=pcm_s64le --enable-decoder=pcm_s8 --enable-decoder=pcm_s8_planar --enable-decoder=pcm_u16be --enable-decoder=pcm_u16le --enable-decoder=pcm_u24be --enable-decoder=pcm_u24le --enable-decoder=pcm_u32be --enable-decoder=pcm_u32le --enable-decoder=pcm_u8 --enable-decoder=vorbis --enable-decoder=wavpack --enable-decoder=wmalossless --enable-decoder=wmapro --enable-decoder=wmav1 --enable-decoder=wmav2 --enable-decoder=wmavoice --enable-encoder=libopus --enable-parser=aac --enable-parser=aac_latm --enable-parser=flac --enable-parser=h264 --enable-parser=hevc --enable-parser=mpeg4video --enable-parser=mpegaudio --enable-parser=opus --enable-parser=vorbis --enable-demuxer=aac --enable-demuxer=flac --enable-demuxer=gif --enable-demuxer=h264 --enable-demuxer=hevc --enable-demuxer=matroska --enable-demuxer=m4v --enable-demuxer=mov --enable-demuxer=mp3 --enable-demuxer=ogg --enable-demuxer=wav --enable-muxer=ogg --enable-muxer=opus
Now that everything is properly configured go back to the terminal and enter the following:
> ./vcpkg.exe install ffmpeg[opus,vpx]:$arch$-uwp lz4:$arch$-uwp openssl:$arch$-uwp zlib:$arch$-uwp
> ./vcpkg.exe integrate install
Make sure to replace $arch$ with either x64, x86 or arm64 depending on your build target.
Unigram uses WebRTC for calls and video chats. Since WebRTC doesn't currently support UWP, you must use our fork to build it.
- Click on Start Menu → Visual Studio 2019 → x64 Native Tools Command Prompt for VS 2022.
- Navigate to .\Unigram\Libraries\webrtc
- Execute
.\acquire-m107.cmd. This will clone WebRTC source code toC:\webrtc, and it will take a while (~1.5h) - Execute
.\build-m107.cmd "$arch$" "$config$". Replace$arch$with eitherx64,x86orarm64depending on your build target.$config$can be set to eitherreleaseordebug.
Since compiling WebRTC is time and resources consuming, it is possible to build the app without calls support:
- Locate Unigram > References and remove
Unigram.Native.Callsfrom the list. - From Unigram > Properties > Build, remove
ENABLE_CALLSdirective. - Exclude from the project the following files:
- Controls/Cells/GroupCallParticipantGridCell.xaml
- Views/GroupCallPage.xaml
- Views/LiveStreamPage.xaml
- Views/VoIPPage.xaml
The following tools and SDKs are mandatory for the project development:
- Visual Studio 2022, with
- .NET desktop development
- Desktop development with C++
- Universal Windows Platform deveopment
- Windows 11 SDK (10.0.22621.0)
- TDLib for Universal Windows Platform
If the code fails to build make sure to create a new issue or to open a pull request.