🔍 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 들 추가 )