Пост Compiling Objective-C without GUI говорит следующее:Есть ли какой-либо инструмент для тестирования командной строки на основе кода без кода Xcode для Objective-C?
Для компиляции Objective-C на OSX легкий путь, вы должны получить XCode, которое свободно получить из магазина приложений. Получение XCode обеспечит получение необходимых фреймворков (заголовков), таких как Foundation, Cocoa и т. Д. Это, однако, не предоставит вам необходимые инструменты командной строки для компиляции Object-C из командной строки. Откройте XCode, перейдите в раздел «Предпочтения»> «Загрузки»> «Компоненты» и «Установить средства командной строки». Это позволит установить GCC, лязг, сделать и т.д.
Я ищу инструмент без Xcode на основе решения этого мой вопрос, я только что открыл: Is it possible to make an Objective-C project to be tested on Travis?
Этот инструмент должен отвечать следующим требованиям требования:
- Это не должно быть связано с Xcode.
- Следующий уровень простоты достаточно довольно: лишь некоторые
int main {}
код сбора всех тест-случаев файлы рядом и выполнения тестовых утверждений на код, который я хочу, чтобы проверить (какST-
в SetTestingKit илиGH-
в GHUnit) - Я не» t нужен интерфейс, графический интерфейс, Xcode, симулятор.
- Это будет отличным, если он может работать как на Mac, так и на Ubuntu (да, Travis), возможно, используя GNUstep, как указано в цитируемом сообщении.
ОБНОВЛЕНИЕ НА ОСНОВЕ ПРИНЯТА ОТВЕТ:
Следующая простая установка, основанная на том, что Malte Танкред сказали в общепринятом ответ, кажется, довольно достаточно для моих текущих потребностей:
Три файлов, все в каталоге тестов моего проекта:
octest.m
#import <Foundation/Foundation.h>
#import <SenTestingKit/SenTestingKit.h>
int main() {
@autoreleasepool {
SenSelfTestMain();
}
return 0;
}
Makefile
CC=clang # or gcc
# Trick to get current dir: https://stackoverflow.com/questions/322936/common-gnu-makefile-directory-path
TESTS_DIR:= $(dir $(lastword $(MAKEFILE_LIST)))
PROJECT_DIR:= $(TESTS_DIR)/..
FRAMEWORKS_PATH:= -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks
FRAMEWORKS:= -framework Foundation -framework SenTestingKit
LIBRARIES:= -lobjc
INCLUDE_PATHS:= -I$(PROJECT_DIR)/Projectfiles\
-I$(TESTS_DIR)/TestHelpers
SOURCE_FILES = $(wildcard $(PROJECT_DIR)/Projectfiles/*.m)
SOURCE_TEST_SUITE = $(wildcard $(TESTS_DIR)/Tests/*.m)
SOURCE_TESTS = $(TESTS_DIR)/TestHelpers/TestHelpers.m\
octest.m
CFLAGS=-Wall -Werror -fobjc-arc -g -v $(SOURCE_FILES) $(SOURCE_TEST_SUITE) $(SOURCE_TESTS)
LDFLAGS=$(LIBRARIES) $(FRAMEWORKS)
OUT=-o octest
all:
$(CC) $(FRAMEWORKS_PATH) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(OUT)
runtests
#!/bin/bash
export DYLD_FRAMEWORK_PATH=/Applications/Xcode.app/Contents/Developer/Library/Frameworks
make
./octest
ОБНОВЛЕНИЕ ДЛЯ ЗАПИСИ ВЫХОД КОД:
Через несколько дней после того, как я задал этот вопрос, Тревис объявил объективно- C:
http://about.travis-ci.org/blog/introducing-mac-ios-rubymotion-testing/
Хотя есть стандартные сценарии они предлагают использовать для сборки, я решил принять подход, описанный здесь, и до сих пор используют octest вместо подхода с xcodebuild, что Тревис использует.
По установке Travis по умолчанию полагается на сборки скриптов, написанных Джастин Spahr-Саммерс: https://github.com/jspahrsummers/objc-build-scripts:
Они используют AWK для захвата код выхода из выхода xcodebuild, поскольку она всегда существует с 0 кодами выхода, даже если весь комплект тестов не срабатывает!
OCTest ведет себя точно так же - она всегда существует с 0 кодом, а вот как я использовал упрощенную версию Travis AWK сценария для моих нужд строительства так, как я выше: проделать описанные
octest.awk
# Exit statuses:
#
# 0 - No errors found.
# 1 - Build or test failure. Errors will be logged automatically.
BEGIN {
status = 0;
}
{
print;
fflush(stdout);
}
/[0-9]+: (error|warning):/ {
errors = errors $0 "\n";
}
/with [1-9]+ failures?/ {
status = 1;
}
END {
if (length(errors) > 0) {
print "\n*** All errors:\n" errors;
}
fflush(stdout);
exit status;
}
runtests
#!/bin/bash
export DYLD_FRAMEWORK_PATH=/Applications/Xcode.app/Contents/Developer/Library/Frameworks
make
runtests()
{
./octest 2>&1 | awk -f "octest.awk"
local awkstatus=$?
if [ "$awkstatus" -eq "1" ]
then
echo "Test suite failed"
return $awkstatus
else
echo "Test suite passed"
return 0
fi
}
echo "*** Building..."
runtests || exit $?
Большое спасибо за ваш ответ. Я не знал о «SenSelfTestMain()». Не могли бы вы расширить свой ответ, сказав мне, как я мог, используя ваш пример, «собрать все тестовые файлы .m-файлов рядом с Xcode в тестовой цели» (например: что, если MyTest находится в отдельном MyTest.m файл, а не в том же файле octest.m?). Извините, если я прошу что-то мертвое просто: я парень, который изучает C/Objective-C по принципу «сверху вниз», от уровня Xcode до основания. –
А, самый простой подход - добавить #import «MyTest.m» над функцией main(), правильно? Я только что работал так. –
Вам не нужно '# импортировать любые файлы заголовков при использовании автоматического обнаружения теста. Просто убедитесь, что вы связываете тестовые примеры с исполняемым файлом или загружаете их динамически во время выполнения, и 'SenSelfTestMain()' найдет тесты. Это то, что происходит в Xcode; он запускает исполняемый файл 'otest', который, в свою очередь, загружает тестовый пакет, содержащий тестовые примеры. –