| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |
- UITextView
- 클로드코드
- swiftUI
- Clean Code
- HIG
- 애니메이션
- 스위프트
- rxswift
- uitableview
- Observable
- claude code
- Human interface guide
- clean architecture
- 리팩토링
- 리펙토링
- SWIFT
- map
- UICollectionView
- RxCocoa
- Refactoring
- collectionview
- Xcode
- swift documentation
- tableView
- ios
- uiscrollview
- Protocol
- MVVM
- 클린 코드
- combine
- Today
- Total
목록iOS 응용 (SwiftUI) (77)
김종권의 iOS 앱 개발 알아가기
지난 글 복습class Counter { var n = 0 func bump() { n += 1 }}let c = Counter()Task { c.bump() }Task { c.bump() }n += 1은 읽기 → 더하기 → 쓰기 3단계 → 두 스레드가 겹치면 한쪽 작업이 사라짐 (데이터 레이스)문제는 재현이 안 됨: 99번 잘 돌다가 사용자 기기에서만 터짐. Swift 5는 이걸 막아주지 않았음Swift 6는 이런 코드를 컴파일 에러로 만들어버림핵심 아이디어 = 격리 구역(isolation domain)코드는 항상 어느 구역엔가 속함: actor 인스턴스마다 구역 하나, @MainActor 구역, 또는 아무 데도 안 속한 nonisolated같은 구역 안 = 안전 (동시 접근 없음)구역 경계..
swift6 세팅swift6는 xcode16부터 지원Xcode > targets > Build Settings > swift compiler - Language에서 swift6 선택swfit6는 옵트인 모드패키지/모듈 단위로 swift6를 적용할 수 있음아래처럼 swiftLanguageMode(.v6)으로 적용 가능모듈별 점진적 마이그레이션이 설계 의도// Package.swift.target(name: "MyLib", swiftSettings: [.swiftLanguageMode(.v6)])데이터 레이스란? 두 개 이상의 스레드가 동시에 동일한 메모리 공간에 접근할 때 발생하며, 다음 조건이 모두 충족되는 상태를 의미 동시성: 둘 이상의 스레드가 동시에 메모리에 접근동일 메모리: 최소 하나의 작업이 해..
변경된 앱 아이콘 컨셉예전에는 맥북, 아이폰, 애플워치 마다 같은 성격의 설정 앱이라도 이미지가 미세하게 달랐었음하지만 이제는 매우 심플하게 처리맥북, 아이폰: 네모난 배경애플워치: 동그란 배경이렇게 처리하게된 배경에는 `foreground layer`, `background layer`, `.icon`과 관련된 개념이 생겨나서 부터 확립Icon Composer (layer와 .icon)애플에서는 앱 아이콘을 정의할때 layer(*층)라는 것을 두어서 이것을 사용하여 앱 아이콘을 표현함층을 두어서 입체적으로 표현하려는것이 목적층(layer)들을 합쳐놓은(Composer)것을 Icon Composer라고 지칭이 개념에 의해, 이제 여러가지의 앱 아이콘 제작이 없이, 단순히 각 layer를 표현하는 이미지만..
cf) LazyVStack해서 구현 방법 포스팅 글은 이 링크의 포스팅 글 참고: https://ios-development.tistory.com/1760 StickyHeader 구현 아이디어StickyHeader를 순수 직접 구현하려면 많은 작업이 들겠지만, SwiftUI에서 List안에 Section(header:)를 이용하면, 스크롤 시 자동으로 위에 걸쳐지는 효과를 사용하면 구현하기가 매우 쉬움단, List의 속성에 .listStyle(.plain)을 해줘야 section으로 넣었던 UI들이 sticky header로 동작함구현List 선언struct ListStickyHeaderView: View { var body: some View { NavigationView { ..
탭했을 때 키보드 내리기다른 제스처도 동시에 동작하게끔 하기 위해 보통 아래처럼 simultaneousGesture를 사용하여 tapGesture 이벤트를 얻어서 isFocused = false로 처리struct ContentView: View { @State private var text: String = "" @FocusState private var isFocused: Bool var body: some View { ScrollView { VStack(spacing: 16) { TextField("텍스트를 입력하세요", text: $text) .textFieldStyle(.roundedBor..
1. 검색 관련* 파일 탐색: cmd + P* 문자열 전체 탐색: cmd + shift + F* 파일 내 검색: cmd + shift + O* 다음/이전 검색 결과로 이동: cmd + G / shift + cmd + G* 검색된 상태에서 아래로 내려가기: cmd + ↓* 현재파일에서 바꾸기: opt + cmd + F* 전체파일에서 바꾸기: shift + cmd + H* 현재파일 심볼 이름 바꾸기: F2* 해당 폴더 안에서 검색: option + shift + F 2. 포커싱/탐색* 코파일럿 챗 오픈 & 포커싱: ctrl + cmd + i* 코파일럿 챗 클로즈 / 오픈: option + cmd + B* 코파일럿 챗 agent / ask 모드 선택: cmd + .* 커밋 그래프로 포커싱: ctrl + shi..
1. VScode에 깃헙 코파일럿 세팅 방법 (github copilot)2. VScode에 깃헙 코파일럿 활용 방법 (github copilot, Ask, Agent, Edit)3. VScode에 깃헙 코파일럿 활용 방법 (github copilot, 지침, 프롬프트)깃헙 코파일럿 기능 - context단위로 물어보기만약 mongodb 폴더에 관해 궁금한 경우?폴더 오른쪽 마우스 클릭 > Add Folder to Chat 클릭그럼 채팅에 mongosh 폴더 context가 들어가고 질문하면 완료코드 editor에서 수정요청 하기단축키 cmd + I 입력 > 인라인 채팅창이 보이면 여기에 필요한 요청을 적기결과)초록색으로 AI가 응답해주고, Accept을 누르면 적용됨코드 적용하기채팅에서 AI가 알려준 ..
frame(maxWidth: .infinity)의 의미"부모가 줄 수 있는 만큼 가로폭을 가득 채워라" 란 의미frame(maxWidth: .infinity)는 최대 크기를 제한 한다는 느낌을 주는데 이 의미가 아님다른 예제)아래처럼 텍스트가 좌우 24 패딩을 갖는 뷰 구현?여기도 frame(maxWidth: .infinity)를 추가하여 구현struct Example1: View { var body: some View { VStack { Text("Hello") .frame(maxWidth: .infinity) // Rounded 처리 방법보통 외부 마진을 주고 버튼이 수평으로 쫙 펼친 아래와 같은 것을 요건이 있는 경우?구현하다보면 아..