IOS 8開発用にSwiftプログラミング言語でObjective Cフレームワークを使用しようとしています。これはインポートの特定のケースですが、一般的な問題は次のとおりです。
Objective CフレームワークをSwiftにインポートし、インポートを認識させるにはどうすればよいですか?
ParseフレームワークをiOS 8およびXcode 6ベータ版を使用してSwiftアプリケーションに統合しようとしています。
以下に、Objective CでのParseフレームワーク統合の手法を示します。
https://www.parse.com/apps/quickstart#social/mobile/ios/native/existing
Parseフレームワークを圧縮アーカイブとしてダウンロードし、解凍し、問題なくXcode 6にインポートしました。アプリケーション内では、Parse.frameworkという名前で適切にフォーマットされたフレームワークとして表示されます。
私の現在の思考プロセスは、プロジェクトのルートディレクトリにあるAppDelegate.Swift
ファイルを変更することです。以下は、変更なしの現在のファイルです(Swiftプロジェクトの作成時にXcodeによって自動的に生成されます):
https://Gist.github.com/fconcklin/e8ef7d8b056105a04161
import Parse
行の下にimport UIKit
行を追加して、解析をインポートしようとしました。ただし、Xcodeはそのようなモジュールが見つからず、ビルドが失敗するという警告を発行します。
また、${PROJ_NAME_HERE}-Bridging-Header.h
を使用してParseのObjective Cインポートを含むファイルimport <Parse/Parse.h>
を作成しようとしました。この行はエラーをスローしませんが、最終的に違いはないようです。
前もって感謝します。さらに情報が必要な場合はお知らせください。
ブリッジングヘッダーを追加する「フールプルーフ」方法は次のとおりです。
Swiftプロジェクトがある場合、新しいObjective-C Fileをプロジェクトに追加すると、ブリッジヘッダーでプロジェクトを構成する場合にXcodeがプロンプトを表示します。はいを押します。
Objective-Cプロジェクトがある場合、新しいSwift Fileを追加すると、同じプロンプトが表示されます。はいを押します。
ブリッジングヘッダーを取得した後、必要に応じて追加したファイルを削除できます。
さらなる調査の後、私は解決策を見つけ、私がただ混乱していることに気づきました。
正しいアプローチは次のとおりです。
Xcode 6 Swiftプロジェクトにフレームワークをドラッグアンドドロップして、Objective Cフレームワークをインポートします。
プロジェクトに新しいObjective Cファイルを作成します(ファイル->新規->ファイル[Objective C for iOS])。
プロンプト(同意する)を受け入れて、Objective CとSwiftの間にブリッジングヘッダーファイルを作成します。
新しく作成したObjective Cファイルを削除しますが、ブリッジングヘッダーファイル${YOURPROJ}-Bridging-Header.h
は保持します。
ブリッジングヘッダーファイルで、標準のObjective C import構文(例:#import <Parse/Parse.h>
)を使用してフレームワークをインポートします。
これにより、import Parse
ファイルでAppDelegate.Swift
ステートメントを実行する必要がなくなります。ブリッジングヘッダーを使用してインポートされている限り、どのようなフレームワークも利用するコードを記述できます。プロジェクトのSwiftファイル全体で利用可能です。
プロジェクトでParse統合をテストする場合は、Parse.
と入力し、コード補完を使用してフレームワークを参照し、コード補完がインポートの成功を示していることを確認できます。
ただし、ブリッジングヘッダーファイルを使用する場合に対処する必要がある別の警告があります。フレームワークのすべての依存関係も、ブリッジングヘッダーファイルで指定する必要があります。 ParseフレームワークをSwift=アプリケーションに統合する場合、ブリッジングヘッダーファイルは次のようになります。
#import <Foundation/Foundation.h>
// Parse Dependencies
#import <AudioToolbox/AudioToolbox.h>
#import <CFNetwork/CFNetwork.h>
#import <CoreGraphics/CoreGraphics.h>
#import <CoreLocation/CoreLocation.h>
#import <MobileCoreServices/MobileCoreServices.h>
#import <QuartzCore/QuartzCore.h>
#import <Security/Security.h>
#import <StoreKit/StoreKit.h>
#import <SystemConfiguration/SystemConfiguration.h>
// Import parse framework
#import <Parse/Parse.h>
お役に立てれば。
ParseフレームワークをSwiftプロジェクトに追加するには:このライブラリをSwiftプロジェクトに追加します。
このフレームワークをParseSDKからプロジェクトに貼り付けます。
ProjectName-Bridging-Header.hを追加します( https://developer.Apple.com/library/ios/documentation/Swift/conceptual/buildingcocoaapps/MixandMatch.html )( https: //stackoverflow.com/a/24272431/1847511 )そのようなコンテンツのファイル。
タイブリッジングヘッダーにパスを追加します。
TestCodeを追加します。
アプリを実行します。
私の問題に対する答えは異なっていました。 プロジェクトのビルド設定のフレームワーク検索パスrecursiveに設定されていたはずのときに非再帰的。
私の場合、ターゲットのフレームワーク検索パスは$(inherited)に設定されています。これは、プロジェクトから設定を継承することを意味します。
私のプロジェクトのフレームワーク検索パスには、1つのパスしかありませんでした$ PROJECT_DIR /../ External/**(2つのアスタリスクは「このフォルダーを再帰的に検索する」という意味です。私のParse.framework =ファイルは外部フォルダーの基本レベルにありました。
パスをrecursiveからnon-recursiveに変更すると、問題が修正されました。非常に奇妙な...
新しいParseフレームワークバージョンには、更新が必要です。
たとえば、ライブラリのあるライブラリバイナリにlibsqlite3.0.dylibを挿入し、#importと#importでヘッダーファイルを更新する必要があります。
SwiftでのObjective-Cクラスの使用
App Target内にコードをインポートする場合(1つのプロジェクトでSwiftとObjective-Cを混合)、bridging header
ファイルを使用して、Objective-CコードをSwiftに公開する必要があります。 _コード。 [プロジェクトでのSwiftとObjective-Cコードの混合]
この投稿では、Objective-CフレームワークをSwiftコードにインポートする方法を説明します
Xcodeバージョン10.2.1
フレームワークプロジェクトを作成するか、フレームワークターゲットを作成します
File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework
2つのファイルが生成されます。
Info.plist
-Build Settings -> Info.plist File
<product_name>.h
-Build Phases -> Headers
。アンブレラヘッダーファイルです [約]すべての.h
ファイルを、消費者向けに開くアンブレラファイルに追加します
#import "header_1.h"
#import "header_2.h"
実装ファイルの追加.m
Select `.m` file -> Select File Inspectors Tab -> Target Membership -> Select the target
//or
Project editor -> select a target -> Build Phases -> Compile Sources -> add files
.h
(<product_name>.h
、header_1.h
)にリストされたヘッダーファイルheader_2.h
を追加します [できません][公開ターゲットメンバーシップ]
Select `.h` file -> Select File Inspectors Tab -> Target Membership -> Select the target and make it **public**
//or
Project editor -> select a target -> Build Phases -> Headers -> add files to the **public** zone
フレームワークを構築する- ⌘ Command + B またはProduct -> Build
注:クライアントコードと同じプロセスアーキテクチャ用のフレームワークをビルドしてください。
生成された出力を見つける [ビルド場所]
Products group -> <product_name>.framework -> Show in Finder
フレームワークには
Info.plist
Modules
フォルダー:module.modulemap
[約][カスタムモジュールマップ] このファイルはBuild Settings -> Defines Module -> YES
であるため自動生成されましたHeaders
フォルダー:Headers
セクションのファイル。パブリックインターフェイス/定義がありますDrag and drop
Xcodeプロジェクトへのバイナリ [約]
Embed binaries
[ライブラリがロードされていません][リンクと埋め込み]
Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework` file
フレームワークを自動的に追加します:
Project editor -> select a target -> General -> Linked Frameworks and Libraries
Project editor -> select a target -> Build Phases -> Embed Frameworks
Project editor -> select a target -> Build Phases -> Link Binary With Libraries
Framework Search paths
[モジュールが見つかりません][再帰パス]
Project editor -> select a target -> Build Settings -> Search Paths -> Framework Search paths -> add path to the parent of `<product_name>.framework` file
モジュールをSwiftクライアントコードにインポートします [モジュール名]
import module_name