2020年12月開発状況

2020年12月のアプリ開発状況

9月、10月、11月と取り掛かっているRepete Plusのアップデートをひきつづき進めました。
再生状況(現在時刻、再生回数やリピート回数など)をテキストエリアのサイズ・波形図ありなしに応じて、表示するか非表示にするかを設定できるように変更。その設定画面の作成を行いました。

波形図の変更を行うに当たって、関係する既存のコードを読み直しました。
起動時のレイアウト処理の流れを整理。
グラフィック描画のような重たい処理が不用意に幾度も呼ばれていないかを確認、流れを整理。
初期に書いたコードを丁寧に読み解く必要があり、ここに大変時間がかかりました。

12月末、2020年末には、できあがると踏んでいましたが、いまだに(12/31 23:11)積み残しがあります。できるだけはやくアップデートを届けたいと思います。

2020年10-11月開発状況

2020年10月から11月のアプリ開発状況

Repete Plusの開発を進めました。

9月の開発状況でも書きましたが、波形図の動きに関するアップデートを進めています。思った以上に時間がかかり、いまだ完成していません。
語学学習を再開したので、アプリ開発の時間が減りペースが遅くなったというのはあるのですが、それにしても時間がかかっています。

波形図を指でスクロールできるようにする

9月末段階のスクリーンショットが以下のようになります。

おおよそできたと考えていました。
このときには現在位置を常に真ん中に表示していたため、0:00のさいに波形図の0の位置も真ん中になります。

左端が空いてしまいます。一画面に収まるようなファイルだと、不便さが際立ちます。
やはり端の部分の処理を変更することとしました。
端が空かないように修正しました。

この修正にかなり時間がかかってしまいました。

テキストエリア拡大時に波形図を表示する

従来Repete Plusでは、再生中にあまり画面を注視せずとも使えるようにと作成していました。
今回のアップデートでは、再生中に画面をしっかり見て、細かく再生箇所を動かす使い方に対応しようとしています。
テキストを読みつつ聴く、わからない箇所があればちょっと波形図をスクロールして戻して聞き直す、といったことをやりやすいようにしたいとしています。
そこで、テキストエリアを広く表示した際にも波形図を表示できるようにします。
この工程で、初期のコードの改造が必要になりました。アプリ開発初期の頃のコードを慎重に読み解いての大改造。思った以上に時間がかかってしまいました。
作りながら使い勝手を検討した結果、以下のような配置となりました。

Fat ViewControllerの修正

開発環境Xcodeのバージョンが12になりました。
自分の環境では、バージョン12にして以降、行数が長いファイルで何か書き加える処理が極端に重くなってしまいました。レインボーカーソルが頻繁にまわり数秒かかって一文字が打ち込める状況です。
行数がくそ長いファイルつかってんじゃねえよという、圧を感じます。
iOS開発では、ViewControllerを担うファイルの肥大化がしばしば起こります。
FatViewControllerと言われています。
問題だということで、それを避けるための設計なども考えられています。
Repeteでもアプリ開発学び始めからの継ぎ足し継ぎ足しでViewControllerがものすごく巨大化していました。1000行をはるかに超過していました。しかし、いままでは自分が把握できるのでまあよいかと、そのままにしていました。
今回のXcode檄重状態に直面して、分割作業。
この作業にも時間がかかりました。

長文リスニング用の試作アプリ

語学学習を継続しています。中国語学習。
いままでは、アプリ開発が佳境に入ると中断してそのままなにもしなくなっていたのですが、この数ヶ月は継続しています。
語学検定では、長文(長文といっても2分程度)のリスニング問題があります。
その学習の際に、復習がどうにもぞんざいになってしまっていました。
解答のテキストを見ると理解できる。とくに中国語学習ですと、漢字なのでテキストを見ると相当わかってしまう。聴いてみると、わかっていない。
どこがわかっていないのかを、しっかり把握して復習すべきなのに、おざなりになってしまう。
この状態、以前から気になっていたので、長文リスニング復習用の試作アプリを作りました。
Repete Plusに組み込む予定でしたが、試作アプリを作ってみたところ、組み込みづらくこれ単体でもよいかなという感触。クロスプラットフォーム開発でやってみたい、という思いがあります。


