SwiftはObjective-Cに比べると融通が利かないというか、頑固というか、ちょっとしたことでエラーが出て困りますね。思うように進まなくて非常にもどかしい
例えば変数の型。型が違うもの同士を計算するだけでエラーです。字はあってるけど書き順が違うからバツ、この漢字はちゃんとはねてないからとバツみたいな恐ろしく厳しい先生みたいです。たぶんその厳しさを乗り越えたら、バグの少ないプログラムが書けるようになるんだと自分に言い聞かせ、Swift先生の愛のムチに耐えながらプログラムを書いています。
そういや、新人の頃に始めて作ったプログラムで安易にキャスト(型変換)を使ってこっぴどく怒られた覚えがあります。型はとても大事。
それはさておき。
アプリのレビューへ誘導するダイアログ表示を簡単に実装できるAppiraterをSwiftのプロジェクトに組み込んでみました。
レビュー誘導のダイアログはユーザーにとっては迷惑なものですが、アプリ制作者としてはちょっとでも反応が欲しかったりするので、組み込むべきかどうか悩ましいところです。その点Appiraterは、アプリをある程度使い込んでからダイアログを出すなど、細かくカスタマイズできて便利です。
このAppiraterですがObjective-Cで書かれているので、Swiftのプロジェクトに組み込むには一手間必要になります。以下その手順です。
Appiraterを入手する
まずはともあれAppiraterをダウンロードします
Appiraterダウンロード
ダウンロードできたら「appirater-master.zip」を解凍してプロジェクトに追加します。「appirater-master」フォルダをぐわっと組み込みたいプロジェクトにドラッグすれば追加できます。CocoaPodsとか使うと簡単なのかな?とりあえず今回は自力で追加です。
必要なフレームワークを追加する
ここまではObjective-Cの時と変わりません。
ターゲットを選んで、「General」の「Linked Frameworks and Libraries」でフレームワークを追加します。追加するのは「CFNetwork.framework」「SystemConfiguration.framework」「StoreKit.framework」の3つです。 「StoreKit」だけはOptionalで。
特別なヘッダファイルを作る
swiftからObjective-Cのソースを参照できるように、特別なヘッダを作成します。作成するファイル名は
(ターゲット名)-Bridging-Header.h
です。今回は「AppiraterDemo」ってターゲット名なので「AppiraterDemo-Bridging-Header.h」を作成します。
この作成したヘッダファイルに
#import "Appirater.h"
と記述します。Objective-Cのソースを参照したい場合、そのヘッダファイルをここにどんどん追加していくわけですね。今回は「Appirater.h」だけ追加。
で、プロジェクトのビルド設定の「Swift Compiler – Code Generation」の「Objective-C Bridging Header」に作成したヘッダファイルのパスを記述します
今回は
AppiraterDemo/AppiraterDemo-Bridging-Header.h
を設定
プログラムに組み込みます
AppDelegate.swiftにイニシャライザを追加(自動で作られるソースにはないはず)して、Appiraterの初期化処理を書きます。普通にSwiftのコードでかけるのがすごいですね。
override class func initialize() { Appirater.setDebug(true) // デバッグ(必ずダイアログを表示) Appirater.setAppId("123456") // アプリのAppId(自分のアプリIDに変更) Appirater.appLaunched(true) }
これで実行すれば、ダイアログが表示します。簡単簡単。
・・・と思ったらアプリ名の部分が(null)になってますね。(null)なんてアプリ名にした記憶は全くないのに!
これは「CFBundleDisplayName」を設定していないからです。CFBundleDisplayNameはinfo.plistで設定できますが、ここに追加してもダメなので、新規に「InfoPlist.strings」というファイルを作る必要があります。新規ファイルの作成して、ResourceからString.fileを選んで作成します。
ダメな例。ちゃんと追加しているのにアプリ名が(null)になります
アプリ名を国ごとに変えたい場合にも必要になるので、ここは素直にInfoPlist.stringsを作ります
そのInfoPlist.stringに
CFBundleDisplayName = "Appiraterデモ";
と記述して実行してみると・・・
無事アプリ名が表示されました。
Appirater自体の設定は、丁寧に説明してくれているサイトがすでにたくさんあるので、ここでは割愛します。