Swift

Swift:Dropboxとの接続

一瞬悪夢となったXcode 6.1アップデートを無事通過できたので、再びDropbox OSX Swift対応に舞い戻ってきました。➡️Dropboxとの接続までたどり着けました。やれやれ。

なぜOS X Yosemite / Swiftではうまくいかないのか?いろいろ考えてみました。

1. そもそもSwiftでObjective-Cと連携できているのか?
➡️ No. 何と、そうだったのです。

この基本的な疑問は、ある意味、悪い予想通りでした。-Bridging-Headerに定義した#import <DropboxOSX/DropboxOSX.h>との連携ができていませんでした。理由は不明なのですが、別のコピーを作成してSwiftからObjective-Cを呼び出してうまくいっているものと比較・確認していくと、Objective-Cが呼び出せないことが判明しました。

そこで、DropboxOSX.frameworkを組み込む前のMesaClipper v2.0をMesaClipper v2.01とリネームし、プロジェクト名をMesaClipper201としてほかと混乱がないようにしてから、Objective-Cのクラスを組み込み、サンプルプログラムでうまくいくことを確認してから、#import <DropboxOSX/DropboxOSX.h>を-Bridging-Headerに定義しました。当然、まだDropboxOSX.frameworkを組み込む前なのでここでエラーが出ます。

DropboxOSX.frameworkを組み込んだら、そのエラーも消え、次のステップに行けることになりました。

2. DropboxのSwift版サンプルとしてiOSが出ているが、OS Xでもこれでいいのか?
➡️ No. そうなのです。そんなに甘くはありません。

OS XでiOSと同じように対応できていないのなら、いかにもSwift対応済みですとばかりに書かないでほしかった。泣。このために余計に時間を食ってしまいました。今から、Objective-Cのサンプルコードを調べて必要なコードを書くことにします。

iOS: Dropboxの説明
let accountManager = DBAccountManager(appKey: “APP_KEY”, secret: “APP_SECRET”)
DBAccountManager.setSharedManager(accountManager)

OS X: 実際に書いたコード
var wsession:DBSession  = DBSession(appKey:wkey , appSecret:wsecret , root:wrootfolder) as DBSession
DBSession.setSharedSession(wsession)

3. Dropboxと接続できました。
➡️ アプリを認識できないというエラーが出たので、Dropboxアプリの登録を削除してから再登録したら、接続はOKになりました。

ただし、Firefoxで表示アプリがないよというエラーが少なくとも1回起きたので、再発したら調査と対応が必要です。これで、あしたからフォルダ一覧からファイルを読み込む処理を調査・考えることができます。

Dropboxからメールが届くと思いませんでした。おかげで接続を再確認できて良かったです。

if DBSession.sharedSession().isLinked()  { //リンクを張れたら、
println(“awakeFromNib1 \(__LINE__)”) //ここを通過!!!
} else {
DBAuthHelperOSX.sharedHelper().authenticate()
}

スクリーンショット 2014-10-06 02.34.33

Categories: Swift, 技術