macOS Guia de Plataforma

El backend de macOS usa Cocoa/AppKit (Objective-C++) para todos los componentes de interfaz nativos. Proporciona una experiencia Mac verdadera con widgets nativos, soporte de modo oscuro via NSAppearanceNameDarkAqua, e integracion completa con el sistema de ventanas de macOS.

Estadisticas del Backend
LenguajeObjective-C++
Lineas de codigo~3,800
Funciones HB_FUNC~158
API NativaCocoa / AppKit (NSView, NSWindow)
Scintilla5.5.3 (biblioteca estatica)
SO SoportadomacOS 12 (Monterey) y posterior
Arquitecturasx86_64, ARM64 (Apple Silicon)

Vision General de la Arquitectura

Cada formulario de HarbourBuilder es un NSWindow nativo con una vista de contenido NSView. Los controles son subclases Cocoa de NSView:

Control HarbourBuilderClase Cocoa
ButtonNSButton (NSButtonTypeMomentaryPushIn)
LabelNSTextField (estilo etiqueta, no editable)
EditNSTextField (editable, una sola linea)
MemoNSTextView (en NSScrollView)
CheckBoxNSButton (NSButtonTypeSwitch o NSButtonTypeCheck)
ComboBoxNSComboBox
ListBoxNSScrollView con NSListView
GroupBoxNSBox (NSBoxTypeCustom)
ProgressBarNSProgressIndicator (NSProgressIndicatorStyleBar)
Slider/TrackBarNSSlider
ImageNSImageView
TabControlNSTabView
TableViewNSTableView (en NSScrollView)
TimerNSTimer

Manejo de Eventos

El backend de macOS usa el patron target-action de Cocoa y el sistema de notificaciones. Cada control registra un target de accion que llama al sistema de eventos de Harbour:

// cocoa_backend.mm - Vinculacion de eventos de boton
HB_FUNC( UI_ONEVENT )
{
   NSInteger nHandle = hb_parnint( 1 );
   NSInteger nEventId = hb_parnint( 2 );
   PHB_ITEM pBlock = hb_param( 3, HB_IT_BLOCK );

   NSButton * btn = (NSButton *)(intptr_t) nHandle;

   // Almacenar el bloque de codigo Harbour en una tabla lateral
   StoreEventBlock( nHandle, nEventId, pBlock );

   // Configurar el target de accion Cocoa
   EventTarget * target = [[EventTarget alloc] initWithHandle:nHandle eventId:nEventId];
   [btn setTarget:target];
   [btn setAction:@selector( fire: )];
}

Modo Oscuro

El modo oscuro de macOS es manejado nativamente por AppKit:

Tema del sistema

HarbourBuilder sigue la configuracion de apariencia del sistema macOS. Si tu Mac esta configurada en modo Oscuro (Ajustes del Sistema → Apariencia), HarbourBuilder y todas las aplicaciones construidas con el usaran automaticamente el tema oscuro. No se necesita configuracion.

Integracion de Scintilla

En macOS, Scintilla 5.5.3 se construye como biblioteca estatica y se enlaza directamente en el binario de HarbourBuilder:

ArchivoTipoProposito
libscintilla.aBiblioteca estaticaComponente principal de edicion Scintilla
liblexilla.aBiblioteca estaticaBiblioteca de lexer

Proceso de Construccion

Requisitos Previos

  1. Xcode Command Line Tools — Este es el unico requisito previo. Instala con:
    xcode-select --install
    Esto proporciona clang, make y las cabeceras del SDK de macOS.
  2. No se necesita instalacion separada de Harbour — El script de construccion descarga y compila Harbour automaticamente si no esta presente.

Script de Construccion (build_mac.sh)

El script realiza estos pasos:

  1. Verificar Harbour — Si $HBDIR no esta establecido o Harbour no se encuentra en ~/harbour, clona y compila Harbour desde github.com/harbour/core.
  2. Construir Scintilla — Descarga el codigo fuente de Scintilla 5.5.3 y construye libscintilla.a y liblexilla.a como bibliotecas estaticas.
  3. Compilar el IDE — Compila el codigo fuente de HarbourBuilder usando el compilador Harbour y clang para el backend Objective-C++.
  4. Enlazar — Enlaza contra los frameworks de macOS: -framework Cocoa, -framework Foundation, -framework AppKit, mas el runtime de Harbour y las bibliotecas estaticas de Scintilla.
# build_mac.sh - Sesion de construccion tipica
cd HarbourBuilder/samples
./build_mac.sh

# Copiar a bin/ y ejecutar
cp HbBuilder ../bin/
../bin/HbBuilder
Ruta personalizada de Harbour

Si ya tienes Harbour instalado en otro lugar: HBDIR=/ruta/a/harbour ./build_mac.sh

Consideraciones de Apple Silicon

La construccion predeterminada apunta a x86_64 para compatibilidad. En Macs Apple Silicon (M1/M2/M3/M4), el binario se ejecuta bajo traduccion Rosetta 2. Para construcciones ARM64 nativas:

  1. Recompila Harbour para darwin/clang/arm64
  2. Actualiza HBDIR en build_mac.sh para apuntar a la construccion ARM64 de Harbour
  3. Reconstruye Scintilla con -arch arm64
  4. Construye HarbourBuilder con clang -arch arm64
Rendimiento de Rosetta 2

La traduccion Rosetta 2 es muy eficiente en Apple Silicon. La mayoria de las aplicaciones se ejecutan con un impacto de rendimiento insignificante. Sin embargo, para el mejor rendimiento — especialmente con operaciones intensivas de CPU como compilar — se recomienda una construccion ARM64 nativa.

Creacion de Paquetes .app

Para distribuir una aplicacion HarbourBuilder como un paquete de aplicacion macOS estandar:

MiApp.app/
├── Contents/
│   ├── Info.plist          // Metadatos del paquete
│   ├── MacOS/
│   │   └── MiApp           // El binario compilado
│   ├── Resources/
│   │   ├── icon.icns       // Icono de la aplicacion
│   │   └── MainMenu.nib    // (opcional) Menu principal
│   └── PkgInfo             // APPL????

Limitaciones Conocidas

Dependencias

Framework/BibliotecaProposito
-framework CocoaFramework paraguas completo Cocoa/AppKit/Foundation
-framework AppKitControles de interfaz, ventanas, vistas, eventos
-framework FoundationNSString, NSArray, NSDate, etc.
libscintilla.aComponente de edicion de codigo (estatica)
liblexilla.aComponente de lexer (estatica)
libharbour.aRuntime de Harbour

En Esta Página

Primeros pasos Paleta de componentes Funciones del IDE Tutoriales Referencia Plataformas Vision General de la Arquitectura Manejo de Eventos Modo Oscuro Integracion de Scintilla Proceso de Construccion Requisitos Previos Script de Construccion (build_mac.sh) Consideraciones de Apple Silicon Creacion de Paquetes .app Limitaciones Conocidas Dependencias