Skip to content

Instantly share code, notes, and snippets.

View skyofdwarf's full-sized avatar

김영중 skyofdwarf

View GitHub Profile
@skyofdwarf
skyofdwarf / keychain-items-sharing.md
Created December 20, 2022 15:24
키체인 아이템 공유 방법의 차이점

키체인 아이템 공유 방법의 차이점

  • Keychain Sharing
  • App Groups

여러 앱에서 키체인 아이템을 공유하기 위해서 Keychain Sharing 또는 App Groups 기능을 활성화하고 keychain access group 또는 app group을 지정한다.

기능 차이

  • 일반 데이터 공유
  • kSecAccessGroup 기본 값
@skyofdwarf
skyofdwarf / how-to-get-team-id-for-free-developer-account.md
Last active December 20, 2022 12:56
무료 개발자 계정의 팀 ID 찾기

개발자 계정의 팀ID 확인 방법

키체인 공유를 위해 access group 지정을 위해 team ID가 필요하게 되는데, 이 때 team ID를 어떻게 알 수 있을까?

개발자 홈

유료 개발자의 경우 개발자 홈에서 접속해 확인 할 수 있다.
그럼 무료개발자 계정의 경우 team ID는 어디서 확인 가능할까?

@skyofdwarf
skyofdwarf / remote-notification.md
Created December 12, 2022 14:20
리모트 노티피케이션 정리

시간이 흘러 이제 iOS 16이 나왔고, 이제는 iOS 10에 추가된 UNUserNotificationCenter를 이용해 로직만 사용하는게 당연하다. 하지만 레거시 코드들에는 사용하지 않는 예전 푸시 관련 코드들이 같이 남아 있어, 간만에 푸시작업을 할 떄마다 헷갈리게 만든다.

UIApplicationDelegate의 url-open 관련 메시지들도...

때문에 n년 후의 나를 위해 정리를 남긴다.

리모트 노티피케이션 사용 절차

  1. APNS 등록

    APNS에 기기등록을 위해 UIApplication.registerForRemoteNotifications 호출

  2. UI/사용자 상호작용을 위한 권한 등록
@skyofdwarf
skyofdwarf / CFBundleVersion-update-script.md
Created December 2, 2022 11:11
CFBundleVersion 갱신 스크립트

빌드 시 마다 CFBundleVersion을 갱신하기 위한 스크립트이다.

변경된 CFBundleVersion 값 적용을 위해 Build Phases 순서가 소스컴파일 이전에 와야 한다.

아래 스크립트는 Tuist에서 사용한 스크립트 문자열로 앱버전을 위해 appVersion 변수를 참조하고 있지만 주석처리된 코드를 사용해 현재 Info.list에 정의된 앱 버전 값(CFBundleShortVersionString)을 참조 할 수도 있다.

값 형식은 앞 3개의 숫자(Major.Minor.Patch)는 CFBundleShortVersionString와 일치 시키고 뒤에 epoch 를 붙인다

epoch 대신 yyyyMMdd.HHmm 로 바꾸자 >

@skyofdwarf
skyofdwarf / swiftgen-vs-r.swift.md
Last active November 3, 2022 01:54
SwiftGen vs R.swift 당신의 선택은?

뭘 쓸까? 일주일 후 까먹을 나를 위해 간단한 메모

  • 스토리보드, xib: SwiftGen에서 지원을 안하기 때문에 R.swift를 사용
  • 스트링: .으로 중첩구조가 가능한 SwiftGen를 선택

나머지는... R.swift? 필요할 때 더 고민하자.

SwiftGen

@skyofdwarf
skyofdwarf / UITextView-dynamic-height.md
Created June 29, 2022 02:29
UITextView 동적 높이 변경

UITextView 동적 높이 변경

채팅 입력창 같은 경우 사용자가 입력한 메시지의 라인 수에 따라 채팅창 높이가 동적으로 변경되는 UI를 흔히 볼 수 있다. 메시지 입력 시 높이 조절과 스크롤이 이상하게되는 문제를 해결하다 발견한 내용을 짧게 남긴다.

레거시 코드는 UITextView.contentSize.height 를 텍스트높이로 사용하고 있었는데 텍스트가 여러줄이 되면서 정확한 값을 주지 않고 있었다. 검색해보니 iOS 7 이전에 사용하던 방식이라네.

