Call a recruiter. Recruiter sends you a hackerrank question on the slightly more difficult side but a pretty effective screen.
You'll then do a 1-hour tech screen with someone on the team, and they'll get a good idea if they want to move forward with you.
Onsite interview:
1st hour: iOS design question. Describe your past projects and such.
2nd hour: Call with another iOS developer on another team. I wanted to gauge your thought process but was pretty condescending to speak to. Gave them a solution to a programming problem with O(n) complexity as a brute force which still compiled and gave an adequate solution.
3rd round: Behavioural
4th round: had one iOS engineer and an android engineer shadow the process. They asked an algorithmic question with UIViews, and I gave them a solution with O(m + n) complexity and explained my solution totally fairly, step by step.
Unfortunately, they took forever to get back to me and said they're not offering a position based on some boilerplate obligatory feedback they have to deliver you over the phone.
They loved the behavioral parts of my interview. They didn't, however, like my technical aspect though.
I had 2 working algorithmic solutions with decent complexity, and they apparently wanted something better. The most disturbing part was that the android developer who shadowed my iOS technical interview and wasn't really paying attention to any of it gave the most critical feedback out of all the interviewers. That really is flawed by its sound.
They wanted a better algorithmic efficiency programming problem, possibly something recursive for iOS, which is rarely practiced in the actual job. They wanted a scalable solution for something with UIViews. Ask yourself, hopper, are you really going to display 10000 UIViews on a screen? Then try and condescend me and yell at me for not putting my cursor over a line of code while we pair program. The standards for their interview are asinine, and they expect nothing but perfection in your technical interviews.