和洋風KAI

【Swift】iOSのネイティブアプリのログイン画面を1Password対応する手順とコード。

今や日本で一番使われているアプリであろう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 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が起動しません。↓↓

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

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

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