[Swift] URLを理解する (4: ApplePlatform)

     
⌛️ < 1 min.

URL型で使える Apple Platform 用メソッドを確認します。

環境&対象

以下の環境で動作確認を行なっています。

  • macOS15.0.1 Sequoia
  • Xcode 16.2 Beta
  • iOS 18.1
  • Swift 5.9
URL 説明シリーズ
[Swift] URLを理解する (1: URI を扱う) [Swift] URLを理解する (2: ファイルパス を扱う) [Swift] URLを理解する (3: パスを操作する) [Swift] URLを理解する (4: ApplePlatform)

URL

URL という型には、URI の情報が保持されています。その中には パス の情報が含まれています。(空かも知れませんが)

URL には、Apple Platform が前提でのメソッドも多く用意されていますので、確認していきます。


参考
URLApple Developer Documentation

各種ディレクトリ

例えば、ファイルを保存する先の候補として ドキュメントディレクトリがあります。

このドキュメントディレクトリを URL から取得することができます。


参考
documentsDirectoryApple Developer Documentation

macOS では、以前は、FileManager 経由で取得するものでしたが、URL の static からも取得できるようになっています。

URL からは以下のディレクトリを取得できます。

  • applicationDirectory
  • applicationSupportDirectory
  • cachesDirectory
  • desktopDirectory
  • documentsDirectory
  • downloadsDirectory
  • libraryDirectory
  • moviesDirectory
  • musicDirectory
  • picturesDirectory
  • sharedPublicDirectory
  • temporaryDirectory
  • trashDirectory
  • userDirectory
  • currentDirectory()
  • homeDirectory

temporary ディレクトリにファイルを作ってみる

試しに、temporary ディレクトリにファイルを作ってみます。

以下のテストコードでは、tmp ディレクトリのパスを確認し、ファイルを作成しています。

    @Test func applePath_Property() async throws {
        #expect(URL.temporaryDirectory.absoluteString == "file:///Users/UserA/Library/Containers/ApplicationSample/Data/tmp/")

        let filePath = URL.temporaryDirectory.appendingPathComponent("MyFile.txt")

        try "Hello World".write(to: filePath, atomically: true, encoding: .utf8)
    }

# UserA, ApplicationSample の箇所は、ユーザー名、アプリケーション名に置き換わります。

# file: は、全角となっていますが、コード中は半角です。(HTMLの制約?)

コードを実行した後、該当フォルダを確認すると ファイルが作成されていることがわかります

ファイルアトリビュート

各種ディレクトリ情報と同じように、以前は FileManager 経由で設定/取得していたファイルアトリビュートを
URL 経由でも 設定/取得することが可能です。

以下のテストコードでは、タグ “MyTag” を付与し、その後確認しています。(作成対象は、temporaryDirectory に作成した MyFile.txt です。)

    @Test func applePath_Property() async throws {
        #expect(URL.temporaryDirectory.absoluteString == "file:///Users/UserA/Library/Containers/ApplicationSample/Data/tmp/")

        var filePath = URL.temporaryDirectory.appendingPathComponent("MyFile.txt")

        try "Hello World".write(to: filePath, atomically: true, encoding: .utf8)

        try (filePath as NSURL).setResourceValue(["MyTag"], forKey: .tagNamesKey)

        let myTags = (try? filePath.resourceValues(forKeys: [.tagNamesKey]))?.tagNames
        #expect(myTags ==  ["MyTag"] )

    }

Finder で該当ファイルを確認すると、”MyTag” というタグが付与されていることも確認できます。

MyTag

ファイルアトリビュートは、ファイルが保存されているファイルシステムにより取得できるかどうかが変わります。

サポートされていないアトリビュートを取得/設定しようとしても、エラーにならず 何も取得できないだけなので、注意が必要です。

まとめ

URL 経由でのファイル/ファイルアトリビュートを扱うメソッドを確認しました。

URL 経由でのファイル/ファイルアトリビュート
  • documentディレクトリ等のディレクトリを取得できる
  • (ファイルシステムに応じた) ファイルのアトリビュートを設定/取得できる

説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。

SwiftUI おすすめ本

SwiftUI を理解するには、以下の本がおすすめです。

SwiftUI ViewMatery

SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。

英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。

View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。

超便利です

SwiftUIViewsMastery

販売元のページは、こちらです。

SwiftUI 徹底入門

# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。

Swift学習におすすめの本

詳解Swift

Swift の学習には、詳解 Swift という書籍が、おすすめです。

著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。

最新版を購入するのがおすすめです。

現時点では、上記の Swift 5 に対応した第5版が最新版です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です