Git/GitHub: .gitignore 적용 안될때 / 어멘드(amend)하는 방법 / 오픈소스 라이브러리에 PR(풀 리퀘스트)하는 방법

.gitignore 적용 안될때  .gitignore가 제대로 적용되지 않는 경우, 주로 이미 Git에 추적되고 있는 파일이거나 .gitignore 파일이 잘못 설정된 경우입니다. 이를 해결하기 위한 단계별 점검 및 해결 방법은 아래와 같습니다.   이미 추적되고 있는 파일인지 확인 .gitignore는 Git이 추적하지 않는 파일에만 적용됩니다. 이미 추적 중인 파일은 .gitignore에 추가해도 무시되지 않습니다.   더보기…

Xcode: CocoaPods 프로젝트에서 Build Phase의 Run Script를 이용해 패치 넘버 증가

관련 글 Run Script Swift Package Manager(SPM)와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1)   버전 넘버 구성 예) Semantic Versioning 라는 방법에 따르면 1.0.0 이라는 버전이 있을 때 앞에서부터 순서대로 메이저 버전 마이너 버전 패치 버전 라고 합니다. Semantic Versioning(SemVer)은 소프트웨어 버전을 체계적으로 관리하기 위한 규칙으로, 버전 번호를 주버전.부버전.패치버전 형식으로 구성합니다. 이 더보기…

macOS 앱 포트폴리오: 플레인 텍스트를 작성/관리할 수 있는 포스트잇 앱 (애플 앱스토어 출시 💻)

StickyPlainPad StickyPlainPad는 플레인 텍스트(서식 없는 텍스트)를 포스트잇처럼 맥 여기저기에 붙였다 뗐다 사용할 수 있는 메모 앱입니다. View this post on Instagram A post shared by BGSMM (@bgsmm.dev) 앱스토어 링크 StickyPlainPad 한국 앱 스토어 링크 (모든 국가 출시, 유료)   깃허브 링크 https://github.com/ayaysir/macOS-StickyPlainPad   특징 및 사용 기술 애플 앱스토어의 검수에 통과하였습니다. 더보기…

Swift UIKit: 최상위 Top View Controller (현재 화면의 VC) 찾기 / 예제: SwiftUI에서 빠른 Alert 띄우기

1. UIApplication의 KeyWindow 대체 import UIKit extension UIApplication { var keyWindow: UIWindow? { connectedScenes .compactMap { $0 as? UIWindowScene } .flatMap { $0.windows } .first { $0.isKeyWindow } } } ‘keyWindow’ was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a 더보기…

SwiftUI: WKWebView의 UIRepresentableView에서 웹 페이지의 Alert, Confirm, Prompt 표시

관련 글 SwiftUI: 웹 뷰(WKWebView) 추가하기 및 자바스크립트 실행 (Representable 사용)   소개 UIDelegate에서 구현해야되는 자바스크립트 경고창 (Alert, Confirm, Prompt) 표시는 어떻게 해야 할까요? Coordinator 클래스를 만들고 WKUIDelegate를 준수(conform) 부모 뷰 (WebViewRP)를 참조하는 변수를 정의하고 이 변수를 통해 코디네이터와 통신 코디네이터 클래스 안에 자바스크립트 경고창 표시와 관련된 함수를 오버라이딩 및 더보기…

Swift iOS 앱 프로젝트: 버튼을 누르면 iOS에 내장된 사전(dictionary) 열기

소개 iOS에서 UIKit을 사용하여 내장된 사전을 여는 방법은 UIReferenceLibraryViewController를 활용하는 것입니다. 이 클래스는 지정된 단어에 대한 사전 정의를 표시하는 뷰 컨트롤러를 제공합니다. UIKit 구현 방법 아래는 특정 단어에 대해 iOS 내장 사전을 여는 예제입니다. 1. 기본 구현 import UIKit func openDictionary(for word: String, from viewController: UIViewController) { if UIReferenceLibraryViewController.dictionaryHasDefinition(forTerm: word) 더보기…

새로운 음악 학습 앱 출시: Music Interval Quiz Master로 골치아픈 음정 정복!

Music Interval Quiz Master 여기를 눌러 설치 (아이폰, 아이패드, 맥 등 애플 기기 대응) 이 앱은 음악 이론 맨 첫부분에서 배우는 음정(interval)이 어려워 골치인 모든 애플 기기 유저들을 위해 제작되었습니다. 오선 악보와 소리로 끊임없이 출제되는 퀴즈를 Interval Master만의 특징인 직관적이며 편리한 음정 키보드를 이용해 입력하고 채점하세요. 출제 범위 및 방식을 더보기…

SwiftUI: iOS 프로젝트의 Stepper가 My Mac(Designed for iPhone)에서 실행할 때 크래시 발생하는 문제 해결 과정

이 포스트는 ChatGPT가 작성하였습니다. 소개 최근, iOS 앱을 macOS에서 실행할 때 Stepper UI 요소가 충돌하는 문제를 겪었습니다. 이 문제는 주로 Apple Silicon Mac에서 발생하며, 특히 iOS 앱을 “Mac (Designed for iPhone)” 타겟으로 실행할 때 발생합니다. Stepper는 iOS에서 잘 작동하지만, macOS에서는 크래시가 발생하는 현상이 있었습니다. 이 문제는 SwiftUI의 호환성 문제로 보였고, 더보기…

Swift 예제: 복잡한 로컬 알림(Local Notification) 구현 (1) – 어학 앱 열기 알림

참고 Swift(스위프트): 로컬 알림(Local Notification)을 스케줄에 맞춰 반복 발신하기 (및 한계점) Swift: [ChatGPT가 말하는] 로컬 알림(로컬 노티피케이션) 기능의 한계점과 극복 방안 Swift(스위프트): 백그라운드 작업 (Background Tasks) 시나리오 앱 설명 하루에 한 번 공부 자료가 업데이트 되는 어학 앱이 있습니다. 월요일 ~ 금요일에만 업데이트가 되고, 주말에는 업데이트가 되지 않습니다.   목표 더보기…

Swift UIKit: UIKit을 사용하여 UIMenu에 구분선(divider, separator) 추가하기

출처: Create Dividers in UIMenu using UIKit 시나리오 UIKit을 사용하여 UIMenu 내에 구분선을 추가하는 방법     버튼을 누르면 컨텍스트 메뉴가 뜨며, 메뉴가 표시될 때 구분선이 존재합니다: import UIKit class ContextDividerViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // 1 let topActions = [ UIAction(title: “Two”, image: UIImage(systemName: “2.square”), handler: 더보기…