Swift 오디오 재생 iOS 개발을 할 때 오디오를 플레이하려면 AVFoundation을 import 해야 합니다. 우선 간단한 beep 음을 재생하기 위해서 wav 파일을 준비했습니다. 총 3개의 파일이고 시작음과 종료(성공, 실패)음이 있습니다. 다음과 같이 정의 Beep 음 타입을 정하는 BeepType이라는 enum을 하나 정의합니다. 타입은 String타입으로 정의해서 해당 타입의 문자열은 파일이름과 매칭시켜 줍니다. 이제 재생을 할 클래스를 만들고 다음과 같이 AVFoundation을 임포트 해줍니다. 또한 soundEffect라는 AVAudioPlayer 객체를 선언합니다. 아직 객체를 할당하지는 않았지만 강제 옵셔날 언래핑(!) 해서 선언합니다. 다음 함수는 오디오 재생을 위한 함수입니다..
WKScriptMessageHandler 구현하기 자바스크립트에서 네이티브로 특정 메시지를 호출할때는 iOS 스위프트에서 WKScriptMessageHandler 프로토콜을 구현해줘야 합니다. 자바스크립트 메시지 핸들러를 구현하면 WKScriptMessage 타입의 message 객체를 파라미터로 전달 받을 수 있습니다. 해당 데이터는 body와 name으로 구현되어 있습니다. name은 보내는 쪽과 맞춰서 String 타입으로 구현되고 실제 사용될 데이터는 message.body에 담기게 됩니다. 하지만 약속된 데이터가 JSON일 경우 전달 받은 데이터를 디버깅해보면 문자열이 아닌 딕셔너리(NSFronzenDictionaryM) 타입이라는 것을 확인할 수 있습니다. 이 데이터를 파싱하기 위해서는 우선 ..
SwiftUI에서 UIKit을 사용해 화면을 표현할 수 있다는 것은 스위프트 UI 개발을 하시는 분이라면 대부분 알고 계실겁니다. 이 UIView 또는 ViewController를 프리뷰(Preview)를 이용해서 띄워보겠습니다. ▼ 다음과 같이 ViewController를 하나 생성합니다. 만약 PreviewProvider 프로토콜을 구현한 preivews 반환 값이 View 타입이 아니라면 보시다시피 에러가 납니다. UIKit의 뷰 컨트롤러를 반환하기 때문입니다. ▼ 이제 Preview 를 extension해서 UIViewControllerRepresentable 프로토콜을 구현합니다. 이때 필요한 함수가 makeUIController, updateUIViewController입니다. updateUI..
UIKit과 SwiftUI 통합하기 SwiftUI 이전에는 iOS 개발을 위해 UIKit을 사용하였습니다. SwiftUI로 화면을 개발한다고 해도 UIKit을 사용할 수 밖에 없는데요. SwiftUI 화면을 UIKit에서 사용하려면 UIHostingController를 사용해서 쉽게 사용할 수 있는 것처럼 SwiftUI에서는 UIViewRepresentable이라는 프로토콜을 구현함으로써 UIView를 쉽게 SwiftUI에 반영할 수 있습니다. ▼ UIViewRepresentable 프로토콜은 UIKit을 SwiftUI에서 사용하기 위해 SwiftUI 형태의 화면으로 만들기 위한 프로토콜입니다. 다음과 같이 일반 UIKit 화면을 UIViewRepresentable를 구현을 통해 SwiftUI 에서 손쉽..
https://docs.flutter.dev/get-started/install/macos 설치 환경 플러터를 개발하기 위한 환경의 조건은 다음과 같습니다. macOS 2.8GB의 저장 공간 (개발툴 저장 공간을 제외한 크기) git, Xcode 가 설치된 환경 만약 git이 설치되어 있지 않다면 Xcode를 설치하거나 직접 git을 설치해야 합니다. Xcode를 설치하면 자동으로 git이 설치되며 따로 git을 설치 않아도 되는 장점이 있습니다. 만약 homebrew를 통해 설치하려면 다음 가이드를 참고하시면 됩니다. https://git-scm.com/download/mac Git - Downloading Package Download for macOS There are several options ..
▼ 스위프트 UI는 선언형 UI를 사용합니다. 예를 들면 다음과 같이 Color.red 에 .ignoresSafeArea() 라는 ViewModifier를 추가해서 화면에 SafeArea를 포함해서 전체화면을 빨간색으로 채울 수 있습니다. 마찬가지로 .frame을 이용해서 화면 사이즈를 변경할 수도 있습니다. ▼ 이번에는 ZStack을 사용해서 Color와 Text를 중첩해서 표현하겠습니다. ZStack의 alignment를 .bottomTrailing 옵션으로 Text를 우측 하단에 포함시킵니다. Text에도 역시 font, foregroundColor 와 같은 다양한 modifer가 추가되어있습니다. 때문에 코드가 복잡해지고 재사용하기 힘든 코드가 됩니다. ▼ ViewModifier를 확장한 Wate..
▼ 텍스트 필드를 만들기 위해서 다음과 같이 TextField 요소를 추가합니다. 첫 번째 파라미터는 Placeholder를 의미하며 두 번째 파라미터는 실제 입력 텍스트로 Binding 값이 들어갑니다. 때문에 @State 지시자를 통해서 새로운 변수를 추가합니다. @State는 내부적으로만 사용하기 때문에 private로 선언하는 것이 기본이며 값은 빈 문자열로 해줍니다. ▼ 텍스트를 입력하면 첫 글자가 대문자인 것을 알 수 있습니다. textInputAutocapitalization 를 .never로 설정하면 대문자가 아닌 소문자로 시작합니다. 그리고 틀린 문자에 대해 자동으로 수정해주는 기능이 있는데 사용자가 불편할 수 있습니다. .disableAutocorrection(true) 로 방지할 수 ..
VStack, HStack, ZStack UIKit을 사용해서 개발을 할 때에도 Stack은 매우 유용하게 사용됩니다. 오토레이아웃을 사용하든 SnapKit을 사용하던 반드시는 아니지만 Stack을 사용하면 편리하게 UI 레이아웃을 만들 수 있습니다. 하지만 SwiftUI 개발을 하게 되면 Stack을 빈번하게 사용합니다. 특히 직관적이고 레이아웃을 바로 변경하는 모습을 볼 수 있어서 쉽게 레이아웃 구성이 가능합니다. 레이아웃의 가장 기본적인 형태인 Stack에 대해서 알아보겠습니다. ▼ 두 개의 Rectagle을 만들고 VStack으로 감싸면 다음과 같이 정중앙에 2개의 박스를 볼 수 있습니다. ▼ 마찬가지로 VStack 대신에 HStack을 사용하면 다음과 같이 가로로 배치된 UI를 볼 수 있습니다...
시뮬레이터 다크모드 아이폰 개발을 하다보면 시뮬레이터를 자주 사용합니다. 최근 iOS 13 이후부터는 다크 모드를 지원하게 되는데요. 개발 초기에는 앱 개발 시 다크 모드를 포함하지 않는 경향이 있었지만 최근에는 다크모드를 지원하는 앱이 많아졌습니다. 일일이 시뮬레이터에 연결해서 다크모드를 테스트하는 것보다는 시뮬레이터에서 테스트하는 편이 훨씬 빠릅니다. 아이폰에서는 제어센터에서 손쉽게 변경할 수 있는데요. 시뮬레이터는 조금 귀찮긴 합니다. 그림 지금부터 시뮬레이터에서 다크 모드로 변경하는 법을 알아보겠습니다. ▼ 다음과 같이 앱 홈화면에 설정 메뉴를 선택합니다. ▼ 설정화면에서 아래쪽으로 스크롤해줍니다. ▼ 시스템 설정 마지막 부분에 개발자 메뉴를 선택합니다. ▼ Developer (개발자) 메뉴에서 ..