Rendowをアップデートしました(ver 1.0.7)

iOSアプリ 「Rendow」をアップデートしました (ver 1.0.6 –> ver 1.0.7)

「Rendow」は、走る速度に連動して再生速度が変化するオーディオプレイヤーです

「速く走ると音楽も速くなる」や「走ると通常再生、歩くとスロー」などなど
ちょっとおもしろいので、使ってみてくださいね


変更点

• アプリの使いかたや機能に関しての変更はないんですけども、プログラムを一部改修してSwift 2.x系で可能になった書き方を取り入れました

Rendowをアップデートしました(ver 1.0.6)

iOSアプリ 「Rendow」をアップデートしました (ver 1.0.3 –> ver 1.0.6)

「Rendow」は、走る速度に連動して再生速度が変化するオーディオプレイヤーです

「速く走ると音楽も速くなる」や「走ると通常再生、歩くとスロー」などなど
ちょっとおもしろいので、使ってみてくださいね


変更点

• iOS 9で「再生速度」ラベルが横書きを90度回転させた表記になっていたものを縦書きに修正しました。
• 最新の開発環境(Swift 2.0 + Xcode 7)に合わせて、ソフトウェア内部を更新しました。

[iOS]3D Touchが使える機種では、押してるだけでTouchesMovedと判断される、とのこと

iPhone 6s, iPhone 6s Plusでは、3D Touchが搭載され、強く押したり軽く押したりできるようになりました。
実機を持っていないので、
iPhone 6sの「深押し」3D Touchの使い方。アプリ設計はどう変わる? (深津貴之 fladdict のUIコラム) – Engadget Japanese
こういった記事を読んで想像するばかりでした。

iPhone 6s, iPhone 6s Plusでしか使えないので、当面は対応しなくても良いだろうとの判断。

ところが、こちらの記事を見て、ぎゃあああ。
iPhone – Force Touch(3D Touch)のZ軸方向への移動は-touchesMoved:withEvent:を呼びだす。 – Qiita
x,y方向に移動していなくても、z軸方向への移動でtouchesMoved:となる、とのこと。
ということは、押してるだけでTouchesMoved:となる、ということですね。

Rendowでは、グラフ編集機能でライン上でタップすると、新たな編集点(⚪︎)が作成されます。
ss 2015-09-29-01
タップと判別するのに
・ラインにtouchして
・動かすことなく
・指が離れたら
タップとしています。この「動かすことなく」部分なのですが、touchesMoved:が呼ばれたら、その中で「動いた」というフラグ判定していました。
x,y方向には動かしていなくても「押し」でtouchesMoved:になるので、これではよくないです。

ということで、上記のQiita記事での対策にあるように、
直前のx,yとtouchesMoved時のx,yが変わっていないならば、touchesMoved時にすぐにreturnするように対応して、Rendowを再提出しました。

アプリをSwift 2.0 + Xcode 7に対応させた

Rendow(走ると再生速度が変わるオーディオプレイヤー)をSwift 2.0 + Xcode 7に対応させました。

もともとSwift 1.2 + Xcode 6で作成したアプリでしたが、Swift 2.0 + Xcode 7に移行しました。
コンバートで、varからletへの書き換えや、errorを使っているところをtry~catchに書き換えられましたが、そのあと、実行してみると大量に警告、注意がでました。

以下、出て来た警告、注意とどのように対応したかを記しました。

Initialization of immutable value ‘h’ was never used; consider replacing with assignment to ‘_’ or removing it

変更前

変更後

使っていない変数があったのでremoveしました

sectionIndexTitlesForTableView’ has different optionality than expected by protocol ‘UITableViewDataSource’

変更前

変更後

型が~!(Implicitly unwrapped optional型)から、~?(Optional型)に変わっていたので変更

そのほか、Swift 1.2では~?(Optional型)になっていた引数が、Swift 2.0ではOptional型でなくなっていたりしたので、そこも修正

Cannot convert value of type ‘[NSObject : AnyObject]’ to expected argument type ‘[String : AnyObject]?’

