반응형

iOS/Swift + Objective-c 81

[iOS] No such module 'XCTest' 해결 방법

프로젝트 생성 시, Include Tests 옵션을 선택하지 않고 만들었다. 이후, Unit Test가 필요하여 파일을 추가한 후 import XCTest를 하니 위처럼 오류가 발생하였다. 해결 방법은 간단하다. TARGETS > Build Options > Enable Testing Search paths 옵션을 'Yes'로 변경해 주면 된다.  Enable Testing Search Paths 옵션에 대한 설명은 아래와 같다.테스트 관련 라이브러리나 프레임워크에 대한 컴파일 및 링크가 필요한 검색 경로를 추가해야 하는지 여부를 지정하며, 프로젝트 생성 시 테스트를 포함하면 자동으로 활성화된다. 하지만 프로젝트 생성 시, 테스트를 포함하지 않았으니 No로 되어있었고, Yes로 변경해주니 정상 작동한다!..

[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 - 암호나 암호화 키와 같은 비밀을 저장하려면 키체인 항목으로 패키징 - 키체인 아이템은 데이터 ..

[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..

[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' ..

[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..

[Swift/Objective-c] 타이머 사용하기, 반복 작업하기 (Timer)

타이머(Timer) 사용하는 방법, 타이머 사용해서 반복 작업하는 방법 타이머는 아래와 같은 상황에 사용합니다. 일정 시간 이후에 처리할 일이 있을 때 일정 시간 간격으로 반복해서 처리할 일이 있을 때 Github Sample Swift https://github.com/eunsuu1015/SwiftSample/tree/master/Timer GitHub - eunsuu1015/SwiftSample Contribute to eunsuu1015/SwiftSample development by creating an account on GitHub. github.com Objective-C https://github.com/eunsuu1015/ObjCSample/tree/main/Timer GitHub - e..

[Swift] CustomView 사용하기 (ReusableView, 재사용 가능한 뷰)

CustomView, ReusableView, 재사용 가능한 뷰 사용하는 방법 공통적으로 쓰이는 View를 1개 만들어서, 여러 화면(ViewController)에서 사용할 수 있는 방법입니다. Github Sample https://github.com/eunsuu1015/SwiftSample/tree/master/ReusableView GitHub - eunsuu1015/SwiftSample Contribute to eunsuu1015/SwiftSample development by creating an account on GitHub. github.com 목차 1. ReusableView 생성 a. ReusableView.swift 생성 b. ReusableView.xib 생성 2. ReusableV..

[Swift / Objective-c] 디바이스 모델명, OS 버전 조회 (Device Model, OS Version, iPhone/iPad/iPod)

Swift와 Objective-c에서 디바이스 모델명, OS 버전을 조회하는 방법 (iPhone, iPad, iPod) iOS에서 디바이스 모델 조회 시, 아래와 같이 조회가 됩니다. (디바이스 모델) iPhone11,8 iPhone12,5 위와 같은 형식을 원하는 경우도 있지만 아래처럼 원하는 경우도 있죠. (디바이스 모델명) iPhone XR iPhone 11 Pro Max 위 두 가지를 조회하는 방법 모두 있습니다. 방법 Swift // 디바이스 OS 버전 조회 func getOsVersion() -> String { return UIDevice.current.systemVersion } // 디바이스 모델 조회 func getModel() -> String { var systemInfo = uts..

[Objective-c] 메일 보내기 (Mail - MFMailComposeViewController)

iOS에서 Mail 앱 사용해서 메일 보내는 방법 조건 디바이스 Mail 앱에 로그인이 되어있어야 함 사용 방법 MFMailComposeViewController를 사용합니다. https://developer.apple.com/documentation/messageui/mfmailcomposeviewcontroller #import if([MFMailComposeViewController canSendMail]) { // mail 보내기 가능 MFMailComposeViewController *mailCont = [[MFMailComposeViewController alloc] init]; mailCont.mailComposeDelegate = self; [mailCont setSubject:@"메일 제..

[iOS] 호기심에 해보는 Framework Embed 버전 테스트

단순 호기심에 해보는 Dynamic Framework Embed, 버전 테스트 테스트 중첩 Embed 하여 사용하는 프레임워크의 버전이 다른 경우, 어떤 버전을 사용하는지? 구성 A 프레임워크 : 일반 프레임워크 B 프레임워크 : A 프레임워크를 Embed 하는 프레임워크 C 프로젝트 : A 프레임워크와 B 프레임워크를 Embed 하여 사용하는 iOS 응용 프로그램 (앱) 테스트 상황 1 B 프레임워크 : A 프레임워크 버전 1 Embed C 프로젝트 : A 프레임워크 버전 2 Embed + B 프레임워크 Embed Q. C 프로젝트에서 A 프레임워크 사용 시 어떤 버전의 A 프레임워크를 사용할까? A. C 프로젝트에 있는 버전 2 사용 Q. C 프로젝트에서 B 프레임워크를 통해 A 프레임워크 사용 시 ..

[iOS] 상태바 아이콘 색상 변경 방법 (Status Bar Style)

iOS 상태바 아이콘(텍스트) 색상 변경 (Status Bar Style 변경) Info.plist에서 설정해주면 됩니다. 1. UIViewControllerBasedStatusBarAppearance 설정 false로 설정합니다. UIViewControllerBasedStatusBarAppearance 2. UIStatusBarStyle 설정 원하는 색상으로 설정 UIStatusBarStyle UIStatusBarStyleDarkContent// 상태바 검정색 아이콘 설정 // or UIStatusBarStyleLightContent// 상태바 흰색 아이콘 설정 Info.plist를 Property List로 확인하면 아래 항목입니다.

[iOS] Safe Area Top, Bottom 높이 조회 (status bar height)

Safe Area Top과 Bottom 높이 조회하는 방법 Safe Area Top 높이는 Status bar 높이와 동일합니다. Objective-c if (@available(iOS 11.0, *)) { UIWindow *window = UIApplication.sharedApplication.windows.firstObject; CGFloat top = window.safeAreaInsets.top; CGFloat bottom = window.safeAreaInsets.bottom; NSLog(@"top : %f", top); NSLog(@"bottom : %f", bottom); } Swift if #available(iOS 13.0, *) { let window = UIApplication.sh..

[iOS] 인증 토큰 방식 푸시 알림(APNs) 및 키 생성 방법 (p8 파일)

인증 토큰 방식 푸시 알림(APNs) 및 키 생성 방법 iOS에서 푸시 알림을 사용할 수 있는 방법은 2가지가 있습니다. 인증 토큰 사용 방법 인증서 사용 방법 차이점은 아래와 같습니다. - 인증 토큰 방법 인증서 방법 유효기간 없음 1년 환경 개발 및 프로덕션 개발 or 개발 및 프로덕션 (2가지) 사용 앱 모든 앱에서 사용 앱마다 개별 생성 Apple에서 권장하는 방법은 인증 토큰을 사용하는 방법입니다. 인증 토큰 방식은 유효기간이 없으며, 하나의 키만 생성하면 모든 앱에서 사용할 수 있기 때문에 더 간편합니다. 참고사항 키는 생성 후 한 번만 다운로드할 수 있으며, 이후에 다시 다운로드할 수 없습니다. 때문에 키를 다운로드한 후 안전한 곳에 백업해두어야 합니다. 계정 당 APNS 키는 최대 2개만 ..

[Swift] 카카오링크 API 구현하기 (카카오톡 메시지 보내기)

iOS Kakao SDK를 사용해 Swift에서 카카오링크 API를 구현하는 방법입니다. 기능 설명 카카오링크 API는 카카오톡 친구에게 카카오톡 메시지를 보내는 기능입니다. 카카오링크 API를 사용해서 카카오톡 친구나 채팅방에 메시지를 공유하는 방법은 크게 두 가지가 있습니다. 카카오링크 API 카카오톡 메시지 API 두 API 차이점은 간략하게 카카오링크 API는 카카오톡에서 알아서 해주기 때문에 비교적 간단하며, 카카오톡 메시지 API는 친구 목록 가져오기 등 직접 구현해야 하는 불편함들이 있습니다. 이 글은 카카오링크 API를 사용해서 공유하는 방법을 설명합니다. 샘플 프로젝트 모두 구현된 샘플 프로젝트는 아래 깃헙 링크에서 확인해주세요. https://github.com/eunsuu1015/Ka..

반응형