myFramework
をプロジェクトにインポートしようとしています。 Build Phases-> Link Binary With LibrariesにmyFramework
を追加しました。
Objective-cの動作:
#import <UIKit/UIKit.h>
#import <myFramework/myFramework.h>
しかし、Swiftでは、No such module myFramework
エラーが発生します:
import UIKit
import myFramework
Swift documentation によると:
外部フレームワークのインポート
純粋なObjective-Cコードベース、純粋なSwiftコードベース、または混合言語コードベースを持つ外部フレームワークをインポートできます。外部フレームワークをインポートするプロセスは、フレームワークが単一の言語で書かれているか、両方の言語のファイルが含まれているかにかかわらず同じです。外部フレームワークをインポートするときは、インポートするフレームワークのモジュール定義ビルド設定が「はい」に設定されていることを確認してください。
次の構文を使用して、異なるターゲット内の任意のSwiftファイルにフレームワークをインポートできます。
Swift
import FrameworkName
次の構文を使用して、異なるターゲット内の任意のObjective-C .mファイルにフレームワークをインポートできます。
OBJECTIVE-C
@import FrameworkName;
Xcode 5を使用してmyFramework
を作成しました。Xcode5には「Defines Module」ビルド設定がありません。
問題はどこにありますか?
正しく理解できれば、フレームワーク用の個別のビルドターゲットはなく(XCode 5でビルド済み)、フレームワークをプロジェクトのビルドターゲットに含めています。
参照しているドキュメントの部分は、differentターゲット内のフレームワークについてです。フレームワークはプロジェクトのターゲットにあるため、ドキュメントのこの部分はここでは適用されません。
あなたの場合、Swiftファイルでフレームワークのインポートを行うことはできません。そのため、エラーメッセージ "No such module myFramework"が表示されます。 myFrameworkはモジュールではなく、プロジェクトのモジュールの一部です(デフォルトでは製品名によって決定されます)。そのため、フレームワークのクラスにアクセスできる必要があります。
ただし、フレームワークはObjective-Cで記述されています。したがって、あなたがしなければならないのは、 here で説明されているように、ブリッジングヘッダーにSwift向きのクラスをインポートすることです。
これは、モジュールのSwiftインポートとは関係がないことに注意してください。ブリッジングヘッダーファイルのインポートディレクティブは、Objective-CヘッダーファイルをSwift構文に「変換」し、パブリックヘッダーをSwiftに表示するようにコンパイラーに通知するだけです。
では、今何をすべきですか?
最初に、ブリッジングヘッダーに関心のあるヘッダーファイルをインポートします。 Swiftで対話するヘッダーのみをインポートする必要があります。
この段階でプロジェクトをコンパイルしてみてください。 XCodeがフレームワークのヘッダーファイルを見つけられない場合、問題はおそらくSwiftまたはXCode 6に関連するものではなく、フレームワーク全般を含む問題です。
お役に立てれば。
Swiftの場合:
フレームワークの作成:-
Xcodeを開始->新しいXcodeプロジェクトを作成-> iOS->フレームワークとライブラリ-> Cocoa Touch Framework->フレームワークに名前を付けます(例:sampleCocoaFramework)-> Create。
ターゲットを設定->一般->展開情報->展開ターゲット。
パブリッククラスを追加します。File-> New File-> iOS-> Swift File-> Name(ex。openCocoaClass)-> Create。
次に、openCocoaClass.Swiftにコードを追加します。
import Foundation
public class openCocoaClass {
public init() {
}
public var samplePublicVariable = "samplePublicVariable @ openCocoaClass"
public func samplePublicFunction()
{
print("samplePublicFunction @ openCocoaClass")
}
}
プロジェクトのクリーンアップ:製品->クリーンアップ
スキーム設定を構成します:製品->スキーム->スキームの編集->実行->ビルド構成->リリース。
フレームワークをビルドします:製品->ビルド。
プロジェクトへのフレームワークの追加:-
Xcodeプロジェクトを開始し、名前を付けます(例:CocoaFrameworkTest)。
SampleCocoaFramework.frameworkをCocoaFrameworkTestのプロジェクトフォルダーにドラッグアンドドロップします。
ターゲット->一般->バイナリの埋め込み->その他の追加->フレームワークの選択->必要に応じてアイテムをコピー->完了。
ViewController上のフレームワークへのアクセス:-
import UIKit
import sampleCocoaFramework
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let frameworkObject = openCocoaClass.init()
frameworkObject.samplePublicFunction()
print(frameworkObject.samplePublicVariable)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
Swift documentation によると
Objective-Cコードを同じターゲットからSwiftにインポートするには
Objective-Cブリッジングヘッダーファイルで、Swiftに公開するすべてのObjective-Cヘッダーをインポートします。例えば:
#import "XYZCustomCell.h"
#import "XYZCustomView.h"
#import "XYZCustomViewController.h"
[ビルド設定]で、Swiftコンパイラ-コード生成の下にあるObjective-Cブリッジングヘッダーのビルド設定にヘッダーへのパスがあることを確認します。パスは、ファイルが存在するディレクトリではなく、ファイル自体への直接パスである必要があります。パスは、ビルド設定でInfo.plistパスを指定する方法と同様に、プロジェクトに相対的である必要があります。ほとんどの場合、この設定を変更する必要はありません。
このブリッジングヘッダーファイルにリストされているすべてのパブリックObjective-Cヘッダーは、Swiftに表示されます。 Objective-C機能は、インポートステートメントなしで、そのターゲット内のSwiftファイルで自動的に使用可能になります。システムクラスで使用するのと同じSwift構文でカスタムObjective-Cコードを使用します。
let myCell = XYZCustomCell() myCell.subtitle = "A custom cell"
また、「パッケージ」の下の「モジュールの定義」ビルド設定が「はい」に設定されていることを確認してください。
objective Cプロジェクトには、アプリと同じ名前の公開ヘッダーが必要です。FrameworkName.hの場合は、公開するすべてのクラスを追加します(これらのクラスは、プロジェクトプロパティに公開ヘッダーとして追加する必要があります)それを行うには、フレームワークを追加し、パブリックヘッダーインポートFrameworkNameへの参照を追加します
最新のXCodeは、他のプロジェクトにフレームワークを埋め込むオプションを提供します。このリンク( https://stackoverflow.com/a/37328591/1084174 )はうまく機能しました。
以下の構文を使用して、外部objCフレームワークをSwiftプロジェクトにインポートできます。
#import "objCExternalFramework-name/headerfilename.h"
さて、今はXcode 7.2です。そして、私が観察したのは、Swift importでは大文字と小文字が区別されます。例-import uikit
は機能しません。 import UIKit
として入力する必要があります。
ちょうど2セントです。