SwiftUI Drag & Drop で困った話

2.3K Views

November 14, 24

スライド概要

【Sansan × YUMEMI】iOSランチタイムLT
https://yumemi.connpass.com/event/333140/presentation/

profile-image

Mobile Application Programmer

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

SwiftUI Drag & Drop で困った話 KAWASHIMA Yoshiyuki 【Sansan ✖ YUMEMI】iOSランチLT 2024.11.14

2.

伝えたいこと • iOS アプリ開発は難しい

3.

ターゲット OS は?

4.

iOS アプリ開発は難しい

5.

難しくしているものは何?

6.

iOS が得意としているもの

7.

スクラップ&ビルド

8.

永くメンテナンスされるものは苦手

9.

開発期間が長いとそれだけで ミスマッチが発生しやすい

10.

前提 iOS アプリの機能として Drag & Drop を実装することになった SwiftUI ベースで iOS 17 以上をターゲット

11.

https://developer.apple.com/documentation/swiftui/drag-and-drop

12.

https://developer.apple.com/documentation/swiftui/making-a-view-into-a-drag-source

13.

https://developer.apple.com/documentation/swiftui/drag-and-drop

14.

https://developer.apple.com/documentation/swiftui/drag-and-drop

15.

https://developer.apple.com/documentation/CoreTransferable/Transferable

16.

https://developer.apple.com/documentation/CoreTransferable/Transferable

17.

https://developer.apple.com/documentation/CoreTransferable/Transferable

18.

https://developer.apple.com/documentation/swiftui/drag-and-drop

19.

https://developer.apple.com/documentation/swiftui/drag-and-drop

20.

https://developer.apple.com/jp/design/Human-Interface-Guidelines/drag-and-drop

21.

https://developer.apple.com/documentation/swiftui/view/draggable(_:)

22.

https://developer.apple.com/documentation/swiftui/view/draggable(_:)

23.

https://developer.apple.com/tutorials/app-dev-training/supporting-drag-and-drop/

24.

Drag & Drop ハンドリングができない

25.

https://developer.apple.com/documentation/swiftui/making-a-view-into-a-drag-source

26.

https://developer.apple.com/documentation/swiftui/making-a-view-into-a-drag-source

27.

https://developer.apple.com/documentation/swiftui/making-a-view-into-a-drag-source

28.

https://developer.apple.com/documentation/swiftui/view/dropdestination(for:action:istargeted:)

29.

https://developer.apple.com/documentation/swiftui/view/dropdestination(for:action:istargeted:)

30.

https://developer.apple.com/documentation/swiftui/view/dropdestination(for:action:istargeted:)

31.

もう少しハンドリングしたい

32.

https://developer.apple.com/documentation/swiftui/drag-and-drop

33.

https://developer.apple.com/documentation/swiftui/drag-and-drop

34.

https://developer.apple.com/documentation/foundation/nsitemprovider

35.

https://developer.apple.com/documentation/foundation/nsitemprovider

36.

https://developer.apple.com/documentation/foundation/nsitemprovider

37.

https://developer.apple.com/documentation/swiftui/view/ondrag(_:preview:)

38.

https://developer.apple.com/documentation/swiftui/view/ondrag(_:preview:)

39.

https://developer.apple.com/documentation/swiftui/dropdelegate

40.

DragDelegate はない

41.

もっとハンドリングしたい

42.

https://developer.apple.com/documentation/swiftui/dropdelegate

43.

https://developer.apple.com/documentation/swiftui/dropdelegate

44.

https://developer.apple.com/documentation/swiftui/draggesture

45.

https://developer.apple.com/documentation/swiftui/draggesture

46.

https://developer.apple.com/documentation/swiftui/draggesture

47.

https://developer.apple.com/documentation/swiftui/draggesture

48.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

49.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

50.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

51.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

52.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

53.

https://developer.apple.com/documentation/swiftui/composing-swiftui-gestures

54.

SwiftUI Drag & Drop 併用はできない API 実装 ハンドリング iOS 16 draggable/dropDestination 不要 できない iOS 14 onDrag/onDrop 一部必要 Dropはできる iOS 13 DragGesture 全て できる

55.

SwiftUI Drag & Drop を難しくしているもの • 選択肢があって自由である • 一方でターゲット OS によっては制限がある • OS によって振る舞いが違う • API が不完全にも感じる • 問題の切り分けや判断基準が定まりにくい

56.

OS によって異なる振る舞い • ScrollView + LazyVGrid + dropDestination • ドラッグしたアイテムをスクロールして一度フレームアウトした dropDestination にドロップができない • iOS 17.5 で発生する • iOS 18 では発生しない • Lazy をやめて Stack で組めば解消できる

57.

まとめ • iOS アプリ開発のスコープはできる限り小さくしよう • 開発期間 • 生存期間 • 機能 • スクラップ&ビルドを前提に計画しよう