반응형

Swift 10

Swift 시간복잡도 빅오(Big-O) 주요 예제

시간복잡도는 알고리즘이 특정 작업을 수행하는 데 필요한 연산 횟수를 입력 크기에 따라 표현한 것입니다. 입력 크기가 증가하면 알고리즘이 얼마나 더 느려지는지 평가하는 데 사용됩니다. 이를 통해 효율적인 알고리즘을 설계하거나 선택할 수 있습니다.  1. 시간복잡도 표기법: 빅오(Big-O) 표기법시간복잡도는 **입력 크기(n)**에 따라 알고리즘의 성능을 표현합니다.**빅오 표기법(Big-O Notation)**은 입력 크기가 커질수록 가장 중요한(가장 빠르게 증가하는) 항만 남기는 방식입니다.주요 빅오 표기법1. O(1) - 상수 시간입력 크기와 관계없이 항상 일정한 시간.예시: 배열에서 인덱스를 이용해 값을 바로 찾기. let value = array[3] // O(1) 2. O(log n) - 로그 ..

프로그래밍 2024.11.22

[IOS/ Swift] 메인스레드 작업 우선순위 - Activity Indicator 지연문제

문제 상황Activity Indicator를 사용해 로딩표시를 하려는데, 로딩 시작할때 안뜨고 로딩이 다 끝날때쯤 반짝 뜨고 사라짐.Chat GPT와 몇번의 대화를 통해 실마리를 잡음. 메인스레드에서 뒤에오는 작업(로딩부분)에 밀려서 인디케이터가 나중에 뜸.  @objc private func okButtonPressed() { mainView.activityIndicator.startAnimating() //인디케이터 작동명령 DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { //딜레이 주기 if let pdfData = PDFManager.shared.makePDF(...) { let activityViewC..

iOS 2024.11.07

[iOS] Widget에서 이미지 로드 실패(Failed to load image in Widget)

"Conclusion: Ensure that images displayed in the widget are less than 1000 pixels in length!"(너무 고생해서 영어로도 적어둠. 지구촌 화이팅) 위젯에서 이미지 로드가 실패하는 경우가 생김위젯킷에서 디버깅이 까다롭기도 하거니와,이미지 로드가 실패하면 이미지뿐 아니라 위젯 화면 자체가 안나와서당최 문제를 찾기가 너무 힘들다. 내 경우에는 예전에 앱에 저장된 이미지 파일(사진)을 로드하는데 실패해서 고생하다가,위젯 메모리 이슈가 있을수 있다는 말을 듣고, 사진을 리사이징해서 넘어갔던 경험이 있다. 그렇게 한참 잘 쓰다가, iOS18 업데이트 이후 Asset에 있는 기본 이미지 로드를 위젯이 못해서 다시 문제가 생김앱 내 이미지는 잘 로드..

iOS 2024.09.27

[iOS] UIView를 UIImage로 만들기: 이미지 백그라운드컬러 바꾸기

환경>Swift, UIKit 이슈>UIView를 UIImage로 만들어서 PDF파일을 생성하는 과정에서 백그라운드색 통제가 안됨 삽질> UIView 백그라운드가 안먹는줄 알고(투명이었음), 백그라운드컬러 설정 시점을 여러번 바꿔봄>뷰 백그라운드는 문제 없었고 이미지 배경색이 문제였음 해결>이미지 렌더링 과정에서 이미지 백그라운드 설정  func asImage() -> UIImage { let renderer = UIGraphicsImageRenderer(bounds: bounds) return renderer.image { rendererContext in // 배경색 설정 UIColor.white.setFill() ..

iOS 2024.06.29

[iOS/Swift] Xcode15 업데이트후 빌드실패: WidgetKit Framework 중복 복사 이슈

Xcode 15로 업데이트 이후에 빌드가 안되는 이슈 발생 메시지: error: Cycle inside myApp; building could produce unreliable results. 구글링 해보니 프로젝트->빌드페이즈에서 빌드 순서를 바꿔보라는 의견이 많았지만 실패.(런스크립트를 컴파일소스보다 위에 오도록) Chat GPT에 물어보다가 위젯킷 중복문제 언급을 하길래 이것저것 눌러보다가 Copy only when installing 버튼을 발견 프로젝트 설정에서 'WidgetKit.framework'을 제거한 후, 다시 추가해보세요. 이때 'Copy items if needed' 옵션이 선택되어 있는지 확인하세요. 라는 말도 했기 때문에 뭔가 이거다 싶었다. 활성화 하고 해결되었다. 위젯킷 프레..

iOS 2023.12.08

[iOS/Swift] ImageView Zoom기능: Scrollview 보다 Imageview가 커지는 문제

스크롤뷰(scrollview)와 핀치제스쳐를 이용하여 이미지를 확대시키는 화면 만들기. 1. 스크롤뷰와 이미지뷰 제작(이미지뷰 프레임 설정 주의) 2. 스크롤뷰 델리게이트 할당 3. 스크롤뷰델리게이트 프로토콜 함수 생성 4. 탭제스쳐 설정 코드는 어렵지 않은데, 막혔던 부분이 있었다. 이미지가 스크롤뷰의 프레임을 넘어가는 크기일때, 이미지 크기가 스크롤뷰 크기에 맞춰지는게 아니라, 스크롤뷰의 컨텐트뷰가 늘어나서 약간 확대되어 보인다는 점이었다. 이유는 기존에 이미지뷰의 Constraints를 잡을때 make.edges.equalToSuperview()로 잡아서였다. 크기를 설정한게 아니라, 수퍼뷰와 끝을 맞게 설정해버려서, 아마 스크롤뷰 특성상 컨텐트뷰가 서브뷰인 이미지뷰의 크기에 맞게 늘어난거같다. 가..

iOS 2023.12.07

[iOS/Swift]애드몹 광고 게재 제한 사례: 과도한 호출로 인한 무효 트래픽

iOS 앱에 애드몹 배너광고를 추가한 지 4일만에 게재 제한을 먹었습니다. 클릭수 고작 3에 노출도 거의 안되는데, 내 기기도 테스터로 넣었는데, 너무 억울한 마음이 들었습니다. 하지만 꼼꼼히 살펴보니 정지 먹을 만 했더군요.(매번 내잘못인데 매번 남탓하게 됩니다) 이유: 과도한 요청 광고 노출에 비해 호출(요청)되는 양이 너무 많았습니다. 배너 하나 부르는데 통신이 여러번 시도되어서 무효 트래픽으로 잡힌 것 같더군요. 즉 코드를 잘못 짰습니다. 광고 잘 나오니 확인도 제대로 안하고 업데이트 한 죄였습니다. 구체적인 이유는 두가지 입니다. 1. 배너를 뷰컨트롤러 위에 추가한게 아니라, 테이블뷰의 헤더 안에다 넣었는데, 테이블뷰가 리로드 될 때마다 광고가 새로 호출이 되었습니다. 2. 반복코드를 줄이려고 ..

iOS 2023.10.02

[iOS/Swfit] PHAsset으로 날짜별 사진 가져오기: PHImageManager

기기의 사진첩에 접근하여 특정 날짜의 사진을 가져다 쓰는 법 입니다. 우선 특정 날짜의 사진에 대한 PHAsset을 가져옵니다. 사진 이미지를 전체 불러와서 처리하는게 아니라 PHAsset만 들고 있다가 최후에 이미지를 가져오는 것이기 때문에, PHAsset을 처리하는건 이미지 불러오기처럼 오래 걸리진 않습니다. import Photos private func fetchPhotosForDate(date: Date)-> [PHAsset] { let options = PHFetchOptions() let calendar = Calendar.current let startOfDay = calendar.startOfDay(for: date) let endOfDay = calendar.date(byAdding: ..

iOS 2023.09.21

[iOS/Swift] 애드몹(AdMob) 테스트 기기 등록: IDFA 확인

애드몹 배너 달고 부정클릭으로 정지되는 경우가 생각보다 많은 것 같습니다. 단순 노출은 웬만하면 괜찮다는 말도 있지만 조심하면 좋겠지요. 애드몹에서 테스트 기기 등록이 가능 하니 괜히 맘 졸이지 말고 쓰는게 나을 것 같아서 소개드립니다. 사실 기기 등록 자체는 쉬운데 IDFA 확인이 아주 약간 귀찮습니다. 애드몹 테스트 기기 등록 일단 애드몹 설정에서 기기테스트 탭으로 가신 후에, 테스트 기기 추가 버튼을 누릅니다. 쓰라는거 쓰고 저장 하면 되는데, 이쯤에서 좀 헷갈리는게 "앱 추적 투명성" 설정과 "IDFA 찾기" 입니다. 앱 추적 투명성 확보 앱 추적 투명성은 이 시점에 이미 되어있는 분들이 많으실겁니다. 참고로 SKAdNetwork은 iOS 14 이후 생긴 기능인데요, iOS 14 이후에 IDFA ..

iOS 2023.09.20

위젯 Realm migration시 주의사항

기본 프로젝트가 위젯과 타겟이 달라서 realm을 같이 쓰려면 앱그룹을 만들어서 사용해야하는데. 이번에 마이그레이션이 자꾸 안돼서 보니 appDelegate랑 위젯 안에서 둘다 마이그레이션을 해줘야 한다는걸 깨달았다. 기존에는 스키마 버전과 패스만 넣어서 양쪽에서 사용했는데, 위젯 먼저 호출이 되어서 앱델리게이트의 마이그레이션 블록이 실행될때는 이미 스키마 버전이 최신이라서 마이그레이션 블록이 실행이 안된건지, 아니면 위젯과 따로 데이터베이스가 생겨서 에러가 난건지는 잘 모르겠다. 참고로 마이그레이션 블록은 블록 내에 실행할 명령이 없거나 최신이면 아예 호출이 안되는것 같다. final class DatabaseManager { static let shared = DatabaseManager() priv..

iOS 2023.08.24
반응형