Citrus-Field TECH BLOG.

フリーランスのITエンジニア、iOSアプリの個人開発、業務委託(小売、ヘルスケア)を行っています。お仕事については、メールもしくはXのDMでご相談ください

本番環境でのLog収集を容易にするOSLogの使い方について

はじめに

iOSのログは、古くから存在しますNSLogや、iOS14で導入されましたOSLogなどさまざまなものが存在します。 こういったログ収集はソフトウェア開発において重要な側面であり、開発者がアプリケーションの動作を理解します貴重な情報源です。 OSLogは、macOS、iOS、watchOS、tvOSのログ収集は様々な点で進化していますので、今後はOSLogを使っていきましたいと思っています。 そこで、OSLogの利点、実用的な使用法を理解しましょう。

Appleのリファレンス

https://developer.apple.com/documentation/os/oslog

OSLogsを理解する

最初に注意しておきましたいのは、アップルのOSLogにも、iOS10以降でサポートされましたものと、iOS14、iPadOS14でサポートされましたものがあります。 ここでは、iOS14、iPadOS14でサポートされましたOSLogsについて書いています。

アップルのOSLogは、アップルプラットフォーム全体のログメッセージを合理化し、一元化しますために設計されましたシステム全体のログインフラストラクチャでUnified Logging System(ULS)の一部です。要約すると、アップルのmacOS、iOS、watchOS、tvOSなどでデバイスが変わっても同様に使用できます。

OSLogsの主な利点

1. アップルが提供する統一されたログシステム OSLogはアップルが提供する統一されたログシステムのため、開発者が異なるソースからのログメッセージの統一されたストリームにアクセスすることを可能にし、 システムの動作について全体的な理解に役立ちます。

2. 高速かつ軽量 OSLogは非常に高速で軽量な設計がされており、ログ収集がシステムやアプリケーションのパフォーマンスに与えます影響を最小限に抑えます。 そのため、本番環境やリリースビルドに適しています。

3. プライバシーとセキュリティへの配慮 OSLogsは、Default、Info、Debug、Error、Faultといった異なるログレベルを導入し、開発者が機密情報を適切なレベルでログに記録できるようにしています。 これにより、特定のログエントリが、明示的に要求された場合にのみ表示されるようになります。

OSLogsを使ってみる

それでは、OSLogをアップルアプリケーションで使い始めますための手順を確認しますが、先にサンプルコードを見てみます。

import OSLog

extension Logger {
    /// アプリを特定するユニークな識別子には、アプリ固有のバンドル識別子を設定します
    private static var subsystem = Bundle.main.bundleIdentifier!

    /// ビューサイクルをログに記録する
    static let viewCycle = Logger(subsystem: subsystem, category: "viewcycle")

    /// トラッキングとアナリティクスに関連するすべてのログを記録する
    static let statistics = Logger(subsystem: subsystem, category: "statistics")
}

OSLogはインスタンスにはサブシステム名とカテゴリ名が必要です。 コンソール アプリ内のログをフィルター処理しますときに認識できます、サブシステムの一意の識別子としてバンドル識別子を使用しますことをお勧めします。 インスタンスの生成が完了しますと、さまざまなログレベルの方法のいずれかを使用してログを開始できます。

1. OSLogのインポート

Swiftのコードで OSLogをインポートします。

import OSLog

2. OSLogオブジェクトの作成

OSLog オブジェクトをサブシステム識別子でインスタンス化します。 サブシステム識別子は通常、アプリやフレームワークに固有の逆 DNS 形式の文字列です。

let log = OSLog(subsystem: "com.yourcompanyname.yourappname", category: "general")

3. ログの記録

OSLog が提供するさまざまなログ収集機能を利用して、さまざまなレベルでメッセー ジをログに記録するします。

os_log("This is a default log message", log: log)
os_log("An error occurred: %@", log: log, type: .error, error.localizedDescription)

OSLogsの高度な使い方

ログレベルと重大度

OSLogsのログレベルは、ログメッセージの重要度を表します。これは、開発者が重要度に基づいてログエントリを分類し、優先順位をつけるのに役立ちます。OSLogsを含むAppleのUnified Logging System (ULS)には、いくつかの標準的なログレベルがあります。

以下はその概要です。

1. Default

Defaultレベルは、一般的なメッセージに使用され、一般的に情報的なものです。

os_log("Application started successfully", log: log)

2. Info

Infoレベルは、アプリケーション・フローを追跡するのに有用な、より詳細な情報に使用されます。

