Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Mastering share sheet preview
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Yuka Ezura
November 11, 2019
Programming
1.5k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Mastering share sheet preview
Yuka Ezura
November 11, 2019
More Decks by Yuka Ezura
See All by Yuka Ezura
SF Symbols
ezura
9
1.5k
気遣いの iOS プログラミング
ezura
11
3.8k
Secret Swift tour
ezura
7
3.1k
Swift Album ver.4.1
ezura
3
1.6k
Swift と Kotlin
ezura
4
3k
哲学とSwiftの発表
ezura
5
660
アプリが動いたその先へ (iOS アプリ開発編)
ezura
1
1.2k
Blending Kotlin's culture into Swift
ezura
1
1.4k
Re: エラーと警告でコードをデザインする
ezura
2
1.1k
Other Decks in Programming
See All in Programming
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
150
Claude Code全社展開のためにやったことn選~プラグイン302個・コミッター271人を支えるために~
kenchan
5
1.8k
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
130
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
Cloudflare is Agents
chimame
0
190
이 함수, 실패하면 어떻게 되나요? null부터 Rich Errors까지, Kotlin 에러 처리 15년
haeti2
0
110
初めての模倣学習とVLA
natsutan
0
410
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
610
FastAPI の並行処理モデルを完全に理解する
hoto17296
9
3.4k
いまどきの Codex で開発する visionOS アプリの開発スタイルについて
karad
0
180
kubernetes コンポーネント開発入門 / 新卒N年目の勉強会&交流会!〜〇〇への誘い〜 #n_study
mazrean
0
140
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
230
Building Applications with DynamoDB
mza
96
7.2k
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
310
What's in a price? How to price your products and services
michaelherold
247
13k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
230
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
840
Building an army of robots
kneath
306
46k
Done Done
chrislema
186
16k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Transcript
.BTUFSJOH TIBSFTIFFUQSFWJFX QPUBUPUJQT F[VSB
F[VSB w 1PEDBTU"VEJPCPPL IUUQTNPPLNPPLSBEJPDPN w -*/&DPSQ w -*/&ϊϕϧ։ൃ୲
/FX J04d dJ04
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ 4%,ଆͰదʹදࣔͯ͘͠ΕΔ߹͋Δ
2͜ͷ1SFWJFX෦ɺԿ͔ରԠ͕ඞཁʁ ΞϓϦ։ൃऀଆͰมߋ͕ඞཁͳ߹͋Δ
ରԠલ γΣΞ͢Δίϯςϯπ w 63-ίϯςϯπͷ63- w ςΩετϋογϡλά
ରԠલ ରԠޙ63-ͷQSFWJFXΛදࣔ
ରԠޙ63-ͷQSFWJFXΛදࣔ ରԠલ
UIActivityViewController
let activityVC = UIActivityViewController( activityItems: [shareItem], applicationActivities: nil) self.present(activityVC, animated:
true, completion: nil)
activityItems: [URL(Web)] activityItems: [URL(file path)] activityItems: [Text] ࣗಈతʹదͳදࣔΛͯ͘͠ΕΔ߹ ྫ
activityItems: [URL, Text] activityItems: [UIImage] activityItems: [NSData] activityItems: [Text, UIImage]
վળͷ༨͕͋Δ߹ ྫ ΞϓϦΞΠίϯ
ଞʹ͍Ζ͍Ζͳύλʔϯ͕͋Δ͚ΕͲʜ
͜ΕΛԡ͓͚͑ͯ͞େৎʂ
ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ
let activityVC = UIActivityViewController( activityItems: [...], applicationActivities: nil) self.present(activityVC, animated:
true, completion: nil)
6*"DUJWJUZ*UFN4PVSDF4USJOH63-%BUB 6**NBHF ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ ͜Ε%PDVNFOUʹ໌จԽ͞Ε͓ͯΒͣɺ ࢲݸਓͰͷ࣮ݧΛجʹͨ͠ௐࠪ݁ՌͰ͢ɻ ެࣜใͰͳ͍͜ͱΛ͝ཹҙ͍ͩ͘͞ɻ
activityItems: [URL, String] 6*"DUJWJUZ*UFN4PVSDF4USJOH63-*NBHF ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ
activityItems: [ItemSource(URL), String] ϙΠϯτ 1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ 6*"DUJWJUZ*UFN4PVSDF4USJOH63-*NBHF
ϙΠϯτ -1-JOL.FUBEBUB
-1-JOL.FUBEBUB An object that contains metadata about a URL https://developer.apple.com/documentation/linkpresentation/lplinkmetadata
•var originalURL: URL? •var url: URL? •var title: String? •var iconProvider: NSItemProvider? •var imageProvider: NSItemProvider? •var videoProvider: NSItemProvider? •var remoteVideoURL: URL?
class ShareActivityItemSource: NSObject, UIActivityItemSource { func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) ->
LPLinkMetadata? { linkMetadata } func activityViewControllerPlaceholderItem(_ activityViewController: UIActivityViewController) -> Any { placeholder } func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivity.ActivityType?) -> Any? { item } }
class ShareActivityItemSource: NSObject, UIActivityItemSource { func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) ->
LPLinkMetadata? { let linkMetadata = LPLinkMetadata() linkMetadata.title = "custom title" linkMetadata.iconProvider = NSItemProvider(contentsOf: imageURL) return linkMetadata } linkMetadata.iconProvider (or imageProvider) linkMetadata.title
class ShareActivityLazyLoadItemSource: NSObject, UIActivityItemSource { init(_ url: URL) { self.originalURL
= url self.imageURL = saveImageInTemporaryDir(#imageLiteral(resourceName: "ezura"), fileName: "shareImage")! super.init() linkMetadata.title = "placeholder title" linkMetadata.originalURL = originalURL linkMetadata.iconProvider = NSItemProvider(contentsOf: imageURL) linkMetadata.imageProvider = NSItemProvider(contentsOf: imageURL) metadataProvider.startFetchingMetadata(for: originalURL) { [linkMetadata] metadata, error in linkMetadata.title = metadata?.title linkMetadata.url = metadata?.url linkMetadata.originalURL = metadata?.originalURL linkMetadata.iconProvider = metadata?.iconProvider linkMetadata.imageProvider = metadata?.imageProvider } } func activityViewControllerLinkMetadata(_ activityViewController: UIActivityViewController) -> LPLinkMetadata? { return linkMetadata }
88%$ ʮ&NCFEEJOHBOE4IBSJOH7JTVBMMZ3JDI-JOLTʯ IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED -1-JOL.FUBEBUBपΓͷৄࡉ
-1-JOL.FUBEBUBΛ͏ํ๏ͷ·ͱΊ w ํ๏ w -1-JOL.FUBEBUBʹλΠτϧΞΠίϯͷใΛೖΕΔ w ্هΛ6*"DUJWJUZ*UFN4PVSDFͷϝιουܦ༝Ͱ͢ w PQUJPOBMͨ͠-1-JOL.FUBEBUBͷQSPQFSUZΛߋ৽͢Δ w
ҙ 4IBSFઌʹ-1-JOL.FUBEBUB͞ΕΔ 4IBSFઌͰΘΕΔՄೳੑ͕͋Δ
3FDBQ w ϙΠϯτ1SFWJFX͞ΕΔίϯςϯπͷ༏ઌ 6*"DUJWJUZ*UFN4PVSDF5FYU63-%BUB 6**NBHF 1SFWJFX͍ͨ͠ίϯςϯπΛ6*"DUJWJUZ*UFN4PVSDFܦ༝Ͱ͢ ෳͷ6*"DUJWJUZ*UFN4PVSDF͕͋Δ߹ઌউͪ
w ϙΠϯτ-1-JOL.FUBEBUB w -1-JOL.FUBEBUBʹλΠτϧΞΠίϯͷใΛೖΕΔ w ্هΛ6*"DUJWJUZ*UFN4PVSDFͷϝιουܦ༝Ͱ͢ ҙ4IBSFઌʹ-1-JOL.FUBEBUB͞ΕΔ
ࢀߟจݙ w -1-JOL.FUBEBUB IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOMJOLQSFTFOUBUJPO MQMJOLNFUBEBUB w &NCFEEJOHBOE4IBSJOH7JTVBMMZ3JDI-JOLT IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w -JOL1SFTFOUBUJPO
IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOMJOLQSFTFOUBUJPO