전체 글
[iOS] Firebase Cloud Messaging - APN
기록용 1. firebase project 만들기 https://console.firebase.google.com/u/3/?hl=ko 2. iOS 앱 추가하기 iOS를 눌러 앱을 추가합니다 그러면 앱 등록 화면이 나오는데 이때 Apple 번들 ID를 입력해야 함 요건 어느 것이냐면 오른쪽 엑스코드 창에서!! Signing & Capabilities 안에 있는 Bundle Identifier 입니다 나머지 앱 닉네임, App Store ID는 선택사항이니 패스할게요 그러면 2번 단계 구성 파일 다운로드가 나오고, GoogleService-Info.plist 다운로드 받아서 Xcode 프로젝트 안에 추가해 주세요 저는 위 사진처럼 Plists라는 폴더를 따로 만들어 여기에 Info.plist와 함께 넣어 두..
[UIKit] UIScrollView "Scrollable content size is ambiguous." 에러 해결
아래 코드처럼 요상하게 구현했었는데... 조작하는 데나 보여지는 뷰에서는 아무 문제가 없었지만, View Hierarchy를 보면 제약조건 에러가 있는 게 너무너무 거슬려서 결국 해결했다! (평소 scrollView 에러는 터치나 스크롤이 안 되는 등의 문제가 있었지만, 이 경우는 모든 인터랙션이 다 가능하긴 했음.) 원래 코드 (SnapKit 사용) self.view.addSubviews([scrollView]) self.scrollView.addSubview(contentView) self.contentView.addSubviews([infoTitleLabel, profileInfoView, tagTitleLabel, tagCollectionView, emailTitleLabel, emailButto..
2021년 회고, 2022년의 다짐
벌써 2021년이 마무리되고 있다. 몇 시간 안 남았지만... 밤새워서 적을 수 있겠지. 작년은 코로나가 이제 막 시작되던 시기라 정신 못 차리고 보냈었다. 꿀 빨면서 학교 다니며... 알바 열심히 했다. 올해는 '도전의 해'라고 정의할 수 있겠다. 처음 겪는 일들이 너무 많았다. 그리고... 예상치 못한 일들도 많았다. J 중에서도 극성 J라는 ESTJ인 나는... 계획하지 않았던 일을 마주치게 되면 좀 어리바리해진다. 올해를 보내고 나니까 그런 상황에서도 조금이나마 더 유연하게 대처할 수 있는 사람이 된 것 같다. # 복수전공 올해의 첫 도전, 복수전공. 복수전공을 신청하기엔 성적이 좀 딸리던 나는 비대면 수업을 발판 삼아 성적을 열심히 올렸다. 간신히 커트라인 맞춰서 복수전공 신청을 해냈다. 단순히..
[RxSwift] ARC, 강한 참조 strong, 약한 참조 weak, 강한 참조 순환 문제
Struct vs Class Struct 타입과 Class 타입을 비교할 때 가장 많이 하는 말 → Struct는 값 타입, Class는 참조 타입! 값 타입: 전달할 때마다 값을 복사해서 전달 참조 타입: 하나의 인스턴스가 참조를 통해 여러 곳에서 접근 인스턴스가 적절한 시점에 메모리에서 해제되지 않으면 메모리 자원을 낭비하게 됨. → 스위프트에서 메모리 사용을 관리하기 위해 ARC를 사용! ARC의 작동 규칙을 모르고 사용하면 인스턴스가 메모리에서 영원히 해제되지 않을 가능성이 있기 때문에... ARC에 대해 알아야 한다. ARC * 자동 참조 카운팅, Automatic Reference Counting => 자동으로 메모리를 관리해 주는 방식 * 더 이상 필요하지 않은 클래스의 인스턴스를 메모리에서..
[RxSwift] Subject, .scan, RxCocoa, .bind 개념
곰튀김 님의 RxSwift 4시간에 끝내기 (종합편) 영상을 보고 작성한 글입니다 ^~^ https://youtu.be/w5Qmie-GbiA 정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! Subject Observable 밖에서 값을 받아 와서 컨트롤할 수 있음 종류 4개(docs 참고) AsyncSubject Subcribe가 아무리 많이 들어와도 Complete 시점에 가장 마지막 데이터만 모두에게 내려 줌 BehaviorSubject 기본값 하나 가지고 시작, 누군가가 Subscribe하면 기본값을 내려 줌 중간에 새롭게 Subscirbe가 들어오면 기본값으로 가장 최근의 값을 내려 줌 ..
[RxSwift] Observable의 생명 주기, 순환 참조와 메모리 관리, subscribeOn, observeOn
정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! Observable Life-Cycle 1. Create Observable 생성 데이터가 생성되거나, 어떤 명령이 동작하지 않음 → 2. Subscribe에서 동작! 2. Subscribe 어떠한 Observable이 동작함 3. Next 데이터 전달 4. Completed 정상적으로 동작 끝 4-1. Error 비정상적으로 동작 끝 5. Disposed Dispose되면 그 Observable은 더 이상 재사용 불가 .debug() 로 Observable 상태 확인 가능 순환 참조와 메모리 관리 .subscribe(onNext: { i in s..
기획자 없이 서비스 만들기 - 버그/업데이트 리포트 편
현재 근무하고 있는 회사에 서비스 기획자가 없는 관계로 개발자들이 자급자족하며 개발하고 있는데, 어쩌다 보니 나름의 PM도 담당해 기획도 찍먹(?) 중이다. 사실 학부 수업으로 서비스 기획 관련해서 수업을 듣긴 했지만 실전 경험은 전무해서 우왕좌왕 비효율적인 프로세스로 개발을 해왔던 것 같은데(개발하느라바빴음), 나름 체계를 잡고자 했던 것과 느낀 점이 들어간 글을 써 보려고 한다. 오늘은! 요 시리즈 첫 글이지만! 출시 후 업데이트 및 유지보수를 진행하면서 생각했던 것들을 정리해 보려고 한다. 여차저차해서 어떻게 어떻게 서비스를 개발해 릴리즈까지는 성공했다고 치고, (일정에 쫓겨) 개발자로서 효율적으로 구현하지 못한 부분들은 생각날 때마다 github issue에 뿌려 놓은 상황. 대충 요런 식...?..
[RxSwift] 이게 맞나? 싶은 RxSwift 개념 정리
곰튀김 님의 RxSwift 4시간에 끝내기 (종합편) 영상을 보고 작성한 글입니다 ^~^ https://youtu.be/w5Qmie-GbiA 정말 생초보,, 아무것도 모르는 입장에서 강의 영상을 보고 의식의 흐름대로 작성한 글이니 비판의 눈으로 글을 읽어 주시면 감사하겠습니다~~ 오류 지적 대환영! [1교시] 개념잡기 - RxSwift를 사용한 비동기 프로그래밍 ✈️ Rx의 목적 비동기적으로 만들어지는 데이터(언제 만들어질지 모름)를 completion으로 전달하는 게 아니라 리턴 값으로 전달하여 좀 더 간결하게 사용하도록 만들어진 유틸리티 시간이 걸리는 작업 도중 취소 시 유용 동기/비동기 처리 쉽고 간단하게 create, subscribe, disposable // MARK: RxSwift 원형 사용..
[Swift] 타입캐스팅, 다운캐스팅, is, as란?
Swift의 타입캐스팅에 대해 알아보아요. 😎 먼저 클래스의 상속 개념부터 이해하고 있어야 하는데...... 이렇게 Coffee, Latte, Americano라는 클래스가 있습니다. 여기서 우리는 라떼와 아메리카노를 묶어서 커피라고 부르기도 하죠!??!? 커피라는 개념을 포함하고 있는 라떼는, 여기에서는 커피를 상속받아 라떼가 탄생하게 됩니다! 마찬가지로 커피라는 개념을 포함하고 있는 아메리카노도 생성! 그러면 커피는 부모 Class, 라떼와 아메리카노는 자식 Class가 됨니다. '커피'는 '샷'이라는 항목을 갖고 있고, 이를 상속받은 자식들인 라떼와 아메리카노도 '샷'이라는 항목을 가지고 있슴니다~~ 초간단 상속 끗! class Coffee { let shot: Int init(shot: Int) ..
[iOS15 대응] NavigationBar/Tabbar background color Transparent 이슈 해결
iOS15로 넘어오면서.,,, 네비게이션바나 탭바가 있는 뷰에서 화면 전환을 때리면 배경이 투명해지고 border line이 사라지도록 변경되었다. 사실 이슈는 아닌ㄷㅔ;; 내 생각대로 안 되면 이슈임. ㅇㅇ 관련 포럼: https://developer.apple.com/forums/thread/682420 barTintColor not working in iOS 15 | Apple Developer Forums In iOS 15, UIKit has extended the usage of the scrollEdgeAppearance, which by default produces a transparent background, to all navigation bars. The background is co..
[UIKit] UIButton Custom Design 적용
부제: 예쁜 버튼 만들기 phoneNumDoneBtn.backgroundColor = .gray phoneNumDoneBtn.layer.cornerRadius = 4 phoneNumDoneBtn.setTitleColor(.white, for: .normal) 적용하면 이런 너낌!
[iOS] 다크모드 대응 비활성화하기
프로젝트/Info.plist 파일에서 Information Proerty List 항목에 Key로 Appearance를 추가하고, Value는 Light로 하면 디바이스와 상관없이 라이트 모드로 나옴! 다크모드 대응 아직 디자인 생각을 못 해서 라이트 모드만 지원하기로! 코드로 Info.plist 수정하기 UIUserInterfaceStyle Light
[UIKit] UITableView 빈 셀 숨기기
tableView.tableFooterView = UIView(frame: CGRect.zero) 그냥 UIView 하나 끌어다 스토리보드에 놓아도 되지만 코드 한 줄이 더 편하길래~~~~
[PagingKit] Could not load NIB in bundle error 해결
PagingKit GitHub - kazuhiro4949/PagingKit: PagingKit provides customizable menu UI. It has more flexible layout and design than the other PagingKit provides customizable menu UI. It has more flexible layout and design than the other libraries. - GitHub - kazuhiro4949/PagingKit: PagingKit provides customizable menu UI. It has more fl... github.com 페이징 키트를 이용해 뷰를 만든 후, 다른 뷰에도 페이징 키트가 필요해서 기존 파일들을 ..
[Swift] 날짜를 문자로! Date to String
func dateToString(_ today: Date) -> String{ let year = Calendar.current.component(.year, from: today) let month = Calendar.current.component(.month, from: today) let day = Calendar.current.component(.day, from: today) let weekdayInt = Calendar.current.component(.weekday, from: today) var weekday: String = "" switch weekdayInt { case 1: weekday = "SUN" case 2: weekday = "MON" case 3: weekday = "T..
[Swift] 특정 날짜/시간 DateComponents to Date
Calendar.current.date(from: DateComponents(year:2021, month: 7, day: 1)) * DateComponents는 파라미터가 모두 옵셔널이라 원하는 파라미터만 넣어서 사용 가능!
[네트워킹] iOS Swift Alamofire 요청/응답하기(form-data형식)
우리 서버에 json 형식으로 폰번호 넘겼더니 자꾸 변수 부족 에러 코드 뜸 -> 서버팀에 물어봄 -> 서버에 데이터 보낼 때 json 말고 form-data 형식으로 보내 달라고 함 -> 그런데 Alamofire에 form-data 형식으로 업로드할 수 있는 메소드가 있었다!!!! 평소 하던 것처럼(line 8에 주석 처리한 부분) request를 보내는 메소드가 아니라, 서버에 업로드하는 개념인 듯. 아무튼 multipartFormData 활용해서 휴대폰 번호 넣었더니 제대로 요청이 전송됐다. 🥺 //MARK: SMS request // API 호출 let paramForSMS:Parameters = ["userphonenum": phoneField.text] let url = "여기에 url 주소 ..
[UIKit] 간단한 toast message, 확인 버튼만 있는 alert 예제
extension UIViewController { func alert(_ message: String, completion: (()->Void)? = nil) { DispatchQueue.main.async { let alert = UIAlertController(title: nil, message: message, preferredStyle: .alert) let okAction = UIAlertAction(title: "확인", style: .cancel) { (_) in completion?() } alert.addAction(okAction) self.present(alert, animated: false) } } } 사용할 때에는 아무데서나 self.alert("알림메시지!!!") 이렇게 사용..
[TIL] 일러스트 모작... 새 그리기 과제
왼쪽이 원본 오른쪽이 모작해서 그린 거...~~~!!!!! 거의 5시간 동안 한 것 같은데 과제 하나 더 남음 ㅋ 오늘 에타에서 iOS 공부하는 사람들 없냐는 글 보고 댓글 달았는데... 울 학교에서 iOS 공부하는 단톡이 생겼다 😚 노션 위키 열심히 만들어야겟따. 끗.
[TIL] 페르소나(퍼소나) 작성하기
오늘 과제로 열심히 만들었다... ^^ 팀플이라서 블러를 좀 했지만... 디앤디 동아리에서 기획하는 과정 직접 본 게 도움에 많이 됐다. ㅎㅎ