パスワードを忘れた? アカウント作成
15495769 story
バグ

COCOAの最新版「1.4.0」でアプリが強制終了との報告。iPhoneおよびAndroid版いずれも 86

ストーリー by nagazou
やっちゃったか 部門より
nagazou 曰く、

厚生労働省は25日、COVID-19接触確認アプリ「COCOA」の最新版「1.4.0」の提供をApp StoreGoogle Playで開始した。しかしこのアップグレードにより、iPhoneおよびAndroidともにCOCOAが強制終了する報告が相次いでいるようだ。ITmediaが25日午後7時段階で編集部内で試したところ、iOS 15.1.1を導入したiPhoneでは起動できなかったとしている。厚生労働省も状況を把握はしているようで、COCOAの配布ページ上で「原因を調査の上、別途案内させていただきます」と告知している(COCOA公式ITmedia)。

  • by Anonymous Coward on 2021年11月26日 14時13分 (#4159197)

    COCOA v1.4.0 が起動しない · Issue #517 · cocoa-mhlw/cocoa [github.com]

    に書かれている通りで、まず半年以上前に

    _preferencesService.SetValue(preferenceKey, new DateTime().ToString());

    とかいうクソコードが入っていたが原因その1。JavaやJavaScriptと勘違いしたのか現在時刻を取得するつもりでnew DateTimeを呼んでいるように見えるけど、C#では時刻の最小値が初期値に設定されるので、古いバージョンから使い続けている利用者は利用規約の最終同意日時が「1/1/0001 12:00:00 AM」になっていた。そもそも引数の中でnew DateTimeする時点で有り得ないし、ド素人がプログラムしていたと思われる。

    で、そうとも知らないkeijiがスラドでも取り上げられた日付フォーマットの問題(接触確認アプリCOCOA、地域ごとの日付フォーマットの違いで利用日数が狂う新たな不具合 [opensource.srad.jp])を修正するためにv1.4.0でJST(UTC+9)からUTCに直すマイグレ処理を追加したのが原因その2で、「1/1/0001 12:00:00 AM」からマイナス9時間しようとしてエラーを吐いて無事死亡。

    利用規約の最終同意日時がおかしいことに誰も気付かなかったのは、利用規約の更新があっても再確認を行わない [github.com]という仕様をなぜか放置していたのと、当時の担当者がデータ仕様をドキュメント化していなかったせいで、一カ月前にkeijiがデータ仕様をドキュメント化した際 [github.com]にも見落としてしまった。

    2つのマイグレ処理が絡んだ問題なので表面的なテストやストア審査では見抜けなかったのは同情の余地があるけど、コーディング能力や開発速度が低すぎるし、大金積んだ国策アプリの品質じゃない。

    ここに返信
    • by Anonymous Coward

      大金積んだ国策アプリの品質じゃない。

      大筋合っていますが結びだけがズレています
      いくらかけようとも末端の技術者に行くお金は毛ほども変わらない

      そもそもの目的が丁度いいネタが有ったから
      えらいひとで美味しくチュウチュウしちゃおうぜ
      なのだから品質自体を期待しちゃいけない

      # 国策とはそういうものなのよねぇ

    • by Anonymous Coward

      COCOAは有志開発アプリじゃありませんでしたっけ?(すっとぼけ)

      • by Anonymous Coward

        マジレスするとCovid-19Radarは有志開発(という建前)だけど、今回問題のコードは完全に厚労省/デジ庁管轄下のCOCOAになってから追加されたコードだからねぇ

    • by Anonymous Coward

      githubでオープンになっていて、誰でもチェックでき、誰でも指摘できるコードのハズなのに、
      誰も指摘しない時点で日本国のプログラマー達の能力も知れているかと…。

    • by Anonymous Coward

      これもXamarinを採用した為の弊害でしょうね
      クロスプラットフォームといいつつ端末間の差異も吸収出来ず、さらに.NET依存の問題も絡んでカオス状態。
      Xamarin開発に固執した為に開発者を除外する環境が生まれ開発の質が上がらない。
      MSの思惑としてはXamarin開発の実績を示したい筈なんだろうけど、どんどん悪評が高まっているだけ。
      こんなんじゃ「Xamarin?COCOAでバグ出しまくってる奴?」と企業採用すらされないよ。
      Android Studio / Xcodeで分けて開発した方が結果的に安価で質の高いアプリを提供できる筈

    • by Anonymous Coward

      JavaやJavaScriptと勘違いしたのか現在時刻を取得するつもりでnew DateTimeを呼んでいるように見えるけど

      旧バージョンの利用規約同意しか取れてないのに、
      現バージョンの利用規約同意済みとみなされかねない現在時刻をセットしちゃだめでしょ・・・

  • by Anonymous Coward on 2021年11月26日 13時07分 (#4159129)

    なにか効能があったのだろうか?
    類似のアプリもそうだけど、検証してみてほしい
    # アマビエを表示と大差ないと思う

    ここに返信
    • by Anonymous Coward on 2021年11月26日 13時24分 (#4159152)

      チャットできて便利ですよ。対面で話さないことで、感染防止に役立ちます。
      毎年3月に使用期限が延びるのを見て一安心、というのが個人的な風物詩ですね。

    • by Anonymous Coward

      検証ってなかなか難しそうだねぇ
      どうやってやるのがいいんだろ

    • by Anonymous Coward

      >なにか効能があったのだろうか?

      中抜は好調でしたね

      COCOA開発受注企業が事業費94%を3社に再委託、さらに2社に…不具合の原因企業「分からない」
      https://www.tokyo-np.co.jp/article/87051 [tokyo-np.co.jp]

    • by Anonymous Coward

      最初から知識があれば分かってたことを強行しておいて今更検証とか金の無駄すぎでしょ

    • by Anonymous Coward

      なにか効能があったのだろうか?

      関係するえらいひとたちが無事に美味しい思いができた

      それ以外になにか必要なことがある?

      # 碌でも無い仕組みを買えたければ選挙に行こう

    • by Anonymous Coward

      アマエビを表示

      なにそれ、美味しそう。

  • by Anonymous Coward on 2021年11月26日 13時13分 (#4159136)

    デバッガ「エミュレーション環境でチェックチェック~いけるねうん。OSバージョン別動作とかはまぁ無視して大丈夫でしょ。ヨシッ」
    配信担当「いけたみたいだね、俺は配信するだけだし。配信GO~~~~ ヨシッ!」

    開発担当(ガラっ)「あのー、言い忘れてましたけど今回のバージョンから新しい機能いろいろ付けたんで動作チェックOS別に細かくお願いしますね~」

    一同「。。。。。『原因は調査中です、まる』っと。よしっ!!」

    ここに返信
    • by Anonymous Coward

      実機試験しなかったせいでNGって前にもやって見事に大失敗しなかったっけ…

      • by Anonymous Coward

        同じようなことamazonのアプリストアもやらかしてるんですよね。
        実機(google端末)のandrorid12環境だとまともに動かないのに、サポートに問い合わせるとandroid12で動作確認済みですと言う返答が帰ってくる状態でした。
        (今は公式に不具合対応中になってます)

    • 本件のissue [github.com]より、

      特定バージョン(v1.2.0)より前からのアップデートでデータが壊れ、
      今回のバージョンでアプリが落ちる。

      実機でやってないからとか、OS別にやったからヨシなんてものではなく、
      真っ新な状態や旧バージョンからアップデート後の状態別にテストが必要と
      指摘できなければ、同じ穴の狢だろ。

      • by Anonymous Coward on 2021年11月26日 16時59分 (#4159322)

        > 特定バージョン(v1.2.0)より前からのアップデートでデータが壊れ、
        > 今回のバージョンでアプリが落ちる。

        いや、そうとも限らないです。
        v1.2.0を経由していても駄目な場合があるという報告があります。(事実であれば)

        あと、データが壊れる、というのもちょっと違うかと。
        利用規約を読んだ日時を記録するデータがあって、
        条件によっては、これが最小値(Ticks = 0 : グレゴリオ暦0001年1月1日0時0分0秒)のままになるみたい。
        (利用規約を読んだフラグだけ立って、日時が記録されていない状態)

        最大のミスは、DateTime型への加減算で例外が発生しうることを認識していなかったことじゃないかと。
        JSTとUTCの変換時に9時間分の減算を行っていて、
        これが最小値より前の日時になると例外が発生してアプリが止まります。

        指摘に「標準のタイムゾーン変換関数を使わないから」というものもありますけど、実はこれも間違い。
        標準の変換関数を使おうが、最小値より前になれば例外が発生します。

  • by Anonymous Coward on 2021年11月26日 13時16分 (#4159140)

    iOS 15.1.1って最新バージョンだよな?
    最新バージョンの実機テストすらやってないのか

    ここに返信
    • by Anonymous Coward

      最新バージョンだからこそ、やってなかった

      ということもよくある。

      だって最新のテスト環境がなかったんだもん。
      15.1.1って、マイナーバージョンアップでしょ。大丈夫、大丈夫。

    • by Anonymous Coward

      むしろ今更なアプリを毎バージョンテストしてほしいか?
      予算浪費して

  • by Anonymous Coward on 2021年11月26日 13時18分 (#4159142)

    昨日の夜にAndroid 11環境で1.4.0にバージョンアップしたら普通に動いてるんだけど、どういう条件でダメなんだろ?

    ここに返信
  • by Anonymous Coward on 2021年11月26日 13時18分 (#4159143)

    11:49 時点の記事 [impress.co.jp]
    Android がまだなのは、確認する端末やバージョンが多いせいなのかな

    ここに返信
  • by Anonymous Coward on 2021年11月26日 13時21分 (#4159147)

    まったく役に立ってないから起動しなくてもまったく影響ないという
    会社の出勤簿システムが止まった時ですら紙にメモるかメールで代替えしたのだが

    ここに返信
  • by Anonymous Coward on 2021年11月26日 13時27分 (#4159153)

    iOS 15.1.1では、iPhone12およびiPhone13のモデルで通話中に音声が途切れる現象が改善されます。

    どこにCOCOAが影響を受ける要素があったんだ?

    ここに返信
  • by Anonymous Coward on 2021年11月26日 13時45分 (#4159172)

    githubに不具合原因が書いてあるので詳細割愛しますが、
    WindowsとLinuxで取得するタイムゾーンの名称が異なることが原因で
    エラーになっていたようですね。

    COCOAはXamarin(.NET)を使用しているのは既知の通りですが、
    Microsoftのドキュメントに書かれているコードを
    開発者がそのまま信用して書いてしまったようですね。

    当方も.NET Core(現.NET6)でクロスプラットフォーム開発していますが、
    確かに類似のケースはあり、悩まされることもあります。
    MicrosoftのドキュメントはどうしてもWindowsベースで書かれているので、
    落とし穴が多く感じますね。

    もっとも、ちゃんと動作確認しろよ!って言われたらぐうの音も出ないと思いますが。
    一方で、Microsoftもクロスプラットフォーム開発を売りにするならドキュメントをちゃんと書いて欲しいですね。

    ここに返信
    • by Anonymous Coward on 2021年11月26日 14時23分 (#4159204)

      githubのコメントを読みましたが、違うみたいですよ。

      1. Xamarinがそういうタイムゾーン周りの問題を抱えていることを認識していたので、回避するために、JSTからUCTへの変換を処理を、標準関数を使用せずに自前で作成していた。
      2. 過去のバージョンで、利用規約同意日(JST)の設定ファイルへの保存方法を変更していたのだが、その辺りの変更経緯を正しく認識していなかった。
      3. したがって、バージョンアップを特定の経緯で行った(あるバージョンを飛ばすなど)環境では、開発者が想定していなかった値が設定ファイルに書き込まれていたが、気がついていなかった。
      4. 想定していなかった日付をJSTからUTCに変更しようとして、エラーになって、起動しなくなっていた。

      • by Anonymous Coward

        失礼いたしました!
        タイムゾーン周りのプラットフォーム非互換の懸念を回避するために別の手段を取ったこと原因でした。
        勘違いしてました。訂正有難うございます!

    • by Anonymous Coward on 2021年11月26日 13時54分 (#4159178)

      それってクロスプラットフォームとしてのXamarinの出来が悪くて発生した不具合って事では?

      MS特化な開発者が「それじゃタイムゾーンを取得してー」
      TimeZoneConverter.TZConvert.GetTimeZoneInfo("Tokyo Standard Time");
      Xamarinでエミュレータで動作確認!よしよし動いた動いた
      ってやらかしてエラー

      本来は
      TimeZoneConverter.TZConvert.GetTimeZoneInfo("Asia/Tokyo");

    • by Anonymous Coward

      確か、以前起こっていたiOS版が初期化されるバグも、Xamarinの問題でしたよね。

      https://it.srad.jp/story/21/02/15/1636231/ [it.srad.jp]

    • by Anonymous Coward

      WindowsとLinuxで取得するタイムゾーンの名称が異なることが原因で
      エラーになっていたようですね。

      まったく違います。原因はそれではありません。さてはIssueの最後に付いてるコメント [github.com]だけ斜め読みしましたね?
      WindowsとLinuxで取得するタイムゾーンの名称が異なることが原因でXamarinではエラーとなるため、Microsoftのドキュメントに書かれているコードを信用せず、自前でタイムゾーンの変換処理を書いたのが原因ですよ。
      ちゃんと確認するべきは自分の方では?

      • by Anonymous Coward

        失礼いたしました!
        勘違いしてました。訂正有難うございます。出直してきます!

    • by Anonymous Coward

      by Anonymous Coward on 2021年04月03日 7時35分 (#4005919)
      Xamarinが悪い!に持っていきたいコメをちょくちょく見かけますね。
      使われると都合悪い人?

      接触確認アプリCOCOA、地域ごとの日付フォーマットの違いで利用日数が狂う新たな不具合 [srad.jp]

  • by Anonymous Coward on 2021年11月26日 13時45分 (#4159173)

    もともと潜んでた日付関係のバグらしい

    ここに返信
  • AndroidやiOSもネイティブ開発していてもバージョンや端末によって動作不具合は起きますよ。
    インストール数が相当数になっているCOCOAは先行ベータは必要だと思いますがねぇ…。

    ここに返信
    • by Anonymous Coward

      Chrome CanaryとかFirefox betaみたいなやつね。
      接触確認アプリは1国1アプリ制でそういうの難しいかもしれないから、段階的ロールアウトとかね。
      GitHubでは先行テストするためのビルド済みのapkすら配布されてないし。
      ちょっとIssue建てて来てよ。

    • by Anonymous Coward

      やらかしたらすぐに直せばいいっていう小規模アプリ開発者の考えが抜けてないんだろうね。
      DL数3000万超の健康に関わるアプリという自覚がないから平気で貢献者に「嫌ならやめろ」とか言えちゃう。

      • by Anonymous Coward

        https://github.com/cocoa-mhlw/cocoa/ [github.com] にあるのはあくまでも参照実装であって実際に配布されているアプリケーションバイナリのソースコードレポジトリではないよ

  • by Anonymous Coward on 2021年11月26日 16時33分 (#4159306)

    アプリがゴミだろうと完全無欠だろうとどうでもいいわ

    ここに返信
typodupeerror

目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond

読み込み中...