Dropbox API v1からv2への移行

作成したiOSアプリ「Repete」(語学学習支援プレイヤー)には、Dropbox上のオーディオファイルを取り入れる機能があります。
Dropboxへのアクセスには、Dropboxが提供するAPIを使用しています。
API v1 is now deprecated | Dropbox Developer Blog
Dropbox API v1が廃止され、新たなアプリおよび既存のアプリはAPI v2を使ってDropboxと接続する必要があるとのことで、今回、移行処理を行いました。

File Type Permissionが廃止された

API v1には、File type Permissionという分類がありました。特定の種類のファイルのみアクセスできるというものです。
API v1 → API v2 migration guide – Developers – Dropbox
API v2では、File Types Permissionがなくなりました。移行にあたっては新たにアプリを登録して、ユーザーにもう一度認証してもらうことになります。

Tip: When messaging to your users the need to re-link their Dropbox account, we suggest the following language: “The Dropbox integration has changed. Please re-link your account to continue [syncing/backing up data/accessing files/etc].”

再リンクの必要を伝えるメッセージの例。

Fie Types Permissionのように特定の種類のファイルのみを取得するには、ファイル拡張子を用いて判別します。
Developer guide – Dropbox
こちらに、API v1でFile type判別に用いていた拡張子の一覧があります。

インストール

Swift製のライブラリをインストール。
Dropbox for Swift Developers | Install
こちらのページにそって、インストール。
AlamofireとSwiftyDropboxがインストールされます。
今回インストールしたバージョンは、
Alamofire: 3.3.1
SwiftyDropbox: 3.2.0

チュートリアル

Dropbox for Swift Developers | Tutorial
チュートリアルでは、アプリを登録して簡単なプロジェクトを作成しました。
チュートリアルプロジェクトでできること。
* Dropboxとの連携許可
* ユーザーのアカウント名を表示
* 指定したフォルダ直下の内容を表示
* ファイルのアップロード
* ファイルのdiskへのダウンロード
* ファイルのメモリへのダウンロード

おおよそやりたいことはできるのだけれど、そのほかに知りたい点がいくつか。
Tutorialを改造しながら、さぐりさぐりで調べていきました。

そのほか調べた事柄

ファイルの情報を知る

getMetadataを用いる。

フォルダかファイルか?

取得したmetadataがフォルダなのかファイルなのか知りたい。
Files.FolderMetadata、Files.FileMetadataを用いる。

ファイルの種類を限定

Dropbox for Swift Developers | Overview
こちらのページで紹介されているSample Appの”PhotoWatch”では、

という書き方をしています。
拡張子をチェックして判別しています。
参考:Developer guide – Dropbox
Dropbox API v1でFile type判別に用いていた拡張子の一覧あり。

フォルダ下のすべてのフォルダ・ファイルを取得する

listFolderのさいに、recursiveをtrueにすることで再帰的に調べてフォルダ下のすべてのフォルダ・ファイルが取得できます。

進行状況

進行状況を知るには?

参考:swift – SwiftyDropbox download progress – Stack Overflow

リクエストをキャンセルする

ダウンロードのリクエストをキャンセルするには?
swifty dropbox download cancel – Dropbox Community
こちらのページを読むと、初期はダウンロードキャンセル機能はなかったようです。
最新版ではあるとのこと。
SwiftyDropbox 3.2.0ではありました。

こんな感じでしょうか。
Storyboard側にキャンセル用ボタンを配置してViewController.swiftのcancelButtonPressedとactionでつないであるものとします。
Dropboxにリンクしている状態で、viewDidLoadが呼ばれると、ルートフォルダの”audio.mp3″のダウンロードが開始されます。
キャンセルボタンを押すと、ダウンロードがキャンセルされます。


以上、SwiftyDropboxの使い方について、いくつか知った事柄について記しました。

2016年7月開発状況

前月に引き続きRepete Plusの開発中。

