iOS

epoc timeをUserDefaultsに保存する場合は32bit端末に要注意!

iOS見出し

iOSで自動更新型の月額課金などを実装する場合、UserDefaultsに、有効期限を保存したりしますね。

こんな感じで。

この値を取り出す時に要注意です!

以下の感じで、「integerで」取り出すと

iPhone5s以降の64bit端末だと、Int型が自動でInt64になるので問題ありませんが、iPhone5c以前の端末の場合32bitなので、expiresで来ているミリ秒の有効期限が桁あふれを起こしてしまいます。

2018/8/17は
1,534,464,000,000

Int32のmaxは
2,147,483,647
全然足りない….

Int64のmaxは
9,223,372,036,854,775,807
安心の包容力。

最悪の場合、月額課金してもらったユーザーさんの端末は起動しなくなるという恐ろしい事態に。

なので、32bit端末用に、必ず「objectで取り出してInt64へのキャスト」をしましょう!

 

現場からは以上です。
∠(`・ω・´)