Guia de Plataforma iOS iOS
O HarbourBuilder pode compilar aplicacoes iOS nativas usando controles UIKit, seguindo a mesma API UI_* utilizada no Android. Seu codigo Harbour PRG e compilado para codigo de maquina arm64 nativo — sem web views, sem interpretadores.
Arquitetura
O backend iOS usa o mesmo padrao de inversao do loop de eventos do Android:
- O iOS possui o loop de eventos —
UIApplicationMain()executa o loop de eventos Cocoa Touch, nao o Harbour. - A VM Harbour inicia dentro do AppDelegate —
application:didFinishLaunchingWithOptions:chamahb_vmInit()que executa seuMain(). - As funcoes UI_* criam controles UIKit — UILabel, UIButton, UITextField sao criados diretamente em Objective-C.
- Os eventos de click sao despachados para codeblocks Harbour —
UIButton target/action chama
hb_evalBlock0().
Requisitos
- macOS com Xcode 15+ instalado
- iOS SDK (instalado via Xcode > Settings > Platforms)
- Harbour para macOS (compilador host para traducao PRG→C)
- Bibliotecas Harbour para iOS compiladas cruzadamente
Configuracao
Execute o assistente de configuracao pelo menu do IDE: Run > iOS Setup Wizard
Ou manualmente pelo terminal:
cd source/backends/ios
./setup-ios-toolchain.sh
Isso ira:
- Verificar se Xcode e o iOS SDK estao instalados
- Baixar o runtime do Simulador iOS se necessario
- Compilar Harbour para iOS (arm64 dispositivo + x86_64 simulador) via
bootstrap-harbour.sh
Compilacao
Pelo IDE: Run > Run on iOS
Ou manualmente:
# Compilar para simulador
./build-ios-app.sh hello_ios.prg simulator
# Compilar para dispositivo
./build-ios-app.sh hello_ios.prg device
O pipeline de build tem 4 etapas:
- PRG → C: O compilador Harbour traduz seu .prg para C
- Cross-compile: Clang compila C + ios_core.m para iOS
- Link: Liga com bibliotecas Harbour iOS + frameworks UIKit
- Bundle: Cria .app com Info.plist e codesign
Execucao no Simulador
./install-and-run.sh
Ou manualmente:
xcrun simctl boot "iPhone 16"
xcrun simctl install booted /tmp/HarbouriOS/app-build/HarbourApp.app
xcrun simctl launch booted com.harbour.builder.app
Referencia da API UI_*
| Funcao | Descricao |
|---|---|
UI_FormNew(cTitle, nW, nH) | Cria UIViewController com UIView raiz |
UI_LabelNew(hParent, cText, nX, nY, nW, nH) | Cria UILabel |
UI_ButtonNew(hParent, cText, nX, nY, nW, nH) | Cria UIButton |
UI_EditNew(hParent, cText, nX, nY, nW, nH) | Cria UITextField |
UI_SetText(hCtrl, cText) | Define texto do controle |
UI_GetText(hCtrl) | Obtem texto do controle |
UI_OnClick(hCtrl, bBlock) | Registra codeblock para click |
UI_SetFormColor(nClr) | Cor de fundo do form (BGR) |
UI_SetCtrlColor(hCtrl, nClr) | Cor de fundo do controle (BGR) |
UI_SetCtrlFont(hCtrl, cFamily, nSize) | Define fonte |
Formato de Cor
As cores usam o formato Win32 COLORREF: 0x00BBGGRR (BGR),
igual aos backends Android e Win32, para que seu codigo PRG
seja portavel entre plataformas.
Patches do Harbour para iOS
Tres pequenos patches foram necessarios para compilar Harbour para iOS:
src/rtl/hbrunfun.c—system()nao esta disponivel no iOS, retorna -1src/rtl/run.c— mesmo guard desystem()src/common/hbfopen.c— mesmo guard desystem()include/hbdefs.h— auto-deteccao do iOS viaTargetConditionals.h
Estes patches sao aplicados automaticamente pelo bootstrap-harbour.sh.
Estrutura de Arquivos
source/backends/ios/
ios_core.m # Backend UIKit (HB_FUNCs + AppDelegate + main)
hello_ios.prg # App de demonstracao
bootstrap-harbour.sh # Compilacao cruzada do Harbour para iOS
build-ios-app.sh # Compilar .app a partir do PRG
install-and-run.sh # Instalar e lancar no simulador
setup-ios-toolchain.sh # Verificar/instalar toolchain