WWDC 2017 & Fall

App Frameworks

Posted by Den on December 04, 2017 · 28 mins read
🔍 Updating Your App for iOS 11

  • Large navigation titles 
    (navigation title 크기 조절이 가능)
  • New search experience 
    (Scrolling 되는 순간, searchBar 나오는 게 쉬워짐. Navigation에 searchBar 붙이기 쉬워짐)
  • Layout margins 
    (default margin 개념 같은 게 생김. MinimumLayoutMarin도 생김)
  • safe area 
    (top, bottom layoutGuide 대신 safe area가 생김. Custom NavigationView 같은 거 구현할 때 좋음.)
  • scroll views 
    (frameLayout guide가 생겨서 floating button 구현할 때 좋음. scroll할 때마다, 좌표 계산해줄 필요 없고, ParentView 만들어서 따로 추가할 필요도 없음.)
  • Table View 
    (Swipe Action이 개선됨. 쉽게 구현 가능)

🔍 What’s new in Cocoa Touch

  • Productivity (iPad Drag And Drop 설명)
  • UI refinements 
    (Navigation Large title, Safe Area Insets(top, bottom layout 대신 생김))
  • API enhancements 
    - Swift 4 Codable
    - keyPath의 개선으로 KVO도 같이 바뀜 
    - Dynamic Type
    (Dynamic font에 대한 걸 작년부터 계속 강조함. CustomFont matrix를 제공해서 좀더 customize 가 가능함), Colors, Icons가 asset Catalog로 ~)

🔍 Introducing Business Chat

  • 해피톡 같은 기능을 Apple에서 지원. 이미 이런 서비스를 제공하는 업체들과 연동 가능. (해피톡에서 Apple Business Chat 을 지원하면 우리도 사용가능. 아니면 우리가 독자적으로 사용 가능.)
  • iMessage App과 연동이 가능. Apple Pay 가능. iMessage App과 연동이 되므로 많은 것이 가능
  • Demo 18분에서 보기

🔍 What’s New in Foundation

  • New API Highlights (Objc ↔ Swift 간의 성능 향상)
  • Key Paths and Key Value Observation 
    (KeyPath 쓰는 게 좀 더 명확하고 간단해 짐. Swift 스러워짐.)
  • Encoding and Decoding 👍👍👍
    - JSON key 정의할 필요도 없고 Struct으로 바로 전환 가능
    - CamelCase key로 매칭 시켜서 변환도 가능
    - DateType ISO8601 가능 (Custom 변환 가능)

🔍 What’s New in SiriKit

  • Domains and intents 
    (결제 관련 기능들이 개선, 알림 기능 개선(Remind 기능), QR code 같은 시각적인 것 지원 )
  • Customizable UI (Siri UI순서 및 size 변경 가능)
  • Additional enhancements 
    (Alternative app names. ex. 데일리, 데일리고메 등 )

🔍 Making Great SiriKit Experiences

  • Contact resolution (INPerson 등을 통해 연락처에 접근이 쉬워 짐.)
  • Security (지문, Pass code process 추가)
  • Custom vocabulary 
    (custom 단어 등록만 하면 siri가 문장 이해하기 힘들어서 더 많은 정보들을 siri에게 주기 위한 것)
  • UI testing (UI testing이 가능해짐)

🔍 Cocoa Development Tips

  • Userdefaults 사용할 때, Persistent, Temporary 구분에 따라 다른 Domain 사용. 그외 각종 Test 용 Flag
  • Asset 에 Color 등록 가능
  • 화살표 Image 같은 거, 다시 디자인 할 필요 없이 방향성 설정으로 좌우 대칭 변경 가능
  • Localization Test 할 때, Scheme에서 강제로 변경 가능.
  • Core Data [To many relationships] Tip
  • 그 외 Mac 용 개발 Tip

🔍 Building Apps with Dynamic Type

  • Custom font를 위한 matrix 제공
  • Constraint도 dynamic 하게 변경 가능하도록 기능 제공 (code)
  • Stack view를 이용한 sideBySide 기능
  • TableView에 UITableViewAutoDimension 사용
  • PDF Image를 이용한 Dynamic size (vector 비슷)
  • Test Tip: Inspector 설정하는 부분에서 Simulator font size 설정 가능

