Swift環境からObjective-Cで書かれたCocoaPodsのライブラリを利用してみる
ライブラリはFMDBを取り込んで、FMDBを使用した簡単なプログラムをSwiftを用いて作成します。
空プロジェクトの作成
まずは、空プロジェクトを作成し、そしてすぐに閉じます。CocoaPodsでFMDBを取り込むプロジェクトファイルだけを前もって作成します。
※因みに本サンプルはXcode6 beta7にて作成しています。
podfileの作成とインストール
podfileの内容を以下のようにして作成したプロジェクトの直下に作成し、
pod 'FMDB'
以下コマンドを実行してインストールを実行。
% pod install
インストールしたら、作成されたワークスペース(プロジェクトファイルじゃないです)を開きます。
下記の様にコマンドラインから起動しても良いですし、FinderからXXX.xcworkspaceファイルをダブルクリックしても良いです。
% open XXX.xcworkspace
ワークスペースを起動したら、以下のようにPodsプロジェクトが作成されていることを確認して下さい。
※CocoaPodsは既にインストール済みを前提とします。CocoaPodsのインストールやそのた詳細についてはCOCOAPODSを参照。
Bridging Headerの作成
Objective-CをSwift環境から利用するにはBridging Headerを作成する必要があります。このヘッダにSwift環境で使用するObjective-Cのヘッダファイルを記載することになります。
Bridging-Headerは、
1)仮のObjective-Cのファイルを作成することで自動作成、自動設定する方法(自動生成)
2)個別に作成し設定する方法(独自作成)
があります。
2)個別に作成し設定する方法(独自作成)
Bridging Headerを自動生成する場合は
Objective-Cのファイルを生成します。
Xcode menu > File > New > File... を選択しファイル新規作成します。
以下の様に、Objective-C Fileを選択しNextを押下。
ファイル名は後ほど削除するので、何でも良いです。
すると、以下の様に bridging header を作成するか問われるのでYESを押下します。
以下の様に bridging headerが作成されます。
以上で完了です。後はObjective-Cのヘッダファイルをbridging headerに記載するのみです。
FMDBの場合は以下のようにすれば良いでしょう。
// // Use this file to import your target's public headers that you would like to expose to Swift. // #import "FMDatabase.h"作成したdummy.mファイルは削除して構いません。
Bridging Headerを独自に作成、設定する場合は
まずはbridging headerを作成します。
ファイル名はなんでも良いですが、bridging headerと分かるようにしましょう。
作成したら、BuildSettingを変更します。作成したプロジェクトを選択して、Swift Conpiler - Code Generation の設定項目値の Objective-C Bridging Header の項目を編集します。
ヘッダの内容は自動設定の時と同じです。自前でヘッダを作成すると#ifdef/#endifが自動挿入されますが、特に削除して問題無いでしょう。(自動作成時に存在しなかったので)
// Bridging-Header.h // UsingCocoaPodsInSwift // #import "FMDatabase.h"以上で、準備は終わりです。
SwiftからFMDBのメソッド呼び出し
あとはSwiftでコードが書いていくだけです。FMDBが提供しているメソッドの呼び出しはSwift言語仕様に変換されて呼び出すことになりますが、Xcodeのコード補完の機能があるので、メソッド名さえ分かっていればそれほど難しくはないでしょう。
抜粋しますが、FMDBに関するメソッドとして、初期化と更新クエリの呼び出し箇所を載せておきます。詳細は後述するGitHub上のソースコードを参照下さい。
FMDBインスタンス生成
m_db = FMDatabase(path:m_dbPath)トランザクションを開始してインサート処理
func createNewContent(content:String) -> Bool { if m_db.goodConnection() { m_db.beginTransaction() m_db.executeUpdate("insert into memo (contents, 'update') values (?, ?)", withArgumentsInArray: [content, NSDate()]) m_db.commit() //OK return true } //FAIL, database not opend. return false; }詳細はGitHubに上げていますので、適宜参照して下さい。
https://github.com/takuran/UsingCocoaPodsInSwift
以下画面サンプル。
プログラミング初心者のものです。
返信削除このページを見て、問題解決することができました!
Bridging headerも追加したのに、なぜCocoaPodsが使用できないんだろうと悩んでいました。
助かりました。ありがとうございます!
参考になれたようで良かったです。コメント励みになります。
削除