목록전체 글 (20)
iOS 개발 노트
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bVYUQx/btsH8lIAO7e/OcwfAC7WhzUx309RvOBH51/img.png)
Async/Await에 대해서Async/Await은 비동기 프로그래밍을 위한 새로운 패러다임이다.async 키워드를 사용하여 비동기 함수를 선언하고, await 키워드를 사용하여 해당 함수의 결과가 준비될 때까지 기다리는데, 이 과정에서 현재의 실행 흐름을 차단하지 않고 다른 작업을 계속 진행할 수 있다.async 함수는 비동기적으로 실행되며, 결과를 반환하기 전에 완료될 필요가 있는 다른 비동기 작업을 await할 수 있다.비동기 함수 수행 중 문제가 발생하였을 때 error를 바로 리턴할 수 있도록 해준다 코루틴(Coroutine)Coroutine은 함수가 동작하는 도중 특정 시점에 suspend(일시정지)할 수 있고, resume(다시 재개)할 수 있게 하는 비동기 함수 매커니즘이다.await 키워..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/k8Mv4/btsH9tL8mLT/DvR4MzXpkcLivPvKjfRiGk/img.png)
#Preview다음과 같이, #Preview 코드 블록 안에서 뷰컨트롤러의 인스턴스를 생성해주면 된다.#Preview { 뷰컨트롤러 인스턴스} ⌥(option) + ⌘(command) + ⏎(enter) 키 입력으로 프리뷰 화면이 보여지는 Canvas 영역을 표시하거나 숨기거나 할 수 있음!
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/mzt81/btsHVRgnL3k/Nt5kNGeYkgFL0PEziCKsgk/img.png)
Assets를 열고 + 버튼을 선택한다. 나타나는 메뉴에서는 Color Set을 선택해 준다. 라이트 모드일 때는 흰색이고, 다크 모드 일 때는 검은색으로 설정할 예정으로,컬러셋의 이름은 WhiteToDark 정도로 설정해 둔다. 우측 인스펙터 영역에서 Appearances를 Any, Light, Dark로 설정해 준다. 라이트 모드일 때와 다크 모드일 때 표현하고 싶은 색상을 지정해 주면 끝! 다음과 같이, UIColor 클래스에서 추가가 잘 되어 있음을 확인해 볼 수 있다. 참고사항Any Appearance라는 게 있는데,이는 다크모드가 등장하기 이전인 iOS 12 이하 버전과의 호환성을 위해 사용되는 것이다. iOS 12 이하 버전에서는 Any로 맞추고, iOS 13 이상 버전 기기에 대..
열거형이란하나의 주제로 연관된 데이터 멤버들로 구성되어 있는 자료형 객체이다.문자열, 정수값 등 입력받아야 할 정보를 입력하는 대신, 선택하는 형식으로 동작됨.열거형에서 데이터들은 열거형 객체를 정의하는 시점에 함께 정의된다. -> 데이터를 함부로 삭제하거나 변경할 수 없으며, 변경하거나 삭제하려면 객체를 정의하는 구문을 직접 수정해야 함열거형 사용 시 좋은 경우원치 않는 값이 잘못 입력되는 것을 막고 싶을 때입력받을 값을 미리 특정할 수 있을 때제한된 값 중에서만 선택할 수 있도록 강제하고 싶을 때열거형으로 정의할 수 있는 데이터 집합의 예:성별: 남, 여, X-gender기기: iPhone, iPad, watch, mac, airPods색상: 빨강, 노랑, 초록국가: 한국, 일본, 중국, 미국, 호주..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bq7kTv/btsHtj5F8tl/ADkRaNe6NoG5i6OQiggBkK/img.png)
Xcode에서 Github 계정 연결을 완료한 상태를 전제 하에 진행해 본다. 먼저 git repository가 없다면 상단 메뉴바에서 [Integrate]-[New Git Repository…] 항목을 선택한다. 프로젝트를 선택하고 Create 버튼을 선택하면 git repository가 생성된다. 이제는 Github에 Remote Repository를 생성해 보자.우클릭 메뉴 중 New “프로젝트명” Remote… 항목을 선택하면 된다. 레포지토리의 이름과 공개/비공개 여부를 선택하고 Create 버튼을 선택하면 된다. Github를 확인해 보면 원격 레포지가 생성되어 있음을 확인해 볼 수 있다. 참고: Github에서 레포지 강제 삭제할 경우 Xcode의 반응원격저장소에 액세스 할 수 없다..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/M3ur0/btsHo6elpd0/FnfUbcc7zDHq21w7kG5bB1/img.png)
Xcode에서 프로젝트를 생성하고,Target Project의 General 설정을 보면 Supported Destinations 라는 항목이 있다. 여기서 만약에 해당 프로젝트가 iPhone에서 실행되는 앱을 만드는 것이 목적이거나아니면 오직 iPad에서만 실행되는 앱을 만드는 것이 목적이라면!다음과 같이,Destination에는 iPhone만 남겨놓거나 또는 iPad만 남겨놓는 것을 지향해야 한다. 근데 iPhone에서 실행되는 앱을 만드는 것이 목적이지만, 그냥 둘 다 Destination에 추가해놓으면 안되나?그렇게 할 경우,iPhone과 iPad 모두 적합한 레이아웃 형태의 앱을 만들어야 하므로 개발 시 고려 요소가 증가 됨에 주의해야 한다!그리고 갑자기 마음이 바뀌어서 둘 중 하나만 지원하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBMIoY/btsFRAulPfK/Qv2kz4GTy0W7UPacefRP0K/img.png)
1. 좌측 네비게이터 영역에서 Main.stroyboard를 선택하고 ⌫ 키입력한다. 팝업되는 창에서 ‘Move to Trash’를 선택하여 삭제해준다. 2. info.plist에서 ‘StoryboardName’ 키를 선택하고 ⌫ 키 입력하여 삭제해준다. 3. 타켓 프로젝트의 Build Settings에서 ‘UIKit Main Stroryboard File Base Name’ 키를 선택하고 ⌫ 키 입력하여 삭제해준다. 4. 마지막으로 SceneDelegate.swift 파일을 열고, willConnectTo 에 rootView를 지정해주는 코드를 넣어주면 끝!func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/buzqOT/btsCP5KCGkb/2RAzY1lFV6nlomq2jwLxJ0/img.png)
버전: Xcode Version 15.1 (15C65) CocoaPods 1.14.3 문제현상 코코아팟을 이용해 Firebase SDK를 설치한 다음에 빌드를 해보니 다음과 같이 에러가 발생했습니다. 구글링해보니 ios/Pods/Target Support Files/Pods-나의앱이름/Pods-나의앱이름-frameworks.sh 경로에 있는 frameworks.sh 파일에서 아래와 같이 기존 구문에 -f 명령어를 추가해주면 해결된다고 했지만, 저는 해결되지 않았고 여전히 동일한 에러가 발생했습니다. 기존구문 #source="$(readlink "${source}")" 변경구문 source="$(readlink -f "${source}")" 해결 타겟 빌드 설정에서 User Script Sandboxing..
Type-SafeSwift는 타입 세이프(type-safe) 언어입니다.타입 세이프란 언어가 값에 대해 타입을 명확하도록 도와주고 코드에서 같이 동작할 수 있도록 해줍니다.type-safety타입 세이프티는 만약 String을 요구하는 코드에서 실수로 Int로 전달하는 것을 막아줍니다.마찬가지로 옵셔널이 아닌 String을 요구하는 코드에 옵셔널 String을 전달하는 것을 막아줍니다.var myString: String = "가나다라"var myNumber: Int = 1234myString = myNumber //Error: 타입 불일치로 인해 대입불가!var myString: String = "가나다라"var myOptionalString: String? = "아자차카"myString = myOpt..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/BUSXB/btsuGwPIg7N/lKugVFsro54WbeOHN8UXek/img.png)
델리게이트 패턴이 아닌 클로저를 사용해서 이전 화면에 데이터를 전달해보도록 하겠습니다. 먼저 스토리보드를 이용해 다음과 같이 환경을 구성했습니다. 두번째 화면의 텍스트뷰에 입력한 문자열 데이터를, 첫번째 화면의 텍스트뷰에 전달해볼 것 입니다. firstVC와 secondVC에는 각각 텍스트뷰와 버튼이 존재함 firstVC에서 버튼을 누르면 secondVC를 모달 방식으로 띄울 것 secondVC에서 버튼을 누르면 이전화면인 firstVC으로 돌아갈 것 firstVC에서 버튼의 액션함수 안에 secondVC를 모달로 띄우기 위해 present(_:animated:) 메서드를 호출해줍니다. secondVC에서 버튼의 액션함수 안에 dismiss(animated:) 메서드를 호출하여 이전 화면으로 돌아갈 수 ..