Atlanta, which began the second half of the season with the largest division lead in the majors, held on down the stretch to hand the White Sox their third straight loss.
McCann's blast, his 13th of the season, gave the Braves a 5-2 lead and made a winner out of starter Tim Hudson (7-7).
Hudson gave up all four Chicago runs on eight hits over 7 1/3 innings. Craig Kimbrel walked a batter in the ninth, but wound up striking out the side for his 27th save.
John Danks (2-7) allowed five runs on seven hits in seven innings to take the loss.
The Braves lead second-place Philadelphia by seven games in the National League East.