MacDonald was born in Swansea, and began his career with his home side Swansea City, making his way up through the youth ranks before being making his first-team debut on 31 August 2005 in a 3–1 defeat to Reading in the League Cup. He went on to make a total of 13 appearances in all competitions during his first season, including playing four times in the Football League Trophy as Swansea went on to win the trophy. He scored his first goals for the club during the 2008–09 season against Brentford in the League Cup on 12 August 2008, but after making just six appearances during the season, he was allowed to join League One side Yeovil Town on a one-month loan deal on 27 January 2009. On his debut for the side, MacDonald scored the only goal of the game in a 1–0 win over Huddersfield Town, going on to make a total of four appearances before returning to Swansea. After making just three appearances during the start of the 2009–10 season, MacDonald returned to Yeovil Town on a three-month loan deal on 21 September. MacDonald impressed for Yeovil in his three-month loan spell starting all 12 of Yeovil's league games and grabbing 2 goals. Once he returned to Swansea, negotiation began with Yeovil regarding a loan deal back at Yeovil until the end of the 2009–10 season. The loan deal was agreed on 31 December 2009. In late August 2010, MacDonald returned to Yeovil on loan for the fourth time in less than two years until January 2011. He joined Yeovil on loan for the fifth time on 17 March 2011, until the end of the 2010–11 season. He scored a first half hat-trick on 26 March 2011 in a 5–1 win over Leyton Orient. MacDonald signed for Bournemouth on 25 August 2011, for a fee believed to be in the region of £125,000. He scored his first goal for Bournemouth in a 4–1 Football League Trophy win over Hereford United on 30 August 2011. His first league goal for the club came on 21 April 2012 against Colchester United. He made five league appearances during Bournemouth's 2014–15 season after which they were promoted to the Premier League. MacDonald made his Premier League debut as a substitute against Manchester City on 17 October 2015. MacDonald returned to the Championship and signed for newly promoted Wigan Athletic on 13 August 2016. MacDonald scored his first goal for the club in a 1–1 draw against Leeds United on 18 October 2016. On 3 June 2019, following his release from Wigan Athletic, MacDonald signed for League One side Rotherham United on a two-year deal.