投稿Compiling Objective-C without GUIは次のように述べています。
OSX で Objective-C を簡単にコンパイルするには、アプリケーション ストアから無料で入手できる XCode を入手する必要があります。XCode を取得すると、Foundation、Cocoa などの必要なフレームワーク (ヘッダー) を確実に取得できます。ただし、コマンド ラインから Object-C をコンパイルするために必要なコマンド ライン ツールは提供されません。XCode を開き、[設定] > [ダウンロード] > [コンポーネント] に移動して、コマンド ライン ツールをインストールします。これにより、gcc、clang、make などがインストールされます。
この私の質問に対処するための非 Xcode ベースのツールを探しています。開いたばかりです: Travis でテストする目的の C プロジェクトを作成することは可能ですか?
このツールは、次の要件を満たす必要があります。
- Xcode とは一切関係ありません。
- 次のレベルの単純さで十分です。
int main {}
近くにあるすべてのテスト ケース ファイルを収集し、テストしたいコードでテスト アサーションを実行するコード (ST-
SetTestingKit やGH-
GHUnit など) だけで十分です。 - UI、GUI、Xcode、シミュレーターは必要ありません。
- Mac と Ubuntu (そう、Travis) の両方で動作し、おそらく引用された投稿で説明されているようにGNUstepを使用できれば 素晴らしいことです。
受け入れられた回答に基づく更新:
受け入れられた回答で Malte Tancred が言ったことに基づいた次の簡単なセットアップは、私の現在のニーズには十分に思えます。
私のプロジェクトの tests ディレクトリにある 3 つのファイル:
octest.m
#import <Foundation/Foundation.h>
#import <SenTestingKit/SenTestingKit.h>
int main() {
@autoreleasepool {
SenSelfTestMain();
}
return 0;
}
メイクファイル
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)
ランテスト
#!/bin/bash
export DYLD_FRAMEWORK_PATH=/Applications/Xcode.app/Contents/Developer/Library/Frameworks
make
./octest
終了コードを取得するための更新:
この質問をしてから数日後、Travis は Objective-C のサポートを発表しました。
http://about.travis-ci.org/blog/introducing-mac-ios-rubymotion-testing/
ビルドの作成に使用するように提案されているデフォルトのスクリプトがありますが、ここで説明するアプローチを採用し、Travis が使用する xcodebuild のアプローチではなく octest を使用することにしました。
デフォルトでは、travis のセットアップは Justin Spahr-Summers によって書かれたビルド スクリプトに依存しています: 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;
}
ランテスト
#!/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 $?