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

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

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

App Storeはこちら

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

変更点

バージョン7.0でいままでのデータが引き継がれていないという重大な不具合がありました。これは、データベースの保存箇所の変更を行ったものの、既存のデータの移動が適切に行われていなかったためです。
バージョン7.1で修正し、データ引き継ぎが行われます。7.0にした方は、すぐに7.1にアップデートしてください。
このたびは申し訳ありませんでした。

新機能

Repete Plus バージョン7.0で加わった機能を紹介します。

学習記録

プレイヤー画面の上部に、学習記録を表示する「記録」 ボタンがつきました。
「記録」 ボタンを押すと、学習記録を見ることができます。

学習時間
日々のおおよその学習時間(プレイヤーの再生期間)が表示されます。

学習進展度
習得済みの区間を再生不要にしているケースで活用できるタブです。
アルバム・フォルダの再生不要区間数/区間数が表示されます。

iOS 13対応

モーダルビュー
選曲画面は、モーダルビューと呼ばれる形式になっています。iOS 13で変更されたモーダルビューの挙動に対応しました。

ダークモード
ダークモードに対応しました。

画面描画

選曲画面を表示する際に、画面レイアウトのタイミングを調整し、安定化を図りました。

その他

Google Driveからエクスポートしたm4aファイルが、オーディオトラックが取得できないとして、再生できない問題を修正。


後記

バージョン7.0で重大な不具合を出し、修正してバージョン7.1を急いで提出しました。
7.0から7.1までは審査もすぐに終了して1日で新バージョンがApp storeに並びました。

その前、6.1から7.0へと進めたアップデートで大変時間がかかりました。
8月末から10月22日までかかっています。

まずは学習記録部分に取り掛かりました。
学習時間および、進展度(再生不要区間数/全区間数)を表示するものです。
そのビューを表示するためのボタンとして上部に「記録」ボタンを設置しました。
「記録」という表記は、そのボタンを押すことで何かを記録するという操作であろうと思わせるので、できれば「学習記録」などにしたかったのですが、4文字は長すぎておさまらない。2文字でぴったりした表記はないかと考えましたが、良いものが思い当たりませんでした。
2文字ということで、実績(Achievement)や成績、統計などを考えましたが、いまいちピンとこなかったので、「記録」に落ち着きました。
6.1から7.0への工程としては、学習記録部分を作成し、それをひとまとまりとしてアップデートする予定でした。
しかし、作業が遅れiOS 13のリリースまでに完成しませんでした。

iOS 13に対応する必要が生じました。

iOS 13に対応すべくXcode 11 + Swift 5.1に開発環境を更新。新たな開発環境に合わせて、データベースライブラリのRealmも3.18.0に更新。ここで、問題が発生しました。
新規オブジェクトを登録しようとすると強制終了するというRealmライブラリの不具合です。
[realm-core-5.23.4] Assertion failed: info.object_id_index == 0 [3, 0] 
昔から継続して使用している場合、発生することがあると報告がありました。
手元の環境で、この問題が発生しました。2017年のリリースから継続して使用しているRepete Plusにて発生。
別のiPhoneで新規インストールしたり、最近インストールしたケースでは発生しませんでした。
Realmはオープンソースプロジェクトであり、修正する能力があれば修正すれば良いのですが、データベース・アプリケーションの実装については、まったくわからないので、修正版が出るまでしばらく様子を見ることにしました。
その間に、ダークモード対応、モーダルビュー対応を行いました。
Realmの次のバージョンの3.19.0が出ても、問題は解消していませんでした。修正はこなさそうということで、対応策を考えました。
従来のデータベースからいったんデータを退避させて、新規にデータベースを作成。そこに退避させたデータを与える。というかたちで対処することにしました。小規模な実験でうまくいったので、Repete Plusにて実装していきます。
データをインポートしたりエクスポートしたり、アプリを消去して再インストールしたり頻繁に実験を繰り返します。
この最中に、データベースおよび録音ファイルを従来ユーザーから見えない場所に保存していたのをユーザーから操作できる場所に変更。
ファイルAppから見ることができ、コピーして別の箇所に保存することが可能になりました。
しかし、この頻繁なデータのインポートやエクスポート作業の過程で、元々端末にあったデータベースは外部にエクスポートして端末からはなくなっており、外部から取り込んでデバッグする形になりました。
このことが一因となり、元々端末にあったデータベースを移動させる処理を忘れているのに気付かず、7.0でいままでのデータがなくなって(みえて)いるという不具合を出してしまいました。

いったんデータ退避してRealm再作成する工程にかなり時間を費やしてしまいました。
おおよそ終わったところで、Realm 3.19.1が登場。不具合は修正されました。
Realm 3.19.1を使用。データ退避とRealm再作成部分は不採用としました。
データベースアプリケーションの実装について学習して、自ら修正しようとすべきではなかったかと反省しました。
データベースの本『リレーショナルデータベース入門―データモデル・SQL・管理システム・NoSQL (Information & Computing)』を読んで、勉強します。

また、この工程の半ばで、選曲画面がフリーズするという不具合報告がありました。手元では再現しなかったので、ここが悪いという原因を確実に定めることはできなかったものの、レイアウト関連の描画タイミングの警告がいままでも出ていたこれが原因ではないかと推定して、修正を行いました。
(追記。その後、選曲画面でのアートワークのサムネイルのとりあつかいがよくなかったことがわかりました。不要なサムネイルをため込んでいてアルバムが増加するとフリーズするというものでした。バージョン7.2(https://nackpan.net/blog/2019/10/27/repete-plus-version-7-2/)で修正しました。よろしくおねがいします)

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください