Torne o script executável. Deixe de lado a extensão.
Ele funciona usando AWK para obter a parte objc e, em seguida, criando um novo arquivo tmp que é compilado e executado. Quando o programa é executado, apagamos imediatamente os dois arquivos temporários.
Para mim, isso funciona mais rápido do que o Xcode ou um Makefile. Clang é tão rápido.
- Contras: os números das linhas de erro de compilação estão desativados pela parte SHELL.
- Prós: é legal.
#!/bin/bash
D=/Applications/Xcode.app/Contents/Developer/Library/Frameworks
OBJC=`awk '/^__OBJC__/ {print NR + 1; exit 0; }' $0`
tail -n+$OBJC $0 > /tmp/YOLOtests.m
clang -ObjC -F$D -I. -fmodules -fobjc-arc
-framework SenTestingKit
/tmp/YOLOtests.m *.m -o /tmp/YOLOtests
install_name_tool -change
@rpath/SenTestingKit.framework/Versions/A/SenTestingKit
$D/SenTestingKit.framework/SenTestingKit
/tmp/YOLOtests
exec /tmp/YOLOtests
__OBJC__
#import <SenTestingKit/SenTestingKit.h>
#import "YOLO.h"
int main() {
unlink("/tmp/YOLOtests.m"); //before or… doesn't happen! FFS
unlink("/tmp/YOLOtests");
@autoreleasepool {
SenSelfTestMain();
}
}
Exemplo de projeto real: https://github.com/mxcl/YOLOKit/blob/master/tests