思っていた以上に開発に時間がかかっております。
ようやく完成が見えてきました。
できるだけ早くアップデートを提出したいと思っております。



Repete Plusの再インストールのさいのデータデータ退避について

Repete Plusのデータをいったん端末内の別の箇所に移しておき、再インストール後、もとに戻すことでデータを移行させる方法について記します。

Repete Plusでは、ファイルAppで見ることができるRepete Plusフォルダに、区間情報や再生回数などの情報ファイル(データベース)、フォルダタブ・録音タブのオーディオファイルなど、アプリで使用する情報と音源が納められています。
Repete Plusフォルダにあるファイルをいったん退避。アプリの削除と再インストール。退避したファイルをRepete Plusフォルダに戻す。この行程で、データ移行ができます。
この方法を取る場合は、フォルダタブ・録音タブのオーディオファイルの量が多い場合は、退避にもそれだけの容量が必要となります。十分なストレージの空きを確保してから行なってください。

ファイルのバックアップ

(iPhone , iOS 14での例となります)
ファイルAppを用います。

ファイルApp を起動

ブラウズ > 「このiPhone内」を開きます


まず、ファイル退避用のフォルダを作成します。
右上の(more) > 新規フォルダ から、フォルダを作成します。


名前は自由に設定してください。今回の例では、Taihiと名付けました。

次に、ファイルをコピーします。

Repete Plusフォルダを開きます

右上のマーク > 選択 > すべて選択

下部の(share)をタップします

現れたメニューからコピーを選択

コピーが完了しました。退避用のフォルダを開きます。
今回の例では、Taihiフォルダとなります。

Taihiフォルダ内の何もない箇所で長押しすると、メニューが現れるので、「ペースト」を選択します

これで、Repete Plusのデータのコピー&ペーストが完了しました。

アプリの削除と再インストール

Repete Plusのアイコンを長押しすると、メニューが現れるので、「Appを削除」を選択してください。
App StoreからRepete Plusをダウンロードしてください

退避していたファイルを元に戻す

退避用フォルダへ移動します。今回の例では、Taihiフォルダとなります。

右上のマーク > 選択 > すべて選択

現れたメニューからコピーを選択

Repete Plusフォルダを開きます。

何もない箇所で長押しすると、メニューが現れるので、「ペースト」を選択します。
置き換えますかと尋ねられた場合は、「置き換える」を選びます。

これで、Repete Plusにデータが移行されました。
Repete Plusを以前の状態から、再開することができます。

退避用フォルダは、不要となります。削除、あるいは、この時点のバックアップとして残す、などの処理をしてください。

2020年9月開発状況

2020年9月

Repete Plusの開発を進めました。

はなさんのコメントをきっかけに、波形図の動きに関するアップデートを進めました。再生進行にあわせて波形図を描画する機能です。

プログレスバー(再生進行状況を示すバー)と波形図の連動機能の作成

バージョン1.0リリース前にプログレスバーが進むと波形図も動く機能を実装していました。しかしながら、波形図がガクガクと動くのを注視していると気持ち悪くなってしまったので、採用を見送っていました。当時は、1/10秒ごとに描画。今回、1/30秒の間にもろもろの処理が十分できることを確認して、1/30秒ごとに描画に変更。これなら動くのを見ていても大丈夫。

波形図をユーザーが指で動かした時に現在位置(再生位置)も動くよう変更。
こちらが、今回実装を進めた機能。
実装にあたって、波形図の様相をあらためて検証。
元々波形図は、区切り点編集のさいにガイドとして必要と考えて追加しました。現在(バージョン 8.7.1)、ファイル全体分の波形図が一画面に表示されています。そのため、区切り点編集や、再生/非再生切り替えには、ピンチ操作で拡大しなければなりません。不便。
今回の実装にあたって、デフォルトで拡大表示するように変更。
そして、指でスクロールするのに合わせて、波形図ならびに、再生箇所を変更するように変更。かなりの大改造になりました。


