The most frequent reason comes from embedXcode using true C++, contrary to the Arduino IDE that performs under-the-hood tasks.

Let's consider the following basic sketch:

Arduino compiles this sketch but embedXcode fails with the message

In file included from main.cpp:18:

embed1.ino: In function 'void loop()':

/Users/ReiVilo/Documents/Projets/Xcode/embed1/embed1/embed1.ino:70: 'blink' was not declared in this scope

Because embedXcode relies on true C++, a function needs to be declared before it is called. Among other automatic under-the-hood tasks, the Arduino IDE adds prototypes.

Two easy solutions, both of them fully compatible with the standard Arduino IDEs: 

  • Place blink() before setup()

  • Declare a prototype for blink()