Swift: iOS 프로젝트의 인앱 결제(In App Purchase; IAP) 기초 예제

사전 작업 애플 개발자 계정(유료)가 필요하며, 수익 창출이 허가가 되어야 합니다. 수익 창출 후 App Store Connect에서 인앱결제 제품을 등록해야 합니다. 개인 개발자가 수익 창출이 되려면 은행 계좌 등록, 개인사업자등록 등의 절차를 진행해야 하며 해당 방법 및 제품 등록 방법은 타 블로그 포스트로 대체합니다. [Xcode/iOS] Swift 앱스토어(AppStore) 인앱결제(In-App Purchase)를 위한 더보기…

Swift UIKit 예제: 로딩 인디케이터 화면

소개 UIKit에서 특정 로딩 상황이 발생할 때 로딩 인디케이터를 띄우는 예제입니다. 외부 라이브러리를 사용하지 않고 기본 제공 요소로 만들었습니다.   코드 import UIKit struct LoadingIndicatorUtil { static let `default` = LoadingIndicatorUtil() private init() {} private let TAG = 95834114 enum Style { case clear, blur } /// 로딩 인디케이터 창을 더보기…

Swift: Xcode iOS 프로젝트에서 프레임워크(Framework)로 모듈 분리해서 사용하는 방법

소개 iOS 프로젝트에서 어느 부분을 외부 프레임워크(Framework) 파일로 빼서 모듈로 사용하는 방법입니다. 모듈을 불러와 사용하는 방법은 import 키워드를 사용하는 것입니다. import UIKit import WebKit import MapKit   예시로 아래와 같이 데이터가 있으면 그래프를 표시하는 앱을 만들었는데 그래프를 그려주는 부분(클래스 GraphMaker)은 앞으로 코드가 복잡해질 것 같아서 다른 곳에서 개발 및 관리하고 더보기…

Swift: UIKIt에서 뷰의 Frame과 Bounds의 차이

소개 UIKIt에서 뷰의 Frame과 Bounds의 차이점에 대해 알아봅니다.   위치 (1) frame frame은 바로 위에 있는 상위 뷰(superview)를 기준으로 위치가 설정됩니다. superview의 최초 시작 위치를 기준으로 (x: 0, y: 0) 으로 시작합니다. superview가 어느 위치에 있든간에 오로지 superview의 최초 시작 위치를 기준으로 합니다. 최초 시작 위치는 기본적으로 뷰의 <span style="text-decoration: underline;">절대값 더보기…

SwiftUI: CoreData와 CloudKit을 이용해 iCloud로 기기간 데이터 동기화 기초

소개 iCloudKit의 CloudKit을 이용해 CoreData에 저장된 데이터를 동기화하는 방법입니다. 별도의 인증 절차 없이 같은 iCloud계정을 가진 기기는 자동으로 연동이 됩니다. 동기화하려는 기기는 같은 애플 iCloud 아이디로 로그인되있어야 합니다. 개발자가 CloutKit을 도입하려면 유료 개발자 계정이 필요합니다.   방법 Step 1: 프로젝트 생성 (1) Xcode에서 File -> New -> Project… 메뉴 선택 더보기…

SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 下

이전 글 SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 上   소개 UIViewReprestable로 감싼 웹뷰(WKWebView)의 스크롤 상태에 따라 하단 툴바 및 주소창 모양이 변하도록 하는 예제입니다. 이전 예제에서 해당 동작을 @State로 구현하는 방법을 설명하였습니다. 이번 포스트는 실제로 웹뷰의 스크롤 상태에 따라 하단 툴바가 확장/축소되기 위한 과정을 진행합니다. 더보기…

SwiftUI: 스크롤을 하면 하단 바 일부가 애니메이션으로 사라지거나 나타나기 (사파리처럼) 上

소개 iOS 기본 앱인 Safari 브라우저(아이폰)을 보면 밑에 있는 URL 도구창 + 툴바가 스크롤 상태에 따라 변하는 모습을 볼 수 있습니다. 애니메이션 및 어떻게 돌아가는지 분석해보려고 합니다. 이번 포스트는 URL 도구창 + 툴바가 확대/축소하는 과정만 알아보겠습니다.   동작 분석 하단의 상태는 크게 둘로 나뉩니다. 상태 1: URL 도구창이 확대되었고 툴바가 더보기…

Swift: 약수(divisor) 구하기

약수 약수는 어떤 정수를 다른 정수로 나누어 떨어지게 하는 정수를 말합니다. 즉, 어떤 수를 다른 수로 나눌 때 나머지가 0이 되는 수들이 해당 수의 약수입니다. 예를 들어, 6의 약수는 1, 2, 3, 6이고, 12의 약수는 1, 2, 3, 4, 6, 12입니다. 약수는 양수일 필요는 없으며, 음수나 0도 가능합니다. 또한, 1과 더보기…

SwiftUI: Combine을 이용해 Debounce, Throttle 구현하기

소개 Debounce, Throttle 기능이 필요할 때 Combine을 이용해서 구현할 수 있습니다. Swift(스위프트): Debounce, Throttle 로 함수 실행 횟수 제한 (DispatchWorkItem 이용, 외부 라이브러리 없이) debounce, throttle를 간단히 요약하면 이벤트의 반복 실행시 콜백 함수의 불필요한 실행을 줄이는 역할을 합니다. 이로 인해 클라이언트가 혜택을 볼 수도 있거나 혹은 서버 측에 불필요한 리퀘스트를 더보기…

SwiftUI: 화살표 모양 그리기 (Shape, Path 사용)

SwiftUI에서 화살표 모양을 그리는 방법 원문: How to Create Arrow Shape in SwiftUI   소개 앱을 개발할 때, 사용자에게 알려줄 여러 기호가 필요하다는 것을 깨닫게 됩니다. 화살표는 움직임이나 방향을 나타내는 널리 알려진 기호입니다. SwiftUI의 유연성(flexibility)은 화살표의 생성과 방향 지정을 쉽게 할 수 있게 합니다. 🤔 SwiftUI에서 화살표를 추가하고 회전하는 방법을 더보기…