2017-11-07 19 views
0

コマンドラインツールを使用してCおよびObjCコードをコンパイルする静的ライブラリがあります。SwiftとxCode9で静的ライブラリを作成するベータ4

この静的ライブラリでSwiftを使用したいのは、コードを簡略化/短縮するのに役立ちます。

スレーブファイルを静的ライブラリに含めることはできませんでした。がxCode 9 beta 4で可能だったという記事が表示されるまでは、私は既に検索して理解していました。。 (Static Library and Swift

私の質問は以下のとおりです。

  • は、これは実際には本当ですか?
  • これがうまくいけば、誰かがSwiftを静的ライブラリに組み込むためにどのように処理するべきか説明してもらえますか?
  • この機能はコマンドラインツールにも拡張されていますが、コマンドラインでも同じことができますか?
  • 可能であれば、どうすればよいですか?または、それを行う方法についてのリンクを提供できる人がいますか?

注:私はすでに、私はブリッジングヘッダーのニーズに沿っプロジェクト -Swift.hヘッダファイルの生成(知っているC.からのObjective-Cからスウィフトをコールする方法についての質問を探検しましたいくつかの設定で)。

+0

はちょうどリンゴの開発者に対しフォーラムにいくつかの関連記事を見つけました: https://forums.developer.apple.com/thread/83706 https://forums.developer.apple.com/message/256569#256569 けどまだ道のりは分かりません – itMaxence

答えて

1

コマンドラインツールでこの機能を使用している限り、これを行うことはできますが、特定のフラグを設定する必要があります。私は個人的にそれをしていないが、いくつかの良い答えと情報を見つけたin this article

述べたように私たちは、Objective-Cのベースのターゲットと「子」静的ライブラリと既存のプロジェクトでこれを行うことを試みXcodeの9のベータ版4.

のように、Apple は静的ライブラリでスウィフトをを許可しませんこれが原因で、メイントンでリンクエラーに

ld: library not found for -lswiftSwiftOnoneSupport for architecture x86_64 

ld: library not found for -lswiftDispatch for architecture x86_64 

を走り続けたプロジェクトとarget(app)はObjective-Cに対してのみビルドしようとしており、Swiftライブラリをインクルードする必要があることを静的ライブラリによって知らされていません。これは、アプリターゲットのBuild PhasesCompile Sourcesセクションにスウィフトファイルがなかったためです。

だから基本的にあなたがしなければならないのは少なくとも1つの.swiftファイルをそのコンパイルリストに追加することです。それにはSwiftライブラリが含まれます。コードや値がなくても、空のファイルにすることができます。

その後、Swiftファイルを静的ライブラリプロジェクト "child"に追加することができます。最初にブリッジヘッダーを生成させてから、それを移動してインポートするものを変更することができます(移動した場合、プロジェクトがビルド設定の正しいファイルを指していることを確認してください)。

同じ静的ライブラリ内のSwiftとObjective-Cを使用すると、それ自体で問題が発生することがあります。Objective-CをSwiftにインポートする方法(ブリッジヘッダーを使用する方法)とObjective-CコードでSwiftファイルを使用する方法(ライブラリ用に生成された-Swift.hをインポートする方法)については、the Apple developer doc "Swift and Objective-C in the Same Project"を読むことをお勧めします。

関連する問題