iTunes Artwork for 1Password - Password Manager and Secure Wallet

今や日本で一番使われているアプリであろうLINEも対応している1Password

いっちょ僕が作っているアプリも1Password対応して見ようと思い今回やってみました。

ただ、僕が作っているアプリはほぼSwiftで書いています。しかしながら、1PasswordのRead meを見るとObjective-Cによるコードしかなく、Swift版のコードがない・・・。

ちょっくらSwift版の対応手順をここにメモしておこうと思います。

① まず、1PasswordのExtension SDKを以下のページからダウンロードします。↓↓

GitHub - agilebits/onepassword-app-extension: 1Password Extension for iOS Apps

② ダウンロードした中身をプロジェクトにドラッグしてコピーします。↓↓

1Password SDK

③ 1Password Extension SDKはObjective-Cで書かれているため、Swiftのコードで使えるようにするためにBridging-Header.hに以下のヘッダーを追記します。↓↓

#import "OnePasswordExtension.h"

④ UIButtonのactionをfindLoginFrom1Passwordに来るように設定します。

onePasswordBtn.addTarget(self, action: #selector(self.findLoginFrom1Password(sender:)), for: .touchUpInside)

次にfindLoginFrom1Passwordメソッドを追記します。

func findLoginFrom1Password(sender:AnyObject) -> Void {
        OnePasswordExtension.shared().findLogin(forURLString: "https://example.com", for: self, sender: sender, completion: { (loginDictionary, error) -> Void in
            if loginDictionary?.count == 0 {
                if error != nil {
                    print(error.debugDescription)
                }
                return
            }
            if let username = loginDictionary?[AppExtensionUsernameKey] as? String {
                self.usernameField!.text = username
            }
            
            if let password = loginDictionary?[AppExtensionPasswordKey] as? String {
                self.passwordField.textField!.text = password
            }
        })
    }

ちなみに、forURLStringで取得したいサービスのURLを指定することでそのパスワードだけを表示することができます。

これで1Password対応は完了です。

⑤ あ、そうそうInfo.plistに「org-appextension-feature-password-management」を追記しておくこともお忘れなく。これがないと1Passwordが起動しません。↓↓

info.plistを設定

⑥ ちなみに1Passwordを持っていないデバイスでは連携ボタンを非表示にしたい場合は、以下のコードをUIButtonなどに設定しておくと良いです。(1Password Extension SDKのコードにも書いてありますが)↓↓

onePasswordBtn.isHidden = (false == OnePasswordExtension.shared().isAppExtensionAvailable())

少しでも1Password対応のアプリが増えて世の中便利になればこれ幸い・・・。