この記事はユニファAdvent Calendar 2022の3日目の記事です。
iOS16 から新たにSwiftで使用できるプロトコルとしてTransferable が追加されました。
プロトコルに〜able とついた名称はAppleが実現したい機能を提供したいときに用いる傾向があるのですがとはいえ、Transferable="譲渡可能な" と訳するといまいち用途が分かりにくいしどこで使うかわからない。そんなTransferableについての説明となります。
対象とする方々
iOSアプリ開発者の皆様。
説明するもの
- Transferableが取り扱うもの
- Appleの意図は何?
- iOSアプリ開発者にとってTransferableは重要?
説明しないもの
実際のコード。WWDC2022のセッションにてPhotosPickerから写真を取得する際にTransferableの使い方が紹介されております(14分程度のセッションで視聴しやすくお勧めです)。
1) Transferableが取り扱うもの
TransferableはiPhoneやmacOS上で動くアプリやフォルダー、写真フォルダといったデータをやり取りできる同士のやり取りを扱うのがTransferableです。Transferableの使い方を守っていればローカル、ネットワークサービスを介するかは意識せずに済みます。図でいうと、macOSのフォルダーがクラウドサービス上にあるファイルかローカルにあるファイルかを気にしないようにアプリにファイルを渡すことができます。
またデータのやり取りの方法は、
- コピー&ペースト
- ファイルのドラッグ&ドロップ
となります。デスクトップOSで何気なく操作している操作ですね。
上記の図は概念的なもので実際にはデータのやり取りにはOSが介在しておりOSがアプリから必要な情報を必要とします。
Apple云く、
ドラッグ&ドロップ コピー&ペースト その他のAppの機能をサポートする 宣言的方法
とのことです。これまでiOS SDKではSwift,Objective-C での逐次的プログラミングも加味した機能であったものを宣言的プログラミングに即するかたちで提供したのがTransferable プロトコルと言えます。
2) Appleの意図は何?
WWDC2019にAppleは大半のコードを流用してMultiplatform(iOS,iPadOS,macOS,etc) で動作するアプリを開発できるSwiftUIを公開し年々アップデートを続けています。
私見ですがAppleがSwiftUI推し進めている理由としてはiOSアプリ開発者からのmacOSアプリ開発を流入を狙っているところがあるのではないかと考える次第です。理由としてはSwiftUI 当初からMultiplatform で動作するドキュメントアプリ開発用のテンプレートが用意されておりSwiftUI公開当初からAppleはドキュメントアプリに注意を払っている印象があります。
余談ですが、個人としてドキュメントアプリ開発に興味があり調べたことがあります。WWDC2019の段階ではSwiftUIでのコピー&ペーストとファイル操作については対応が不十分でOSごとのコピー&ペーストとファイル操作についての実装する必要がありました。
macOSアプリではmacOSとその全身のOSXが1990年台後半に開発されたこともあり、XML形式の定義ファイル(1990年台後半は当時主流だった)と、アプリ側でコピー&ペーストとファイル操作に関するコードを実装する必要がありiOSアプリを日々記述する側としては学習コストを高く感じました。
SwiftUI公開後もAppleは段階的にSwift言語専用でコピー&ペーストとファイル操作についてのアップデートを進めており。WWDC2020でのファイル形式に関連機能追加、WWDC2022のTransferable の追加でコピー&ペーストやファイル操作に関して少ないコードで記述できるようになりました。
ドキュメントアプリも含め、iOS,macOSでのコピー&ペーストとファイル操作をSwift言語を使って記述できる手段がなかったものをTransferableで提供しています。
3) TransferableはiOSアプリ開発者に関係あるのか?
ここまでMultiplatformとドキュメントアプリとの関連でTransferableを説明しましたがiOSアプリ開発者はTransferableが必要なのでしょうか? iOSアプリの場合ファイルを操作を必要とする状況は少ないと思いますがAppleとしてはiOS16 SDK以降Transferable プロトコルを利用する機能を提供していくものと予想されます。
具体的な例としてWWDC2022の写真アルバムピッカーの新機能のデモとしてTransferable プロトコルが使われています。
上記セッションにて写真アルバムから写真を入手する際iOS16 SDKから利用できる新機能のデモンストレーションを行なっています。こちら新機能がTransferable を採用したものとなっています。デモンストレーションからAppleを意図を汲み取ってみると、
別のアプリ同士やOSが提供する機能の中にはTransferable を使ってくものがあるよ
という話かと考えられます。iOSアプリ開発者としてはTransferableは必修項目というわけではなく2022年以降に利用例が出てくる際に以前聞いたことがある程度でも困らない話でしょう。
参考
- Meet Transferable - WWDC22 - Videos - Apple Developer ** AppleによるTransferableについてのセッション。Transferableを簡潔に説明している。コピー&ペーストのメカニズムを知っていればより理解できます
- What's new in the Photos picker - WWDC22 - Videos - Apple Developer ** PhotosPicker (Appleが置き換えようとしている写真ピッカー機能) でTransferableを使ったデモンストレーションが含まれています
- Uniform Type Identifiers — a reintroduction - Tech Talks - Videos - Apple Developer ** Swift言語のみを考慮したUTI 向けの新フレームワークについてのセッション
- Uniform Type Identifiers | Apple Developer Documentation ** Swift言語のみを考慮したUTI 向けの新フレームワークについてのドキュメント
- macOSアプリからアプリが対応するファイル形式定義を入手する - (macOS, iPadOS) ** macOSアプリには手がかりがないためmacOSアプリの調査記事は参考になります
- Export Type Identifiers | Import Type Identifiers - iOS/iPadOS/macOS ** アプリが扱うファイル形式をplist.info(XML形式)で記述する必要がありますよ、という内容の記事
UniFaでは共に働く仲間を募集しております募集している対象は都度かわりますのでお手数ですが採用情報からご確認頂ければさいわいです。