iOS
-
Tuist 설치하기iOS/Tuist 2024. 6. 3. 00:52
모듈화 작업을 위해 Tuist를 설치해보았다. 그런데 Tuist를 설치하기 위해서는 mise를 먼저 설치해야 했다. mise는 Tuist 버전을 설치하고 관리 및 활성화 하는 도구라고 한다.(CocoaPod을 사용해 라이브러리를 설치, 관리하는 것과 비슷하다고 생각됨) mise 설치하기 터미널에서 아래 명령어를 입력한다. curl https://mise.run | shchmod +x ~/.local/bin/mise~/.local/bin/mise --version 그럼 아래처럼 터미널에 보이게 된다. mise를 터미널에 연결하기 그리고는 mise를 터미널에 연결하는 작업을 해야하는데,bash, zsh, fish 각자 맞게 설정한다. echo 'eval "$(~/.local/bin/mise act..
-
TCA BindingiOS/TCA 2024. 3. 5. 22:16
강의를 듣다가 새로운 것을 발견하여 기록한다. 기존에 TCA 아키텍처 기반으로 TextField의 text를 받아올 때 다음과 같이 사용했었다. 1) import SwiftUI import ComposableArchitecture struct SomethingView: View { let store: StoreOf @State var email: String = "" var body: some View { WithViewStore(self.store, observe: { $0 }) { viewStore in VStack { TextField("이메일을 입력하세요", text: $email) .padding() .onChange(of: email) { viewStore.send(.textChanged($0..
-
TCA ToastiOS/TCA 2024. 3. 4. 15:02
State, Action, Reducer를 이용하여 TCA를 어느정도 사용할 줄은 알지만Effect 처리 하는 방법에 대해 공부가 필요하다. case .nameButtonTapped: state.name = "hello Mr.L" return .none 일반적으로 View에서 Action을 호출해서 State을 변경시키고 종료시키는 것이 많긴하지만,만약 Timer나 API 호출이 필요하다면 return .none 으로 끝나서는 안된다. 오늘 예제에서는 Toast Message를 3초간 띄워주고 없애는 것을 해보려고 한다. View에 아래와 같이 Button과 Toast로 띄워줄 Text를 만들어보자Text는 isShowToast가 true일 때 보여줄 예정이다. Button("Toast 보이기") { v..
-
TCA 1.0 The BasiciOS/TCA 2024. 3. 3. 00:23
TCA(The Composable Architecture) 1.0을 정리해보자.(글을 쓰고 있는 지금 현재 TCA 버전 1.9.1이 최신 버전이라는 것은 비밀..😱) 일단 TCA는 선언형 UI인 SwiftUI와 잘 맞는 아키텍처로 알려져있고, 또 단방향 Flow라는 특징을 가지고 있다. 간략하게 설명하면 View에서 어떤 action이 들어오면 TCA Store 내부 Action에서 State를 변경 시켜주고, 그 변경된 State를 SwiftUI View에서 감지하여 화면이 업데이트 되는 방식이다. (대충 위의 그림과 같은 데이터의 방향성을 가진다. (출처: https://www.merowing.info/multi-store-tca/)) 기존 1.0 버전 이전에서는 State, Action, Reduc..
-
UITableViewCell의 UICollectionView 데이터 값 전달하기iOS/Did 2020. 5. 26. 22:30
이렇게 하는게 맞는지 모르겠다.. 일단 하나의 UITableViewCell에 UICollectionView가 들어있고, 그 UICollectionView의 Cell을 클릭했을 때 다음 화면으로 이동과 동시에 값을 전달해야했다. 여기서 내가 몰랐던 것은 어디서 delegate를 어디에 선언해야하는 것인가..... delegate를 잘 모른 것도 나의 헤멤에 큰 보탬이 되었다. 결론적으로 다음과 같이 cell에 collectionView를 담을 때 넣으면 된다. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { guard let cell = testTableView.dequeueReus..
-
Error) Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle:iOS/Did 2020. 3. 30. 11:44
팝업뷰를 xib로 만들고는 버튼에 연결해서 띄우려고 하니 다음과 같은 에러 메시지가 떴다. 나같은 경우는 만들어둔 xib에서 Target Membership에 사용하는 라이브러리 체크가 안되어 있어서였다. 해당 스토리보드 xib > 파일 인스펙터(file inspector) > Target Membership > 사용하는 라이브러리 체크 를 하면 해결되었다.
-
Error) Unexpected duplicate tasksiOS/Did 2020. 3. 30. 11:01
A 프로젝트 Storyboard에서 만들었던 View를 B프로젝트에서도 사용하려고 Ctrl+C Ctrl+V해서 빌드를 하면 위의 에러가 떴다. 이것저것 찾아보다가 Pods > Bulid Phases > Targets: 라이브러리 이름 선택 (위에 에러메시지에서 뜬 Target "라이브러리 이름") > Copy Bundle Resources > Main.storyboard가 있는지 확인 있다면 - 버튼을 눌러서 삭제하고 Clean 한 후에 다시 빌드하면 정상 작동하게 됨. 스토리보드 View를 복붙하게 되면 자동으로 Copy Bundle Resources에 추가되서 이중으로 인식되어 생기는 에러인 것 같다.
-
round corner 한쪽 모서리만 설정하기iOS/Did 2020. 3. 17. 14:05
UIView에서 한쪽 모서리만 round하도록 만들어야 하는데.. myView.layer.cornerRadius = 5 이렇게 하면 다음과 같이 네 모서리가 다 둥글게 나옴..ㅠㅠ 위쪽 상단만 둥글게 하고싶다면 다음 코드와 같이 UIView를 설정해두면 된다. class RoundView: UIView { @IBInspectable var cornerRadius: CGFloat { set(newValue) { self.layer.cornerRadius = newValue self.layer.masksToBounds = true self.layer.maskedCorners = [.layerMaxXMinYCorner] } get { return self.layer.cornerRadius } } } 다른 모서..