変更前

変更後

directory not found for option ‘-F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.0.sdk/Developer/Library/Frameworks’

~Testsに対してこの「ディレクトリが見つからない」というメッセージが出ていたので、対処
~Tests > Build Settings > Search Paths > Framework Search Paths
そこに
iphoneos/Developer/Library/Frameworks
があるのを削除しました

All interface orientations must be supported unless the app requires full screen.

「(全画面アプリにするのでなければ、)4つの向きに対応しなさい。」
これは、iOS9から登場したiPad用のSlide Over, Split View対応のためでしょう。
Adopting Multitasking Enhancements on iPad: Slide Over and Split View Quick Start
このAppleのドキュメントを読むと、”Supproted interface orientations (iPad)”キーに4つの向きを加えるとあり、iPhoneのほうは、向きを増やさなくても良い模様。
いったんは、すべての向きに対応して、iPad用をSplit Viewに対応しましたが、
iPad/iPhoneは、シェイクすると、テキスト入力のUndoができる | nackpan Blog
の記事に書いたように、揺れるとテキスト入力キャンセルダイアログが出てしまうので、結局Split View対応はやめることにしました。
・General > Deployment Info > Requires full screenにチェックして、全画面アプリとして対処しました。
これで、注意は消えました。

fatal error: swapping a location with itself is not supported

swift2 – fatal error: swapping a location with itself is not supported with Swift 2.0 – Stack Overflow
How do I shuffle an array in Swift? – Stack Overflow
自身とswapすることは、Swift 2.0では禁止とのことで
変更前

変更後

自身とはswapしないように変更しました


基本的には注意メッセージにしたがって、書き換えていくという形で対処できました。
しかし、大量に警告・注意があったので、修正に相当時間がかかりました。

Rendowをアップデートしました(ver 1.0.3)

iOSアプリ 「Rendow」をアップデートしました (ver 1.0.2 –> ver 1.0.3)

「Rendow」は、走る速度に連動して再生速度が変化するオーディオプレイヤーです

「速く走ると音楽も速くなる」や「走ると通常再生、歩くとスロー」などなど
ちょっとおもしろいので、使ってみてくださいね


変更点

• ⏪⏩ボタンを押したさいに、一部で時刻表示がおかしくなるところがありましたので修正しました

付記

ここからは、アプリのプログラムとは関係ない部分で修正した部分です。
アプリ登録の際に、App Store検索の助けになるようにキーワードを登録するしくみになっているのですが、そこで区切りに必要な「,」を入れるのを忘れているというトンマなことをしてたので修正しております
これで、「ランニング」で検索したら表示されるはず。とはいえ、「ランニング」だと1100件もでるので出会うことはまず不可能なのでした。
あ、でも、「ランニング 音楽」だと、27件だったので、最後の方までスクロールしてくれる方がいらっしゃったら出会うことがあるかもしれません。

なにかの縁があって見つけた方は、試していただけると幸いです。

Rendow製作メモ

Rendow(Rendow サポートページ)に関する製作メモ

「速く走ると、速く再生されるオーディオプレイヤー」というのを考えた。ちょっとおもしろいと思った。
試作を作った。
画面はこんなイメージ。再生/停止ボタン、選曲ボタン、タイトル表示。
ss 2015-08-15 22.09.12

イヤホンつけてエレクトロニカをかけて走った。どんどんせわしなくなっていく。
ちょっと面白かった。
この段階では、あまり画面を詰めていない。

当初の案では、これだけを作ろうと考えていた。
ただ、実際にやってみると、ものたりない。
試作での「速く走ると速く再生される」のほかにも、バリエーションがほしい。
開発を進めていって、最終的に加えることになったのが、「グラフ編集機能」と、「視覚エフェクト機能」
この二つを加えるのと、あと、移動速度の計測部分、さらにグラフィックデザインを詰めるのでかなり時間がかかり、当初の予定より大幅に遅れて、3ヶ月近くかかってしまった。
「グラフ編集機能」で2週間。「視覚エフェクト機能」で2週間。移動速度の計測で1週間。グラフィックデザイン(レイアウト+UI部品作成+ロゴ作成)で4週間。おおよそそれぐらいかかった。

