Save 37% off PRO during our Black Friday Sale! »

マルチプラットフォーム(SwiftUI)ドキュメントアプリ

0fb0b8c6eecbc8e0a3981501f6a6fea6?s=47 notoroid
January 27, 2021

 マルチプラットフォーム(SwiftUI)ドキュメントアプリ

2021年1月札幌iPhoneアプリ開発懇談会オンラン勉強会でのプレゼンテーション使用。
Appleのマルチプラットフォームアプリについてマルチプラットフォームとドキュメントアプリの観点から説明。Appleのドキュメントアプリのコアのアイデアが2004年から変わりがないのが難という話。

#SwiftUI #Swift #iOS #iPhoneApp #macOS #macOSApp #iPadOS #iPadApp

0fb0b8c6eecbc8e0a3981501f6a6fea6?s=128

notoroid

January 27, 2021
Tweet

Transcript

  1. ϚϧνϓϥοτϑΥʔϜ 4XJGU6* υΩϡϝϯτΞϓϦ υΩϡϝϯτΞϓϦςϯϓϨʔτͷ೺Ѳ·Ͱ͕௕͍

  2. ࣗݾ঺հ

  3. ೳొཁ !OPUPSPJE w J04ΞϓϦ։ൃऀ w ԰߸͍Γ·͢ిࢉاը w !OPUPSPJE w !JSJNBTV

    w ࠷ۙͷಈ޲ w ϒϩά࡮৽͠·ͨ͠
  4. ॆిใࠂ͞Μ #BUUFSFDFJWFS w όοςϦʔϞχλʔ ϢʔςΟϦςΟʔ  w ࠷େ୆ ࣮ػ ϦϞʔτ୆

     w ख࣋ͪͷJ1IPOF͔Βଞʹ͍࣋ͬͯΔ J1IPOF J1BEͳͲͷػثͷόοςϦʔঢ়ଶ֬ ೝՄೳ w ࣗ୐ʹ͋ΔJ1IPOFͷόοςϦʔঢ়ଶ֬ೝՄ ೳ
  5. ॆిใࠂ͞Μ #BUUFSFDFJWFS w "QQMF8BUDIରԠ w $PNQMJDBUJPOTରԠ w ॆి׬ྃ௨஌ w ॆి׬ྃΛ఻͑ͯ͘ΕΔ௨஌Λ௥Ճ

    w ҎԼʹࢦఆ͢Δ͜ͱͰόοςϦʔΛέ Ξ͢Δ͜ͱ͕Մೳ w Կ͔ͱߴ͍J1IPOFΛ௕࣋ͪͤ͞Δͷʹ༗༻
  6. ࿩͢͜ͱ w υΩϡϝϯτΞϓϦ֓ཁ w 6OJGPSN5ZQF*EFOUJ f i FS w 4XJGU޲͚υΩϡϝϯτ༻ϑϨʔϜϫʔΫ

  7. ࿩͞ͳ͍͜ͱ w 9DPEF͕ग़ྗ͢ΔυΩϡϝϯτΞϓϦςϯϓϨʔτղઆ w /4'JMF8SBQQFS w ύοέʔδܗࣜ΁ͷΞΫηε

  8. ୊໨ w NVMUJQMBUGPSNͱ$BUBMZTU w υΩϡϝϯτΞϓϦͱ͍͏ϨτϩχϜ w NVMUJQMBUGPSNͰυΩϡϝϯτΞϓϦ w υΩϡϝϯτλΠϓͱ6OJGPSN5ZQF*EFOUJ f

    i FS w 6OJGPSN5ZQF*EFOUJ f i FSTGSBNFXPSL w NBD04ͱJ04ͷٕज़λΠϜϥΠϯ
  9. NVMUJQMBUGPSNͱ$BUBMZTU

  10. 88%$Ͱ4XJGU6*ͷϚϧνϓ ϥοτϑΥʔϜΞϓϦͷ։ൃ͕Մೳʹ

  11. ઌߦ͢Δ$BUBMZTUͱԿ͕ҧ͏

  12. $BUBMZTUͱNVMUJQMBUGPSNᶃ ൃද೥ 4%, JOGPQMJTU $BUBMZTU  6*,JU ͭ J04 NBD04ڞ༗

    NVMUJQMBUGPSN 4XJGU6*  6*,JU"QQ,JU J04 NBD04ͦΕͧΕ
  13. $BUBMZTUͱNVMUJQMBUGPSNᶄ w $BUBMZTU w J1BEΞϓϦΛNBD04্Ͱಈ͔͢͜ͱΛ໨ࢦ͢ w <ܽ఺>$BUBMZTUͰ͸NBD04্Ͱ6*,JUػೳΛݺͼग़͠Ͱͷཹҙ఺͕ଟ͍ w NVMUJQMBUGPSN 4XJGU6*

     w J04NBD04ͰιʔεͰ6*ؚΊڞ༗Ͱ͖Δίʔυ͸͋Δ͕ผΞϓϦ w <ܽ఺>֤ωΠςΟϒ6*ίʔυΛഉআͰ͖͕ͨύϥμΠϜγϑτͷӨڹେ
  14. NVMUJQMBUGPSNରԠGSBNFXPSL w ௨஌ 6TFS/PUJ f i DBUJPO  w "7'BVOEBUJPO

    w $PSF*NBHF $PSF%BUB w 4QSJUF,JU 4DFOF,JU 4JSJ,JU w /4'JMF8SBQQFS w $PNCJOFGSBNFXPSL
  15. υΩϡϝϯτΞϓϦͱ͍͏ ϨτϩχϜ

  16. ϨτϩχϜ SFUSPOZN ӳޠSFUSPOZN͋Δ͍͸࠶໋໊ͱ͸ɺ͋Δ ݴ༿ͷҙຯ͕࣌୅ͱͱ΋ʹ֦ு͞Εͨɺ͋ Δ͍͸มԽͨ͠৔߹ʹɺݹ͍ҙຯͷൣғΛ ಛఆతʹදͨ͢Ίʹޙ͔ΒߟҊ͞Εͨݴ༿ ͷ͜ͱΛࢦ͢ 8JLJQFEJB೔ຊޠ൛ΑΓ ɻ

  17. ΞϓϦέʔγϣϯͱ1$ w Apple͕ૹΓग़͖ͯͨ͠ύʔιφϧίϯϐϡʔλʔ(1977ʙ)ͷਓؾΛࢧ͑ͯ ͖ͨͷ͸ɺ๛෋ͳΞϓϦέʔγϣϯ܈ w 8JOEPXTʹ๛෋ͳΞϓϦέʔγϣϯͷ୅໊ࢺ͸ୣΘΕ͕ͨͦΕͰ΋ΫϦ ΤΠλʔ޲͚ͷΞϓϦ͸ࠓͰ΋๛෋

  18. ΞϓϦέʔγϣϯͱ1$ᶄ • iPhone஀ੜҎલͷΞϓϦέʔγϣϯ • σʔλϑΝΠϧ(υΩϡϝϯτ)Λฤू͢ΔϓϩάϥϜ͕ΞϓϦ(දܭࢉ, ϫʔυϓϩηοαʔ) • iPhone஀ੜҎޙͷΞϓϦ • ΞϓϦ͸৘ใڞ༗΍౤ߘͷπʔϧʹ(SNS,

    Message)
  19. ͔ͭͯͷΞϓϦ͸ υΩϡϝϯτΞϓϦͱ໋໊

  20. 9DPEFͰ΋ΞϓϦͱ υΩϡϝϯτΞϓϦ ͸ผѻ͍ʹ

  21. NVMUJQMBUGPSN Ͱ υΩϡϝϯτΞϓϦ

  22. NVMUJQMBUGPSNɺ υΩϡϝϯτΞϓϦʹ͍ͭͯઆ໌

  23. NBD04#JHTVSͰ͸ NVMUJQMBUGPSNͰ υΩϡϝϯτΞϓϦ͕։ൃՄೳʹ

  24. ͸ͨͯͦ͠Ε͸ྑ͍ࣄͮ͘Ί

  25. "QQMFʹͱͬͯ͸ NBD04ͷఈ্͛ૂ͍

  26. J04ΞϓϦ։ൃऀʹͱͬͯ͸ NBD04΁ΞϓϦΛల։Ͱ͖Δνϟϯε

  27. ࣮ࡍͷͱ͜Ζ

  28. iOS/macOSͰ͸ผΞϓϦͳͷͰ ιʔείʔυҎ֎ͷϦιʔε͕൥ࡶ Ϩτϩͳ։ൃϦιʔεͱͷ֨ಆʹͳΔ

  29. ͭͷJOGPQMJTU wґଘ৘ใ͕JOGPQMJTUʹूத wϝϯςφϯεੑ͸ͦͦ͜͜ѱ͍ wΞϓϦ͕ѻ͏ϑΝΠϧछผఆٛ Λ04͝ͱهड़ඞཁ

  30. υΩϡϝϯτ͕ ೥ w"QQMFͷϑΝΠϧछผఆ͕ٛ ݻͬ·ͬͨͷ͕೥Ͱυ Ωϡϝϯτߋ৽ͳ͠ w88%$ʹ4XJGU޲͚ʹϑ ϨʔϜϫʔΫ௥Ճ

  31. υΩϡϝϯτΞϓϦʹؔ͢ΔࢿྉΛ 8FC͔Β୳͚ͩ͢Ͱ೉ّ

  32. ͦ΋ͦ΋υΩϡϝϯτͷ ఆٛՕॴ͸Ͳ͜

  33. None
  34. υΩϡϝϯτछผ ϑΝΠϧछผఆٛ ϑΝΠϧछผఆٛ 63-4DIFNF NBD04ͷରԠαʔϏε

  35. υΩϡϝϯτछผ ϑΝΠϧछผఆٛ ϑΝΠϧछผఆٛ 63-4DIFNF NBD04ͷରԠαʔϏε

  36. %PDVNFOU5ZQFT 6OJGPSN5ZQF *EFOUJ f i FS 5ZQFTͰ65*Λࢦఆ 5ZQFTͰ65*Λࢦఆ

  37. υΩϡϝϯτλΠϓͱ 6OJGPSN5ZQF*EFOUJ f i FS

  38. υΩϡϝϯτλΠϓ %PDVNFOU5ZQFT w ΞϓϦ͕ରԠ͢ΔυΩϡϝϯτछผΛهड़ w υΩϡϝϯτछผ͸ෳ਺ࢦఆՄೳ w 5ZQFTʹ߹க͢ΔϑΝΠϧσʔλछผΛࢦఆ͢Δ w 65*Λࢦఆ͢ΔɺΧϯϚ۠੾ΓͰ65*Λ૊Έ߹ΘͤΔ͜ͱ͕Ͱ͖Δ

    w )BOEMFSυΩϡϝϯτʹର͢ΔΞϓϦͷཱͪճΓΛࢦఆ
  39. None
  40. 6OJGPSN5ZQF*EFOUJ f i FS w ೥ࡦఆ w %PDVNFOU5ZQFͰࢦఆ͢Δ w 04ʹϑΝΠϧσʔλछผͷ੔ཧͷͨΊʹಋೖ

    w ΞϓϦ͕Πϯετʔϧ͞ΕΔ͜ͱͰϑΝΠϧσʔλఆ͕ٛ૿Ճ w ૿Ճ͢ΔϑΝΠϧσʔλఆٛΛద੾ʹ෼ྨɺࣝผͷͨΊʹࡦఆ
  41. 6OJGPSN5ZQF*EFOUJ f i FS֓ཁ w "QQMFͷϑΝΠϧσʔλఆٛ w ֊૚ߏ଄Ͱ؅ཧ͞Ε͍ͯΔ w ̎छ

    &YQPSUFE5ZQF*EFOUJ f i FSTͱ*NQPSUFE5ZQF*EFOUJ f i FST  w &YQPSUFEʙ͸ΞϓϦಠࣗͷϑΝΠϧσʔλܗࣜΛࢦఆ w *NQPSUFE͸ΞϓϦಠࣗҎ֎ͷϑΝΠϧσʔλܗࣜΛࢦఆ
  42. 6OJGPSN5ZQF*EFOUJ f i FS֓ཁ w "QQMFͷϑΝΠϧσʔλఆٛ w ֊૚ߏ଄Ͱ؅ཧ͞Ε͍ͯΔ w ̎छ

    &YQPSUFE5ZQF*EFOUJ f i FSTͱ*NQPSUFE5ZQF*EFOUJ f i FST  w &YQPSUFEʙ͸ΞϓϦಠࣗͷϑΝΠϧσʔλܗࣜΛࢦఆ w *NQPSUFE͸ΞϓϦಠࣗҎ֎ͷϑΝΠϧσʔλܗࣜΛࢦఆ
  43. 65*ͷ֊૚ߏ଄

  44. 65*ͷ֊૚ߏ଄ ෺ཧ໘ͷ֊૚ߏ଄ ػೳ໘ͷ֊૚ߏ଄

  45. 65*ͷ֊૚ߏ଄ ෺ཧ໘ͷ֊૚ߏ଄ ػೳ໘ͷ֊૚ߏ଄

  46. 65*ͷ֊૚ߏ଄ ෺ཧ໘ͷ֊૚ߏ଄ ػೳ໘ͷ֊૚ߏ଄ QVCMJDKQFHɺQVCMJDUJ f f ͸ػೳ໘ͱ෺ཧ໘ͷ྆ํΛܧঝ

  47. ଟॏܧঝͰϑΝΠϧσʔλఆٛΛ ࣮ݱ͓ͯ͠ΓҰݟ೺Ѳͮ͠Β͍

  48. ೥͝ΖͷΦϒδΣΫτࢦ޲ ϓϩάϥϛϯάͷߟ͑Ͱ࡞ͬͨײ

  49. ࣮ࡍͷ࢖͍ํ

  50. ͳΒ͹$PU&EJUPSΛ ࢀߟʹ͠Α͏

  51. $PU&EJUPS w ΦʔϓϯιʔεͷςΩετΤσΟλʔΞϓϦ w Ҏ্ͷϑΝΠϧʹରԠ w IUUQTHJUIVCDPNDPUFEJUPS$PU&EJUPS w 65*ʹ͍ͭͯ΋&YQPSUFE *NQPSUFEͷͦΕ

    ͧΕͷఆٛ͋Γ
  52. 6OJGPSN5ZQF*EFOUJ f i FST GSBNFXPSL

  53. ͜͜·ͰυΩϡϝϯτΞϓϦΛ ࢼͯ͠Έ͍ͨΈ͍ͨͳ࿩ʹͳ͍ͬͯͳ͍

  54. ͳͥ

  55. JOGPQMJTU͸04ʹఏڙ͢Δ৘ใͱ ΞϓϦ͕࢖͏৘ใؚ͕·ΕΔ

  56. %PDVNFOU5ZQFT 65*Tͷ༻్ 04 ΞϓϦ ಛఆͷ֦ுࢠ෇͖ ϑΝΠϧΛ։͖͍ͨ w ϑΝΠϧΛλοϓͨ͠ͱ͖ʹىಈ ͢ΔΞϓϦΛಛఆ͍ͨ͠ w

    ϑΝΠϧ։͚ΔީิΛग़͍ͨ͠ w ϑΝΠϧͷΞΠίϯϓϨϏϡʔ ΞΠίϯΛද͍ࣔͨ͠ w )BOEP f f Մೳ͔  w FUD
  57. %PDVNFOU5ZQFT 65*Tͷ༻్ 04 ΞϓϦ ಛఆͷ֦ுࢠ෇͖ ϑΝΠϧΛ։͖͍ͨ w ϑΝΠϧΛλοϓͨ͠ͱ͖ʹىಈ ͢ΔΞϓϦΛಛఆ͍ͨ͠ w

    ϑΝΠϧ։͚ΔީิΛ;΍͍ͨ͠ w ϑΝΠϧͷΞΠίϯϓϨϏϡʔ ΞΠίϯΛද͍ࣔͨ͠ w FUD 04ͷڍಈ͸ஔ͍͓͍ͯͯ υΩϡϝϯτϑΝΠϧΛ։ ͖͍ͨ
  58. ໰୊Λղܾ͢ΔϑϨʔϜϫʔΫ ͕J04 NBD04Ͱ௥Ճ

  59. 6OJGPSN5ZQF*EFOUJ f i FSTGSBNFXPSL w NVMUJQMBUGPSNϑϨʔϜϫʔΫ w 4XJGUͷΈରԠ ࣮࣭NVMUJQMBUGPSNͰ͔͠࢖͍ͬͯͳ͍ 

    w υΩϡϝϯτΞϓϦͰѻ͏ϑΝΠϧσʔλఆٛΛࢦఆՄೳ w 65*΍֦ுࢠͰϑΟϧσʔλఆٛࢦఆՄೳ w Α͘࢖͏ϑΝΠϧͷϓϦηοτఆٛ͋Γ w υΩϡϝϯτͰಡΈࠐΈՄೳͳϑΝΠϧσʔλఆٛΛ65*΋͘͠͸ؔ࿈৘ใͰࢦ ఆՄೳ ֦ுࢠͳͲ
  60. υΩϡϝϯτΞϓϦͰಡΈࠐΉϑΝΠϧΛࢦఆ͢Δᶃ import SwiftUI import UniformTypeIdentifiers extension UTType { static var

    exampleText: UTType { UTType(importedAs: "com.example.plain-text") } } struct FooDocumentAppDocument: FileDocument { … // ࢲతܗࣜΛࢦఆ static var readableContentTypes: [UTType] { [.exampleText] } … }
  61. υΩϡϝϯτΞϓϦͰಡΈࠐΉϑΝΠϧΛࢦఆ͢Δᶄ import SwiftUI import UniformTypeIdentifiers struct FooDocumentAppDocument: FileDocument { …

    // ϓϨʔϯςΩετΛࢦఆ static var readableContentTypes: [UTType] { [.plainText] } … }
  62. υΩϡϝϯτΞϓϦͰಡΈࠐΉϑΝΠϧΛࢦఆ͢Δᶃ import SwiftUI import UniformTypeIdentifiers extension UTType { static var

    nekonekoDocument: UTType { UTType(importedAs: "com.nekoneko.document") } } struct FooDocumentAppDocument: FileDocument { … // ଘࡏ͠ͳ͍UTI͸ϥϯϥΠϜΤϥʔͱͳΔ static var readableContentTypes: [UTType] { [.nekonekoDocument] } … }
  63. %DVNFOU5ZQFT 65*ʹৼΓճ͞ΕΔ υΩϡϝϯτΞϓϦ։ൃ͕Ұ෦վળ ͨͩ͠NVMUJQMUGPSN 4XJGU6* ͷΈ

  64. NBD04ͱJ04ͷٕज़ λΠϜϥΠϯ

  65. ͔͜͜Β͸ࢲݟ

  66.   NBD04 J04 $PSF%BUB $PSF"OJNBUJPO $PSF*NBHF NBD04 NVMUJQMBUGPSN J04

    J1BE04 "7'PVOEBUJPO 4XJGU6* 6TFS/PUJ f i DBUJPOT 4DFOF,JU 4QSJUF,JU 4JSJ,JU 4JSJ,JU "VUJP5PPM#PY 5JHFS -FPQBSE  65*
  67.   NBD04 J04 $PSF%BUB $PSF"OJNBUJPO $PSF*NBHF NBD04 NVMUJQMBUGPSN J04

    J1BE04 "7'PVOEBUJPO 4XJGU6* 6TFS/PUJ f i DBUJPOT 4DFOF,JU 4QSJUF,JU 4JSJ,JU 4JSJ,JU "VUJP5PPM#PY 5JHFS -FPQBSE  65*
  68. υΩϡϝϯτఆٛ͸೥ͷ ݟͨ໨Ͱ࢒Γଓ͚ͨ

  69. ೥Ҏ߱"QQMF͕ NBD04΁ͷ͞ΒͳΔఈ্͛Ͱ ϑΝΠϧఆٛͷܗ΋มΘΔ͔΋

  70. ·ͱΊ w NVMUJQMBUGPSNͱDBUBMZTUʹ͍ͭͯઆ໌͠·ͨ͠ w υΩϡϝϯτΞϓϦͷ੒Γཱͪʹ͍ͭͯઆ໌͠·ͨ͠ w .VMUJQMBUGPSNͱυΩϡϝϯτΞϓϦͷ૊Έ߹Θͤ͸൥ࡶͩͬͨΓ ೥ͷυΩϡϝϯτ͔͠ͳ͍ͳͲલ్ଟ೉Ͱ͢

  71. ࢀߟ৘ใ

  72. w 6OJGPSN5ZQF*EFOUJ f i FS"QQMFެࣜ w IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO(FOFSBM$PODFQUVBM %FW1FEJB$PDPB$PSF6OJGPSN5ZQF*EFOUJ f i

    FSIUNM w .BD΍J04ͰϑΝΠϧͷछྨΛදࣝ͢ผࢠ6OJGPSN5ZQF*EFOUJ f i FSTΛ֦ுࢠ͔Βௐ΂Δ 4XJGUͰ ߦͰग़དྷΔ OJXBUBLPͷ͸ͯͳϒϩά w IUUQTOJXBUBLPIBUFOBCMPHKQFOUSZ w <J04>ࠓ͔Β͸͡ΊΔυΩϡϝϯτϕʔε"QQ2JJUB w IUUQTRJJUBDPNHBDIBMBUUFJUFNTCBDCFCE w HBDIBMBUUF%PDVNFOU#BTFE"QQ w IUUQTHJUIVCDPNHBDIBMBUUF%PDVNFOU#BTFE"QQ
  73. w 4XJGU6*ͰυΩϡϝϯτϕʔεͷ"QQΛߏங͢Δ w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w ๩͍͠ਓ޲͚ͷ#VJMEEPDVNFOUCBTFEBQQTJO4XJGU6*88%$ ʛτϏʛOPUF w IUUQTOPUFDPNUPCJOOECDC w

    6OJGPSN5ZQF*EFOUJ f i FSͷ࠶ಋೖ88%$ w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZUFDIUBMLT
  74. w $PU& f i UPS w IUUQTHJUIVCDPNDPUFEJUPS$PU&EJUPS w %PDVNFOU1BDLBHFT w

    IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO$PSF'PVOEBUJPO $PODFQUVBM$'#VOEMFT%PDVNFOU1BDLBHFT%PDVNFOU1BDLBHFTIUNM BQQMF@SFGEPDVJEJ$)48 w 6OJGPSN5ZQF*EFOUJ f i FS$PODFQUT w IUUQTEFWFMPQFSBQQMFDPNMJCSBSZBSDIJWFEPDVNFOUBUJPO'JMF.BOBHFNFOU $PODFQUVBMVOEFSTUBOEJOH@VUJTVOEFSTUBOE@VUJT@DPODVOEFSTUBOE@VUJT@DPODIUNM
  75. IUUQTJSJNBTVDPN <13>#MPHਵ࣌౤ߘத