os_log("Processing data: %@", log: log, type: .info, data)

3. Debug

Debugレベルは、開発やデバッグには役立つが、本番では詳細すぎるメッセージに使用されます。

os_log("Debugging information: %@", log: log, type: .debug, debugInfo)

4. Error

Errorレベルは、エラーが発生したことを示しますが、アプリケーションの動作に致命的なものではないものも含まれることがあります。

os_log("Error occurred: %@", log: log, type: .error, error.localizedDescription)

5. Fault

Faultレベルは、早急な対応が必要な重大なエラーに使用されます。 これらは、アプリケーションの不安定性につながる深刻な問題です。

os_log("Critical fault: %@", log: log, type: .fault, criticalError.localizedDescription)

ログメッセージの性質と重大性に基づいて、適切なログレベルを選択することができます。 この柔軟性により、特に開発、テスト、本番のような異なる環境において、効果的なログ収集の実践が可能になります。 また、動的なログのフィルタリングを支援し、ユーザーがニーズに基づいてログのレベルを調整できるようにします。

ログのフィルタリングについて

Unified Loggingシステムは、ユーザーが特定のサブシステムやカテゴリーに対するログ収集のレベルを調整できるように、動的なログ・フィルタリングをサポートします。 この機能は、特に本番環境において、収集されるログデータの量を微調整するのに役立ちます。

ログのメタデータをカスタマイズすることについて

カスタム・メタデータでログ・エントリーを拡張し、デバッグや分析時にログ・メッセージのコンテキストを簡単にトレースできるようにします。

os_log("Processing request", log: log, type: .debug, metadata: .dictionary(["RequestID": requestID]))

OSLogsの確認方法

収集されたOSLogsは、「Xcodeのコンソール」や「コンソールアプリ」から確認できます。

OSLogsの有効な利用について

以下の点に注意して、役にたつログ収集を行いましょう。

1. サブシステムとカテゴリーの定義を整理して必要なログを探しやすくする 意味のあるサブシステムとカテゴリー識別子を選択し、アプリケーションに関連するログエントリーの識別とフィルタリングを容易にします。

2. 機密データの慎重な取り扱いに注意する 機密情報をログに記録する際には注意が必要です。さまざまなログレベルを活用して、そのようなデータの可視性を制御し、本番環境でのビルドで機密情報を公開しないようにします。

3. 性能に影響しないように考慮する ログの詳細量とパフォーマンスへの影響のバランスをとる。アプリケーションの効率を損なうことなく、包括的なログ収集を目指しましょう。

まとめ

Apple公式のOSLogsは、OSレベルで統一されたログの一部として、Appleエコシステム全体の開発者に洗練された効率的なログ収集ソリューションを提供します。 OSLogを採用することで、デベロッパはアプリケーションの動作に関する貴重な洞察を得ることができ、デバッグプロセスを強化し、ログの詳細とシステムパフォーマンスのバランスを維持することができます。 OSLogsを活用することで、より堅牢で保守性の高いiOSやiPadOS、さらにはWatchOS、tvOSに対応したアプリを開発できます。 ぜひ技術選定、設計フェーズで検討して頂きたいと思います。

参考にした記事

Logging Made Easy: Exploring Apple’s OSLogs | by Evangelist Apps | Evangelist Apps Blog | Nov, 2023 | Medium

Cyberduckで隠しファイル、隠しフォルダが表示されない時の対処方法

新規インストールしたCyberduckを使い始めて、
リモートファイルの一覧画面に隠しファイル、隠しフォルダが表示されず、
すぐには表示方法が分からなかった。

 

メニューバーより、
[Cyberduck]-[設定]を開き、[環境設定設定-ブラウザ]タブの真ん中あたり、
','で始まるファイルを表示 にチェックを付け、Cyberduckを再起動したら解決した。

ほんの少しだけ、.htaccessファイルを書き換えたかっただけなのに、設定の場所が分からずに困った。

