web-dev-qa-db-ja.com

ブリッジングヘッダーのインポートに失敗しました

同様の問題に対処する多くの質問と回答を読みましたが、解決策をまだ見つけていません。誰かが光を放つことができれば、それは素晴らしいことです。

Swiftプロジェクトを作成し、Objective-Cと組み合わせたいと思います。Chartboost.hファイルを#importしようとすると、「ブリッジングヘッダーのインポートに失敗しました」が発生します。 、ブリッジヘッダーファイルに何も含まれていない限り、Xcodeはそれを見つけて問題を引き起こしません。

#import <Chartboost/Chartboost.h>

「Swift Compiler Error-関数定義はここでは許可されていません」という他の38のエラーとともにエラーを受け取ります。

フレームワークを正しくインポートしました。そして、私のフレームワーク検索パスは正しいです。そして、Chartboostフレームワークをインポートするときだけです。 UIKitとFoundationは正常に機能します。

この問題に至るまでの手順を次に示します。最初に、新しいObj-Cファイルを作成し、「Xcodeからブリッジヘッダーを構成できるかどうかを確認するポップアップが表示されたら、[はい]をクリックしました。 -Bridging-Header.h "

次に、Objective-CブリッジングヘッダーパスがSwift Compiler-Code Generation。)で正しいことを確認しました。

非常に特定のパス/Users/me/Desktop/FunFacts/FunFacts-Bridging-Header.hを入力しても、「インポートに失敗しました」と表示されます。

また、Defines Modulesを「Yes」に設定しました(それが役立つと聞いたため)。そして、私の製品モジュール名はFunFactsです。

#importを追加しようとするとFunFacts-Bridging-Header.hのインポートに失敗するのはなぜですか?

27
Alan Scarpa

私は2つの解決策を見つけました!

1)これは最もきれいな方法ではありませんが、インポートする代わりに、Chartboost.hファイルのすべてのコードをBridging-Header.hファイルにコピーして貼り付けます。これはうまくいきました。しかし、私はより良い方法があることを知っていたので、私は狩り続けました...

2)正しい解決策は、次にやったことだと思います。プロジェクトの(ターゲットではない)フレームワーク検索パスが空でした。そこで、先に進み、次のようにChartboost SDKへのパスを追加しました:/ Users/me/Desktop/Apps/SDKs/Chartboost
今では問題なくビルドおよび実行され、すべてをブリッジングヘッダーにコピーアンドペーストする必要はありませんでした。必要なのは

#import <Chartboost/Chartboost.h>

誰かが同様の問題を抱えている場合は、質問で私がしたことを読んでから、この回答でフォローアップしてください。

16
Alan Scarpa

私は別の投稿でこれに答えました: Chartboost XCode 6.1との統合の問題

説明:

一部のポッドとライブラリは、コードに既に含まれていると予想されるため、基本的なフレームワークをインポートしません。これは、フレームワークをインポートする方法が変更されたため、Swiftでは機能しません。ブリッジヘッダーファイルに必要なフレームワークを追加するだけです。

回答:

コンパイラがスローするエラーによって異なります。 NSObjectNSStringなどについて文句を言う場合は、ブリッジヘッダーファイルの先頭に#import <Foundation/Foundation.h>を追加する必要があります。

UIViewUIButtonなどについて文句を言う場合は、ブリッジングヘッダーファイルの先頭に#import <UIKit/UIKit.h>を追加する必要があります。

41
xemacobra

あなたのような問題は私を困惑させました。しかし、解決策を見つけました。

#import <Foundation/Foundation.h>

このコード(↑)をコードの前に置く必要があります。これは私の解決策です(↓)。

#import <Foundation/Foundation.h>
#import <Chartboost/Chartboost.h>

がんばろう!

6
Hirokio

これは私がそれを解決した方法です(そして動作します!):

  1. プロジェクトのルートにProjectName-Bridging-Header.hファイルを作成します
  2. そのファイルに、公開するクラスの.hを含めてSwiftプロジェクトに使用します
  3. YourProject-> Build Settings-> Search Pathsに移動し、「Always Search User Paths」キーをYesに設定します。
  4. 「ユーザーヘッダー検索パス」をプロジェクトのルートパスに設定します。

それでおしまい。

どうやら、Xcodeがサードパーティのフォルダーをプロジェクトにコピーするときにそれらを逃す

私はXcode 6.3を使用しています、Swift 1.2。

6
PacoGV

答えは本当に簡単です。

プロジェクトセクションではなく、ターゲットセクションの下のSwift_OBJC_BRIDGING_HEADERにブリッジングヘッダーパスを追加していることを確認してください。

5
Dipesh Patel

CocoaPodsを使用すると、時間を節約できます。 1)最初に行う必要があるのは、Podfileを確認することです。

target 'YourProjTests' do
    inherit! :search_paths
end

target 'YourProjUITests' do
    inherit! :search_paths
end

2)baseproj構成を開き、テストターゲット用に正しいPods-Proj.debugを設定します。添付画像を参照してください: enter image description here

4

ほぼ同一の問題があり、私に合った解決策を見つけました。

私の問題は、ブリッジヘッダーがすべてのターゲットに含まれていなかったことです。

Project Bridging Header


私のプロジェクトにはありましたが、UnitTestターゲットにはありませんでした。だから私はUITestとUnitTestでそれを追加し、問題なく動作し始めました。

Testing Target


ヘッダーをブリッジするこれらの行がある場合:

#ifndef Bridging_Header_h
#define Bridging_Header_h

#endif /* Bridging_Header_h */

それらを削除するだけで、FoundationとUIKitの問題が解決されます。

1つのケースは、import <Chartboost+Extention/Chartboost+Extention.h>の場合、

正しい方法はimport <Chartboost**_**Extention/Chartboost+Extention.h>

PodビルドがChartboost+Extentionのフレームワーク名をChartboost_Extentionに変更するという理由だけで

0
JerryZhou