Secret-Of-SwiftUI / SSDC22

🀑 응~ 질렀? deprecated ν•˜λ©΄ κ·Έλ§Œμ΄μ•Ό~
9 stars 0 forks source link

What's new in the Photos picker #17

Open hyun99999 opened 1 year ago

hyun99999 commented 1 year ago

PHPicker provides simple and secure integration between your app and the system Photos library. Learn how SwiftUI and Transferable can help you offer integration across iOS, iPadOS, macOS, and watchOS. We'll also show you how you can use AppKit and NSOpenPanel to bring the Photos picker on Mac into your macOS apps. For even more on the Photos picker, watch "Improve access to Photos in your app" from WWDC21.

hyun99999 commented 1 year ago

What's new in the Photos picker - WWDC22 - Videos - Apple Developer

λ³Έ 글은 WWDC λ₯Ό 보고, λ²ˆμ—­ 및 μš”μ•½ 그리고 μ‹€ν–‰ν•΄λ³΄λŠ” μŠ€ν„°λ”” ν”„λ‘œμ νŠΈμ˜ μΌν™˜μž…λ‹ˆλ‹€.

1

μ˜€λŠ˜μ€ system Photos picker κ°œμ„ λœ λͺ‡ 가지 사항에 λŒ€ν•΄ μ΄μ•ΌκΈ°ν•˜κ³ μž ν•©λ‹ˆλ‹€.

system Photos picker λŠ” λŒ€λΆ€λΆ„μ˜ 앱이 iOS μ—μ„œ 사진, λΉ„λ””μ˜€μ— μ•‘μ„ΈμŠ€ν•˜λŠ” κ°€μž₯ 쒋은 λ°©λ²•μž…λ‹ˆλ‹€.

2

picker λŠ” process 없이 λŒμ•„κ°€λ―€λ‘œ 라이브러리 μ•‘μ„ΈμŠ€λ₯Ό μš”μ²­ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€. 직관적인 UI 와 μ‚¬μš©ν•˜κΈ° μ‰¬μš΄ API κ°€ μžˆμŠ΅λ‹ˆλ‹€. PHPicker API 에 μ΅μˆ™ν•˜μ§€ μ•Šμ€ 경우 이전 연도 WWDC μ„Έμ…˜μ—μ„œ μžμ„Ένžˆ λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

3

Overview

4

πŸ₯½Β Let’s dive in!

New features

PHPickerFilter

picker λŠ” λ„μž…λœ μ΄ν›„λ‘œ 이미지와 λΉ„λ””μ˜€, 라이브 포토 κ°„μ˜ 필터링을 μ§€μ›ν•©λ‹ˆλ‹€.

5

κ·ΈλŸ¬λ‚˜ 일뢀 μ•±μ—μ„œλŠ” λ‹€λ₯Έ μš”κ΅¬ 사항이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, screenshot-stitching app 은 였직 μŠ€ν¬λ¦°μƒ·λ§Œ ν”Όμ»€μ—μ„œ 보여주렀고 ν•©λ‹ˆλ‹€.

μ˜¬ν•΄ μΆ”κ°€ν•œ μƒˆλ‘œμš΄ screenshots fileter 둜 이제 κ°€λŠ₯ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. screenshots 외에도 screen recordings 와 slo-mo videos 와 같은 λ‹€λ₯Έ asset νƒ€μž…λ“€λ„ μΆ”κ°€ν–ˆμŠ΅λ‹ˆλ‹€.

6

PHAsset.PlaybackStyle 을 μ‚¬μš©ν•˜μ—¬ μƒˆ ν•„ν„°λ₯Ό λ§Œλ“œλŠ” 방법도 μžˆμŠ΅λ‹ˆλ‹€.

7

cinematic videos, depth effect photos 및 bursts λ₯Ό μ œμ™Έν•œ λͺ¨λ“  μƒˆλ‘œμš΄ 필터듀이 backport λ©λ‹ˆλ‹€.(backport: μ΅œμ‹  λ²„μ „μ—μ„œ κ°€μ Έμ™€μ„œ 이전 λ²„μ „μœΌλ‘œ μ μš©ν•˜λŠ” μž‘μ—…)

즉, μœ„μ˜ μ„Έκ°€μ§€λŠ” iOS 16λΆ€ν„° μ§€μ›ν•©λ‹ˆλ‹€.

