web-dev-qa-db-ja.com

Objective CフレームワークをSwift iOS 8アプリ(Parseフレームワーク)に接続します

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>を作成しようとしました。この行はエラーをスローしませんが、最終的に違いはないようです。

前もって感謝します。さらに情報が必要な場合はお知らせください。

49
user284244

ブリッジングヘッダーを追加する「フールプルーフ」方法は次のとおりです。

Swiftプロジェクトがある場合、新しいObjective-C Fileをプロジェクトに追加すると、ブリッジヘッダーでプロジェクトを構成する場合にXcodeがプロンプトを表示します。はいを押します。

Objective-Cプロジェクトがある場合、新しいSwift Fileを追加すると、同じプロンプトが表示されます。はいを押します。

ブリッジングヘッダーを取得した後、必要に応じて追加したファイルを削除できます。

48
Jack

さらなる調査の後、私は解決策を見つけ、私がただ混乱していることに気づきました。

正しいアプローチは次のとおりです。

  • 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>

お役に立てれば。

72
user284244

ParseフレームワークをSwiftプロジェクトに追加するには:このライブラリをSwiftプロジェクトに追加します。

enter image description here

このフレームワークをParseSDKからプロジェクトに貼り付けます。

enter image description here

ProjectName-Bridging-Header.hを追加します( https://developer.Apple.com/library/ios/documentation/Swift/conceptual/buildingcocoaapps/MixandMatch.html )( https: //stackoverflow.com/a/24272431/1847511 )そのようなコンテンツのファイル。

enter image description here

タイブリッジングヘッダーにパスを追加します。

enter image description here

TestCodeを追加します。

enter image description here

アプリを実行します。

9
Naloiko Eugene

私の問題に対する答えは異なっていました。 プロジェクトのビルド設定のフレームワーク検索パスrecursiveに設定されていたはずのときに非再帰的

私の場合、ターゲットのフレームワーク検索パスは$(inherited)に設定されています。これは、プロジェクトから設定を継承することを意味します。

私のプロジェクトのフレームワーク検索パスには、1つのパスしかありませんでした$ PROJECT_DIR /../ External/**(2つのアスタリスクは「このフォルダーを再帰的に検索する」という意味です。私のParse.framework =ファイルは外部フォルダーの基本レベルにありました。

パスをrecursiveからnon-recursiveに変更すると、問題が修正されました。非常に奇妙な...

2
aleclarson

新しいParseフレームワークバージョンには、更新が必要です。

たとえば、ライブラリのあるライブラリバイナリにlibsqlite3.0.dylibを挿入し、#importと#importでヘッダーファイルを更新する必要があります。

1
Durul Dalkanat

SwiftでのObjective-Cクラスの使用

App Target内にコードをインポートする場合(1つのプロジェクトでSwiftとObjective-Cを混合)、bridging headerファイルを使用して、Objective-CコードをSwiftに公開する必要があります。 _コード。 [プロジェクトでのSwiftとObjective-Cコードの混合]

この投稿では、Objective-CフレームワークをSwiftコードにインポートする方法を説明します

Swiftコンシューマー-> Objective-C動的フレームワーク

Xcodeバージョン10.2.1

Objective-Cフレームワークを作成する

フレームワークプロジェクトを作成するか、フレームワークターゲットを作成します

File -> New -> Project... -> Cocoa Touch Framework
//or
Project editor -> Add a Target -> Cocoa Touch Framework

2つのファイルが生成されます。

  1. Info.plist-Build Settings -> Info.plist File
  2. <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>.hheader_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フォルダー:
  • Headersフォルダー:
    • Headersセクションのファイル。パブリックインターフェイス/定義があります

Objective-Cフレームワークを使用する

Drag and drop Xcodeプロジェクトへのバイナリ [約]

Embed binaries[ライブラリがロードされていません][リンクと埋め込み]

Project editor -> select a target -> General -> Embedded Binaries -> path to `<product_name>.framework` file

フレームワークを自動的に追加します:

  1. Project editor -> select a target -> General -> Linked Frameworks and Libraries
  2. Project editor -> select a target -> Build Phases -> Embed Frameworks
  3. 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

その他の例はこちら

0
yoAlex5