iPhoneの「24時間表示」設定がOFFの場合、SwiftのDateFormatterで24時間表記を指定しても「午後」等の文字が混入する問題に対し、SKYPCE開発チームがロケールをPOSIXに固定して解決した事例を紹介します。
SKYPCEのスマホアプリをインストールしたiPhoneの設定環境はご利用されるお客様により様々です。
文字の大きさや、ダークモード等の外観モード、言語や地域の設定等、皆様それぞれの業務スタイルに合わせた設定でiPhoneをご利用のことと思います。
私たち開発チームは、「お客様がどのようなデバイス設定を行っていても、常に正しく、快適にSKYPCEをご利用いただける状態」を目指して日々開発を進めています。
今回は、私たちがアプリの裏側で行っている安定化への工夫の中から、iOSの「24時間表示」設定に関する開発事例をご紹介します。
日付処理に潜んでいた予期せぬ落とし穴
アプリの内部では、画面には直接表示されない裏方の処理として 「現在時刻を特定の形式の文字列に変換する」 という処理が頻繁に行われています。
例えば、一時的なファイルを作成する際のファイル名の一部として、日時の文字列を利用するケースなどです。
iPhoneアプリの開発言語であるSwift言語では、通常以下のように実装します。
let date = Date()
let formatter = DateFormatter()
formatter.dateFormat = "yyyyMMddHHmmssSSS" // 年月日時分秒ミリ秒の形式を指定
let dateString = formatter.string(from: date)
print(dateString)
通常、このプログラムを実行すると
20260521232159913
といった、指定した書式の文字列が取得できます。
しかし、テストの過程でiPhoneの「設定」アプリ >「一般」>「日付と時刻」にある「24時間表示」をOFFに設定していると、上記と同じプログラムにもかかわらず、以下のような結果が返ってくることがわかりました。
20260521午後112159913
プログラム上で24時間表記の指定をしているにもかかわらず、OSの設定が優先されて "午後" という文字が混入してしまったのです。
内部データとしてこの文字列を扱う場合、予期せぬ文字が含まれていると、データの不整合やエラーの原因となってしまいます。
SKYPCEが実践している解決策
この問題に対し、SKYPCEのiPhoneアプリでは、ユーザーの皆様のデバイス設定に影響されることなく、常にシステムとして正しい形式で処理が行えるよう、以下のような対策(ロケールの固定)を徹底しています。
let date = Date()
let formatter = DateFormatter()
// デバイスの設定に依存しないよう、処理用の標準規格(POSIX)に固定する
formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyyMMddHHmmssSSS"
let dateString = formatter.string(from: date)
このように、明示的にシステム用のロケール(en_US_POSIX)を指定することで、お客様が「24時間表示」をONにしていてもOFFにしていても、またiPhoneを何語の設定で使用していても、内部のデータ処理は常に安全かつ正確に行われるようになります。
おわりに
今回ご紹介したのはアプリの裏側で動くほんの小さな処理の一つですが、こういった細部へのこだわりが、サービス全体の安定性につながっていると考えています。
お客様ごとに異なるであろうデバイスの設定を考慮し、SKYPCE開発チームでは、様々な設定パターンを網羅した入念なデバッグとテストを実施し、いかなる環境でも不具合なく動作するよう品質向上に努めています。
これからも、お客様が安心してビジネスに集中できるよう、見えない部分もしっかりと作り込んだ営業名刺管理「SKYPCE」をご提供してまいります。