앱이 iOS 15 λ₯Ό νƒ€κ²ŸνŒ…ν•˜λŠ” 경우 μ—¬λŸ¬λΆ„λ“€μ€ iOS 16 SDK 둜 μ»΄νŒŒμΌμ„ ν•˜λŠ” λ™μ•ˆ 계속 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Compound filters

Compound filters 의 경우 기쑴의 any 에 μΆ”κ°€ν•˜μ—¬ all κ³Ό not 도 μ‚¬μš©λ©λ‹ˆλ‹€. 이 μ—­μ‹œ iOS 15 둜 λ°±ν¬νŠΈλ˜μ—ˆμŠ΅λ‹ˆλ‹€.

8

λͺ‡κ°€μ§€ μ½”λ“œ 예제λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

9

λΉ„λ””μ˜€μ™€ live photo λ₯Ό ν‘œμ‹œν•˜λ €λ©΄ any 와 κ²°ν•©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ˜λŠ” μŠ€ν¬λ¦°μƒ·λ§Œ ν‘œμ‹œν•˜κ³  싢을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν¬λ¦°μƒ· 없이 λͺ¨λ“  이미지λ₯Ό ν‘œμ‹œν•˜λ €λ©΄ images 와 screenshots filters λ₯Ό all κ³Ό not 을 μ‚¬μš©ν•˜μ—¬ κ²°ν•©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ§ˆμ§€λ§‰ μ˜ˆμ‹œμ—μ„œλŠ” iOS 16 이상을 νƒ€κ²ŸνŒ…ν•˜λŠ” 경우 .cinematicVideos ν•„ν„°λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.



λ‹€μŒμœΌλ‘œ half-height picker 와 κ΄€λ ¨λœ κ°œμ„  사항에 λŒ€ν•΄ 이야기 ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

half-height picker

iOS 15 UIKit μ—λŠ” picker λ₯Ό 절반 높이 λͺ¨λ“œλ‘œ ν‘œμ‹œν•˜λŠ”λ° μ‚¬μš©ν•  수 μžˆλŠ” μƒˆλ‘œμš΄ UISheetPresentationController API κ°€ μžˆμŠ΅λ‹ˆλ‹€. 이미 λ§Žμ€ κ²½μš°μ— ν›Œλ₯­ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€. ν•˜μ§€λ§Œ, μΌλΆ€λŠ” μ„ νƒν•œ assets λ₯Ό μ‘°μ •ν•˜κ³  μ΄λŸ¬ν•œ 변경사항이 picker 에 λ‹€μ‹œ λ°˜μ˜λ˜λ„λ‘ μ»€μŠ€ν…€UI λ₯Ό κ΅¬ν˜„ν•˜κ³ μž ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

13

iOS 16μ—μ„œλŠ” asset identifiers λ₯Ό ν†΅ν•΄μ„œ 에셋을 μ„ νƒν•΄μ œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

14

μœ„μ˜ 그림처럼 두 번째 사진은 deselectAssets κ°€ 호좜된 ν›„ picker μ—μ„œ 더 이상 μ„ νƒλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. moveAesset λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ assets λ₯Ό μž¬μ •λ ¬ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

15

μš°λ¦¬λŠ” picker 의 μƒˆλ‘œμš΄ κΈ°λŠ₯에 μ΅μˆ™ν•΄μ‘ŒμŠ΅λ‹ˆλ‹€. ν”Œλž«νΌ 지원에 λŒ€ν•΄μ„œ 이야기 ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

Platform support

ν˜„μž¬ system Phots picker λŠ” 였직 iOS 와 iPadOS μ—μ„œλ§Œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ˜¬ν•΄ macOS 와 watchOS λΌλŠ” 두 가지 μΆ”κ°€ ν”Œλž«νΌμ— λ„μž…ν•  μ˜ˆμ •μž…λ‹ˆλ‹€. iPadOS picker 도 iPad λ§Œμ„ μœ„ν•œ μƒˆλ‘œμš΄ λ””μžμΈμœΌλ‘œ μ—…λ°μ΄νŠΈ λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

16

iPadOS

λ¨Όμ € μƒˆλ‘œμš΄ iPad UI 을 μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

17

