The summary.
EXTENSIONS ARE SEPARATE PROCESSES WITH THEIR OWN CONTAINERS
They share nothing with your application automatically. Use an app group for shared files and a shared keychain group for credentials, and design for either running without the other.
They have tight memory limits and are terminated without useful messages when exceeded.
WIDGETS ARE NOT LIVE
They show prepared content refreshed on a budget the system controls. Provide several timeline entries rather than requesting frequent refreshes.
THE PRIVATE CLOUD SCOPE IS UNREADABLE TO YOU, BY DESIGN
Which means you cannot support a user by inspecting their data.
WITH SIGN IN WITH APPLE, YOU GET THE NAME AND ADDRESS ONCE
If you do not store them on first sign-in, you cannot obtain them again. And the relay address may be all you ever have.
PREFER UNIVERSAL LINKS TO CUSTOM SCHEMES
They cannot be claimed by another application and work when yours is absent. Never trust link parameters without validation.
DO NOT BEGIN A REWRITE OF AN OLDER CODEBASE
Modernise screen by screen, adding tests around what you change and nullability annotations to older headers.
BUDGET FOR THE ANNUAL PLATFORM CYCLE
It requires work every year, regardless of what else is planned.