2021 Monthly I Learned - kirseia/study GitHub Wiki
2021. 12
- SwiftUI 에서 보이는 영역 clipping 은 .clipped() 이고, 터치 영역 clipping 은 contentShape 를 사용한다.
- 이미지가 가로로길어서 .clipped() 를 사용해서 줄였으나 터치 영역이 다른 버튼을 침범해서 터치가 안되는 이슈가 있었음 (.clipped() 하고 .contentShape() 를 같이 사용해서 해결)
- SF Symbols - symbolVariant(_:) methods (from iOS15)
2021. 11
- Open Font License - OFL, SIL Open Font License
- 폰트 수정 후 판매는 금지, 상업적 이용도 가능, 저작권자 명시 필요 (라이선스 텍스트 포함 처리)
- Disable dark mode for an entire app
- SwiftUI 애니메이션 구현
- Apple Login - Firebase 연동하기
- iOS 15에 추가된 기능들, 2
- TimelineView 때문에 찾아봄. TimelineView 샘플
- Framework -> Swift Package Manager로 변환하기
- Dark mode best practices
- CoreData Performance Tips
- CoreData Database types - private / shared / public
2021. 10
2021. 9
- SwiftUI Bottom Sheet
- iOS 15 부터 지원하는 기능
- Swift Algorithm, Swift Collections - 활용
- iOS CPU Exception 대응
- 애플워치 Runtime Session 관련 정리
- Swift 에 추가된 Actor
- race condition 을 막기 위한 것, class 대신 actor 를 쓰고, 사용시 async/await 와 함께 쓰게 된다.
- iOS 15에 추가된 SwiftUI 'task' 기능
- 뷰가 나타날때 비동기 작업을 수행하는 블럭, 기존 onAppear 는 뷰 주기 때문에 까다로운 부분이 있음
- iOS 13 에서 onChange(of: perform:) 사용하기
- Nested View Alert in same View - SwiftUI
- SwiftUI - @ViewBuilder
- Group / AnyView 대신에 @ViewBuilder 를 활용하자
- SwiftUI Alert
- SwiftUI 에서 debug pring 사용하기
- 앱스토어에서 유료앱을 판매하기 - 통신판매업 신고, 사업자 등록번호 필요
- 다크모드를 이해가기 위한 디자인 가이드 1 , 2
- 개발 더 잘하기, 중급자로 가기 위한 8가지 방법
2021. 8
2021. 7
- TextKit2
- 이건 나중에 꼭 다시 읽어봐야할 듯...
- SPM 만들기 / 공유하기 / 사용하기
- SKStoreReviewController 사용
- 앱 리뷰는 사용자가 만족스러워 하는 시점을 체크해서 (앱 실행 횟수라던가, 특정 이벤트 n회 반복시 등) 리뷰 요청을 하도록 해야 함
2021. 6
- SwiftUI - .refreshable modifier 추가 (ios15)
- async / await 구문을 활용해서 refreshable 이 추가됐음
- 환경변수 - @Environment(.refresh) private var action - 도 추가됨
- CLLocationButton 공식문서, 활용
- 위치 정보 일회성 요청에 대한 새로운 버튼이 iOS15에 추가됨, 매번 위치 정보를 요청하기 좋음, 한번 거절해도 사용자가 다시 탭하면 다시 물어봐준다.
- Custom Type Codable 만들기
- CodableByTransform extension 으로 만들어서 좀 더 쉽게 처리
- SwiftUI - SearchBar 추가하기
- .searchable(...) modifier 를 통해서 쉽게 구현 가능
- 접근성 구현 - iOS15
- xcode 프리뷰에서도 접근성 미리 보기 가능해졌고, 새로운 접근성 관련 기술 / 함수가 추가됨
- 애플 건강링 3가지 데이터 접근
- AsyncImage - (ios15 이상)
- Apple Watch Complication Templates
- Firebase App Check - 앱 보안 확인
- Firebase Fastlane으로 iOS 앱 배포
2021. 5
- 아기개발자의 성장일기 - 접근성 정리
- CoreGraphics Pattern
- Apple Watch Haptic feedback
- 접근성 - 다이나믹 타입 폰트 - more
- Playground 에서 swiftUI 를 프리뷰 하는 법
- Resource SPM 2
- thread safety in swift
- iOS Search API 2
2021. 4
- WatchKit App / WatchKit App Extension 차이?
- info.plist privacy 설정 오류 - 테스트용이라고 해도 12글자 이하를 쓰면 에러남
- Resources for learning SwiftUI
- 인앱 결제 라이센스 처리(검증)
- Color & Contrast
2021. 3
2021. 2
- SwiftUI Custom Slider
- SwiftUI best practices
- Realm 을 사용한 SwiftUI 개발
- SwiftUI View Lifecycle
- Fastlane 튜토리얼(?)
- CollectionViewLayout 화면 회전시에만 invalidateLayout() 적용하기
- AVAsset 파일이 슬로우모션 영상인지 확인하기 - Ref. https://medium.com/@xcadaverx/avfoundation-cmtimemapping-c3521d4da6b1
var isSlowMotionVideo: Bool {
guard let segments = avasset.tracks(withMediaType: .video).last?.segments else {
return false
}
if segments.count <= 1 {
return false
}
return segments.contains { (segment) -> Bool in
let timeMapping = segment.timeMapping
// 0.5배속 이하의 값을 가진게 있다면
return (timeMapping.target.duration.seconds / timeMapping.source.duration.seconds) > 2.0
}
}
- Navigation in SwiftUI
- AVMutableCompositionTrack.scaleTimeRange 오류
let sourceTimeRange = CMTimeRange(start: .zero, duration: CMTime(value: 30, timeScale: 30))
let ratedCompositionDuraiton = CMTime(Value: 17, timeScale: 30)
try videoCompositionTrack.insertTimeRange(sourceTimeRange, of: videoAssetTrack, at: startTime)
videoCompositionTrack.scaleTimeRange(CMTimeRange(start: startTime, duration: sourceTimeRange.duration),
toDuration: ratedCompositionDuration)
이라고 했을 때 videoCompositionTrack.timeRange.duration != ratedCompositionDuration 이 나오는 경우가 간혹 있음.
예를 들어, videoCompositionTrack.timeRange.duration이 CMTime(value: 5666666667, timeScale: 1000000000)
이렇게 나오는 경우가 있는데, 크게 문제가 안되는것처럼 보이나, 이 다음 트랙을 insert 할 때 startTime 에 위 값을 반영해줘야 함
또는, 음악 트랙이 비디오 기준으로 넣어줘야 하는데 이 값을 넘는 경우 추가적인 보정이 필요하다
2021. 1
- SwiftUI Property Wrapper 선택법 !
- Form 에서 키보드 올라왔을때 offset 작업 - SwiftUI List 가이드
- SwiftUI Segmented Progress bar 만들기
- iOS 앱 용량 줄이기
- iOS Code signing 설명
- SwiftUI var body 내부에서 switch 사용하는 방법들
- Multicast Delegate
- 여러개의 delegate 를 등록하는데 array로 관리할 경우 각각의 object는 weak reference 처리하는 방법을 보여줌 (NSHashTable.weakObjects())
- WeakWrapper 를 활용한 방법
- iOS 보이스오버 접근성 관련 정리 1, 2, 3, Audit 기능
- iOS에서 소리에 대한 접근성 개발을 해본적이 없어서 조사해봤음. 생각보다 해줘야 할게 많다.;