🔍 Customized Loading in WKWebView

  • Manage cookies (개발자가 Cookie를 쉽게 요리할 수 있도록 함.)
  • Filter unwanted content 
    (Block loads, Make content invisible, Make insecure loads secure (Https로만 Loading 명령), JSON에 rule을 정해서 실행 )
  • Provide custom resources (Custom scheme 으로 delegate에서 UI 처리. 특정 Scheme에서 Image view 띄우기.)

🔍 What’s New in Safari View Controller

  • Displaying web content 
    (Navigation Color 변환 가능 (App내 UI 통일성), Manipulate the DOM, Add your UI)
  • Matching your app’s style 
    (Block loads, Make content invisible, Make insecure loads secure (Https로만 Loading 명령), JSON에 rule을 정해서 실행 )
  • iOS 11 improvements 
    - SafariView Controller 안에서 Navigation UI을 통일이 가능
    - Status bar custom (SafariViewController 위에서 Push처럼 가능)
    - window.open() 지원👍
  • Tailoring Safari View Controller 
    (Done button 영역, 상황에 맞게 custom 가능. ex. LogIn 창 cancel, LogIn 완료- done)

🔍 What’s New in iMessage Apps

  • What’s New in Messages (배치가 달라짐. Depth가 사라짐. )
  • Direct Send 
    (Direct로 message 보내기가 생김.(11에서 확인 필요.), Error가 좀 더 추가)
  • Live Message Layouts 
    (Message balloon layout custom 가능. 동적으로 Size 변경 가능. 이에 따라 view life cycle 이 상세화 됨)
  • Best Practices 
    (복잡하게 만들지 마!. Image 는 최소화. summary text를 잘 이용해!)

🔍 What’s New in Core Spotlight for iOS and macOS

  • CoreSpotlight on macOS 
    (Same API as on iOS, Used by Note, Safari, CoreData, Greate for databases, shoeboxes, Not for “Documetns”, No sharing between users )
  • Drag and Drop
    (iPad에서 CoreSpotLight에서 검색한 것을 Drag & Drop으로 메모장에 바로 붙여넣음. 👍 = Seamless)
  • Quick Look Previews 
    (Core Spotlight에서 Pick & Pop 지원, Extension이 생겼음. )
  • Ranking (Machine-learning based ranker. 이걸 어떻게 이용할까?? )
  • CoreSpotlihgt Refersher 
    (우리는 App이 background로 갈 때, Indexing 하므로 필요 없을 듯)
  • Indexing and Metadata 
    (Client state를 활용. performance를 위해 indexing 작업 최소화. UI를 위해 다양한 정보 활용 )
  • Search (Query Syntax 여러 가지 지원.)

⭐️ What’s New in MapKit

  • Muted Standard Maps Type (순수 지도만 보기 기능)
  • New Map Controls 
    - UserTracking, Compass, scale이 UIView 상속으로 변경되어 custom이 쉬워
    - scale은 Leading, trailing에 따라 Left ↔ Right 읽기 방식 변환 가능
  • Marker Annotation View 
    (PinAnnotationView의 한계로 새로운 것 제공. 많은 것이 Custom 가능👍)
  • Annotation Display Priority 
    (Priority에 따라 Pin의 숨기거나 보여줄 수 있음 (0~999 까지)
  • Annotation Clustering 👍👍👍
    - MKClusterAnnotation이 생김
    - Collision bound 도 제공해서 깔끔한 UI 가능 (circle, rectangle, edgeInset)
    - Custom UI 가능)

⭐️ Advanced Animations with UIKit

  • Basics (UIViewPropertyAnimator 설명 )
  • Interactive and Interruptible Animations 
    - Drag and Drop, Safari scrolling 예제로 설명
    - 꿀 팁👍
    - Touch End 순간 부터 Animation 진행되도록 하는 Tip
  • New Property Animator Behaviors 
    - scrupsLinearly, pausesOnCompletion flag 설명
    - Spring animation 종류 설명
  • Coordinating Animations 
    - Blur 가능👍
    - Animation Curve Custom 가능
    - Morphing 가능(ex. 추천영역 Animation 좀 더 쉽게 가능해짐)
  • Tips and Tricks 
    - Radius Animation 가능👍
    - 부분 Radius도 가능
    - Rotate할 때, 360도 하면 안돌아감! 주의!