picker λŠ” 이제 큰 iPad λ””μŠ€ν”Œλ ˆμ΄μ˜ 이점을 ν™œμš©ν•˜κΈ° μœ„ν•΄μ„œ sidebar κ°€ ν‘œμ‹œλ©λ‹ˆλ‹€. μ‚¬μ΄λ“œ λ°”λ₯Ό μƒμš”ν•˜μ—¬ λ‹€λ₯Έ μ»¬λ ‰μ…˜κ°„μ˜ λΉ λ₯Έ 탐색을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ Split Screen mode μ—μ„œλŠ” 곡간이 μΆ©λΆ„ν•˜μ§€ μ•ŠμœΌλ©΄ 기쑴의 compact picker UI 둜 λŒ€μ²΄λ©λ‹ˆλ‹€.

(μ•„λž˜λŠ” ν˜„μž¬ iPadOS μ—μ„œ μ œκ³΅ν•˜λŠ” compact picker UI μž…λ‹ˆλ‹€.)

사진 좜처: https://www.idownloadblog.com/2020/08/11/enhanced-image-picker-iphone-ipad/

macOS

macOS picker λŠ” Mac-style controls 이 μžˆλŠ” sidebar λ₯Ό κ°€μ§‘λ‹ˆλ‹€.

19

그리고 iOS picker 처럼 multiple selection, grid 의 fluid zooming λ₯Ό μ§€μ›ν•˜λ©° μ‚¬λžŒ, μž₯μ†Œ λ“±κ³Ό 같은 ν•­λͺ©μ„ 검색할 수 μžˆλŠ” 검색기λŠ₯이 μžˆμŠ΅λ‹ˆλ‹€.

μƒˆλ‘œμš΄ picker UI λŠ” NSOpenPanel 을 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μ‚¬μš©ν•˜μ—¬ system photo library μ—μ„œ iCloud Photos 에 μ €μž₯된 에셋을 ν¬ν•¨ν•˜μ—¬ 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ˜ 앱은 μ–΄λ–€ adoption work 없이 μƒˆλ‘œμš΄ UI κ°€ 무료둜 제곡될 κ²ƒμž…λ‹ˆλ‹€.

When to use NSOpenPanel

drag and drop 이 NSOpenPanel picker μ—μ„œ μ§€μ›λ©λ‹ˆλ‹€. iOS, iPadOS 및 macOS 의 ν‘œμ€€ picker μ—μ„œλ„ μ§€μ›λ©λ‹ˆλ‹€. μ•±μ—μ„œ λͺ‡κ°œμ˜ 이미지 ν˜Ήμ€ λΉ„λ””μ˜€λ₯Ό 선택해야 ν•˜λŠ” 경우 NSOpenPanel API 만 있으면 λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜, photo library μ—μ„œ μ„ νƒν•œ νŒŒμΌλ“€μ€ μ‹œμŠ€ν…œμ— μ˜ν•΄ μ–Έμ œλ‚˜ μ‚­μ œλ  수 μžˆλ‹€λŠ” 것을 λͺ…심해야 ν•©λ‹ˆλ‹€. μž₯기적으둜 μ‚¬μš©ν•˜λ €λ©΄ μ•±μ—μ„œ κ΄€λ¦¬ν•˜λŠ” μœ„μΉ˜μ— 볡사해야 ν•©λ‹ˆλ‹€.

21

When to use PHPicker

media-centric(λ―Έλ””μ–΄ 쀑심) macOS μ•±μ˜ 경우, 졜고의 μ‚¬μš©μž κ²½ν—˜μ„ μœ„ν•΄ 기본적으둜 μƒˆλ‘œμš΄ Photos picker λ₯Ό μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ, 앱은 NSOpenPanel API λ₯Ό μ‚¬μš©ν•˜μ—¬ 파일 μ‹œμŠ€ν…œμ—μ„œ 에셋을 μ„ νƒν•΄μ•Όν•˜λŠ” λŒ€μ²΄ 방법을 계속 제곡 ν•΄μ•Ό ν•©λ‹ˆλ‹€. 고객이 μ—¬μ „νžˆ photo libraries μ™ΈλΆ€μ˜ 에셋을 μ„ νƒν•˜κ³  μ‹Άμ–΄ν•˜λŠ” κ²½μš°κ°€ μžˆμŠ΅λ‹ˆλ‹€.

22

watchOS

λ§ˆμ§€λ§‰μœΌλ‘œ watchOS 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

