2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Swiftにおけるキーの隠蔽化(plistの利用)

Posted at

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とします。

ScreenShot_ 2021-08-02 9.40.59.png

その中にapplicationKeyとclientKeyという2つのキーの定義と、NCMBから付与される文字列を記述します。

ScreenShot_ 2021-08-02 9.41.39.png

SDKのインストール

NCMBのSwift SDKをインストールするのはSwift Packagesを使うのが簡単でしょう。FileメニューからSwift Packages > Add Package Dependencyと選択します。

ScreenShot_ 2021-08-02 9.35.23.png

出てきたダイアログでSwift SDKのGitリポジトリURLを入力します。GitHubのリポジトリでHTTPSとして取得できるもの、または下記URLになります。

ScreenShot_ 2021-08-02 9.35.56.png

https://github.com/NIFCLOUD-mbaas/ncmb_swift.git

バージョンは最新のものでかまいません。

ScreenShot_ 2021-08-02 9.36.05.png

後はFinishボタンを押せば完了です。

ScreenShot_ 2021-08-02 9.36.40.png

初期化

今回は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標準の仕組みになるので、外部ライブラリをインストールすることもなく、手軽に使えるでしょう。

mBaaSでサーバー開発不要! | ニフクラ mobile backend

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?