본문 바로가기

분류 전체보기179

[iOS/RxSwift] RxSwift와 RxRealm으로 UICollectionView사용하기 Realm은 Object를 상속 받는 클래스를 타입으로 데이터 베이스에 저장된 객체들을 읽어 올 수 있습니다. private lazy var results = try! Realm().objects(Category.self) keyPath에 전달된 필드값으로 내림차순, 오름차순 정렬을 해서 전달 받을 수 있습니다. id 를 기준으로 오름차순 해주면 아래처럼 작성해 주면 됩니다. var updates = try! Realm().objects(Category.self).sorted(byKeyPath: "id", ascending: true) 이렇게 적어 주어도 되고 전역 변수로 realm 객체를 따로 빼주어도 됩니다 let realm = try! Realm() var updates = realm.objects.. 2022. 9. 19.
[iOS/Swift/Library] IQKeyboardManager FirstResponder된 UITextField와 UITextView가 화면에 보이도록 화면 위치를 자동으로 이동 시켜주는 라이브러리 AutoTool을 사용하면 키보드의 툴바로 다음 혹은 이전 UITextField나 UITextView로 이동할 수 있는 기능을 제공 함 IQkeyboardManager.shared.enable = true 를 AppDelegate나 SceneDelegate에 추가해 줌 class AppDelegate: UIResponder, UIApplicationDelegate { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchO.. 2022. 9. 16.
[iOS/XCode] 시뮬레이터에서 한글 자판 사용하기, 키보드 꺼내는 법 우선 시뮬레이터에서 키보드를 꺼내는 단축키는 Command + Shift + k 입니다 시뮬레이터에 한글 입력이 안될때가 있는데 심지어 키보드에 한글 자판도 없어서 불편할 때 설정에서 쉽게 한글 자판을 추가할 수 있습니다~ Simulator 에서 Settings로 들어가 줍니다 General 메뉴로 들어가 주세요! 상단에 Keyboard 메뉴가 보일 꺼에요! 탭해줍니다 Keyboards 로 들어가 줍니다! 첫번째 항목이에요 Add New Keyboard 를 눌러서 키보드를 추가해 줍시다 Korean를 입력해 줍니다 일부분만 입력해도 하단에 뜹니다! Standard 눌러주시고 Done 눌러 주세요 시뮬레이터 키보드에서 지구본 모양 누르시면 영어/한글 토글 됩니다 🥳 2022. 9. 14.
[Swift] MVVMC 자세히 알아보기 - 튜토리얼 4 (child coordinator 삭제하기) 2022.07.10 - [🍎 iOS/Architecture Pattern] - [Swift] MVVMC 자세히 알아보기 - 튜토리얼 1 (Coordinator와 AppCoordinator 구현하기) 2022.07.11 - [🍎 iOS/Architecture Pattern] - [Swift] MVVMC 자세히 알아보기 - 튜토리얼 2 (childCoordinator로 이동하기) 2022.07.12 - [🍎 iOS/Architecture Pattern] - [Swift] MVVMC 자세히 알아보기 - 튜토리얼 3 (버튼 눌러서 화면 전환하기) 해당 튜토리얼은 위 글과 이어집니다! 이전 포스팅에서 Coordinator와 화면 전환에 대해 다루어 보았습니다. MVVMC에서 View와 Coordinator에 대해.. 2022. 9. 5.
[iOS] Fastlane으로 앱 배포 자동화하기 - 이론과 설치 왜 Fastlane을 사용했을까? 다른 프로젝트를 진행하면서 이전에 진행한 프로젝트의 유지 보수를 맡고 있습니다. 유지 보수 중인 앱은 변경 사항이 많진 않지만 조금의 수정만으로 테스트를 위해 6개의 앱을 빌드하여 in house로 배포해야 했습니다. 그 후 QA를 거치게 되는데 이 기간 동안 변경 사항이 발생하거나 수정해야 할 부분이 있다면 다시 수정을 하고 6개의 앱을 빌드해서 배포해야 했어요. QA가 끝나면 엔터프라이즈 계정으로 다른 서버에 배포하게 됩니다. 코드 수정이나 요구 사항은 적지만 조금의 수정으로 6개의 앱의 빌드(하는 것도 오래 걸림)와 배포하는 시간이 너무 오래 걸려서 진행하고 있는 프로젝트에도 영향이 오더라구요(여러개의 앱으로 분리하지 않기 위해 회의를 수십 번 했지만 안정성의 이유.. 2022. 9. 5.
[CI/CD] 지속적 통합과 지속적 배포의 개념과 장점 Intro 이전에 굉장히 흥미로운 영상을 본 적이 있습니다. 하나의 서비스를 어떻게 기획하고 사용자에게 제공되는지에 관련된 영상이었습니다. 사용자마다 버튼 배치를 다르게 보이게 해서 어떤 위치의 버튼이 더 많은 사용자에게 눌렸는지 로그를 수집하고, 이에 따라 의사 결정을 한다는 내용이었습니다. 이때 이 버튼의 위치를 바꾸는 프로세스를 잘 구축해 놓아서 조금의 수정으로 빠르게 A안 B 안을 테스트 해 볼 수 있었다고 합니다. 이렇게 작은 일부분을 수정 하는 것뿐만 아니라 서비스를 운영하다 보면 버그를 발견하게 되고 코드를 수정하거나 새로운 기능을 추가하여 사용자에게 배포하여 서비스하는 일이 잦습니다. 코드를 작성하거나 수정하게 되면 이 코드에 대한 검증을 위해 내부적으로 코드 리뷰를 하고 QA가 이루어진 .. 2022. 9. 3.
unable to boot the simulator launchd failed to respond 해결법 상단 xCode 클릭 > Preferences 클릭 Locations 탭 클릭 > 하단 Derived Data 의 폴더 경로에서 폴더 이동하기 아이콘 클릭 폴더에서 필요없는 DerivedData 지워 주기 빌드 후 시뮬레이터 재 실행 2022. 8. 22.
[iOS/Swift] UIImagePickerController 사용하기 UIImagePickerController 객체 생성 private lazy var picker = UIImagePickerController().then { $0.delegate = self } or var picker = UIImagePickerController() override func viewDidLoad() { picker.delegate = self } 버튼 target 설정 imageButton.addTarget(self, action: #selector(presentPhotoPicker), for: .touchUpInside) @objc func presentPhotoPicker() { present(picker, animated: true) } UIImagePickerControlle.. 2022. 8. 21.
[Swift/iOS] UICollectionView layout 업데이트 collectionView.collectionViewLayout.invalidateLayout() 레이아웃 속성을 변경하고 싶을때 명시적으로 레이아웃을 업데이트 할 수 있음 2022. 8. 20.
[iOS/Swift] UITableView Header 높이 업데이트 하기 스크롤 시 UITableView Header를 고정 시킬 수가 있는데 헤더에 있는 버튼을 눌러 헤더의 높이를 변경하고 싶은 경우 ex) 헤더 버튼 누르면 검색 영역 노출 UITableViewHeaderFooterView 에 높이 업데이트 하는 코드 작성 func toggleHeight() { containerView.snp.updateConstraints { make in make.height.equalTo(searchButton.tag).priority(.high) } } header 지정하는 Delegate에서 헤더의 버튼에 addTarget 해줌 이때 연결한 함수는 updateHeader func tableView(_ tableView: UITableView, viewForHeaderInSectio.. 2022. 8. 17.
[LeetCode] 704. Binary Search 보호되어 있는 글 입니다. 2022. 8. 15.
[LeetCode] 724. Find Pivot Index pivot 인덱스란 인텍스의 모든 왼쪽 요소의 합과 오른쪽의 모든 요소의 합이 같은 지점의 인덱스 class Solution { func pivotIndex(_ nums: [Int]) -> Int { var rightSum = nums.reduce(0, +) - nums[0] var leftSum = 0 if rightSum == leftSum { return 0 } for index in 1.. 피봇 인덱스 기준 왼쪽 합, 오른 쪽 합을 구해야 하므로 전체 하에서 현재 인덱스 값을 빼줌 if rightSum == leftSum { return 0 } 첫 번째 인덱스에서 왼쪽 합, 오른 쪽 합이 같은 경우 첫 번째 인덱스가 피봇 인덱스 이므로 0을 리턴함 (인덱스 0이 피봇 인덱스) 전체 합 S에서 현재.. 2022. 8. 1.