본문 바로가기

분류 전체보기178

[iOS/Swift] UICollectionView Dynamic Height with AutoConstraint UICollectionViewDelegateFlowLayout에서 sizeForItemAt에 정의 extension QuoteViewController: UICollectionViewDelegateFlowLayout { func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize { let margin = 16 + 16 let quote = viewModel?.updates[indexPath.row] return QuoteListCollectionViewCell.fittingSize(avai.. 2023. 3. 25.
[iOS/Xcode] Pod file not found 이슈 pod deintegrate pod install 이슈 생긴 이유 추정 main branch, v1.0 branch 있을때 v1.0에서만 사용하려고 추가해 놓은 팟 라이브러리가 있었고 main으로 옮기면서 pod update -> ignore 추가 안하고 다시 v1.0 팟으로 이동 -> 라이브러리 못 찾음 해결 방법 main에서 deintegrate 시키고 다시 install, v1.0에서 deintergrate 시키고 다시 install 2023. 3. 23.
[Swift] FSCalendar 커스텀 캘린더 정리 FSCalendar 커스텀 캘린더를 생성할 수 있도록 도와주는 라이브러리 GitHub - WenchaoD/FSCalendar: A fully customizable iOS calendar library, compatible with Objective-C and Swift A fully customizable iOS calendar library, compatible with Objective-C and Swift - GitHub - WenchaoD/FSCalendar: A fully customizable iOS calendar library, compatible with Objective-C and Swift github.com 알아보고 정리하는데 꽤 오래 걸렸는데 댓글 한번씩만 달아주시면 힘이 될거 .. 2023. 3. 16.
[Swift] 고차 함수 CompactMap 기존의 어레이에서 값을 변형 시켜 새로운 어레이를 반환하는 것이 -> map 여기에 nil 값을 제거한 것이 compactMap 입니다 compactMap이 이제는 너무 몸에 익어버렸지만.. 정리차원에서 실재로 어떻게 쓰일 수 있을지 정리했습니다!! 1. nil 제거하기 let test = [1, 2, nil, 4, 5, nil] let removedNilTest = test.compactMap { $0 } [1, 2, 4, 5] CompactMap은 nil을 제외시키기 때문에 옵셔널을 사용해야 하는 환경에서 효과적으로 데이터를 핸들링 할 수 있어요! 만약 nil 값이 그대로 필요하다면 map을 쓰면 됩니다~ let sameWithAbove = test.compactMap { value in return.. 2023. 3. 9.
[iOS/Swift] Dynamic Link 정리 로그인 - Google 계정 이메일 또는 휴대전화 accounts.google.com Firebase > 콘솔로 이동 > 프로젝트 선택 > 모든 제품 > Dynamic Links 시작하기 버튼 선택 사용하고자 하는 도메인 프리픽스를 입력하면 Google에서 제공하는 도메인 목록이 뜸 구글에서 제공하는 도메인을 선택하고 계속 버튼을 누름 (구글에서 제공하는 도메인은 xxx.page.link) 이미 등록된 이름은 사용 불가능 사용가능한 도메인인 경우 완료 단계로 넘어감 새 동적 링크 버튼 클릭 단축 URL을 사용하는 경우 사용할 링크를 지정함 임의로 지정되는 URL을 사용하면 됨 url 프리픽스 + ibi에 번들 아이디를 적어줌 푸시 설정 했다면 team ID가 등록되어 있음 App store id를 입력하.. 2023. 3. 8.
[iOS/Swift] Firebase Remote Notification 정리 Apple Develper Site Setting 1. APNs key 준비 Apple Developer 사이트 > 왼쪽 메뉴 > Keys 선택 Keys + 버튼을 눌러 새로운 키 등록 Apple Push Notification service 버튼을 누르고, key name을 지정 Continue 버튼이 활성화 되면 눌러 줌 정보를 확인한 뒤 Register을 눌러 키를 등록함 2. Key ID 확인 인증 키의 Key ID 확인 추후 Firebase 설정 시 필요함 3. Team ID 확인 apple developer 인증서, 식별자 및 프로파일 관리 페이지에서 오른쪽 상단에 팀 아이디가 나와 있지만 해당 사이트로도 확인 가능 로그인 - Apple idmsa.apple.com 로그인 후 스크롤 하게 되면.. 2023. 3. 8.
[iOS/Swift] Localization 코드로 다국어 처리 PROJECT > Info 탭 > Localization 섹션 > + 버튼 눌러서 언어 추가 New File > Strings File 추가 생성된 파일 확인 > 오른쪽 File 인스펙터 확인 Localize 버튼 > 언어 선택 > Localize 버튼 클릭 다시 File Inspector 확인하면 Localization 섹션 영역에 추가한 언어 목록이 표시됨 다국어 처리할 언어 선택하면 Project Navigator에서 언어 별로 Localizable 생성된 것 확인 가능 동음이의어, 화면별로 변역되어야 하는 단어가 다를 수 있으므로 키값은 고유 값으로 작성해 주는 것이 좋음 String Extension extension String { var localized: String { return NSL.. 2023. 2. 23.
[iOS/Swift] pt 단위 말고 px 단위로 계산하기 1 pixel 이미지를 형성하는 가장 작은 정사각형 픽셀 크기의 변화 레티나 디스플레이 이전에 1인치 사각형에 들어가는 픽셀 수 163개 레티나 디스플레이 출시 후 1인치 디스플레이에 326 픽셀을 저장할 수 있게 됨 (1인치 안에 들어가는 픽셀의 갯수가 많아지므로 픽셀의 상대적인 크기가 작아진 것) 이 문제를 해결하고자 1pt의 개념 도입 1pt 같은 크기의 버튼을 그리기 위해서 @1x는 1배, @2x는 2배의 픽셀 값이 필요함 1pt = scale * 1px ex 10 픽셀의 값을 얻고 싶은 경우 스케일로 나눔 let k10PX: CGFloat = (10.0 / UIScreen.main.scale) iPhone 14 Pro Max의 경우 @3x이므로 iPhone 14 Pro Max에서의 1px는 실제.. 2023. 2. 6.
[iOS/Swift] SafeArea 높이 구하기 viewController의 view view.safeAreaInsets.top view.safeAreaInsets.bottom 0.0 0.0 20.0 viewDidLoad, viewWillAppear, viewDidAppear에서 각각 view의 safeAreaInsets으로 접근한 top의 결과 viewDidAppear에서 정확한 값을 얻을 수 있음 대부분 UI를 viewDidLoad에서 준비하므로, viewDidAppear에서 필요한 상황이 아닌 경우 정확한 safeArea의 높이를 구하기 어려움 UIApplication.shared.windows.first iOS 15.0 미만 버전에서 사용가능 UIApplication.shared.windows.first?.safeAreaInsets.top UI.. 2023. 2. 5.
[iOS/Swift] UIDevice 버전, UUID, 기기 정보 가져오기 UIDevice current 인스턴스로 현재 기기의 정보를 가져 올 수 있음 이름, 기기 모델, 운영체제 이름과 버전 등의 정보를 얻을 때 사용함 물리적 방향(기기를 가로, 세로로 두는 것)과 같은 기기의 상태 값의 변화를 추적하는데 사용할 수 있음 베터리 상태에 대한 정보와 그 변화를 추적 할 수 있음 사용자가 기기를 잡고 얼굴에 가까이 가져갔는지를 확인 할 수 있는 근접 센서에 대한 정보를 제공함 import UIKit class DeviceInfo { static var sharedObject: DeviceInfo = DeviceInfo() /// Device Name (e.g. "iPhone 14 Pro") public func getDeviceName() -> String? { return U.. 2023. 2. 4.
[iOS/Swift] infoDictionary 앱 버전, 번들 아이디 가져오기 infoDictionary란 키 값으로 값에 접근 할 수 있는 딕셔너리 타입 타겟 > Info 탭에 있는 Info.plist 파일로 부터 생성되어 해당 값에 접근 할 수 있음 infoDictionary의 키값은 Info.plist의 Raw Keys 으로 설정해서 확인할 수 있음 주로 CFBundleIdentifier, NSMainNibFile, NSPrincipalClass 키 값이 사용됨 앱 버전 확인 /// App Version public func getCurrentAppVersion() -> String? { guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { return .. 2023. 2. 4.
[Xcode/Git] 터미널과 깃으로 Xcode 관리하기 git 관리에 사용하기 쉬웠던 것 순서대로 나열하면 Github Desktop > Terminal > Sourcetree 였던거 같다 하나의 컴퓨터에 개인, 회사 계정을 두고 쓰다보니 소스트리는 사용할 때마다 꼬이고 꼬여서 터미널로 미리 세팅을 해두고 사용하는 편,, 후.. 깃허브 데스크탑이 관리하기 굉장히 편리하지만 터미널을 사용해 봅시다 왜냐하면 내가 두고 두고 참고해서 보기 위해! 1. 프로젝트 생성 후 이동 Xcode 프로젝트 생성 > 터미널에서 cd 명령어로 이동 cd /Users/사용자이름/Desktop/PersonalSwiftStudy/Archive 위 명령어 입력 2. git 파일 지우기 rm -rf .git 기존에 등록된 계정에 의해 Xcode 생성 시 등록되면서 해당 디렉토리가 이미 메.. 2023. 2. 4.