0

杉を設置しようとしていますが、うまく機能しません。githubの指示に従おうとしています。

xcode4.2を使用しています。

私がよくわからない最初のステップはこれです:

「プロジェクトでテスト用のCocoaTouch「アプリケーション」ターゲットを作成します。このターゲットにUISpecsなどの名前を付けます。」

a)杉でテストするときにメインアプリケーションにARCを使用できるかどうかわかりません。b)杉自体を作るのにARCを使うことはできないと確信しており、使いたくないと思います。c)仕様を格納するテストプロジェクトにARCを使用できるかどうかわかりません。d)仕様を格納するアプリケーションを作成するためにどのアプリケーションテンプレートを使用すべきかわかりません。

ARCとシングルウィンドウアプリケーションテンプレートを使用して、新しいメインアプリケーションを作成しました。空のアプリケーションテンプレートを使用して、ARCなしで仕様を格納する新しいアプリケーションを作成しました。

スペックを格納しているテストアプリケーションのplist.infoファイルを開くと、「メインnibファイルのベース名」のオプションが表示されません。だから私はこのステップを無視しています。

今、私はステップに来ます:

「Cedar-iOS静的フレームワークをプロジェクトに追加し、UISpecsターゲットをそれにリンクします。」

そこで、スペックアプリケーションのビルドターゲットに移動し、〜/ Library / Developer / Xcode / DerivedData / Cedar-borwneaogydgaodbtmfyaccykqxn / Build / Products / Debug-iphoneos/libCedar-StaticLib.aファイルをプロジェクトの「linkbinarieswithlibrary」に追加しました。 「ビルドフェーズ」タブの下の「」タブ。

次に、UISpecsターゲットのその他のリンカーフラグビルド設定に-ObjC、-lstdc ++、および-all_loadを追加しました。

次に、仕様を格納するアプリケーションの下で、TestSpec.mという名前の新しいファイルを作成し、このコードを追加して、失敗した仕様を取得しようとしました。

#import <Cedar/SpecHelper.h>

SPEC_BEGIN(FooSpec)
describe(@"Foo", ^{
    it(@"should do something", ^{
        expect(0).to(equal(1));
    });
});
SPEC_END

シミュレータでspecsプロジェクトを実行しようとすると、ARCの使用時にallocとautoreleaseがサポートされないというエラーが発生しました。これは、メインアプリケーションがARCを使用できないのに対し、スペックアプリケーションは使用できないことを意味していると思います。スペックアプリケーションを削除して、今回はARCを使用して再試行しました。

ARCに準拠するために、main.mコードから自動リリースプールとリリースコードを削除しました。

2つのビルドエラーが発生します。

1)main.m内:file://localhost/Users/nelsond/workspace/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues-IOS/BIM360Issues-IOS-Specs-ARC/main.m:エラー:字句またはプリプロセッサの問題:'Cedar-iOS /Cedar-iOS.h'ファイルが見つかりません2)TestSpec.m:file://localhost/Users/nelsond/workspace/BIM360UIArchitecture/BIM360UIPrototype/BIM360Issues-IOS/BIM360Issues-IOS-Specs-ARC/TestSpec.m:エラー:字句またはプリプロセッサの問題:'Cedar/SpecHelper.h'ファイルが見つかりません

私は次に何をデバッグするかについてかなり困惑しています。

4

2 に答える 2

2

a) メインのアプリ ターゲットに ARC を使用できます。

b)なぜこれを尋ねているのかわからない.Cedar自体はARCで構築されるべきではない. とにかく、デフォルトの構成を使用するだけで、それをいじる必要はありません。

c) テスト クラスに ARC を使用しないでください。

d) 新しいプロジェクトを作成する場合、デフォルトの自動生成された OCUnit ターゲットを使用できます。


iOS アプリで Cedar を数か月間使用していますが、とても気に入っています。

私は OCUnit と一緒に使用しているので、ヒットCmd+Uするだけでテストを実行でき、CI サーバーからテストを実行するための特定のスキームがあります。

git submoduleファイルを編集することなく、Cedar のコードを取得するために を作成することを好みます。Cedar の Xcode プロジェクトをアプリのワークスペースにドラッグするだけです。静的ライブラリを使用することをお勧めします。説明したように、リンカーフラグを追加します。また、ヘッダー ファイルの場所を Xcode に伝える必要があります (User Header Search Pathsのようなものを使用"$(PROJECT_DIR)/Libraries/cedar/Source/Headers")。これで準備完了です。

テスト クラスで ARC を無効にします (プロジェクト内の単一ファイルに対して ARC を無効にするにはどうすればよいですか? を参照)。ARC 構成は実際にはファイル固有であるため、メイン ターゲット (ARC を使用) からのファイルをテスト ファイルに含めることができます。それらは問題なく混在します。少し混乱することもありますが、非常に強力です。

これが役立つことを願っています。

于 2012-05-14T22:23:18.913 に答える
0

iOS アプリケーションに Cedar を統合する際に遭遇したいくつかのポイントを次に示します。

  1. 「Cedar-iOS 静的フレームワーク」は次のフォルダーを参照しているようです: ~/Library/Developer/Xcode/DerivedData/Cedar-borwneaogydgaodbtmfyaccykqxn/Build/Products/Debug-iphoneuniversal/Cedar-iOS.framework。拡張子が .a のものではありません。

  2. 静的フレームワークはすでに ARC なしでコンパイルされているため、問題なく ARC を有効にすることができました。

  3. また、info.plist に「メイン nib ファイルのベース名」キーが表示されませんでした
  4. コードの最初の部分は、テスト ターゲットの main.m です (メイン アプリケーションの main.m を見て、変更する必要がありました)。
  5. 2 番目のコードは、「MyAppDelegateSpec.mm」という名前のファイルにある仕様コードです。

#import <UIKit/UIKit.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([CedarApplicationDelegate class]));
    }
}

#import "MyAppDelegate.h"
#import <Cedar-iOS/SpecHelper.h>

using namespace Cedar::Matchers;

SPEC_BEGIN(MyAppDelegateSpec)

describe(@"MyAppDelegate", ^ {
   __block MyAppDelegate *appDelegate;
    beforeEach(^{
        appDelegate = [[MyAppDelegate alloc] init];
        [appDelegate application:nil didFinishLaunchingWithOptions:nil];
    });

    afterEach(^{
        appDelegate = nil;
    });

    it(@"initializes window", ^{
        expect(appDelegate.window != nil).to(be_truthy());
    });
});
SPEC_END
于 2012-05-10T07:25:03.800 に答える