SlideShare a Scribd company logo
let swift(16)
스위프트 개발 환경의 변화
Interface Builder, Xcode, LLDB,
Instrument
OSXDEV.org허 혁
let swift(16)
Swift3?
New APIs
iOS10? iOS9? 내년에나 써볼 수 있어요.
그런데
New iOS는 New SDK로
New SDK는 New Xcode로
Xcode는 우리가 당장 쓸 수 있는 것.
Agenda
Interface Builder
Source Editing
Sanitizers
View Debugging
LLDB
Instrument
Summary
let swift(16)
Interface Builder
Interface Builder
새로운 Adaptive UI - 디바이스 타입별 렌더
링
Live preview - 디바이스 타입별
수정 하면서도 확대 축소
Swift and Xcode8
Swift and Xcode8
Swift and Xcode8
let swift(16)
Source Editing
Source Editing
Xcode Source Editor Extension
드디어 확장 환경 제공
안전해
벌써 만들어 본 사람들
알카트라즈 플러그인 개발자들은 패닉
번들 로딩 금지
잘 쓰던 나도 패닉
Source Editing
새로와진 API 문서
오프라인 API 문서
API 문서 자동생성
SF Mono Font
Code-signing, Provision
Source Editing
Source Editing
Source Editing
현재 라인 하이라이트
Color Literal
#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
Source Editing
현재 라인 하이라이트
Color Literal
#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
Image Literal
UIImage(#imageLiteral(resourceName: "Screen Shot"))
Source Editing
Image Literal
UIImage(#imageLiteral(resourceName: "Screen Shot"))
Source Editing
let swift(16)
Sanitizers
Sanitizers?
Sanitizers
런타임 시 버그 추적
Swift3 / C/C++/Objective-C
컴파일 시 버그 추적은?
Clang Static Analyzer
C/C++/Objective-C 만 지원
Sanitizers Types
AddressSanitizer - ASan
ThreadSanitizer - TSan
MemorySanitizer - MSan (LLVM)
Sanitizers Types
AddressSanitizer - ASan
ThreadSanitizer - TSan
Memory Graph Debugging
AddressSanitizer
디버깅 모드로 동작할 때 잠재적인 메모리 누수를 찾는다
메모리 어드레스 오염 이슈를 찾는다
이제 Swift도 지원
설정; Scheme의 Diagnostics항목
Enable Address Sanitizer
디버깅 모드로 동작할 때 잠재적인 메모리 누수를 찾는다
메모리 어드레스 오염 이슈를 찾는다
이제 Swift도 지원
설정; Scheme의 Diagnostics항목
Enable Address Sanitizer
AddressSanitizer
AddressSanitizer
검출 케이스
힙, 스팩, 글로벌 버퍼 오버 플로우
메모리 반환 후 사용
return 후 사용
메모리 릭
런타임 시 쓰레드에 의한 데이터 변경에 레이스 컨디션이 발생
했는지를 알아낸다.
설정; Scheme의 Diagnostics항목
Enable Thread Sanitizer
지원범위
64비트 macOS, iOS 시뮬레이터, tvOS 시뮬레이터
watchOS와 Device는 아직 미지원
ThreadSanitizer
런타임 시 쓰레드에 의한 데이터 변경에 레이스 컨디션이 발생
했는지를 알아낸다.
설정; Scheme의 Diagnostics항목
Enable Thread Sanitizer
지원범위
64비트 macOS, iOS 시뮬레이터, tvOS 시뮬레이터
watchOS와 Device는 아직 미지원
ThreadSanitizer
테스트 돌릴 때 옵션을 키기를 추천
검출 케이스
초기화 되지 않은 뮤텍스 사용
엉뚱한 쓰레드가 언락
쓰레드 릭
시그널 핸들러에 안전하지 않은 함수 호출
데이터 레이스
ThreadSanitizer
데이터 레이스
동기화 없이 여러 쓰레드가 한 주소를 접근할 때
그 중 하나는 읽기용 쓰레드
끝난다면 결국 쓰레기 값이나 메모리 오염으로
구조상 문제가 있다는 것
혹은 동기화 작업 누락
ThreadSanitizer
Memory Graph Debugging
메모리 누수나 버려진 메모리 탐침
디버깅 모드에서 pause된 경우
macOS, iOS 10, tvOS 10, watchOS 3 지원
Sanitizer가 켜져 있으면 동작 안함
Scheme의 Diagnostics 탭에서 Malloc Stack설정
All Allocation
Live Allocation Only
메모리 누수나 버려진 메모리 탐침
디버깅 모드에서 pause된 경우
macOS, iOS 10, tvOS 10, watchOS 3 지원
Sanitizer가 켜져 있으면 동작 안함
Scheme의 Diagnostics 탭에서 Malloc Stack설정
All Allocation
Live Allocation Only
Memory Graph Debugging
Memory Graph Debugging
두가지 그래프 스타일
Root Paths
참조 메모리
얼마나 많은 메모리가 잡혀 있는지
Cycles
메모리 누수
누수가 어떻게 다른 누수와 연결되는지
Swift and Xcode8
Memory Graph Debugging
.memgraph; Plist file
저장하기
File → Export Memory Graph
불러오기
Open the file
디버거 프로세스가 아니라서 트레이스, 퀵룩, po 안됨; 그
래프 말고는 아무것도 안됨
let swift(16)
View Debugging
Swift and Xcode8
Swift and Xcode8
View Debugging
빨라지고 정확해짐
클래스로 바로가기
네비게이터에서 필터링
오토레이아웃 디버깅
View Debugging
클래스로 바로가기
View Debugging
네비게이터에서 필터링
View Debugging
오토레이아웃 디버깅
View Debugging
오토레이아웃 디버깅
View Debugging
유한 상태 머신 Quick Look
GKStateMachine; GameplayKit를 써야…
코드로는 알아보기 힘듬
복잡한 동작을 그래프로 직관적으로 정의 가능
상태별 개별 동작
상태간 전환
유한 상태 머신 Quick Look
GKStateMachine; GameplayKit를 써야…
코드로는 알아보기 힘듬
복잡한 동작을 그래프로 직관적으로 정의 가능
상태별 개별 동작
상태간 전환
View Debugging
let swift(16)
LLDB
LLDB
스위프트 REPL도 LLDB
:<command> enables any LLDB command
LLDB
Xcode와 LLDB는 별도 프로세스로 분리
LLDB는 죽어도 Xcode는 적당히 살아난다
여러 버전의 디버거 지원
디버거는 자동적 선택됨
예를 들면 Swift 3는 가장 최신 디버거
Swift 2.3는 Xcode 7.3.1-era 디버거
오픈소스 Swift도 매칭된 디버거를 사용하게 된다
LLDB
parray <count> <expression>
poarray <count> <expression>
자동 import
@import UIKit
settings show target.auto-import-clang-
modules false
Debugger Customization
LLDB
Reusable Code $
expr let a = 3; print(a)
expr $addTwoNumbers(a: 2, b: 3)
let swift(16)
Instrument
Instrument
디버깅 시 정보 표시가 더 잘보여요.
시스템 트레이스
쓰레드, CPU, Point of Interest
타임 프로파일러
앱 라이프 사이클 이벤트에 따른 동작
메탈 시스템 트레이스… ?
let swift(16)
Demo
Demo
시간 관계 상 생략?
개별 연락?
샘플 프로젝트?
Summary
Interface Builder 👍
Source Editing 👍
Sanitizers 👍
LLDB 👍
Instrument 🖖
let swift(16)
Reference
LLDB Debugging Guide
Instruments User Guide
Debugging with Xcode
WhatsNewXcode

More Related Content

PPTX
Jurano강의 lec1. AndroidAnnotations 시작하기
PDF
소프트웨어 개선 그룹(Sig) 개발 원칙
PDF
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
PDF
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
PDF
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
PPTX
Spring boot DI
PDF
Custom Xcode Template (with VIPER)
PPT
WIPI.ppt
Jurano강의 lec1. AndroidAnnotations 시작하기
소프트웨어 개선 그룹(Sig) 개발 원칙
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[D2 CAMPUS] 안드로이드 오픈소스 스터디자료 - Http Request
Spring boot DI
Custom Xcode Template (with VIPER)
WIPI.ppt

What's hot (20)

PPTX
5.Spring IoC&DI(DI와 관련된 어노테이션)
PPTX
Flask! - python web framework flask 튜토리얼
PDF
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
PDF
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
PDF
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
PDF
Java 기초
PPTX
141103 최창원 파이썬 확장 프로그래밍
PDF
[1B4]안드로이드 동시성_프로그래밍
PDF
Envoy 를 이용한 코드 배포 자동화
PPTX
처음 시작하는 라라벨
PDF
스프링 부트와 로깅
PDF
백기선의 스프링 부트
PDF
Jpa more
PPTX
파이썬 스터디 9장
PDF
Ubuntu에서 Flask개발 맛보기 - 1
PDF
Virtual Development Environment Setting
PPTX
반복적인 코드 작업 자동화, Codebone으로 손쉽게
PPTX
Tech Update - The Future of .NET Framework (김명신 부장)
5.Spring IoC&DI(DI와 관련된 어노테이션)
Flask! - python web framework flask 튜토리얼
XECon2015 :: [1-1] 안정수 - XE3 구조 및 기본기
[Td 2015]windows, linux, mac 신경 안 쓴다. .net 2015와 더더 좋아지는 c# 살짝 훔쳐보기(김명신)
141 deview 2013 발표자료(박준형) v1.1(track4-session1)
Java 기초
141103 최창원 파이썬 확장 프로그래밍
[1B4]안드로이드 동시성_프로그래밍
Envoy 를 이용한 코드 배포 자동화
처음 시작하는 라라벨
스프링 부트와 로깅
백기선의 스프링 부트
Jpa more
파이썬 스터디 9장
Ubuntu에서 Flask개발 맛보기 - 1
Virtual Development Environment Setting
반복적인 코드 작업 자동화, Codebone으로 손쉽게
Tech Update - The Future of .NET Framework (김명신 부장)
Ad

Viewers also liked (9)

PDF
Letswift Swift 3.0
PDF
안드로이드 개발자를 위한 스위프트
PDF
Swift server-side-let swift2016
PDF
Swift package manager
PDF
Do swift: Swift 무작정 해보기
PDF
스위프트 성능 이해하기
PDF
Protocol Oriented Programming in Swift
PDF
Swift internals
PDF
LetSwift RxSwift 시작하기
Letswift Swift 3.0
안드로이드 개발자를 위한 스위프트
Swift server-side-let swift2016
Swift package manager
Do swift: Swift 무작정 해보기
스위프트 성능 이해하기
Protocol Oriented Programming in Swift
Swift internals
LetSwift RxSwift 시작하기
Ad

Similar to Swift and Xcode8 (20)

PPT
iOS 앱 개발 강의 자료 #1
PDF
[Apple] 애플 wwdc 2015 중요사항 공유 세미나
PDF
[Osxdev]4.swift
PPTX
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
PDF
D2 OPEN SEMINAR - Smart editor 3.0 swift 도입기 (static library에서 dynamic framew...
PDF
[D2CAMPUS] Tech meet up ; iOS 개발편
PDF
iOS 메모리관리
PPTX
iOS Symbolication
PDF
WWDC2016 스터디 공유 발표 - 공유용
PDF
20201121 코드 삼분지계
PDF
1 swift 소개
PDF
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
PDF
[SwiftStudy 2016] 1장. Swift 소개
PPTX
Swift2
PDF
03_iOS개발환경
PDF
I os 1
PPT
I phone 2 release
PDF
Rx for iOS App. RxMVVM-DataCenter!
PDF
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
PDF
iOS Modular Architecture with Tuist
iOS 앱 개발 강의 자료 #1
[Apple] 애플 wwdc 2015 중요사항 공유 세미나
[Osxdev]4.swift
[부스트캠프 웹・모바일 7기 Tech Talk]고병학_WWDC 뭘 볼까
D2 OPEN SEMINAR - Smart editor 3.0 swift 도입기 (static library에서 dynamic framew...
[D2CAMPUS] Tech meet up ; iOS 개발편
iOS 메모리관리
iOS Symbolication
WWDC2016 스터디 공유 발표 - 공유용
20201121 코드 삼분지계
1 swift 소개
Let'Swift 2023 iOS 애플리케이션 개발 생산성 고찰
- 정시 퇴근을 위해 우리는 어떻게 해야할 것인가?
[SwiftStudy 2016] 1장. Swift 소개
Swift2
03_iOS개발환경
I os 1
I phone 2 release
Rx for iOS App. RxMVVM-DataCenter!
InjectionIII의 Hot Reload를 이용하여 앱 개발을 좀 더 편하게 하기.pdf
iOS Modular Architecture with Tuist

Swift and Xcode8