Cole Palmer put City ahead with a stunning curler before Leandro Trossard grabbed a dramatic equalizer in the 101st minute to send the game into a shoot-out.
The annual curtain raiser to the English season always has an element of excitement to see new faces on display with all three of Arsenal’s new signings in Declan Rice, Kai Havertz and Jurrien Timber, while Mateo Kovačić starts for City.
Havertz was the story of the first half as the Germany international missed two golden opportunities to break the deadlock, with Stefano Ortega on hand to deny two close-range efforts with extraordinary saves.
City only created chances in the first half with Rodrigo’s 25-yard drive denying their only truly notable attempt at goal.
But last season’s winners had the first chance in the second period, but Aaron Ramsdale equalized John Stones’ header from a City corner.
Bukayo Saka failed to make contact with another encouraging white cross as Mikel Arteta’s men sought an opener, but it took a moment of inspiration to open the scoring in a game lacking in clear-cut chances.
City substitute Cole Palmer saw the ball bounce into his path just outside the box before driving into the area and bending an audacious left-footed curler into the top corner, leaving Ramsdale with no chance.
There were 13 minutes of added time at the end of the second half due to a combination of the new “timekeeping” rules introduced by the referees for the upcoming season and a collision between Kyle Walker and Thomas Partey.
Both players proved to be fine but there was plenty of time left for Arsenal to find an equalizer and this time it was through one of their substitutes.
Leandro Trossard made room for a shot on the edge of the box and his left-footed effort was badly hit by Ortega and took a huge deflection into the back of the net.
It went to penalties as Kevin De Bruyne hit the crossbar before Rodri saw his penalty saved by Ramsdale to allow Fabio Vieira the chance to win it for the Gunners.
Pep Guardiola’s men open their Premier League campaign at Vincent Kompany’s Burnley next Friday, with Arsenal facing Nottingham Forest the following day.
Manchester City player ratings (4-2-3-1)
GK: Stefan Ortega – 7/10 – Important saves from Havertz when the game was goalless.
RB: Kyle Walker – 6/10 – Some long passes were unnecessarily errant but his pace largely shut down the right hand side.
CB: John Stones – 7/10 – Back in defence which ruled out any excessive pirouetting. Almost netted with a powerful header.
CB: Ruben Dias – 7/10 – Gave away a few passes but was largely commanding and led City’s back line.
LB: Manuel Akanji – 6/10 – Some nice crosses in attack.
CM: Rodri – 6/10 – Probably should have been booked somewhere throughout the contest. Showed his now known attacking penchant by going close in the first half.
CM: Mateo Kovacic – 6/10 – Looked to burst forward in possession wherever possible, adding another body in attack.
RW: Bernardo Silva – 6/10 – Not at his magical best but industrious as ever without being too creative in the final third.
AM: Julian Alvarez – 6/10 – Created three chances on Sunday afternoon, though City starting poking holes in Arsenal’s defence once he was replaced by De Bruyne.
LW: Jack Grealish – 5/10 – The first City player hooked just before the hour, having contributed little to proceedings.
ST: Erling Haaland – 5/10 – Pretty subdued, not having a single shot in the opening hour. Now gone six City games without a goal.
Phil Foden (58′ for Grealish) – 8/10 – Key role in City’s opener, waltzing away from Partey before playing the ball out wide.
Kevin De Bruyne (64′ for Kovacic) – 7/10 – Registered his first assist of the season by nodding into Palmer’s path. Game opened up upon his arrival.
Cole Palmer (64 for Haaland) – 8/10 – Put City ahead not long after coming on, beautifully picking out the far corner.
Subs not used: Kalvin Phillips, Aymeric Laporte, Sergio Gomez, Ederson, Cole Palmer, Rico Lewis, James McAtee.
Pep Guardiola – 6/10 – His substitutions came at a vital time and looked to have got City the win. They couldn’t hold out, however.
Arsenal player ratings (4-3-3)
GK: Aaron Ramsdale – 6/10 – Looked to go long early on but was nervy in possession. Good save from Stones in the second half.
RB: Ben White – 7/10 – Brilliant stop denied Alvarez putting City ahead and got forward well down the right.
CB: William Saliba – 7/10 – Shut down Haaland excellently on one occasion. Cool, calm and collected throughout.
CB: Gabriel Magalhaes – 7/10 – Sometimes a little reckless and picked up a booking but constantly made clearances at the back for Arsenal.
LB: Jurrien Timber – 7/10 – Got little space to work with as a right-footed left-back. Had few issues while defending.
CM: Declan Rice – 6/10 – Got better in the second half, picking up loose ball more regularly to get Arsenal on the front foot.
CM: Thomas Partey – 6/10 – Pretty harsh booking early on. Recovered well but was mugged off by Foden before Palmer’s winner by pressing too high.
CM: Martin Odegaard – 6/10 – Couple of nice half-turns here and there but didn’t dominate like he can.
RW: Bukayo Saka – 6/10 – Caused some problems early on and looked like Arsenal’s brightest spark at points, but died off towards full time.
ST: Kai Havertz – 5/10 – Two great chances to net in the first half but again let down by anxious finishing, even with some decent link-up play in the build-up.
LW: Gabriel Martinelli – 5/10 – Wasn’t afforded space in behind to run into and delivery from set pieces was off.
Kieran Tierney (76′ for Timber) – 5/10 – Appeared to lose his footing and couldn’t close down Palmer before he scored.
Leandro Trossard (75′ for Martinelli) – 7/10 – Managed to create the chance that drew Arsenal level, even if the way it crept in was fortuitous to say the least.
Eddie Nketiah (81′ for Rice) – 6/10 – Sent on late on as Arsenal chased an equaliser.
Emile Smith Rowe (87′ for Gabriel) – N/A
Fabio Vieira (87′ for Havertz) – N/A
Mikel Arteta – 5/10 – Booked for getting too excited and asking for yellow cards. His side couldn’t capitalise when on top and City’s greater depth ultimately proved the difference.