🔍 Modern User Interaction on iOS

  • The UIGestureRecognizer system (Touch Event 에 관한 구조, 원리 설명) 👍
  • System gesture interaction
    - Multitasking/Dock, Slide Over, Cover Sheet Delegate 소개(iOS 11)
    - 웬만하면 사용하지 말아라. User가 예상한 것과 다른 결과를 준다
  • Playing nice with Drag and Drop (Drag and Drop 원리 및 사용법 Tip 소개)

⭐️ Efficient Interactions with Frameworks

  • Improvements in Foundation 
    -Lazy copy, Data(count: 250) 식으로 사용. Malloc 금지
    - subscription 사용할 때 [..< index]) 처럼 사용해라. index..<index 하면 느림
  • Bridges and how they affect your app 
    (Bridge 가 어떻게 동작하는지 설명. 결국 Bridge 안 생기게 하는 게 가장 좋음. )
  • Strings, ranges, and text 
    - attributedString에서 MutableString은 copy가 일어나지 않음. string은 copy가 발생해 성능 하락. 
    - NSRange 로 사용하던 거 Rang로 교체.
    - UILabel 사용해라 custom 사용하지 말고. autoLayout등 에서 느림
    - attributed 사용할 때, 많은 값을 설정해야 빨라짐. 안그러면 OS가 다 넣어줘야 함

🔍 The Keys to a Better Text Input Experience

  • Integrate the keyboard into your layout 
    (UIKeyboardDidShow, UIKeyboardDidHide, UIKeyboardDidChangeFrame Notification을 잘 활용. 상황별 Frame 설정 방법 잘 설명)
  • Create dynamic input accessory views 
    (채팅 App에서 User Input창에 입력할 때 Dynamic하게 TextField Height 늘어나는 법 설명.)
  • Make your app multilingual 
    (textInputContextIdentifier 에 Language code만 설정하면 Keyboard 언어 자동 설정. 화면 별로 설정할 때 굿! )
  • Use traits for smarter QuickType 
    - Maps 에서 주소 검색해서 그걸 Auto fill에 이용가능👍👍👍 완전 편함
    - UITextContentTypeUsername, UITextContentTypePassword 이용한 AutoFill LogIn
    - Quote가 Font에 따라 다르게 표기
    - Dash 개수에 따라 ‘ — ’ 길이가 자동 조절
    - 중간에 삽입/삭제 할때 smart하게 동작
  • Hardware keyboard support 
    (Bluetooth Keyboard 같이 연결해서 사용할 때, 단축키를 설정할 수 있음)
  • Custom input views (Extension을 이용한 custom keyboard 설명)
  • Keyboard extension tips and best practices (Extension Demo를 통한 Tips)

🔍 Introducing Password AutoFill for Apps

  • Web에서 LogIn 상태였다면 App 실행시 Universal Link를 통해서 LogIn 정보 전달 가능 (Ex. Facebook web → Facebook App 이동하면 LogIn 정보를 이용 쉽게 LogIn)
  • TextFiled에 LogIn / Password Type을 지정해서 autoFill을 보여줄 수 있음. (지문 인식을 통해 Keychain or Local에 저장된 LogIn 목록을 불러와 쉽게 Log In 가능.)

🔍 What’s New in Accessibility

  • New assistive features 
    - 사진에 정보 추가해서 Voice Over에서 사진 설명 가능
    - Dynamic & Large Text 강조, Siri가 대신 글자 입력(음성인식)
    - Smart Invert Colors로 좀더 명확한 UI 구분
  • Auditing your app for accessibility 👍
    (Accessibility Inspector를 통한 QA 기능 지원. 2016 session 참고. 개발 할때 주의할 점 설명)
  • Accessibility API basics 
    - UIAccessibility Protocol 설명. (동작원리)
    - Accessibility 설정값 설명
    - NSAttributed, Container 새로 추가, Non-View Elements 도 accessibility 설정 가능
  • Beyond the basics (개발하면서 일반적으로 발생하는 문제 및 해결법 설명) 👍
  • Drag and Drop accessibility 
    (Start / End Point 정보를 설정해서 가능하도록 함)

