CocoapodsをSwiftプロジェクトと統合する方法は?


回答:


78

Cocoapods 0.36以降でuse_frameworks!は、SwiftでObjective-Cポッドをインポートするためにブリッジヘッダーが不要であることを意味する命令が導入されています。

MBProgressHUDAlamofireを使用した完全な例を以下に示します。

1.ポッドファイル

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.3'
use_frameworks!

pod 'Alamofire', '>= 1.2.2' # Swift pod
pod 'MBProgressHUD', '>= 0.9.1' # Objective-C pod

2.削除

ブリッジヘッダーから#importsを削除するか、必要がない場合はブリッジヘッダーファイルを削除します。後者の可能性を選択した場合は、Xcodeプロジェクト構成で(この削除されたブリッジヘッダーファイルへの)パスを削除することを忘れないでください。

3.インポートの追加

これらのクラスを必要とするすべてのSwiftファイルの先頭に追加import MBProgressHUDおよび/または追加しimport Alamofireます。

4.必要に応じて列挙型を修正します

現在、善意のフレームワークを使用しているため、列挙型は飛行中に移動しました。次のようなブリッジヘッダーで問題のないSwiftの行があるかもしれません。

progressHUD.mode = MBProgressHUDModeIndeterminate

それは今これになる必要があります:

progressHUD.mode = MBProgressHUDMode.Indeterminate

大したことではありませんが、エラーの山は、Objective-C列挙型をたくさん使用している場合よりも大きな問題を抱えていることに迷う可能性があります。

この回答の出典

参考までに:use_frameworksは(確認のために自分でテストする必要があります)と思います!Podfileの命令は、iOS> = 8を対象とするXcodeプロジェクトとのみ互換性があります。


73

このプロセスは、「SwiftとCocoaおよびObjective-Cのドキュメントの使用」の「ミックスアンドマッチ」セクションで説明されているプロセスと類似しているようです。

  1. Podfileを作成し、を実行しpod installます。
  2. 新しいObjective-Cヘッダーファイルを作成し、Example-Bridging-Header.hそれをプロジェクトに追加します。
  3. ブリッジヘッダーにインポートステートメントを追加します。
  4. Objective-C Bridging Headerターゲットに設定:

ここに画像の説明を入力してください

これで、Swiftファイルでライブラリ(この場合はMKUnits)を使用できます。

let kilograms = NSNumber.mass_kilogram(2)()
let pounds = NSNumber.mass_pound(10)()
let result = kilograms.add(pounds)
println(result)

詳細はこちら:CocoapodsとSwiftプロジェクトの統合


3
私にとってはimport文は、プロジェクトのディレクトリを含め、別名するために必要な#import <Reachability/Reachability.h>のではなく#import "Reachability.h"
カイルクレッグ2014

ただの更新。Swift POD、つまり:SwiftLibsもまもなくCocoaPodsでサポートされる予定です。次のバージョン0.36では、CocoaPodsでSwiftが完全にサポートされる予定です。機能のほとんどはすでに完了しており、私のブログ投稿
Sachin Palewar 2014年

2
Cocoapods 0.36以降では、use_frameworksが導入されています。SwiftでObjective-Cポッドをインポートするためにブリッジヘッダーが不要になったことを意味する命令(以下の私の回答を参照してください)。
King-Wizard

5
上記に加えて、ビルド設定の「ユーザーヘッダー検索パス」に「ポッド/ **」を追加する必要があることがわかりました。また、ブリッジファイルに「#import <Foundation /Foundation.h>」を追加する必要がありました。
Swifty McSwifterton 2015年

1
Swiftyありがとうございます。use_frameworksを試してみました!しかし、それは私にはうまくいきませんでした。ユーザー検索パスへの「ポッド/ **」の追加は機能しました。
user3246173 2015

16

更新:CocoaPods0.36安定バージョンがリリースされました。Swiftを正式にサポートしています。


CocoaPodsは、最新の0.36リリースでSwiftをサポートするようになりました。まだベータ版ですが、機能します。

まず、ターミナルでこれを実行して、CocoaPodsベータ(現在はベータ2)をインストールする必要があります。

sudo gem install cocoapods --pre

それはほとんどそれです。通常どおりにSwiftライブラリを追加できます。

しかし、Objective-Cで記述されたライブラリをCocoaPodsを介してSwiftプロジェクトに追加したい場合には問題があります。use_frameworks!Podfileに行を追加する必要があります。これが例です。

use_frameworks!
platform :ios, '8.0'

pod 'MagicalRecord'

これについてもブログ記事を書きました。


3
use_frameworks!iOS専用> = 8でしょ?もしそうなら、あなたはあなたの答えにこれを書くべきです。
confile 2015

2

bridging-header.hでファイルが見つからないというエラーが発生した場合は、ポッドライブラリがビルドスキームでリンクされていることを確認することをお勧めします。

CocoaPodsのトラブルシューティングのセクションでは、項目4これを行う方法について説明しています。


1

これで、sudo gem install cocoapods迅速なフレームワークの統合をサポートする実行により、cocoapods0.36.0バージョンを使用できます。swiftによって作成されたフレームワークを使用する場合は、Podfileで明示的に使用する必要があります。

platform :ios, '8.0'
use_frameworks!
pod 'Alamofire'

0

私の場合、ここで説明するように、ポッドをメインターゲットに追加するのではなく、PodfileのTestターゲットとTestUIターゲットにのみ追加することがわかりまし

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.