SwiftからObjective-Cのライブラリを使って、初回起動時にアプリ説明を表示する方法


iPhoneアプリを作るときですが、要件にあえばライブラリを使いたいものです。

しかし、Objective-Cのライブラリ沢山あるのですが、Swiftに対応したライブラリはそこまでありません。

当然ですが、歴史が違いますからね。

 

しかし、Objective-Cのライブラリを指をくわえて見てるのも悔しいのです。

ということで、Objective-CのライブラリをSwiftで使う方法です。


Objective-CのライブラリをSwiftで使う方法

今回は、ウォークスルー(Walk Through)のUIが実装できるライブラリ・EAIntroViewを使ってみます。

ウォークスルーとは、初めてアプリを立ち上げたときに、アプリ説明を表示されるアレです。

EAIntroView – github
ealeksandrov/EAIntroView 

 

まず、EAIntroViewのファイルを手に入れます。先程のGithubのリポジトリからダウンロードします。

ダウンロードしたら、「EAIntroView」ディレクトリの中にある、次の4つのファイルを確認してください。

 

プロジェクトを立ち上げる

Xcodeを立ち上げて、プロジェクトを開きます。今回は練習用にサンプルのプロジェクトを作ります。

 

「File > New > Project」 から「Single View Application」で、適当なプロジェクトを作ります。ここでは、「Sample」という名称にしています。

2015-02-12 17.40.21

 

ライブラリを追加する

次に、このプロジェクトに先程、ダウンロードした「EAIntroView」のファイルを追加します。

プロジェクトフォルダで右クリックで「Add Files to “プロジェクト名”」を選択します。

2015-02-12 17.42.37

 

先程、確認した「EAIntroView」ディレクトリを選択して、「EAIntroPage.h」などの4つのファイルをまとめてプロジェクトに追加します。

2015-02-12 17.46.27

 

xxxx-Bridging-Header.h ファイルを作る

SwiftでObjective-Cのライブラリを読み込むためには、Bridging-Headerを利用します。

プロジェクト内に「${ProductModuleName}-Bridging-Header.h」のファイル名でヘッダーファイルを作成します。

${ProductModuleName}の箇所は、任意の名前でも大丈夫なのですが、プログクト名が良いようです。今は、Sampleプロジェクトなので、

ここでは、「Sample-Bridging-Header.h」にします。

 

プロジェクトの箇所で、右クリックして「New File」を選択します。ここから「Header File」を選びます。

2015-02-12 17.51.44

 

そのまま「Sample-Bridging-Header.h」のファイルを作成します。

2015-02-12 18.03.05

 

作成した「Sample-Bridging-Header.h」の中身は次のようになっています。

 

これを次のようにして、さっき追加したライブラリファイルの中から、ヘッダーファイルを読み込みます。

 

Bridging-Headerを設定する

準備はもう少し続きます。プロジェクトを選択して、「Build Settings」の中の「Swift Compiler」>「Objective-C Bridging Header」の右側でダブルクリックするとポップアップが開きます。

ここに先程作った「Sample-Bridging-Header.h」へのパスを入力します。次のように入力します。

2015-02-12 18.10.05

 

これでライブラリを使う準備ができました。


 SwiftからObjective-Cのライブラリを使う

ここからライブラリを使うためのコードを書きます。

Objective-Cのライブラリなので、当然ながらSwiftのサンプルはありません。

つまり、Objective-CのコードをSwiftに書き直す必要があります…orz

 

ウォークスルーを表示するためのメソッドは、Objective-Cだと次のような感じです。

 

これをSwiftに置き換える必要があります。そりゃそうか…。Objective-Cか…。

ということで、さっきのコード相当をSwiftで記述すると、次のようになります。これを「ViewController.swift」に記述します。

 

とりあえず、アプリを立ち上げた時に、このウォークスルーが表示するようにします。viewDidLoadに「self.showIntroWithCrossDissolve()」を追加します。また、ViewControllerクラスにも「EAIntroDelegate」を追加します。

これで「ViewController.swift」は、次のようになりました。

 

UIImageで画像を指定しているので、プロジェクトに画像を追加しておいてください。プロジェクトツリーに画像をドラッグすると追加できます。

 

そして、これで実行すると次のように、「EAIntroView」を実行することができました!できたー!

2015-02-12 18.36.01


こんな風にObjective-CのライブラリもSwiftで使うことができます。

 

…と書き終えるつもりが、実行したらエラーが表示されました。

以前はこれでOKだったんですが、ここ数日にライブラリに修正があったようです。

エラーを見ると「EAIntroView.h」に、「EARestrictedScrollView/EARestrictedScrollView.h」を読み込もうとする記述が増えたようです。OKあせる時間じゃない。

2015-02-12 18.38.45

 

はじめの方で、Githubリポジトリから手に入れたファイル一式の中に「EARestrictedScrollView.h」がありました。プロジェクトに、次の2つのファイルを追加します。

 

次に「EAIntroView.h」の頭にある次の記述を…

 

「EARestrictedScrollView.h」を読み込むように修正します。

2015-02-12 18.45.05

 

これで実行!エラーでない!できたー!

2015-02-12 18.36.01


という感じで、今度こそ出来ました!

やってて思ったけど、もしかしてライブラリがSwiftに対応するのを待った方が早いかも…

 

参考サイト:

【iOS】BridgingHeaderの使い方と設定方法 | AdMax Tech Blog

[iOS] iPhoneアプリの初回起動時に表示したい「おもてなし」ライブラリ4選 | アドカレ2013 : SP #10 | Developers.IO

この記事を書いた人:

ナカシマ

北区赤羽在住のWEBデザイナー兼エンジニア。インターネット、WordPress、本・漫画、音楽が大好き。妻と猫と暮らすアップル信者。

BLOG: 着ぐるみ追い剥ぎペンギン