자바스크립트: 두 날짜(Date) 사이의 차이(간격) 구하기

소개 자바스크립트로 특정 두 날짜 사이의 간격을 시분초 또는 연일월 단위로 구하고 싶다면 어떻게 해아할까요? 방법은 아래와 같습니다.   방법 날짜 비교를 위한 Date 인스턴스를 두 개 만듭니다.  이 두 인스턴스를 빼기 연산(-)을 한 뒤 절대값을 씌우면 두 날짜 사이의 밀리초(milliseconds) 차이가 됩니다. 이 값에 1일의 밀리초 단위인 (1000 * 더보기…

Swift(스위프트): Debounce, Throttle 로 함수 실행 횟수 제한 (DispatchWorkItem 이용, 외부 라이브러리 없이)

소개 먼저 Debounce, Throttle 이란 어떤 기능인지에 대해 알아보겠습니다. 자바스크립트 lodash: debounce와 throttle을 이용하여 함수의 실행 횟수 제한 debounce, throttle은 생소한 기능인데요 간단히 요약하면 이벤트의 반복 실행시 콜백 함수의 불필요한 실행을 줄이는 역할을 합니다. 이로 인해 클라이언트가 혜택을 볼 수도 있거나 혹은 서버 측에 불필요한 리퀘스트를 줄일 수도 있습니다.   더보기…

Transporter 앱을 사용하여 App Store Connect 바이너리 파일 업로드

소개 앱 스토어에 앱의 바이너리 파일 (ipa 등)을 업로드하고자 할 때 여러 방법이 있는데 이 중 Transporter 앱을 사용하는 방법을 소개하고자 합니다. Xcode에서도 바이너리 업로드 기능을 지원합니다만, 문제는 알 수 없는 버그가 너무 많고 앱 업로드 중 자주 먹통이 된다는 점입니다. 이럴 때 다른 대안 중 Transporter앱을 사용하면 해당 문제가 더보기…

Swift(스위프트): 공유 메뉴 (UIActivityViewController) 띄우기

소개 공유 메뉴는 아래와 같은 형태로 수많은 앱에서 [공유], [공유하기] 등의 이름으로 존재하는 기능입니다. 특정 메시지나 URL, 이미지, 파일 등을 에어드롭(AirDrop)이나 메시지, 메일, 다른 앱으로 보낼 수 있습니다. 예를 들어 메시지 아이콘을 클릭하면 아래와 같이 영상 URL이 메시지에 첨부됩니다. 이러한 공유 메뉴를 Acitivity View라고 합니다. Swift에서는 UIActivityViewController로 공유 메뉴를 띄울 더보기…

Swift(스위프트): 아이폰 진동(Vibration, Haptic) 구현하기 上 (기초)

소개 Swift에서 진동(Vibration 또는 Haptic)을 구현하는 방법입니다. 진동은 아이폰에서만 지원하고 아이패드나 아이팟 터치에서는 사용할 수 없습니다. 테스트하려면 실제 아이폰 기기가 필요합니다.   기초 아이폰에서 진동을 발생시키는 방법은 크게 3가지가 있습니다. 각 진동은 말로 설명하기는 어려우므로 실제로 체험해보세요(?) UINotificationFeedbackGenerator를 사용하는 방법 성공(success), 경고(warning), 에러(error)를 나타낼 때 사용합니다. 진동이 여러 번 나타납니다. 더보기…

Swift(스위프트): 로컬 알림(Local Notification)을 스케줄에 맞춰 반복 발신하기 (및 한계점)

원문 How is it possible to create highly customised repeated local notification in iOS using UNCalendarNotificationTrigger + UNUserNotificationCenter? 질문 UNCalendarNotificationTrigger + UNUserNotificationCenter를 사용하여 iOS에서 고도로 사용자 정의된 반복 로컬 알림을 생성하는 것이 어떻게 가능합니까? 현재 저는 UNCalendarNotificationTrigger 및 UNUserNotificationCenter를 사용하여 미리 알림 앱에 대해 고도로 사용자 정의된 반복 로컬 알림을 생성하고 더보기…

Swift(스위프트): 텍스트 뷰에서 선택 부분(text selection)에 사용자 정의 메뉴 추가 (스토리보드)

소개 텍스트 뷰 등에서 텍스트를 선택하면 아래와 같은 메뉴가 나옵니다.   여기에 기존에 없는 메뉴를 추가하고 싶다면 어떻게 해야 할까요? 아래 스크린샷에서 단어장에 추가 메뉴는 iOS에 없는 메뉴로 제가 새로 추가한 것입니다.   방법 Step 1 addCustomMenu()  함수를 추가하고, 뷰 컨트롤러의 viewDidLoad(_:)에 addCustomMenu()를 실행하도록 추가합니다. override func viewDidLoad() { super.viewDidLoad() 더보기…

Swift(스위프트): 스테퍼(UIStepper)의 값을 레이블(UILabel)에 표시하기 (일반 방법 및 RxSwift 사용 방법)

InterfaceBuilder의 스토리보드에서 UIStepper는 아래 그림과 같이 마이너스(-) 버튼과 플러스(+) 버튼이 있으며 버튼을 누를때마다 값이 증감하는 컴포넌트입니다. 스테퍼의 값은 Double 타입의 형태로 UIStepper 인스턴스에 자체적으로 저장됩니다만 화면에는 표시되지 않기 때문에 알 방법이 없습니다. 이를 레이블(UILabel)에 표시하는 예제입니다.   참고: UIStepper 최소값, 최대값, 증감값(step value) 설정하기 1) 스토리보드에서 UIStepper 컴포넌트를 선택한 후 더보기…

Swift Package Manager(SPM)와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1)

Swift Package Manager와 CocoaPods를 동시에 대응하는 라이브러리 만들기 (1) 전체 코드 https://github.com/ayaysir/BGSMM_DevKit   과정 Xcode에서 Swift Package Manager에 대응하는 Package를 만들고 코드를 구현합니다. 별도의 폴더에서 CocoaPods 프로젝트를 생성한 뒤 필요한 파일만 복사해 Swift Package Manager 폴더로 복사합니다. GitHub 레퍼지토리에 푸시한 뒤 버전 태그를 생성하고 태그로부터 릴리즈를 생성합니다. CocoaPods에 대응하기 위한 더보기…

자바스크립트: 패스워드 안전도(강도; Strength) 표시하기

자바스크립트: 패스워드 안전도(강도; Strength) 표시하기   아래와 같이 입력받은 패스워드가 얼마나 안전한지 Progress Bar로 표시하는 예제입니다. 강력한 보안이 요구되는 서비스에서 패스워드가 털릴 위험이 있는지 사전 체크하는 용도로 쓰입니다. 위 움짤에서 특수문자, 영문 대소문자, 숫자들을 적절히 섞어서 안전한 패스워드라면 초록색의 꽉찬 그래프로 표시하고, 덜 안전할수록 그래프 진행 상황이 낮은 상태의 빨간색 더보기…