처음으둜 μƒˆλ‘œμš΄ API λ₯Ό ν†΅ν•΄μ„œ μ €μž₯된 이미지에 μ•‘μ„ΈμŠ€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. watchOS picker λŠ” iOS 와 macOS picker 처럼 ν”„λ‘œμ„ΈμŠ€κ°€ ν•„μš”ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ 라이브러리 μ•‘μ„ΈμŠ€λ₯Ό μš”μ²­ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

iOS picker 와 μœ μ‚¬ν•œ UI λ₯Ό 가지고 μžˆμ§€λ§Œ 더 μž‘μ€ 화면에 μ΅œμ ν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. κ·Έλ¦¬λ“œ λ˜λŠ” μ»¬λ ‰μ…˜ λ³„λ‘œ 사진을 탐색할 수 μžˆμŠ΅λ‹ˆλ‹€.

선택 μˆœμ„œλ₯Ό ν‘œμ‹œν•˜κ³  선택 μ œν•œμ„ μ§€μ •ν•˜λ„λ‘ picker λ₯Ό ꡬ성할 수 μžˆμŠ΅λ‹ˆλ‹€.

ν•˜μ§€λ§Œ, iOS 와 macOS 와 달리 watchOS picker λŠ” μ΄λ―Έμ§€λ§Œ ν‘œμ‹œλ©λ‹ˆλ‹€. μž₯비에 500개 μ΄μƒμ˜ 이미지가 μžˆλŠ” 경우 κ°€μž₯ 졜근의 500개 μ΄λ―Έμ§€λ§Œ ν‘œμ‹œλ©λ‹ˆλ‹€.

24

Framework

PHPickerViewController λŠ” UIKit 기반인데 μ–΄λ–»κ²Œ macOS λ‚˜ watchOS μ•±μ—μ„œ μ‚¬μš©ν•  수 μžˆμ„κΉŒμš”?

μ§μž‘ν•˜μ…¨κ² μ§€λ§Œ 이제 AppKit κ³Ό SwiftUI μ—μ„œ μƒˆλ‘œμš΄ picker API λ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

(AppKit 은 macOS λ₯Ό μœ„ν•œ μœ μ € μΈν„°νŽ˜μ΄μŠ€λ₯Ό κ΅¬ν˜„ν•˜λŠ”λ° ν•„μš”ν•œ objects λ₯Ό ν¬ν•¨ν•©λ‹ˆλ‹€.)

25

λ¨Όμ €, AppKit API λ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

AppKit

UIKit API 와 맀우 μœ μ‚¬ν•©λ‹ˆλ‹€.

26

λ™μΌν•œ PHPickerConfiguration νƒ€μž…κ³Ό ν”„λ‘œνΌν‹°μ— μ•‘μ„ΈμŠ€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ•½κ°„μ˜ 차이점은 PHPickerViewController κ°€ AppKit 앱을 μœ„ν•œ NSViewController ν•˜μœ„ ν΄λž˜μŠ€λΌλŠ” κ²ƒμž…λ‹ˆλ‹€.

(NS… : NextSoftware λŠ” objective-C 의 λΌμ΄μ„ μŠ€λ₯Ό λ°›μ•„ NEXTSTEP μ΄λΌλŠ” 개발 ν™˜κ²½κ³Ό 라이브러리λ₯Ό κ°œλ°œν•˜μ˜€λ‹€. 이후 Next Computer 와 Sun Microsystems λŠ” NEXTSTEP μ‹œμŠ€ν…œμ˜ ν‘œμ€€ κ·œκ²©μ„ λ°œν‘œν•˜κ³  이λ₯Ό OPENSTEP 으둜 λͺ…λͺ…ν•œλ‹€. 이후 μ• ν”Œμ€ λ„₯슀트 μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μΈμˆ˜ν•˜κ³  NEXTSTEP/OPENSTEP 의 κ°œλ°œν™˜κ²½μ„ μ• ν”Œ λ²„μ „μ—μ„œ Cocoa(μ½”μ½”μ•„)라고 μΉ­ν–ˆλ‹€. NS μ ‘λ‘μ‚¬λŠ” NEXTSTEP λ•Œ μž‘μ„±λœ μ½”λ“œμ™€μ˜ ν˜Έν™˜μ„ μœ μ§€ν•˜κΈ°μœ„ν•΄ μ• ν”Œμ΄ μ‚¬μš©ν•˜κ³  μžˆλ‹€.)

