It can be really frustrating to program to mobile platforms, especially if you want to make your project cross-compilable to both major mobile platforms, and perhaps even non-mobile platforms.
There's like a million game engines, of varying levels of abstraction, out there that promise excellent cross-platform support and fast development times, and promise everything between heaven and earth... but basically invariably when you actually study how they are used and what their details are, there are always problems.
Many of them use obscure programming or even scripting languages (in a few cases even completely custom ones), which usually means not only learning a completely new language, but also extremely poor third-party library support (because 99.99% of program libraries out there are made for the more popular programming languages, not the most obscure ones).
And when you try to actually use one of these fancy game engines, you'll soon find its flaws, defects and often severe limitations. Sometimes even features that seem completely trivial and absolutely essential might be lacking or limited. And almost always if you would need to do something even slightly unusual, there will be little support, or implementing it will be a nightmare. Also, by the very nature of the game engine being cross-platform, quite often platform-specific code (which is often needed in actual projects) will be difficult or impossible.
Even sdks that are well supported and have an active development can still be nightmarish to use (I'm looking at you, react-native).
Many of them have some kind of graphical editor to create levels, views and assets, and will have all sorts of fancy screenshots and demonstration videos, again promising everything you could even imagine. And then, once you start actually using it, you once again quickly find the limitations, and quite often your code becomes a complete mess trying to work around those limitations.
And one of the most frustrating things about mobile platform engines is how fast the technology gets old, obsolete, and replaced with something else. Every 2 or 3 years, that fancy engine or sdk you used will most probably be either obsolete, or completely abandoned, and might even stop working with newer versions of operating systems and devices. In some cases your project might even stop compiling as-is, as the compiler and its libraries change. And if and when new hardware or software features (such as different resolutions and aspect ratios) come along, the abandoned project will have less and less support for them.
In this day and age, sticking to a single-platform SDK (like cocos2d-objc, or SpriteKit) is not very feasible. And even if you do, you'll still encounter many of the same problems (eg. SpriteKit is far from free of them).