Swift는 어떻게 빌드되고, Objective-C와 어떻게 같이 쓰이는가?

Swift가 메인이 된 이후에 iOS 개발을 시작한 사람으로서, 항상 Objective-C와 Swift가 함께 쓰이는 게 당연하게 느껴지기도 하면서, 어떻게 서로 다른 언어를 고통 없이(신경 써야 할 부분은 있겠지만요.) 섞어서 쓸 수 있는지 궁금했습니다. 이번 문서에서는 대략적으로 어떻게 두 언어가 잘 섞여서 쓰일 수 있는지 다뤄보려고 합니다. Xcode에서 프로젝트가 어떻게 빌드 되는가? 더보기…

AVPlayer 알아보기

iOS 상에서 웹 브라우저라면 HTML에 따라 비디오 플레이어를 표시할 수 있습니다. 만약, 앱에서 비디오를 표시하려면 비디오를 표시하기 위한 라이브러리를 이용해야합니다. 여러분의 앱 요구사항에 따라 간단하게 운영체제의 디자인을 따라가는 AVKit을 이용할 수도 있을 것이고, AVFoundation을 이용하여 커스터마이징된 플레이어를 구현할 수도 있습니다. AVKit과 AVFoundation 중 어떤 것을 이용해서 구현해야 할까? iOS에서 앱에서 더보기…

Project로 나눈 Framework에 대해 SwiftUI Preview가 생성 안 됨.

상황. Framework로 나눈 것들에 대해서 Preview 생성이 제대로 되지 않음. (Xcode13 RC) 위와 같은 에러를 얻는다. 원인은 SwiftUI Preview에서 요청하는 Library의 주소와 실제 라이브러리가 생성된 주소가 다르기 때문이다. (@rpath/BitByteData.framework/BitByteData와 같은 식으로 요청하나, 실제로는 @rpath/BitByteData/BitByteData.framework/BitByteData가 생성물의 주소이다.) 실제 구조는 위와 같다. CocoaPod install 시에 각 프레임워크에 Search Path는 의도된 대로 잘 더보기…

SwiftUI View에 ViewModel 여러 개 가지기

일반적인 경우로 생각할 수 있는지는 모르겠지만, 코딩을 하다보니, 뷰 하나에 기능에 따라 ViewModel을 분기시켜서 연동되게 하고 싶은 경우가 생겼습니다. 보통 스위프트에서 이러한 문제를 풀기 위해서는 Protocol을 참조하게 하거나, Subclassing으로 해결할 수 있을 것 같습니다. 상황에 따라 다르겠지만, Subclassing의 경우에는 기본 구현을 통해 변화를 주기는 편리하지만, Overriding으로 코드가 수정되고, 기능이 추가될 더보기…

Combine 살펴보기: Operator

Operator Methods that create downstream publishers or subscribers to act on the elements they receive. 이벤트를 받는 시점에 값에 작용을 하는 하위 퍼블리셔 또는 서브스크라이버를 만드는 메소드 오퍼레이터는 특정한 타입은 아니지만, Combine을 구성하는 주요한 3대 요소이다. Combine에서는 퍼블리셔에서 메소드 형태로 사용되는 하위 퍼블리셔나 서브스크라이버로 정의하고 있다. RX에서는 메소드 형태라고 정의한 더보기…

Combine 살펴보기: Subscriber

Subscriber A protocol that declares a type that can receive input from a publisher. 퍼블리셔로부터 입력을 받을 수 있는 타입을 정의하는 프로토콜. Apple Documentation Subscriber는 Publisher를 구독하는 타입이다. RX에서는 동일한 역할을 하는 객체를 Observer라고 부르며, 경우에 따라 Watcher, 또는 Reactor라고도 부르는 것 같다. Publisher로 부터 입력을 받기 때문에 Input과 Failure를 더보기…

Combine 살펴보기: Publisher

Publisher Declares that a type can transmit a sequence of values over time. 시간이 지남에 따라 값 시퀀스를 보낼 수 있는 타입을 정의함. Apple Documentation Combine의 퍼블리셔는 Observable의 개념이다. 퍼블리셔는 실제 구현이 아닌 Protocol로 정의되어 있다. RX의 경우에는 Observable Class의 구현을 제공하는 것과 차이가 있다. 따라서, Publisher는 여러 구현체를 가질 더보기…

Combine 살펴보기

2019년, 애플이 WWDC에서 컴바인을 소개하면서 컴바인을 다음과 같이 정의했다. that’s what Combine is, a unified declarative API for processing values over time. Combine is written in and for Swift. 컴바인은 시간에 따른 값을 처리하기 위한 통일된 선언적 API입니다. 컴바인은 스위프트로 작성이 되었고, 스위프트를 위한 것입니다. 또한, 공식 홈페이지에서는 Combine을 다음과 같이 더보기…

swift enum codable

enum에서 codable을 채택하면 바로 안 되고, 뜨는 상황이 발생한다. 이유는 enum이 rawValue로 String 또는 Int를 채택하지 않아서 그렇다. (json 데이터라고 생각하면 당연한 것 같다.) 별도의 인자가 없는 경우에는 아래와 같이 수동으로(?) 인코딩, 디코딩을 해주면 된다. (사실 그냥, 문제가 없다면 rawValue를 채택하는 게 좋아보인다.) 만약 enum의 case에서 인자를 받았다면 아래의 stackoverflow를 더보기…

SwiftUI View Paging

iOS 14 이상 스위프트UI의 신기능으로 TabView를 이용해서 페이징을 할 수 있는 기능이 추가되었다. 아래 동영상처럼 UICollectionView의 isPagingEnabled의 대체 기능이다. ScrollView를 horizontal로 설정하고, TabView를 만든 후에 안에서 View들을 생성한다. 이때, 모디파이어를 이용해서 tabViewStyle을 PageTabViewStyle()로 해주면 간단하게 만들 수 있다. (…근데 왜 이게 TabView로 기능이 들어간걸까?… 이름을 보면 매칭이 되긴하는데… 뭔가 흠…) 더보기…