AppKit 기반의 PHPicker 의 λ„μž…μœΌλ‘œ legacy media libraray browser μ—μ„œ λ²—μ–΄λ‚  λ•Œμž…λ‹ˆλ‹€. PHPicker λŠ” 훨씬 더 κ°•λ ₯ν•©λ‹ˆλ‹€. UIKit κ³Ό AppKit 앱을 λ™μ‹œμ— μž‘μ—…ν•  λ•Œ μœ μ§€κ΄€λ¦¬κ°€ μ‰½μŠ΅λ‹ˆλ‹€.

27

SwiftUI

iOS picker λ₯Ό κΈ°μ–΅ν•˜μ‹œλ‚˜μš”? λͺ‡ μ€„μ˜ SwiftUI μ½”λ“œλ‘œ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

28

더 μ€‘μš”ν•œ 것은 iOS, iPadOS, macOS 그리고 watchOS 와 같이 picker κ°€ μ§€μ›λ˜λŠ” λͺ¨λ“  ν”Œλž«νΌμ—μ„œ SwiftUI PhotosPicker API 에 μ•‘μ„ΈμŠ€ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. picker λŠ” μžλ™μœΌλ‘œ ν”Œλž«νΌ, μ•±μ˜ ꡬ성, μ‚¬μš© κ°€λŠ₯ν•œ 슀크린 곡간에 따라 졜적의 λ ˆμ΄μ•„μ›ƒμ„ μžλ™μœΌλ‘œ μ„ νƒν•©λ‹ˆλ‹€.

picker UI 에 λŒ€ν•΄μ„œ κ±±μ •ν•  ν•„μš”κ°€ μ—†μœΌλ―€λ‘œ 앱을 κ°œμ„ ν•˜λŠ”λ° 집쀑할 수 μžˆμŠ΅λ‹ˆλ‹€.

Loading photos and videos

데λͺ¨λ₯Ό 톡해 μƒˆλ‘œμš΄ API λ₯Ό μžμ„Ένžˆ μ‚΄νŽ΄λ³΄κΈ° 전에 λ¨Όμ € μ„ νƒν•œ 사진듀과 λΉ„λ””μ˜€λ“€μ„ λ‘œλ“œν•˜λŠ” 방법에 λŒ€ν•΄ 이야기해야 ν•©λ‹ˆλ‹€.

SwiftUI 바인딩을 톡해 λ°›λŠ” 선택 ν•­λͺ©μ— λŒ€ν•΄μ„œ placeholder 객체만 ν¬ν•¨ν•©λ‹ˆλ‹€. μš”μ²­ μ‹œμ— 에셋 데이터λ₯Ό μ¦‰μ‹œ λ‘œλ“œν•΄μ•Όν•  수 μžˆμŠ΅λ‹ˆλ‹€. ν•˜μ§€λ§Œ 일뢀 에셋 데이터듀은 μ¦‰μ‹œ λ‘œλ“œλ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ picker κ°€ iCloud Photos λ‘œλΆ€ν„° 데이터λ₯Ό λ‹€μš΄λ‘œλ“œν•˜λ €κ³  ν–ˆμ§€λ§Œ κΈ°κΈ°κ°€ 인터넷과 μ—°κ²°λ˜μ§€ μ•Šμ€ κ²½μš°μ™€ 같이 였λ₯˜κ°€ λ°œμƒν•  λ•ŒλŠ” λ‘œλ“œ μž‘μ—…μ΄ μ‹€νŒ¨ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일뢀 λŒ€μš©λŸ‰ λ™μ˜μƒκ³Ό 같은 λ‹€μš΄λ‘œλ“œκ°€ μ˜€λž˜κ±Έλ¦¬λŠ” 큰 파일의 κ²½μš°λŠ” loading indicator λŒ€μ‹  ν•­λͺ©λ³„ inline loading UI λ₯Ό ꢌμž₯ν•©λ‹ˆλ‹€.

29

PhotosPicker λŠ” μ•±κ³Ό extensions κ°„μ˜ 데이터 전솑을 μœ„ν•œ μƒˆλ‘œμš΄ SwiftUI ν”„λ‘œν† μ½œμΈ Transferable 을 μ‚¬μš©ν•©λ‹ˆλ‹€. Transfeable 을 톡해 SwiftUI 이미지λ₯Ό 직접 λ‘œλ“œν•  수 μžˆμ§€λ§Œ advanced use cases 의 경우 λ‘œλ“œν•˜λ €λŠ” 데이터 νƒ€μž…μ„ μ™„μ „νžˆ μ œμ–΄ν•˜κΈ° μœ„ν•΄ Transfeable ν”„λ‘œν† μ½œμ„ μ€€μˆ˜ν•˜λŠ” λͺ¨λΈ 객체λ₯Ό μ •μ˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Transferable 에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ Meet Transferable μ„Έμ…˜μ—μ„œ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

