I always get amazed when I see software architectures like this. How one learns the skills required to architect such huge project? Where you learn all that?!
It requires experience, vision and talent. It's perceived as very difficult because it's basically the same approach as academic research, but instead of being applied to general problems, it's a general approach for a set of very specific technical constraints.
Oh, and most people screw it up badly on most occasions.
Also a team of solid engineers.
1. Translate Java to ObjectiveC: generate an abstract syntax tree, transform the syntax tree, generate ObjectiveC.
2. Provide compatible APIs.
Don't get me wrong it's a lot of work, but shouldn't be more difficult than writing a compiler in general.
In all cases, though, the devil was certainly in the details! APIs, in particular, can surprise and harass the developers.