⭐️ Writing Energy Efficient Apps 👍👍👍

사용자가 Battery 많이 쓰는 App은 지운다. 그래서 Batter 소모를 줄여야 한다.

  • Battery Life Concepts 
    - Fixed, Dynamic cost 부분으로 구분. Fixed를 기본적으로 소모되는 영역. Dynamic은 사용에 따라 달라짐
    - CPU, Networking, Location, Graphic이 전기 먹는 괴물들
  • Energy Efficient Coding 
    - Reload는 정말 필요할 때만
    - WailtsForConnectivity, Cache 사용해서 network request 최적화
    - Network retry 는 2~3번이 적당. Timeout 시간도 너무 길게 잡지 말아라
    - Batch transactions
    - retry 할 때 background session 활용하라
    - Background Session 에서 StartTime, WorkLoadSize 설정 가능함 (Network session 참고)
    - Navi app 같이 계속 위치 사용할 때는 start, stop 잘 쓰기
    - 일시적으로 위치 정보 얻을 때는 request 로 하기 (start /stop 자동으로 됨)
    - background에서 필요 없을 때 위치 정보 가져오지 말아라
    - 정확도가 높을 수록 전기 소모가 크다. App에 맞게 정확도 level을 설정하라
    - Location Best Practices (region/ Visit monitoring에 따른 사용 설명)
    - Draw call 줄여라. Blur 사용 줄여라
    - Push Notification에서 Completions Handler 를 이용하여 suspended 된 시간을 줄여라
  • Energy Debugging Tools and Demo (Energy Impact, Time profiler를 활용)

🔍 Introducing PDFKit on iOS

  • Portable Document Format 
    (대중화된 Format이라서 편리한 사용을 위해 PDFKit을 만듦.CoreGraphics PDF 보다 편리해짐 )
  • Framework Overview (아래 3가지로 구성)
    - View [PDFView, PDFThumbnailView]
    - Document [PDFDocument, PDFPage, PDFAnnotation]
    - Support [PDFSelection, PDFOutline, PDFAction, More]
  • Document, Page, and Annotaions Model 
    ( 각 구조 설명, Document는 Page를 가지고 Page는 Annotation 을 가짐. 각각 사용법 설명)
  • Deep-Dive: Annotations 
    (여러 가지 Annotaion 설명. Line, Rect, Circle, CheckBox, Underline, StrikeThrough, Box, etc )
  • Best Practices
    - Recommended
     Use annotations for custom or real-time drawing
     Use PDFAnnotaionUtilities for easy access to properties
     Custom draw functions (PDFPage and PDFView) must be thread-safe
     Custom PDFPage drawing should call super for original page content
     
    - Not Recommended
     Do not call PDFView’s setNeedsDisplay to update content (overhead)
     Do not mutate PDFPage from different threads
     Do not use deprecated drawing methods (only for Mac)

🔍 Natural Language Processing and your Apps

“서울에 있는 호텔” 검색을 하면 → “서울”, “호텔” 을 뽑아내서 검색 가능. 자연어에서 핵심 단어만 뽑아내는 기능. 현재, 한국어는 아직 완벽하게 지원하지 않음

  • Natural Language Processing 
    (Language identification → Tokenization → Part of speech → Lemmantization → Named entity recognition, Linguistics & Machine learning 이용)
  • NSLinguistic Tagger 
    (NSLinguisticTaggerUnit [word, sentence, paragraph, document] 새로 추가, availableTagScheme 호출할 때 사용 )
  • 문장에서 이름, 지명 등을 뽑아내는 법 설명
  • Performance
    - Part of speech Tagging [50000 tokes /sec, 80000(multi thread) tokens/sec ]
    - Named Entity Recognition [40000 tokens/sec, 65000(multi thread) tokens/sec ]
  • Language Support
    - 한국어는 Language identification, Tokennization 만 지원
    - Lemmatization, Part of speech, Named entity recognition 은 8개국만 지원 [English, French, Italian, German, Spanish, Portuguese, Russian, Turkish]
  • Debugging Hints (keyboard 설정할 때, 관련 정보도 download)