30

λ§Œμ•½ 앱이 λ™μ‹œμ— λ§Žμ€ μ•„μ΄ν…œμ„ μ²˜λ¦¬ν•˜κ±°λ‚˜ λΉ„λ””μ˜€μ™€ 같은 큰 에셋을 μ²˜λ¦¬ν•΄μ•Ό ν•˜λŠ” κ²½μš°μ—λŠ” λ™μ‹œμ— λͺ¨λ“  것듀을 λ©”λͺ¨λ¦¬μ— λ‘œλ“œν•˜λŠ” 것이 λΆˆκ°€λŠ₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ μ‚¬μš©λŸ‰μ„ 쀄이기 μœ„ν•΄μ„œ FileTransferRepresentation 을 μ‚¬μš©ν•˜μ—¬ μ„ νƒν•œ 에셋을 파일둜써 λ‘œλ“œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

에셋을 파일둜써 λ‘œλ“œν•  λ•Œ lifecycles λ₯Ό 관리해야 ν•œλ‹€λŠ” 것을 염두에 λ‘¬μ•Όν•©λ‹ˆλ‹€. νŒŒμΌμ„ λ°›μœΌλ©΄ μ•± 디렉토리에 λ³΅μ‚¬ν•˜κ³  더 이상 ν•„μš”ν•˜μ§€ μ•ŠμœΌλ©΄ μ‚­μ œν•΄μ•Ό ν•©λ‹ˆλ‹€.

31

자, 이제 데λͺ¨λ₯Ό ν•  μ‹œκ°„μž…λ‹ˆλ‹€!

Demo

이미 계정 ν”„λ‘œν•„ νŽ˜μ΄μ§€λ₯Ό ν‘œμ‹œν•˜λŠ” 데λͺ¨ 앱을 μ„€μ •ν–ˆμŠ΅λ‹ˆλ‹€. ν˜„μž¬ ν”„λ‘œν•„ μ΄λ―Έμ§€λŠ” placeholder μ•„μ΄μ½˜μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” PhotosPicker API λ₯Ό μ‚¬μš©ν•˜μ—¬ ν”„λ‘œν•„ 이미지λ₯Ό λ³€κ²½ν•˜λŠ” edit button μΆ”κ°€ν•˜κ³ μž ν•©λ‹ˆλ‹€.

ν”„λ‘œν•„ 이미지 λ·°λŠ” view model 에 μ •μ˜λœ image state 에 응닡할 수 μžˆμœΌλ―€λ‘œ picker selection 이 μˆ˜μ‹ λ  λ•Œ 이미지 μƒνƒœλ₯Ό μ—…λ°μ΄νŠΈν•˜κΈ°λ§Œ ν•˜λ©΄ λ©λ‹ˆλ‹€.

32

λ¨Όμ €, view model 둜 κ°€μ„œ imageSelection ν”„λ‘œνΌν‹°λ₯Ό μΆ”κ°€ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€.

33

selection λ°”μΈλ”©μœΌλ‘œ PhotosPicker API 에 μ „λ‹¬λ©λ‹ˆλ‹€. 이제 ν”„λ‘œν•„ 이미지 뷰둜 λŒμ•„κ°€μ„œ picker λ₯Ό κ°€μ Έμ˜€λŠ” μ˜€λ²„λ ˆμ΄ λ²„νŠΌμ„ μΆ”κ°€ν•΄λ΄…μ‹œλ‹€.

34

λΉŒλ“œν•˜κ³  μ‹€ν–‰ν•˜λ©΄ νŽΈμ§‘ λ²„νŠΌμ„ 눌러 picker λ₯Ό 뢈러올 수 μžˆμŠ΅λ‹ˆλ‹€.

이제 image selection κ³Ό image state λ₯Ό μ—°κ²°ν•΄ λ³΄κ² μŠ΅λ‹ˆλ‹€. view model 둜 λŒμ•„κ°€μ„œ image selection did set 을 μˆ˜μ‹ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. image selection 이 nil 이라면 image state λ₯Ό 곡백으둜 μ„€μ •ν•©λ‹ˆλ‹€.