Repete PlusはRepeteの機能追加版です。
* 歌詞表示
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* メイン画面の左右下部に設定変更ショートカットボタン
* オーディオファイルの区切り編集機能
が主な追加機能です。

今月は、「区切り点編集機能」の作成を行いました。

7月初頭。UIScrollViewを使用しないで、グラフをスクロールさせる機能を作ったものの、UIScrollViewのスピードに乗ったスクロールやバウンドがない。やはり、UIScrollViewを使用することとした。

UIScrollViewのあつかいかたを学ぶ。重くならないように、必要なぶんだけグラフを描画する。

UIScrollView、スクロールすると、scrollViewのoriginが変化する。
scaleが変化すると、scrollViewが持つviewのframeのsizeも変化する。

スクロール、ズーム機能の実験

tapして点を消したり、加えたりする。Tap Gesture Recognizerを用いた。

スクロールとズームを横方向に限定

区切り点の編集機能を作成中

ここまで作ったところで、やはり指先tapでは位置がおおまかになってしまい、狙った点にいまいちtapできないなと感じました。
tapで点を置いた後、点をドラッグすると移動できることとしました。
その機能を作るのに難航して7月が終了してしまいました。

フッターの幅をコンテンツの幅に揃える

現在、このblogでは、Wordpress提供のテーマ「Twenty Fifteen」を基にした子テーマを使用しています。
もとのTwenty Fifteenよりもサイドバーをややせまくしています。
ブログのデザインを変更した – nackpan Blog

フッターの幅をコンテンツの幅に揃える

コメントにて、フッターの幅をコンテンツの幅と合わせる方法について質問をもらいましたので、これを機にやり方を調べました。

レスポンシブデザイン

Twenty Fifteenでは、メディアクエリを使うことで画面の幅によって、適用するスタイルを変えています。

現在使用している子テーマでは、
* Desktop Small 955px
* Desktop Large 1240px
のときのサイドバーの幅を変更しています。
そのさい、フッターはコンテンツ部分とずれて表示されています。
(元のTwenty Fifteenではフッターとコンテンツ部分は揃っている)
* Desktop Small 955px
* Desktop Large 1240px
でも、フッターとコンテンツが揃うようにCSSを見直しましょう。

関係部分の構造。

20160711css_structure
footerはsite-contentと同じ階層にあります。
site-contentの下に、いくつか階層を挟んで記事、コメント、ナビゲーション部分があります。

marginとwidth

marginとwidthで位置と幅を指定しています。
今回のCSSでは、パーセントで指定しています。
このパーセントは親要素の幅を基準とします。

Desktop Small 955px(幅が955px以下の場合)での
site-contentの位置・幅。
20160712content

ナビゲーション部分の位置・幅。
20160712nav

これを踏まえて、site-footerとコンテンツ部分との位置・幅がそろうようなmarginとwidthを求めます。
margin。
20160711footer_margin

width。
20160711footer_width

計算した結果。
Desktop Small 955pxでは、footerの適切な位置・幅は
margin-left: 26.2939%;
width: 58.824%;
となりました。

おなじように、画面幅Desktop Large 1240pxでもfooterの適切な位置・幅を計算すると
margin-left: 28.8772%;
width: 64.6574%;
となりました。

これらを加味して、CSSは以下のようになりました。


これでブラウザの幅を広げたり縮めたりしても、フッターがコンテンツ幅と同じに保たれます。

2016年6月開発状況

今月からRepete Plusの開発を本格的に再開しました。
(去年、Objective-C版で開発に手をつけたあたりで、RepeteのほうのSwift移行およびプレイヤーの抜本的改修の必要があり、それに半年かかってしまいました)

Repete PlusはRepeteの機能追加版です。
* 歌詞表示
* 曲送り・曲戻し
* 早送り・戻しでの秒数指定
* メイン画面の左右下部に設定変更ショートカットボタン
* オーディオファイルの区切り編集機能
が主な追加機能です。