그래서 -[NSLayoutManager usedRectForTextContainer:] 요놈을 사용하려고 했는데 값을 잘 주는가 싶더니 라인개행이 될 때 마다 한번씩 더 작은 값을 던져줘서 사용 포기, 왜 이러는거지? 어쩔 수 없이 역시나 -[NSAttributedString boundingRectWithSize:options:context:] 를 사용해야지.

채팅창을 최대 3줄로 만든다고 하면 대충 이런 식

func textViewDidChange(_ textView: UITextView) {
@skyofdwarf
skyofdwarf / YPImagePicker-bug.md
Created June 24, 2022 07:38
YPImagePicker 버그

YPImagePicker 버그

참여한 프로젝트에서 사진첩으로 YPImagePicker를 사용하고 있었는데 iOS 14에 추가된 '사진 선택'권한 관련한 기능추가 후 테스트를 하다 만난 YPImagePicker 버그들을 간단히 정리해본다.

이슈는 크게 '사진 선택' 권한으로 사진첩 사용 중 권한사진을 추가/삭제 할 경우 오동작과, 인덱스 기반의 선택항목 관리로 인한 오동작 2가지이다.

대충 겪은 이슈들은

  • 앨범 A에서 마지막 사진 P 선택하고 사진 P가 있지만 사진 수가 더 적은 앨범 B로 이동 후, 다른 사진을 선택 후 재선택 하면 크래쉬
  • 멀티셀렉션 상태에서 사진을 1개만 선택후 진행하면 crop 미적용
  • 사진 선택 후, 권한을 제거해도 진행이 가능하며 계속하면 크래쉬
  • n번째 사진 A를 선택 후 crop 조정하고 다른 앨범 변경 후 n번째의 다른 사진 B를 선택 후 crop 조정하면 사진 A의 crop이 변경되는 문제
@skyofdwarf
skyofdwarf / PHPhotoLibrary-requestAuthorization-handler-not-called.md
Last active December 28, 2023 03:06
iOS 14>=, '선택한 사진' 권한 선택 시 handler 미호출 이슈 및 대응

iOS 14 >=, '선택한 사진' 권한 선택 시 handler 미호출 이슈 및 대응

이슈

PHPhotoLibrary.requestAuthorization(:_) 또는 PHPhotoLibrary.requestAuthorization(for:handler:) 로 사진권한 요구 시 사용자가 '사진 선택'을 고르면, 사용할 사진을 고를 수 있도록 시스템 이미지피커가 기본 모달스타일(UIModalPresentationStyle.pageSheet)로 뜨게 된다. 이 때 '취소/완료' 버튼을 누르면 전달한 handler가 호출되지만, 피커를 아래로 끌어당겨(pull to dismiss?) 닫게 되면 handler가 호출되지 않는 이슈가 있다.

같은 이슈의 질문을 찾았지만 같은 이슈를 고민하는 사람이 있다는걸로 만족.. https://stackoverflow.com/questions/65351479/phphotolibrary-requestauthorizationfor-handler-does-not-calls-handler-block

커스텀 앨범

커스컴 앨범처럼 PHAsset.fetchAssets(...)를 바로 호출할 경우 사진권한이 .notDetermined이면 자동으로 사진권한 요구팝업이 뜨게 되는데 이 때는 사용자가 확인/취소 버튼이 아닌 피커를 땡겨 닫아버려도(pull to dismiss) fetchAssets(...)가 빈 목록을 리턴할테고 이 빈 목록으로 UI로 대응이 가능할 것이다.

@skyofdwarf
skyofdwarf / Privacy-Violation-iOS-Property-List.md
Created June 2, 2022 07:10
소스코드 취약점 검사대상 예외

소스코드 취약점 검사대상 예외

plist에 포함된 key값들이 Privacy Violation: iOS Property List 카테고리로 취약점검사에 포함될 수 있다. 하지만 해당 키값이 취약점 검사대상이 아닐 수 있다. 아래 몇개 사항을 보자.

@skyofdwarf
skyofdwarf / prevent-specific-subview-from-autolayout-animation.md
Created April 26, 2022 08:44
AutoLayout Animation이 특정 서브뷰까지 애니메이션 시킬 때

AutoLayout Animation이 특정 서브뷰까지 애니메이션 시킬 때

가끔씩 에니메이션을 할 때 원하지 않는 서브뷰 까지 같이 애니메이션이 되어 버리는 경우가 있다. 예를 들어, 아래 코드와 같이 애니메이션 호출 전 버튼의 selected값이 바꾸는 코드가 있다고 하자.

self.someButton.selected = false;
UIView.animate(withDuration: 1) {
  ...
  self.view.layoutIfNeeded()
}