🔍 Connecting CareKit to the Cloud

  • CareKit overview (기능들 간략 설명.)
  • Bridge API (Cloud를 통해 의사(care app)와 환자간에 실시간 정보 Update)
  • Demo (Open source로 되어있고 Framework 설치하려면 수동으로 설치해야되서 사용법 설명)

🔍 Extend Your App’s Presence with Deep Linking

  • Deep linking 간략 설명
  • Universal links 간략 설명

⭐️ Building Visually Rich User Experience 👍👍👍👍👍👍👍👍👍

  • Platform overview 
    (UIKit/AppKit, Core Animation, Core Graphics/Core Image, SceneKit/SpriteKit, Metal 간략 설명)
  • Core Animation best practice
    - CABasicAnimation, CAAffineTransform, CATransform3D 원리 및 흔히 하는 실수 방지 및 슈퍼 꿀팁 제공
    - Multiple Masks 할 때 주의할 점
    - Shadows 주의할 점[Shadow path 사용]
  • Tips and tricks 
    (Shape Layers, Gradient Layers, Layer Speed 에 관한 Tip 제공)
  • Demo 필수로 확인하기

🔍 Building Great Document-based Apps in iOS11

  • UIDocumentBrowserViewController 이용한 Document Browser 설명
    (Document Browser 구현하려면 이 session 강추 👍 Demo가 잘되어 있음)
  • 각종 UI Option, Thumbnail, Spotlight, Preview Demo

🔍 File Provider Enhancements

  • File Provider 요약.
  • Enumerating files (동작 원리 설명, iCloud sync 등)
  • Modifying files (동작 원리 설명, iCloud sync 등)
  • Customizing your file provider (Custom Action을 추가할 수 있게 제공)
  • Extension은 Memory 용량이 극적으로 적기 때문에 File 처리할 때, Paging 사용하거나 Fetching 사용해야 함. 안그러면 Crash

🔍 What’s New in Core Data

  • coreSpotlightDisplayNameExpression을 통해 Spotlight에 좀 더 상세 정보를 제공
  • CoreData와 CoreSpotlight 연결을 통해 Spotlight 검색 에서 App내 파일로 바로 연결 가능
  • Indexing 관련 기능 개선
  • Persistent Store에서 Mini metaData를 제공함. 이를 통해, 모든 파일을 다 훑어보지 않고도 뭐가 변경, 수정되었는지 바로 알 수 있음. History 제공

🔍 Extend Your App’s Presence With Sharing

  • Universal Link 를 이용하여 Share 기능 구현하라

🔍 Building Apps for iPhone X

  • SearchController 는 Navigation 에 포함시켜라 (isActive = true 도 확인)
  • Storyboard 에서 Safe area 기준으로 맞춰라
    (Use Safe Area Layout Guides → SuperView를 Safe Area 기준으로 변경)
  • ContentView -> Insets To Safe Area 해제 해서 영역 변경

🔍 iOS Storage Best Practices

  • Device 정보 → App 오른쪽 버튼 → Download container → Show Package Contents → Folder 구조 볼 수 있음
    (어디에 저장되는지 확인 가능, 보안 확인 용으로도 좋은 듯)👍👍👍👍
  • iCloud Drive
    (Accessible across all devices, Cached locally, Automatically uploaded to iCloud,)
  • Documents Directory 
    (User-Visible content, Accessible in Files app, Storage Settings management.)
  • Application Support Directory 
    (Required files, Can be hierarchical, Persistent, Included in iCloud and iTunes Backups, Reported in “Documents & Data”)
  • Caches Directory 
    (Purgeable or transient content, Good for downloadable storage, Not included in backups, Reclaimed by OS if needed)
  • Temporary Directory 
    (Transient files, Remove when done, Not included in backups)
  • Storage Locations 
    (iCloud Drive, Documents, Application Support, Caches, Temporary)
  • NSURLIsExcludedFromBackupKey 
    (iCloud 사용 하지 않으면 이 값 설정 바꿔라)

🔍 Filtering Unwanted Message with Identity Lookup

  • Message Filtering 하는 기능을 Extension 으로 제공
  • Settings → Messages → Filter Unknown Senders 에서 On 해야 사용자가 사용 가능.

