분류 전체보기 (104) 썸네일형 리스트형 정확한 위치 정보 이전 글[https://greate-future.tistory.com/89] 에 이어서 ... iOS14부터 정확한 위치정보를 수집할 수 있다. 위치정보 수집승인을 요청하면 아래와 같은 팝업이 발생하는데, 지도가 보이는 View에 “정확한 위치: 켬”이 보인다. 이 부분을 터치하면 끔으로 바뀌게 되는데 지도도 축소되고 내 위치의 범위가 수킬로미터로 늘어나게 된다. 한 눈에 봐도 정확한 위치를 안쓴다고 따악 알려주는구나. 정확한 위치정보를 수집하지 않으면 사용자의 위치를 제대로 가져오기가 힘들다. 만약 앱이 네비게이션같은 기능을 사용해야 하다면 반드시 정확한 위치에 접근 하도록 코드를 수정해야한다. 정확한 위치 정보를 사용하는 앱의 동작을 한번 예시로 보겠다. 네이버 지도앱에서 정확한 위치 권한을 끄고 켰.. 위치 정보 가져오기(CoreLocation, CLLocationManager) 위치권한이 필요한 프로젝트를 진행하면서, 계속 검색을 하다가 이제는 필요한 내용을 기록해야 겠다는 생각이 들어서 작성한다. 사용자의 위치권한을 받아야 하는 경우는 많지만 개인적으로 필요한 이유는, Wi-Fi 정보를 읽기 위해서였다. 디바이스가 붙어있는 Wi-Fi 정보를 가져오려했더니 위치정보를 켜야한다나… 이쪽은 또 처음이다 보니 일단은 그런가 보다 하고 시작했다. 1. CoreLocation 위치정보를 가져오기에 앞서 import 해야할 Framework이다. https://developer.apple.com/documentation/corelocation Apple Developer Documentation developer.apple.com coreLocation은 장치의 지리적 위치, 고도, 방향.. Code Coverage 확인하기 테스트코드가 앱의 실제 코드를 어느정도까지 테스트하고 있는지 그 진행도를 확인 할 수 있다. 1. Product -> Scheme -> Edit Scheme 2. Test -> Option Code Coverage 에 Gather coverage 체크 3. CodeCoverage 확인 Command + U 단축키를 눌러 테스트 코드 실행 후 ReportNavigation탭으로 이동하면 Coverage가 보인다. Unit Test 작성해보기2 이전 내용(https://greate-future.tistory.com/86)에 이어서 로또 번호를 검증하는 기능에 대해 테스트를 해보자. LottoMachine은 아래와 같이 번호검증 메서드를 갖는다. struct LottoMachine { func isValidLottoNumbers(of numbers: [Int]) -> Bool { guard numbers.count == 6, Set(numbers).count == 6 else { //1 return false } for num in numbers { //2 guard 1...45 ~= num else { return false } } return true } } //1 isValidLottoNumbers로 전달된 numbers의 요소 갯수 검사를.. Unit Test 작성해보기1 @testable 테스트케이스를 작성하기에 앞서 UnitTest파일의 상단에 아래와 같은 형식으로 코드를 작성 해줘야 한다. @testable import "타겟 이름" @testable은 Unit Test가 실제 앱 타깃에 있는 코드에 접근 하도록 하는 키워드이다. 위 @testable 은 UnitTestSample 이라는 타겟에 접근하기 위한 것으로, 보통의 앱 코드는 기본적으로 Internal 접근제어를 갖게 되는데 testable 키워드를 통해 테스트 하는 동안 다른 타겟에서 접근을 허용하도록 해주는 것이다. 아래 구조체에 대한 테스트 케이스를 작성해보자. struct StrangeCalculator { func addNumbers(of numbers: [Int]) -> Int { return n.. Unit Test 파일 살펴보기 프로젝트 네비게이터에서 여섯번째 탭으로 이동하고 , 왼쪽 하단의. + 버튼을 눌러서 New Unit Test Target을 선택해준다. setUpWithError() setUpWithError는 각각의 테스트 케이스가 실행되기 전 마다 호출된다. 각 테스트 케이스를 모두 같은 같은 조건에서 실행될 수 있게 하는 메서드이다. 만약 테스트 케이스 A와 B가 같은 리소스를 사용하여 테스트를 하고 있을 때, 각 케이스가 다른 테스트 케이스로 인해 변경된 리소스를 사용해야 한다면 정상적인 테스트가 이뤄지지 않을 것이다. setUpWithError()는 이러한 현상을 방지하기 위해 초기화 코드등이 들어가는 부분이다. tearDownWithError() setUpWithError와 반대로 각각의 테스트 케이스 실행이.. FIRST 원칙 Fast 테스트는 빠르게 동작해야 한다. 프로젝트 규모에 따라 테스트 코드도 늘어나게 되고, 많은 테스트 코드는 시간을 소요하게 된다. 테스트 코드는 빠르게 확인하고, 수정할 수 있어야 의미가 있다. Independent/Isolated 각 각의 테스트는 독립적으로 동작하며, 서로 의존해선 안된다. 코드간 의존성이 높으면 테스트가 실패 했을 경우 원인을 찾는것에 어려움을 겪을 수 있으며 테스트 진행에 차질을 불러오기도 한다. Repeatable 테스트는 언제나 같은 결과를 내야한다. 매번 예상한 결과대로 테스트가 진행되게 해야한다. Self-Validating 테스트의 성공 여부는 테스트 코드 내부에서 스스로 검증 가능해야 한다. Timely 테스트 코드는 실제 코드를 구현 하기 직전 구현해야만 효율적이.. JsonString 에서 Dictionary로 변환 extension String{ func convertToDictionary() -> [String: Any]? { if let data = data(using: .utf8) { return try? JSONSerialization.jsonObject(with: data, options: []) as? [String: Any] } return nil } } 현재 네트워크 정보 가져오기 CNCopyCurrentNetworkInfo CNCopyCurrentNetworkInfo를 통해 현재 디바이스에서 사용중인 네트워크의 정보를 가져올 수 있다. CNCopyCurrentNetworkInfo사용 전에 알아야 할 것 아래 네 가지의 조건중 하나를 충족해야 정상적인 동작이 가능하다. 1. 앱이 위치권한(core location)수집에 대한 사용자의 수집을 받아야 한다. 2. 앱이 NEHotspotConfiguration API를 통해 네트워크를 구성한 경우 3. VPN 활성화 4. 응용 프로그램에 활성 NEDNSSettingsManager 구성이 설치된 경우(NEDNSSettingManager ? 잘 모름) 요구사항이 충족된다면 네트워크 정보를 리턴하고, 그러지 않을 경우 null을 갖는다. Deprecated CNCopyCurrentNe.. NEHotspotNetwork를 이용한 현재 Wi-Fi 상태 가져오기 Wi-Fi연결에 대한 이전 글에 이은 내용 NEHotspotNetwork는 명령 또는 응답과 관련된 Wi-Fi네트워크에 대한 정보다. 명령또는 응답이라는 말이 무엇을 말하는지 잘 모르겠지만... 아래와 같은 속성을 지니고 있다. 이전 게시물에서 NEHotspotConfigurationManager의 apply호출은 Wi-Fi 연결 성공여부를 알 수 없다고 했다. 대신 연결 시도 결과 error 를 받은 후, NEHotspotNetwork의 fetchCurrent를 호출하여 현재 Wi-Fi의 정보를 확인하면 된다. class func fetchCurrent(completionHandler: @escaping (NEHotspotNetwork?) -> Void) 1. Signing & Capabilities에.. 이전 1 2 3 4 5 6 7 8 ··· 11 다음