IOS
알고리즘 풀 때 자주 쓰는 몇가지 테크닉
알고리즘 풀 때 자주 쓰는 몇가지 테크닉
2022.05.161. 배열 순회중, 오버플로우 체크 if (0 .. Bool { for number in 2 ... at / 2 { if at % number == 0 { return false } } return tru..
UIColor Custom
UIColor Custom
2022.05.11뷰를 개발하다보면, UIColor를 사용할일이 정말 정말 많습니다. 이를 좀 더 편하게 사용하기 위한 커스텀 코드를 몇번 작성하다보니, 정리가 필요하겠구나 싶어 포스팅 합니다. HTML 삽입 미리보기할 수 없는 소스 위와 같은 코드를 작성하게되면, 아래와 같이 편하게 UIColor 값을 조절할 수 있습니다. myLabel.textColor = UIColor(0, 0, 0) myLabel.textColor = UIColor(rgb: 0x000000) 그리고 추가적으로 조금 더 들어가서.. 각 뷰의 색상값을 아래처럼 정의해두면 조금 더 가독성이 높은 코드가 완성 되겠죠 extension UIColor { static let titleColor: UIColor = { UIColor(rgb: 0x000000) ..
인앱결제 서버 알림 JSON 데이터 정리
인앱결제 서버 알림 JSON 데이터 정리
2022.04.20https://docs.google.com/spreadsheets/d/1PC0eJKFkfz1ZCURi-MXSqddGyovkNNr1bgJ9-80YY4g/edit?usp=sharing 인앱결제 서버 알림 JSON 정리 requestBody requestBody 변수,타입,설명 receipt-data,byte,Base64로 인코딩 된 영수증 password,string,앱 공유 암호, AppStoreConnect에서 설정 exclude-old-transactions,boolean,최근 갱신 트랜잭션만 포함할지 설정하는 flag docs.google.com 인앱결제 조사하면서 정리를 했는데, 혼자 보기 아까워서 올려 둡니다.
인앱결제 환불 관련 FAQ
인앱결제 환불 관련 FAQ
2022.04.20인앱결제를 준비하던 도중 환불에 관하여 몇가지 궁금한점이 생겨서 애플에 문의를 해봤고, 다음과 같은 답변을 받았습니다. 1: 환불에 대한 조건 A: 개발자(회사)에게 환불 정보를 일체 제공하지 않음 2: 환불시 생기는 불이익 A: 고객(개인사정or변심등 으로 추정)의 문제가 아닌 우리 App에 문제가 있을 시, 연락을 할 수 있음 3: 환불 이후 정산 A: 부분환불에 대한 언급은 없으며, 환불시 환불 금액과 동일한 금액을 Apple에 상환 혹은 크레딧 부여(?) 4: 환불 기간제한 A: 구독기간의 마지막 날로부터 90일 3번의 크레딧은 아마 AppStoreConnect 전산에 출금하지 않고 남아있는 금액으로 추정됩니다.
배열의 값으로 index를 찾기.
배열의 값으로 index를 찾기.
2022.04.11struct Squad { let name: String // . // . // . } let platoon = [Squad(name: "Alpha"), Squad(name: "Bravo"), Squad(name: "Chalie"), Squad(name: "Delta") ] 이런 코드가 있고, 여기서 찰리분대의 Index를 찾고싶을때는.. 여태까지 저는 이렇게 처리 했습니다. var i = 0 while i < platoon.count && platoon[i].name != "Chalie" { i += 1 } if i < platoon.count { return i } else nil 조금 더 간결한 방법이 없을까 하고 찾아보니, 이런 방법이 있었습니다. let chalie = platoon.indice..
RxSwift 결합 함수 정리
RxSwift 결합 함수 정리
2021.07.04오늘은 Combine계열 함수들을 정리해보려고 합니다. 포스트들을 보니, Filter, Mapping 계열 함수들을 공부만해놓고 포스팅하진 않았네요.. 이것들도 조만간 포스팅하겠습니다.. StartWith 시퀀스를 방출하기 전, 특정 요소를 방출하기 위한 함수입니다. example(of: "startWith") { let numbers = Observable.of(2, 3, 4) let observable = numbers.startWith(1) observable.subscribe(onNext: { print($0) }) /* Prints: 1 2 3 4 */ } 2,3,4만 방출하도록 하지만, startWith를 이용하면, 해당 요소를 먼저 방출한 후 방출합니다. 특이한 점은, Cold Observa..
addSubview 한번에 하기
addSubview 한번에 하기
2021.06.03SnapKit이나, SwiftUI등으로 스토리보드 없이 UI를 개발할때 addSubview를 쓸일이 많습니다. 다만 종종 이렇게 노가다가 될수도 있는데요.. view.addSubview(thumbnailView) view.addSubview(closeButton) view.addSubview(likeButton) view.addSubview(titleLabel) view.addSubview(subTitleLabel) 이 코드를 한줄로 줄여주는 간단한 익스텐션입니다. view.addSubviews([thumbnailView, closeButton, likeButton, titleLabel, subTitleLabel])
RxSwift Trait
RxSwift Trait
2021.05.26(스터디하면서 공부한 자료를 정리하였습니다) RxSwift에는 여러가지 trait들이 있는데요, 간혹 인터넷에서 RxSwift자료를 찾다보면 예시로 보통 Observable과 BehaviorSubject로 나옵니다. 저는 거기에 대한 의문점을 가지게 되었습니다. 왜 꼭 Observable과 BehaviorSubject만 사용을 해야할까? 다른 trait들을 사용할수는 없었을까? (=그것이 최선이었을까?) 이런 의문점이 생겨서, trait들을 찾아보았습니다. RxSwift에서 사용되는 trait들은 이정도가 있더라구요. RxSwift Observable Single Completable Maybe Infallible RxCocoa Driver Signal Subject PublishSubject Behav..
Playground로 RxSwift 공부하기.
Playground로 RxSwift 공부하기.
2021.05.21몇가지방법들을 찾아보았습니다. 프로젝트를 만들고, SPM이나 Cocoapods로 RxSwift를 추가하기. RxSwift 리포지토리를 다운받아서, 거기에 있는 Playground로 테스트하기 등등. 근데 Arena라고 오픈소스 프로젝트가 있는데요, SPM을 포함한 Playground 생성 툴입니다. https://github.com/finestructure/Arena finestructure/Arena A command line tool to create Swift Playground projects with SPM package dependencies - finestructure/Arena github.com 제일 간편하더라구요. brew install finestructure/tap/arena bre..
fastlane - 빌드넘버 Date로 커스텀
fastlane - 빌드넘버 Date로 커스텀
2021.05.17fastlane은 루비로 개발하였습니다. fastfile에서 루비 언어를 이용하여 커스텀할 수 있습니다. 저는 fastlane에 testflight 업로드 스크립트를 만들어 두었는데요, 아래 함수를 조금 더 추가하여 날짜+카운팅 방식으로 변경하였습니다. (2021051701, 2021051702, 2021051703 ... 2021051799) default_platform(:ios) platform :ios do desc "Push a new beta build to TestFlight" lane :beta do increment_build_number(xcodeproj: "Project.xcodeproj", build_number: date_based_build_number) build_app(sch..
배열의 오버플로우, 언더플로우를 방지하는 방법.
배열의 오버플로우, 언더플로우를 방지하는 방법.
2021.05.10인터넷에서 좋은 글을 보고 가져왔습니다. (번역은아니고, 공감하는대로..) 출처 : levelup.gitconnected.com/5-swift-extensions-to-write-smarter-code-7287b86fde68 Swift에서 배열을 쓰다보면, 보통은 오버플로우가 나는 경우가 많습니다. let values = ["A", "B", "C"] values[0] // A values[1] // B values[2] // C values[3] // Fatal error: Index out of range 이와 비슷한 코드에 관한것을 많은 개발자분들이 경험해 보셨을겁니다. 그래서 오버플로, 언더플로를 방지하기위해 많이 노력합니다. (보통은 오버플로겠죠..) if 2 < values.count { val..
[RxSwift + MVVM] 1. iOS의 모바일 아키텍처 패턴
[RxSwift + MVVM] 1. iOS의 모바일 아키텍처 패턴
2021.05.021. 아키텍처 패턴이란? 소프트웨어 공학은 건축 공학을 많이 모방하여 연구되었습니다. 기본적으로 계획 - 설계 - 시공이 건축이라면, 계획 - 설계 - 구현이 소프트웨어 개발이겠죠. 아키텍처 패턴은 설계항목에 들어가는 방법론입니다. 위키피디아에서는 이렇게 설명되어 있습니다. 아키텍처 패턴(architectural pattern)은 주어진 문맥 안에서 소프트웨어 아키텍처의 공통적인 발생 문제에 대한 일반적인, 재사용 가능한 해결책을 의미한다. 아키텍처 패턴은 소프트웨어 디자인 패턴과 비슷하지만 더 넓은 범위에 속한다. 아키텍처 패턴은 소프트웨어 공학의 다양한 문제를 해결하는데, 예를 들어 컴퓨터 하드웨어 성능 제한, 비즈니스 위험의 최소화와 고가용성을 들 수 있다. 일부 아키텍처 패턴은 소프트웨어 프레임워..