🔍 Build Better Apps with CloudKit Dashboard

  • New CloudKit Dashboard 
    (Cloud 개발 할때 굉장히 도움 많이 될듯. 굉장히 많은 정보를 제공함.)👍
  • New CKOperationGroup API (개발할 때 필수 참조!. 구조는 영상으로 확인!)

⭐️ Introducing Drag and Drop

  • Goals and concepts (Responsive, Secure, A great Multi-Touch experience)
  • API fundamentals (각 Step 별 Delegate 소개) 👍
  • Showing the APIs in action 👍
    (Drag and Drop Timeline 및 대응되는 Delegate 소개)
  • Next steps 
    (Explore the system, Try adding a drop target, Enable a drag source, Spring load some of your controls, Dig deeper into the Drag and Drop APIs)

🔍 Data Delivery with Drag and Drop

  • NSItemProvider Basics 
    - Provider 를 통해서 Data 교환
    - Completion Handler는 Background Thread라서 UI 처리할 때 Main Thread 에서 하기
  • Uniform Type Identifier 
    - Native file format[com.yourcompany.vector-drawing], PDF[com.adobe.pdf], PNG[public.png], JPG[public.jpeg] 등을 구별하기 위한 용도.
    - public.data, public.plain-text, public.image (❌) → public.utf8-plain-text, public.png (✅)
  • Model Classes 
    (NSItemProviderWriting, NSItemProviderReading 통해서 read/ write 함. 그런데 Model을 class로 만들어야 함. class로 한 이유는 알겠으나 struct으로는 정말 불가능했을까?)
  • Advanced Topics 
    - Data Marshaling
     (File → NSData → File copy, Folder → NSData (zipped), File Provider → File copy)
     
    - Progress and Cancellation (Progress sample code 참고)
     
    - Per-Representation Visibility 
     (Restrict visibility(same application & team, everyone), Use to hide private types)
     
    - Team Data
     (Up to 8KB, Visible to same team, Improve UI during drag)
     
    - SuggestedName Property used as file name
     (use when providing NSData)
     
    - preferredPresentationSize Use to target drop animation
     
    - File Provider
     (App extension, Allows app to be terminated, URL to file in File Provider container, Open in Place)

⭐️ Mastering Drag and Drop 👍

  • 기본적인 여러 Delegate 소개
  • Preview 원리 및 Delegate 소개
  • Drag 관련 부분만 상세 설명
  • Drop 관련 부분만 상세 설명
  • Custom Animation 설명
  • Cancel Preview 설명
  • Network 사용하는 경우 설명 (asynchronous)
  • Demo가 잘되어 있으니 필수 참조

🔍 Media and Gaming Accessibility

  • Accessibility of Media and Video 
    - 같은 사진도 다양하게 표현할 수 있기 때문에 App에 관련된 내용으로 간결하게 caption 달기. 
    - 소리를 통해서 시각정보 전달하라.
    - 영상 -> 소리 + 자막 으로 추가 정보 전달
  • Accessibility of Games (Game 개발할 때 accessibility 관련 Tip들 )
  • Demo Game 참고 (관련 내용들은 괜찮은데 Demo가 별로임.)

🔍 What’s New in CareKit and ResearchKit

  • New features (Tone Audiometry[Left, Right], Stroop, Trail Making Test, Range of Motion, Video Instruction Step, Digital Object Identifier )
  • CareKit prototyping tool 
    (의가 같은 사람들은 개발에 대한 지식이 없어서 실제로 개발시작할 때, 개발자간의 의견차이가 커짐. 따라서 쉽게 Prototype을 만들수 있도록 제공. plist 로 설정값 변경 가능)
  • Community collaboration

🔍 What’s New in HealthKit

  • New HealthKit types 
    (Workout route, Waist circumference, VO2 max, Insulin delivery)
  • workout API updates 
    - Swimming (Support for pool and open water, Automatic swimming metrics, Apps can enable water lock.)
    - HKWorkoutEvent (시간 관련 기능들, pause, resume, marker, etc) 
    - Sample code 참고
  • Sync identifiers (Cloud 동기화를 위한 Identifier, version, productType, OSVersion). Demo 참고
  • Supporting diabetes managements (당뇨병 관련 정보 API 들 추가 )

← Previous Post Next Post