1. ~20 min call with recruiter. Mostly a get-to-know-you.
2. 30-45 min call with a technical team lead. Mostly questions on how you work on a team, remotely, processes, qualifications.
3. They'll assign you a code challenge. It's not timed so you can take however long you want to work on it. There's requirements and then bonus elements you can add, but you can basically consider the bonus as required. Once you're done with this, you send them the link to the repo.
4. Technical call (via Hangouts) with two seniors in the platform. A bit more of get-to-know-you, talk about processes. They'll ask some follow-up about the code you wrote (so make sure you can justify everything and know why you wrote what you wrote). This is followed up with generic technical questions. This call is about an hour.
The process moves a little slower, but it's nice to not have a deadline on the code exercise. The only thing I was kind of confused about was that we barely touched on the code I'd written during the technical interview. It was just a couple questions like, "What did you use this model instead that model?" Being transparent about what you don't know is always the way to go, IMO. Although I didn't know the answer to some of the questions, I felt the interview was a poor representation of my qualifications for the job. I have 4 years of experience building iOS apps and felt well-prepared before the technical. I felt I'd written a good app for them to review, and then it was barely part of the discussion. I came away feeling I need to practice interviewing more, but also felt the interviewers question selections were not great for assessing someone's abilities.
I'd recommend keeping any third party libraries to a minimum, be well-versed in threading and dispatch queues, and be prepared for at least a few mega-technical questions that you'll need to ask clarification on. Overall, everyone I spoke with was very kind and respectful.