2017-01-30 10 views
4

私はSwiftにクライアント+サーバーコードを書く方法を示すためにオープンソースのアプリケーションを作成しようとしています。 ソースコードはここに配置されている:APIにアクセスするhttps://github.com/haaakon/QuizWorld-API(QWAPI):https://github.com/haaakon/QuizWorld(略しQW)別のフレームワークをインポートするXCodeプロジェクトでテストを実行できません

アプリがここにフレームワークを使用しています。私はQWアプリへのプロジェクトとしてQWAAPIを輸入してきた、それはシミュレータで細かい動作しますが、テストを実行するとき、それはこのエラーのためコンパイルされません:これは1行だけからである

Undefined symbols for architecture x86_64: 
"QuizWorld.QuestionViewModel.__allocating_init() -> QuizWorld.QuestionViewModel", referenced from 

テストのコード:

let a = QuestionViewModel() 

これは、テスト対象が正しくインポートされたモジュールを取得していないことを意味し、輸入は次のとおりです。私も、異なる輸入の多くを追加しようとしました

@testable import QuizWorld 
@testable import QuizWorldAPI 

import Prelude 
import ReactiveSwift 
import ReactiveExtensions 
import Result 

APIフレームワークで使用されるフレームワークですが、これを修正するものはありません。 QW-Testsターゲットには、正しいターゲット依存関係も設定されています。誰でも私はこれで次に行くことができる手がかりを持っていますか?すべてのコードは、にリンクされているリポジトリのオープンソースです。

+2

は、サブモジュールがQuizWorld-APIをチェックアウトするようにQuizWorldレポを修正することを推奨します。サブモジュールは残りの依存関係(Result、Prelude、ReactiveSwiftなど)もチェックアウトする必要があります。 – Casey

+0

Caseyが正しく、QuizWorld-APIサブモジュールがローカルフォルダを指しています。 – hybridcattt

+0

また、.gitignoreを設定することをお勧めします:) – hybridcattt

答えて

5

テストターゲットでは、Test HostBundle loaderのビルド設定に何も設定されていません。リンクフェーズでは、基本的にシンボルの読み込みに失敗します(どこからのものか分かりません)。ターゲットの依存関係は、を先に組み込んでを作成し、「ライブラリとバイナリをリンクする」は動的フレームワークには影響しません。

Test Host: $(BUILT_PRODUCTS_DIR)/QuizWorld.app/QuizWorld 
Bundle Loader: $(TEST_HOST) 

後者のためのドキュメント:

Specifies the executable that will be loading the bundle output file being linked. Undefined symbols from the bundle are checked against the specified executable like it was one of the dynamic libraries the bundle was linked with.

私はあなたのプロジェクトでこれを試してみましたが、それが動作テストの対象でビルド設定を次

セット。

UPD:2番目のコミット「最初のテストのセットアップ」では、これらの行を削除しているため、これらの行の削除を元に戻すことができます。

UPD2:一般的なプロジェクト設定について。実際のデバイスでアプリケーションを実行してみてください。この設定では、QWAPIプロジェクトから自動的にコピーされないので、サードパーティのフレームワークは見つかりません。動的フレームワークがアプリケーションバンドルにコピーされることを確認するには、 "Copy frameworks"ビルドフェーズをセットアップする必要があります。

関連する問題