28

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

Swift プロジェクトを作成しましたが、それを Objective-C と組み合わせたいと考えています。「ブリッジ ヘッダーのインポートに失敗しました」というエラーは、Chartboost.h ファイルを #import しようとしたときにのみ発生します。したがって、ブリッジング ヘッダー ファイルに何もない限り、Xcode はそれを検出し、問題はありません。しかし、これを追加したら:

#import <Chartboost/Chartboost.h>

「Swift Compiler Error - Function definition not allowed here」という 38 の他のエラーと共にエラーが発生します。

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

問題に至るまでに私が行ったことは次のとおりです....最初に、新しい Obj-C ファイルを作成し、[Xcode がブリッジヘッダーを構成できるかどうかを尋ねるポップアップを表示したときに [はい] をクリックしました。これにより、「FunFacts が作成されました。 -ブリッジング-Header.h"

次に、Swift Compiler - Code Generation で Objective-C Bridging Header パスが正しいことを確認しました。

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

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

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

4

9 に答える 9

41

私は別の投稿でこれに答えました: Chartboost integration issues with XCode 6.1

説明:

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

答え:

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

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

于 2014-12-14T19:53:44.777 に答える
17

私は2つの解決策を考え出しました!

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

2) 正しい解決策は、私が次に行ったことだと思います。プロジェクトの (ターゲットではない) フレームワーク検索パスが空でした。そこで、Chartboost SDK へのパスを次のように追加しました
。ヘッダ。必要だったのは

#import <Chartboost/Chartboost.h>

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

于 2014-09-30T18:54:13.687 に答える
9

ほぼ同じ問題があり、私に役立つ解決策を見つけました。

私の問題は、ブリッジング ヘッダーがすべてのターゲットにないことでした。

プロジェクト ブリッジング ヘッダー


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

テスト対象


于 2015-09-29T16:14:24.660 に答える
6

これは私がそれを解決した方法です(そしてうまくいきます!):

  1. プロジェクトのルートに yourProjectName-Bridging-Header.h ファイルを作成します
  2. そのファイルに、公開して迅速なプロジェクトに使用するクラスの .h を含めます。
  3. yourProject->Build Settings->Search Paths に移動し、「Always Search User Paths」キーをはいに設定します。
  4. "User Header Search Paths" をプロジェクトのルート パスに設定します。

それでおしまい。

どうやら、Xcode はサード パーティのフォルダーをプロジェクトにコピーする際に見逃してしまうようです。

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

于 2015-07-16T10:59:07.110 に答える
6

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

#import <Foundation/Foundation.h>

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

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

幸運を!

于 2014-12-14T03:25:46.127 に答える
4

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

target 'YourProjTests' do
    inherit! :search_paths
end

target 'YourProjUITests' do
    inherit! :search_paths
end

2) baseproj 構成を開き、テスト ターゲットに正しい Pods-Proj.debug を設定します。添付の​​画像を参照してください。ここに画像の説明を入力

于 2016-09-22T19:16:56.113 に答える
4

答えは実にシンプルです。

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

于 2014-11-20T20:44:25.990 に答える
2

ブリッジ ヘッダーに次の行がある場合:

#ifndef Bridging_Header_h
#define Bridging_Header_h

#endif /* Bridging_Header_h */

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

于 2016-04-19T14:22:52.973 に答える
0

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

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

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

于 2016-04-20T07:25:10.207 に答える