Custom ringtones on iPhone are actually straightforward if you skip the paid apps
Most people don't realize you can do this without installing Ringtz, Chime, or whatever the current trending app is. I spent years telling clients to avoid those because they're expensive and unreliable. The native way through GarageBand or even just Finder on your computer works every time. Here is how it actually goes down. Start by picking a song you want to use. It has to be in AAC or ALAC format. MP3 won't cut it unless you convert it first. Open GarageBand on your iPhone or iPad. Tap the track icon in the top right to switch to the MultiTrack view. Add an audio file by tapping the Sources button and selecting "My Songs." Browse to Files or iCloud Drive and find your audio clip. Once it's in the timeline, trim it. Ringtones on iOS have a hard limit of 40 seconds. If your clip is longer, the import will fail or get truncated awkwardly. Use the split tool at the 40 second mark and delete everything after. I learned this the hard way with a 3 minute excerpt from a podcast episode I wanted as my ringtone. The phone just wouldn't accept it, and I wasted twenty minutes debugging before realizing the length issue.
After trimming, tap the down arrow in the top left to go back to the Projects view. Hold down on your project and select Share. Choose "Ringtone." Name it something sensible. GarageBand will process it and automatically push it to Settings. Go to Settings, then Sounds and Haptics, then Ringtone. Your new ringtone will be at the top of the list. If you prefer doing this on a Mac or Windows PC instead of on the device itself, that is also viable. The process takes roughly the same amount of time but gives you more control over the audio editing. On a Mac, you would use GarageBand there, export the trimmed clip as an AAC file, rename the extension to .m4r, then drag it into iTunes or Finder depending on your iOS version. Windows users need iTunes installed and the same .m4r extension swap. One thing beginners consistently miss is that the audio source material matters more than the trimming. If your original clip has heavy compression or background noise, the ringtone will sound worse than the default options. Apple's system ringtones are actually well mixed. A poorly sourced custom ringtone sounds bad at full volume, especially during the morning when you are groggy and turning the brightness up to maximum.
Another counter-intuitive detail is that iCloud Music Library can interfere with this. If you have "Sync Library" enabled and your audio file isn't from your own library, GarageBand sometimes refuses to share it as a ringtone. Turn off Sync Library temporarily, create the ringtone, then turn it back on. This is not documented in Apple's support pages and catches most people out. There are genuine limitations you should know about. You cannot set a custom ringtone for WhatsApp calls, Telegram, or any third party app using the system settings interface. Those apps have their own tone selectors inside their individual settings. You also cannot exceed the 40 second limit no matter what you try. Even if you hack the file system on a non-jailbroken device, the OS enforces that cap at the system level. Jailbreaking removes this restriction but voids your warranty and breaks banking apps, which is a tradeoff nobody should make lightly. Another edge case involves audio files with metadata tags that include special characters. I once had a client whose ringtone kept failing to appear because the song title contained a forward slash. GarageBand accepts it during import but refuses to share it. Rename the file to something clean like custom_tone and retry.
Get the Full Details

If your source audio is longer than 30 seconds after trimming, consider whether it will actually serve you well. Most people spend three seconds answering their phone. A 40 second ringtone means half the clip never plays before you pick up. I recommend keeping custom ringtones between 15 and 25 seconds so the most recognizable part of the audio actually gets heard. The total time from finding a song to having it active as your ringtone is usually around ten to fifteen minutes if you are familiar with GarageBand. First-timers should budget thirty minutes. That is significantly faster than paying five dollars for a ringtone app that does the same thing and then asks for a subscription to remove watermarks or ads.