COCOA iPhone版のリセット不具合 Xamarinの基礎的欠陥が発見される

59
前へ 1 ・・ 6 7
Tomoaki Masuda @moonmile

@zipperpull あと、あまり言いたくはないですが、Xamarin EN コンポーネントで、TEK のチェック部分が - iOS ではスレッド内 - Android では本スレッド内 になってしまうのが、バグの温床になっている気がします。PlatformDetectExposuresAsync 内の実装の違いが影響している。

2021-02-15 08:40:47
zipperpull @zipperpull

@moonmile そういうことですよね。ENコンポーネント側でコールバックを呼ぶときのスレッドをプラットフォーム間で統一するほうが親切かなとは思うのですが、Xamarinというか.Netでは、asyncでなんでも呼び出して呼ばれた側(この場合は UserModelServiceとか)でどうにかする流行なのかなとは思いました

2021-02-15 08:45:10
Tomoaki Masuda @moonmile

@zipperpull いやあ、あれは「趣味」ですね。 Xamarin EN コンポーネントのほうは止む無くな感じなコードですが、UserModelService のほうは趣味っぽい。 まあ、Service クラスを作るのは PHP でも良くあるので、発想的には一般的ですが。Manager クラスとか Service クラスとかレポジトリとか。

2021-02-15 09:05:09
Tomoaki Masuda @moonmile

@zipperpull 老兵?としては、かつてデザインパターンと呼ばれていたものがフレームワーク側に浸透し、デザインパターンの本質が忘れられたままフレームワークの様式に更に特有のパターンを重ねてしまうという「過剰装飾」いえ「オシャレ上級者」になってしまっているのかな、と。

2021-02-15 09:11:09
zipperpull @zipperpull

@moonmile ぼくのほうがじじいかもしれないんでアレですが、おしゃれ非同期、おしゃれ上級者になっている感じはありますね。。

2021-02-15 09:16:25
Tomoaki Masuda @moonmile

たぶん、私が古いほうのプログラマに属するので、そう思うのかもしれないが、「他人様が書いたらライブラリは鵜呑みにせずに、確実に動く部分だけを使う」ことにしている。 組み込みとか運用では OS 側の挙動がおかしいことも度々あるので、なんとか自分達のコードで安全に回避する。

2021-02-15 08:46:27
Tomoaki Masuda @moonmile

なので、OSS のライブラリであろうと OS の挙動であろうと、基本姿勢は自分が確認したところ以外は **信用していない** だから、できるだけベタでも安全側に倒れるようにするし、二重チェック的なコードの書き方をするのです。ダサいけど、運用で止まるほうが損失が大きいので。

2021-02-15 08:48:35
Tomoaki Masuda @moonmile

接触確認アプリ(COCOA)に関しては、一見スマホアプリという華やか?な分野に見えるけど、内実はもっと運用側のベタベタなコードに落としておくべきで、そこの落ち度というか経験不足はコードを見る限り否めないですね。

2021-02-15 08:50:47
Tomoaki Masuda @moonmile

誰が尻ぬぐいをするかにもよるけど、当時(7月頃かな)「かなり金を積まれても嫌ですね」の意見は多々ありましたよ。Xamarin/C# という特殊性もあるだろうけど、それだけじゃない気はする。開発体制とか諸々、地雷っぽい感じがするし。

2021-02-15 08:57:53
>ω< @u_akihiro

1ヶ月単位でアプリが起動も表示もされず放置される前提で、"サーバーに毎日蓄積されるリストをローカルダウンロードして照合処理をするだけの単純な機能"が、簡単に作れるものなのかというと、プッシュ通知を組み合わせてアプリを外から起動でもしないと、無理かしらん。

2021-02-15 07:05:14
中村 良幸 (Nakamura Yoshiyuki) @nakayoshix

なるほど、サーバ側からのプッシュ通知でアプリを外から起動するというワザもあるんですね。 Android版COCOAで、アプリを起動せず放置した場合にバックグラウンドでのTEKダウンロードが行われず、結果として判定も通知も行われないという不具合への対処は、最終的にはこれしかないんでしょうか…🤔 twitter.com/u_akihiro/stat…

2021-02-15 10:07:40
>ω< @u_akihiro

@nakayoshix アプリのバックグラウンドは、起動後に運が良ければOSが時間をくれるか、外部刺激的なサーバからのプッシュ通知やGPSやビーコンなどの位置変化通知をトリガーにして実行時間確保しかないけど、ぶっちゃけ、メモリを極小にしてプロセス殺されないようにしようとすると、Xamarinでいけるのかな?とか興味

2021-02-15 10:10:26
中村 良幸 (Nakamura Yoshiyuki) @nakayoshix

これなんですが、照葉さん(@teriha8t8)によるログ解析によれば、iOS版は4時間に一回、つまり一日に6回はバックグラウンドでConfiguration.jsonとTEKファイルのダウンロードをしてるんですよね。一方でAndroid版は24時間に一度次回のスケジュールだけはセットされるのですが実際には何もしていないと。 twitter.com/moonmile/statu…

2021-02-15 09:42:39
Tomoaki Masuda @moonmile

@nakayoshix なので、きちんとバックグラウンドで動かしたい場合は(WiFi 未接続とかも含めて)、24時間単位で動かすのではなく、1時間単位で動かして取れるときに取っておくという方法がベターですよね。 cocoa は 24時間に1回しか取りに行かないので、不具合が顕在化してしまう。

2021-02-15 00:02:06
Tomoaki Masuda @moonmile

@nakayoshix @teriha8t8 なるほど。 以前、Android のバックグラウンドが機種によって動かないのだけは確認したのですが、iOS/Android と TEK の取得周期自体が異なっているのですね。 其処は、EN 部分をデバッグ状態にして実機で確認したほうが良さそうですね > 次期開発会社殿

2021-02-15 10:03:57
Tomoaki Masuda @moonmile

@nakayoshix @teriha8t8 参考まで github.com/cocoa-mhlw/coc… iOS のバックグラウンド動作は、BGTaskScheduler を使って実装されています。Xamarin EN コンポーネントの中です。

2021-02-15 10:21:06
Tomoaki Masuda @moonmile

@nakayoshix @teriha8t8 余談ですが、iOS で zip を DL & 解凍して、EN API に渡す処理は、PlatformDetectExposuresAsync 内にあります。 ここは、Xamarin EN コンポーネントな人が書いたので、ここを単純に疑うのはアレなのです。 まあ、それでも疑いますが、調べた限り Apple のサンプルコードと逐一同じになっています。

2021-02-15 10:25:08
Tomoaki Masuda @moonmile

@nakayoshix @teriha8t8 何故 Apple が アプリ側で zip を解凍させて、Google は OS 側で zip を解凍するのか、は判りません。 なんか、復号絡みで差異が出るのでしょうか?

2021-02-15 10:30:21
前へ 1 ・・ 6 7