아직 loadTransferable λ©”μ„œλ“œλ₯Ό κ΅¬ν˜„ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 컴파일 μ—λŸ¬λ₯Ό λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

35

κ΅¬ν˜„μ€ κ°„λ‹¨ν•©λ‹ˆλ‹€. completion handler 에 μ‘λ‹΅ν•˜κ³  image state λ₯Ό μ—…λ°μ΄νŠΈν•˜λ©΄ λ©λ‹ˆλ‹€.

36

PhotosPickerItem 의 loadTransferable(type:completionHandler:) λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μ»΄ν”Œλ¦¬μ…˜ ν•Έλ“€λŸ¬λ₯Ό 톡해 μ§€μ •ν•œ νƒ€μž…μ˜ μΈμŠ€ν„΄μŠ€λ‘œ λ‘œλ“œν•˜λ„λ‘ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€.

νŽΈμ§‘ λ²„νŠΌμ„ νƒ­ν•˜κ³  이미지λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. μ˜ˆμƒλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€!

38

사싀 ν”„λ‘œμ νŠΈλŠ” 이미 macOS μ—μ„œλ„ μ‹€ν–‰ν•  수 μžˆλ„λ‘ μ„€μ •λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 컴파일 ν•΄λ΄…μ‹œλ‹€.

picker λ₯Ό μ—΄κ³  이미지λ₯Ό μ„ νƒν•˜λ©΄ 앱에 반영된 것을 λ³Ό 수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€.

39

iOS 와 macOS μ—μ„œ 데λͺ¨λ₯Ό λ³΄μ•˜μ§€λ§Œ λ™μΌν•œ μ½”λ“œκ°€ watchOS μ—μ„œλ„ μž‘λ™ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λͺ…심해야할 것이 λͺ‡ 가지 μžˆμŠ΅λ‹ˆλ‹€.

watchOS picker λŠ” κ°„λ‹¨ν•œ 흐름과 짧은 μΈν„°λ ‰μ…˜μœΌλ‘œ λ””μžμΈλ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€. μ΄λ―Έμ§€λŠ” 기기의 μ‚¬μ΄μ¦ˆμ— 따라 크기가 μ‘°μ •λ©λ‹ˆλ‹€. 일반적으둜 νŽ˜μ–΄λ§λœ iPhone 에 λ™κΈ°ν™”λ©λ‹ˆλ‹€.

40

κ·ΈλŸ¬λ‚˜ Family Setup(κ°€μ‘± μ„€μ •) 을 μ‚¬μš©ν•˜λ©΄ μžμ‹ μ˜ iPhone 이 μ—†λŠ” κ°€μ‘± ꡬ성원이 Apple Watch 의 κΈ°λŠ₯κ³Ό 이점을 즐길 μˆ˜μžˆμŠ΅λ‹ˆλ‹€. κΈ°κΈ°κ°€ Family Setup λͺ¨λ“œμΈ 경우 picker λ₯Ό μ‚¬μš©ν•˜μ—¬ iCloud Photos 에 μžˆλŠ” 졜근 1000개의 이미지λ₯Ό 선택할 수 μžˆμŠ΅λ‹ˆλ‹€. picker λŠ” μΈν„°λ„·μ—μ„œ 일뢀 이미지λ₯Ό λ‹€μš΄λ‘œλ“œν•΄μ•Όν•˜κ³ , 이 경우 picker κ°€ λ‹«νžˆκΈ° μ „ loading UI κ°€ λ³΄μ—¬μ§‘λ‹ˆλ‹€.

41

μ—¬λŸ¬λΆ„μ΄ κ°€μ‹œκΈ° 전에 앱이 사지과 λΉ„λ””μ˜€μ— μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” κ°€μž₯ 쒋은 λ°©λ²•μœΌλ‘œ systme Photos picker λ₯Ό λ§Œλ“€κΈ° μœ„ν•΄ μ΅œμ„ μ„ λ‹€ν•˜κ³  μžˆλ‹€λŠ” 것을 λ§μ”€λ“œλ¦¬κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. 당신이 μ»€μŠ€ν…€ picker λ₯Ό μ—¬μ „νžˆ μ‚¬μš©ν•˜κ³  μžˆλŠ” 경우 μ „ν™˜ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

42