본문 바로가기

IOS - Swift47

[iOS/Swift] Combine - 시작하기 (Publisher ,Operator, Subscriber) 컴바하아인 Introducing Combine - WWDC19 - Videos - Apple Developer Combine is a unified declarative framework for processing values over time. Learn how it can simplify asynchronous code like networking,... developer.apple.com 컴바인을 사용하는 이유 텍스트 필드에 입력된 값을 다음 vc에 전달하는 코드가 있다고 가정할때, 1. Delegate 패턴 Delegate 패턴은 객체 간의 커뮤니케이션을 위해 인터페이스를 정의하고, 하나의 객체가 다른 객체를 대신해서 작업을 수행하도록 합니다. WelcomeViewController.swift p.. 2024. 4. 17.
[iOS/Swift] Closure의 캡쳐리스트와 ARC + AnyObjet Closure Capture list 이 코드를 실행시키면 어떻게 될까요? “Hello, World!”가 출력됩니다 그러면 이 코드를 실행시키면 어떻게 될까요? “next”가 출력됩니다. 이런 일이 벌어지는 이유가 뭘까요? 바로 capture list때문입니다. Capture List가 뭔데요? 위 코드에서, 함수를 실행시키려면 Str 이라는 변수가 있어야 하는데 str을 (범위 바깥에서도) 지속적으로 사용하고 싶어서 잇는게 Capture 입니다. Closure의 범위 외부에 있지만 Closure의 내부에서 사용해야해 라는 뜻이에요. 즉, 외부에 존재하는 변수를 사용하기위해 사용됩니다. 실제로는 변수를 캡쳐하는일은 잘 없고 보통 객체를 캡쳐해서 사용합니다 self.사용할 객체 이런식으로 사용합니다. 캡쳐.. 2024. 4. 10.
[iOS/SwiftUI] Property Wrapper - 기본편 스유를 시작하면서 사용한 속성들을 정리해보았다. 정리를 시작하면서 든 생각은 엥 사실상 Combine 아니냐 라는 생각이 들었지만 제대로 컴바인과 Rx도 해본적이 없기에.. 일단 전체적으로 정리를 해보고 추후 깊게 하나하나 파볼 생각이다. Property Wrapper @State - 뷰의 상태를 저장하는 속성 스유에서 상태를 처리하는 방법 뷰의 상태를 저장하는 프로퍼티로 상태관리 주체는 해당 뷰 기본적으로 private 선언이기에 다른 뷰와 값을 소통하려면 Binding을 이용 값이 변경될때마다 UI 업데이트 struct ContentView: View { @State private var isPlaying: Bool = false var body: some View Button(isPlaying? ".. 2024. 3. 29.
[iOS/Swift] Missing file libarclite_iphoneos.a (Xcode 15)오류 해결 오랜만에 JMT 앱을 켜니 SDK does not contain 'libarclite' at the path '/Applications/~~~~/arc/libarclite_iphonesimulator.a'; try increasing the minimum deployment targeㅇㄹ 이라는 오류가 나오게 되었다. 2.0 버전개발중이라서 서버가 닫혀서 서버측 오류가 낫으면 이해를 하겟는데... 빌드조차 되지않는 오류가 발생한것은 굉장히 당황스러운 일이였습니다. 생각을 떠올려보니 이전에 공부하던 SwiftUI에서 오류가 나길래 Xcode15로 버전을 올렷고... 제 맥북을 Ventura에서 Sonoma로 업그레이드를 햇고....등의 일들이 생각나게 되었습니다. 이를 바탕으로한 오류인듯 하여 방법을 찾았.. 2024. 1. 11.
[iOS/SwiftUI] LunchScreen 적용하기 UIkit 에는 main 스토리보드와 더불어,항상 같이 딸려왓고 기본으로 세팅되는 LaunchScreen 이 SwiftUI에는 없었습니다. 찾아보니 스유에서는 기본적으로 런치스크린을 Info.plist 에서 관리하는것을 알았고 UIkit처럼 런치스크린을 스토리보드에서 관리하는 방법도 만들 수 있었습니다! 1. Info.plist 으로 설정하는 방법 파일의 최상단 부분에 프로젝트를 선택 후 Target > Info 으로 들어가서 Key 부분에 아래 Launch Screen을 추가해준다. 이때 Value에 적혀있는 LaunchScreenBackgroundColor 등의 이름들은 Assets에 저장한 이름대로 작성해주면 됩니다. 2. 스토리 보드 추가하기 Cmd + n 으로 LaunchScreen 추가하기 스.. 2023. 12. 31.
[iOS/Swift] 앱스토어 배포와 리젝일기 JMTeng 앱을 드디어 배포를 하게 되었습니다. 배포를 하기 위해서는 앱 아이콘, 아카이브, 앱 바이너리 파일 업로드 등의 절차를 거쳐야 하지만 이전에 Testflight를 통해서 최종 제출을 제외한 나머지를 진행했었기에 생략하겟습니다. 앱스토어에 올라갈 목업 이미지를 뽑아줍니다. ipad를 선택하지 않은 경우에는 굳이 아이패드 사이즈를 지정하지 않아도 문제없지만 정해진 규격만 지켜주시면 문제되지 않습니다. 이따금 사진을 올렷는데 x표시가 뜨면서 사진이 올라가지 않았다고 뜨는 경우가 있는데 사진을 다시 올려주면 해결됩니다 프로모션 텍스트 목업 이미지 아래에 들어갈 처음에 보이는 간단한 설명이고 자세한 설명은 (더보기) 로 작성될 설명 텍스트에 상세한 기능들에 대해서 작성하면 됩니다. 이후 저작권과 사용.. 2023. 10. 29.
[iOS/Swift] 앱스토어 게임 탭 따라하기 (Composition Layout) 구현하려는 view Compositional layout 각 필요한 Cell들을 Nib 파일로 묶어서 작성했습니다. import UIKit final class ExtraLargeAppCell: UICollectionViewCell { @IBOutlet private var captionLabel: UILabel! @IBOutlet private var titleLabel: UILabel! @IBOutlet private var subtitleLabel: UILabel! @IBOutlet private var thumbnailView: UIView! override func awakeFromNib() { super.awakeFromNib() thumbnailView.layer.cornerRadius = .. 2023. 10. 1.
[iOS/Swift] BottomSheet 구현하기 - 라이브러리 사용 We Want 네이버 지도의 Bottom Sheet 구현 UIPanGestureRecognizer를 사용하여 사용자의 터치에 따른 화면(View or ViewController)의 이동 구현 1) 사용한 라이브러리 - PanModal 구현 아이디어 - 전체 구조 TableView / View + Lable / Composition Layout 사용 각각 storyBoard로 구현후 bottomsheet로 나타나게 구현 맨 위부터 View + Label 가장 일반적인 vc TableViewController를 사용한 vc Compositional 을 이용한 vc (코드베이스 사용) 각각 해당 Button 분기처리 import UIKit import PanModal class ViewController: U.. 2023. 9. 10.
[iOS/Swift] Run Loop ( 2 / 2 ) Run Loop 작동원리 Run Loop는 루프를 수행할 때 2가지 Event Source를 수신합니다. 1. Input Source 다른 thread 나 App으로부터 온 비동기 이벤트를 전달합니다. 2. Timer 예약된 시간이나 간격마다 동기 이벤트를 전달한다. 위 그림에서 Thread에서 노란색 Run loop를 한 바퀴 도는 작업이 한 번의 실행이라고 가정한다면, 루프는 한 바퀴를 돌면서 Event들을 모아놨다가, 한꺼번에 처리하는 방식으로 작동하게 됩니다. 이 Run loop는 한 번 event source를 읽고 전달하는 과정이 끝나면 그대로 대기합니다. 즉, 내부적으로 반복 실행이 되지 않기 때문에 스레드 내에서 프로그래머가 while, for문을 통해 명시적으로 반복 실행시켜줘야 한다. .. 2023. 8. 27.