江戸一番のジャスタウェイ職人のブログ

江戸一番のジャスタウェイ職人

Swiftで安心してKeychain使うライブラリKeyClip

前回 Swiftでいい感じにKeychain使う - 江戸一番のジャスタウェイ職人のブログスニペットを紹介しました。

しかし現行のSwift1.1でKeychainを使うには罠があり、Optimization levelがFastestな状態でコンパイルすると値の読み込みが失敗しプロセスが落ちます。

参考: FastestでKeychain読み込み出来ない件

しばし絶望に打ちひしがれました..勢い余ってXcode 6.1.1(GM)でも試しましたがやはりダメ...

「Fastest使いたいしObjective-Cかぁ...ウッ」

Dynamic framework

しかし最近話題のCarthageを使い、Dynamic frameworkとしてOptimization levelがNoneでビルドしたKeychainライブラリとして使ったところ、アプリ本体はFastestでも動作確認できました。

よほど頻繁にKeychainにアクセスしない限りはこれがベストな解決策ではないでしょうか。

できたライブラリはこちら KeyClip

参考: Carthage
Carthage: Swift対応の新しいライブラリ管理

gist版から追加した機能

  • NSDictionaryを突っ込めて捗ります。 ※但しJSONに変換可能な奴に限る
  • Travis CIでテストするようにしました。
  • kSecAttrService 指定するようにしました ※デフォルトは NSBundle.mainBundle().bundleIdentifier

導入方法

Carthage をインストール

echo 'github "s-aska/KeyClip"' >> Cartfile
carthage update

`Carthage.build/iOS/KeyClip.framework` を `Embedded Binaries` に D&D

f:id:s-aska:20141201002157p:plain

Let's Keychain! :)