Instacart ❤️の Swift.
過去1年半の間、私たちは顧客対応の* iOSコードベースをObjective-CからSwiftに積極的に移行し、すべての移行を徹底的に楽しんでいます。 SwiftとSwift-ierへの移行には多くの利点があります。コードが取得されると、私たちをより幸せに見がちです。(Minを除いて、彼は闇の王子です…… 😈😉)
よくあるように、言語にはいくつかの癖があり、それに伴って変化する慣習もあります。 swiftは、他のほとんどのものよりも安全性に重点を置いています。 ほとんどの場合、swift開発者は、CRASH(クラッシュ)を避けるために必要なことは何でもしたいと考えています。 guardステートメントは、このための素晴らしいツールです。 いくつかのコードを実行する前に条件が存在することを確認したい場合は、guardステートメントを利用することを検討してください。 クラッシュが回避されました。 わーい!
guard letを使用すると、Swiftのオプションをアンラップし、guardの下にあるアンラップされた値にアクセスすることもできます。 驚くばかりです。 正直に。 私達はそれが大好き。
しかし、guard letを使用すると、かなりの量のこれらを作成することができます。
guard let blah = blah else { return }
このelseブロックは、予期せぬケースを処理するのに最適な場所ですが、guardがアプリ全体で広範囲にわたって使用されている場合は、おそらくあなたがオプションをアンラップしていると仮定していたときには特別なケースがたくさんあります。 elseブロックがかなり頻繁に実行されることを期待していないようです。 だから、最近の一般的なswiftコンベンションに見えるように、ごくまれなケースを除いて、おそらくそれをelse { return }に任せます。
それ。 それがそこにある(それです!)。 それが問題の原因です。 あなたが一貫して適切にログを記録したり、elseブロックを適切に処理したりしない限り、あなたは基本的にそれが何度失敗しているのか分かりません。 🙀ああああ。 誰もそのような暗闇の中に残っているのは好みません。
このような状況に対処し、私たちが考えるより頻繁に問題の発生場所を特定する方法の一般的な考え方を自分たちに与えるために、私たちはSafeguardと呼ばれる軽量フレームワークを作成しました。
safeguardの内容物(肉とジャガイモ)は、既存のログシステムに簡単に接続できる組み込みのロギング機能を備えたオプションのシンプルな拡張機能です。 ミッションクリティカルな分野でフレームワークのsafeguard()機能を実装することで、重要な情報をロガーに渡して、問題の原因を突き止める手助けをすることができます。 safeguard()は、呼び出された#function、#file、#line、およびTypeを渡します。 これらの手がかりに加えて、Safeguardの余分なcustomLoggingParamsを使用して、関連するセッション情報を渡すことができ、後で問題を再現して診断するのに役立ちます。
Safeguardはカスタマイズ可能なコールバックも提供します.nilHandlerは、オプションがラップ解除に失敗したときのカスタムユースケースの管理を容易にします。 このnilHandlerは、アプリケーションがDEBUGモードで動作しているかどうかを示すBoolフラグも便利にパスします。 ああ! とても役立ちます!!!
safeguard()を実装して安心してこの素晴らしい機能を提供するには、上記の機能をすべてオプションに追加することができます:
guard let blah = blah.safeguard() else {
return
}
とても簡単。 一言というと、 世界は救われた。 Woot woot! 🎉
世界を救い、すべての良さを分かち合う精神で、私たちはオープンソースのSafeguard(ここ)を持っており、CarthageまたはCocoapodsのいずれかを使って簡単にインストールできました。 READMEファイルには基本的なインストール、使用法、および設定の説明が含まれています。 (もちろん、改善や追加の提案がある場合は、いつでも問題を追加したり、プルリクエストを送信してください!
これらの愚かなサイレントな失敗を大失敗に変えて楽しんでください!
次回また!
-Dan&カスタマーiOSチーム
If you love Swift and are interested in finding solutions like the above, we are currently hiring mobile engineers and would love to speak with you.
*Note: Our Shopper App team has been working on the same Obj-C -> Swift transition, credit where it’s due and all that, but I’m on the customer-facing team and am the one writing this, sooooo, I’ll be writing from our perspective 😉
タイトル:Safeguard: Avoiding 🙉 Silent Failures with Swift
作者:Dan Loman
原文URL:https://tech.instacart.com/safeguard-avoiding-silent-failures-with-swift-7e714444a525