1日~22日

Repete Plusの開発。
* 画面レイアウト
* Repeteの機能の移植
* 歌詞表示機能
を行いました。
また、この時期には並行して、関数型プログラミングの考え方を理解しようと「すごいHaskellたのしく学ぼう!」を読み進めていました。

23日~28日

RepeteのPicker、Playerの動作確認中にいくつか挙動がおかしい箇所を発見。
選曲画面で一番下のセルが選択できないケースがあったのを修正。
Playerで用いているKVOにおいて、removeObserverが立て続けに呼ばれる可能性がまれにあり、crashを引き起こすので、その部分を修正。

29日、30日

Repete Plusの開発。
* 曲送り・曲戻し機能

開発中の画面

「Repete」(旧「語学学習支援プレイヤー」)をアップデートしました(ver 2.1.2)

iPhone/iPadアプリ「Repete」(レペテ)(旧「語学学習支援プレイヤー」)をアップデートしました。(ver 2.1.1 –> ver 2.1.2)

「Repete」(「語学学習支援プレイヤー」)は、流れる言葉が一区切りしたところで、ユーザーが任意の時間ポーズをいれることができます。
リピーティングに便利なオーディオプレイヤーです。

変更点

• バグの修正を行いました。
選曲画面で、一番下のセルが選択できないケースがあったので修正しました。

• 安定性の向上
プレイヤーの安定性を向上させました。
(技術メモ:KVOでremoveObserverが2回連続して呼ばれてcrashすることがまれに起こりうるので、この問題を修正しました)


よろしくお願いします。

Swiftでオブジェクトのアドレスを表示する

Swiftでオブジェクトのメモリアドレスを表示するには?

Objective-Cでは、

と、%pを使うことで、アドレスを知ることができた。


Swiftでは

と、unsafeAddressOfを用いることで、アドレスを知ることができる。

Autodesk Graphic(旧iDraw)で線のアウトライン化

20160622outline
Autodesk Graphicでパスツールやラインツールで線を引いた後、アウトライン化する方法。

図形を選択して
変更 > 線の外側
ss 2016-06-22 7.40.51

を行う。

また、
ウィンドウ > プロパティ
を表示して、そこで「線の外側」を選択することでも行える。
ss 2016-06-22 7.41.22


当初、メニューに「アウトライン」を含むものを探していましたが見つからず、アウトライン化はできないのかと思ってしまいました。実は「線の外側化」と日本語化されていたのでした。

参考
Create a Set of Flat Weather Icons | Autodesk Graphic Tutorials
ss 2016-06-22 21.51.48
こちらのチュートリアルのStep 8でアウトライン化を使っている。

2016年5月開発状況

5月上旬

Repeteのアップデート(ver 2.0 -> ver 2.1)を行いました。
録音したあとに、それを確認するために再生する操作をスムーズに行えるようにしました。
具体的には、録音ボタンのとなりに直前に録音したものを再生するボタンを加えました。
ss_2016-05-10_21_10_41_2

5月中旬

Rendowをアップデート。
Swiftコードをモダンにしました。
iAdを取り外して、AdMobにしました。

5月下旬

Rendowを紹介する動画を作ろうと試みました。
動作しているところを撮ったものと人物が走っているアニメーションを組み合わせたものを作り始めました。

誰でもわかる!アニメの基本バイブル 人物の動き編を参考に、人物が走っているところを作画。

当初はiPadに指で描いていましたが、途中でペンタブレット(ワコム ペンタブレット Intuos Draw ペン入力専用 お絵描き入門モデル Sサイズ ホワイト CTL-490/W0)を購入。
本を参考に、歩いているところ、走っているところ、ゆっくり走っているところ、を描いたところで、こりゃ大変だ、なかなか終わりそうにないや、と感じて動画作成はいったんとりやめとしました。
また、折を見て作成したいと思います。

図はゆっくり走っているところ。