9月後半は、iOS 14とXcode 12の登場。
ライブラリを更新して、Xcode 12に対応しました。
また、iOSの対象バージョンを13.6以上に変更。
iOS 13からSwiftUIなど新機能が数多く追加されていますが、フォローできていないので学習を始めなければなりません。


9月15日に、中国語検定の申込案内メールが到着。
コロナの影響で春の検定が中止になった後、学習しなくなってしまい、すっかり意欲が立ち消えていましたが、勉強を再開。空き時間では、まず中国語の学習時間をとるようにして、そのあとアプリ開発を行うと定めました。
そのため、アプリ開発の進みが遅れ気味です。

「Repete Plus」をアップデートしました。(version 8.7.1)

「Repete Plus」をアップデートしました。(version 8.7 -> version 8.7.1)

Repete Plusは、語学学習を支援するオーディオプレイヤーです。
無音部分を自動認識し、語学教材をフレーズごとに間隔をあけて再生できます。

App Storeはこちら

使い方を紹介しているサポートサイトはこちら
Repete Plus – nackpan Blog

変更点

  • 全体リピートがうまく働かないことがある不具合を修正しました
    (バージョン8.7で、original再生に切り替えるときにファイルの最初から始まってしまうケースを修正しましたが、そのさいに副作用を生じさせていました)
  • 曲の再生回数(原曲再生での再生回数)のカウントがおかしい問題を修正しました

violaさんのコメント、App Storeのなべさまさんのコメントでお伝えいただいた不具合を修正しました。

2020年8月開発状況

2020年8月

Repete Plus、Repeteのアップデートの頻度を高めようと試みました。

Repete Plus

8.5

  • 再生不要区間が末尾にある時に、曲再生回数に2回以上指定していても、次の曲を再生してしまう問題を修正しました。
  • 「区間データ・テキストの共有と削除」の?マークを押したさいに表示される説明が、ダークモードで見えなくなっている問題を修正。
  • バージョン7.6以前で使用しておりバージョン7.7からはデフォルトで非表示となっている「クラウドストレージから読み込み」機能で用いていたOneDrive用SDKが古くなったのを機に、旧方式の読み込みメニューから、OneDriveを取り除きました。

8.6

  • タップジェスチャーに「再生速度を +0.1する」「再生速度を -0.1する」を加えました。
    すばやく再生速度を変更できます。

この機能、スムーズに実装できました。再生速度を +0.1する処理、再生速度を -0.1する処理、ジェスチャーの選択肢に項目を追加、ジェスチャーの画像を追加。
必要な箇所に最小限、追加するだけでするっと実装できました。
(このあとの8.7で今までのコードの修正やオブジェクトの削除・統合がおおいに発生したので、8.6のスムーズさが際立ちました)

8.7

  • リピート回数(区間:再生回数)によって、再生速度を変更できる機能を追加しました。区間を再生する際に、1回目はゆっくり、2回目は速く再生する、といったことができます。(ペアになっている場合は、A区間・B区間の再生回数によって再生速度が変わります)
    ※ 「リピート回数によって再生速度を変更する」機能は、「バックグラウンド再生」かつ「待ち時間を秒数指定」にしている場合は、待ち時間が指定秒数と合わなくなります。

この機能、まっ黄な太陽さんから、以前App Storeのレビューでリクエストをいただいた。そのときは、アプリのつくりから「バックグラウンド再生」かつ「待ち時間を秒数指定」のさいに待ち時間を合わせるのが難しいことと、設定操作が煩雑になりそうなことから、「現在のところは実装はみあわせてください」と返答しました。
そのあと、Repete Plusのデフォルトで待ち時間は「比率指定」であることでもあるし、
「バックグラウンド再生」かつ「待ち時間を秒数指定」で待ち時間は合わないのは、これは仕様として通すということでどうだろう、と考え直しました。
また、設定操作に関しても、下図のようなテーブル表示にしてそれぞれの回について再生速度を入力するかたちなら、いままでの再生速度変更画面となじみつつ追加できると考えました。


