WWDC19 iOS13 간단 정리
in Development on iOS
WWDC19에서 몇년간 개발된 것들이 한번에 쏟아졌다..(일을 하긴했구나?)
Apple의 새로운 패러다임 제시에 흥분되는 일주일이었다
자세한건 하나하나 정리 할 예정이며 큰틀에서 한번 정리 하려고 한다
Good Luck…..(Duet Display, Flutter, Objective-c, Watch 앱들(음성메모, 계산기))
iOS13
iPhone6S, iPad Air2 이상
활용성
- 30% 빨라진 FaceID
- 변경된 앱 다운로드 방식으로 50~60% 용량감소(OS가 런타임 들고 있게 함)
- 2배 더 빨라진 앱 실행속도
- 다크모드
- 변경된 볼륨조절 UI
- 저데이터 모드 (이미지 컬러->흑백)
- 개선된 핫스팟(대기모드 전환시 연결끊김 개선)
- 개선된 Wi-Fi/블루투스(알고 있는 네트워크, 공개 네트워크 추가 및 제어센터에서 선택가능)
- 앱스토어 다운로드 개선(200mb초과 다운로드시 셀룰러 환경에서 다운로드 가능하도록 옵션 추가)
- 오디오 쉐어링(한기기에 에어팟 2대 연결 가능)
- 애플 로그인(facebook, google login 서비스는 반드시 연동해야함)
- 블루투스 마우스, 트랙패드 사용가능
- 게임패드 공식지원
- 키보드 스와이프
- 사파리 다운로드 기능
- 사파리 스크롤 스크린샷
- 사파리 자동탭 닫기(설정-시간설정)
- 사진 앱의 큰 변화
- 최적화된 배터리 충전(80%이상이 되면 충전되면 유저가 폰을 사용하기 전까지 충전 정지 상태를 유지)
- 지도앱 개선
- 에어드랍 안정성 개선
- 리마인더, 메모 개선
- 파일앱(로컬 저장소에 폴더 생성, zip unzip 가능, 파일 공유폴더 생성, USB drivers and SD cards 외부 메모리 조작가능)
- 영상 편집시 회전
- SF Symbols이 폰트화
개발
- SwiftUI Framework (OS 통합 framework, iOS13, macOS10.15 이상)
- Combine (iOS13이상, react인가 link)
- Project Catalyst
- Marzipan으로 알려졌었음
- 이미 개발된 앱을 다른 애플 운영체제용으로 간단히 바꿀 수 있는 기능을 구현하는 프로젝트이고 우선 아이패드앱을 먼저 지원후에 - 아이폰앱 변환 기능을 지원할 예정
- 화면 크기 차이에 따른 해상도 최정화 문제를 덜기 위해
- 이 과정에서 40개의 Framework를 MacOS에서 쓸 수 있도록 포팅함. 이걸 해주다니 짝짝짝
- iPad와 다른 메뉴바와 툴바만 설정하면 끝~
- Swift Package Manager(내,외부 라이브러리 관리 편의성 강화)
- CrypoKit
1. 안전한 메시지 다이제스트 (해시값)을 계산하고 비교.
2. 공개키 암호화를 사용한 전자서명의 생성 및 검증, 그리고 키 교환 수행. 메모리에 저장되어 있는 키뿐만 아니라, *Secure Enclave에 의해 저장되고 관리되는 키도 사용할 수 있습니다.*
3. 메시지 인증 및 암호화와 같은 작업 수행에 사용될 수 있는 대칭키 생성. 저수준 (low-level) 인터페이스 대신 CryptoKit을 우선적으로 사용하십시오. CryptoKit을 사용하면 직접적인 메모리 포인터를 다루지 않아도 될 뿐만 아니라, 메모리 할당 해제 시 민감한 정보를 자동으로 덮어씌우는 등 당신의 앱을 더 안전하게 만들어 줍니다."
사용 가능한 인터페이스들을 살펴보면, 실제로 고수준 암호화 및 서명에 자주 쓰이는 알고리즘들은 거의 다 구현해 놓았다. SHA512/384/256 등 SHA-2 계열은 물론, HMAC와 대칭키, AES, ChaCha20-Poly1305 (ChaChaPoly), 심지어는 X25519 디피-헬먼 키 교환/ed25519 서명을 포함한 타원곡선 암호 (ECC) 알고리즘까지 있다.
- Network관련 Combine 신규, Websocket(iOS13 이상)
- 소스코드 미니맵(야심차게 발표함, 나름 굳!)
- Device Conditions(네트워크, 과열 같은 특정상황 연출가능)
iPadOS
- SideCar(듀얼모니터, Duet Display 사형선고, 무선으로 iPad의 팬슬로 이루어지는 드로잉도 맥에서 연동가능)
- 애플팬슬 움직임 예측 알고리즘 개선 응답시간 감소(아이패드 프로 3세대 + 애플펜슬 2세대 기준??)
- 홈화면 위젯
- Slide Over 화면 전환
- Split View multitasking
- 한손용 플로팅키보드
WatchOS
- 독립선언! 전용 스토어
- SwiftUI로 개발하여 화면 제약 비교적 줄어듬
MacOS
- Hello Catalina
- iPhone, iPad와의 연동성 증가
- 아이튠즈 안녕..(음악, 팟캐스트, appleTV로 나눠짐)
TvOS
- 게임패드지원
- 4K HDR
MacPRO
- 사양 개쩜!
- 개비쌈!
기타
- Scene delegate(iPad에서 UI Lifecycle을 분리해서 동작함, 노트나 사파리처럼 2개를 띄울수 있는 경우)
- iOS12에 이어 iOS13에서도 ARKit을 고도화함 애플이 강려크 하게 푸쉬하는중
- Swift Package Manager의 앱버저닝
- 1.2.4 일때
- Major Version
- Braking ChangesMinor Version
- Compatible additions Patch Version Bugfixes
SwiftUI
1. 적은 양의 코드
2. 더 나은 코드
3. 어디서든 쓸 수 있는 코드(Swift가 상위에서 공통적이 UI를 만들 수 있게 함)
핵심원칙
- Declarative(선언형 프로그래밍) : 어떻게를 중심으로 개발한 방식에서 무엇을 중심으로 개발하는 방식 ex)하위속성은 같기떄문에 레이블을 버튼으로 바꾸고 싶으면 한줄만 바꾸면된다
- Automatic : 여백이나 DarkMode같은 많은 부분을 자동으로 설정해주며 매직무브 애니매이션
- Compositional : 배우기쉽고 반복을 매우 빠르게 할 수 있음
- Consistent(일관성) : UI는 데이터의 반영, 사용하던 모델에 BindableObject이라는 프로토콜을 준수하게 하고 @State로 뷰의 상태와 UI를 연결합니다
Lab
App Review Lab
엔지니어랑 리뷰어팀이랑 만나서 즉시 문제를 확인하고 배포까지 할 수 있다.
역시 돈이면 뭔들
Building Lab
Q.Building 속도 개선방법
A.이미 우리 프로젝트에 적용중인 링크 던저줘서 실망, 그외에 코드내에 비효율적인 객체관리를 수정하라고 함..
1. Add type annotations(항상 변수 탑을 지정하여 컴파일러가 어떠한 타입인지를 미리 알 수 있도록하여 읽는 속도를 절약)
좋은예 : let array: [String] = [“a”, “b”, “c”, “d”, “e”, “f”, “g”]
나쁜예 : let array = [“a”, “b”, “c”, “d”, “e”, “f”, “g”]
2. Avoid Nil-Coalescing operator(?? 사용하지말자)
좋은예 :
if let name = string{
/* string has value */
}else{
/* string is nil*/
}
나쁜예 : let name = string ?? “”
3. Avoid Ternary Conditional Operators(삼항연산자를 사용하지 말자)
좋은예 :
var letter = “”
if isFirst{
letter = “a”
}else{
letter = “b”
}
나쁜예 : let letter = isFirst ? “a” : “b”
4. Don’t use + to concatenate a string(문자열을 합칠떄 + 를 사용하는것을 지양 ex) "https://google.com/\(path)")
좋은예 : let url = “https://google.com/\("path")/\("anotherpath")"
나쁜예 : let url = “https://google.com/” + “path/” + “anotherpath”
5. Pre-Compute(조건문의 비교값에 연산을 넣지 말기)
좋은예 : if number == 3600{}
나쁜예 : if number == 60 * 60 {}
https://medium.com/@joshgare/8-tips-to-speed-up-your-swift-build-and-compile-times-in-xcode-73081e1d84ba
In App Purchase Lab
Q.자동 구독결제일때 사용자가 구독취소를 했는지 어떻게 알수 있는지
A.역시나 취소를 한 영수증에 대해서 cancellation_date_ms 프로퍼티가 생성된다
Q.샌드박스환경에서 구독취소방법
A.많이 받는 질문인데.. 샌드박스환경에서 구독취소는 방법이 없다 개선중이다
대만 사람이었음 랩에 한국사람은 없었다..
Mapkit Lab
Q.이번에 개선된 맵은 한국은 적용대상인가? 그렇다면 언제 될까?
A.한국은 일단 아이폰출시든 소프트웨어 적용이든 선국가가 아님. 언제 적용될지 모름
Q.현재 AppleMap도 한국에서 사용하긴 불편함이있다 개선될건지 궁금하다
A.현재 AppleMap은 사용자의 신고정보를 받아 수정하고 있다 따로 개선 할 생각 없다
그래 안쓸께
SwiftUI Lab
Q.SwiftUI에서 view를 struct로 했는데 struct로 할 때 알다시피 retain release 퍼포먼스 문제가 존재하는데 이게 해결되었다면 혹시 어떤 방법으로 해결했나?
A.본질적으로 해결할 순 없지만(원리상), 외부 struct에 클래스 프로퍼티를 최소로 하는 방법으로 설계했다
Q.프로젝트의 다른 템플릿들은 SwiftUI를 사용할 수 없는데 언제 가능한가?
A.점점 가능해질 거고 도큐먼트베이스는 9월 전에 나올거다
Q.함수형으로 설계되어 있던데 기존엔 프로그래머가 outlet으로 재사용하며 메모리 효율을 신경썼는데 이젠 신경쓰지 않아도 되는건가요?
A.그렇다
Q.컬렉션 뷰는 사용 못하나?
A.제공하진 않지만 쓰길 원한다면 presenter 프로토콜을 사용해서 직접 가져다 쓸 수 있다.
UIHostingController를 얘기한듯?
Q.스토리보드의 운명은 어케되나?(추상적 질문)
A.여전히 건재할 거다(뻔한대답)
Q.사용하지 못하는 델리게이트라던지 API가 있나?
A.없다 다 가능하다.
Q.히든 프로퍼티가 있던데 이건 애니메이션할 때만 쓰는건가?
A.그렇다
Q.SwiftUI가 UIKit, AppKit에 비해 퍼포먼스가 떨어질 일도 있나요?
A.더 좋아진다. 애플이 성능최적화를 해 나가고 있다 (arc 최초 도입되었을때랑 같은 뉘앙스 개선해 나가고 있다. blablabla… )
Q.SwiftUI로 포팅 할수 있나?
A.StoryBoard사용하고 있다면 포팅 할 수 있다
참고링크
- https://www.apple.com/ios/ios-13-preview/
- https://useyourloaf.com/blog/wwdc-2019-viewing-guide/
- https://github.com/marty-suzuki/GitHubSearchWithSwiftUI?fbclid=IwAR0l_67HyXJWNqbsGtf8aMZwxPjSD2EqUr5UrdwG8cFAS1OK_m9CeDGalO8
- https://www.fivestars.blog/code/ios-dark-mode-how-to.html?fbclid=IwAR0D94YPHto3U7a0TxtZEZBoX9UQWCFou0Se__LsYy0PDBn3km0iE37U8ZI
- https://developer.apple.com/tutorials/swiftui/creating-and-combining-views
- https://www.facebook.com/photo.php?fbid=10157311310620750&set=gm.1378676048957924&type=3&theater&ifg=1