グラフ編集機能

試作での「速く走ると速く再生される」のほかにも、バリエーションを加えるための機能。
歩いてるときは通常速度だけど、止まってしまうとのろくなるとか。
移動速度と再生速度の関係を表したグラフ。それを編集できるようにしたもの。
最終的にはこういったかたちになった。
ss 2015-08-16 0600

視覚エフェクト

プレイヤー画面は、当初、再生ボタンとタイトル表示あたりしかなかった。
やっていくうちに、現在の速さをしめすものをつけようと考えた。

初期案
ss 2015-08-16 0709

最終案
ss 2015-08-16 0701

視覚エフェクトでおおまかに現在の位置をしめすこととした。
CAEmitterLayerというパーティクルに適したクラスがあったので、これを使ってエフェクトを作成。
エフェクト作成は、アプリ作成の流れとは別に独自の面白さがある。

ロゴ

「音符」と「走っている様子」を組み合わせるというのを考えた

初期案
Icon180-01

最終案
ss 2015-09-06 7.22.01

初期案では、うまくまとめられなかったので、最終案では連桁付き8分音符(♫)ではなく8分音符(♪)をベースに「走っている様子」と組み合わせることとした。


こんな感じで、Rendowを作成した。
走ったり歩いたりするのに応じて速度が変わるさま、ちょっとおもしろいので、使ってみてください。

Rendowをリリースしました

iOSアプリ 「Rendow」をリリースしました

「Rendow」は、走る速度に連動して再生速度が変化するオーディオプレイヤーです

「速く走ると音楽も速くなる」や「走ると通常再生、歩くとスロー」などなど
ちょっとおもしろいので、使ってみてくださいね


JP 4.7-1-280Jp 5.5-2-280

よろしくお願いします

2015年8月開発状況

2015年8月開発状況

8月上旬

Rendow(走る速度に連動して再生速度が変化するオーディオプレイヤー)の開発。仕上げ段階。
8月11日にAppleに提出。
その後、2回リジェクトされて9月2日現在、まだリリースできていない。
1回目のリジェクト。アプリが落ちるバグ。ミュージックライブラリにプレイリストが一つもないときに選曲画面を呼び出そうとするとアプリが強制終了するというもの。これはひどい。テストしていればすぐにわかったはず。
適切なテストのやりかた学ぼう。
2回目のリジェクト。バックグラウンド処理はミュージックプレイヤー等限定されたものに限られているが、Rendowはそれに違反しているとのこと。
Rendowがバックグラウンド再生の最中に加速度センサーを動かして歩行速度を計測しているのがよろしくないようなので、バックグラウンド再生機能は取り除いて再提出した。

8月下旬

Repete Plus用のプレイヤー部分の作成。
4,5月から作成していたものを引き継いで、Objective-Cで作っている。
Repete Plus用と書いたが、現在作成中のObjective-Cで書いているものは、Repete用に使う予定。
Repete(語学学習支援プレイヤー)はフォアグラウンド用プレイヤーとバックグラウンド用プレイヤーの二本立てになっている。複雑な構成で手を入れにくい状態になっている。また、(作成当時は必要だと思ったが)いたずらに複雑な処理をしている部分がある。
なので、Repeteのプレイヤーを作り変えて、すっきりしたかたちにする予定。
それが、終了すれば、プレイヤー部分をSwiftに書き換えてRepete Plusに用いる予定。

5月時点では、Repete PlusもObjective-Cで作っていこうかと思っていた。
しかし、そのあとRendowをSwiftで作ってみて、またAppleはSwiftを推進するだろうことから、Repete PlusはSwiftで作成することにした。

しかし、Objective-Cで書いて、またSwiftで書き換えるいう作業は、しんどい。
Repeteに関しては、Objective-CかつiOS7.x系で処理するとして、これから作成するアプリはSwiftで、またできるだけ最新のiOSで作成することにしよう。