Sponsor Link
環境&対象
- macOS Ventura 13.3 Beta3
- Xcode 14.3 Beta2
- iOS 16.0
ShareLink
ShareLink は、iOS16/macOS13 から使用できる View で 共有シートを表示するきっかけとすることができます。
Apple のドキュメントは、こちら。
ShareLink でシェアするものは、以下の3つです。
・item
・subject (String)
・message (String)
共有 Item
item としては、さまざまな型を使用することができます。
ShareLink 向けには、item が String 型や URL 型である場合に向けた init も用意されています。
ShareLink の item として使うことができるようにするためには、Transferable に conform している必要があります。(次回以降で説明予定です)
この記事では、ShareLink の使い方を確認するために、item が String 型の時の使い方を見ていきます。
# String はすでに Transferable に conform しています。
Subject, Message
ShareLink では、共有オブジェクトと同時に、Subject と Message を指定することができます。
Subject
Subject については Apple のドキュメントでは、以下のように説明されています。
subject A title for the item to show when sharing to activities that support a subject field.
どのようなアプリが subject field に対応しているか気になりますが、記載はありません・・・・
メールアプリは対応しているようですが、それ以外は不明です。
例えば、Reminder は、受け取ってくれません。
Message
Message については、Apple のドキュメントでは、以下のように説明されています。
message A description of the item to show when sharing to activities that support a message field. Activities may support attributed text or HTML strings.
Message が Subject と異なる点は、message を指定した時に、共有シートにも表示される点です。
(別に preview が指定すると表示されなくなります。)
本記事では、シェア対象の item にフォーカスして説明しますので、subject, message はほとんど登場しません。
シンプルな使い方
シンプルに使ってみます。
ShareLink は、String と URL を特別扱いしていて、この2つの share であれば、非常に簡単にできるようになっています。
String をシェア
String “MyShareString” を share するためのコードは以下のようになります。
ShareLink(item: "MyShareString")
以下のような共有ボタンが表示され、押下すると 共有シートが表示されるようになります。
Transferable に conform しているString
上記のように、String をそのまま ShareLink に使えたのは、String がすでに Transferable に conform しているからです。
Transferable に準拠しているものは、ShareLink の item として渡すことができます。
Apple のドキュメントは、こちら。
Playground でも以下のようにして、String に transferRepresentation が定義されていることを確認することができ、Transferable に conform していることが確認できます。
import Foundation
import SwiftUI
print(String.transferRepresentation)
// printout
DataRepresentation(contentType: _UTCoreType 0x7ff864a58c30> public.utf8-plain-text (not dynamic, declared), exporting: Optional((Function)), importing: Optional((Function)))
Label をカスタマイズ
ShareLink は特に指定しなければ、通常の共有ボタンで表示されます。

通常はこの共有ボタンで十分かもしれませんが、この共有ボタンをカスタマイズすることも可能です。
共有ボタンをカスタマイズするためには、label: で指定します。
ShareLink(item: "Hello", label: { Label(title: { Text("MyOwnShare") }, icon: { Image(systemName: "paperplane")}) })
以下のような共有ボタンになります。

label として Label を指定しているので、テキストだけでなく、アイコンも指定したものが使用されています。
共有シート上での表示カスタマイズ
共有シート上での表示についての設定もできるようになっています。
共有シートには 共有先のアプリ選択等もありますので、共有シート全体をカスタマイズできるわけではありません。

上記は、String を共有対象としたときに表示される 共有シート です。String を共有しようとしているので、イメージ部分は テキストを表すイメージ、メッセージ部分は、共有オブジェクトそのものを表示しています。
このイメージ部分や、メッセージ部分をカスタマイズすることができます。
メッセージ部分をカスタマイズ
メッセージ部分の指定はさまざまな方法で可能です。
共有オブジェクトが String で、特にメッセージ部分を指定していない場合は、共有オブジェクト(String) がそのまま表示されます。
共有対象として、message も指定しているとその Text が表示されます。
ShareLink(item: "Hello", subject: Text("Subject"), message: Text("Message"))
以下のように、メッセージ部分に Message と表示されるようになります。

なお、message 引数の説明には、”A description of the item to show when sharing to activities that support a message field. Activities may support attributed text or HTML strings.” と書いてありますが、 Markdown を使った Text を渡すと、(少なくとも) 共有シートではメッセージは非表示になってしまいました。(共有先には渡されましたので、共有シートが AttributedString 的な要素の表示に非対応なのだと推測します @iOS16.3時点)
イメージ部分をカスタマイズ
イメージ部分、メッセージ部分をカスタマイズするためには、SharePreview を使うことが必要となります。
Apple のドキュメントは、こちら。
この SharePreview では、イメージ部分とメッセージ部分の両方を指定します。
message: 引数で指定する Text でもカスタマイズできていましたが、あくまで 共有する情報を使って、 Preview を作成していたと言う状態です。
SharePreview に渡される情報は Preview のためであり、共有先のアプリには渡されません。
以降のサンプルアプリには、”MyImage” と言う名称で、画像を登録してサンプルを動作させています。
ShareLink(item: "Hello", preview: SharePreview("MyText", image: Image("MyImage")))
共有シートは以下のようになります。

なお、SharePreview に イメージやメッセージを渡していますが、あくまでそれは Preview に使用されているだけです。共有先のアプリに渡されるのは、共有オブジェクトである “Hello” です。
すべてをカスタマイズした ShareLink
すべてを組み合わせて使用することもできます。
つまり、共有ボタンになるラベルも指定して、共有シートに表示される イメージとメッセージも指定しているケースです。
ShareLink(item: "Hello",
preview: SharePreview("MyText", image: Image("MyImage")),
label: { Text("MyShareLabel")})
なお、message と preview を同時に指定されることも 考えられますが、同時に指定された場合、共有シートには preview で指定した情報が表示されます。
次回
本記事では、String を共有対象として 共有ボタンや共有シートのカスタマイズを確認しました。
次の記事では、独自オブジェクトを 対象とする方法を確認する予定です。
まとめ
ShareLink の使い方
- item: 引数が共有オブジェクト
- subject, message で追加情報も共有できる(ただし、使用方法不明)
- SharePreview を使用することで共有シート上での preview を指定できる
説明は以上です。
不明な点やおかしな点ありましたら、こちらまで。
SwiftUI おすすめ本
SwiftUI を理解するには、以下の本がおすすめです。
SwiftUI ViewMatery
SwiftUI で開発していくときに、ViewやLayoutのための適切なmodifierを探すのが大変です。
英語での説明になってしまいますが、以下の”SwiftUI Views Mastery Bundle”という本がビジュアル的に確認して探せるので、便利です。
英語ではありますが、1ページに コードと画面が並んでいるので、非常にわかりやすいです。
View に適用できる modifier もわかりやすく説明されているので、ビューの理解だけではなく、どのような装飾ができるかも簡単にわかります。
超便利です
販売元のページは、こちらです。
SwiftUI 徹底入門
# SwiftUI は、毎年大きく改善されていますので、少し古くなってしまいましたが、いまでも 定番本です。
Swift学習におすすめの本
詳解Swift
Swift の学習には、詳解 Swift という書籍が、おすすめです。
著者は、Swift の初期から書籍を出していますし、Swift の前に主力言語だった Objective-C という言語についても同様の書籍を出しています。
最新版を購入するのがおすすめです。
現時点では、上記の Swift 5 に対応した第5版が最新版です。
Sponsor Link