お願い: βテストを行った後、問題が発見されなかった時でも「報告を入れてください」そうしないとまだテスト中なのか、問題がなかったのかを判断できず、延々と不都合の有無の報告を待ち続ける事になってしまいます。 また、βテストの報告はサポートサイト下部にありますβテスト募集要項のさらに下部にありますβテスト 不都合の有無報告フォーム ( https://docs.google.com/forms/d/e/1FAIpQLSddajjOlyWNbuyERluOxmhq_QSMWiKBQaXjd3nXWzMQMGecLw/viewform ) から報告頂くか、TestFlightアプリで ことせかい を開いた時に出てくる「ベータフィードバックを送信」から送信して頂けますと幸いです。通常のサポートサイト下部にありますご意見ご要望フォームやアプリ内の開発者に問い合わせるからのお問い合わせの形式は、(メールのタイトルからは不都合報告にしか見えないなどの原因から)「すわ!不都合か?!」という精神的ダメージを開発者に感じさせてしまいますのでご遠慮下さい(不都合報告が山程来た後から「不都合報告」というタイトルのメールは少しトラウマ気味なのです)。(´・ω・`) 補足: βテストが終了した後(AppStore側に同じバージョンのものがリリースされた後)は、AppStore アプリ から ことせかい をダウンロードし直しておくことをおすすめしておきます。 過去の更新履歴は https://raw.githubusercontent.com/limura/NovelSpeaker/master/NovelSpeaker/UpdateMemo.txt から読めます。 ことせかい 更新履歴 Version 2.* では Version 1.* から多数の変更点がありますので、初めて Version 2.* を導入する場合は事前に以下のURLの内容を深く読み込んだ上でご参加いただけますようお願いいたします。 https://raw.githubusercontent.com/limura/NovelSpeaker/gh-pages/Version2.0TestIntroduction.txt TODO: - 本文画面で範囲選択した後に「読み替え登録」を選んで戻ってを繰り返したりすると、変な位置にスクロールしてわけわからんくなる。 選択範囲も表示されないしいままでどこを読んでたのかよくわからなくなる。 場合によってはかなり前の位置に戻されてそこから読み上げが再開されたりと本当によくわからん。 - キーボードショートカット欲しい。とりあえず「発話開始」と「発話停止」みたいなのがあるだけでも嬉しい。 - 読み上げ中の画面スクロール?で使っている表示範囲をもうちょっと賢くしたい。カーソル位置から下に画面の3分の1の範囲を表示、みたいな感じでできない? - 読み上げ中にメニューがちらちら表示されるのが気になる。特殊な場所でしか出ないやつがあるのかもしれない? - 長押しして範囲選択しても反映されない奴 ← 「問題発生日時: 2021年2月3日 水曜日 8時03分12秒 日本標準時」でmailを検索したら出てくる奴に詳しい情報あり ← 再現しない? iCloud同期がOFFでも発生しているという事は、iCloud同期側での更新確認中の話ではない - タイミング問題?で2回読み上げる事がある https://github.com/limura/NovelSpeaker/issues/124 - アイコンを変える事ができるようにする(例: https://moneyforward.com/engineers_blog/2017/03/29/ios10-3-alternateiconname/ setAlternateIconName 当たりで検索すれば出てくる) - 本棚画面を SwiftUI で作り直す メモ: SwiftUI でフォルダぽいリストを作る動画 https://www.youtube.com/watch?v=G0qor4QumfA - raw.githubusercontent.com は中国のGFWからアクセスできないぽい 参考: https://blog.kengo-toda.jp/entry/2021/05/25/111457 利用規約とかがそこに載ってるよなぁ。 - 小説中の文字列検索結果で章を選ぶ所にドラムの奴が使われているのでmacで動かないかも ドラムの奴動くやん。Eurekaで作り直さないでよかったんかーい。(´・ω・`) - macで「開発者に問い合わせる」等からメールを送れないかも 送れるぽい。ただし「メール.app」が設定されていないと駄目かもわからん。 - フォントの選択画面を UIFontPickerViewController を使うようにする? 日本語のフォント確認には使えなさそうな感じなので別にいいかな感はある。(´・ω・`) - 小説の総文字数を使った「順番」 - 本棚辺りで総文字数(読了までの時間)を確認できるようにすると良いかもしれん - 読み替え辞書を共有しやすくしてみたい - 単に読み替え辞書のみのデータをexportする - 読み替え辞書を二次元バーコードにする(URLスキームにして開かせるみたいな奴) - mac版の問題 - 本文部分で範囲選択してもメニューが出ない AppDelegate で buildMenu(with builder: UIMenuBuilder) を override して云々? https://techblog.timers-inc.com/entry/menu_for_macos_catalyst - WebView版の小説本文画面 - 上下の出っ張ってる奴が消えない ← これなに……?(´・ω・`)カイタホンニンガワカラン - 前の章、後ろの章に移動するボタンがいつでも enable になってる disable にはなっているんだけれど表示に反映されていないぽい。 画像にしたら反映するようになったけれど、iOS13未満やSF Symbolsの入ってない端末で誤動作?し続けている - self.lastChapterNumber やめない?(´・ω・`) - 画面の端をタップしたりすると1ページ分スクロールして欲しいとかない? - カラム分割表示は画面の縦方向に2分割だけでなく、縦方向の文字数でも分割できたほうがいいかもしれん。ただ、その場合画面の端をタップして動くのは何ページ分なんだ?カラム分? - 文字の大きさが一定しないのを確認した。 iPad で縦書き表示にした時、「はじめに(ことせかい の使い方)」の6ページ目と7ページ目で文字の大きさが変わっている。 どうやらこれ、一画面に収まり切る位の文字数だと1画面に収めるために文字を小さくしてしまう、みたいな効果ぽい?気がする。 - mac版でJavaScript周りでエラーが起きまくっていて色々駄目ぽい - 現在位置が取得できない - selection が更新できない - canvas が表示されていないように見える - mac版でメニュー(画面の左上に出てくるアレ)を書き換えてるけどボタンが押せないしショートカットキーも効いてない - mac版でマウスを使った動作が効かない - 縦書きの時にホイールでスクロールしない(横書きならする) - 範囲選択後に右クリックして出てくるメニューに ことせかい由来 の物が無い(ことせかい 由来のもののみにするみたいなのも効いてないけどこっちはまぁそのままでも良いかも) done - 起動時に「設定タブ」→「開発者からのお知らせ」に「!」がつかない(スクロールアウトしてスクロールインするとついてた。謎だ) Version 2.9.1 (2.9.2) - 発話時に途中で次のページへと移行してしまう問題について、こちらで再現できた問題への地味な回避策を導入します こちらで観測できている症状としては、一度に発話させる文字列の長さが長いと、発話の途中でエラーか何かをして発話が停止してしまうため、発話が終了したと見なして次のページへと移行していました。 そこで、「。」や「、」や「全角スペース」や「改行」といった文字の部分で発話をし直す形でこの問題を回避します。 ただ、何度もSpeak()を呼び出すのはそれはそれで重そうなので、ある程度の長さ(今は200文字)以上のブロックになるまでは我慢します。 といっても、200文字以上で次の「。」などが出てくるまでの間ということになるので、句読点も改行もないような場合には一度に読み上げられる文字数は300文字だったり500文字だったりする事になります。そのため、場合によっては一度に発話させる文字列の長さが長すぎてだめという事が発生しかねません。 また、区切り文字として指定しているのは日本語関係の文字と改行だけなので、英文などの日本語関係の文字が無い文書の場合は改行のみで区切られることになり、さらに一度に読み上げられる文字数が多くなる可能性があります。 なお、発話の途中でエラーした場合にそれを検知して発話をしなおすような仕組みも実装はしてみたのですが、発話が停止した位置を正しく取得できないため、以前読み上げていた最後の位置からの読み直しとなり、『発話が停止する→ちょっと間があく→少し前から発話し直す』という動作になるのでかなりの違和感がある動作にしかならないので一旦封印しておきます。 Version 2.9.1 (2.9.1) - よくよく考えると 2.8.2 は内部DBの更新があったのでバージョン番号のつけかた的には 2.9.0 になるのが正しいため、このバージョンはその次のバージョンの 2.9.1 とします。 - バックアップファイルの適用時にSiteInfoの取得先周りの設定が入った場合、保持しているSiteInfoのキャッシュファイルを削除するように しました。放っておいても24時間後には解消するはずですが、最長24時間の間は保持しているSiteInfoのキャッシュを参照してしまうので。 - バックアップファイルの生成形式を少し変更 具体的には、小説の本文部分の保存について、個々のページ毎にファイルを作っていたものを、100個のページ毎のバイナリファイルとして出力するようにします。 これは、バックアップ時にファイルの数が多くなりすぎるのを抑制することを意図しています。 これで、本棚に小説が7千以上保存されている方の完全バックアップが失敗する問題が解消できるといいなぁという感じです。(以前と比べて全てのデータを列挙したJSON内の小説のページ情報が100分の1に削減されるので、そこの生成時に強制終了していたのだとしたら効果はあるかもなぁという感じです。まぁ、それが原因であったとすると、この小細工は同じ問題が発生するまでの時間を引き伸ばしただけという感じになるので、将来的には小説毎にJSONファイルを分けるようなことが必要になりそうです。ただ、それをすると個々の小説毎にJSONファイルができるようになるため、生成時や取り込み時に時間がかかるようになるはずです) また、この形式はアプリ内データベースに保存されている形式と同一となるため、保存時に個別のファイルに展開していた処理や、取り込み時に個別のファイルから100個づつのバイナリに変換していた処理などがなくなり、それぞれの処理が高速になります。 これにより、.novelspeaker-backup-json 形式の出力はされなくなり、全てが .novelspeaker-backup+zip に統一されます。 - 「Web取込」機能で小説を取り込もうとした時に同じ小説が本棚に登録されていて失敗した場合、「本棚側の小説を開く」というその既に登録されていた小説を開けるボタンを追加 しました。一応失敗した時のダイアログメッセージに小説名は入っているのですが、その小説名で検索しないと発見できないし、その登録されている小説名をコピーできないので入力が面倒くさそうな問題を少しだけ解消できるはず…… - 読み上げ中に、ページの途中にも関わらず次のページへと移行してしまうというお問い合わせへの暫定的対応を導入します。 この修正により発話時の挙動が一部変更されたため、場合によっては不思議な読み上げ?になる可能性があります。 この修正で誤動作が起きる可能性がある箇所はおそらく『発話中に話者が変わった時』や『「設定タブ」->「読み上げ時の間の設定」で「読み上げ時の間の仕組み」が「標準型」になっていて、「読み上げ時の間の設定」で句読点などの指定で0.0よりも大きい値になっている文字を読み上げようとした時』あたりです。 具体的にはAVSpeechSynthesizerでのSpeak()が終わったタイミングで発生するのですが、このイベントが発生するのは上記のタイミングのはずだから、です。 ただ、ページの途中で次のページに移行してしまうという場合は想定外のイベント発生になりますので、上記の想定時以外にも同様のイベントが発生しているということなんですよね。どこで発生しているんだろう…… - iCloud同期をOFFにしている状態にも関わらず、「他端末で更新された XX章 へ移動」というメッセージが表示される可能性を減らします 内部DB上の値が書き換わった時にこのメッセージが表示されるのですが、この症状(iCloud同期していて他端末で書き換えたのが届く以外の状況)は自分で書き換えた場合でも発生してしまっているという事なので、自分が書き換える場合はそのイベントを発生させないような方法を取ったので多分発生しなくなるとは思うんですが、DBを書き換えたタイミングでって話なので全てを潰せたかがよくわからない感じなので、「可能性を減らします」という表記にしています。 Version 2.8.2 (2.8.4) - 「設定タブ」->「内部データ参照用URLの設定」で「優先SiteInfo」を変更しなかった場合に設定の更新は行わないように 変更してもしなくても更新をかけていたのを是正します - 「設定タブ」->「内部データ参照用URLの設定」で「優先SiteInfo」を変更した時に、うまく反映されない、キャッシュファイルが削除されない、といった問題を解消 したはず…… 多分…… 以前のゴミは残り続けちゃうかも……(´・ω・`) - 「設定タブ」->「開発者に問い合わせる」からの問い合わせや「Web取込」時に取り込み失敗した時の報告メールなどの雛形に、取り込み用のSiteInfo周りの設定値を含めるように しました。標準の設定以外で使う人が現れる可能性があるので、お問い合わせでこちらを確認できるようにしておきます。 Version 2.8.2 (2.8.3) - 「設定タブ」->「開発者に問い合わせる」画面に「問題が発生する小説の本文も添付する」のON/OFF設定を追加 これは「問題が発生する小説」が一つ以上選ばれていて、かつ、「軽量バックアップファイルを添付する」がONの時にのみ効果があります(それ以外の時は表示もされません)。 発話周りの問題を報告される時、読み替え設定と小説の本文部分(と、できれば該当箇所)があると、問題を再現しやすいので本文も送れるようにします。 完全バックアップでも本文は入るのですが、この場合は大量の小説が含まれているとバックアップファイルの生成に時間がかかったり、ファイルサイズが大きすぎてメールでは送れなくなったりするのでとりあえず必要と思われる本文だけを添付できるようにしたというものです。 - SiteInfo に scrollTo というものを追加 scrollTo には Xpathを書きます。で、その Xpath で示される Element があった場合、その Elementの位置まで Scroll された上で、PageElement等が評価されるというものです。 なお、isNeedHeadless が true でないと動作しません(つまりヘッドレスブラウザを使っていないと動作しません)。 これで、no+eのマガジンの前後の記事のような画面内に表示されていないとURL等を表示してくれないものに対しても動作しやすくなる…… はず…… - UserDefaultsが読み込めなくなって誤動作するパターンに対して起動時に判定するようにします 1. iOS(またはiPad OS)を再起動した後、パスコードによるロック解除をしていない 2. ことせかい の「設定タブ」→「iCloud 同期を使用する」がONになっている 3. Bluetoothオーディオなどで ことせかい が起動する という条件が満たされると、内部データベースファイルが削除される、という問題に対処するためのものです。 起動時に上記の条件が満たされる場合、内部データベースファイルを削除しなかったとしてもその後正しく動作しない(ストレージへのアクセスがうまくいかない)ので何もしない事にします。 ということで、旧バージョンで再現実験をすると内部データベースファイルが削除され、色々大変なことになるのでやらないほうが良いです。 なお、上記以外の条件でもデータベースファイルが削除される可能性がある形のプログラムになっていたのでそちらも潰しておきました。が、こちらは再現手順が思いつけないので恐らく発生自体していないと思います。 - 「設定タブ」->「内部データ参照用URLの設定」に「優先SiteInfo」を追加しました こちらに適切なURLを指定することで、今まで利用していたSiteInfoよりも優先的に適用されるSiteInfoを利用できるようになります。 例えば 小説家になろう様 や Pixiv小説様 は前書きや後書き、キャプションなどが取り込まれるようになっていますが、そちらを排除したSiteInfoを作成してURLとして参照できる所に置いた後、「優先SiteInfo」で指定することでそちらのSiteInfoが優先的に適用され、前書きや後書きやキャプションを取り込まないように変更することができるようになる、ということができる事を目的としています。 上記の2つのWebサイト様向けの設定を https://raw.githubusercontent.com/limura/NovelSpeaker/gh-pages/data/Provisional-SimpleSiteInfo.json に置きましたのでそちらを「優先SiteInfo」に指定したり外したりして(毎回「設定タブ」->「SiteInfoを取得し直す」が必要です)、それぞれの小説を取り込もうとしてみると結果が変わるのを確認できると思います。 なお、上記のURLを設定するのが面倒な場合、 https://raw.githubusercontent.com/limura/NovelSpeaker/gh-pages/data/Provisional-SimpleSiteInfo.novelspeaker-backup-json にある(優先SiteInfoだけが書かれた)軽量バックアップファイルを適用するのでも良いです。 ただ、これらの設定値も更新を続けないと駄目だというのを私が思い出さないと駄目というか、wedata側の設定値を私以外の誰かが書き換えた場合、それに上記のURLのものを追従させることができるのは私だけなので運用上問題があるよということで "Provisional(仮の)" という名前にしています。 といっても、私の観測範囲内では私以外はほとんど誰も wedata側 の ことせかい 用 SiteInfo を編集していませんので実質的には問題は発生しにくそうな気はします。 で、コレを必要としている人で上記の動作を理解できる人ってのは殆どおられないと思われるので、これを公開情報にすると実質的には厄介なメンテナンス対象が増えるという話なんですよね。 どうしようかなぁ公開したほうが嬉しくなる人が多いのは理解するのですが、正直これ以上負荷を上げたくないんですよね…… まぁこのくらい誤差なのかもですが…… 新要素なのでしばらく触らないでいると忘れそうなのが怖い……(´・ω・`) Version 2.8.1 (2.8.2) - 「本棚画面」の「順番」の「自作フォルダ順」での処理が遅かった問題を修正 10秒くらいかかっていた処理が0.2秒くらいになりました。ループ中にDBを叩いちゃ駄目ですよ過去の私……(´・ω・`) Version 2.8.1 (2.8.1) - バックアップファイルを適用している時のダイアログメッセージがおかしかった部分を修正 バックアップファイルからデータを取り出している時の小説の本文を抽出中時に、バックアップファイルを生成している時のメッセージが表示されていたのを、正しい物に替えた形になります。 - 起動時に時間がかかってシステム側から強制終了される場合があった問題に対応 問題の原因としては、本棚の並べ替え処理に時間がかかっているのを、起動時に本棚を表示する時に行っていたためでした。 そこで、本棚の並べ替え処理は起動時は後回しににする形で回避しています。そのため、そのような並べ替え処理に時間のかかるような場合、起動時に本棚に本が表示されない時間がしばらくある、という動作になります。(一応「読み込み中です」というようなセルは用意したのでわかってもらえるといいなぁという感じです) Version 2.8.0 (2.8.0) - 「本棚画面」の「順番」に「本棚登録順」を追加 - 「設定タブ」->「本棚でお気に入りボタンを押した時の動作」を追加 本棚でスクロールしている時にお気に入りボタンを押してしまって誤動作するというお問い合わせがあったので追加しました。 標準は今まで通りの「確認しない」です。 このオプションが入ったことによりデータベーススキーマのバージョンが上がるため、iCloud同期はこのバージョン以降のもの同士でしか同期できなくなります(つまり、iCloud同期している端末はすべて 2.8.0 に上げないと同期できなくなります)。 - 強制終了させられる場合(applicationWillTerminateが呼ばれた時)に、データベース側に保存を促すようにします。 Realm的にはそもそも呼び出す必要が無いもののようなので、一応のおまじない的な形になります。というか、手動で強制終了させられる場合、Signal 9 で落ちたという感じのログが出るということは、applicationWillTerminate が呼び出される事もなく終了させられているようなので、実質的には無意味な事かもしれません……(´・ω・`) - 「設定タブ」の「ルビはルビだけ読む」のON/OFFを繰り返すと出てくるDEBUG欄に、「内部データベース(Realm)のファイルを取り出す〜」を追加 - アプリが短時間に何度も再起動しているのを確認した時に出てくるメニューに(上と同様な)「内部データベース(Realm)のファイルを取り出す〜」を追加 Realmを初期化する時(データベースファイルを読む時)にエラーするとそのまま強制終了するという作りになっているため、Realmのデータベースファイルが壊れていると何もできなくなります。 ということで、セーフモード(確か30秒以内に3回か5回再起動していると出てくる画面)に、Realmのファイルを取り出すボタンをつけました。 Realmのファイル自体は内部に保存されているデータがそのままの状態で(圧縮されずに入っているようなので文字列で保存しているものはその文字列が見えないこともない状態で)入っているようなので、頑張るとなんとかデータを取り出せる範囲もあるかもしれないなぁ…… という気分のものです。 で、これを試すのにセーフモードを起動するのが面倒くさい場合があるので、デバッグモード側にも同じボタンを用意しています。 なのですが、このファイルの読み込み方がよくわからんのですよね。単純にデータベースファイルとして指定してもうまく読み込めていないので。うーん。全く意味がないかもしれない……(´・ω・`) - 小説本文の保存時にNUL文字(0x00の文字)を排除するように 小説本文中にNUL文字(0x00の文字)があると誤動作するようなので保存する時に排除するような仕組みを入れました。 誤動作としては、「NUL文字の前後が表示されなくなる」「NUL文字の前後が発話されなくなる」といった問題が発生しているように見受けられます。 - 小説本文画面にキーボードショートカットを追加 今のところ、Ctrl-s で発話の開始と停止のトグル、Ctrl-c で選択範囲について読み替え後を確認画面を表示、というものを定義しています。読み替えの標準辞書のチェック中にこれらの操作を沢山使ったのでいっそのことということで追加してしまいました。iPad と mac をユニバーサルコントロールで繋いでキーボードで操作するのが楽になるんですが、このショートカットの文字は何にすると良いんですかねぇ。 なお、(今のところ?)本文部分にフォーカスがあっていないと起動しませんし、mac のユニバーサルコントロール経由で使っている場合以外に対応しているかを確認していませんのでアプリリリース時に告知はしない項目になります。 - 「設定タブ」のDEBUG欄に「小説本文画面で、読み替えが行われる文字の色を変える」のON/OFF設定を追加 読み替え辞書のメンテ時に実際の小説を読み上げて確認していたんですが、「この変な読み上げは読み替え辞書により読み替えられた後の誤動作なのか、元々おかしいのか」を判別するのに いちいち 発話を止めて、範囲選択して、読み替え後を確認を押して、文字列が変わっていないのを目視で確認、という作業をしていたのでそこを省力化しました。 で、テスト用には便利なのですけれど、通常時はいらないというのと、仕組み上「読み替えが行われなかった場合には色は変わらない」ので、「全く同じ文字に読み替えている部分は発見できない」ため、その辺りを説明するのが面倒(修正するのも面倒)なのでDEBUG欄側に実装しています。 で、DEBUG欄に実装したのでON/OFFが切り替わった時や読み替え辞書が更新された時に表示を更新して追従する〜というような事はして「いない」ので、その手の操作をした後は「小説本文画面」から一旦「本棚」に戻ってからもう一度「小説本文画面」を表示させるなどで再評価させる必要があります。 - 「設定タブ」のDEBUG欄に「ダウンロード終了後に about:blank に移動させない」のON/OFF設定を追加 これはこれでデバッグ時に利用するものです。ことせかい はダウンロード時に非表示状態でブラウザを起動しているのですが、このブラウザが不使用になった時には about:blank を表示させて一旦リセットしたような状態にしたりメモリ消費を抑えるような事をしています(書いてて思ったんですが単にブラウザのインスタンスを解放してないのはなんでなんですかね。何か原因がありそうなのですが全く思い出せない)。で、これをしてしまうとダウンロード中のブラウザの状態を外部から観測するのが大変になるので、about:blank を表示させないためのオプションです。 - SiteInfo に forceErrorMessageAndElement というパラメータを追加 しました。ダウンロード時に動作します。取得したHTML内でこのパラメータに引っかかるElementが存在した場合、指定されているメッセージを「設定タブ」->「アプリ内エラーのお知らせ」に表示されるログを出力しつつ、ダウンロードを失敗させます。 例えば、ログインが必要なWebサイト様で、「ログインしてください」といったダイアログが出てにっちもさっちもいかなくなっている場合にエラーさせるための設定です。具体的にはノベルピアさんでこの問題が発生するのでその対応になります。ということで、「設定タブ」->「SiteInfo を取得し直す」をして、「Web取込タブ」でノベルピアさんからログアウトした状態で、ノベルピアさんから複数ページのある小説をダウンロードしようとするとそのエラーが確認できるはず……です。 ****注意: この新しいパラメータに対応するため、ダウンロード時の挙動が少し変わりました。概ね動きに変更はないと思うのですが、場合によってはダウンロードに失敗するパターンが増えるかもしれません。**** - 標準の辞書を更新 具体的にはアプリ内に内包している物を更新した形です。ネットワーク上のものは先日先行してアップデートしている状態です。 - 「設定タブ」->「標準の読みの修正を上書き追加」の実行時、「設定タブ」->「内部データ参照用URLの設定」内の「標準の読み替え設定」が無効なURLであった時は、標準の読み替え設定のURLを参照するように 今までは標準の読み替え設定のURLを確認せずに、アプリ内に保存されているデータを参照していたため、標準の読み替え設定URL側のデータが更新されても読み込めなかったので、それを解消します。 ネットワーク上の標準の読み替え設定がうまく機能しない場合(ネットワークに接続されていないなどの場合)は、今まで通りアプリ内に保存されたデータを用いる事になります。 - 「設定タブ」->「内部データ参照用URLの設定」内の「標準の読み替え設定」で一旦何か文字を入れてしまうと空文字列を設定できない問題を修正 なんでこの欄だけこんな事になっていたのかよくわからないのですが、実際空文字列が入ってくるとエラーして保存しない、というような記述がされていました。なんでなんだろう(´・ω・`) - 「設定タブ」->「iCloud同期を使用する」をONにしようとしてiCloud側のデータを確認中の時のダイアログに「データ確認を止める」ボタンを追加して、データ確認の待ち時間を5分から7日に変更 どうも iCloud同期 で登録されているデータが多すぎて初期の同期(というかダウンロード)時に5分では基本データが落ちてこなくて同期に失敗してしまう場合があるようなので待ち時間を5分から7日に変更して実質的には永遠?に待つような形にします。 それだけだと全く操作できなくなってしまうので、「データ確認を止める」ボタンを追加して、ユーザ側で強制的にデータ確認プロセスを止められるようにしました。 「データ確認を止める」ボタンを押した後は「iCloud側のデータだけを使う」か「現在のデータをiCloudに上書きする」か、「iCloud同期をやめる」の3つを選ぶ事ができるので、実質的には同期時の確認待ちをせずに初期状態をどうするかをユーザに選択させられるようになったはずです。 Version 2.7.4 (2.7.8) - 発話中に「本棚タブ」以外のタブへ移動したり、アプリをバックグラウンドに回した後、再度「本棚タブ」を表示すると読み上げ位置表示が読み上げている場所よりも進んだ場所に移動してしまう問題を修正 - iOS 16.4 から、アプリ内部のWkWebViewをmacOS上のSafariから調査(Inspect)する場合には WkWebView.isInspectable を True にしておかないと許されないようになったので、「設定タブ」の「DEBUG」欄にTrueにできるようにするON/OFFスイッチを追加 しました。これが無いと自分が色々面倒なのですけれど、ユーザさん達には必要ないのでDEBUG欄に入っています。 - 周りでマッチしにくいものがあるようなので対応しました。 具体的には の中に が二回出てくるものがあったのでそれは無視するように対応したのですが…… これ、HTML5の仕様によるとこれは無視しちゃ駄目というか、が複数あった場合はは同数出現して良いのですね。 今の仕組みだと は1個または0個にしか対応できていないのでが複数ある場合は2つ目以降を無視しても一応それらしく動くわけですが、仕様を正しく解釈できるようにするとなると結構面倒くさいことをしないと駄目ですねこれは。正規表現で逃げるのは諦めるのが多分正しいんですがどうしたもんかなこれ。(´・ω・`) で、この変更は具体的にはノベルピアさんのルビ表記が正しく?取り込めるようになるというものです。 例えば、ノベルピアさんの ユグドラシル・オンライン の一話目( https://novelpia.jp/viewer/24964 )には1行目に「|雄樹(ゆうき)」となるべきルビ表記があるのですが、Version 2.7.3 の頃は、「雄樹」の直後と「ゆうき」の直後に改行が入ってしまうような形での取り込みになっています。 これは、ゆうき というような形で表記されているのですが、以前はが一つしか無いという仮定で書かれた正規表現であったため、動作していなかったというものになります。 Version 2.7.3 (2.7.7) - メモリリーク問題に対して、一旦 AVSpeechSynthesizer を開放する事で確保されたメモリを開放できそうだったので、メモリを確保しすぎているようであればそのような小細工をした上で、メモリが開放されているようであれば発話を続けるような事をします。 どうやら AVSpeechSynthesizer を開放すると AVSpeechSynthesizer が確保したメモリは開放できそうだったので、それを使ってメモリ開放をして発話を続けるようにします。 ただ、別の原因でメモリリークしてしまっている場合に備えて、AVSpeechSynthesizer を開放してもメモリが開放されていないようであれば以前と同じようにアナウンスしつつ、発話を止めるようになっています。 で、メモリを開放するタイミングでは、一旦発話を止めた後に0.4秒程待ってから利用可能メモリの量が増えている事を確認する、という事をして、メモリ解放ができているかどうかを判定している関係上、そのタイミングでちょっと発話が止まります。 という事でちょっとテンポが悪くなりますが、別の作業をしていて聞き流しているとわからない、位の症状にまで抑えられているのでまぁ…… 良くなったと言って良いのではないかと思います。 この動作(メモリ解放を行ってから発話を再開した)事を後から確認するには、「設定タブ」->「ルビはルビだけ読む」を10回くらいON/OFFを繰り返すと下の方に出てくる「DEBUG」欄の中にある「デバッグログの表示」をした時に出てくるデバッグログの中に、『"呼び出し元" : "メモリリーク問題に対応するため、AVSpeechSynthesizerを一旦開放して再度確保した後に再開した。』というような部分があれば、それがその時間に発動している、という形で確認できます。 また、このテストは iOS 16.3.1 で行っており、iOS 16.3 では行っていないので、もしかすると iOS 16.3 ではこの対応では駄目な可能性があります。といいますか、iOS 16.3 でメモリリークしていると確認した時に、今回と同様の方法で回避できないかなと試した時は駄目だった記憶があるので、iOS 16.3 では駄目なんじゃないかという気がしています。それで、その推測が正しかった場合は「iOS 16.3.1 にアップグレードしてください」とお願いする感じで回避すれば良いかなぁと思ってこのまま行く事にします。もし、お手元に iOS 16.3 のデバイスがある場合はそちらで実験してみて、この対策が効果があるかどうかを報告していただけると嬉しいです(iOS 16.3 の人が問い合わせをしてきた場合に iOS 16.3.1 にアップグレードしてくださいと自信を持って案内できるようになるので)。 なお、開発者側の手元にある iOS 16 が動くデバイスは全部 iOS 16.3.1 以上にしてしまったのと、デバッグ用に使えるシミュレータも iOS 16.2 までしか提供されていないっぽい?のでテストできていないのです。ただ、前述の通り「iOS 16.3.1 にアップグレードしてみてね」と伝えれば良い、という方針であるので iOS 16.3 でテストしないと「いけない」とは思っていない感じです。 - 「設定タブ」->「読み上げ中の位置表示更新をサボるようにする」や「設定タブ」->「一息で読み上げる範囲が長くなる場合にテキトーな範囲で区切るようにするが、その時に区切られなくなる最小の文字数〜」は削除しました これらの機能は必要なくなりましたので機能自体を使わないようにしました。 一応いつでも復活できるように #if false ... #endif で囲って残しはしましたが、問題なさそうであれば後でそれらの部分は消します。 今回の物はそこそこ早めにリリースできたら良いなぁとは思うのと、動作的には Version 2.7.2 (2.7.4) と比べてほとんど変わっていない(メモリ解放をしているだけ)なので、そこそこ早めにリリースしてしまおうかと思っています。なので、できれば早めにテストして報告していただけると嬉しいです。よろしくお願いいたします。 Version 2.7.3 (2.7.6) - 「設定タブ」->「読み上げ中の位置表示更新をサボるようにする」や「設定タブ」->「一息で読み上げる範囲が長くなる場合にテキトーな範囲で区切るようにするが、その時に区切られなくなる最小の文字数〜」の値を変えた時にそれが即時には反映されない問題を修正 これらの設定、一旦再起動しないと適用されないようになっていました。(´・ω・`) Version 2.7.3 (2.7.5) - 「設定タブ」->「読み上げ中の位置表示更新をサボるようにする」を追加 iOS 16.3 からの AVSpeechSynthesizer を使うとメモリリークする問題に対する物です。このオプションをONにするとメモリリーク問題については回避できます。 しかしながら、ONにすると読み上げ中の位置表示の更新を一部動作しないようにする事になります。このオプションがONの時、動作としては一回の発話中では読み上げ位置表示が更新されないようになります。言い換えると、会話文などで話者が切り替わる場合は切り替わるタイミングでは読み上げ位置表示を更新しますが、それ以外では読み上げ位置表示が更新されなくなります。 上記のような動作になるため、会話文がほとんど無いであるとか、iOS 16.3 からの問題の回避策として会話文の設定を消してあるなどで話者が切り替わらない場合には読み上げ中の位置表示が全然変わらないまま動作することになるため、使い勝手としてはあまり良くない感じになります。 ただ、読み上げ中の画面を確認しないのであれば、この対策を行うことでメモリリークの問題は回避できるため、前回の緩和策よりは使い所は多そうな気がします。とはいえ、強制的にONにするような物でもないため、ON/OFF設定として追加しています。 また、この設定自体はメモリリークの問題がなければ必要ない物になるため、「将来的には削除される予定」という事を明記しておきました。 本件は iOS 16.3.1 でもメモリリークする問題は直っていないため、より詳細なバグレポートを提出しようと追試をしていた時に、読み上げ中の位置を受け取らないようにするとメモリリークをせずに発話することができる事に気づいたため、実装したものになります。 もうちょっと早めに気づいていればよかったなぁとは思うんですが、仕方がない…… ですかね……(´・ω・`) - 「設定タブ」->「読み上げ中の位置表示更新をサボるようにする」がONの場合、「一息で読み上げる範囲が長くなる場合にテキトーな範囲で区切るようにするが、その時に区切られなくなる最小の文字数〜」設定を追加 こちらは、「読み上げ位置表示をサボるようにする」がONの場合、読み上げ中の読み上げ位置を把握することができなくなるため、読み上げの終了をもってしか読み上げ位置を更新できないという問題に対応するための仕組みです。 これをONにすると、以下のような利点と欠点が発生します。 ・話者が変わらない(発話が止まらない)場合でもある程度の長さの文字を読むと一旦発話を停止して再開するようになるため、読み上げ位置がその都度更新される。(利点) ・一旦発話を停止して再開する場合、同じ話者であるのに一息おいた感じの発話になってしまう。(欠点) 利点ばかりではなく欠点もあるので適用範囲(?)を選択できるオプションにはしました。ただ、999999で利用した場合は読み上げ位置が更新されないという問題を抱えたままになる事になるので、あまりオススメできない感じです。 内部動作としては、かなりややこしい動作をしていて、概ね以下のような動作をします。 1. 会話文や読み替えを行う文字列があった場合はそこで分割する 2. 分割された後の文字列について、特定の文字を区切り文字とし、読み上げ対象の文字列を分割する(今回は "。", "、", ".", " ", " ", "\n" を適用しています)。 3. 分割された文字列ごとに適切な話者を設定する 4. 同じ話者で発話する文字列が続いた場合、特定の長さになるまでは一つの文字列として合成する(最低「指定された数(default: 50)」文字 になるまでは合成するようにしています) 例えば、『あい、うえお「かき。くけこ」さし すせそ』のようなものは 1. で『あい、うえお』『「かき。くけこ」』『さし すせそ』に分割されます。 次に、2. で『あい、』『うえお』『「かき。』『くけこ」』『さし 』『すせそ』に分割されます。 次に、3. で『あい、』と『うえお』は標準の話者、『「かき。』『くけこ」』には会話文の話者、『さし 』『すせそ』には標準の話者が割り当てられます。 次に、4. で『あい、うえお』『「かき。くけこ」』『さし すせそ』の3つの文字列として合成されます。 このとき、『あい、うえお』のような部分が50文字を超えているような場合には、4.で合成される場合に一つには合成されず、50文字を超える程度ごとに分割される、といった感じです。 今回の修正で追加されたのは2.の部分で4.については今までは50文字ではなくInt.max文字までは合成されるように(つまり最大長で合成されるように)なっていました。 ところで、メモリリーク問題を簡単に再現するには、 ・「設定」->「発話変更設定」で「」による会話文で話者を変える用に設定する ・「設定」->「読み上げ中の位置表示更新をサボるようにする」をOFFにする ・自作小説などで、『「い」い「い」い「い」い「い」い「い」……』という感じの1文字毎に会話文の話者と標準の話者が交互に発話させられるような文字列を本文を設定して、その文章(?)を読み上げさせる と、最短の時間でメモリリーク問題を再現できます。 Version 2.7.2 (2.7.4) - SiteInfo がURLの文字列長でソートされていなかった問題を修正 SiteInfo を URLパターン の文字列長でソートせずに使っていたため、^https?://. といったとても短いものが先頭で判定される場合がありました。 なぜこんな状態で今まで正しく(?)動いてたんだろう…… どういう事なんだ……('A`) - URI を表す正規表現について、ALPHA が [a-z] となっており、[A-Z] を無視していた問題を修正します。 うーん。テキトーに検索してそれっぽいことを書いてあるQiitaを使ってたんですが、ALPHA に [A-Z] があるのを排除されていたとは。(´・ω・`) - バックグラウンドでダウンロードする時は並列度を1(並列ダウンロードしない)にします どうやら「設定タブ」->「小説の自動更新」がONの時に、使っていない時に起動して更新確認を行っている時に、CPUを食いまくってる時間が長いという理由で殺されていることがあるようなので、CPUを食う原因になっているであろう並列ダウンロードをバックグラウンドで動作している時は1(並列ダウンロードしない)にすることで回避するように試みます。 これで多分「何故か更新されているのに更新通知が来てない」という事が減る(またはなくなる)と思います。 - iOS 16.3 で発話させるとそのうち強制終了してしまう問題に対して、利用しているメモリ量を監視してある程度以上使っているのを確認した時には発話を停止するような小細工を入れました 強制終了してしまうと読み上げ位置を保存しないままに終了させられてしまうため、一旦発話を強制的に停止する事で読み上げ位置を保存するという事をするだけです。が、アプリを再起動するような事はできない(確か既約でアプリを終了する事自体がやっちゃ駄目なんじゃなかったかと思うのでやってないだけなので、できるのなら再起動してしまっても良いかもしれないです)ので、手動でアプリを終了させて、再度Speakを押すというクソ面倒くさい事をしなければならなくなるという残念仕様なのは変わりません。 けれども、iOS 16.3 に更新してしまった場合にはこれがある場合と無い場合ではこの停止する機能があった方がまだマシかなぁという事で導入します。 なお、終了すべき値かどうかを検知するのは ・os_proc_available_memory() で得られる値(あとどのくらいのメモリを使って良いのかのバイト数)が100MBytesを切る ・初期値としてos_proc_available_memory()から得られた値から計算して1.75GBytes以上利用可能メモリが減った(つまり起動直後から1.75Gのメモリが確保された) のどちらかが成立すると、これ以上は駄目だと判定します。 昨今はメモリが16Gとか載ったiPadとかもあるんですが、Increased Memory Limit Entitlement というのを入れておかないと駄目だそうで、そういうのが必要ないのにわざわざ入れるのもおかしいよねぇと思うので入れないで2G上限のつもりでこうなっています。 Version 2.7.1 (2.7.3) - 一つの小説を読み上げ終わった後に、「読み上げが最後に〜」というアナウンスがあった後に一部の操作が不能になる問題を修正 この問題、私の手元では全然再現しなかったので対応が全くできなかったのですが、再現率が100%の軽量バックアップファイルを送っていただけたので問題の原因を(おそらく)特定でき、対応できたはずです。 問題の発生原因の細かい部分がわかっていないので、この条件でなら必ず発生する、というのはよくわからないのですが、その再現率100%の状態を使って再現しないようにできたので多分大丈夫なんじゃないかなぁと思っています。 で、その再現率100%のものでの再現方法としては、 1. 「設定タブ」->「再生が末尾に達した時の動作」を「別のお気に入り小説を再生」に、「再生が末尾に達した時の次の小説の選択方式」を「未読分の続きから再生」にする 2. 2つのお気に入り小説を用意する 3. どちらか片方(A)を読み終えていない状態にする 4. 読み終えていないようにしたのとは違う方(B)の小説を開き、最後の1文字の部分を選択状態にする 5. (B)の小説で読み上げを開始する 6. 「読み上げが最後に達した〜」のアナウンスの後、(A)に移動して再生を開始しない という感じになります。また、6. で次の小説の再生が開始されなかった場合、新しく発話ができなくなる、本棚に戻ると操作ができなくなる、等といった謎の挙動になり、アプリを一旦終了させないと駄目になります。 それで、問題の詳細?としては、通常 ことせかい で発話中は AudioSession を Active にしているのですが、「読み上げが最後に〜」と言い出す直前のタイミングでは AudioSession は inactive に設定していて、どうやら AudioSession が inactive になっていると発話周りの挙動がおかしくなる(発話中や発話終了イベントが発生しなくなり、その他の謎挙動を誘発する)ようでした。 そこで、アナウンスをするタイミングやその後も発話を続ける場合については AudioSession を inactive にはせず Active のまま動作するように変更しています。 Version 2.7.0 (2.7.2) - Web検索タブで何も表示されなくなっていた問題を解消します これは酷いバグでしたね……(´・ω・`) 「Web検索タブで非表示設定されているサイトを表示する」がONになっている状態でしか確認していなかったので気づいていませんでした。 Version 2.7.0 (2.7.1) - Web検索タブでの検索用先データの取得先(の標準のもの)を変更します。 具体的には https://limura.github.io/NovelSpeaker/data/WebSearchInfo-ja_JP.json から https://limura.github.io/NovelSpeaker/data/WebSearchInfo-v2-ja_JP.json に変更します。 これは Version 2.7.0 で増えたパラメータを使ってはじめて動作するWebサイトが、Version 2.6.* などで読み込んでしまうと表示はされるけれど動かない、という状態になるため、読み込むURL(ファイル)自体を変える事で回避するためです。 今後はこういう事をしなくても良いように "version" フィールドを増やしたんですけれど、 少なくとも Version 2.6.* の頃には "version" フィールドを認識しないので、こういう回避をする必要があります。 このファイルは不定期に読み込みを試みるため、さっさと試すには今回のバージョン(2.7.0 (2.7.1))を起動してから、「設定タブ」->「Web検索タブの検索データを読み直す」を選択する必要があります。 なお、こちらのデータで更新すると、Web検索タブで選択できるWebサイト様に、ノベルピアさん と pixiv小説さん が追加されるはずです。ただ、pixiv小説さんについては公開時には非表示に変えてしまうかもです。どうにも動作が怪しいので。 その場合、「設定タブ」->「ルビはルビだけ読む」を10回くらいON/OFFすると下の方に出てくるDEBUG欄の「Web検索タブで非表示設定されているサイトを表示する」をONにすると出てくるようにはしておきます。(けれど、その他の非表示のもの(概ね何かの問題を抱えているもの)も表示されるようになります) Version 2.7.0 (2.7.0) 注意: 今回のバージョンは内部データベースのスキーマに更新がある(バージョン番号のマイナーバージョン(2.7.0 でいうと 7 の部分)が上がっている)ため、一旦2.7.0で起動してしまうと2.6.*のアプリバイナリ(つまりAppStore上のバイナリ)を上書きした場合に動作しない状態になる(DBスキーマバージョンが違うので強制終了する)はずです。 - 異なるOS間やOSバージョン間の話者のIdentity文字列の差異による問題を、その差異を吸収するテーブルを使って回避できるように iOS が 16 に変わった辺りで話者のIdentity文字列が変わってしまって話者を正しく選択できず他の話者になるという事がありました。 その問題をそれぞれの変換テーブルを用意するという力技で回避するための物です。 具体的には https://limura.github.io/NovelSpeaker/data/SpeakerConvertTable-Version1.json にあるテーブルを読み込んで異なるOS間などで変化した 話者の Identity文字列 を選択するようにしています。 簡単に試す方法はそうですね…… ことせかい の Q&A ページの「読み上げ時の話者データのダウンロードについて」 https://limura.github.io/NovelSpeaker/QandA.html#DownloadSpeechDataWarning 辺りから標準の話者を「O ren (拡張)」とかに上書きするバックアップデータを取り込んで、それぞれのOSバージョンの物にしてもなんとなくうまく動いているというのを確認すると良いかもしれません。 一応、今回追加した部分が機能した場合は、「設定タブ」->「ルビはルビだけ読む」を10回位ON/OFFすると下の方に出てくるデバッグメニューの「アプリ内エラーのお知らせ(デバッグ用も含む)」に『指定された話者がこの端末では利用できない物であったので、代わりの話者を利用する事にします。(他のOS/OSバージョン向けのIdentity文字列を確認したので近い話者を選択します)』という感じのエラーログが追加されるので確認できそうです。 - 「設定タブ」->「小説本文画面の表示形式〜」の WebViewOriginal でリンクがクリックできていたり、ページ遷移系のジェスチャを受け取って前のページに戻れていたりしたのを拒否するようにしました これを許可してしまうと読み上げ用に保持している文字列と表示されている文字列に差異が生じてしまうので。 まぁ表示しようとしているWebページ側で読み上げ対象文字列を取り出して読み上げる、みたいな形にしても良いのですが、今現在開いているページが変わったというのをうまく処理しないと終わった時に読み上げる「次のページ」がどこだかわからない、であるとか、WebViewOriginal の場合は前後のページ以外にも移動できてしまうのでそもそもどのページに居るのかもわからなくなったりするので色々面倒だということで全部禁止にします。 - 小説のダウンロード開始時に、実際に読み込まれている章のリストの最後の物の情報を使ってダウンロードを試みるように ことせかい の内部に保存しているデータで、一部壊れる可能性がある物があって、実際にそれが壊れていて毎回1ページ目からダウンロードしているというログを受け取ったので、それに対応します。 具体的には個々の小説の「最後の章の番号」は個々の小説毎に保存しています。この値は意味的には「その一つの小説に属する章(ページ)のリストの中の最後の章の番号」であるのでそこから抽出すれば良いのですが、この方式で取り出すには全ての章を読み込まねばならず、時間がかかります。そのため、この「最後の章の番号」を値として別に保存していたのですが、この保存されていた値がおかしくなっているような挙動を示していたので、ダウンロード時にはこの値は信用せずに「その一つの小説に属する章(ページ)のリストの中の最後の章の番号」を愚直に抽出したものを使うことにします。 - ログインが必要なWebサイトでダウンロードが失敗していた可能性のある問題を修正 内部でCookieを握りつぶして(送るはずのCookieを空にして送って)いる経路があったのでそれを潰しました。 例えば pixiv小説 などのログイン状態をCookieにも保存するタイプのWebサイトで以下のような事をするとログインしていた物がログアウトしているのを確認できました。 1. 「Web取り込みタブ」で pixiv小説 を開く 2. pixiv にログインする 3. pixiv小説 の何れかの小説を取り込もうとする(仮読み込み結果が出る所までで良いので、実際に本棚に追加する必要はない) 4. (pixiv が開いている状態で)リロードする 5. pixiv からログアウトしてしまっているのを確認 問題としては、3. の時点で空のCookieを送りつける事でpixivからログアウトしてしまっている(そのため、R18等のログインしていないと表示できない小説のダウンロードが失敗する)、という症状でした。 - 「設定タブ」→「本文中の長押しメニューを ことせかい 由来の物のみにする」がONの時に表示される「残される長押しメニュー項目」を追加 「コピー」とかを残せるようになります。 また、この修正により内部データベースに新しい要素が追加されたため、iCloud同期でもデータバージョンが上がる事になり、2.6.* 以下の ことせかい と iCloud 同期 ができなくなります。 - 「設定タブ」→「本文中の長押しメニューを ことせかい 由来の物のみにする」の表記を「本文中の長押しメニュー項目を減らす」に変更 ことせかい 由来の物以外のメニュー項目を全て消す事ができていないようなので、「〜減らす」という表現にします。 - 「Web検索」タブで使っているWebサイト毎の検索周りの定義を色々拡張(?)しました 具体的には以下のような項目が増えます。 1) result: 内に "urlConvRegexpFrom", "urlConvRegexpTo" を追加 2) values: 内の queryType が "text", "radio", "hidden" の物に、"urlReplaceTarget" を追加 3) "waitSecondInHeadless" の追加 4) "announce" の追加 5) "webSiteURL" の追加 6) "allowDataVersion" の追加 これらは以下のような動作・目的のものです。 1) のうち "urlConvRegexpFrom" が定義されていると、"url" に指定された Xpath で取り出された文字列に対して正規表現を用いて "urlConvRegexpFrom" から "urlConvRegexpTo" への変換が走り、その結果が url を示す文字列として認識するように動作します。 a href="..." ではなく onclick="..." といったような形でリンク先への遷移を行う場合で、その値から遷移先のURLを生成できそうな場合に強引にURLを生成させる用途に用いる事を期待しています。 2) の "urlReplaceTarget" が指定されている物は、検索用の "url" に "urlReplaceTarget" と同じ文字があった場合は検索に使う文字列をその文字列と置き換えます。 これは https://.../hoge/検索文字/hoge といったような検索文字列自体がクエリではなくpath(?)の部分に埋め込まれるような場合にこの埋め込みを行う事を目的としています。 3) の "waitSecondInHeadless" は、ヘッドレスブラウザでのリクエスト要求時に、リクエストが完了した後に指定された時間(秒)待ってからHTMLを評価するようにします。 つまり、JavaScript等で遅延読み込みがされるようなWebサイトに対しての場当たり的な処理です。 4), 5), 6) の "announce", "webSiteURL", "allowDataVersion" は、それぞれの「検索先のWebサイト」を選択した時に、その検索先のWebサイトについての注記を表示できるようにしたり、「Web取込タブで開く」ボタンを表示させるためだったり、将来的に実装される機能を使っている場合に過去の ことせかい で表示されないようにするためのバージョン番号管理をするためのものになります。 - 「設定タブ」の「Debug」欄に「Web検索タブでの個々の検索結果ダイアログに「Web取込 タブで開いて確認する」ボタンを追加する」のON/OFF設定を追加。 「Web検索」で検索された個々の小説について、「仮読み込み」をするか「Web取込 タブで開く」かを選択できるようにするためのボタンを追加します。 個人的にデバッグ用途にほしかったので追加したのですが、ボタンのレイアウトが変わってしまうので表側の機能とはしないでおきます。 - 「Web検索」タブの検索結果のリストを選択した時に、その選択した小説をハイライトするように キャンセルした時に「前に選んだのはどれだったかな」というのが見た目でわかるようにした、という物です。 Version 2.6.3 (2.6.7) - 「設定タブ」->「ファイルの取り込み」でHTMLファイルを取り込む時に、HTMLファイルの文字コードを推測して読み込むように 今まではUTF-8だと思いこんで読み込んでいました。 - 「設定タブ」->「ファイルの取り込み」で取り込んだ時にファイルの更新確認を行う対象をテキストファイルだけではなくPDF,RTF,HTMLでも確認を行うように しました。 - 「設定タブ」->「ファイルの取り込み」で取り込んだ時にファイルの更新確認を行う事ができるタイプの物については、小説の詳細画面で「更新確認を行う」のON/OFFフラグを制御できるように しました。 - 「小説本文画面」でページを移動した時に、スクロール位置がなにか変なことになっている場合がある問題に対しておまじないをかけてなんとかしようとしてみます。 いまいち何が原因かわかっていないのであまり正しそうな事は言えないのですが、 ・iOS 16.0 以降 ・1ページがかなり長い文章で複数ページある小説を開く ・ページの最後あたりまでスクロールした状態でページを移動する と、新しく開いたページでは先頭部分にカーソルがあって、スクロール位置も先頭部分になっているはずなのに、下の方にスクロールした状態のような表示になる場合があるという問題でした。 ただ、再現性があんまりないのと、どうもページ遷移した後(つまりは表示する時に使われる文字列を全部書き換えた後)に先頭にスクロールしたはずがスクロール位置が先頭ではない事になっているぽい、という事でとった対処法が「ページ遷移前に一旦先頭にスクロールさせてからページ遷移する」というものなので、上手く動いているように見えるんだけれど本当にこれで良いのかの確証は無いという感じのものになっています。 Version 2.6.3 (2.6.6) - 「Web検索タブ」でのWebサイト情報で、MultiSelect について、初期値を設定できるようにしました。 地味に後方互換性が無い変更なのですが、これを入れる必要があったWebサイト様の検索仕様では、未設定だと全てを選択した状態になる、つまり未設定だと検索できないというようなことは無いという形でしたので問題は発生しないということでしれっと入れてしまいます。 - 「設定タブ」->「バックアップ用データの生成」等でバックアップファイルを生成する時に、小説のダウンロードが行われていた場合はこれを停止するようにします ダウンロードを停止しないでも大丈夫なように作っているような気はするのですが、イマイチ自信がないのとバックアップの生成とダウンロードを同時に行うとCPUもメモリもキツいことになりそうなのと、実際に「ダウンロード中に完全バックアップをしようとしたら落ちる」という問い合わせを受けたので同時にはできないようにしておきます。 - SiteInfo に overrideUserAgent という項目を追加して、それが指定されている場合には UserAgent を変更してアクセスするようにします。 なお、対象のURLに複数の overrideUserAgent がある場合には、その先頭のもの(overrideUserAgentが無いものは無視した上での先頭のもの)を使う形なので、色々使いにくいです。 これは pixiv小説様 で iPhone だとうまく取り込めないのだけれど、iPad だと取り込めるということで、UserAgent を騙ってアクセスする事で一時しのぎができそうだったため、一応入れておくという感じです。 という事であまり使いたくない感じの機能ですね。(´・ω・`) - 一部のWebサイトでページを飛ばして読み込んでしまう場合のあった問題を修正 具体的にはアルファポリスさんで発生していた問題です。 アルファポリスさんは時々「コンテンツ保護のため非表示にしました〜」といったような形で本文が表示されないことがあって、それを回避しようとしてその表示されなかった本文を読み込まずに次のページを読みに行ってしまうことでページが抜けてしまうという問題でした。 - 「設定タブ」->「ファイルの取り込み」を追加 ファイルアプリやDropboxアプリ等のシェアメニューから ことせかい を呼び出した時と同じような機能になります。 他のアプリからのシェアメニューを使っての取り込みの場合、Safariでしか動かない「ことせかい へ読み込む」(灰色のアイコン)の物と、カラーのアイコンだけの物の二種類があって、前者を使ってみて「取り込めないんだなー」と思ってしまう人がいるようなので、アプリ内に取り込みボタンを追加する形で取り込めるんですよというのを見える化(用法違い)してみます。 - シェアメニュー等からのファイル取り込み時に、このiPhone(またはiPad等)の上のテキストファイルであった場合はそのファイルの更新確認を行うように 例えば、mac のテキストエディットとかは iCloud ドライブ内にテキストエディットというフォルダの中にファイルを作るんですが、これを「設定タブ」->「ファイルの取り込み」から取り込んでおけば、テキストエディット側でその中身を変更したのを ことせかい 側で検知して内容を更新するという物になります。 「設定タブ」->「ファイルの取り込み」で見えるファイルは「ファイル」アプリで見える物とだいたい同じで、ファイルアプリからのシェアで受け取った物は概ね更新確認もできるようでした。 なお、GoogleDrive アプリや Dropboxアプリ から共有された物については更新を検知できなさそうでした。 ただ、ファイルアプリ側で Dropbox のファイルを指定して共有したものであれば監視できることは確認しています。おそらく、Dropboxアプリからの共有などは一時フォルダにファイルがコピーした上でファイルが渡されてしまうため、更新確認ができないのではないかと思います。 おそらく、GoogleDriveアプリ も似たような動作をしていて駄目なような気がします。 他に、この更新確認を行う部分についてはバックアップファイルからの復元時には有効になりませんし、iCloud同期している他の端末でも有効にはなりません。これについては技術的に解決しづらいので実装しておりません。(取り込んだ時に生成されているファイルのURLは、その時のその端末でしか使えないのでバックアップから書き戻しても使えませんし、iCloudで同期した別の端末でも同様に使えないのです) - 小説の本棚への追加に失敗した時のエラーメッセージを少しわかりやすくしました 具体的には同じ小説を追加しようとした場合にその小説名がエラーメッセージに含まれる形にしています。 - ファイル読み込み(シェアメニューからの読み込み)での対応ファイルタイプに HTML を追加 - Share Extension で WebURL を受け取ることができるように Share Extension での共有はシェアメニュー上のカラーのアイコンの物になります。 こちらの Share Extension を使う物は、一旦画面に「ことせかい で取り込む」「キャンセル」というダイアログが出て、「ことせかい で取り込む」を選択すると ことせかい に切り替わって仮読み込みが発生する、とううパターンになります。 今までの Document Types を指定していた物もカラーのアイコンで出てくる物になるのですが、こちらの場合はダイアログは出ずにいきなり ことせかい に切り替わる動作になります。 - Action Extension を廃止しました 具体的にはシェアメニューで出てくる灰色のアイコンに「ことせかい へ読み込む」と表示されていたものが消えます。 こちらは上記のShare Extension で WebURL を受け取るが代替機能となります。 上記の2つの修正で、シェアメニューからの受け取り時は全てカラーのアイコンの物を使う形で統一される感じになります。 - 「設定タブ」->「画面の回転に追従する」をメインメニュー側で見えるようにします 機能的には何も変えていませんが、サポートされる機能として開放してよさそうなので開放します。 Version 2.6.2 (2.6.5) - 「設定タブ」→「本棚に栞の位置を表示する」がONの時に「読み上げが最後に達しました」とのアナウンスがあるにもかかわらず、栞の位置表示のバーの色が紫色にならない場合のある問題を修正 この修正は、小説のダウンロードが走りまくるとか読み上げ中だったりした時に本棚画面でのスクロールが遅くなったりするかもしれないなぁと思っています。 といいますのは、どう考えても必要な処理がコメントアウトしてあって、そのコメントアウトされている部分が今回の問題を発生させていたという形なのでした。とすると、おそらくは何か理由があってコメントアウトしているんだろうなぁと思うのですが、こういうのの場合は処理が重すぎるので端折っている、というパターンが多そうだなぁという気がするのです。ということで、スクロールが遅くなったりするのかなぁと思ったのですが、ソースコード上では重く鳴るようなものでもなさそうなんですよね。 一応思いつく範囲で少し試してみた範囲では大丈夫そうだと思うのですが、何か気づいたことなどありましたら教えていただけますと嬉しいです。 - 削除した小説の読み上げ位置が保存されたままになっている問題を修正 こちらは小説を削除した時に読み上げ位置用のブックマークを削除していなかった、という問題です。 なので、いつまでも使っていないブックマーク用のデータが残ってしまっているという問題がありました。 この問題があった時は、同じ小説を再度ダウンロードすると同じIDになるのでこの削除しそこなったブックマークが使われる可能性がある(小説を開いて読み上げたりするとブックマークは上書き更新されてしまうので使われない可能性もある)という感じでした。 確認手順的には 1. 1ページ以上で良いのでどこかのURLから小説を取り込む 2. 1. で取り込んだ小説を開いて1ページ目のどこか途中あたりを長押しして範囲選択した状態で本棚に戻る(ここでブックマークが生成されます) 3. 1. で取り込んだ小説を消す 4. 1. で取り込んだ小説をもう一度取り込む 5. 4. で取り込んだ小説を開く こうした時、5. の時点で 2. で範囲選択したあたりにカーソルが合っているのが問題修正以前で、問題修正以後は一番前にカーソルが合う形になる、という事で確認できるはずです。 Version 2.6.2 (2.6.4) - 「設定タブ」->「SiteInfo を取得し直す」と「Web検索タブの検索データを読み直す」を選択した時に、データを正しく読み直さない場合があった問題を修正 URLRequest で cachePolicy: .useProtocolCachePolicy を使っていると、キャッシュがある場合にそれを使われてしまうので、URLCache.shared.removeAllCachedResponses() を呼ぶなどして回避しないと駄目というお話でした。(´・ω・`) Version 2.6.2 (2.6.3) - SiteInfo(本文部分などを抽出するための定義)でのXpathで、"//.../@attribute" という形で attribute を参照した場合に 「 attribute="xxx"」 という値が得られていたものを、「xxx」が得られるように変更 これは、<meta name="twitter:creator" content="xxx">というものの xxx 部分を取り出そうとして //meta[@name="twitter:creator"]/@content という Xpath を書いても、「 content="xxx"」という文字列が得られてしまって困るという問題を解消するものです。 これで一部の作者名がうまく取れない(「作者:xxx」として取り込まれてしまう)問題を解消できそう(「<span>作者:xxx</span>」を参照するのではなく、上記の/@contentを参照することで「作者:」を排除できるようになるの)ですが、後方互換性がない変更になるので、SiteInfoの変更はしばらく後にしようかなぁと思っています。 (SiteInfoの変更を忘れてしまわないかちょっと心配) - 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」に「表示されているページ内で検索」ボタンを追加 これは既存のボタンの上にフローティングウインドウを開いてそれらのボタンを隠したりしているので、なにかおかしな動作をしかねない気がしています。 で、左右へのページ移動では消えないのは一応仕様の予定です。他の画面に移動した時に消えるのは意図した挙動です。 - 小説の詳細画面の「小説名」と「著者名」をタップした時に出てくるダイアログに「〜をコピーする」ボタンを追加 今まではそれぞれの項目をタップした時には強制的にそれらの名前をコピーしていましたが、これからは「〜をコピーする」をタップしないとコピーされないようになります。 これは、小説名と著者名を変更するのとコピーするのが両方同じボタンに割り当てられているという問題を解消するためのものです。 今までの実装方針的には、今までてきていた事ができなくなる場合はON/OFF設定を追加してdefaultでは以前の状態のままにする、という事にしていたのですが、これについては今までの動作を変更してしまう事にしました。これは、(実装が面倒くさいのと、)ON/OFF設定にするような内容でも無いかなーと思ったのと、新しい形式の方がより普通ぽい?なぁと思ったので。 で、もし「今までは1タップでコピーできたのに。改悪だ!」と言われたら(そういう事を言う人が出てきてから)改めてON/OFF設定を追加するという形にする感じにしておこうかと。(´・ω・`) - 「設定タブ」->「小説本文表示画面の設定」の文字の大きさと行間のそれぞれの数値を表示するように しました!( ゚∀゚)b - 「設定タブ」のデバッグメニュー(「ルビはルビだけ読む」のON/OFFを10回位繰り返すと一番下に追加されるメニュー)の中に「画面の回転に追従する」を追加(iPhone のみ) 元々 iPad では画面の回転に追従するようになっていますが、これを iPhone にも開放します。 なお、今までが追従しない状態でしたので、標準では追従せず、こちらのオプションをONにすることで追従するようにします。 また、ON/OFF にせずに回転(?)できる方向を指定するような指定方法も考えたのですが、いまいち呼び方がわからなかった(ポートレイトやらランドスケープとか言われてもわからないだろうし、横や縦だけ、位ならわかりそうな気はするのですが、横の右・左や縦の上・下がどうこう言い出すとわけわからん感じになると思った)ので「以前の状態(回転しないでポートレイトの向き固定)」と「どの方向でも回転する」の二種類をON/OFFで切り替える形式にしてみました。「俺は横画面で固定したいんだー」とかいう人が出てきてからUIを考える、みたいな感じにしようかと思っています。(保存しているデータ的には bool ではなく UIInterfaceOrientationMask の rawValue(UInt) を保存しているので、後から「横画面で固定」みたいな物を追加しようとしても、UIだけ入れ替えればなんとかなるはずです) ただ、この修正は全ての画面で正しく動くかがわからないのでちょっと長めにテストをする事にします。そのため、このオプションは隠し設定という扱いになっています。 といいますか、小説の詳細画面で小説名や作者名をタップした時に、キーボードが開くので一番下のボタンが見切れるのが既にわかっています。ただ、これについては値を変更する(破壊的な)選択肢が見えなくなっていて、「変更しない」というキャンセルに当たる物は画面内に見えているぽいのでまぁいいかなぁという気はします。といっても、実際に値を変更したいと思った時には画面を回転して「この名前に変更」ボタンを表示させないと駄目になるのですけれども。 それから、この設定は(今の所は?) iCloud同期 はされません。これは、この設定が起動時のかなり早い段階で参照されるため、場合によっては内部設定を保存しているデータベースの準備ができていない段階で参照される可能性がありそうだなぁと思ったので、それを回避して端末固有の軽いデータ領域に保存するようにしたためです。 - 小説の編集画面の「章を追加」ボタンを、最後のページ以外でも押せるように 表示されているページの一つ後ろにページを追加するようになります。例外として、1ページ目で追加しようとすると、前後のどちらに追加するかを選択できます。 ダウンロードされた小説で追加されたページは、本来そのページにあったページのURLを引き継ぎます。(具体的には小説の詳細ページの「現在開いているページ」に当たる物がそれです。また、追加のページのダウンロードを試みる場合には最後のページのURLが利用されるのでこの処理が必要となります) このページの追加周りはちょっと間違えると小説の本文が参照できなくなったりしそうなのでちょっと怖いです。 Version 2.6.1 (2.6.2) − 対応OSバージョンを iOS 15, iPad OS 15 以降にしました。 - 「設定タブ」に「保存されている全てのCookieを削除する」ボタンを追加 - 小説本文画面のWebView表示(新型の奴)の修正まとめ - 注入している JavaScript が Syntax error で読み込み失敗していた問題を解消 色々動かなくなっていました。例えば読み上げ位置の画面表示、長押しして読み上げ位置の設定等ができなくなっていたはずです。 Version 2.6.0 (2.6.1) - 自作小説の場合「小説の詳細画面」に「この小説の本文を一つのテキストファイルとして出力する」で生成されるファイル名で拡張子がなかった問題を修正 ファイルとして保存されたところまでしか確認してませんでした。ありがとうございますー。 "小説名.txt" という名前になるようにしています。(小説名の中に "/" がある場合は "_" に変換されます) Version 2.6.0 (2.6.0) - 「設定タブ」->「読み上げ中はスリープモードに入らないようにする」のON/OFF設定を追加 「設定アプリ」->「画面表示と明るさ」の「自動ロック」で時間が指定してあり、ほったらかしておくと自動ロックされる(スリープモードに入る)ようにしてあったとしても、この設定をONにしておくことで読み上げ中に限っては自動ロックされないようにします。 この機能を実機で実験する時に気づいたんですが、iOSだと最低値は30秒だけれど、iPadOS だと最低値が2分になっているのですね。(´・ω・`)ニフンマツノメンドクサイナァ - 「設定タブ」->「サポートサイト内のQ&A(よくある質問とその答え)を開く」を追加 単に Safari で Q&A が開くだけです。 - 「設定タブ」->「自作フォルダの編集」から「このフォルダに入れる小説を選択する」を選んだ時に表示される小説のリストに、他のフォルダに登録されている場合はそのフォルダ名のリストを付記するように しました。少しだけ編集時の利便性が上がる気がします。一覧性は下がってしまいますが。 - 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」に「現在のページをWeb取込タブで開く」を追加 挿絵等があるよと本文に書いてあるけれど見られないのでなんとかして欲しいというお話があったので、「詳細」->「現在開いているページ」で開くのよりは便利かなぁという事で追加しておきます。 なお、アイコンが「Web取り込みタブで開く」(こっちは取り込んだ時の最初のURLをWeb取り込みタブで開く)の物と同じになっているんですが、わかりづらいけれどじゃぁ別のアイコンにするにしても何にすれば良いのかというと何も思いつきませんでした。 - iCloud同期をONからOFFにした後、再起動せずにONにした時に古いデータのストレージ上からの削除に失敗する可能性があった問題を修正 ONからOFFにした後にアプリを再起動すれば問題は発生しないはずであるというのと、あまりしない操作なので恐らく誰も気づいていないのではないかなぁと思っています。 - 自作小説の場合「小説の詳細画面」に「この小説の本文を一つのテキストファイルとして出力する」を追加 自作小説を ことせかい で書くという事をしている方がおられるようなので、いつ ことせかい のサポートが切れても良いように脱出用の機能をつけておきます。 Webから取り込んだ小説については、テキスト化に使われ(て悪用され)る懸念があるので適用されません。 - 小説本文画面のWebView表示(新型の奴)の修正まとめ - 読み上げ位置がその章の最後になっている(文字数と同じ値になっている)小説を開いた時に、末尾までスクロールしなかった問題を修正 - 「設定タブ」→「小説本文画面の表示形式〜」で選択されている値の表示位置を変えました 「小説本文画面の表示形式〜」の文字列長が長すぎて値が表示できていなかったので。 Version 2.5.1 (2.5.2) - 小説の編集画面の上下左右へのカーソル移動ボタンにVoiceOver環境下用のアクセシビリティラベルを設定 しました。この問題、主にボタンを追加した時に発生するんですが、よくその VoiceOver環境下用のラベル設定を忘れててVoiceOverの人から「ついてないよ」って言われるんですけれど、自分はVoiceOverを使っていないので気づくタイミングが全くないんですよね。テストの書き方も思いつけないし…… なんとかならんかな……(´・ω・`) - 発話の開始と停止時に操作ログを保存するようにしました 「設定タブ」->「ルビはルビだけ読む」のON/OFFを10回位繰り返すと「設定タブ」最下部に出てくる DEBUG欄 の「デバッグログの表示」で見えるログへ追加されています。 多分無いとは思うのですが、再生・停止をする時にこのログへの書き出しが問題になってアプリが強制終了するようになったりするかもしれません(「前に一度やらかしてるので目視で同じことはしてないのは確認しました」の意味です)。(´・ω・`) - 小説本文の編集画面での読み上げ時にはその章の最後まで読み上げた場合にそのまま停止するようにします。 編集中の章以外に移動するのはおかしいと思われるので。 - SiteInfo(小説の本文部分を抽出する時等に使っているデータ)の取得(正確には定期更新用の取得)に失敗している場合の挙動を変更しました 具体的には ・本棚画面での更新確認などの小説本文のダウンロード行為は全て中断されます ・仮読み込みの場合はそのような問題が発生している旨がダイアログで表示されるようになります SiteInfo は、最短で1日に一回の頻度で再取得されるのですが、この SiteInfo の取得に失敗した状態で小説のダウンロードを試みている方がおられるようで、「取得に失敗する」「本文以外が取り込まれる」といった問い合わせが後をたたないため、SiteInfo が取得できていない場合はエラーとして扱う事にしました。 擬似的にテストする場合、「設定タブ」->「内部データ参照用URLの設定」で「ことせかい用SITEINFO」と「次点のSITEINFO」のそれぞれに無意味なURL(例えば http://example.com/ とか)を指定してSiteInfoの取得ができない状態にした上で、「設定タブ」->「SiteInfoを取得し直す」を一回実行して内部に保存されているSiteInfoを削除してから、何らかの小説をダウンロードしようとしたり、本棚画面で更新確認を行う事でSiteInfoが取得できなくなった時の挙動を確認できます。(実験が終わったら「設定タブ」->「内部データ参照用URLの設定」で設定した無意味なURLは消してください) - 小説本文画面のWebView表示(新型の奴)の修正まとめ - 読み上げ中に改行のみの部分がハイライトされる時、スクロールが少し前に戻る場合があった問題を修正 読み上げ中になにやら変な動きをしている問題の一部がこれで直るはずです。(まだまだ何か変な部分はあって、例えば2段組みの縦書き表示での問題は未解決です) - 「全画面表示ボタン」を押して全画面表示に移行したり通常の上下に色々ボタンがある表示に移行したりした時に、「現在表示されている部分の最初の行」を基準として表示しようと試みるようになります。 全画面表示に移行すると表示される幅や高さが変わるために表示位置がズレてしまうんですが、それをなんとなく「見えていた部分」に持ってくるようにしようとしてみた、という物になります。現在位置を取り出す辺りがかなり怪しい(今見えている画面内で「最初の行の真ん中辺り」と思われる位置の文字の位置を基準にして取り出している)ので、文字の大きさの設定(小さいフォントだと最初の行が狭すぎて次の行とかを基準にしそう)や本文の改行位置(真ん中よりも前で改行があると文字が無いので困ったことになりそう)等の要素によって「全画面表示ボタン」を何度も押していると少しづつズレていってしまったりする場合がありそうな気がしていますが、それでもそんなに大きくはズレないようになってるのではないかなぁという気がしています。 - 別アプリやホーム画面を表示するなどしてから再度 ことせかい に戻った場合に再読み込みをするように 時々なのですけれど、どうもこのタイミングでWKWebView内の表示が消える事があり(長いこと表示されていない場合に起こるぽいです)、表示が消えてしまうと前後の章に移動するなどして再読み込みさせないと復帰できないため、いっそのこと全ての場合で再読み込みさせてしまうことにします。 - 本文部分がとても短くて1画面に収まってしまう場合で、縦書き表示(2段表示ではない方)をしていると左右へのスワイプで前後の章への移動ができなくなっている問題を修正 単に min-width: 100% を指定して、強引に左右へのスワイプをするスクロールができるようにした形です。(´・ω・`) - 「設定タブ」->「本文中の長押しメニューを ことせかい 由来の物のみにする」をONにしても何の効果もなかった問題を修正 Version 2.5.0 (2.5.1) - 「設定タブ」->「再生が末尾に達した時の次の小説の選択方式」で「順に1ページ目から再生」を選択している時、同一フォルダ等に存在している小説が一つしか無い場合に再生が停止していた物を、その同じ小説を初めから再生し直すように変更 しました。動き的にはこっちの方が自然?な気がしたのでリリースする前に変更しておきます。 - 小説本文画面のWebView表示(新型の奴)の修正まとめ - まだまだ文字の大きさが変わる端末があるようなので -webkit-text-size-adjust: 100%; を追加で指定しました。 iPhone SE 2 だと全画面表示にした時だけ文字が大きくなっていて、シミュレータの iPhone 12 は縦書き表示にすると文字が大きくなるというような、時と場合を忖度して文字の大きさを変えるような挙動を取っているようでした。100%に固定させた(という意味だと思っています)ので、そういう謎の忖度はなくなるんじゃないかなぁと思っています。この問題どこまでやったら解決するんだろう。もうこれで解決にならんかな……(´・ω・`) それで、今後「小説本文表示画面でWebView表示の時に小説本文部分を画面全体にしたり元に戻したりするボタン」は「全画面表示ボタン」と呼ぶ事にします。 - 「全画面表示ボタン」を押して全画面表示にした後にもう一度「全画面表示ボタン」を押して元に戻した時に前後の章へのボタンやスライダ等が下側にひっついて表示されてしまっていた問題を修正 - 小説をダウンロード中に章の最大値が増えたのが反映されない(値が変わらない)問題を修正 - 「小説本文画面」で、iOS 13 未満だと前後の章へのボタンが消えていた(白地に白で表示されていた)問題を修正 Version 2.5.0 (2.5.0) - 「本棚画面」で「最終ダウンロード日時順(フォルダ分類版)」のフォルダ内の順番を最終ダウンロード日時順にします - 「本棚画面」で「作者名順」のフォルダ内の順番を小説名順にします これら、今まではフォルダ内の順番は未定義でした。 -「設定タブ」->「再生が末尾に達した時の動作」に「同じ作者の別の小説を再生」と「同じWebサイトの別の小説を再生」を追加 これら、次の小説は小説名でソートされた順で選出されます。 -「設定タブ」->「再生が末尾に達した時の動作」が特定の設定の場合(概ね別の小説が選択される場合)に現れる「再生が末尾に達した時の次の小説の選択方式」を追加 設定項目は「未読分の続きから再生」と「順に1ページ目から再生」の2つです。「未読分の続きから再生」は以前と同じ物です。「順に1ページ目から再生」は未読・既読に関係なく順番の次の小説を最初から再生し、順番が最後の場合は最初の小説から再生します(ループ再生?的な感じです)。 - 小説をダウンロードする時に利用する SiteInfo において、本文が抽出できていない物で、対象URIが HTTP の URL 全体を指しているような感じの物については無視するようにします AutoPagerize用 の SiteInfo側 で WordPress で構築されたサイト等を目的として "^https?://." というURIを対象とした SiteInfo が用意されているのですけれど、これで pageElement(本文部分) には何もヒットせず、nextLink(次のページ) はヒットする(a href... rel="next" みたいなのが引っかかる)場合に、まぁ大体は誤動作するので無視することにします。 - 小説本文画面のWebView表示(新型の奴)の修正まとめ - 画面下部のスライダに設定されている小説の章の数の最大数がおかしなことになる場合があった問題の一部を修正 まだまだ駄目な場合がありますねこれ(´・ω・`) - 小説の章の数の最大数が変わったり(ダウンロード中だったり)、小説の本文やタイトルが書き換えられたりした時に反応して表示を書き換えるように - 「設定タブ」->「小説本文表示画面の設定」で設定されたフォントサイズとWebViewのフォントサイズが合わない問題をなんとかした はず。です。HTML側の meta で name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no' と唱えると端末ごとのスケール変更が無効化できるという事でした。 - 「設定タブ」->「小説本文表示画面の表示方式」に webViewVertical2Column を追加 上下2分割の縦書き表示になります。 iPad を縦にして縦書きにすると目を上下させる量が凄いなぁと思って入れてみたのですが、この状態で読み上げさせると画面の上下移動が大量に発生してすこぶる見にくいですねコレ……(´・ω・`) - overflow-wrap:break-word; で折り返し指定をしました URLなどの長い単語?が折り返されずに画面外に出っ張る事でスクロールしないといけなくなっていた問題が修正されそうな気がします。 Version 2.4.1 (2.4.2) (未リリース) -「設定タブ」->「再生が末尾に達した時の動作」に「指定フォルダの小説のうち未読の物を再生」を追加 「同じフォルダの小説のうち未読の物を再生」だと、複数のフォルダに登録されている小説の場合にどの次に読まれる小説がどのフォルダの小説から選択されるかを制御できないという問題があったため、読み上げ開始時に一つのフォルダに絞って再生を開始できるような仕組みを導入します。 このオプションの方がより正しい?感じなので「同じフォルダの小説のうち未読の物を再生」を置き換えても良いかなぁとは思ったのですが、再生を開始しようとして「Speak」ボタンを押下した時に「複数のフォルダに登録されている小説だったので、読み上げを続けるフォルダをどれか選択してね」というダイアログが出てしまう事になる(アプリを開いて「Speak」ボタンを押しただけでは読み上げが開始されない事になるため、使い心地が変わる)ので別オプションとして新設しています。 - 小説本文画面のWebView表示(新型の奴)の修正まとめ - iOS 13 未満で、本文部分の右下に表示される上下のボタン群を消して本文部分の表示領域を広げたり元に戻したりするボタンが見えない状態で配置されてしまう問題を修正 - 小説本文表示画面で表示領域を画面全体にしてから元に戻した時、iPhone X 以降の iPhone のようなセーフエリア(ノッチ)のある端末で元に戻らなくて操作不能になる問題を修正 画面上部の時刻とかの部分まで削るとノッチに食い込むとかの問題が起こるようなので安全面に倒して時刻とかの部分は消さない方向にしています。 うまいこと消せるなら消してしまってもいいかなぁとは思うんですけれどもねぇ…… - WebViewVertical, WebViewHorizontal での表示の場合、それぞれの最初と最後の部分で画面外までスクロールさせようとすると、ある程度まで引っ張ってからであればその前後のページへ遷移できるように しました。これで本文を全画面表示して目だけで読んでいたとしても、一応前後のページへは移動できるようになります。 - 前後のページへのボタン、ダウンロード済みのページ全体でのスライドバー、現在表示中のページ番号と最終ページ番号の表示を追加 しました。一応これで見た目上は以前の物と同じボタンが設置された形になると思います。 なお、これらのボタン等は本文を画面全体にするボタン?(そろそろ分かりやすい4〜6文字位の名前が欲しい)を押すと消えます。 Version 2.4.0 (2.4.1) - 小説の編集画面で何も無い所をタップするとキーボードが閉じるように これで iPhone でもキーボードを閉じる事ができるようになったはずですが、気づきにくい(≒誰も使わないか使いたい人が使えない)気がしています。(´・ω・`) - 小説の編集画面の上下左右へのカーソル移動ボタンの大きさを少し大きくして、それぞれの間隔を少し広げました iPhone SE 2 のシミュレータで確認はしましたが、ギリギリ「章を追加」のボタンとは被らずに置けている感じになっていそうです。 ただ、そのシミュレータの画面でみると、iPhone SE2 だと一つ上の「小説の編集画面で何も無い所をタップするとキーボードが閉じる」ってのを押すための「何も無い所」が、その上下左右ボタンと章の移動用のスライダの間の凄く狭い領域しか無くて本当に押しづらくて実質押せない気がしています(´・ω・`) - 小説本文画面のWebView表示(新型の奴)の修正まとめ - フォントサイズがうまく反映されていない問題を修正(point size(pt) と pixel size(px) をごちゃごちゃに使っている部分があった問題を修正) これで、「設定タブ」->「小説本文表示画面の設定」での文字の大きさと同じ大きさになると思います。 - 文字の向きや位置、カーニング等の設定を変えました 具体的には例えば三点リーダー(「……」)の表示位置が縦書きの時に左寄せではなく真ん中になったりするようです。 で、これ、やったことは style の font-feature-settings: を pwid から pkna にしたという事なのですけれど、これ影響範囲というか変わる要素が色々種類多くないですか? 何かこう、もっと細かく指定できないとアレはこっちがいいけどコレはあっちがいい、みたいなのに対応できない気がしています。 - 長押しメニューの「読み替え後を確認」がうまく動かない問題を修正 - 本文部分の右下に上下のボタン群を消して本文部分の表示領域を広げたり元に戻したりするボタンを追加 これ、ボタンを押すと上下のボタン群は消えるんですけれどそのボタンは消えないので、その消えないボタンも読み始めるとスッと消えるようなのにしたいなぁとか思ったんですが、読みはじめた、というののタイミングをどう検出するのかや、どういうタイミングでボタンを表示すると良いのか、といった辺りがよくわからなかったため、表示し続ける形にしています。 あと、このボタンのアイコンは SF Symbols という iOS に付属のアイコンからテキトーに選んでいるのですが、いまいち分かりづらい気がするので、もう少しわかりやすいアイコンを自作すべきですかね……(´・ω・`) で、このボタンで上下のインタフェースを見えなくした状態で、本文部分を長押しして「読み替え登録」等を選んで別の画面に移動すると、上側の余白?(日付やWiFiの感度とかが表示されている領域)が消えてしまって、他のタブに移動して帰ってこないと直らないという事になるのですけれど…… 何故そうなるのかわからないので直し方がわかりません…… でもこの程度の問題でお蔵入りはしないほうが良さそうだしなぁ…… Version 2.4.0 (2.4.0) - HTMLを取り込む時に無視するタグに frame を追加しました frame を使っているWebページを取り込もうとした時に、HTMLからStringに変更しようとして frame で指定された URL を取り出せないために強制終了している事があるぽい?ので無視するHTMLタグに frame タグを追加しました。 現状で無視することにしているタグは以下のタグになります。 iframe, frame, link, meta, noscript, img - 「開発者に問い合わせる」内で『「アプリ内エラーのお知らせ」の内容を添付する』のON/OFF設定を追加 「アプリ内エラーのお知らせをコピーしてmailに添付して送ってね」という事が書いてあるエラーメッセージがあるのですけれど、その内容をコピーしたは良いけれど全てを添付せずに一部に削って送るという人が見受けられたため、自前でコピー&ペーストさせるのではなく、添付ファイルとして送信するように変更します。(´・ω・`) - Web取込画面で download属性のついたリンク を選択した時にファイルとしてシェアされるように(iOS 14.5以上のみ) これで「Web取込画面」のホームから「ことせかい サポートサイト」->「Q&A」->「読み上げ時の話者データのダウンロードについて」の中の各話者の設定が書かれたバックアップファイルをタップしても何も起こらない、という事をなくせます。 けれども、iOS 14.5以降 からの仕組みを使っているのでそれよりも古い物では動きません……(´・ω・`) - 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」に「章リスト(目次)」を追加 目次が欲しいよという声があったので、検索で空文字列を指定した時と同じ動作をするボタンを追加します。 - 読み上げ開始時に読み上げ位置表示が前の方に一回飛んでしまう場合のある問題を修正 以前は、発話設定や読み替えが発生しない部分が長い場所(会話文等ではない地の文で、改行等が無い部分など)の後半部分を選択して発話を開始させると、発話を開始した直後に読み上げ位置表示が前方に移動した後に正しい位置に読み上げ位置表示がされる、という形の問題がありました。(より正確には、発話設定や読み替えが発生しない部分の一番前に一旦移動してから読み上げている位置に移動するという物です) - 小説の編集画面でキーボードを閉じた時に小説の本文部分の表示領域が元に戻らない問題を修正 iPad で、小説本文画面(か、小説の詳細画面)から編集画面に入って、キーボードを表示した後、キーボード右下辺りにあるキーボードを隠すボタンを押してキーボードを隠しても小説の本文部分の表示領域がキーボード分だけ縮んだのがもとに戻らない、という問題を修正したものです。 - 小説の編集画面に「Speak」ボタンを追加 この画面のSpeakボタンでは画面上のカーソル(選択範囲)は移動しません(読み上げ位置を知るためのそれっぽい表示が別途出ます)。 - 小説の編集画面にカーソル移動ボタンを追加 キーボードが出ている時でないとカーソルの移動はできません。 また、時々長押しが効かない時があります(回避策としては長押ししながら指を少しずらすと良いのですが、そもそも何故それをしなければならなくなるのかがわからないので直しかたがわかりません)。 - 「設定タブ」->「小説本文表示画面の設定」->「字体設定」を開いた時に、現在選択されている字体をハイライトして、その字体が見える位置までスクロールするように 今までは前回何を選択したのかがよくわからない状態で放り出される感じでした(´・ω・`) - 小説本文画面の表示形式にWebViewでルビ表記を改善したり縦書きぽい表示にしたりする機能の追加(実験中の機能です) 「設定タブ」で「ルビはルビだけ読む」のON/OFFを10回位切り替えると一番下に追加されるDEBUG領域に追加した「小説本文画面の表示方式」を変更して小説本文画面を開き直すと確認できるようになります。 うまく動くのなら横書きの物はこの新しく作った方の物で置き換えてしまい、縦書き表示と切り替えて使う感じにする事ができるようにしたいと考えています(つまり現状の全ての機能がそのまま動いてルビや縦書き表示がそれっぽく動くようになる事を目標としています。とはいえ、読み上げ中のカーソル表示が消える場合がある問題の解決法が全然わからないなどの問題が既にわかっているので全く同じ状態にはできないとは思います。なお、Version 1.* から 2.* への移行時に並列して開発していたのですが、これは色々問題が多かったため、同時並行で開発する形で実装してみています) ただ、現状では全ての機能を移植できているわけではないため、実験的機能としてDEBUGからONにしないと使えない形でリリースして、特に告知もしない予定です。 なお、縦書き・横書きの変更のような設定項目は、将来的には(現在のような「設定タブ」の最上位項目が一つ増えるような形ではなく)「設定タブ」->「小説本文表示画面の設定」内で変更するような形にしたいと思っています。ただ、これに手をつけると大変なのでとりあえず後回しにして手っ取り早く確認できるようにこちらで設定を選ぶだけ、という形式にしています。 そんな感じでまぁ色々未実装なのでアレやコレがうまく動かないとかは色々いっぱいあるのですが、その全ての報告に返信を書いているのは大変なので、この新しい小説本文画面の表示機能に関する物についてはできるかぎり返信はしない形にしようと思います。つまり、「忘れてましたqueueに積みます」とか「気づいているんですけれど現状は技術的に駄目でした」とか「今実装中です」とか「後回しになってます」とかそういう感じのこちらでも確認できる物については返信はせずに、「え、それどうやったらなるの?実装できていると思っていたけれど動いていないという事ですね。こっちでは再現しないので再現手順をもっと詳しく教えて?」というような物にだけ返信するという形にします。ということで、返信が来ないのにはめげずに何かに気づき次第、βテスト結果報告辺りから送りつけて頂けますととても助かります(βテスト結果報告は何度送ってもらってもOKです)。(´・ω・`)オネガイシマス なお、WebViewOriginal は元のURLを読み込んで表示してその上で読み上げるというタイプの物で、動作検証がまともにされていないというか、たんなる実験で動いたら良いなぁという程度の物で、今の所の感触からするとお蔵入りになりそうな感じなのでこちらについては突っ込まれても何もされないだろう、という前提でツッコミを入れて頂けますと嬉しいです。 Version 2.3.2 (2.3.5) - 小説の編集画面において、章の削除時の確認ダイアログに「暫くの間は確認を求めないようにする」のON/OFFスイッチを表示するように 2.3.2 (2.3.3) で末尾の章以外でも削除できるようにしたのですが、削除ボタンを押すと何も言われずに問答無用で消えてしまうのはどうかと思ったので「本当に削除しますか?」というようなダイアログを出すようにしたのですけれど、沢山削除したい場合には邪魔だなぁという事もあるだろうという事でON/OFFスイッチを追加しました。このスイッチは一旦ONにするとそれ以降ダイアログが出ずに削除ボタンを押しただけで削除されるようになります。 なお、このON/OFF設定は小説の編集画面のインスタンスが作り直されるまで有効なので、恐らくは一旦小説本文画面に戻ってまた編集画面に移行すると、またダイアログが出るようになるはずです。 Version 2.3.2 (2.3.4) - 章が複数あるのに最初の章が削除できない(ボタンが押せない)状態になっていた問題を修正しました Version 2.3.2 (2.3.3) - 「設定タブ」->「バックアップ用データの生成」で生成されたバックアップファイルを起動時に削除するように 場合によってはバックアップファイルがいつまでも残ったままになっているのは気持ちが悪いというお問い合わせがあったので、起動時に消すようにしました。 テンポラリ領域に保存されいてるので、適宜システム側に回収される物なのですけれど、まぁ気になるは気になりますよね。 これの効果を確認するには、「設定アプリ」->「一般」->「iPhone(又はiPad)ストレージ」→右上の虫眼鏡アイコンから「ことせかい」を検索して選択 すると出てくる「書類とデータ」の容量が、「接待タブ」->「バックアップ用データの生成」で「完全バックアップ〜」を作らせると倍くらいに増えると思います。その後、ことせかい を再起動させた後にもう一度「設定アプリ」で「書類とデータ」の容量を確認すると元の値に戻っている、という形で確認することができる……はずです。 - 「Web取込」画面で about:blank が表示されている時(最初に表示されている物で、家のアイコンを押した時にも表示されるURL)は「取り込む」ボタン等を押せないように about:blank で「取り込む」を押すと必ず失敗するんですが、失敗した時に出てくるダイアログで「報告メールを作成」を選んでそのまま「取り込み失敗メール」を送ってくる人が後をたたないのでそもそも「取り込む」ボタンを押せないようにしました。 ついでに、about:blank で押しても意味がないボタン(ホームボタンやブックマークボタン等)も押せないようにしました。 - 小説の編集画面で、任意の章を削除できるように 同時に、章の削除時に確認のダイアログを入れるようにしました。 それで、この章の削除機能なんですが、小説本文の保存形式が結構ややこしい(100章単位でJSONにして圧縮した上でDBに入れている(細切れのデータにしてしまうとiCloud同期側のquota(単位時間辺りのread/write回数)に引っかかる可能性が高まるため、これを回避する事を目的として100章単位での読み書きにしている)ので、一つの章を消すというと、それをほどきながら一つづつページ番号をずらして書き直すという作業が必要になる)ため、バグが出る可能性が高くて、かつ、バグが出るとそれを補正するための方法が(恐らく)無いのであんまりやりたくはなかったのですけれど、何度もそういう事ができると良いというお問い合わせが来るので実装したという物です。 という事で色々テストしてみて欲しいです……(´・ω・`) Version 2.3.1 (2.3.2) - 一部のWebサイトからの読み込み時にエラーしてしまう場合の動作を少し変更 具体的には、JavaScriptを動かさないと読めないWebサイトで、HTTPとしてはホストやパスやクエリ部が変わらないURL("#"以降の部分しか変わらないURL)へのアクセスが次のページとされるアクセスをした場合に、何も読み込めなくなっているという問題があったのですが、これへの対処として、一旦 about:blank を開いた後に該当URLを開き直すという対応を取っています。 この対処では期待通りに動かないWebサイトも無いことはないのですけれど、そもそも以前の状態(about:blank を挟まずに単純に browse() しただけ)では「空」のdocumentが手に入って失敗していたので、それよりはマシかなぁというお話です。(´・ω・`) - 「設定タブ」->「発話設定」に音量(ボリューム)の設定を追加 macOSへの対応中にBGM的に小さな音量で聞く事ができないんだなぁというのに気づいたので。 - 小説本文の取り込みに使う本文部分やらなにやかやを表すデータに forceClickButton という設定値を追加 ボタンを押さないとページの内容が表示できないWebサイト向けに利用されるオプション設定になります。 - 「設定タブ」->「再生が末尾に達した時の動作」で「お気に入りのうち未読の物を再生」か「同じフォルダの小説のうち未読の物を再生」のどちらかが選択されている時に、一つの小説を読み終えた後に別の小説に切り替わらない場合がある問題を修正 これ、別の小説として指定されうる小説(お気に入りに登録されていたり、同じフォルダに入っていたりする小説)の中に、ダウンロードした後に一度も本棚画面を表示していない(開いていない)小説があり、その小説が読み上げられようとした場合に発生していました。 - 「設定タブ」->「再生が末尾に達した時の動作」で「お気に入りのうち未読の物を再生」を選択していた時に、次に読み上げられようとする小説の順番を、画面表示上の上側を優先するように変更 今までは逆向きでした(下側にある物を優先していました)。 - 特定の状態で「Speak」ボタンを連打すると二重に発話される可能性があった問題の一部を修正 「読み上げが最後に達したため次に○○を再生します」と発話している間に「Speak」ボタンを連打すると起こる…… はずなのですけれど、私の所では macOS でないと再現していません。ただ、仕組み上は iOS でも起こり得ると思います。 Version 2.3.0 (2.3.1) - ja_JP locale で「設定タブ」->「最大連続再生時間」で9時間より大きい値を設定すると最大連続再生時間が年単位の時間に設定されてしまう問題を修正 しばらく前に「設定タブ」->「最大連続再生時間」で使われる時間入力用のWidgetを変えた時から起きていた問題かと思われます。 時間周りはlocaleで時差の話が入ったりして面倒くさい事が起こりますね……(´・ω・`) Version 2.3.0 (2.3.0) - 一部のタグを取得できていないWebサイトにおいて、取得できる場合を多くしました FirstPageLink を辿る(本文が無い小説タイトルページなどの)場合にタグを取り損なう(小説タイトルページにはタグがあるけれど小説本文ページにはタグは無い)事が無いように、最初のページを取得するまでに辿ったページのタグは全て保持したままにするようにしました 小説の解説ページにはタグがあるのだけれど、小説の本文ページにはタグが無い場合に、小説の解説ページから取り込もうとしても、小説本文ページのタグが無い事でその「無のタグ」が登録されてしまっていたのを、タグについては発見できた全てを合成した結果を取り込むようにしたという感じです。 ただ、小説家になろう様の場合は小説のタイトルページ(例えば https://ncode.syosetu.com/n3697gk/ )にはタグは無くて、小説情報のページ(この例だと https://ncode.syosetu.com/novelview/infotop/ncode/n3697gk/ )にしかタグが無く、当然小説本文ページ(この例だと https://ncode.syosetu.com/n3697gk/1/ )にもタグは無いので、小説のタイトルページから小説本文ページへ遷移してしまう現状の方式ではタグを取り出す場面が無いんですよね。うーん…… - 「本棚画面」の右上の「順番」辺りで使っている PickerView (ドラムみたいなやつで一つを選択するアレ)を別の形式に変えます PickerView だと長い文字列(「本棚画面」の「順番」なら「最終ダウンロード日時順(フォルダ分類版)」とか)は横幅が狭い端末だと全てが表示できないため、これを別の形式で表示するようにします。 おおよそ動作確認はしたつもりですけれど、場合によってはうまく動かないパターンがありそうな気がしています。 なお、画面の縦幅の方が大きいと下の方に表示領域が余るのをなんとかする方法がよくわからなかったので今の所放置しています。(´・ω・`) - index out of range で強制終了する問題への対応 まだまだみつかるのでちまちまと直しています……(´・ω・`) - 「設定タブ」→「ルビはルビだけ読む」がONの時に「ことせかい 由来のルビ表記のみを対象とする〜」のON/OFFを選択できるように 「設定タブ」→「ルビはルビだけ読む」は、『漢字(ひらがなかカタカナ)』という文字列があった時に、これをルビ表記だと判定します。 これは、小説家になろう様のルビ記法( https://syosetu.com/man/ruby/ )の『なお、ルビを振る文字が漢字であり、かつルビがひらがな、カタカナである場合、「|(縦線)」の入力を省略することが可能です。』の部分に準拠した正しい動作なのですが、まぁ誤動作しますよねわかります。 それで、小説家になろう様のルビ記法を採用していたのは、Version 1.1.46以前は 小説家になろう様 からのダウンロードはテキストファイルの形式でのダウンロードを用いていたため、小説家になろう様のルビ記法に準拠している必要があったためなのですけれど、Version 1.1.47以降ではテキストファイル形式でのダウンロードは行っておらず、HTML上の rubyタグ を『|ルビを振られる文字列(ルビ文字列)』という文字列に変換して取り込んでいるため、その形式のみをルビ文字列として判定してもだいたい大丈夫、という状態になっていると考えられます。 で、ことせかい は「以前できていた事は何もしなければそのまま動作する」という事を基本として実装を書いておりますため、この変更はON/OFF設定として標準は以前の形式(OFF)になっているという形での実装になります。 Version 2.2.5 (2.2.13) - 小説のページを開いた時に、「発話変更設定」「読みの修正」「読み上げ時の間の設定」の中に空文字列に対しての設定があった場合に強制終了してしまう問題を修正 多分、「string index out of range が出ている」とか、「小説のページを開いた時の処理の境界チェックを厳密に〜」といって探していた問題はコレなのではないか、という物をみつけた(今の所得られている情報と同じ箇所で確実に落とす方法をみつけた)ので修正しました。これで string index out of range が無くなればいいなぁ…… - セーフモードからの「開発者に問い合わせる」の場合は、生成されるmailに "safe mode: true" という情報が追加されるように しました。そういう情報は多いに越したことはないので……(´・ω・`) Version 2.2.4 (2.2.12) - 短時間に何度も再起動した場合にセーフモードになるように 前に本棚画面を開いただけで強制終了する問題が発生した事があったり、小説本文を開いた時に強制終了する問題が取り切れていないぽいという問題がある事から、これらの「場合によっては起動してすぐに強制終了してしまう」という問題に対応するためにセーフモードという物を作りました。 現在の設定では30秒の間に3回位再起動を繰り返すとセーフモードが起動します。(セーフモードが起動した時はカウントがリセットされます) セーフモードでは、バックアップの生成、開発者に問い合わせる、通常起動だけができるようにしています。 一応バックアップがあれば後はなんとかならないかなぁというのと、バックアップを「開発者に問い合わせる」で送ってもらえればさらになんとかできないかなぁという気分になる物、という感じです。 Version 2.2.4 (2.2.11) - 小説のページを開いた時の処理の境界チェックを厳密にしました 2.2.3 (2.2.9) で境界チェックを入れたのですが、あまり意味がなかったようで同様のクラッシュが報告されて続けているため、さらに厳密にチェックするようにしたという形です。これでさらに落ちにくくなったはずなのですが、小説本文から発話用のデータに変換する時の動作が少し遅くなっているはずです。 青空文庫の老人と海( https://www.aozora.gr.jp/cards/001847/card57347.html )を「テキトーに分割」しないで1ページとして取り込んだ物がそこそこ長めの文量でルビがそこそこ振ってあって有効な読み替え設定が大量になるため、この小説のページを開いた時の処理が重くなる傾向にあるのでこれで速度を確認しているのですが、まぁそんなに遅くなった気はしないのでとりあえずこの厳密な処理のままにしようと思います。 Version 2.2.4 (2.2.10) - 小説本文画面の右上に設置できる「少し先へ」ボタンのVoiceOver用名称が未設定であった問題を修正 これは、VoiceOver関係なのでVoiceOverをONにしないと確認できません。 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」で「(再生中に)少し進める」ボタンをONにした時に「小説本文画面」で表示されるその「少し進める」ボタンを VoiceOver がONの時に選択すると、以前は「SpeechViewController_SkipForwardButtonTitle」と発話していたはずで、今は「少し先へ」になっているはずです。 - 発話中に別アプリ等の影響で発話が中断した時に動作がおかしくなる問題を修正 これは、発話中に別アプリ(Podcastとか)の影響で発話が中断している時に「設定タブ」->「最大連続再生時間」を超えた場合に、発話が中断しているにも関わらず「最大連続再生時間を超えたので発話を停止する」という意味のアナウンスがされていた、という問題になります。 - 短時間に複数回読み上げ開始の指示が飛んできた場合に、同じ箇所を複数回読み上げる可能性があった部分の一部を回避できるように これ、確認する方法が無いのですが、そのような事ができるとしたらそのような動作になるなぁという事がわかったので、穴を塞いだ、という物になります。 といいますか、特定のBluetoothイヤホンから再生開始を指示した場合に似たような挙動を取るというお問い合わせがありましたので、これで直ると良いなぁという気分的なアレです。 ただ、読み上げ周りの基本的な挙動の修正になっているので、少し気をつけたほうがよさそうな気がしています。 - 「-」が5個以上連続している場合は空白に変換するような読み替え設定を起動時に強制的に追加するように こちらの手元では確認できていないのですが、「------」という感じの「-」が連続している文字列があるとそこで読み上げが終了する場合があるというお問い合わせを何件か受けましたので、そのような挙動を取る端末が増えてきた事が予想されるため、強制的に読み替え設定に潜ませる事にします。 「-----」は何も読み上げられない物のはずなので、実用上は問題が出ないと考えられますため、今のうちに導入しておいて将来的におかしな動作をする端末が発生するのに対応しておくという形です。 Version 2.2.3 (2.2.9) - 「設定タブ」->「SiteInfoを取得し直す」を押した時に、SiteInfoの読み込みの終了を待たずに「アプリ内エラーのお知らせ」に「手動による SiteInfo の読み込みが終了しました」と追加されてしまっていた問題を修正 これ、実際にSiteInfoの再読み込みが終わる前にこのログが追加されてしまうので、文言的におかしな事になっていました。 - 小説の本文に読み替え設定や話者の切り替えを適用する部分の処理で string index out of range が発生しているようなので境界チェックを加えました これ、AppStoreConnect に寄せられていたエラーなのですけれど、うまく再現できないので取り急ぎ入れた処理という物です。 問題の処理は小説を開いた時に開始されるはずなので、(問題を発生させる)小説のページを開こうとするとアプリが落ちる、という挙動になっているはずです。 が、前述の通り再現するための条件がわからないので妄想で対応しています……(´・ω・`) Version 2.2.3 (2.2.8) - 「設定タブ」->「読みの修正」から「読みの修正詳細」に移行する時に、「適用対象」に必ず「全ての小説」がセットされた状態で開いてしまう問題を修正 「読みの修正詳細」が保存されるのは「保存する」を押した時だけ(のはず)なので、確認しようとした時に「全ての小説」についてセットされているように見えてしまうけれど実際はそのようには設定されていない、というような事が起こっていました。 - お気に入りに登録された小説を削除した時にお気に入りリストにゴミ(削除したはずの小説のID)が残る場合があった問題を修正 UI的にはこれは起こらないはずです(お気に入りに登録されている小説は削除できないはずなので)。ただ、データの操作としてはあり得るので削除時にお気に入りの状態を確認してお気に入りのリストから消すようにしました。 そのため、小説の削除時の動作が少し変わっています。 - 「設定タブ」->「読みの修正」->「読みの修正詳細」にて「読み替え前」か「読み替え後」のどちらか又は両方を空欄にした状態で「発音テスト」か「保存する」を選択した後に、「読み替え前」と「読み替え後」の両方に1文字以上を入力し、「発音テスト」か「保存する」を選択した時に初回の時と同じエラー(「〜に問題があります」というエラー)が出てしまう問題を修正 この辺りは色々と問題が残り続けてますね……(´・ω・`) Version 2.2.2 (2.2.7) - 読み上げ位置が不正な値になっている小説がある場合に、本棚画面で強制終了する可能性があった問題を修正 これを踏み抜くと起動時に強制終了するようになっていました。 - 上記の問題に関連して、NaN を Int に変換しようとしかねない部分を目視で確認して排除しました Swift って NaN を Int に変換しようとすると Fatal Error で強制終了するのですね…… しかも "\(xxx)" というような形で文字列の中でFloatを展開しようとするとIntに変換しようとするパターンがあるっぽくて今回の問題はそれが引き金でNaNはIntに変換できないので Fatal Error ですよと強制終了されていました。('A`)マァ0デジョサンシタワタシモワルインデスガ Version 2.2.2 (2.2.6) - Web取込等での仮読み込み中のタイトル部分に削除ボタンを常設します - Web取込等での仮読み込み中のタイトル部分をタップした時、全てが選択状態になるようにします - 「設定タブ」->「新規自作小説の追加」で小説を追加しようとしている時や小説本文の編集中の画面において、小説名部分に削除ボタンを常設します - 「設定タブ」->「新規自作小説の追加」で小説を追加しようとしている時や小説本文の編集中の画面において、小説名部分を編集しようとタップした時には全てが選択状態になるようにします - 「設定タブ」->「発話設定」の「速度設定を同期する」のON/OFFは、アプリが終了するまでは状態を保存するように 「設定タブ」->「発話設定」で「速度設定を同期する」をOFFにした後に「設定」に戻ってもう一度「発話設定」を開いた場合、今までは「速度設定を同期する」はONに戻っていましたが、これがOFFのままになるようになります。 なお、これは保存されるわけではないので、アプリが再起動した後は(以前がOFFでもONでも)ONになります。 これ、現在の設定のように再起動するとONに戻るタイプ以外に、端末固有設定にして再起動しても設定を覚えているけれど、iCloud同期はされないタイプと、iCloud同期もするタイプの3種類の実装方法が考えられるんですが、この設定程度でiCloud同期が走ってしまうのも何かなーというのと、端末固有設定にするのはそれはそれで何故iCloud同期はしないのか、という事になりそうな気がしてしまって、再起動でONに戻る程度の物にとりあえずしてみたのですけれど、どうなんだろうこれ…… 再起動でONに戻るってのは期待されていない動作な気もするし……うーん…… あと、再起動でONに戻る位の設定項目であれば、バックアップファイル内に書き出されない(現在はこの書き出されない)設定になっていてもおかしくなさそうですけれど、端末固有設定にするにしろiCloud同期するにしろ、保存される設定に昇格(?)した場合はバックアップファイル内に書き出されないのはおかしいですよねぇ。……って、あー。つまり、私はその部分の作業がめんどくさく感じる位には重要ではない設定項目だと思っているわけか。なるほど…… と、いうことでとりあえずの所は『めんどくさいので再起動でONに戻る程度の物にしました!』という事にします。 - 「Web検索タブ」の検索条件をいれているシーンで、ON/OFF設定ができる検索設定において、表示される項目名が省略されてしまう場合があった問題を修正 iPhone系列の横幅に制限のある端末で、「Web検索タブ」で「novelba」等のON/OFF設定ができる検索設定の物の項目名が省略されてしまっていたのを、複数行表示できるようにしました。 - 「設定タブ」->「発話変更設定」の「開始文字」や「終了文字」を空にした直後の日本語入力の1文字目がうまく動かなくなる問題を修正 これ、空文字列は駄目ですよという事で赤色にして警告を発する部分が問題で発生するのですけれど、直し方(1文字目が変にならないようにする)方法がわからなかったので、単に警告を出さないようにして、空文字列だと表示される placeholder に「空文字列は駄目ですよ」というのを設定しました。 - 「設定タブ」->「自作フォルダを編集する」で設定した順番が「本棚画面」に反映されていなかった問題を修正 何故順番を入れ替えられるように編集画面を作っておきながら本棚画面に反映していなかったのだ過去の私は…… - シェアメニューからファイルを「ことせかい」に渡した時に、正常に読み込めない場合がある(何も起こらない場合がある)問題を修正 セキュアファイルの概念の取り扱いがうまく行っていませんでした。(´・ω・`) おそらく、.txt, .pdf, .rtf, .rtfd のそれぞれのファイルは読み込めない場合がありました。 再現するのは多分…… 1. http://www.kurims.kyoto-u.ac.jp/~kyodo/kokyuroku/contents/pdf/1426-24.pdf を Safari で開く 2. シェアボタン(四角から上向きの矢印が出ている奴)を押して、「"ファイル"に保存」を選択 3. テキトーな場所に保存(自分は「iCloud Drive/ダウンロード」にしました) 4. 「ファイル」アプリを起動して 3. で保存したファイルを開く 5. シェアボタンから、色のついたアイコンの欄(無ければ一番右側の「その他」の中)から「ことせかい」を選択 6. 仮読み込み画面が表示されるか否かを確認する(失敗すると「PDFのテキスト読み込みに失敗」といったような内容のダイアログが出るはず) という形で確認できそうな気がします。(なお、.pdf だとエラーした時にダイアログが出ますが、.txt だとエラーも何も出ないはずです) - 「設定タブ」->「開発者に問い合わせる」を停止できるようにする準備をしました 今の所は停止する形にはしていないため、特に何の変化も無いはずです。 - ダウンロード中に一つ前のページの内容とと全く同じページの内容であった場合にはエラーとしてダウンロードを停止するように pixiv小説様はよくHTMLの構造が変わるんですけれど、次のページへのボタン等が同じ小説のタイトル部分へのリンクになっていたりして、そのリンクを辿ると最初のページにたどり着いてしまい、延々と同じページが読み込まれ続けるという残念な事になるという事が発生していたのを回避するための仕組みになります。 - 発話中の「少し巻き戻し」「少し先へ進める」を行った時に落ちているかもしれない問題に対処 リリースされている物のクラッシュログからすると、この部分でThreadがおかしいという事で落ちている場合が結構あるようなので、強制的にMainThreadのみで動くようにしてみます。 Version 2.2.1 (2.2.3) - Version 2.* で作成したバックアップファイルからの復元時に「読みの修正」と「発話変更設定」が復元できない問題を修正 バックアップ関連で似たような問題は出ないように精査しましたけれども、この手のミスはいくつかありそうだなぁ……(´・ω・`) Version 2.2.1 (2.2.2) - 本棚でのVoiceOver対応を少し強化 今まではVoiceOverを使っている状態ではお気に入りボタン当たりをタップした時に「likestar ボタン(りけすたー、ぼたん)」とか「notlikestar ボタン(のとりけすたー、ぼたん)」と読み上げられていたりしたので、それらを読み上げられないようにしたり、 フォルダは「〜フォルダ」と言ったり、 小説名の後ろに栞の位置のパーセンテージを読み上げるようにしたりといった対応が入っています。 - 「設定タブ」->「読みの修正」で「+」を押した時に作られる読みの修正の対象小説の初期値が空になっていたものを、「全ての小説」に変更 またなにやら長い文字列になっちゃいましたけれど、「設定タブ」->「読みの修正」->「+」で新しい読み替え設定を追加しようとした時に、「読み替え前」と「読み替え後」をいれた後に「保存する」とやると「適用対象の小説が何もない〜」と言われてしまうので、いちいち「全ての小説」を対象に加えないと駄目になっていて面倒くさいという指摘がありましたので。 というか何故こんな仕様にしていたんだ過去の私は…… 使いにくいだろう…… Version 2.2.0 (2.2.0) - 「設定タブ」->「小説本文画面での左右スワイプでページめくりができるようにする」のON/OFF設定を追加 - 「設定タブ」のタブ側(?)に「!」がついている時に、「!」のついている「開発者からのお知らせ」や「アプリ内エラーのお知らせ」を開いてもタブ側の「!」が消えなかった問題を修正 これ、発生条件が複雑なのでよくわからない言い回しになっているんですが、Version 2.1.0 では例えば 1. 「設定タブ」->「SiteInfoを取得し直す」をタップ (SiteInfoを取得し終わったというログが出るので「設定タブ」と「アプリ内エラーのお知らせ」に「!」がつく) 2. 「設定タブ」->「アプリ内エラーのお知らせ」をタップ(「アプリ内エラーのお知らせ」についた「!」は消えるけれど、「設定タブ」側の「!」は消えない) という事が起こっていたのですが、「設定タブ」側の「!」も消えるようにした、というものです。 - 起動時に「設定タブ」->「開発者からのお知らせ」に新しいお知らせがあった時、「設定タブ」側には「!」がつくけれど、「設定タブ」->「開発者からのお知らせ」には「!」がつかない場合があった問題を修正 こちらも条件が厳しいというか多分今は試せない(開発者からのお知らせが無いので「!」がつく事がない)のですが、そのような状態になっていたのを修正しています。 (最初に「設定タブ」を開いた時に、「設定タブ」->「開発者からのお知らせ」に「!」がつかないのですが、その画面でスクロールして「開発者からのお知らせ」を画面外に出してから、またスクロールして「開発者からのお知らせ」を画面内に入れると「!」がついている、という挙動をとっていました) - URLに日本語等の URL encode されそうな文字の含まれる小説が開けなくなる(または開いても本文が読めなくなる)問題を修正 例えばこの小説 https://dyreitou.com/%e5%be%8c%e6%97%a5%e8%ab%87%e2%91%a0 がその問題を踏み抜きます。 Version 2.1.0 (2.1.3) - iCloud同期の ON/OFF 時やバックアップへの書き出し時に「設定タブ」->「小説本文表示画面の設定」の「行間」と「設定タブ」->「読み上げ停止後に再開する場合にその旨を告知する」の設定が移行されなかったり書き出されなかった問題を修正 これら、追加した時にバックアップファイルやiCloud同期のON/OFFでのコピー周りに設定するのを忘れていました……(´・ω・`)スミマセン Version 2.1.0 (2.1.2) - 再生中のロック画面やコントロールセンターでのアイコン画像が壊れていたのを修正 この手のアイコン変えた事による画像周りの問題はまだまだ見落としがありそうで怖いです…… テスターさん達本当に助かります。監視の目素晴らしすぎます。ありがとうございます。 Version 2.1.0 (2.1.1) - ダークモードにしているなど、小説本文画面の文字の色が黒以外になっている場合に、小説本文画面での小説の文字の色が黒になってしまう(他のタブに切り替えてから戻ると直る)問題を修正 これはこのまま出していたらダークモードの方々からボッコボコにされる所でした。ありがとうございます。恐ろしいおそろしい…… - 全ての小説の更新確認を行うなどで小説のダウンロードインジケータが表示されている時に、ダウンロードが停止されてもそのインジケータだけは消えない問題を修正 これを手軽に確認するには、 1. 同じWebサイトからそこそこの量(3つ以上位?)のWeb取込をした小説を用意する 2. 「設定タブ」->「本棚画面の右上に表示されるボタン群の編集」で「実行中の全てのダウンロードを止める」をONにする 3. 本棚画面で全ての小説の更新確認を行わせて、小説名の右側にダウンロードインジケータが表示された所で 2. で登録した「実行中の全てのダウンロードを止める」を押してダウンロードを停止させる という手順で確認できます。 これ、「設定タブ」->「小説の自動更新」をONにしていて、ことせかい が使われていない時にその「小説の自動更新」が実行されて、30秒から5分のタイミリミットが来て実行が中断された場合にも同じ現象が起きて、「ダウンロードしていないはずなのにダウンロードのインジケータが出ててる」みたいな事になっていたはずです。 Version 2.1.0 (2.1.0) - ことせかい のアイコンを変更しました。 Mattz-P様、ありがとうございます!ヾ(*´∀`*)ノ https://github.com/limura/NovelSpeaker/discussions/128 - 「設定タブ」の「発話設定」や「発話変更設定」「読みの修正」「読み上げ時の間の設定」のいづれかを全て消すと再起動時に初期値が入力される問題を修正 - 「設定タブ」->「読みの修正」->「読みの修正詳細」で一番上の「読み替え前」とその一つ下の「読み替え後」に日本語モードで何らかの日本語文字の入力を行い、入力欄右側の「x」ボタンを押して全てを消した後にもう一度何らかの日本語文字を入力しようとすると、最初の1文字が変換候補から外れる、という問題を修正 これ、入力値が空だと赤い文字に変更して「駄目ですよー」と表示している辺りが悪いようなのですが、直し方がわからなかったので、確定する時までは入力値の評価はしないようにして回避(確定している時は入力モードになっていないのでこの問題は発生しない)しました。 - 「小説の詳細」画面で小説名や作者名をタップした時に、それぞれをコピーした上で編集メニューが出るように コピーするだけであればタップ数は変わっていないはず(以前は「コピーしました」というダイアログが出て「OK」を押す必要があった)で、編集することもできるようにした、という形になっているはずです。 - SiteInfoの読み込みに失敗した場合、「アプリ内エラーのお知らせ」にお知らせを出すように なにやら二人から「本文以外が読み込まれた」と問い合わせてこられたので、恐らくは SiteInfo の読み込みに失敗している方が発生しているようだと判断しました。 SiteInfoの読み込みに失敗しますと、小説の本文部分の定義が無い状態になって、全ての文字を取り込もうとしますため、「本文以外が読み込まれる」事になります。という事でSiteInfoの読み込みに失敗した時にはエラーメッセージを出すようにしています。(エラーメッセージには「SiteInfoを読み直す」を押せという追記を出すようにしました) - 「設定タブ」に「普段は使う必要の無いもの」というセクションを追加 - 「設定タブ」->「普段は使う必要の無いもの」に「内部データ参照用URLの設定」「SiteInfoを読み直す」「Web検索タブの検索データを読み直す」を移動 「SiteInfoを読み直す」は普段は押す必要が無いため今まではデバッグ用メニューにあったのですけれど、上記の理由で外に出します。「Web検索タブの検索データを読み直す」も同様の理由で外だししておきます。 - 発話中の「少し先へ進む」「少し前へ戻す」「早送り」「巻き戻し」のそれぞれが機能しなくなっていた問題を修正 これら、一旦発話を停止させたのをしっかり待つようにしたのの影響で反応がもっさりになっちゃったんですよね。(´・ω・`) - 「設定タブ」->「本棚画面の右上に表示されるボタン群の編集」に「実行中の全てのダウンロードを止める」を追加 - 「設定タブ」に「読み上げ停止後に再開する場合にその旨を告知する」のON/OFF設定を追加 - 「設定タブ」->「小説本文表示画面の設定」に「行間」のスライダを追加 Version 2.0.1 (2.0.22) - Safariからの取り込みの時に「Web取込タブで試す」を押してもWeb取込タブでそのURLが開かない場合があった問題を修正 具体的には、「Web取込」タブが開かれている状態で、Safariから取り込み操作(シェアメニューから「ことせかい へ読み込む」を選択)を行い、仮読み込み後のメニューで「Web取込タブで試す(失敗した場合用)」を押しても「Web取込」タブの内容がそのURLに変化しない、という問題でした。 - Web取込時に一部のルビ表記をルビとして認識せずに取り込んでしまう事がある問題を修正 具体的には、 という文字列しか確認していなかったので、 というような形で書かれた ruby をみのがしていたという問題と、複数行にまたがる も見逃していたという問題の2点の修正になります。 例としては、https://www.pixiv.net/novel/show.php?id=14577122 の2ページ目の後ろから3段落目にある「|被害(リスク)」や「|保身(リスクマネジメント)」当たりがその問題を踏み抜いています。 - 「設定タブ」→「内部データ参照用URLの設定」で「Web検索タブ用ヒント情報」に値を書き入れると「標準の読み替え設定」側の値が書き換わってしまう問題を修正 - Version 1.* から Version 2.0.0 へのアップデート時に「小説の章の順番がめちゃくちゃになる」という問題を修正 これは致命的なので特急申請にかけます('A`) Version 2.0.0 (2.0.21) - Version 1.* から 2.* へ移行する時に、「iOS 12 で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する」の設定を強制的に OFF にしておらず、Version 1.* で設定されていた値を引き継いでいたので強制的にOFFにするようにします 2.0.20 の目的完遂してないじゃないですかやだー('A`) <ちゃんと確認しような俺? Version 2.0.0 (2.0.20) - 「設定タブ」->「iOS 12 で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する」をデバッグ用メニュー側に移動 もう必要無いと思うのに、謎の理由ONにして(たまたま聞くことが出来た人に聞いたら「よくわからないけれどONにしても問題なかったから」という理由で絶望ました)、ある日「あるふぁあるふぁ言うようになりました直して下さい」って言われるのに辟易しているのですが、ことせかい は iOS 10 以上で動作するので、iOS 12 で使っている人も居るわけで、オプションとしては削らない方が良いよなぁという事で残していたのですが、前述のような謎の理由でONにして問い合わせをしてくる人がまだまだ現れるので、そういう問題が起こりにくい場所に移動します。 この修正は Version 2.* に移行する時に同時にやったほうがよさそうな気がしましたのでこのタイミングで入れます。 (Version 1.* から Version 2.* へデータ移行する時にはこのオプションは移行されずにOFFとして移行されるので、このタイミングだと皆 OFF になって Version 2.* に移行される、という効果になるはずです) なおデバッグ用メニューは「設定タブ」で「ルビはルビだけ読む」を10回位ON/OFFすると一番下の方に出てきます。 Version 2.0.0 (2.0.19) - Web取込 の初期状態で表示されるリストの中に、上記の「はじめに(ことせかい の使い方)」へのリンクを追加しました。 これで、本棚から消してしまっても一応読み込めます。 なお、初期状態で表示される物は固定されている物(今回追加した物やサポートサイトへのリンク、Web取込機能の使い方、の3つ)と、それ以外の物に分かれていて、固定されていない物はブックマークとして登録されているので削除する事が可能な物になります。 - 初期状態(や Version 1.* から 2.* に更新した時)に本棚に登録される「はじめに(ことせかい の使い方)」のURLを変更 具体的には https://limura.github.io/NovelSpeaker/topics/00001.html から、https://limura.github.io/NovelSpeaker/topics/jp/00001.html (途中に /jp/ が入った方が新しい方)に変えました。 で、l10nの機能を使って英語環境の時は https://limura.github.io/NovelSpeaker/topics/en/00001.html を読み込ませるようにしました(ただ、今現在は日本語の内容になっています。リリースまでに整備しないと駄目ですね)。 ということで、Version 2.0.0 (2.0.18) 以前に読み込まれた「はじめに(ことせかい の使い方)」は存在しないURLになってしまいます。 これを補正する方法は提供していませんため、お手数をおかけしてしまって申し訳ありませんが、本棚から「はじめに(ことせかい の使い方)」を削除した上で、 改めてWeb取込ページから「はじめに(ことせかい の使い方)」を取り込む事で、今後の「はじめに(ことせかい の使い方)」の更新を取得できるようにしておいて頂けますと幸いです。 - 読み上げ中に落ちる事がある場合があった問題の一部に対処 読み上げ位置表示をするために、現在位置を計算している部分で、「無限かNaNをIntにしようとした」で落ちている部分があったので落ちないように修正したのですが、どうして発生するのかがよくわかっていないのでそのような原因になる元がわからず、落ちなくなったとしても読み上げ位置表示がおかしくなる事がありそうな気がします。 Version 2.0.0 (2.0.18) - 発話しようとした時に発話できない時がある問題の一部を回避できそうな仕組みを導入 正確には、発話を停止させた時にエラーが発生していて、そのエラーが原因で発話できなくなっている場合に対応した、という物になります。 具体的には発話停止時のエラーを受けて発話用の AVSpeechSynthesizer object を作り直す事で次回以降の発話が失敗しないようにしています。 なので、「『Speak』を押しても発話できなくなった時に、『設定タブ』->『発話設定』で『発音テスト』をした時は発話が成功する」場合の「『Speak』を押しても発話できなくなった」問題は解消しますが、それ以外の「『Speak』を押しても発話できなくなった」問題は解消できません。 ただ、発話を止めると必ずと言って良い程上記と同じエラーが発生するため、ほぼ毎回 AVSpeechSynthesizer を作り直す事になっています。 なのですけれど、そのほとんどは無視しても問題が無い別のエラーのようで、今までは単に無視していたのです。 そのため、発話(の停止)周りでの動作が少し変わっている事になるため、この修正の影響範囲は大きそうです。 - Web取込タブで画像を長押しして「"写真"に追加」を選ぶとクラッシュする問題に対応 Version 1.1.72 (1.1.156) への修正と同じ物です。 盲点でした。(´・ω・`) iOS 11 以降で発生していた問題のようです。https://qiita.com/Takumi_Mori/items/ce58f3978cfa93302b72 Version 2.0.0 (2.0.17) - 「設定タブ」->「読み上げ時の間の設定」で、「<改行>」を含む文字列を新しく生成した時に改行文字に変更されていなかった問題を修正 全く気づいていませんでした。本当に助かりました。ありがとうございます。 - 読み上げの間の設定が変化した時にそれが即時に反映されない問題を修正 「設定タブ」->「読み上げ時の間の設定」で値を変更したりした時に、小説を開き直さないとそれが反映されなかったはずです。 上記の問題を確認中に発見しました。いいかげんこういうのも含めてテストを書きたいんですけれどUIが絡むとどう書いたら良いのかを学習していないのですよね。調べる所からかしらん……(´・ω・`) Version 2.0.0 (2.0.16) - iCloud同期をしていない場合でも、小説本文画面下部のスライドバーでページ切り替えを沢山行うと「他端末で更新された **章 へ移動」というフローティングボタンが表示されていた場合があった問題の一部を解消 自前での変更ではイベントが発生しないようにしていたのですが、多分使っているライブラリ側の問題でイベントが発生してしまっているようなので、イベントを発生させそうな場合には時間を記録しておいて、その時間より1.5秒以内であればイベント発生を無視するような事をしています。 なので、本当に他の端末でもページ切り替えがされていて、それとほぼ同時に自端末でもページ切り替えをしていた、というような場合にはフローティングボタンが出ないという問題は発生しますが、1.5秒以内にどちらでも操作したのなら出ないでも良いでしょうという考えです。 - 小説本文の編集画面の前の章・次の章へのボタンにVoiceOver用テキストを設定 - ネットワーク未接続の時にWeb検索タブを開くと落ちていた問題を修正 - 一部のエラーメッセージが正しく表示されていなかった問題を修正 SloppyError.1 や Erik.ErikErrorエラー4 といったようなエラーメッセージのような、番号だけで何が何だかよくわからない物が出ていた所について、より情報が多めな形に修正されます。 - Version 1.1.72 (1.1.155) で導入した HTML から文字列へ変換する時に img も排除する仕組みをこちらにも適用しました もう少し詳しく書くと、今までは HTML から iframe, link, meta, noscript, head, title を排除してから文字列に変換していたのを、それらに加えて img も排除してから文字列に変換するようにした、という形になります。 img は alt が文字列にできないかな(単純にはできないぽいです)と思っていたので残しておいたのですが、残しておくと悪影響があるのでは仕方がないという判断になります。 Version 2.0.0 (2.0.15) - 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」に「(再生中に)少し巻き戻す」「(再生中に)少し進める」ボタンの設定を追加 この機能は今まではコントロールセンターからしか使えなかった物で、あると少し便利だけれど、使わない人は使わないし常に表示されるのも何だし、という感じであったのですけれど、小説本文画面の右上にボタンを追加してもON/OFFで非表示にできるようになったのでという事で、標準でOFF(非表示)という形で追加しました。 - 「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」で表示されている「Web取り込みタブで開く」のアイコンが灰色固定であったのを青色にして他のアイコンの色と揃えました。 これ、このアイコンだけは内部に保存されている画像で、それ以外のアイコンはシステム側が用意してくれているフォントなんですよ。なので画像そのものの色になっていたのでした。 それで、ダークモードにすると黒背景に灰色で何だかよくわからない物になっていたので色を青で固定にしました。 - Web取込タブでのブックマークに、「アルファポリス(Web取込 非対応サイトになりました。詳細はサポートサイト下部にありますQ&Aを御覧ください)」というタイトルで、https://www.alphapolis.co.jp/novel/ へのブックマークがあった場合、「アルファポリス」というタイトルに修正するように これ、 1. Version 1.* から 2.0.0 に移行する時 2. Version 1.* のバックアップファイルを 2.0.0 に適用した時 3. Version 2.0.0 で、ブックマークが表示された時にそのようなブックマークが保存されていた時 のそれぞれについて、保存されるデータを書き換える、という実装にしました。 なので、『アルファポリス https://www.alphapolis.co.jp/novel/ を Web取込タブ でブックマークする時に「アルファポリス(Web取込 非対応サイトになりました。詳細はサポートサイト下部にありますQ&Aを御覧ください)」タイトルにしてブックマークすると何故か「アルファポリス」という名前に変更されてしまいます』という不都合として報告され…… るのはさすがに無いですよね(´・ω・`)ビビリスギデスヨネ... Version 2.0.0 (2.0.14) - 再生中にオーディオの出力先が切り替わるタイミングでクラッシュする問題(の、多分一部)を修正 オーディオの出力先が変わった時に落ちる問題(バックグラウンド再生中?にBluetooth周りがON/OFFした時にクラッシュしたという奴とか)で、多分これかな?というのを発見したので対処しました。 のですけれど、これ多分似たような問題がありそうな気がしています(原理的には静的解析では発見できないのと、人間が確認するのでは穴がありすぎるので実行時にクラッシュするのを確認してからその部分を精査する方法が良さそうな気がするという意味で)。 ということで、突然落ちる系の問題でクラッシュレポートが上がってきているのについて確認してみたところ、この問題と似た形でのクラッシュレポートは確認できませんでしたので多分きっと同様の問題があったとしても踏み抜きにくい箇所かなぁという気がします(でなければクラッシュレポートが上がっていないだけでクラッシュしている……?)。 Version 2.0.0 (2.0.13) - 「設定タブ」→「本棚に栞の位置を表示する」がOFFの時でも、スクロールするなどしていると栞の位置が表示される瞬間があった問題を修正 全く気づいていませんでした。ありがとうございますー。ヾ(*´∀`*)ノタスカリマス- - 本棚画面の「順番」が「最終ダウンロード日時順」や「最終ダウンロード日時順(フォルダ分類版)」になっている時に、ダウンロードされた物が新しく発生した後に表示順が更新されていなかった問題を修正 これも全く気づいていませんでした。本当にこういうチェック漏れを指摘していただけるのは助かります。ありがとうございます。 なお、複数のWebサイト様からのダウンロードを並列処理している状態で、かつ、それぞれのダウンロード中の小説が長編で末尾までダウンロードが終わっておらず、かつ、現在ダウンロード中の小説を開いていない場合、そのダウンロード中の小説が更新されたと判断されるのは100ページ分の区切りになる所までをダウンロードした直後になります。 例えば200ページまである小説の50ページ目まで読み込まれており、その小説をダウンロードし始めたとすると、100ページ目のダウンロードが終わった時(だいたい50*1.1秒で55秒後位)に最終ダウンロード日時が更新される事になるため、ダウンロードが開始されてから結構待たされた後に位置が更新されるような挙動になる事があります。 まぁ、それ以外の条件(一つのWebサイト様からだけしかダウンロードしていなかったり、ダウンロード中の小説が1ページ位しか更新されていないのですぐにダウンロードが終了したり、そもそも更新されていなかったのですぐに次の小説にダウンロードが移行したりした瞬間など)が成立すると、ダウンロード状態が更新されるので再表示が実行されるわけなのですが…… 書いていて条件意味わからんなーという感じですね。はい。 これは、データ更新の回数が増えるとiCloud同期でのquota(単位時間あたりのリクエスト数の制限)に引っかかるので、それを回避しようとデータの書き込み頻度を落とそうとしているのが原因なわけです。(´・ω・`) Version 2.0.0 (2.0.12) - 本棚画面の「順番」で「タグ順」を選択した時のリスト生成を高速化 恐らくは、タグと小説の数がある程度以上多かった場合に、起動時にタグ順用のフォルダを生成するためにかかる時間が長すぎて起動できない(起動直後に10秒位画面の更新ができない状態に陥るとOS側から殺されるため、それによって殺される)場合があったはずです(というかテスト用のデータを使った手元のiPad miniではそうなっていました)。 - Web取込に失敗した時で、本文が無かった場合などで選択項目として現れる「取り込み失敗レポートmail」を送信する時に添付されるJSONの中身を本文側に移動 送信される情報が見えていた方が良さそうというのと、JSON内 に URL を含ませると "/" がescapeされて "\/" になってしまって使いづらかったので。 なお、ついでにアプリバージョンやiOSバージョン等の情報も付記するようにしました。 - 「設定」->「開発者に問い合わせる」で「新機能のご提案・その他のお問い合わせ」を選択した時に送信されるmailに添付される情報を少し追加 こちらでもアプリバージョンやiOSバージョン等を付記するようにします。 Version 2.0.0 (2.0.11) - 本棚画面で小説を削除した時、色々と動作がおかしくなる問題に対処 Version 2.0.0 (2.0.10) で入れた修正が原因で、本棚画面で小説を削除した時に、「画面に表示されている小説やフォルダ名の配置と、実際にタップされた時に反応する小説やフォルダの位置がずれる」という事が起こっていて、目的の小説やフォルダが開けなかったりする事がありました。 で、これをきれいに修正する方法がぱっと思いつかないというかわからなかったので、暫定的に小説を削除した時は「全てのデータを読み直して表示しなおす」という事をしています。 ということでチラついた感じになったり、開いていたフォルダが閉じてしまったりします。(´・ω・`) Version 2.0.0 (2.0.10) - お気に入り度合いの扱いを変更します 「お気に入り」は「お気に入りにしている」か「お気に入りにしていない」の二つの状態だけにして、「お気に入り度合い」という概念はなくしました。 代わりに、「お気に入り順」という概念を追加して、そのお気に入りの順番を「設定タブ」->「お気に入り順を編集する」で編集できるようにしました。 多分こちらの方が順番を制御するのはやりやすいと思われます。 なお、この修正で内部データベースの構造を変えたため、一度でもこのバージョン(Version 2.0.0 (2.0.10))で起動すると、データベースの更新が入って古いバージョンのデータベース定義では動作しなくなります。 つまり、一度でもこのバージョン(Version 2.0.0 (2.0.10))起動した後では、それよりも前のバージョン(Version 2.0.0(2.0.9)とか)では読み込めなくなるため、それら前のバージョンをTestFlight経由でダウンロードしてから起動すると、データベース不整合で強制終了するようになります(と、いうとエラーメッセージ位は出したほうがよさそうな気もするのですが、AppStore経由ではそれは発生しないはずなのでエラーメッセージを出す部分を作る意味はあまりなさそうに思っています)。 また、iCloud同期 で共有される情報も同様に Version 2.0.0 (2.0.10) 以降で更新を行った後に Version 2.0.0 (2.0.9)以前 の物で読み出そうとすると「iCloud同期を利用し続けるならアップデートするように」と促すダイアログが出るようになるはずです。 内部データベースの構造を更新するのは色々影響が大きいのであんまりやりたくない感じの物なのですが、iCloud周りについては通常のAppStoreでの配信でも同様の問題が発生する可能性はありますため、それが故にβテストの段階で一度は経験しておいた方がよさそうだなぁということで、実行することにしました。 - 本棚画面の順番でフォルダ分けされる順番(例えば自作フォルダ順等)で小説を削除しようとした時に強制終了する問題を修正 - Version 1.* から 2.0.0 への移行処理中で、小説本文部分が不正な値として移行されてしまう場合があった問題を修正 これは、Version 2.0.0 (2.0.5) から 2.0.0 (2.0.9) までで発生していた問題になります。 また、残念なことに不正な値として保存されてしまった小説については、再度ダウンロードしようとすると最初からダウンロードし直しになるという問題があり、一度この状態になってしまった小説について自動で修正する方法はありません(少なくとも現時点ではその機能を提供していません)。つまりこの修正は問題が起こった小説を直すものではなく、Version 1.* から Version 2.0.0 へ移行する時に正しい値として保存されるようにした物になります。 現時点でこれを直すとすると、一旦 ことせかい を削除(つまりデータを全て飛ば)してから Version 2.0.0 を再度インストールして、(保存しているであろう)完全バックアップを適用する、というのが良さそうな気がします。 なお、この問題が発生する小説は、Version 1.* の時点で小説のページ数が101ページ以上あった物になります。 - Web検索画面で強制終了する可能性のあった問題を一部修正 一つは潰しましたが、第2第3の強制終了が襲ってくる可能性はあります(´・ω・`) Version 2.0.0 (2.0.9) - 「読み上げ時の間の仕組み」が「標準型」になっていると、読み替え設定された文字の直前と直後に間が開くようになってしまっていた問題を修正 全く気づいていませんでした……(´・ω・`)スミマセン Version 2.0.0 (2.0.8) - 設定タブ->起動時に前回開いていた小説を開く が OFF の場合で、かつ、起動時に本棚画面の順番がフォルダ付きの物だった場合に「続きから再生するフローティングボタン」が消えてしまう場合がある問題を修正 - 本棚画面のフォルダ開閉ボタンのアイコンが逆になる事がある問題を修正 恐らく、以下の条件のいづれかで発生していたはずです - フォルダ分け形式が選択されている場合、起動時に逆になっていた - フォルダを開く(全てのフォルダが閉じている)状態で「順番」で別のフォルダ分けされている物に設定した場合 何か別の要因でまたずれる事がありそうな気がする……(フォルダが開いたり閉じたり時にアニメーションしていて、その表示が反映される前に状態を確認して開閉ボタンのアイコンを決めていた、という問題を修正しただけなので、何か別の要因が隠れていると駄目です) - 本棚画面と小説本文画面のボタンについて、VoiceOverで選択した時の読み上げ文字を設定 対応抜けがまだありそうな予感がするのですけれど、VoiceOver で確認するのが面倒くさいというか、VoiceOver でスクロールってどうやるんですか未だにわからない……(´・ω・`) - iCloudを使う時に使ってるライブラリの Busy loop しそうな所にwaitを潜ませました 時々何をするにも重くなる原因が多分これ?という気がしてきたのでしばらく様子見します。 - 「設定タブ」->「開発者に問い合わせる」で不都合報告を送る場合、生成されるmailに iCloud同期 をONにしているか否かと、小説の自動更新をONにしているか否か、の情報を含めるように iCloud同期のON/OFFと小説の自動更新の設定はバックアップファイルに保存されない情報なので、別途送信する形にしてしまいます。 Version 2.0.0 (2.0.7) - 本棚画面のフォルダ開閉時がやたら遅かったので少し高速化しました - 本棚画面のフォルダ開閉時に「現在開閉中ですよ」というダイアログを挟みました 高速化したにしても少しは時間がかかるので、連打すると固まる可能性があったため、ダイアログを挟みつつ、開閉中はボタンを押せなくします。 - 本棚画面のフォルダ開閉ボタンを押しても開閉しない場合があった問題を修正 今までは画面内にフォルダ名が表示された行が無い(画面外の上下に幾つか分まで含むかもしれません)時に、フォルダ開閉ボタンを押しても何も起こりませんでした。 - 本棚画面のフォルダ開閉ボタンを押した時にボタンのアイコンが逆向きになっていた問題を修正 Version 2.0.0 (2.0.6) - 本棚画面右上にフォルダ開閉ボタンを追加 iOS 13 以降ではシステム側で提供してくれているアイコンにしているのですが、見た目的にフォルダ開閉に見えないような、そう言われたらそう見えるような、よくわからない感じになっています。 「そうは見えないだろ」と思う人(や思わない人、もっと良いアイコンあるんじゃね?という方)がおられましたら感想を教えて頂けますと幸いです。 - 「設定タブ」->「本棚画面の右上に表示されるボタン群の編集」を追加 本棚画面の機能ボタンも後々増やせるように編集機能もつけました。こちらはOFFにしてある機能を呼び出す方法は今の所(多分今後も)ありません。 Version 2.0.0 (2.0.5) - 大量の小説(というか本文)が保存された Version 1.* から Version 2.0.* への移行手続き中に強制終了する問題に対応 - バックアップファイルやテキストファイル、PDFファイルのシェア先として ことせかい を選択した時にそれらのファイルが読み込めずに失敗する場合があった問題を修正 - 読み上げ中に次の章や次の小説に読み上げが移る場合に 0.5秒 の空白時間を設けました これでページめくり音が鳴っている間位は何も言わなくなるかと思います。 ただこの修正、場合によるとバックグラウンド再生中にページめくりが発生して読み上げが停止して0.5秒待っているタイミングで、OS側から「あ、このアプリ、バックグラウンド中に何もしなくなったな」と動作を止められる可能性があるのでちょっと怖いです。 バックグラウンド再生中に本文と会話文の間で息継ぎするような時間でも止められる場合が結構あるので……(´・ω・`) Version 2.0.0 (2.0.4) - 本棚画面でフォルダ分け(?)された物について、内部に一つしか小説が無い場合でもフォルダ側では「お気に入りボタン」や「栞の位置表示」をしないように 今までは、例えば「順番」を「作者名」にしていて、一つの小説しかダウンロードされていない作者の所では、作者名の行でも「お気に入りボタン」等が表示されていました。逆に、複数の小説をダウンロードしている作者名の所ではそれらは表示されない状態になっています。 この動作は小説の状態が変わった事を監視するのが一つなら大丈夫かなーと思ってやっていたわけですが、フォルダの中にある小説の数で状態が変わるというのはイマイチ変なので、どちらかに統一するのが良いと判断しました。その場合、フォルダの中身が複数の場合に栞の位置表示をどうすべきかが解けないという事と、「お気に入りボタン」で全ての小説を一気にお気に入りにしたり外すというのは多分意図していない……んじゃないかなと思ったため、どちらの場合でもそれらを表示しない、という判断にしました。異論があれば教えて下さい。 なお、「更新有」の表示についてはフォルダ内部に複数の小説があっても一つ以上の小説が「更新有」であれば「更新有」と表示しています(これは以前から変えていません)。 - お気に入りボタンが押された時に、本棚画面を再表示(Relaod)しないように 本棚画面でReloadが走ると、「以前開いていた小説を表示するようにフォルダが開いたり閉じたりする」のですが、お気に入りボタンを押した時にRelaodが走ってしまっていて、開いていたフォルダが閉じるという挙動が「わけわからん」という事になるのでReloadするのはやめました。(というか何故Relaodするようになっていたのかが今となってはよくわからない……何故なんだろう……) Version 2.0.0 (2.0.3) - 本棚画面の順番に「Webサイト順」を追加 Version 2.0.0 (2.0.2) - 本棚画面で小説名の左側の星型のマークをタップして「お気に入り」にした小説に設定される「お気に入り度合い」を 1 から 10 に変更 本棚画面の「順番」で「お気に入り順」にした時は「お気に入り度合い」で順番を決定しているのですが、本棚画面でお気に入り設定した小説は 1 に固定されているため、後から小説本文画面右上の「詳細」から順位を下げるのが難しいという事で、初期値(?)を10とします。 この修正により、Version 2.0.0 (2.0.2) 以前に本棚画面でお気に入り設定した小説と Version 2.0.0 (2.0.2) 以降に本棚画面でお気に入り設定した小説では順位が変わります。 恐らく、リリース後に変更すると大混乱を巻き起こす(多分現時点でも大混乱の人が居そうな)ので早めに対応しておきます。 で、この「10」という値は特に何も考えずに決めているのですけれど、どうなんだろう。何か別の値にした方がよさそうな理由とかありますかね? - 小説の詳細画面に「この小説のURLをシェアする」ボタンを追加 小説本文画面の右上にシェアボタンがあって、それは「設定タブ」->「小説本文画面の右上に表示されるボタン群の編集」で非表示にできたのだけれど、そうした場合に小説の詳細画面(小説本文画面右上の「詳細」から遷移できる画面)にはシェアするためのボタンが無かったため、シェアという機能自体が消えてしまうことになっていたため、追加しました。 Version 2.0.0 (2.0.1) - 設定タブ -> 自作フォルダを編集する で順番を指示しても無視されてしまう問題を修正 Version 2.0.0 (2.0.0) - 内部データベースを CoreData から Realm に変更 ほぼ全ての動作が影響を受けます。初回起動時にデータベースの中身をRealm側に書き換える処理が走ります。これは保存されている小説の数が多いなどの場合にはかなり時間がかかりますので我慢してお待ち下さい(途中で閉じたり強制終了させられると次回起動時に最初からやり直しになるはずです)。 色々と動作が怪しくなったりしそうな気がすごくしますので、安定動作を求める方は導入を見送ったほうが良いです。また、導入された方は少しでも変だなーと思った事がありましたら教えてください。多分それは気づかれていないか気づいていても後回しにしていてそのうち忘れてしまった何かを発見された形になっています。 - ほぼ全てのViewController(画面)をObjective-CからSwiftに書き換え 見た目が変わった部分だけでなく、見た目が変わっていない部分についても変更が加えられているため、以前と同じ動作をしない場合があります。意図的に変えた所などもあるのですが、対応が抜けている部分も多いかと思います。これも同様に気になる部分がありましたら教えてください。 - なろう検索 タブの機能を削除 かねてからの予告通り なろう検索 タブの機能を削除しました。 - 代わりに「Web検索」機能を導入しています。複数のWebサイト様の小説について検索ができるようになっていると思いますが、Webサイト様側の検索機能を勝手に使っている形になるため、Webサイト様側の仕様が変わると動かなくなるような物ですので推奨されるのはWeb取込機能側になります。 とはいえ、存在する機能は使い倒されるのだろうとは思いますので、何か怪しい動きをする場合は教えて頂けますと幸いです。 なお、この機能で検索できるWeb小説サイト様用の設定をここ( https://github.com/limura/NovelSpeaker/blob/gh-pages/data/WebSearchInfo-ja_JP.json )にとりあえず記述しているのですが、ここに現在リストされているWeb小説サイト様は18禁の小説が含まれたりしているのですよね(すべて18禁を謳っているWebサイト様はさすがに入れていませんが、内部で18禁の小説が検索できるWebサイト様が入っていると思います)。対して ことせかい は9歳以上向けなので18禁の小説が見えるのは駄目という事になりそうな気もします。その場合はリストからは外す必要が出てきたりしそうな気がしますが……どうなんだろう。 - 色々な所で Dynamic Type に対応しようとしました 設定アプリ → 一般 → アクセシビリティ → さらに大きな文字 の下部で設定できる文字の大きさを変えると ことせかい 側でも文字のサイズが変わります。 色々と抜けがあると思うので、発見した方はこっそり教えて頂けると嬉しいです。(なお PickerView や DatePickerView 等のドラムを回転させる感じの選択する奴は対応が面倒くさいので対応していませんのでそれについては報告不要です(´・ω・`) - 本文中の長押しメニューに「読み替え後の文字列を確認する」と「この小説用の読み替え辞書へ登録」を追加 - ダウンロード周りの動作を変更 今までは一度に一つのダウンロードしか走らなかったのを、別のホスト(サイト)であれば並列にダウンロードされるように変更しました。加えてダウンロード中の表示を少し変えました。(実際にダウンロードが走っている小説だけ、インジケータがくるくる回って、ダウンロードqueueに入っているけれどまだダウンロードが開始されていないものはインジケータが出るだけになっています) 一つの小説サイト(例えば 小説家になろう様 など)からしかダウンロードされていないような人には効果がありませんが、複数のWebサイトの小説を本棚に登録している人の場合は全体の再ダウンロードをした時に早めに終わるようになると思います。 また、ダウンロードを試みる順番を、最近更新されている(新しい章がダウンロードできた)頻度が高い小説から優先して先にダウンロードを試みるようにしました。 全ての小説の更新確認を行おうとした時により早い段階で更新頻度の高い小説が更新されるようになるはずです。 - 話者関係の設定項目を変更 今までは 設定 → 声質の設定 で行っていたものが、設定 → 発話設定 と、設定 → 発話変更設定 に分割されました。 話者・声色設定 では話者とその声色(ピッチ)の設定をして、そこで設定した話者と声色の設定を、話者変更設定 で使うようになっています。 オマケ的に、話者で外国語話者を選べたり、違う話者を混ぜて設定(本文は O-ren で会話文は Otoya とか)もできるようになります。 ただ、今までは「声質の設定」の項目ででてきたいたものが、「発話設定」側で設定した物を「発話変更設定」で割り当てるという形の2箇所に別れてしまったため、わかりづらくなってしまっているのが気になります。内部データ形式的にこういう形の方がいいかなぁと思って分解してみたんですがそのまま表面に出す事によってわかりづらくなってしまって、それによって「わかりません、もとに戻して下さい」みたいな事になりそうなのがとても恐ろしいので、とりあえず使ってみて、「そう」思ったならそう言って下さい。そういう声が多そうかなと思ったらUI側で昔のような形式に変更して対応しようかなと思います。(´・ω・`) - テキストファイル等の取込時にテキトーに章を分ける機能を追加 シェアボタンから「ことせかい へコピー」で取り込ませる時に、「改行が3連続」であるとか「[[改ページ]]」という文字列があるであるといったテキストであった場合には、その位置を章の分割点としてみなして一つの章ではなく複数の章として読み取るためのボタンを表示するように 青空文庫で使われている[#改ページ]等も分割点としてみなすようにしたので、青空文庫から取り込む場合に良いかもしれません。 この機能用の設定として、「設定」->「テキスト分割文字列の設定」が追加されました。 - 小説毎の専用設定の概念を追加(小説本文表示部右上に「詳細」メニューを追加) - 読みの修正に、個々の小説毎に専用の読みの修正を登録できるような仕組みを導入 読みの修正詳細画面に「適用対象」が追加され、それを選択した先で対象の小説のみにチェックを入れる事で、その小説専用の読みの修正を定義することができます。 - 話者の指定 - タグの確認・編集 - 小説本文表示部右上に「目次」ボタンを追加 サブタイトルが取得できている場合にはそれを表示しますが、サブタイトルが取得できていない場合は一番最初の行をサブタイトルとして表示します。 - 本棚の順番(ソート)対象をいくつか追加 自作フォルダについては 小説本文画面 → 詳細 → フォルダへ分類 から、フォルダを追加する事で分類を行うようになっているのですが、もうちょっと「良い感じ」のインタフェースにしたいですね。 順番周りではフォルダへの分類的な物も入れているのですが、いまいち使い勝手がよくなった気がしない物が多いです。 こういう分類があると良いのでは?的なアイディアなどありましたら教えて頂けると幸いです。 - お気に入り(スター?)状態を追加 本棚のそれぞれの小説の左側の星マークの辺りを押すか、小説本文画面 → 詳細 → お気に入り を押す事で ON/OFF できるようになります。 小説をお気に入りにすると、本棚での削除ができなくなるのと一括ダウンロード時にダウンロードを試みる順番が早くなりやすくなるボーナスがつきます。 - 小説の取り込みの仕組みを変更 既存の物を全てSwiftで書き直しました。概ね以前と同じような取り込みができるようになっていると思いますが、一部動作が変更されているので同じ形にはならなかったり、意図されていない形での取り込み方になっている可能性があります。 また、ヘッドレスブラウザによる取り込みに対応したので、JavaScriptが動作した後でないと本文が表示されないようなWebサイト様でも取り込みができるようになった……はず……ですが、JavaScriptが動いた後にどのくらい待てば本文が表示されるかはネットワークや端末の性能によるのとそれらが表示された時にイベントが発火するわけではないという関係上、だいたいは読み込めるであろう時間(1秒とか)を待つ位しかしておらず、読み込めたり読み込めなかったりといった問題が多分発生するのだろうという気がしています。 なお、ヘッドレスブラウザによる取り込みについては wedata 側の ことせかいWebページ読み込み用情報 (http://wedata.net/databases/%E3%81%93%E3%81%A8%E3%81%9B%E3%81%8B%E3%81%84Web%E3%83%9A%E3%83%BC%E3%82%B8%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E7%94%A8%E6%83%85%E5%A0%B1/items )の isNeedHeadless, nextButton, firstPageButton 辺りで指定される項目が増えるような形で実装しています。 - Web取込をした時に改行周りが消える(レイアウトが崩れる)物を回避できるようになるかもしれない要素を追加 wedata側に登録されるサイト情報に injectStyle という物を追加しました。これにより、stylesheet で white-space:pre-wrap; としているような物(つまり改行とかがそのまま表示されるタイプ)に強引に対応できるようにしています。 具体的には エブリスタ( https://estar.jp/ )さんとかです。 - 初めて ことせかい をインストールした時に本棚に登録されるドキュメント(ことせかい の使い方)を追加しました。 このドキュメントは勝手に本棚に追加されますが、消すこともできます。ただし、消すと復活しませんので再度取り込み操作をする必要があります。(https://limura.github.io/NovelSpeaker/topics/00001.html が最初のページになります) - 設定 -> 内部データ参照用URLの設定 を追加しました。通常は触る必要が無い物となります。 これは、ことせかい 利用している外部のWebサイトで公開されている(又は公開している)様々な情報のURLを変更できるようにするものになります。 例えば、個々のWebサイトの本文部分がどこに当たるのかといった情報を保存している物や、標準の読み替え辞書、Web検索タブで使用している検索サイト情報などがこれに当たります。 - 設定 -> 小説本文画面の右上に表示されるボタン群の設定 が追加されました。 これは、小説本文画面の右上に設置しているボタンについて、それぞれ個別に表示しないようにしたり、表示順を変えたりすことができるようにするものになります。 これができるようにしたことにより、小説本文画面の右上に設置されるボタンの数を減らす事ができるようになるため、小説名が読めるようにできそうです。逆に、厳選してボタンを設置できるのならば、今までは設置場所が狭いからと敬遠していたようなあまり多用するわけでもないような機能ボタンも設置できるようになりそうです。 なお、全ての表示を消してしまったとしても、「Speak」と「詳細」のボタンは残り、その右上に設置できるボタンの機能は「詳細」ボタンを押した先の小説の詳細画面で同様の事ができるようにしてあります。そのため、設定 -> 小説本文画面の右上に表示されるボタン群の設定 で全ての表示を消すように設定したとしても、それぞれの機能へのアクセスはできないことはない形になります(一旦小説の詳細画面に移動しないと押せませんので使い勝手は悪そうですけれども)。 - cookie が iCloud同期 できるようにしました。 HTTP cookie は通常ではアプリ内(つまり ことせかい 単体)だけで独立して管理される物(Safari等の別アプリとは共有されないもの)なのですが、iCloud で同期している別端末にインストールされている ことせかい へも同期できるようにしました。 そのため、ログインしないと本文が取得できないようなWebサイト様に対して、Web取込画面でログインしたという情報がある場合(cookieに保存されている場合)には、一つの端末でログインしておくと iCloud同期 されているその他の端末でもそのログインした情報が利用できる事になり、「設定」->「小説の自動更新」で更新チェックをした場合に新しいページが正常に取得できるようになる…… はずです。 なお、今までの HTTP cookie の取り扱いと比べると少しだけ真面目に取り扱うようになったとは思いますが、完全を目指してはいない実装ですし、このようなcookieの使い方(別端末と同期する事自体)は恐らくはWebサイト様側としては想定外の使い方になりますため、cookieに関しては「(一応頑張っているので動くこともあるけれど)あまり推奨されない」という位置づけにしておきたいです。 また、以前よりも真面目に取り扱う事にしましたので、ログインした後に一定期間経つと勝手にログアウトするようなWebサイト様では正しくログアウトするようになります。その場合は再度 Web取込 タブにてログインしておく必要がある、という事になります。 - 「設定」->「繰り返し再生」の名称を「再生が末尾に達した時の動作」に変更して「お気に入りのうち未読の物を再生」と「同じフォルダの小説のうち未読のものを再生」を追加しました。 「お気に入りのうち未読のものを再生」では指定できませんが、「同じフォルダの小説のうち未読のものを再生」についてはフォルダ内の並びを変える事で次に再生される小説の優先度を変える事ができます。 なお、「同じフォルダの小説のうち未読のものを再生」は、一つの小説を複数のフォルダに属させる事ができるため、 複数のフォルダに属している小説が読み終わった時に、次にどのフォルダの未読の物が再生されるかは制御できません。 - 「設定」->「自作フォルダを編集する」を追加しました。 本棚で「順番」->「自作フォルダ順」にした時に表示されるフォルダ周りを編集するための物です。 小説本文画面の「詳細」から「フォルダへ分類」からでも分類はできるのですが、それだとその時に開いている小説についてしか指定できないため、全体から編集する場合に利用します。 なお、本棚画面で編集するのは難しいので今の所機能としては入れていません。 - 「設定」->「小説本文画面の右上に表示されるボタン群の編集」を追加 小説本文画面の右上に表示されているボタン群の数が増えすぎて表示しきれない端末が出始めたので、それぞれのボタンについて表示と非表示を切り替えたり、その表示順を変えたりすることができるようにしました。 これでニッチなボタンも追加できるようになるかなぁ。 - 「設定」->「アプリ内エラーのお知らせ」を増やしました。 アプリ内で発生したエラーで回復不能であったものについてユーザへ報告するためのものになります。 つまり、これが必要ないように作るのが正しい…… というかその都度ダイアログで表示したりする事ができるならそうするべきなのですが、小説を並列でダウンロードしているなどでダイアログを出すことができないけれどエラーはしてしまった、という場合に、「変です動きません」と問い合わせが来る前にお知らせをしておこうというための物になります。 - 小説の詳細画面にて、「小説の更新確認を行わない」かどうかのON/OFF設定を追加しました。 「設定タブ」->「小説の自動更新」がONの時の更新確認や、本棚画面右上の全小説の更新確認の時、本棚画面で小説名のリストの一番上を表示した状態でさらに下向きに引っ張った時の全小説の更新確認をした時に、この設定がONの小説については更新確認を行わなくなります。 ただし、小説本文画面や小説の詳細画面にてその小説だけの更新確認を行うボタンを押した場合は更新確認を行います。 Version 1.1.72 (1.1.156) - Web取込タブで表示されている画像を長押しした時に「"写真"に追加」を選択すると落ちる問題に対応 Web取込タブで使っているWebブラウザ部分で、画像を長押しして出てくるメニューの「"写真"に追加」を選択するとアプリが強制終了していました。 これは、"写真"アプリ側の保存領域にアクセスするために、ユーザに写真アプリ側へのアクセス権を求めるためのダイアログを表示するために必要な文言が用意されていなかった事による問題です。 という事でこれを追加しました。 これで一応画像ファイルについては写真アプリ側に保存出来ることは確認しましたが、別ページへのリンク要素を長押しした物に対して「"写真"に追加」しようとしても、エラーが発生して保存できない事が確認されています。 できればこの「"写真"に追加」のメニュー自体を表示できないようにしたいのですが、どうやれば良いのだろう……(´・ω・`) Version 1.1.72 (1.1.155) - 一部のURLで読み込みが失敗する可能性があった問題に対処 読み込まれたHTML中にあるを排除してからテキストに変換するようにしました。 これは、 バックアップ用データの生成 -> 完全バックアップ〜 でバックアップファイルを作成しようとすると落ちる問題に対応 ダミーデータ(1000ページ分の小説を80冊でだいたい5GBytes位のデータ量にした状態や、17000ページ分の一つの小説を入れた物)を入れて実験しているので多分大丈夫と思います…… というか、ダミーデータを入れていて気づいたんですが全ての小説の合計ページ数が多くなるとそれだけで色々ともっさりしますね…… Version 1.1.70 (1.1.150) - 本棚画面で最後に開いていた小説が選択状態になっていたものが、小説の更新確認時に選択状態が解除される場合がある問題を修正 修正点はこの一行だけなので多分ほとんど何も影響は無いと思います……(´・ω・`)マイドマイドオテスウオカケシマス。コンカイモヨロシクオネガイイタシマス。 https://github.com/limura/NovelSpeaker/commit/0fac0d1e7856e17163e5da78dd96cda7ce3595b2 Version 1.1.69 (1.1.149) - 本棚画面にて、最後に開いていた小説が選択状態になるようにしました。 最後に開いていた小説が本棚で少し探しやすくなります。 Version 1.1.68 (1.1.148) - 「設定」->「読み上げ時の間の設定」にて「<改行>」を設定している場合に、一部の文書では改行をうまく検出できていなかった問題を修正 昔は "\r\n", "\r", "\n" という改行文字については判定していたのですが、これに \v(垂直タブ), \f(改ページ), \u2028(Unicode での Line Separator), \u2029(Unicode での Paragraph Separator) を追加しました。 また、"<改行><改行>" を "\r\n\r\n", "\r\r", "\n\n" と展開して判定していた事により、"\r\n\n" という文字列については検出できないという問題があったため、"\r?[\r\v\f\n\u2028\u2029]" という正規表現で改行を検出するようにして "\r\n\n" といった改行指定文字列でも検出できるように改良した、という物になります。 これをテストするのには…… どうなんだろう。 そのような改行文字になっている小説を読み込んだ上で、 「設定」->「読み上げ時の間の設定」にて「<改行><改行>」の値を0.1以上にして空行がある(改行が2つ連続している)部分を読み上げさせて間が開くかどうかを確認する、という形になります。 が…… その "\r\n\n" というような(変則的な)改行の文字列になっている小説はどこにあるんだろう。 - 「設定」->「小説の自動更新」をONにしていて、アプリからの通知を許可している場合に、小説の自動更新で更新された小説がいくつあるかのバッジ(アプリアイコンの右上に出る数字)が、アプリ起動時には消えず、一旦バックグラウンドにまわしてから再度フォアグラウンドに戻さないと消えなかった問題を修正 長い……もうちょっと短い書き方を考えねば……(´・ω・`) Version 1.1.67 (1.1.147) - 「設定」->「開発者に問い合わせる」で選択できる「新機能等のご提案」を「新機能等のご提案・その他のお問い合わせ」に名称変更 その他のお問い合わせ(単なる質問)を「不都合報告」として送信されてしまうという事態が発生したため。(´・ω・`)フツゴウホウコクッテダイメイノmailガトドクコトジタイガシンゾウニワルイノデ... - Version 1.1.66 で追加したWeb取込に失敗した時に報告メールを作成できますよという文言で、『返信がほしいなら「開発者に問い合わせる」からお願いします』的な事を書いていたのを、『返信がほしいなら「開発者に問い合わせる」の方から「報告への返事」を「必須」にした上でお願いします』的な言い回しに変更 今までの文言だと返信が欲しくて送信されているのに「返信はあってもなくても良い」的な物を選択する人が居そうな気がしたので……(´・ω・`) - 完全バックアップファイルの小説本文を保存しているフォルダの中にゴミファイルが混ざっていると正常に本文を取り込めない場合がある問題について修正 これは、先日作成したpixiv小説様を取り込む時に使っている偽造バックアップファイルの取り込み時に誤動作する可能性があるという問題を修正した"つもりの物"になります。 具体的には https://limura.github.io/NovelSpeaker/QandA.html#pixivNovel2 で案内しているSiriショートカット「pixiv小説を ことせかい へ読み込む」を使ってpixiv小説(例えば https://www.pixiv.net/novel/show.php?id=13394998 )を取り込もうとした時に、本棚に本は登録されるけれど本文が取り込まれていない、という症状が発生したという報告がありまして、それに対応したもの(本文が取り込めるようになるもの)になります。 ただ、この問題はこちらの環境では再現しておりませんため、ソースコード上で「多分これが問題になっているのだな」という部分を修正したという物になりますので、同様の症状が発生している方でないと修正の効果を確認できないはずです。 Version 1.1.66 (1.1.145, 1.1.146) - Web取込に失敗した時に、mail を送れる状態であるなら「取り込み失敗報告メール」を送信できるように 「○○小説で取り込み失敗するのでなんとかしてください」というお問い合わせが来るのですけれど、肝心のURLが書いていない事があって困ってしまったため、取り込み失敗時のダイアログで「報告メールを作成」する事ができるようにしました。 例えば、(今の所)以下のURLをWeb取込で取り込もうとするとそれぞれの理由で失敗するようになっているのでそれで試すことができます。 https://ncode.syosetu.com/n0225ed/ (404 not found: 運営により削除された小説のため失敗する) https://www.pixiv.net/novel/show.php?id=13248120 (本文が取り込めなかった: JavaScriptが動作した後でないと本文が参照できない) - 小説の取り込み中に、現在読込中の小説のインジケータが消える場合があったため消えないように変更 小説の取り込み時に章の数が多い小説を読み込もうとしている場合は結構長い時間がかかるのですが、その読み込み中のインジケータ(それぞれの小説の右側に出てくるなにやらクルクル回る奴)が現在読み込み中の小説についてだけ消える(「更新有」マークがついて読み込み中のインジケータが消えているのでもう読み込まれていないように見える)場合があったのを修正しました。うーん、日本語にすると意味がわかりませんね…… 確認手順としては、 1. 章の多い小説(例えば https://ncode.syosetu.com/n1393fy/ )を取り込む 2. 取り込み中に本棚で小説名の右側に出ているインジケータ(クルクル回る奴)が消えないのを確認する(ダウンロードが終わる前に消えたら駄目) という感じでしょうか…… うーん、手順だけ読むと何を確認すべきかよくわかりませんね…… 駄目だ…… 私の日本語は伝わっているでしょうか……(´・ω・`) Version 1.1.65 (1.1.144) - Web取込タブにおいて、SSL証明書が不正と判定されるリクエストが複数あるWebページ(日本時間で7月2日午前1時ごろのハーメルン様のトップページ https://syosetu.org/ はそうなっていました)の場合、にアプリが強制終了する場合がある問題に対応 その不正と判定されるSSL証明書を使っている相手にアクセスするたびにアプリ側で「このページのサーバ証明書には問題があります。閲覧を停止します」というダイアログを出しているのですが、このダイアログをOKを押して消さずにいる間に、別のSSL証明書がおかしい読み込みが発生すると強制終了する、という挙動を取っていました。(どうやら一つの不正なリクエストだけではなく、複数の不正と判断されるリクエストがあると駄目のようです) これは、その不正と判定されるSSL証明書を使ったリクエストがあった場合には、そのリクエストを棄却するか否かを判定してmethodを呼び出す必要があるのですが、このmethod呼び出しをダイアログでOKを押した後にしていた事が原因……のようです。多分。 という事なので、ダイアログを表示した時点でmethodを呼び出すように変更しました。 なお、開発者の手元の端末では ことせかい ではSSL証明書がおかしいという判定が出てくるのですが、Safariで同じページを開いても特に何のエラーも出ないのですよね。何故なのだろう。広告辺りなのではないかと思っているのですが、どうなんだろう…… とりあえず、同様の問題が起きる https://limuraproducts.ddns.net/badssltest.html というテストページを作りました。このURLをSafariで開いてシェアボタンから「ことせかい へ読み込む」を使って ことせかい に取り込ませ、本棚でその取り込んだ小説(?)を開いて、本文が表示されている画面で右上にある地球のアイコンをタップする事でWeb取込画面でそのWebPageを開くことでその問題を発生させる事ができます。 また、この問題はアプリが落ちるようなタイプですのでそれなりに早めにリリースしたいため、通常では一週間程度のβテスト期間を取っている所を少し早めにしてAppStore側での審査が通ったらすぐ位(多分2,3日位)にしたいなぁと思っています。 そのため、お忙しいところお手数をおかけしてしまって申し訳ないのですが、早めにβテストの結果報告をして頂けますとありがたいです。よろしくお願い致します。 Version 1.1.65 (1.1.143) - 標準のメールアプリにメールアドレスが設定されていないか、標準のメールアプリが削除されているといった標準のメールアプリが使えない状態の場合の動作を変更 標準メールアプリがアプリ内から使えない場合(正確には MFMailComposeViewController.canSendMail() が false を返す場合)には以下のような動作に変わります。 ・設定->開発者に問い合わせる を開いた時に、標準のメールアプリを設定しないと報告できない旨を伝えるダイアログを表示して元の画面に戻る ・設定->バックアップ用データの生成 でバックアップデータが作られた後に表示されていた「メールとして添付するかファイルとしてシェアするか」のダイアログが出ずに、ファイルとしてシェアするを選択した時のような動きになります Version 1.1.64 (1.1.142) - 設定->開発者に問い合わせる で不都合報告を選択している時に現れる選択項目に「軽量バックアップファイルを添付する」を追加 不都合報告を送る時に軽量バックアップファイルを追加することができるようにしました。 これで「動作がおかしいです。これこれこうすると再現します」->「こちらの手元では再現しませんでした。設定を確認したいので軽量バックアップファイルを送って頂けますか?」->「なにそれよくわかんない(又は返信がなくなる)」というやり取りがなくなるかもしれない……なくなるといいな……(´・ω・`) Version 1.1.63 (1.1.141) - Webサイトから小説を取り込む時の文字列生成の仕組みを少し変更 一部のWebサイトについて、読み込み時に不必要な改行が沢山含まれてしまう場合があったため、これを改行が沢山になるよりは"マシ"になるように取込時の仕組みを変更しました。 具体的には、xpath で言う所の //*/text() で取り込まれたノード(テキストノード)について、今までは無条件で <br><br> を付加していたのをこれを付加しないようにし、かつ、xpathで取得された全てのノードについて親ノードの情報を抹消していたのを直上の親ノードについては残すようにした、という変更になります(HTMLタグを書くと弾かれるので全角にしています(´・ω・`) つまり、なんじゃらほい?というと、例えば <p>テキスト<a>リンク</a>テキスト</p> というHTMLがあったとして、//*/text() という xpath が書かれていた場合、今までは テキスト<br><br><a>リンク</a><br><br>テキスト<br><br> というものとして解釈していたのを <p>テキスト<a>リンク</a>テキスト<p> として解釈するようになる、という訳です。 これによって影響があるのは例えば Wikipedia になります。 Version 1.1.62 (1.1.140) - 小説を取り込む時の小説名について、前後の空白を削除して取り込むように 小説名の部分に改行が含まれていると %0a といった文字列が入り込んでしまう場合があったので、これを解消するためです。(ただし、前後の空白や改行文字を削除するだけですので、小説名の中に改行が含まれている場合は %0a という表示は残ります) - 小説のダウンロード中のインジケータが消えない場合がある問題を解消 こちらは、本棚画面の右上の"矢印が時計回りに回転しているアイコン"を押すなどで全ての小説の更新確認をした時、個々の小説名の右側にダウンロード(待ち)中のインジケータが出ますが、全ての小説のダウンロードが終わっていても、それが消えない場合があるという問題を解消した物になります。 この問題が発生するのは以下の条件のいずれかに合致する小説です。 ・設定→新規自作小説の追加 で作成された小説 ・テキストファイルやPDFファイルといった単一のファイルから取り込まれた小説 ・ダウンロード中にエラーが発生した小説(作者が退会したなどで掲載が終了している場合などがこれに当たります) - 設定->開発者に問い合わせる で不都合報告を選択している時に現れる選択項目に「問題が発生する小説(もしあれば)」を追加 不都合報告の画面は色々と「あれしろこれしろ」と書かれていてごちゃごちゃしていてこの新しい項目が見えなくなってたりしそうなのですけれど、まぁ気づいた人が選択してくれればとりあえずはそれでいいかなと思います。(´・ω・`) - 設定→開発者に問い合わせる で「不都合報告メールを作成する」を選んだ後に何も起こらない可能性があった問題を修正 ところで、最近は iOS 標準のメールアプリって削除できるんでしたっけ? メールアプリが削除されていると多分「開発者に問い合わせる」自体が動かないと思うんですが、そういうのはどうしたらいいんですかね……(´・ω・`) Version 1.1.61 (1.1.137) - 英語表記を添削していただいたので反映しました。 外国の方に ことせかい の英語へのローカライズの文言を添削していただきましたのでそれを取り込ませていただいた物になります。 という事なので、日本語環境下においては、特に何の変更もありません。 変わったのは、英語環境下(設定アプリ -> 一般 -> 言語と地域 -> iPhone の使用言語 を English(英語) にした状態)で表示されるボタンやダイアログメッセージなどに表示される文字列になります。 従いまして、動作には何の変更もありませんため、今回は Appleさん の審査に通り次第リリースしてしまおうと思っています。 また、ことせかい は GitHub で公開されているオープンソースプロジェクトですので、今回のような pull request などがいつかは来るのかなーと期待していたのですが、実際に pull request をして頂けてとても嬉しいです。@Matthewzhou809 さんありがとうございます!ヾ(*´∀`*)ノ Version 1.1.60 (1.1.136) - 設定 -> iOS 12 で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する の設定項目をリセット(OFFに)します 冬休みに入って急激に『「アルファ」って読み上げるんですけどなんとかしてください』というお問い合わせが増えてしまったので、いっそのこと全てのユーザの設定を一旦強制的にOFFにすることにします。 同時に、バックアップファイルからの書き戻し時にこの設定を読み込まないようにします。 Version 1.1.59 (1.1.135) - 設定 -> バックアップ用データの生成 にて、生成されたデータについて「ファイルとしてシェア」が選択できるように これ、単にファイルをシェアするだけなら簡単に実装できたのですね。前にお問い合わせ頂いたときに、「NSDocument class に対応しないと駄目で実装コストが高そうだから諦めてるんですよ」的な事を言って断ってた気がするのですが、簡単に実装できちゃいました。すみません。(´・ω・`) Version 1.1.58 (1.1.133) - DynamicType 対応を少し強化しました。 DynamicType(iOS側での文字サイズ指定。iOS 13 だと 設定->アクセシビリティ->画面表示とテキストサイズ->さらに大きな文字 で選択できる物)の設定に対応して文字の大きさが変わる部分を増やしました。DynamicTypeで文字を大きくした場合、表示が崩れる部分があるかもですが、そういう所は概ねDynamicTypeへの対応はしない方向で調整しています。DynamicTypeに対応している部分にしても、大きく表示が崩れなければよし、位のつもりの対応になっています。 これは、裏で iCloud や AppleWatch 対応用に作っている枝側ではUI周りを全て Objective-C から Swift に書き換えてしまった関係上、Objective-C側 での修正を取り込むのが手作業になってしまって大変なので、作業の方向を逆にして、Swift側(別の枝の側)で先に修正した物をこちら(Objective-C)側にも適用するという作業にした事から、適用が面倒くさいものが後回し(又は実装しない事)になっているためです。 具体的には本棚での小説名部分やWeb取込タブの初期ページ、設定タブの文字等はだいたい対応しましたが、タブの文字や個々のページの右上や左上のボタン、設定タブのものではないUIのボタンやラベルといったUI領域を大きくできないと文字が大きくなった時に表示できなくなるものについては対応はSwift側(別の枝側)のみで行い、こちら側(Objective-C側)には適用していない、という形になります。 - 小説を開いた時に読み上げ開始位置の選択範囲に出るメニューを出ないように 恐らく iOS 13 からは選択範囲の上にメニューが常に出るようになったと思うのですが、これ、全く読んだことが無い小説を開いた時だと画面の一番上にメニューが出てしまって、本棚に戻るボタンを押せなくなっているんですよ。これを回避したいということで、指で選択した時以外はこのメニューを出さないような方法を探してみたのですが、やり方がよくわからなくて試しにやってみた方法でなんとなくうまくいったように見えるのだけれどこの手法で本当に良いのかよくわからないという感じのものができました。ということなので、「こういう場合は駄目だったよ」的な抜けが色々ありそうです。(´・ω・`)ミツケタラオシエテクダサイ...オシエテイタダイテモナオセナイキガシマスガ... Version 1.1.58 (1.1.132) 今回の修正もβテスターさん達からのご報告を受けての修正になります。いつもありがとうございます。 - Web取込タブのブックマークで http://... で始まるURLでブックマークされたが、開くと https://... にリダイレクトされてしまうURLについて、ブックマークの削除ができなくなっていた問題を"再度"修正 http://... で保存されたURLが削除できない問題が残ってました……これで排除できたはず…… - スプラッシュスクリーン(起動時にアイコンの絵が出る奴)を画像ファイルから storyboard に変更 iOS 13 で画像ファイル形式の物が非推奨になったため。 Version 1.1.58 (1.1.131) 今回の修正はβテスターさん達からのご報告を受けての修正になります。いつもありがとうございます。 - 多くのダイアログが出てくるシーンにおいて、画面下部のタブをタップすることでタブ間が移動できてしまい、移動してしまった後に元のタブに戻ると表示が更新されず真っ暗になったりしてしまう問題を修正 ダイアログが出てくるシーンは沢山存在するため、対応漏れがあるような予感がすごくします。(一応、大本の部分で対策を講じたのですが、別経路で使っている場所がありかねないのを警戒しています) - Web取込タブのブックマークで http://... で始まるURLでブックマークされたが、開くと https://... にリダイレクトされてしまうURLについて、ブックマークの削除ができなくなっていた問題を修正 これは、http://... を開くと https://... にリダイレクトされてしまうため、ブックマークしているURLは http://... だけれど、開いた後には https://... になるため、ブックマークされていないURLだと判断されることでブックマークを削除できないという問題が発生している物(具体的には初期に登録されている青空文庫へのlink)への対策になります。 なお、ブックマーク上部に表示されている ことせかい サポートサイトと Web取込機能の使い方 については固定で表示するようにしています(ブックマークを消せないのが正しいです)。これらがなくなってしまうとWeb取込タブで何のURLも開けなくなってしまうので。 Version 1.1.58 (1.1.130) - VoiceOver環境下において、本棚の右上にある「順番」などで出てくるピッカー(上下にくるくる回ってリストから一つを選択する奴)が出てくるダイアログが選択できなくなっていた問題を修正 VoiceOverは使っていないので全然気づいていませんでした。orz - 設定 -> 小説を削除する時に確認する の設定項目を追加 本棚で小説をぐいっと左側に移動しようとした時に、一番左まで持っていこうとするとそのまま消えるのですが、恐らくはその操作をしてしまうことで「誤って小説を消してしまったのだけれどなんとかならないか」というお問い合わせを受けたので簡単には消せなくなるようなオプションを導入します。 なお、このオプションをONにしていると、本棚の右上の「編集」を押してからの削除でも確認ダイアログが開くようになります。さすがに冗長かとは思うのですが、標準がOFFのオプションをONにする人は簡単には消したくないのであろう、という事でこの場合でも確認ダイアログが出てくるようにしています。 - 設定 -> お知らせ で出てくるダイアログに「過去のお知らせを確認する」ボタンを追加 Version 1.1.57 (1.1.128) - 設定 -> 小説本文表示画面の設定 -> 色設定 でユーザ指定色を設定しようとした時(字の色を直接指定 か 背景色を直接指定)に出てくるダイアログにキャンセルボタンを追加 βテスターさんありがとうございます!確かにキャンセルが無いのはあんまりよくなさそうです。 Version 1.1.57 (1.1.127) - ネットワーク接続が存在しない(か、携帯電話網のみに接続されていて 設定→携帯電話網ではダウンロードしないようにする がONの)時にダウンロードしようした時に出てくるダイアログに 設定→携帯電話網ではダウンロードしないようにする の設定項目を確認するような文言を追加 立て続けにに「ダウンロードできませんなんとかしてください」という内容のお問い合わせを受けて辛い(内容的にダウンロードできないという事だけなので必死なのはわかるんだけれど情報量が皆無すぎて対応に困るのでとりあえず 設定→携帯電話網では〜 の確認とWiFiや携帯電話網への接続を確認せよというありきたりな返答をすることになって辛い)ので取り急ぎエラーメッセージに先回りしてそのありきたりな内容を書いておくものを今回のリリースに入れる事にします。(´・ω・`)デモコレモドウセブンガナガイカラッテヨミモセズニ「ダウンロードデキマセン!」ッテトイアワセシテクルンデショ。シッテル。 Version 1.1.57 (1.1.126) - 設定 -> 起動時に前回開いていた小説を開く が OFF になっている時に、起動時に本棚画面下部表示されるフローティングウィンドウ(タップすると前回開いていた小説が開いて読み上げが開始されるボタン)のダークモード対応がなされていなかったのでダークモードに対応しました - 「設定」->「小説本文表示画面の設定」(旧「表示文字の設定」)に小説本文部分の表示部での色設定を追加 - この設定を追加したことによって、設定が無視されるようになった「設定」->「小説を読む時に背景を暗くする」を消しました この設定を有効にするために、小説本文部分を表示する画面に移る時とその画面から別の画面に移る時に、色設定を色々いっぱい沢山書き換えるという事をするようになりましたので、それらの画面遷移(タブを移動するとか)する時に色関係がおかしくなる可能性がありそうな気がします……スクロールバーとか気づいたら見えなくなってた、みたいな感じで……(´・ω・`) - バックアップファイルから復元時にアプリが終了する可能性があった問題を修正 Version 1.1.56 (1.1.125) - なろう検索経由でダウンロードした小説について、小説の詳細シーンにて「タイトル」「キーワード」「あらすじ」の色を少し見やすい感じの色に 地味な変更なので多分気づきませんねこれ。ダークモードだと見にくいというお話がありましたので変更しています。なお、iOS 13 以降でない場合は元の色のままです。 - アップデート時のメッセージダイアログで、文字数が多くなるとOKボタンを押せなくなる場合がある問題を解消 - 本棚シーンで小説をダウンロード中に右側に表示される くるくる回る奴(UIActivityIndicator)がダークモードでも黒い色のままで見えなくなっていた問題を解消 今回の修正は全てテスターさん達にみつけて頂いたものです。テスターさんいつもありがとうございます!全然気づいていませんでした。助かります。 あと、ダウンロード中に画面上部に出ていたくるくる回るインジケータなんですが、これは NetworkActivityIndicator という iOS側 の機能を使って表示していたものが iOS 13 からはサポートされなくなったらしく表示できなくなっている、というもののようです。これについては iPhone X 辺りではノッチ部分があって表示領域が狭いということで以前から表示されなかったのですが、iPhone 8 以下でも iOS 13 からは表示されなくなったという形で同じような対応になってしまったっぽいですね。どうしたものですかね…… うーん。自前で表示するのは正直面倒くさいので何か楽に実装できるライブラリ的な物は無いですかね…… iPhone X 用に導入している FTLinearActivityIndicator 辺りが頑張ってくれると楽でいいのですけれども…… Version 1.1.56 (1.1.124) - 小説本文シーンの右下にある「現在の章の番号/ダウンロード済みの章の数」表示がダークモードの時に読めなくなっていた問題を修正 テスターさんありがとうございますー!ヾ(*´∀`*)ノハジメテノゴホウコクデシタ。タスカリマシター! Version 1.1.56 (1.1.123) - 小説本文シーンの検索で、メッセージ部の文言を誤解が少なくなるように変更(「本文中から文字列を検索します」から「本文中から指定された文字列が含まれる章を検索します」へ) テスターさんありがとうございますーヾ(*´∀`*)ノ ついでにplaceholder(入力部に何も入力されていないと出てくる文字)に空文字列で検索もできる事を追記 - 小説本文シーンの検索で、検索中には検索中というダイアログを出すように 長い小説だと結構な時間がかかる事もあるようなので。 - PickerView でのダイアログの OK/Cancel ボタンを右側に寄せるのではなく画面横幅全てを使うようなデザインに変更 右側に寄せてると左利きの人からみるとどうなんだろと思ってこうしたんですけれど、これはこれで右利き左利き双方から使いづらいって言われそうな気も……(´・ω・`) - Web取込 画面の最初に表示されているHTMLをダークモードに対応させました。 @media (prefers-color-scheme: dark) { ... } と CSS を書くとダークモードに対応できるんですね。知りませんでした。(´・ω・`) Version 1.1.56 (1.1.122) - 小説本文シーンの検索ボタン周りの仕様を少し変更しました。 - 検索ボタンを押した時に読み上げを停止するように(色々誤動作するので読み上げは停止させます) - 検索ダイアログにキャンセルボタンを追加 - PickerView でのダイアログ(検索結果として出てきた章のリストを選択するアレ)の動作を少し変更しました。具体的には OK と Cancel ボタンを追加して、領域外を選択した時の動作を OKボタン押下時 の動作から Cancelボタン押下時 の動作に変更しています。 この PickerViewダイアログ はこの小説本文シーンの検索ボタンでの検索結果以外に、設定 -> 声質の設定 -> 話者 の部分と、本棚の右上にある「順番」をタップした時に出てくる物と同じなので、それらも同様な動作変更が行われています。 今回の修正はβテスターさんからの使い勝手に関するコメントを頂きまして、それに対応したものになります。こういうコメントも大歓迎です!ありがとうございますー!ヾ(*´∀`*)ノタスカリマスー Version 1.1.56 (1.1.120, 1.1.121) - iOS 13 の日本語環境下においてアプリ名が ことせかい ではなく NovelSpeaker になっていたのを ことせかい になるように修正 - 読み上げ中は読み上げ位置表示の上に出るメニューを出さないように iOS 13.1 で確認したのですが、読み上げ中の読み上げ位置表示に使っている文字列の範囲選択なのですが、この範囲選択をすると出てくるメニューが出まくってとてもウザい感じになっていました。そこで、読み上げ中にはメニューの項目数をゼロにすることでメニューが出てこないようにするような対策を取っているのですが、実装方式がダサすぎるため、操作手順によっては『メニューが出なくなる』か『メニューは出るけれど ことせかい 側で追加している「読み替え辞書へ登録」が出てこない』といった不都合が出そうです。なので、そんな感じの不都合が出た場合は、問題が発生する操作手順を添えて報告して頂けますと幸いです。 Version 1.1.56 (1.1.119) - Dark Mode へ対応してみました。恐らく抜けがあると思うのですが、対応範囲が広すぎるので、対応漏れがあると思います。ダークモードにしたりダークモードを解除した後に ことせかい をテキトーに色々と弄ってみて、黒地に白で描画されていない部分があったりしたら教えて下さい。 なお、Web取込タブのWebページ部分に関しては Webページ と同じ扱いのため、ダークモード下でも白地に青等の表示になります。(最初に開いているページもWebページなので白地に青の表示になります) - 小説本文を表示している画面に、検索用のボタンを追加 その小説の本文から指定された文字列を検索して、その文字列が含まれている章を選択できるようになります。 副次的な要素として、検索文字列を何も入れずに検索をさせると、全ての章がリストされます。 ボタンを追加しすぎでそろそろ iPhone SE 位の横幅が狭い端末だと小説名が読めなくなってきました。ハンバーガーメニュー的な物に逃がすべきでしょうか…… 私あんまり好きじゃないんですよねアレ。目的のボタンがどこにあるのかわからなくなってしまうので。 「機能」ボタンみたいな「何かそれっぽい機能を呼び出すためのボタンがあるな、これを押したら検索くらいできないかな?」と推測できるようなボタン名のものに纏めちゃうとかですかね……うーん……? - 設定 -> 声質の設定 にて、スライドバーの値を表示するようにしました - 設定 -> 携帯電話網ではダウンロードしないようにする の ON/OFF 設定を追加しました Version 1.1.55 (1.1.118) - 自作小説を編集中に章の削除をしようとした時に、その削除した章が栞のはさまれた章だった場合にその章が削除されなかった問題を修正 これは結構ややこしい問題でした。再現しようとすると、 1. 新規自作小説を作る。内容な何でも良いので3章分作成して右上の「登録」を押して確定させる 2. 本棚に戻り、1. で作成した小説を開いて3章目まで移動してから、右上の「編集」を押して編集モードへ 3. 編集モードで3章目が表示されているのを確認して、右上の「この章を削除」する 4. 読み上げ画面に戻った時に、栞の位置の章が消えている(それまで開いていた章が消えている)ので1章目に戻されるので、3章目まで移動する と、やろうとすると、昔のバージョンでは3章目が表示できていました。これが発生すると、保存されている章の実体は減っていないけれど、最後の章だと思っている章の番号が一つ減った状態になるため、色々とおかしな動きをするようになっていました。 Version 1.1.55 (1.1.117) - 画面の遷移が起きる時やシェアボタンを押した時などで、presentViewController:animated:completion を呼んでいる場面では modalPresentationStyle を FullScreen と指定するように iOS 13用 にビルドするとその値を指定していない場合は別の値として動いてしまう(今までは FullScreen として動作していた)らしいので、先回りして FullScreen に強制しておきます。 - メッセージダイアログが出る部分でのメッセージ部分の高さ設定を短めにしました。 iPhone 5s 等の小さい端末だと「OK」が押しにくい(又は押せない)場合があったため。 設定 -> お知らせ や 設定 -> ことせかい利用許諾、設定 -> ことせかい のプライバシーポリシーを確認する 等がそれに当たります。(バージョンアップ時の物は変えていないため、場合によってはOKが押せないかもしれませんが、こちらは現在別の枝で作っている Version 2 以降で対応したいです……) - Web取込 で取り込んだ小説については、編集から章の削除ができないように これが削除できてしまうと誤動作を誘発するというか、章を削除すると再度ダウンロードしたらその削除した章を読み込んでくれると思われるのが普通かと思うのですが、再度ダウンロードしてもその削除した章は読み込まれず、最後にダウンロードした章の次の章が読み込まれてしまうため、誤動作に見える、という事になっているため、削除はできないようにしました。 Version 1.1.55 (1.1.116) - 読み込んだ章の最初と最後の空白や改行部分を削除するように 今までは最初と最後の空白部分は削除していなかったのですが、それらが残っている意味はほぼ無いというのと、最後に多量の空白部分があると読み終わったチェックに引っかからなくなる事がある(読み終わったかどうかを判断するのは読み上げ位置が最後から10文字以内に入っている必要があるので、空白や改行が10文字以上ある場合には読み終わった事にならない場合があった)ので、いっそのこと消すようにしました。 - 「設定」→「再ダウンロード用データの生成」のタイトルを「バックアップ用データの生成」に変更 新しい iPhone が出る時期になると、「ことせかい の内容をバックアップしたい」というお問い合わせや新機能のご提案がちらほら舞い込んできますので、多分「再ダウンロード用データ」というよくわからないものより「バックアップ用データ」という文言の方がわかりやすいのかなぁと言うことで変更してみます。 Version 1.1.54 (1.1.115) - 新しい告知があった場合に 設定タブ にバッジがついたりして確認を促すように ユーザ全員向けの情報が追加された時に、今までは「設定」->「開発者に問い合わせる」を開いた時や、サポートサイトを開いて少し待ったりしないとその情報が表示されなかったのを、新しい情報が出てきた場合には設定タブにバッジがついて、「設定」->「お知らせ」(一番上に新設しました)の部分に「!」がついて押してほしい感じで目立つようにしました。 これは、今回のような(「設定」->「iOS12で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する」がONになっていると空白等を「あるふぁ」と読み上げてしまうという『不都合』が出たのでなんとかして欲しいというお問い合わせがAppStoreのレビュー欄に届き続けている)問題について、サポートサイト下部のご意見ご要望フォームやアプリ内の「設定」->「開発者に問い合わせる」から問い合わせようとした時にしかこの告知が見られないのが問題で、いきなりあAppStoreのレビュー欄に要望を書いてしまう文化の人に、この告知をどう届ければ良いかなぁという事で実装した感じです。起動時にダイアログで出してもいいかと一瞬試してみたんですが起動後に読み上げを開始するまでに1タップ増えてしまうのがどうにも許せなかったのでバッジをつけて確認しようと思った人だけが確認できるようにすることにしました。ただこの場合、確認しようと思わない人(どうやら「設定」の項目自体をほぼ全く触らない(実際最初に少し弄れば後は放置でいいんですよね設定タブは)人は結構居そうです)には効かないのであんまし良くない対策かもしれないんですよね。それでもまぁ、気になって押す人は居て、お問い合わせもそれに釣られて減るといいなぁと思っています。 後は、設定タブのバッジは目立つけれど、その告知を見られる「設定」->「お知らせ」につく「!」マークが目立たないというのが気になっているんですがこのLabelにはバッジってつけにくいんですよねどうしたものか。 - 設定->小説を読む時に背景を暗くする の動作を少し変更 今まではこの設定が OFF の時でも色の設定を白い背景のテーマで上書きしていたのですが、これをしないようにしました。 これは、iOS 13 になった時に iOS の設定側?で?ダークテーマを選択しているとどうなるのかわからないのですが、全てのアプリの標準の色設定がダークテーマぽい色設定になるような事になったとすると、白い背景のテーマで上書きしてしまう動作が良くないことを生みそうだなぁと思ったのでとりあえずの回避策です。必要なさそうな気もしますが。 Version 1.1.53 (1.1.114) - Web取込側で新しく小説を取り込んだ時に、本棚に小説が追加されていないように見えてしまっていた問題を修正 Version 1.1.52 (1.1.113) - 設定 -> ルビはルビだけ読む を10回位ON/OFFすると出てくるデバッグメニュー内の デバッグログの表示 部に、Copy ボタンを追加 表示されているもの(Filterで絞っている場合は絞られたもの)がペーストボードにコピーされます。 - 設定 -> 開発者へ問い合わせる に「内部に保存されている操作ログを添付する」のON/OFF設定を追加 上記のデバッグログを問い合わせのメールに添付するか否かのON/OFF設定が追加される形です。 Version 1.1.51 (1.1.111) - Web取込 機能側での一回で取り込まれる小説の章の数の最大値を100から1000に増加 Version 1.1.50 (1.1.110) の変更にて、同じページが延々と読み込まれ続ける問題を解消したことから、ニュースサイト等で日々のニュースを延々と読み込み続ける問題以外には無駄な連続読み込みが発生しづらくなったということで、一度に読み込まれる小説の章の数の最大値を100から1000に増やしました。 で、増やした後に章の数が1200とかある小説を見かけてなるほどーと思っているのですけれど、どうせなら5000位に増やしたほうがいいんですかね……? と、思ったのですが1章の読み込み毎に少し待ってから次の章を読み込む都合上、だいたい1000章を読み込むのに30分弱かかると思われるのですが、5000章ともなると2時間半となって無駄な読み込みに2時間半も使われるのはさすがに痛いですね。 ということなので、とりあえずは1000章分で様子をみてみます。 - ルビはルビだけ読む 機能でルビとして判断される文字列の扱いを少し変更 これは |AAAA(BBBB) とあった時の AAAA や BBBB の文字数を、今まで10文字までを限界としていたのですが、その文字数の限界を取り去った、というものです。 この10文字というのは 小説家になろう様 のルビの仕様(https://syosetu.com/man/ruby/)がそうなっていたのでそれを参考にしていたのですが、「|力場装甲(フォースフィールドアーマー)」というもの(「フォースフィールドアーマー」が13文字なのでルビが振られた文字列として認識されなくなる)をみかけまして、長いものもあるものだなぁという事でルビ側の文字列については文字数制限を緩めたという形になります。 なお、この文字数を10文字としていたのは、Version 1.1.46 (1.1.95) の時に変更した「AAA|AAA(BBB)XXXXX...YYYYY《CCC》ZZZZZ。」という文があった時に、「AAA《CCC》ZZZZZ。」と読み上げていたという問題に対して、ルビとして認識される部分の文字数が10文字に制限されればこのようなミスは起きにくくなるだろう、という思惑があったわけなのですが、正規表現側でウマイこと書いてやればこのケースについては回避可能でありました(単に最短一致を使いました)ので、文字数の制限は撤廃したという事になります。 Version 1.1.50 (1.1.110) 2019/02/08 - 「なろう検索」タブの削除方針に則り、「なろう検索」タブにて告知を開始 これは、サポートサイト下部からリンクしておりますQ&Aに追記しました「なろう検索 タブ等の削除方針について」 https://limura.github.io/NovelSpeaker/QandA.html#DeleteSearchTab の告知を「なろう検索」タブ内部にボタンとして追加したものになります。 このボタンを押すとWeb取込タブにて上記のURLが開きます。 上記のQ&Aに追記した時には考えていなかったのですけれど、どうも Web取込 機能を使っていない人が居るみたいなんですよね。 そういう人は なろう検索 タブが消えると「使えなくなった!」とか言い出しそうな気がするんですが、こういう人に対して Web取込 機能の使い方を説明するのはどうしたら「良い」のかさっぱりわからないというか、あたかも Web取込 機能が無いかのように、「カクヨムなので ことせかい で読めないんですよね」とかTweetされている人を見るにつけ(なお カクヨム様 は Web取込 で対応しているはずです。Safari から読み込もうとすると Safari で本文ページを開こうとした時に カクヨム アプリ側に奪われてしまって難しいかもですが Web取込 タブ側から行けばいけるはずなので……)、どうしたもんだ感が強くなってしまってですね……(´・ω・`) - Web取込機能において、同じページを読み込み続けてしまう可能性のある問題を修正 Web取込機能において、複数ページがあるけれど、最後のページでまた同じページが次のページとして抽出されてしまった場合にその同じページが延々と次のページとして読み込まれ続けてしまう問題を修正したものになります。 これを試すことができるURLを示せると良いのですが、どうやら期間限定のページらしく、この修正をした日までしか存在しないWebPageらしいので恐らくはこのβ版の審査が終了する頃には見えなくなっていそうな気がします…… 一応こちらで確認したその期間限定のURLは https://dengekibunko.jp/trial/saihate_all-1.html で、この26ページ以降がずっと読み込まれ続けてしまうという状況でした。 - 内部動作ログをデバッグメニューの「デバッグログの表示」部に追加するように 設定タブ の「ルビはルビだけ読む」のON/OFFを10回位繰り返すと一番下に現れるDEBUGメニューの「デバッグログの表示」で表示される情報が色々いっぱい増えます。 状況がよくわからないエラーの報告があった時に、「そこに書かれた文字列を全部コピペで送って下さい」という荒業で状況の把握の足しにできればなぁと思っています。 あー、でも、これ、全部コピーするボタンとかつけとかないと駄目かもですね。(´・ω・`) Version 1.1.49 (1.1.109) 2019/01/25 - HTML上のルビ(rubyタグ)を取り込む時には一律で "|文字(ルビ)" の形式で読み込まれるようにすることで、「ルビはルビだけ読む」がより意図通りに動作するように ことせかい は「ルビはルビだけ読む」がONになっている場合でも、「ドラゴン殺し(ドラゴンスレイヤー)」といった文字列を「どらごんごろしどらごんすれいやー」と発話してしまいます。 これはルビとして判定される文字列として、先頭に「|」が入っていないもの(今回の例の場合)はルビが振られる文字として、カタカナか漢字のみである必要があり、今回の例のようにひらがなの「し」が入ってしまう事でルビとして判定されずに「どらごんごろしどらごんすれいやー」と発話されてしまうという事が原因です。 なのですが、元々のHTMLでは ドラゴン殺し(ドラゴンスレイヤー) と書かれているであろうことが想像されます。この元の情報では「ドラゴン殺し」に「ドラゴンスレイヤー」とルビが振られるべしという情報があったはずですが、単にHTMLタグを削除してしまったために「ドラゴン殺し(ドラゴンスレイヤー)」という文字列に変換されることになってしまい、上記のような残念な結果となるわけです。 ということなので、このような残念なことが起きないように、タグの直後に「|」を入れるようにしました。(正確には ( が無い場合にも「(」を追加するなどといった小細工も追加しています) これで、rubyタグ が書かれているものについては、「ルビはルビだけ読む」が正しく判定できるような文字列に変換されるようになったはずです。 Version 1.1.48 (1.1.108) 2019/01/06 - iOS 8 以上への対応から iOS 10 以上への対応に変更した事に対して、deprecated(廃止予定) になったAPIを利用しているものを撲滅した - 使用しているダイアログ(画面中央に出てくるウィンドウ)で、古いタイプのAPIを使っていた物を撲滅して新しいタイプの物(外部ライブラリの EasyDialogs を利用したもの)に変更 UIAlertView が deprecated(廃止予定) になったため。 以前から EasyDialogs も使用していたので変わっていないものもあるのですよね…… - ネットワークアクセス周りで利用していたAPIを一部変更 NSURLRequest 周りが deprecated(廃止予定) になったため。 場合によってはネットワークアクセス周りで止まってしまったり、リクエストが失敗したりするかも…… - 通知周りで利用していたAPIを変更 UIUserNotification 周りが deprecated(廃止予定) になったため。 ことせかい での通知は、設定 -> 小説の自動更新 を ON にして、その自動更新(手動で更新ではなくて ことせかい が起動していない時に勝手に更新される奴)で新しい章が読み込まれた時でないと通知が発生しないので確認するのは結構大変です。 やるとすると何ページもあるような物についてダウンロードを開始させて、途中で ことせかい を終了させることで途中までしか読めていない状態にして、自動更新をONにしてしばらく放置(最低で1時間以上放置)して自動更新をかけさせてその小説の新しいページが読み込まれるのを待つというのがありますが、それでも最低1時間はかかります……(´・ω・`) - その他細かい物が色々あります。中にはヤバいのが含まれているかもわかりません……('A`) - 設定 -> 小説の自動更新 がONの時の更新通知の情報を増やしました。 具体的には更新された小説名が通知に追加されます。文字数が多くなると通知を長押ししてやらないと全部はみられないようになる……と思います。 新しい通知の仕組みを使っているので、通知をタップするとその通知にかかれている小説(の一番上のものとか)が開く、みたいな事もできそうなのですけれどそうして欲しい時とそうしてほしくない時がありそうだなぁと思いましたので、今の所は特に何もせずに単に ことせかい を開いた時と同じ動作(標準の動作)にしてあります。 Version 1.1.48 (1.1.107) 2019/01/05 - 「設定 -> 起動時に前回開いていた小説を開く」をOFFにしている時に現れる「本棚下部にその前回開いていた小説の続きから再生を開始するボタン」のテキストに「▶︎」を追加 テスターさんからの助言を採用しています。ありがとうございます。これで、より「再生するぞ」感が出る事を期待しています。 - iOS 10 で「設定 -> 起動時に前回開いていた小説を開く」をOFFにしている時に現れる「本棚下部にその前回開いていた小説の続きから再生を開始するボタン」の挙動がおかしかった問題を修正 具体的には表示が出る時と出ない時、出ても画面下部に出なかったりするといった、表示される場所が意味不明な場所になってしまうという問題に対応したものになります。 主にシミュレータでしか確認していませんが、手元に唯一残っている iOS 10 の入った iPad とシミュレータで似たような挙動をしていたので多分大丈夫と思います…… - 外部ライブラリの利用設定で iOS 8 以上としていた所を iOS 10 以上とした 使用されている外部ライブラリの挙動が場合によっては変わるのですが、色んな所に使われているのでどこに影響があるかよくわかりません。 Version 1.1.48 (1.1.106) 2018/12/22 - 読み上げの話者が未設定の場合、標準のもの(kyoko)ではなく利用可能な中でリッチな話者を選択するように これは 設定 → 声質の設定 の話者の設定が Default になっていないと効果を発揮しませんので ことせかい をアンインストールしてインストールしないと確認できません。 - iOS 10 以降の対応に変更(以前は iOS 8 以降でした) iOS 9 以前では動かなくなります。 - 設定 -> 起動時に前回開いていた小説を開く のON/OFF設定を追加 この設定はONが標準となります。OFF にすると、起動時に前回開いていた小説は開かなくなりますが、前回開いていた小説が読み終わっていなければ(続きがダウンロードされていなければ)、本棚下部にその前回開いていた小説の続きから再生を開始するボタンが現れます。 このボタンを押すと対象の小説が開いて自動で読み上げが開始されるのですが、なんか「このボタンを押したら再生が開始されちゃったんですけど再生しないようにできませんかね」というお問い合わせが来るような予感がひしひしとするんですよね。 起動時には前回開いていた小説が画面内に表示されるようになっているので単に開きたい時はその小説をタップしてもらえればいいということで新しく追加したボタンは再生をするようにしている(というか、ことせかい を開いて Speak ボタンを押したら前回からの続きが再生されるという利便性を「前回開いていた小説を開く」がOFFになっていても享受できるようにという目的のボタンなので再生される)のですけれど、目立つ位置にボタンがほよんと出てくるので押したくなるから押すといきなり音が出るのはビビるとかそういう話になりそうな……うーん。どうしたらいいんでしょうね…… Version 1.1.47 (1.1.105) 2018/12/19 - なろう検索 経由での小説本文のダウンロードが失敗するようになった問題に対応 2018/12/18 辺りから「なろう検索」経由での本文のダウンロードが失敗する状態になっていた問題への対応になります。 「なろう検索」経由での本文のダウンロードは、今までは 小説家になろう様 の TXTダウンロード を利用させていただいていたのですが、この TXTダウンロード の機能がログインした状態でないと利用できなくなったようでしたので、Web取込 と同じ仕組みでの取り込をするように変更しました。 ですので、今までと少し違った形式での取り込みになると思われます。 おそらくですが区切りか何かに使われている横のラインは今までは「*********」というような文字列になっていたと思うのですが、これが新しい取り込み方だと何もなくなる、といったような差が出てくるような気がしています。 なお、この問題はユーザ様側からのお問い合わせがかなり増えるタイプの問題になりますので、このバージョンに関してはAppleさんの審査が通り次第リリースしようと思っています。おそらく審査は2,3日かかると思われます。 ですので、その2,3日の間に届かなかったテスト結果報告は次回以降のリリースになってしまいますので、お忙しい中申し訳ないのですがβテストのテスト結果報告はできるだけ早めにお願い致します。 Version 1.1.46 (1.1.103) 2018/11/30 - 設定 → 小説の自動更新 を ON から OFF にした時に、自動更新が停止していなかった問題を修正 全く気づいていませんでした。すみません。テスターさん本当に助かっています。ありがとうございます。 問題を起こす状態にするのは単に「設定 → 小説の自動更新 を ON から OFF にすれば良い」んですが、 自動更新自体が起こるのはこれ、iOS側 が余裕があると判断してくれないと実行してくれないのでいつになったら自動更新がかかるのかがわかりません。 早ければ1時間後、遅いと何日もかかるかも……? という位なので多分確認しにくいと思われます。 「*個の小説が更新されました」といった通知が飛んできた場合は自動更新が動いているという事になりますので、OFFなのにこれがやってきたらおかしい、という判断になります。 Version 1.1.46 (1.1.102) 2018/11/26 - 小説本文が表示される時に別アプリがバックグラウンド再生している音楽等が止められる、という問題に対応 に漏れがあったので再度修正 まだ漏れがありましたので修正しました。テスターさんありがとうございます。非常に助かります。ありがとうございます。 具体的には、内部処理で再生の停止を行おうとした時に、再生中でなくても別アプリのバックグラウンド再生が止められる、という箇所があったのを修正しています。 再現しやすいのは小説の本文が表示されている状態から表示されないようにしようとする(例えば)本棚に戻ろうとする)と再生していようがいまいが再生停止のプロセスが走りますのでこの問題を踏めます。 再現するには以下の条件が必要です。 1. 『設定 → 「他のアプリで音楽が鳴っても止まらないように努力する」』がOFFの状態であることを確認(これがONだと再生は止まりません) 2. 本棚で小説をタップして小説本文が表示されている状態にする 3. ミュージックアプリ等で音楽再生を開始 4. ことせかい に戻り、2. で表示している小説本文を表示しなくなるようにする(本棚に戻るなど) 今回は動作のパスも確認したのでさすがにこれで漏れはないと思うのですが…… これだけ見逃しがあると自分を信用できないのでまたもう一週間位はβテスターさん達と一緒に使って様子見しますかね……(´・ω・`) Version 1.1.46 (1.1.101) 2018/11/22 - 小説本文が表示される時に別アプリがバックグラウンド再生している音楽等が止められる、という問題に対応 に漏れがあったので再度修正 何度も修正してしまって申し訳ありません。(´・ω・`) 前回 Version 1.1.46 (1.1.100) で修正したものは 本棚画面から小説名をタップして小説の本文が表示される瞬間 のもので、 今回 Version 1.1.46 (1.1.101) で修正したものは ことせかい の起動時 のものです。 同様の処理を行っている所は上記の二箇所しか無いはず(一応 source code 全てを対象に検索したのでそれ以外は無いはず……)なのでこれで期待する動作になると思われます。 Version 1.1.46 (1.1.100) 2018/11/21 - 小説本文が表示される時に別アプリがバックグラウンド再生している音楽等が止められる、という問題に対応 確認方法としては、 1. 『設定 → 「他のアプリで音楽が鳴っても止まらないように努力する」』がOFFの状態であることを確認(これがONだと再生は止まりません) 2. 本棚タブは本棚が表示されている(又は ことせかい が終了している)のを確認(小説本文の表示に切り替わった時に発生するので本棚タブに小説本文が表示されていない状態にする必要があります) 3. ミュージックアプリ等で音楽再生を開始 4. ことせかい を起動して本棚タブで小説本文を開く という手順で、4. の時に再生が停止しなければ直っている、という形になります。 Version 1.1.46 (1.1.99) 2018/11/16 - 設定 → ルビはルビだけ読む を ON にすると出てくる ルビではないと判断する文字 の初期値を「・、  」から「・、  ??!!」に変更 「漢字(ルビ)」という形式はルビなので、「正確(?!)」もルビとして判断されてしまって読み上げられないという状況が発生していたものへの対応になります。 読み上げられない文字という文字集合は正規表現には無いので一つづつみつけないといけないんですが、どうしたもんか。(´・ω・`) - Web取込 で取り込んだ小説が多めにある時に、本棚で全ての小説のダウンロードを開始してしばらくすると落ちる問題の一部を修正 内部処理でメモリが開放されずにたまり続けてメモリが足りなくなって落ちていたものを修正しました。 これで、自動更新がなんか最近うまくいってないんだよなぁという問題の一部が解消しそうな気がします。 スコープから外れたら開放して良いものは勝手に開放されるのかなぁと思っていたんですけれど、明示的に autoreleasepool で指定してやらないと開放されない事があるんですね。(´・ω・`) Version 1.1.46 (1.1.98) 2018/11/14 - 設定 → ルビはルビだけ読む を ON にすると出てくる ルビではないと判断する文字 の初期値を「・、」から「・、  」(半角スペースと全角スペースが追加されたもの)に変更しました。 - 上記の変更に伴い、起動時に「ルビではないと判断する文字が」今までの(古い)初期値であった場合には最新の初期値(「・、  」)に強制的に上書きするような処理を入れています。 多分これを入れておくことで「ルビを読み飛ばした」という問い合わせ対応が減るに違いないです。 - 設定 → 「他のアプリで音楽が鳴っても止まらないように努力する」の所に「(イヤホンやコントロールセンターからの操作を受け付けなくなります)」という文言を追記 これは「他のアプリで音楽が鳴っても止まらないように努力する」をONにした場合には「アプリケーションの種類に応じた音声の取り扱いガイドライン」 https://developer.apple.com/jp/documentation/Audio/Conceptual/AudioSessionProgrammingGuide/AudioGuidelinesByAppType/AudioGuidelinesByAppType.html の「協調型音楽制作アプリケーションに関する音声まわりのガイドライン」に準拠した挙動となり、リモコン操作を受け付けなくなるのは仕様(「遠隔制御イベントにサインアップしない」が適用されているという事)のようなのですが、恐らくこの挙動は期待されていないというか推測できないと思われますので、「(イヤホンやコントロールセンターからの操作を受け付けなくなります)」という文言を追記することにしました。 Version 1.1.46 (1.1.97) 2018/11/14 - 設定 → 他のアプリで音楽が鳴っても止まらないように努力する の ON/OFF 設定を追加 この設定を ON にすると、ミュージックアプリ(Apple純正の奴)での音楽再生と ことせかい での読み上げが同時にできるようになります。 多分ゲームとかで共存できなかった物でも共存できるようになるのではないかな?と思うのですが、駄目なものもありそうなので「〜努力する」といった書き方にしています。 また、今までと動作が変わるので「〜をしたら止まると思ってたのに止まらなくなったではないか」的なお問い合わせが怖いので ON/OFF 設定にしました。 - この設定を ON にすると、「他のアプリの音を小さくする」の ON/OFF 設定が追加されます。 こちらは他のアプリと同時に ことせかい の読み上げが行われる時に、他のアプリ側の音を小さくするか否かの ON/OFF 設定になります。 - 設定 → 再ダウンロード用データの生成 で生成されるバックアップデータ(軽量の完全のどちらも)にこれら2つの設定値が追加されます。 Version 1.1.46 (1.1.95) 2018/11/13 - 設定 → ルビはルビだけ読む の ON/OFF を切り替えた前後で開いていた小説のページが変わらないまま読み上げを開始するとその設定が反映されない問題を修正 - 設定 → ルビはルビだけ読む でルビとして判断される基準を少し変更 ことせかい でのルビの判定は 小説家になろう様 の定義(https://syosetu.com/man/ruby/ )をもとにしているのですが、定義にある「|AAA《BBB》」の形式ではない「|AAA(BBB)」の形式でもルビとして認識されているようなので、「|」で始まるものは「《》」だけでなく「()」(全角丸括弧)と「()」(半角丸括弧)でも反応するようにしました。 また、今まではルビを振られる文字もルビとして振り替えられる文字も長さに制約はなかったのですが、小説家になろう様 の定義(https://syosetu.com/man/ruby/ )ではそれぞれ10文字までと書いてある事に気づいたので同様に10文字までしか反応しないようにしました。 具体的な例としては、「AAA|AAA(BBB)XXXXX、XXXXXX、XXXXX。YYYYY、YYYYY、YYYYY《CCC》ZZZZZ。」という文があった時に、「AAA《CCC》ZZZZZ。」と読み上げていた、という問題が修正されます。 Version 1.1.45 (1.1.94) 2018/11/07 - 読み上げ中以外ではページめくり音が出ないように Version 1.1.45 (1.1.90) 2018/11/05 で修正した「ページめくりの時に鳴る音の扱いを、システムサウンドからアプリ側サウンドに変更」による影響でページめくり音が読み上げと同様にマナーモードの影響を受けなくなったため、目で読んでいる時(読み上げている時)にページをめくるとマナーモードであってもページめくり音がするという状態になっていたため、読み上げを行っている時以外にはページめくり音を出さないようにしました。(テスターさんありがとうございます) - 本棚の左上の検索ボタンの挙動を少し変更しました - キーボード側の改行(Enter)押下 で OK が押された挙動にしました - さすがにそろそろリリースしたいですね……(´・ω・`) Version 1.1.45 (1.1.92) 2018/11/06 - 本棚の左上の検索ボタンの挙動を少し変更しました - 虫眼鏡のアイコンから「検索」という文字列に変更して、検索中は「検索(検索文字列)」という表示になるようにしました これで検索中なのか否かがわかりやすくなる……と思うんですが、iPhone SE 等の幅の狭い端末だと表示が切れてしまってよくワカラン事になりそうな予感もしますね…… あと、将来的にボタンを増やそうとした時に増やしにくくなりますね…… - 検索ボタンを押して出てくるダイアログに、「クリア」ボタンを追加しました。同様にテキストボックスに文字消去用の✗ボタンを追加しています。 これで検索をやめる時のタップ数が少し減るはずです。 ついでにキーボード側の Enter 押下で OK が押されるようにしようと思ったんですけれどダイアログを出している EasyDialog という外部ライブラリの変更が伴うのでどうしようこれ面倒くさい…… という気分でいっぱいです。後回しでいいですか……?(´・ω・`) Version 1.1.45 (1.1.91) 2018/11/06 - 本棚の左上に検索用のボタンを配置 しました!( ゚∀゚)b Version 1.1.45 (1.1.90) 2018/11/05 - ページめくりの時に鳴る音の扱いを、システムサウンドからアプリ側サウンドに変更 今までのページめくり音はシステムサウンドとして鳴らしていたため、アプリ側のサウンドとして鳴っている読み上げの音量と別の音量制御(アラームや着信音の方の音量制御)が適用されていました。 この修正ではこのなる時の音量の扱いをアプリ側のサウンド音量に従う方に変えましたので読み上げの音量と同期してページめくりの音量が変わるようになります。 多分この方が普通?な気がするのでオプションによるON/OFFはつけない予定なのですが、それは困るという方がおられましたらON/OFFでシステムサウンドとしてページめくり音を鳴らすような方法も考えますのでβテスト結果報告の時にでも(理由も添えて?)教えていただければと思います。 - 本文上で長押しして出てくる「読み替え辞書へ登録」を押した後の読みの修正詳細にて、読み替え前の文字列を選択されていた文字で初期化するように 「読み替え辞書へ登録」を押した時にこうなっていないのはおかしいですよねカテジナさん…… Version 1.1.45 (1.1.89) 2018/11/01 - バージョン更新時のダイアログを消した後でも最後に読んでいた小説を開くように これはなんで今までやらなかったんだ、という気がしています。(´・ω・`) - 起動直後の一回だけ、最後に読んでいた小説が一番上に表示されるように本棚の表示位置が移動されるように これで、ことせかい を起動 → 最後に開いていた小説が開くのでそのまま聞く → 読み終わったので本棚に戻る → 今読んでた小説はどこだったっけかなと探す の最後の部分が、「今読んでいた小説は一番上(下が少なければ画面内のどこか)にあるはずなのでスクロールしなくても発見できる(はず)」になる…… という目的です。まぁ…… 嬉しい人は少ないかもですけれど、 起動した後の本棚から本を開いて戻った場合には本棚ではその本が画面内に表示されている状態になっていたわけなので、それに似通った表示になるのでいいかなぁと。 Version 1.1.45 (1.1.88) - 最大連続再生時間が終わるのと同時にページめくりが発生した場合に再生が停止しなかった問題を修正 これの再現はちょっと面倒です。最大連続再生時間を最小の1分にして、自作小説で1章がだいたい1分で読み終わるようにした章を作って、コピペで2,3章分同じ章を保存した上で、章の最初の所から読み上げ始めれば、大体ページめくりと同時に再生を停止しようとするはずです。 - 再生を停止した後、設定された最大連続再生時間後に「連続再生時間を超過したので再生を停止します」的なアナウンスが流れてしまっていた問題を修正 -「設定」->「コントロールセンターでの前の章や次の章へのボタンを少し巻き戻し・少し進めるボタンへ変更する」が ON になっている状態で、一番最初の章で限界まで巻き戻そうとすると「設定」->「コントロールセンターに再生時間を表示する」が ON の時に表示される再生時間が再生が終わった時間を表示してしまう問題を修正 なにこの長い日本語わかりにくい……('A`) - 読み上げ中にイヤホンジャックからイヤホンを引き抜いた時に、再生位置がかなり前に戻ってしまう問題を修正 今までは読み上げに使っているブロック(1文〜1節位の分量)の先頭まで巻き戻る可能性がありました。 なお、設定される読み上げ位置は引き抜いた時のものではなく、引き抜く少し前のものを目標に少し巻き戻すように設定しました。 そうしないと引き抜かれている時に読み上げていた部分が聞こえなくなってしまったので。 Version 1.1.45 (1.1.87) - 読み上げ開始時にロック画面での再生位置表示がおかしくなる問題へ対処(したはず) 発生条件はわかっていないのですが、「設定」->「コントロールセンターに再生時間を表示する」がONになっている時で、読み上げを開始した時にそのコントロールセンターの再生時間が再生終了の時間(例えば再生時間が5分だと判定されていたら、いくら読み上げる文章が後ろにあっても5分の場所になってしまっているという状態)になる場合があったのを、読み上げ開始時に強制的に値を上書きすることを試みる事で回避できたらないいなぁというものです。 ただ、この問題の発生条件がわかっておらず、確実に再現させる方法が無いために、この対応で問題が解消したのかどうかがよくわからない、という状態になっています。 ということなので、とりあえずこの修正の入った状態で暫く使ってみて、上記のような問題が起こらないのであれば直ったということにしたいなぁ……という感じです。 これもまた直ったかどうかはわからないのでアナウンスはしないでこっそりリリースな感じになってしまいそうな予感はしますが……(´・ω・`) そういえば、バックグラウンド再生中に再生が止まらないようにと入れたオカルト的手法(無音の音を再生し続ける)っての(Version 1.1.43 (1.1.82) で常時ONになっている奴)なんですが、あの後バックグラウンド再生中に再生が止まったという方はおられますか? おられましたら「直ってないみたいだよ(もし覚えていたら詳しい状況(再生が止まった小説名や止まった箇所等))」と教えて頂けると嬉しいです。 - 設定 -> 更新履歴 と 設定 -> クレジット の Editable(編集可能)属性 を OFF にしました。テスターさんありがとうございます。 いつから ON になっていたんだろう……(´・ω・`) - 最大連続再生時間のカウントダウンが、読み上げ中にページ切り替えが発生した時にリセットされていた問題を修正 例えば全ての章(ページ)の読み上げ10分かからないような小説を読み上げている時に、「設定」->「最大連続再生時間」が10分に設定されていると延々と読み上げが停止せずに最後まで読み上げられてしまっていたはずです(今はそれが直っているはずです)。 - 最大連続再生時間を超えて再生が停止する時にそのようにアナウンスをするようになります。 Version 1.1.45 (1.1.85) - 小説本文を表示している部分でのスライドバーの最大章(ページ)数は、現在ダウンロードされている章(ページ)の数を表示するように変更 ダウンロードされている章(ページ)の数ということで、1章(ページ)目から順にダウンロードされているのであれば数は合うはずで、ことせかい はそのようになるようにしか章(ページ)をダウンロードしないはずなので大丈夫だと思うのですが、そうでないパスがあると表示できない章(ページ)が現れるはずです。 例えば、ダウンロードされている章(ページ)が、[1, 2, 3, 5, 6, 8, 9] (4と7が無い) という状態が発生した場合、スライドバーの最大値は 7 になります(ダウンロードされている章(ページ)の数は7個なので7になる)ので、1〜7までの章(ページ)しか指定できずに 8 と 9 章(ページ)は表示できず、ダウンロードされていない 4 と 7 章(ページ) を表示しようとすると「文書の読み込みに失敗〜」といった表示になります。 ただ、通常の使用においてはそのような状態になることは無いはずなので、問題になることはない…… と思うんですが、そのような状態になってしまうような事があると上記のような形で誤動作するはずです。 多分、設定 -> 再ダウンロード用データの生成 -> 完全バックアップ〜 で生成したデータを自分で書き換えて歯抜けのデータにして、その歯抜けにした小説を ことせかい の側で削除してから、歯抜けにしたデータを読み込ませることでそのような状態が生成できそうな気がしますが…… そんな事をする人は誤動作しても驚きませんよね……?(´・ω・`) なお、そのような歯抜けになった状態が生成されてしまった場合、Web取込 経由で取得された本についてはその歯抜けの部分を再度ダウンロードするには本棚からその小説を削除してもう一度最初からダウンロードしなおす以外の方法はありません。のですが、そのような事になったので困ったといったお問い合わせは今まで受けたことがないので多分きっとそんな事になるパスは存在しないと信じています。 Version 1.1.44 (1.1.84) - なろう検索 経由でのダウンロード時に、ダウンロードが失敗を検知できていなかった問題を修正 この状況を発生させるのはちょっと面倒です。やるべきことは「小説家になろう様 のサイトに対して何度もダウンロードを試みて、ダウンロード制限状態になる」という状態を発生させればダウンロードが失敗が発生するのですが、普通に ことせかい を使っているだけだとこれは発生しません。手元に iOS 端末 が複数あるのであれば、それぞれに ことせかい をインストールして、掲載されている章の多い(100以上の章があるものが望ましいです)小説を、それぞれの iOS端末 にインストールした ことせかい で同時に1章目からダウンロードを開始することで発生させることができます。 これが発生すると、1.1.83 以前の ことせかい では、"「小説の自動更新」をONにしている場合などでダウンロード制限のようなものが外れた頃に再度ダウンロードを試みるようにすることで、ゆっくりとですがダウンロードができるようになると考えられます。 - Web取込 タブのブックマークの初期リストから アルファポリス を外しました - 同時に標準で含まれていた アルファポリス へのブックマークがあった場合には、非対応になった旨の文字列が追加されるようにしました。 Version 1.1.44 (1.1.83) - 設定 → 読みの修正 で個々の変換ルールをタップすると詳細画面に移行するように - 変換ルールをタップして詳細画面に移行した場合、「確定」ボタンを押すとタップされた修正候補を一旦削除してから、改めて登録しなおすという動きになります 例えば「あいうえお」から「かきくけこ」への変換ルールをタップして出てきた詳細画面で、「あいうえお」を「あかさたな」に書き換えて「確定」すると、「あいうえお」から「かきくけこ」への変換ルールは消えて、「あかさたな」から「かきくけこ」への変換ルールが追加される、という挙動になります(なるはずです)。 この修正は、正規表現周りは何回かテストしてみないとちゃんと動いているかわからないのですが、今までですと毎回新しく変換ルールを入力しないと駄目であったので、使えない変換ルールが増えていくというのと、似通った文字列を何度も入力しなくてはならなくて辛い、という事から、既存の物を書き換えるという事ができるようにするためです。 そういう意味では使いやすくなった…… と…… 思います。多分。 - 設定 → 読みの修正 → 読みの修正詳細 画面にて、正規表現マッチがOFFの場合のみ、読み替え前の文字列を変更すると変換テスト用の読み替え前文字列がその文字列に変更されるようになります ……この日本語何言ってるのかよくわからない('A`) えぇと、「読みの修正詳細」画面には4つの文字列が入力できそうなテキストボックスがあるんですが、それは上から A(読み替え前の文字の入力欄)、B(読み替え後の文字の入力欄)、C(テストに使われる読み替え前の文字列)、D(CをAとBのルールで変換した後に得られる文字列) なのですが、この A の部分を書き換えると C が A と同じ文字列に置き換わる、という意味です…… これでも画面を観ながらでないとよくわからん…… き、気合で!気合で理解してください!('A`) こちらの変更意図は、正規表現の概念が追加される前の読み上げテストと同等のテスト読み上げができるように、という感じです。 Version 1.1.43 (1.1.82) - iOS 12 における[〜中略〜]暫定的対応の六回目です 書き換え対象の文字列を "[\s•・*]"(空白や改行に加えて "•"(BULLET), "・"(KATAKANA MIDDLE DOT), "*") に拡大しました。 "•"(BULLET) なども読み上げられない文字列なのですが、"α•α•α•α" といった文字列を読み上げさせるとずれが発生するけれど、"ααααα" であればずれは発生しないので、とりあえずの対策です。とはいえ、何故そうなるのかはさっぱりわからないため そもそもこれでいいのかどうかさっぱりわからないので、これでまた暫くβテスターの皆さんと一緒に使ってみてずれが発生する場合を発見しつつ潰して…… という感じでしょうか…… ただ、読み上げに使う文字を変更する形での対応には限界があるであろうことはわかってきたのと、ずれが生じる例が報告されることも少なくなってきたような感じなので、この問題については Appleさん 側がなんとかしてくれるまでは根本的解決はできない事と諦めて、このバージョンで致命的な問題がでなければそれで一旦リリースしてしまおうかと思っています。 - iOS 12 における[〜中略〜]暫定的対応の五回目でやたら遅くなった部分を高速化しました(仕組みは少し変わりますがやってることの意味は変わらないはずです) - 読み上げ中の位置表示に関する計算方法を変更しました。 読み上げ開始位置の指定に長押しして範囲選択したり、読み上げ中に表示される読み上げ位置などの位置表示が「合わない時がある」から「合わない時でもまぁ、だいたいあってる」に変わるはずです。 もちろん、読み上げ中の位置がずれる問題が発生している時はどうしようもなくずれます。 - 読み上げ中に無音の音を鳴らし続ける事でバックグラウンド再生中に再生が停止するのを回避しようとする試み(一つ前の ビルド番号 1.1.81 でデバッグ設定を呼び出してONしていたもの)を常時ONにするようにしてみました。 それほど消費電力は増えないみたいというのと、1.1.81 で次の章に移動する時にやたら時間がかかって再生が止まるというのがこの対策で結構効果がありそう(OFFの時に10回やって9回再生が止まっていたのが、ONにしたら10回やって10回止まらなかったので効果が無い事は無いと思われる)なので。 ただ、原因がわからないままの対策なので、直しましたとは言えず、リリース告知文には書きにくいですね。(´・ω・`) Version 1.1.43 (1.1.81) - iOS 12 における、読み上げ中の文字の表示位置がおかしくなる場合についての暫定的対応の五回目です どうやら改行文字でも読み上げ中の文字の表示位置がおかしくなることがありましたので、改行文字についても "α" に変換して読み上げさせることにしました。 ただ、一旦読み上げ用の文字列を生成した後に改めて空白文字を一括して変換するという事をしていて、その時に正規表現によるマッチを使うため、変換作業に結構な時間がかかるようになります。 と、いうことで、お手数をおかけしてしまっているのですが再度「設定タブ」→「iOS 12 で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する」をONにした状態で「あるふぁ」と読み上げられてしまうであるとか、読み上げ中の表示位置がおかしくなる場合を発見したら教えて頂けると嬉しいです。 ただ、四回目のもので既にあまり「表示位置がおかしくなった」という報告は寄せられなくなっており、おそらく今回の修正で一応は大丈夫なのではないか……?という期待を持っています。なお、「あるふぁ」と読み上げられてしまったという報告は今の所1件もよせられておりませんのでそちらは多分大丈夫なんじゃないかなぁと思っています。 なお、表示位置がおかしくなるのを確認した方は、問題の起きた文章そのものが開発者側の端末でも再生させてみることができるように、 - 問題の起きた小説の名前(とできればURL)、問題の起きた小説の取り込み方(なろう検索経由なのかWeb取込経由なのか)、問題の起きた章(ページ) - 自作小説など、取り込むものでない場合はその本文そのもの(できればテキストファイルとしての添付が望ましい) - 問題の起こし方(どの部分から読み上げを開始するとどのようにズレるのか) - 可能であれば読み替え辞書や読み上げの間の設定(設定タブ -> 再ダウンロード用データの生成 -> 軽量バックアップ で生成されたバックアップデータに含まれます) を送って頂けると助かります。 - 設定タブ -> ルビはルビだけ読む を10回ON/OFF(ON->OFF->ONで1回なら5回)で出てくるデバッグ設定に、「再生中に無音の音を鳴らし続けることでバックグラウンド再生中に再生が停止しすることがないように祈る」のON/OFF設定を追加 正直効果があるかどうかさっぱりわからないのですが、作ったのを忘れないようにデバッグメニューに入れておきます。 これは、「バックグラウンド再生中に再生が止まり、アプリを表示してバックグラウンドからフォアグラウンドに戻した時に再生が再開する」ような問題に対して、あるいはこれで直ったりするのでは?という事をするためのものです。 なのですが、これで直ったかどうかを確認するためには「バックグラウンド再生中に再生が止まり、アプリを表示してバックグラウンドからフォアグラウンドに戻した時に再生が再開する」という問題が確実に再現するような操作手順が明らかになっていないと、そもそもこの対策でバックグラウンド再生が止まらなくなったのか、単にバックグラウンド再生が止まらなかっただけなのかの確認ができません。 そのためこれを正式にその対策とするわけにもいかず、とりあえず隠し機能てきなデバッグメニューに入れておくことにしました。 とりあえず、バックグラウンド再生で再生が止まるのが嫌だなぁと思っている人はこの機能をONにして生活してみて、 その状態でバックグラウンド再生が止まった(フォアグラウンドに戻したら再生が再開した)場合には、「やっぱりこの方法は効果がないようです」と連絡して欲しいです。 Version 1.1.43 (1.1.80) - 設定タブの読み上げ時の間の設定 で、個別の設定を変えたり追加した後に読み上げ時の間の設定に戻ってもそれらの変更が反映された表示にならない問題を修正 - iOS 12 における、読み上げ中の文字の表示位置がおかしくなる場合についての暫定的対応の四回目は継続中です この修正は本当にこれで良いのかの自信を持てるようにするためにもう暫くβテスターの方々と一緒に使い倒してみて不都合が出てこないのを確認したいです。 前回(1.1.79)のものと同じ内容を以下に挙げておきます。 - 前回(1.1.78)では空白とみなされる文字を正規表現での \s (https://developer.apple.com/documentation/foundation/nsregularexpression#1965589 によると [\t\n\f\r\p{Z}] と同じ意味) で表現していたのを、[\t\f\p{Z}] に変更しました。 というのは、「設定」->「読み上げ時の間の設定」で「<改行>」を対象にしたものがあった場合に、その間の設定よりも優先して空白を "α" に読み替える設定が適用されてしまっていたため、これを回避するための処置になります。 ただ、ちょっと気になっているのは、この「読み上げ中に読み上げ位置がおかしくなる」問題は改行を含む文字を読み上げようとした時にも発生するのではないか、という事です。ただ、そのような報告は今の所入ってきていないように見えるので多分……きっと……大丈夫……?なの?かな……?と思ってこれで行ってみる事にします。 Version 1.1.43 (1.1.79) - 1.1.78 で追加した「設定」->「iOS 12 で読み上げ中の読み上げ位置表示がおかしくなる場合への暫定的対応を適用する」で出るダイアログで、iPhone SE 等ではダイアログが縦に長くなりすぎてOKボタンが押せなくなっていた問題を解消 - iOS 12 における、読み上げ中の文字の表示位置がおかしくなる場合についての暫定的対応の四回目です。 - 前回(1.1.78)では空白とみなされる文字を正規表現での \s (https://developer.apple.com/documentation/foundation/nsregularexpression#1965589 によると [\t\n\f\r\p{Z}] と同じ意味) で表現していたのを、[\t\f\p{Z}] に変更しました。 というのは、「設定」->「読み上げ時の間の設定」で「<改行>」を対象にしたものがあった場合に、その間の設定よりも優先して空白を "α" に読み替える設定が適用されてしまっていたため、これを回避するための処置になります。 ただ、ちょっと気になっているのは、この「読み上げ中に読み上げ位置がおかしくなる」問題は改行を含む文字を読み上げようとした時にも発生するのではないか、という事です。ただ、そのような報告は今の所入ってきていないように見えるので多分……きっと……大丈夫……?なの?かな……?と思ってこれで行ってみる事にします。 ということでとりあえずはこの状態で暫く使ってみて問題が発生しないことを見極めてからリリースをしようかなぁと思いたいです(前回も前々回も同じことを思っていたので3度目の正直になればいいなぁ……) Version 1.1.43 (1.1.78) (1.1.77 は欠番) - iOS 12 において、読み上げ中の文字の表示位置がおかしくなる場合がある問題への暫定的対処のON/OFF設定を追加 - iOS 12 における、読み上げ中の文字の表示位置がおかしくなる場合についての暫定的対応の三回目です。 今回は「正規表現を使って空白とみなされる文字の並び("\s+")を、"α" に置き換えて読み上げさせるようにする」かどうかのON/OFFの設定を追加しました。 これは、少なくとも今の所の iOS の音声合成エンジンでは "α" を発話しないため、これを空白文字の代わりにしようというものです。 ただ、読み替え先を "α" にするというのは、いつ何時音声合成エンジン側で "α" を発話するようになるかわからないので爆弾をかかえるような事になるんですよね…… なので、暫定的対応であることを明示した上でオプションでON/OFFができるような形にしました。 初期値ではOFFになっています。 と、いうことなので、できましたらば、βテスターの方々で - 読み上げ中の表示位置がずれる - 空白があるべきところで「あるふぁ」などといった謎の誤読み上げが発生する というような事が「ない」事を確認して頂ければと思う……ん……ですが…… そういう「無い事」を確認するのはいわゆる悪魔の証明……ですよねぇ……これはちょっと長い期間ドッグフーティングするしかなさそうですね……('A`) - ON/OFFの設定が追加されたことにより、「設定」→「再ダウンロード用データの生成」で生成されるバックアップデータに「iOS 12 で読み上げ中の読み上げ位置がおかしくなる場合への暫定的対応を適用する」のON/OFF設定が追加されます。 Version 1.1.43 (1.1.76) - iOS 12 における、読み上げ中の文字の表示位置がおかしくなる場合についての暫定的対応の二回目です。 今回は " "(全角スペース) があると表示位置が更新されなくなるという問題があったので " "(全角スペース) を " "(半角スペース2つ) に読み替えさせます。 - 前回の対応では取り込んだ保存されるデータを書き換えましたが、今回は保存されるデータには手を付けずに、 表示時まではそのままで、読み上げ時に半角スペース2つになるように読み替え辞書に潜ませるという方法を取っています。 つまり実装方法が変わっているので効果が出ない場合があるかもしれません。 - とりあえず全角スペースで駄目になるのを試してみるには、自作小説を追加して、内容を「あいうえお かきくけこ」("お"と"か"の間が全角スペース)というものにしたものを作れば試せるかと思います。 - おそらくこれら2つ("\u2028" と 全角スペース)以外のものもありそうな予感がするので気づかれた方は教えてください……(´・ω・`) - なんとなく、画面表示上は何も表示されない系で、かつASCII文字コードには無い領域の物(≒全角の記号系の表示されないもの)が 表示位置をおかしくする原因になっているんじゃないかなぁという気がしています。 なのですが、そんなのどう探すといいんですかね。もしかしてUTF-8を全部見ていかないとだめなんですかね……('A`) - iPhone X 等のノッチのある iPhone では NetworkActivityIndicator(画面上部の時間やバッテリ状態が表示されている当たりに出てくるくるくる回るアレ)がなくなったらしいので、代わりに K.I.T.T みたいな左右にふゎんふゎんする表示をしてくれる FTLinearActivityIndicator というのを導入 - なお、ことせかい では NetworkActivityIndicator をダウンロード中の表示に使っています Version 1.1.43 (1.1.75) - 外部ライブラリのバージョンを現時点での最新のものに更新しました - 色々なところで使っているのでどこが変わったとかは書けません(´・ω・`) - ビルド環境を Xcode 11 から Xcode 12 に更新しました - Xcode に言われるがままに Swift 部分を Swift 4.2 へコンバートしました(ざっと眺めた範囲では特に問題になりそうな変更は見当たりませんでした) - 読み上げ中の表示位置を動かす命令が main thread 以外から呼ばれる可能性を減らしました(読み上げ中に落ちる問題のうちほんの一部(もしかすると発生しない問題かもしれない位少ない可能性のもの)がなくなります) - 読み上げ中の文字表示に使っている選択範囲が表示されない可能性があった問題を修正(こちらもその問題は発生していなかったかもしれない位のもの) - iOS 12 において、読み上げ中の文字の表示位置がおかしくなる場合があった問題への暫定的対処をした(全ての問題が解決するわけではなく、一部に対して(具体的に言うと "\u2028" が入っている場合には多分確実に起こる問題であったのでこれを "\n" に変更するようにした)。しかし、別のパターンで同様の問題が起きることが確認されており(例えば "long sentence. long long sentence. long long long sentence..." という感じのものを読み上げさせると発生する)、全てが対処できたわけではない) - 確認するには "\u2028" が小説の本文に入っていないと駄目なので、とりあえず イリヤの空、UFOの夏@カクヨム/正しい原チャリの盗み方・後編 15/15 https://kakuyomu.jp/works/1177354054885579795/episodes/1177354054886002315 をWeb取込で取り込んで、多分だいたいどこでもいいのですが、とりあえず『「やるじゃん」そうつぶやいた。』という辺りに読み上げ位置を設定し、 読み上げを開始すると、実際に読み上げている部分と表示されている読み上げ位置がずれているのが確認できるかと思います。 あ、ずれるのを見るには AppStore側 からダウンロードして Version 1.1.42 で上書きした状態で、です。 このバージョンではその小説に関しては正常に動くように修正したつもりです。 Version 1.1.42 (1.1.74) - キーボードが出るシーンにおいて、キーボードが閉じられない場合があったのを改行を入れるなどで閉じられるように変更 - 変更を行ったのは以下のシーンになります - ユーザ登録小説の編集シーンでの小説名入力時 (改行で消えるようになった) - なろう検索 (改行でしか消えなかったのを入力欄以外のタップで消えるようになった) - 設定 -> 声質の設定 (スクロール部の上下スワイプでも消えるようになった) - 設定 -> 読みの修正 -> 「+」で追加しようとした時 (改行でも入力欄以外のタップでもキーボードは消えなかった) - 設定 -> 読み上げ時の間の設定 -> 読み上げ時の間の詳細設定 (改行で消えなかった) Version 1.1.41 (1.1.73) - 内部データベースの保存場所を移動しました - 起動時に保存場所を確認して移動します。場合によっては - 起動時にやたら時間がかかる(ファイルコピーに時間がかかる?移動してるからそうはならないと思うけれども……) - データが全部吹き飛んだように見える 事がありますのでその辺りを注意して確認してみてください。 Version 1.1.41 (1.1.72) - 「読みの修正」でのテスト読み上げの時に「声質の設定」の標準設定を使うように変更 - 「読みの修正」での正規表現書き換え時に、書き換え先 $* を '\' でエスケープできるように - 1.1.71 までは "(あ)" を "\$1$1" と書き換えようとすると '\' によるエスケープがかからないため "\ああ" になっていたが、今回の修正で "\$1あ" になるようになった(はず) 同様に、書き換え先が "\\$1$1" であれば、'\' がエスケープされて "\ああ" になる(はず) Version 1.1.41 (1.1.71) - 「読みの修正」で正規表現による読み替えができるように - 「読みの修正」を登録する時に正規表現が使えるようになります。 - 正規表現を使用するか否かのON/OFFが追加されます。 - この修正により影響の予想される項目は以下になります。 1. 読みの修正の読み替え文字のリスト表示 1.1. 読み替え設定の検索時の挙動 1.2. 読み替え設定を削除した時の挙動 1.3. 読み替え設定が追加された時の挙動 2. 読みの修正を入力している部分の表示 3. 再ダウンロード用データ(完全バックアップ・軽量バックアップどちらでも)の内容(読み替え辞書部分) 4. 正規表現による読み替え - 正規表現は iOS で提供されている NSRegularExpression を使っています。 https://developer.apple.com/documentation/foundation/nsregularexpression - NSRegularExpression で利用可能なメタキャラクタ、オペレータを利用可能になります。 https://developer.apple.com/documentation/foundation/nsregularexpression#1965589 - キャプチャした文字について、"$数字" による参照が可能です。 - 例えば、"([0-90123456789]+)mb" を "$1メガバイト" に読み替える設定を正規表現として登録すると、 "1mb" を "いちめがばいと" と読み替えるようになったり、 "([^\p{Han}])己" を "$1おのれ" と登録すると、"自己" は "じこ" のまま、 "太郎は己の" を "たろうはおのれの" に読み替えるように指定できるようになります。 Version 1.1.40 (1.1.70) - 「小説を読む時に背景を暗くする」がONになっているときに、小説本文のスクロールバーが見えなくなっていた問題を修正 Version 1.1.39 (1.1.69) - 更新履歴の内容の更新のみ Version 1.1.39 (1.1.68) - 「設定」タブの「開発者に問い合わせる」内の「報告への返事」を「不要」「無くても良い」「必須」の選択式に変更 Version 1.1.39 (1.1.67) - |...《...》 の形式のルビにおいて、|(全角) には反応していなかった問題を修正 - 問題の確認方法 1. 「新規自作小説の追加」等で編集可能な本を作成する 2. 「ルビはルビだけ読む」をONにする 3. 1. で作った小説に、|漢字ひらかな漢字《あいうえお》 といったような感じの、漢字とひらがなの混じった物へのルビ記法を書き込む 4. その部分を読み上げさせてみて、ルビの部分だけが読まれる事を確認する(上記の例の場合、旧クライアントであれば「漢字ひらかなあいうえお」と読み上げられるが、新クライアントでは「あいうえお」となる) Version 1.1.38 (1.1.66) - 繰り返し再生時に、読み上げ位置が先頭に戻らない場合があった問題を修正 - 問題の確認方法 - ケース1(繰り返し再生:一つの章): 1. 任意の小説を開く 2. 開いた章で読み上げを開始して、途中まで読んだ所で停止する(読み上げ位置が保存される) 3. 設定タブで「繰り返し再生」を「一つの章」にする 4. 再生を開始し、章の末尾まで読み上げた所でその章の最初に戻るか否かを確認する(不都合のあるバージョンでは2.で保存した位置に戻ってしまう) - ケース2(繰り返し再生:最初から) 1. 複数の章のある小説を開く 2. 1章に移動し、読み上げを開始して、途中まで読んだ所で停止する(その章の読み上げ位置が保存される) 3. 設定タブで「繰り返し再生」を「最初から」にする 4. 2章以降の章に移動し、再生を開始し、章の末尾まで読み上げた所で1章の最初に戻るか否かを確認する(不都合のあるバージョンでは2.で保存した位置に戻ってしまう) Version 1.1.37 (1.1.65) - 設定タブに「繰り返し再生」の項目を追加 Version 1.1.37 (1.1.64) - アプリ内更新履歴を更新しそこなっていたのを修正 Version 1.1.37 (1.1.63) - 「再ダウンロード用データの生成」で小説の本文を含むバックアップもできるように - 対応読み込みファイルタイプに RTF(Rich Text Format) を追加 - 設定タブに「ことせかい について」(バージョン番号の確認)を追加 Version 1.1.37 (1.1.62) - 「再ダウンロード用データの生成」で保存される設定項目を増加