Configurar Xcode para desarrollar con OpenGL utilizando GLFW y GLEW en Apple Silicon (M1)
¡Hola! Si estás aquí es porque necesitas instalar OpenGL con las librerías glew y glfw en una Mac con procesador Apple Silicon (ARM)…
Configurar Xcode para desarrollar con OpenGL utilizando GLFW y GLEW en Apple Silicon (M1)
¡Hola! Si estás aquí es porque necesitas instalar OpenGL con las librerías glew y glfw en una Mac con procesador Apple Silicon (ARM), aunque también los pasos deberían funcionar bien para una Mac Intel.
Cabe aclarar que este tutorial como lo indica el título, va a estar enfocado en configurarlo en el IDE Xcode aunque también es posible configurar este espacio en otros IDEs o editores de código como Visual Studio Code, pero este tutorial será configurándolo en Xcode porque al final es más fácil de configurar y desarrollar en el compilando solo con un botón.
Notas importantes
Antes de comenzar quiero aclarar algunos aspectos:
- Estoy utilizando MacOS Ventura 13.1
- Apple dejo de darle soporte a OpenGL desde el 2018, por lo tanto, las nuevas versiones (>4.1) no son soportadas.
- Estoy utilizando una Macbook Air 2020, con el chip M1 (Apple Silicon ARM).
Pasos de configuración
- Instalar Xcode
- Correr
brew install glfwybrew install glew. Importante: Ver la ruta en la quebrewindica que se instalaron estas bibliotecas, en mi caso fue/opt/homebrew/Cellar - Crear una aplicación de consola con C++
- En la configuración del proyecto entrar a General > Targets > Frameworks & Libraries y agregar
OpenGL.framework(Buscarlo en las predeterminadas de Apple), y agregarlibGLEW.2.2.0.dylibylibglfw.3.3.dylibque en mi caso se encuentran en/opt/homebrew/Cellarque es donde instalo las librerías homebrew (Recuerda hacer un de ambas antes de comenzar.

Ventana de selección de frameworks en Xcode

Ubicacion de libreria glfw

Librerias seleccionadas en Frameworks and Libraries
- Entrar a Build Settings > All y buscar la configuración
Header Search Pathsy colocar la siguiente ruta**/usr/local/include**.

Configuracion de Header Search Paths
- Ahora, puedes probar compilar la aplicación con ⌘+B , si funciona ya la armaste jaja. Pero en mi caso no funcionaba, y es por que en
**/usr/local/includeno tenía las librerías que estaba buscando la aplicación. Por lo que hay que ponerlas (Nota**: Esto solo se debe hacer la primera vez, en los demás proyectos no será necesario).
El primer paso es entrar con Finder a la ruta /usr/local/include después (de preferencia en otra pestaña o ventana de finder) se debe entrar a la ruta donde se instalaron las librerías glew y glfw con homebrew (en el paso 1) y copiar las carpetas que se encuentran en include (GL y GLFW):

Carpeta GL dentro de directorio de brew

Carpeta GLFW dentro de directorio de brew

Carpetas GL y GLFW copiadas a la ruta /usr/local/include
- Finalmente, con estos pasos no deben de existir problemas al compilar la aplicación en Xcode. Para probar su correcto funcionamiento puedes probar con el siguiente código:
#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#define GL_SILENCE_DEPRECATION
int main(void)
{
//Init GLFW
glfwInit();
//Setup glfw window settings
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* Window = glfwCreateWindow(800, 600, "macOS OpenGL engine", nullptr, nullptr);
glfwMakeContextCurrent(Window);
//init GLEW
glewInit();
glViewport(0, 0, 800, 600);
std::cout << "GL version: " << glGetString(GL_VERSION) << std::endl;
std::cout << "GL vendor: " << glGetString(GL_VENDOR) << std::endl;
std::cout << "GL renderer: " << glGetString(GL_RENDERER) << std::endl;
//Game loop
while(!glfwWindowShouldClose(Window))
{
glClearColor(0.2f, 0.65f, 0.154f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(Window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
Y al correrlo debe generarte una ventana verde y en consola indicar la información del dispositivo, así como la versión máxima de OpenGL soportada.

OpenGL funcionando correctamente con especificaciones del dispositivo
Otros errores
Nada podía salir perfecto, ¿verdad? jaja. Aquí pongo algunos otros errores que me surgieron y su solución:
- Cycle inside XXX; building could produce unreliable results.

Build Phases en orden equivocado
No te voy a mentir, no sé por qué sucede este error, pero si se su solución. Simplemente tienes que entrar a Build Phases y mover la opción Compile Sources al final de la lista, como lo indica la imagen:

Build Phases en orden correcto (Compile Sources al fondo)
2. GLFW Failed to create Window / El programa falla al crear la ventana pero si compila correctamente.

Error al crear ventana con GLFW
Este error me saco canas la verdad, y la solución es super simple.
En mi caso particular, necesitaba correr el codigo que mi profesor me proporciono, y fracasaba al crear la ventana. Después de un rato, notamos que el error era muy simple: El programa estaba intentando utilizar una versión de OpenGL no soportada. 🤦🏽♂️
Como recordaras, al probar el programa con el código de la pantalla verde en consola indico que mi dispositivo (Macbook Air M1) podía utilizar hasta la versión 4.1 de OpenGL (Principalmente porque dejo de darle soporte hace unos años, como mencione anteriormente), por lo que simplemente, si este es tu caso, hay que bajar la versión que se quiere utilizar con las siguientes líneas:
// Asignando variables de GLFW y propiedades de ventana
// Colocando la versión 4.1 de OpenGL para dispositivos MacOS
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);
// para solo usar el core profile de OpenGL y no tener retrocompatibilidad
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
// CREAR VENTANA
GLFWwindow *mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Primer ventana", NULL, NULL);
3. El programa inicia pero se muestra una pantalla negra Este error me dio muchos dolores de cabeza porque no aparecía ningún mensaje de error en la consola y seguía sin funcionar el programa. Sin embargo, en una de las ocasiones que corrí el programa me aparecio un warning sobre la validación de los shaders. Por lo que (en mi caso) entre a la clase Shader y busque donde se tuviera la validación del programa. En mi caso, tenía el siguiente código:
glValidateProgram(shaderID);
glGetProgramiv(shaderID, GL_VALIDATE_STATUS, &result);
if (!result)
{
glGetProgramInfoLog(shaderID, sizeof(eLog), NULL, eLog);
printf("Error validating program: '%s'\n", eLog);
return;
}
Simplemente lo que hice fue comentar esta parte del código y el programa funciono sin problemas :).
Nota: Esta no es la mejor solución para resolver este problema, ya que según lo que investigue en distintos foros, la validación se estaba haciendo en un lugar incorrecto (en mi caso), por lo que se debería cambiar la ubicación en la que se realiza esta validación. En mis pruebas eliminar esta validación no afecta en lo más mínimo el rendimiento de los programas, pero dejo la aclaración. 🤓
Bien, con esto debes tener OpenGL configurado perfectamente en MacOS. Si tienes alguna duda, no dudes en contactarme por Instagram @el.chrisley con gusto te ayudare 😁.
메타데이터
- post_id
- 4e8e30d5e9db
- slug
- configurar-xcode-para-desarrollar-con-opengl-utilizando-glfw-y-glew-en-apple-silicon-m1-4e8e30d5e9db
- url
- https://medium.com/@chrisley304/configurar-xcode-para-desarrollar-con-opengl-utilizando-glfw-y-glew-en-apple-silicon-m1-4e8e30d5e9db
- canonical_url
- https://medium.com/@chrisley304/configurar-xcode-para-desarrollar-con-opengl-utilizando-glfw-y-glew-en-apple-silicon-m1-4e8e30d5e9db
- author_url
- https://medium.com/@chrisley304
- status
- ok
- fetched_at
- 2026-06-20 20:29:01