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
UIKitのAPI Diffから見る Safe Area - iOS LT #32
Search
kazuhiro4949
October 26, 2017
Technology
8
1.3k
UIKitのAPI Diffから見る Safe Area - iOS LT #32
Safe Area関連のAPIをUIKitから抽出してきたもの
kazuhiro4949
October 26, 2017
Tweet
Share
More Decks by kazuhiro4949
See All by kazuhiro4949
SwiftUIをUIKitのライフサイクルで拡張するTips
kazuhiro4949
4
2.5k
iOS15でプッシュ通知のテストが大変だった話
kazuhiro4949
0
560
Source Editor Extensionと SwiftSyntaxでコード自動生成ツール を作る
kazuhiro4949
2
3.6k
iOS 12サポート終了で使えるAPIおさらい
kazuhiro4949
2
320
Source Editor ExtensionとSwiftSyntaxでコード自動生成
kazuhiro4949
0
71
大企業の最前線でコードを書き続けるためにやってきたこと
kazuhiro4949
28
19k
10分で振り返るここ数年のWWDCの技術トレンド
kazuhiro4949
0
280
コードを書きながら同時に設計していくためのiOSアプリ開発方針
kazuhiro4949
6
2.6k
身近な技術的課題から始めるOSSプロジェクト
kazuhiro4949
0
270
Other Decks in Technology
See All in Technology
成果を出しながら成長する、アウトプット駆動のキャッチアップ術 / Output-driven catch-up techniques to grow while producing results
aiandrox
0
310
Oracle Cloudの生成AIサービスって実際どこまで使えるの? エンジニア目線で試してみた
minorun365
PRO
4
280
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
34
13k
祝!Iceberg祭開幕!re:Invent 2024データレイク関連アップデート10分総ざらい
kniino
3
260
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
190
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
220
大幅アップデートされたRagas v0.2をキャッチアップ
os1ma
2
530
UI State設計とテスト方針
rmakiyama
2
580
10個のフィルタをAXI4-Streamでつなげてみた
marsee101
0
170
レンジャーシステムズ | 会社紹介(採用ピッチ)
rssytems
0
150
NW-JAWS #14 re:Invent 2024(予選落ち含)で 発表された推しアップデートについて
nagisa53
0
260
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
Featured
See All Featured
No one is an island. Learnings from fostering a developers community.
thoeni
19
3k
A Tale of Four Properties
chriscoyier
157
23k
Optimising Largest Contentful Paint
csswizardry
33
3k
Git: the NoSQL Database
bkeepers
PRO
427
64k
Reflections from 52 weeks, 52 projects
jeffersonlam
347
20k
StorybookのUI Testing Handbookを読んだ
zakiyama
27
5.3k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
232
17k
Designing Experiences People Love
moore
138
23k
Mobile First: as difficult as doing things right
swwweet
222
9k
Transcript
6*,JUͷ"1*%J⒎͔ΒݟΔ 4BGF"SFB ,B[VIJSP)":"4)* J04-5
4BGF"SFBͱ wJ04͔Βͷػೳ w7JFXͷத͕දࣔ͞ ΕΔ͜ͱΛอূͯ͠ ͍ΔྖҬ wJ1IPOF9Ͱ)PNF *OEJDBUPS4FOTPS )PVTJOHͱίϯςϯ π͕ඃΒͳ͍Α͏ʹ ઃఆ͞ΕΔ
IUUQTEFWFMPQFSBQQMFDPNJPTIVNBOJOUFSGBDFHVJEFMJOFTPWFSWJFXJQIPOFY
ΞδΣϯμ 6*,JUͷ4BGF"SFBؔ࿈ͷมߋΛௐࠪ͢Δ ΠϕϯτΛ࣮ࡍʹ৮ͬͯΈͯɺ4BGF"SFBͷϨΠΞτ ͷӨڹΛௐࠪ͢Δ
ํ๏ 6*,JU͕࣋ͭ"1*ͷJ04ʙJ04ؒͷ%J⒎Λ͏ l4BGF"SFBl lMBZPVU.BSHJOl lJOTFUTlลΓͷΩʔϫʔυ Ͱԣஅతʹݕࡧ υΩϡϝϯτʹ4BGF"SFBʹؔ͢Δهड़͕͋Εࢼͯ͠
ΈΔ
IUUQDPEFXPSLTIPQOFUPCKDEJ⒎TELEJ⒎TJPT
4BGF"SFBؔ࿈ͷ%J⒎ 6*7JFXTBGF"SFB*OTFUT 6*7JFXTBGF"SFB-BZPVU(VJEF 6*7JFXJOTFUT-BZPVU.BSHJO'PS4BGF"SFB 6*7JFXEJSFDUJPOBM-BZPVU.BSHJOT 6*7JFXTBGF"SFB*OTFUT%JE$IBOHF 6*7JFX$POUSPMMFSBEEJUJPOBM4BGF"SFB*OTFUT 6*7JFX$POUSPMMFSWJFX4BGF"SFB*OTFUT%JE$IBOHF
6*4DSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPS 6*4DSPMM7JFXBEKVTUFE$POUFOU*OTFU 6*4DSPMM7JFXTDSPMM7JFX%JE$IBOHF"EKVTUFE$POUFOU*OTFU @ 6*5BCMF7JFXJOTFUT$POUFOU7JFXT5P4BGF"SFB 6*$PMMFDUJPO7JFX'MPX-BZPVUTFDUJPO*OTFU3FGFSFODF
4BGF"SFBؔ࿈ͷ%J⒎ 6*7JFXTBGF"SFB*OTFUT 6*7JFXTBGF"SFB-BZPVU(VJEF 6*7JFXJOTFUT-BZPVU.BSHJO'PS4BGF"SFB 6*7JFXEJSFDUJPOBM-BZPVU.BSHJOT 6*7JFXTBGF"SFB*OTFUT%JE$IBOHF 6*7JFX$POUSPMMFSBEEJUJPOBM4BGF"SFB*OTFUT 6*7JFX$POUSPMMFSWJFX4BGF"SFB*OTFUT%JE$IBOHF
6*4DSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPS 6*4DSPMM7JFXBEKVTUFE$POUFOU*OTFU 6*4DSPMM7JFXTDSPMM7JFX%JE$IBOHF"EKVTUFE$POUFOU*OTFU @ 6*5BCMF7JFXJOTFUT$POUFOU7JFXT5P4BGF"SFB 6*$PMMFDUJPO7JFX'MPX-BZPVUTFDUJPO*OTFU3FGFSFODF "1*
݁ߏ͋Δ
ͻͱͭͣͭݟ͍͖ͯ·͢
6*7JFX
TBGF"SFB*OTFUT w ࢠ7JFXΛӅͯ͠͠·͏ྖҬ /BWJHBUJPO#BS5BC#BS 4UBUVT#BS ͳͲ Λ6*&EHF*OTFUͷͱͯ֨͠ೲ w ͜ͷΛ͑J04తͳදࣔྖҬͷൣғʹࢠ7JFXΛऩΊΔ͜ͱ͕ Ͱ͖Δ
w 7JFXͷஔ͔Ε͍ͯΔॴʢ4BGF"SFBͳ͍͔Ͳ͏͔ʣʹΑͬͯ ͕มΘΔ
TBGF"SFB*OTFUT DMBTT4BGF"SFB*OTFUT7JFX$POUSPMMFS6*7JFX$POUSPMMFS\ !*#0VUMFUXFBLWBS@WJFX6*7JFX PWFSSJEFGVODWJFX%JE-PBE \ TVQFSWJFX%JE-PBE ^ PWFSSJEFGVODWJFX%JE-BZPVU4VCWJFXT
\ TVQFSWJFX%JE-BZPVU4VCWJFXT @WJFXGSBNF6*&EHF*OTFUT*OTFU3FDU WJFXCPVOET WJFXTBGF"SFB*OTFUT ^ ^
w TBGF"SFB*OTFUTΛ"VUP-BZPVUͰઃఆ͢Δ࣌ͷ-BZPVU(VJEF w 4UPSZCPBSEͰ4BGF"SFBΛѻ͏࣌͜Εʹର੍ͯ͠Λு͍ͬͯΔ TBGF"SFB-BZPVU(VJEF
TBGF"SFB-BZPVU(VJEF DMBTT4BGF"SFB-BZPVU(VJEF7JFX$POUSPMMFS6*7JFX$POUSPMMFS\ !*#0VUMFUXFBLWBS@WJFX6*7JFX PWFSSJEFGVODWJFX%JE-PBE \ TVQFSWJFX%JE-PBE @WJFXUSBOTMBUFT"VUPSFTJ[JOH.BTL*OUP$POTUSBJOUTGBMTF @WJFXUPQ"ODIPSDPOTUSBJOU
FRVBM5PWJFXTBGF"SFB-BZPVU(VJEFUPQ"ODIPS JT"DUJWFUSVF @WJFXCPUUPN"ODIPSDPOTUSBJOU FRVBM5PWJFXTBGF"SFB-BZPVU(VJEFCPUUPN"ODIPS JT"DUJWFUSVF @WJFXUSBJMJOH"ODIPSDPOTUSBJOU FRVBM5PWJFXTBGF"SFB-BZPVU(VJEFUSBJMJOH"ODIPS JT"DUJWFUSVF @WJFXMFBEJOH"ODIPSDPOTUSBJOU FRVBM5PWJFXTBGF"SFB-BZPVU(VJEFMFBEJOH"ODIPS JT"DUJWFUSVF ^
JOTFUT-BZPVU.BSHJOT'SPN4BGF"SFB w 4BGF"SFBͷൣғ֎ʹ͍Δ6*7JFXͷMBZPVU.BSHJOʹ4BGF"SFBͷ Λߟྀͤ͞ΔΑ͏ಇ͖͔͚Δ w σϑΥϧτUSVF w GBMTFʹ͢Δͱ4BGF"SFBΛߟྀͤͣʹɺࠓ·Ͱ௨Γઃఆ͞Εͨ MBZPVU.BSHJOͷ͕ΘΕΔ
JOTFUT-BZPVU.BSHJOT'SPN4BGF"SFB MBZPVU.BSHJOT 4BGF"SFB
JOTFUT-BZPVU.BSHJOT'SPN4BGF"SFB MBZPVU.BSHJOT DMBTT*OTFUT-BZPVU.BSHJO'SPN4BGF"SFB7JFX$POUSPMMFS6*7JFX$POUSPMMFS\ !*#0VUMFUXFBLWBS@WJFX6*7JFX PWFSSJEFGVODWJFX%JE-PBE \ TVQFSWJFX%JE-PBE WJFXJOTFUT-BZPVU.BSHJOT'SPN4BGF"SFBGBMTF
^ ^
͓·͚ EJSFDUJPOBM-BZPVU.BSHJOT w J04͔ΒMBZPVU.BSHJOTͰͳͬͪ͘͜Λ͏Β͍͠ w /4%JSFDUJPOBM&EHF*OTFUTͱ͍͏6*&EHF*OTFUTͬΆ͍ߏମ w MFGU SJHIUͷΘΓʹMFBEJOH
USBJMJOHͷΑ͏ʢͭ·Γݴޠґଘʣ w ઌఔͷJOTFUT-BZPVU.BSHJO'PS4BGF"SFBͷ͕USVFͰ͋Εɺ4BGF "SFBͷӨڹΛड͚Δ
TBGF"SFB*OTFUT%JE$IBOHF w 4BGF"SFBͷ͕ॻ͖Θͬ ͨΒݺΕΔ w ͦͷޙͰMBZPVU4VCWJFXT͕ ݺΕΔ TBGF"SFB*OTFUT%JE$IBOHF MBZPVU4VCWJFXT
6*7JFX$POUSPMMFS
BEEJUJPOBM4BGF"SFB*OTFUT w TBGF"SFB*OTFUTηοτͰ͖ͳ͍ͨΊɺಠࣗͰ4BGF"SFBΛఆٛ ͍ͨ͠߹͜ͷΛॻ͖͑Δ w ͜͜ೖΕ͕ͨݩʑͷTBGF"SFBʹ͞ΕΔܗͰೖΔ ্ॻ͖Ͱͳ ͍ w
σϑΥϧτ6*&EHF*OTFUT[FSP w /BWJHBUJPO#BS5BC#BSͳͲͷཁૉΛ࣋ͭίϯςφ7$ΛࣗલͰ࡞Γ ͍ͨ࣌ʹར༻
BEEJUJPOBM4BGF"SFB*OTFUT DMBTT4BGF"SFB*OTFUT7JFX$POUSPMMFS6*7JFX$POUSPMMFS\ !*#0VUMFUXFBLWBS@WJFX6*7JFX PWFSSJEFGVODWJFX%JE-PBE \ TVQFSWJFX%JE-PBE ^ PWFSSJEFGVODWJFX%JE-BZPVU4VCWJFXT
\ TVQFSWJFX%JE-BZPVU4VCWJFXT @WJFXGSBNF6*&EHF*OTFUT*OTFU3FDU WJFXCPVOET WJFXTBGF"SFB*OTFUT ^ ^
BEEJUJPOBM4BGF"SFB*OTFUT DMBTT4BGF"SFB*OTFUT7JFX$POUSPMMFS6*7JFX$POUSPMMFS\ !*#0VUMFUXFBLWBS@WJFX6*7JFX PWFSSJEFGVODWJFX%JE-PBE \ TVQFSWJFX%JE-PBE BEEJUJPOBM4BGF"SFB*OTFUT6*&EHF*OTFUT
UPQ MFGU CPUUPN SJHIU ^ PWFSSJEFGVODWJFX%JE-BZPVU4VCWJFXT \ TVQFSWJFX%JE-BZPVU4VCWJFXT @WJFXGSBNF6*&EHF*OTFUT*OTFU3FDU WJFXCPVOET WJFXTBGF"SFB*OTFUT ^ ^
WJFX4BGF"SFB*OTFUT%JE$IBOHF w WJFXͷTBGF"SFB*OTFUTͷ͕࣮ࡍ ʹೖΔλΠϛϯάͰݺΕΔ w WJFX8JMM"QQFBSͷͱ͖ʹ·ͩ TBGF"SFB*OTFUTͷೖ͍ͬͯͳ ͍༷ WJFX8JMM"QQFBS @
WJFX4BGF"SFB*OTFUT%JE$IBOHF VQEBUF7JFX$POTUSBJOUT WJFX8JMM-BZPVU4VCWJFXT
6*4DSPMM7JFX
DPOUFOU*OTFU"EKVTUNFOU#FIBWJPS w 6*7JFX$POUSPMMFSͷBVUPNBUJDBMMZ"EKVTUT4DSPMM7JFX*OTFUTʹΘΔϓϩ ύςΟ w TBGF"SFBΛߟྀͯ͠DPOUFOU*OTFUT͕ࣗಈతʹηοτ͞ΕΔ w BVUPNBUJD TDSPMMBCMF"YFT OFWFS
BMXBZTͷ̐ͭͷͷͲΕ͔ʹͳΔ w σϑΥϧτBVUPNBUJD
DPOUFOU*OTFU"EKVTUNFOU#FIBWJPS TDSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPSBMXBZT w6*4DSPMM7JFXͷதʹXJEUI͕ IFJHIU͕ͷ7JFX͕ೖ͍ͬͯΔ wDPOUFOU4J[Fதʹஔ͍͍ͯΔ7JFXͱಉ͡αΠζͱ͢Δ ͭ·ΓਨํͷΈεΫϩʔϧՄ w-BOETDBQFͰਨํҰ൪Լ·ͰεΫϩʔϧͨ࣌͠ʹϚʔδϯ͕Ͳ͏ͳΔ͔ΛݟͯΈΔ ඞ্ͣԼࠨӈͷTBGF"SFBͷϚʔδϯ͕ͭ͘
DPOUFOU*OTFU"EKVTUNFOU#FIBWJPS TDSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPSOFWFS ඞͣTBGF"SFBແࢹ͞ΕΔ w6*4DSPMM7JFXͷதʹXJEUI͕ IFJHIU͕ͷ7JFX͕ೖ͍ͬͯΔ wDPOUFOU4J[Fதʹஔ͍͍ͯΔ7JFXͱಉ͡αΠζͱ͢Δ ͭ·ΓਨํͷΈεΫϩʔϧՄ w-BOETDBQFͰਨํҰ൪Լ·ͰεΫϩʔϧͨ࣌͠ʹϚʔδϯ͕Ͳ͏ͳΔ͔ΛݟͯΈΔ
DPOUFOU*OTFU"EKVTUNFOU#FIBWJPS TDSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPSTDSPMMBCMF"YFT εΫϩʔϧՄೳͳྖҬ ͜͜Ͱਨํ ͷΈʹϚʔδϯ͕ͭ͘ w6*4DSPMM7JFXͷதʹXJEUI͕ IFJHIU͕ͷ7JFX͕ೖ͍ͬͯΔ wDPOUFOU4J[Fதʹஔ͍͍ͯΔ7JFXͱಉ͡αΠζͱ͢Δ ͭ·ΓਨํͷΈεΫϩʔϧՄ
w-BOETDBQFͰਨํҰ൪Լ·ͰεΫϩʔϧͨ࣌͠ʹϚʔδϯ͕Ͳ͏ͳΔ͔ΛݟͯΈΔ
DPOUFOU*OTFU"EKVTUNFOU#FIBWJPS TDSPMM7JFXDPOUFOU*OTFU"EKVTUNFOU#FIBWJPSBVUPNBUJD جຊతʹTDSPMMBCMF"YJTͱಉ͡ɻBVUPNBUJDBMMZ"EKVTUT4DSPMM7JFX*OTFUT͕USVFͳΒɺ εΫϩʔϧՄೳͰ͋Ζ͏ͱͳ͔Ζ͏ͱ/BWJHBUJPO$POUSPMMFSʹର͢Δ্෦Ϛʔδϯͭ͘ ޙํޓͷͨΊͷػೳ w6*4DSPMM7JFXͷதʹXJEUI͕ IFJHIU͕ͷ7JFX͕ೖ͍ͬͯΔ wDPOUFOU4J[Fதʹஔ͍͍ͯΔ7JFXͱಉ͡αΠζͱ͢Δ ͭ·ΓਨํͷΈεΫϩʔϧՄ
w-BOETDBQFͰਨํҰ൪Լ·ͰεΫϩʔϧͨ࣌͠ʹϚʔδϯ͕Ͳ͏ͳΔ͔ΛݟͯΈΔ
BEKVTUFE$POUFOU*OTFU w TBGF"SFBΛߟྀͯࣗ͠ಈͰηοτ͞ΕΔDPOUFOU*OTFUTͷ w DPOUFOU*OTFUTʹΛηοτ͢ΔͱTBGF"SFB DPOUFOU*OTFUTͷ͕ηο τ͞ΕΔ w DPOUFOU*OTFU"EKVTUNFOU#FIBWJPSʹΑͬͯɺ͜ͷ͕TBGF"SFBΛߟྀ͢ Δ͔ܾ·Δ
OFWFSͩͱTBGF"SFBߟྀ͞Εͳ͍
BEKVTUFE$POUFOU*OTFU PWFSSJEFGVODWJFX%JE"QQFBS @BOJNBUFE#PPM \ TVQFSWJFX%JE"QQFBS BOJNBUFE QSJOU TDSPMM7JFXBEKVTUFE$POUFOU*OTFU 6*&EHF*OTFUT
UPQ MFGU CPUUPN SJHIU ɹɹQSJOU TDSPMM7JFXDPOUFOU*OTFU 6*&EHF*OTFUT UPQ MFGU CPUUPN SJHIU TDSPMM7JFXDPOUFOU*OTFU6*&EHF*OTFUT UPQ MFGU CPUUPN SJHIU QSJOU TDSPMM7JFXBEKVTUFE$POUFOU*OTFU 6*&EHF*OTFUT UPQ MFGU CPUUPN SJHIU ^
TDSPMM7JFX%JE$IBOHF"EKVTUFE$POUFOU*OTFU @ w ઌఔͷBEKVTUFE$POUFOU*OTFUͷ͕ॻ͖ΘΔͱݺΕΔ
6*5BCMF7JFX
JOTFUT$POUFOU7JFXT5P4BGF"SFB w ηϧͷDPOUFOU7JFX͕TBGF"SFBΛߟྀͨ͠ྖҬʹදࣔ͞ΕΔ͔ܾΊΒΕΔ w σϑΥϧτUSVFͰDPOUFOU7JFXTBGF"SFBͷӨڹΛड͚Δ
JOTFUT$POUFOU7JFXT5P4BGF"SFB UBCMF7JFXJOTFUT$POUFOU7JFXT5P4BGF"SFBGBMTF UBCMF7JFXJOTFUT$POUFOU7JFXT5P4BGF"SFBUSVF
6*$PMMFDUJPO7JFX'MPX-BZPVU
TFDUJPO*OTFU3FGFSFODF w 6*$PMMFDUJPO7JFX'MPX-BZPVUͷTFDUJPO*OTFUTʹରͯ͠ɺTBGF"SFB -BZPVU.BSHJO $POUFOU*OTFUTͷͲΕΛߟྀͯ͠ઃఆ͢Δ͔ܾΊΒΕΔ w GSPN$POUFOU*OTFU GSPN4BGF"SFB GSPN-BZPVU.BSHJOTͷFOVNͰߏ
͞ΕΔ w σϑΥϧτGSPN$POUFOU*OTFUͰɺTFDUJPO*OTFUTDPOUFOU*OTFUTͷӨ ڹΛड͚Δ
TFDUJPO*OTFU3FGFSFODF JGMFUMBZPVUDPMMFDUJPO7JFXDPMMFDUJPO7JFX-BZPVUBT 6*$PMMFDUJPO7JFX'MPX-BZPVU\ MBZPVUTFDUJPO*OTFU3FGFSFODFʜ͜͜ͷΛม͑Δ ^ GSPN$POUFOU*OTFU GSPN-BZPVU.BSHJOT GSPN4BGF"SFB
·ͱΊ w ҙ֎ͱ4BGF"SFBབྷΈͷ"1*%J⒎ଟ͔ͬͨ w ݩʑෳࡶͩͬͨϚʔδϯབྷΈͷϨΠΞτ͕ߋʹෳࡶʹͳ͖͍ͬͯͯΔҹ w υΩϡϝϯτΛಡΜͰԿ͕ى͖Δͷ͔ΠϚΠν͔ͭΈʹ͘͘ɺ࣮ࡍʹಈ͔͠ ͯΈͳ͍ͱΘ͔Βͳ͔ͬͨ w ϓϩύςΟͷΛมߋ͢ΔͱԿ͕ى͖Δͷ͔
w ϥΠϑαΠΫϧͲͷλΠϛϯάͰಈ͍ͯɺ͕Ͳ͏มΘΔͷ͔
αϯϓϧʹͬͨΞϓϦ ͪ͜Βஔ͍͍ͯ·͢ IUUQTHJUIVCDPNLB[VIJSP4BGF"SFB4BNQMF
ࢀߟࢿྉ w 6*,JU"QQMF%FWFMPQFS w IUUQTEFWFMPQFSBQQMFDPNEPDVNFOUBUJPOVJLJU w #VJMEJOH"QQTGPSJ1IPOF9 w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZGBMM w
%FTJHOJOHGPSJ1IPOF9 w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZGBMM w 6QEBUJOH:PVS"QQGPSJ04 w IUUQTEFWFMPQFSBQQMFDPNWJEFPTQMBZXXED w 6*,JUJ04UP"1*%J⒎FSFODFT w IUUQDPEFXPSLTIPQOFUPCKDEJ⒎TELEJ⒎TJPT6*,JUIUNM