NCMBではアプリケーションキーとクライアントキーを使ってバックエンドサービスを利用します。この2つのキーをどこに書いておくかでメンテナンス性やセキュリティ性が担保されるでしょう。
いくつかの方法がありますが、今回はplistを利用した方法でキーの隠蔽化を行います。
参考
API keyを.plistにStringで保存して隠す(例: Google Maps Api) - Qiitaを参考にさせてもらいました。
KeyManagerの追加
適当なファイル(でなくてもOK)を作って、KeyManagerを定義します。
struct KeyManager {
private let keyFilePath = Bundle.main.path(forResource: "APIKey", ofType: "plist")
func getKeys() -> NSDictionary? {
guard let keyFilePath = keyFilePath else {
return nil
}
return NSDictionary(contentsOfFile: keyFilePath)
}
func getValue(key: String) -> AnyObject? {
guard let keys = getKeys() else {
return nil
}
return keys[key]! as AnyObject
}
}
plistファイルの作成
新しいファイル(Property List)を作成し、名前をAPIKeyとします。
その中にapplicationKeyとclientKeyという2つのキーの定義と、NCMBから付与される文字列を記述します。
SDKのインストール
NCMBのSwift SDKをインストールするのはSwift Packagesを使うのが簡単でしょう。FileメニューからSwift Packages > Add Package Dependencyと選択します。
出てきたダイアログでSwift SDKのGitリポジトリURLを入力します。GitHubのリポジトリでHTTPSとして取得できるもの、または下記URLになります。
https://github.com/NIFCLOUD-mbaas/ncmb_swift.git
バージョンは最新のものでかまいません。
後はFinishボタンを押せば完了です。
初期化
今回はSwiftUIを利用しています。ライフサイクルはSwiftUI Appです。
まずSDKをインポートします。
import SwiftUI
import NCMB
次に scenePhase
を追加します。
@main
struct forumApp: App {
// 追加
@Environment(\.scenePhase) private var scenePhase
後は body 内で onChange
を使って初期化します。キーは KeyManager().getValue
で取得できます。
var body: some Scene {
WindowGroup {
ContentView()
}.onChange(of: scenePhase) { scene in
switch scene {
case .active:
// キーの取得
let applicationKey = KeyManager().getValue(key: "applicationKey") as! String
let clientKey = KeyManager().getValue(key: "clientKey") as! String
// 初期化
NCMB.initialize(applicationKey: applicationKey, clientKey: clientKey)
case .background: break
case .inactive: break
default: break
}
}
}
Gitリポジトリに登録しないようにする
後は APIKey.plist を.gitignoreに登録しておけば、バージョン管理対象外になりますので、Gitリポジトリに誤って載せてしまうこともないでしょう。
echo (プロジェクト名)/APIKey.plist >> .gitignore
まとめ
キーをコード中に書くとメンテナンス性が悪くなったり、開発環境と本番環境を分けて管理するのも面倒になります。Property ListであればXcode標準の仕組みになるので、外部ライブラリをインストールすることもなく、手軽に使えるでしょう。