今回、実装を開始してまいったのが、設定項目を追加しようとすると、「よく使う設定」と「全体書き出し・読み込み」にも、同じようなコードを何度も書かなければならいつくりになっていたこと。これはよくない、ということで、オブジェクトの削除・統合を進めました。今後、設定項目の追加があっても、必要最小限のコード追加ですむようにと改修しました。
それを終えて、「リピート回数によって再生速度を変更する」実装。再生速度入力画面を作成するのに大半の時間を費やしました。「リピート回数によって再生速度を変更する」機能自体はスムーズに組み込めました。(というか、「バックグラウンド再生・待ち時間秒数指定で待ち時間合わない」や「ペアではA・B区間の再生回数に連動」というかたちで通したので、プレイヤー部分の大改造はおこなわずに、組み込めました)

  • ファイルの途中で原曲再生ボタンを押した時に、ファイルの最初から再生されてしまうケースがあり、その問題を修正しました。
    こちらは、れなぴょんさんのコメントで指摘をもらっていた問題。
1) [原曲再生ボタン]を押して原曲再生を開始
2) 原曲再生ボタン]を押して一時停止
3) [再生ボタン]を押して再生を開始
4) [原曲再生ボタン]を押して原曲再生を開始

4)で再生位置が曲の先頭に戻ってしまいます

version 5.3での「まれに再生が意図せず止まってしまう」問題の修正用コードがこのケースではよくない働きをしていました。よく流れを見直して、どちらの問題も解消できるコードに変更しました。

Repete

6.5.1

「よく使う設定を登録する」で「全体リピート」 を登録した後、「設定変更」ボタンから選択してもON,OFFが反映されない不具合を修正しました

6.6

設定画面のダークモードでの色合い変更しました。

6.7

初期状態では、「バックグラウンド再生」機能をOFFとしていたのを、ONに変更しました。

6.7.1

バージョン6.7で、設定 > 再生速度 を開こうとするとアプリが強制終了する不具合を混入してしまったのを修正。
たいへん申し訳ありません。不注意で、再生速度変更画面を消去していまい、気づかずに提出していました。


今回、Repete Plusのほうはがっつり機能追加、Repeteのほうは細かな修正というかたちでアップデートを行いました。Repeteで、ささやかな修正だと考えしっかりと動作確認をしていなかったために大バグをだしてしまい、申し訳ないです。

2020年7月開発状況

2020年7月

前半

イラストを描いていました。アプリ開発は進展せず

後半

Repete Plus 8.4.1のアップデートの作成を行いました。
区間データ・テキストを別のiPhone/iPadにAirDropで送信できるようになりました。
以前からテキストの書き出し機能を検討していたところ、
曲と区切位置のデータを1曲単位でAirDropできたらというぐぬんさんのコメントをきっかけに実装しました。
グループで学習している場合や、複数のiPhone/iPadを利用している場合に役に立ちます。

2020年6月開発状況

2020年6月

Flutter学習

iPhoneとAndroidをいちどきに開発できるクロスプラットフォーム開発を学ぼうと考えました。
今回は、Flutterの学習開始。
Udemyの講座「The Complete 2020 Flutter Development Bootcamp with Dart」を始めました。
Udemyの講座は初めて。動画講座で学ぶのも初めて。懇切丁寧に進行して、続けやすい。
一回10数分の動画。
始まりは前回のまとめ、最後に今回のまとめ。
進めやすい。感動。コースの1/3ほど進みました。
途中、Dartを学ぶために、Dart | Exercismに案内され、そこの課題を解いている途中。
ここでいったんとめて、Repete Plusのアップデートに移りました。

Repete Plusのアップデート

Repete Plus 8.3のアップデートの作成。

  • 再生対象を区間時間で絞り込む機能を追加しました。
    初級を超えるための中国語単語BOOKを使って学習をしています。
    単語と例文が入り混じっている教材なので、単語のみあるいは例文のみを絞り込んで再生することができるように、この機能を作成しました。
  • 「よく使う設定」を並べ替える機能を追加しました。
  • 設定画面のダークモードでの色合い変更しました。
    iPhone設定画面での色合いに準拠しました。
    背景を項目部分より暗くしました。