반응형

분류 전체보기 416

[SwiftUI] Invalid frame dimension (negative or non-finite). 해결 방법

SwiftUI에서 Text를 가로로 가득 채우려고 width에 .infinity를 추가했더니 아래와 같이 보라색 경고가 나타났다. 오류 코드 및 로그창에 표시됨. [SwiftUI] Invalid frame dimension (negative or non-finite). 프레임 치수가 잘못되었다는 이슈! 해결방법 1. width가 아닌 maxWidth 사용 Text("Hi") .frame(maxWidth: .infinity) .frame(height: 100, alignment: .center) 2. UIScreen 사이즈 사용 Text("Hi") .frame(width: UIScreen.main.bounds.width, height: 100, alignment: .center)

iOS/오류 해결 2023.11.08

[iOS] 응용 프로그램을 위한 유효한 ‘aps-environment’ 인타이틀먼트 문자열을 찾을 수 없습니다. 해결 방법

iOS에서 푸시를 사용하기 위해 registerForRemoteNotifications() 호출 시 아래와 같은 오류가 발생했다. 호출 코드UIApplication.shared.registerForRemoteNotifications() 발생 위치 application:didFailToRegisterForRemoteNotificationsWithError 발생 오류Failed to register: Error Domain=NSCocoaErrorDomain Code=3000 "응용 프로그램을 위한 유효한 ‘aps-environment’ 인타이틀먼트 문자열을 찾을 수 없습니다." UserInfo={NSLocalizedDescription=응용 프로그램을 위한 유효한 ‘aps-environment’ 인타이틀먼트..

iOS/오류 해결 2023.10.17

[Xcode] Project Name 변경 방법 (xcodeproj, 프로젝트명 변경)

Xcode 프로젝트명 변경 방법 글에서는 NameTest 프로젝트명을 NameChangeTest 프로젝트명으로 변경한다. 1. xcodeproj 파일명 변경 1-1. Xcode Navigator > 맨 위 프로젝트 파일 클릭 (xcodeproj 파일) 1-2. Enter 입력하여 원하는 이름입력 후 Enter 1-3. 아래와 같이 확인 창이 뜨면 "Rename" 클릭 2. Scheme 수정 2-1. Xcode > Product > Scheme > Manage Schemes... 선택 2-2. 변경할 Scheme(기존 프로젝트명) 선택 2-3. Enter 입력하여 원하는 이름입력 후 Enter 2-4. 변경 완료 3. 폴더명 변경 3-1. 프로젝트 폴더명 선택 3-2. 원하는 이름으로 변경 4. 폴더명 변..

iOS/기타 2023.09.14

[Xcode] Could not launch 해결 방법 (Failed to get the task for process)

Xcode 빌드 시 Build는 Success하고 앱이 실행되는것처럼 보이지만, 흰 화면만 나오고 Xcode에서 아래 오류를 출력하는 경우가 있다. Could not launch "Project Name" Failed to get the task for process Details를 누르면 이런 내용이 출력된다. Details Could not launch “Project Name” Domain: IDEDebugSessionErrorDomain Code: 3 Failure Reason: Failed to get the task for process 38123 User Info: { DVTErrorCreationDateKey = "2023-07-17 01:25:36 +0000"; DVTRadarCompon..

iOS/오류 해결 2023.07.17

[iOS] 웹뷰 디버깅 방법 - 사파리로 웹뷰 디버깅 (WebView, Safari)

iOS에서 사파리로 웹뷰 디버깅하는 방법 준비물은 아이폰, 맥, 웹뷰 프로젝트입니다. 1. 아이폰 설정 앱에서 옵션 설정 설정 앱 > Safari > 고급(맨 아래에 있음) > '웹 속성' ON 2. 맥 사파리 메뉴에서 옵션 설정 Safari 메뉴 > 설정... > 고급 > '메뉴 막대에서 개발자용 메뉴 보기' 체크 상단 Safari 메뉴에 '개발자용' 메뉴가 추가됨 3. 프로젝트 실행 웹뷰 URL은 구글(https://www.google.com)로 진행 4. 맥 사파리에서 디버깅 진행 Safari 개발자용 메뉴 > 디바이스명 > 프로젝트 하단 URL 선택 디바이스에 실행 중인 프로젝트와 URL 목록을 선택 아래와 같이 웹 속성 창이 출력됨 ※ 참고사항 1. 맥과 아이폰이 케이블로 연결되어있어야 함 2...

[Swift] 날짜 다루기, 오늘 날짜 조회, 시간 계산 (Date, Calendar, DateComponents)

Swift에서 시간 다루는 방법 Date, Calendar, DateComponents 설명 및 사용 방법 1. Date A specific point in time, independent of any calendar or time zone. 달력이나 시간대와 관계없이 특정 시점입니다. 1) 현재 시간 가져오기 let date = Date() 2) Date를 원하는 Format으로 가져오기 (Date -> String) let date = Date() let dateFormatter = DateFormatter() dateFormatter.dateFormat = "yyyy-MM-dd HH:mm"// Format 설정 let dateString = dateFormatter.string(for: date) ..

[Swift / Objective-c] 디바이스 USIM 확인하기 (유심 확인)

디바이스에 USIM이 있는지, 통신사 등 확인하는 방법 CTTelephonyNetworkInfo를 사용하여 providers를 조회하여 USIM 유무를 확인한다. mobileNetworkCode와 mobileCountryCode를 확인하여 유심이 있는지 확인한다. 테스트한 결과, 6s는 providers가 1개, 아이폰 13 mini, Xr, 11 pro max는 providers가 2개 조회된다. 아마도 USIM, eSIM을 지원하는 디바이스에서는 Providers가 2개 조회되는 듯하다. USIM 1개만 존재하는 경우, 모든 providers를 조회하여 mobileNetworkCode가 있는 경우를 USIM이 있는 경우로 판단한다. Swift import CoreTelephony let network..

[Swift] 키체인 설명 및 사용 방법 (Keychain)

키체인이란 무엇인지, 어떻게 사용하는지 간단하게 설명합니다. 키체인(Keychain)이란? - 암호화된 데이터베이스 - 즉, 데이터를 안전하게 저장할 수 있는 보관소 키체인 특징 - 앱을 삭제하더라도 데이터는 삭제되지 않음 - 키체인 아이템은 정보와 속성으로 구성됨 - iOS 앱은 단일 키체인에 접근할 수 있음 - 사용자 기기 잠금 상태에 따라 키체인 잠금 상태도 동일하게 유지됨 Keychain Service API - 키체인이라는 암호화된 데이터베이스에 사용자 데이터를 안전하게 저장하는 API - 단순한 비밀번호뿐 아니라 신용 카드 정보, 인증서 등 다양한 항목을 저장할 수 있음 Keychain Items - 암호나 암호화 키와 같은 비밀을 저장하려면 키체인 항목으로 패키징 - 키체인 아이템은 데이터 ..

[iOS] localizedDescription error 'the operation couldn’t be completed' 해결 방법

Swift에서 Custom Error 정의 후 에러 메시지를 가져오기 위해 localizedDescription를 호출하면 아래와 같은 오류가 발생했다. The operation couldn't be completed 해당 오류는 localizedDescription 이 정의되지 않았을 경우 디폴트로 보여주는 localizedDescription이다. LocalizedError를 준수하는 localizedDescription는 아래와 같이 public var errorDescription: String?로 정의해야 한다. extension MyError: LocalizedError { public var errorDescription: String? { switch self { case .invalidU..

iOS/오류 해결 2022.09.22

[iOS] CocoaPods 'Oh no, an error occurred.' 해결 방법

M1 아이맥에서 CocoaPods Install 또는 Update 시 아래와 같은 오류가 발생한다. ――― TEMPLATE END ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― [!] Oh no, an error occurred. Search for existing GitHub issues similar to yours: https://github.com/CocoaPods/CocoaPods/search?q=dlopen%28%2FLibrary%2FRuby%2FGems%2F2.6.0%2Fgems%2Fffi-1.15.5%2Flib%2Fffi_c.bundle%2C+0x0009%29%3A+tried%3A+%27%2FLibrary%2FRuby%2..

iOS/오류 해결 2022.09.20

[Swift] UITabBarController 이미지 설정

UITabBarController에서 tabBarItem에 이미지를 적용시킬 경우 아래와 같이 설정한다. navigationController.tabBarItem.image = UIImage(named: "image.png") navigationController.tabBarItem.selectedImage = UIImage(named: "selectedImage.png") 위와 같이 진행할 경우, 이미지가 tntColor로 모두 채워지는 문제가 있는데, 그럴 때는 아래와 같이 renderingMode를 alwaysOriginal로 설정해준다. navigationController.tabBarItem.image = UIImage(named: "image.png")?.withRenderingMode(.al..

[Swift] FileManager로 디바이스에 파일 저장하기 (Document)

FileManager 사용하여 디바이스에 파일 저장하기 (Document) 아이폰에 기본적으로 있는 '파일' 앱에 파일을 저장하는 방법입니다. 목차 사용 방법 저장된 파일 확인 참고사항 사용 방법 1. 코드 작성 설명은 주석을 확인해주세요. let fileManager = FileManager.default // 도큐먼트 URL let documentURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask).first! // 도큐먼트 URL에 생성할 폴더명 let directoryURL = documentURL.appendingPathComponent("FolderName") do { // 폴더 생성 try fileManager.create..

[iOS] Binary operator '+' cannot be applied to operands of type 'DispatchTime' 해결 방법

Binary operator '+' cannot be applied to operands of type 'DispatchTime' and 'Int' 오류 해결 방법 DispatchQueue.main.async 호출 시 deadline(DispatchTime)에 아래와 같이 Int 입력 시 오류가 발생한다. DispatchQueue.main.asyncAfter(deadline: .now() + 1) {// 오류 // code } 발생 오류 Binary operator '+' cannot be applied to operands of type 'DispatchTime' and 'Int' 해결 방법 let afterTime = DispatchTimeInterval.seconds(1) DispatchQueue...

iOS/오류 해결 2022.07.01

[MAC] Apple에서 악성 소프트웨어가 있는지 확인할 수 없기 때문에 열 수 없습니다. 문제 해결

간혹 MAC에서 출처를 알 수 없는(?) 소프트웨어(앱)를 사용하려고 할 때 아래와 같은 오류가 발생하며 실행할 수 없다. Apple에서 악성 소프트웨어가 있는지 확인할 수 없기 때문에 열 수 없습니다. 해당 오류를 해결하는 방법은 아래와 같다. 1. 시스템 환경설정 앱 실행 후 '보안 및 개인 정보 보호'로 이동 2. '일반' 탭으로 이동 후 하단에 소프트웨어명 확인 후 오른쪽 '확인 없이 열기' 클릭 '확인 없이 열기' 버튼을 클릭하면 아래처럼 안내 영역이 사라진다. 3. 소프트웨어를 다시 열어서 '열기' 클릭 이제부터 문제없이 소프트웨어 사용이 가능하다!

iOS/기타 2022.06.30

[HTTP] 상태 코드 (Status Code)

HTTP 상태 코드1XX~5XX 설명 1XX : Information 서버가 요청을 받았으며, 처리 중인 경우 현재 거의 사용하지 않음 2XX : Successful 200 OK 요청 성공 201 Created 요청 성공하여 새로운 리소스가 생성됨 202 Accepted 요청을 수신했지만 응하여 처리하지 못함 203 Non-Authoritative Information 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드파티 복사본에 모아졌음을 의미 204 No Content 요청 성공했지만, 응답 페이로드 분몬에 보낼 데이터가 없음. 헤더는 의미 있을 수 있음 3XX : Redirection 3XX 응답의 결과에 Location 헤더가 있으면 Location 위치로 자동 이동함(..

IT/HTTP 웹 2022.06.22

[Objective-c] SQL Cipher 사용하여 db 암호화하는 방법

iOS에서 SQL Cipher 사용하는 방법 SQL Cipher는 database 전체를 암호화해주는 오픈소스 라이브러리이다. 목차 1. SQL Cipher 사용 방법 2. 암호화 적용되었는지 실제 기기에서 확인하는 방법 1. SQL Cipher 사용 방법 1. framework 추가 Project > TARGETS > General > Frameworks, Libraries, and Embedded Content 이동 후 Security.framework 추가 2. CocoaPod 추가 pod 'SQLCipher', '~>4.0' 추가 # Uncomment the next line to define a global platform for your project # platform :ios, '9.0' ..

[SQLite] SQLite 주요 API

SQLite 주요 API Objective-C에서 사용하는 API 위주로 설명한다. sqlite3_open() 데이터베이스 파일이 있다면 파일을 열고, 없다면 생성 후 연다. 성공 시 SQLITE_OK 리턴한다. int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); * 데이터베이스 파일 open, close의 경우는 상황에 따라 처리한다. - 많은 양을 빠르게 작업할 때 작업 시작 시 open, 완료 후 close 진행 - 적은 양을 처리할 때, 작업 별로 open, close 진행 sqlite3_close() 데이터베이스 파일을 닫는다. 성공 시 ..

IT/기타 2022.06.16

[Swift / Obejctive-c] UIView를 UIImage로 변환하기 (render UIView to UIImage)

Swift, Objective-C에서 UIImage를 UIImage로 변환하는 방법 (render UIView to UIImage) Swift func viewToImage(view: UIView) -> UIImage { let renderer = UIGraphicsImageRenderer(size: view.bounds.size) let image = renderer.image { context in view.drawHierarchy(in: view.bounds, afterScreenUpdates: true) } return image } Objective-c - (UIImage*)viewToImage:(UIView*)view { UIGraphicsImageRenderer *renderer = [[UI..

반응형