[長文注意!!」インボイス制度の適格請求書発行事業者番号を確認する方法

以前に行ったインボイス制度の適格請求書発行事業者番号を確認するためe-Taxのサイトに行ったところ、事業者番号に辿り着くまで、かなり大変だったので、その確認方法をまとめておきます。

なおインボイス制度の賛否などについては触れません。

請求書を送る企業に適格請求書発行事業者番号をお知らせすると、以下のサイトから本当に適格請求書発行事業者番号が登録されているか確認でき、安心してインボイス制度に対応した様式の請求書を受け付けられるため、安心して間違いの無い取引ができます。

国税庁インボイス制度適格請求書発行事業者公表サイト

 

私は2023年6月に申請手続きをしましたが、適格請求書発行事業者番号を取得するのにかなりの時間がかかると聞いていたので、取得できたか確認ができていませんでした。

 

この記事が参考になるのは以下の全てに該当する方です。

  • 個人事業主である
  • マイナンバーカードを取得している
  • マイナンバーカードとe-Taxを紐付けしている
  • マイナンバーカードの読み取りに対応したiPhoneまたはスマートフォン(Android)を持っている。または、e-Taxに対応したICカードリーダーとWindows搭載PC、もしくはMacを所有している

最初に「e-TAXソフト」には、以下のWEB版、SP版など複数存在しますが、WEB版を使用するのが良いです。

さらに、ブラウザなどの対応を確認する必要があります。

これらの、前提条件ですが、国税庁の「e-Taxソフトのダウンロードコーナー」に書かれている通りに進めるのであれば、Windows搭載PCを使っての確認がMacを使用する場合と比較して数段ラクだろうと思います。

 

ただ、私の場合は業務、事務用にWindows搭載PCを持っていないので、Macで行いました。その場合、e-TAXソフト(WEB版)を使用することになります。

www.e-tax.nta.go.jp

www.e-tax.nta.go.jp

 

国税庁のサイトは、とてもわかりにくく、古い情報が多くの場所に書かれたままになっています。

最新のe-Taxの推奨環境などは、わかりやすくまとめて書くべきだと思います。

 

それでは、以下のリンクから事業者番号を確認していきます。

続きを読む

[Swift][UIKit]Todoリストのチュートリアル。

現状、iPhoneアプリ開発を扱った書籍は、ほとんどSwiftUIを対象に書かれています。

実務ではSwift、UIKit、StoryBoardを使ったもの、場合によってはInterface Builderを使っている場合もあるかもしれません。

StoryBoardとSwiftUIどちらも使用できるようになれば開発の幅が広がります。

www.youtube.com

タブバーのカスタマイズ(ソースコード有り)

Swift、UIKit、Storyboardで、画面のUIを変更しやすくしたタブバーのチュートリアル動画です。

 

タブバーを使う場合、最初の実装の仕方で、その後の生産性が変わってきます。

今回は、年季の入ったiOSアプリのタブメニューの見た目を、タブ毎の大きさや、グラフィックを変えて、リッチに見せたいという要望があり、これまでのコードでは対欧しづらかったため、タブメニュー画面を画面下部にボタンを並べるように作り直すことにしました。

 

タブっぽく見えているのは、グラフィカルなボタンです。
そのボタンから5つの画面に遷移させています。

 

Storyboard

Storyboard

もちろん、Xcoideの新規プロジェクトを作る際に、出てくるタブメニュー画面を使いたくなる気持ちも理解できますが、その後、今回のように、たとえばデザイナーから、タブの周辺などの、見栄えを大きく変えたいといった場合には、タブではなく、に追加の要望がタブ毎にバーの中のデザインを変えたりする依頼がある場合などに対応しやすいようにすべきです。

 

動作イメージ

youtu.be

 

ソースコード(GitHub)

github.com

Appleウェビナー「ヘルスケア/フィットネス カテゴリにおけるAppビジネスの可能性と Apple Watch の活用」の感想

2023年5月16日(火)
午後2:00〜午後3:30 (日本標準時)

Apple Developer Relations主催のウェビナー

「ヘルスケア/フィットネス カテゴリにおけるAppビジネスの可能性と Apple Watch の活用」

を受講しました。

 

あまり活用されていないかもしれませんが、Appleはエンジニア向けのサポートを用意しています。

サポート - Apple Developer

これには、コードレベルのサポートも含まれます。

テクニカルサポートのリクエスト - サポート - Apple Developer

以下、受講の感想です。

現状、日本国内のiOS、iPadOSのカスに対して、WatchOSをサポートするiOSの割合は、欧米諸国に比べ、低いそうです。

WatchOSは、Appleとしても力を入れており、ヘルスケア分野などで圧倒的なユーザー数を抱えるポテンシャルのある領域です。

また、WatchOSをサポートするアプリは、海外展開をしているものが多数あり、ユーザー層も、比較的AppStoreでお金を使う人が多いのも特徴です。

使用できるライブラリが制限されるなどの点はありますが、今後積極的に検討していきたいと思っています。