12월, 2019의 게시물 표시

[iOS] Print Override (Print 재정의 하기)

이미지
  [iOS] Print Override (Print 재정의 하기) 안녕하세요. 이번에 Print 문의 재정의 부분에 대한 코드 공유하려고합니다. 기존의 Objective C 언어부터 진행하셨던 개발자분들은 NSLog를 .pch 파일에 재정의하여 사용하시는 분들이 많은데요.   NSLog #ifdef DEBUG #define NSLog( s, ... ) NSLog( @"<%@:(%d)> %@", [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] ) #else #define NSLog( s, ... ) #endif 위 그림과 같이 [시간] [프로젝트명] <클래스명:(라인)> 내용 으로 출력이 가능합니다.    Print /// 2019. 12. 18 Kimjiwook /// Print문 재 정의 하여 사용함 /// - Parameters: /// - items: 출력시 사용될 내용 /// - separator: 여러 아이템일 경우 아이템 사이사이 넣을 값 /// - terminator: ... /// - file: 해당파일이름 (알아서 넣어줌) /// - line: 해당파일의 라인수 (알아서 넣어줌) /// - function: 해당파일의 호출된 함수 (알아서 넣어줌) public func printDZ(_ items: Any..., separator: String = " ", terminator: String = "\n", file: String = #file, line: Int = #line, function: String = #function) { let output = items.map { "\($0)" }.joined(separato

[iOS] 탈옥체크하기 (iOS Jailbreak Check)

  [iOS] 탈옥체크하기 (iOS Jailbreak Check) 탈옥한 폰에서 앱을 사용하는 것은 문제가 없을 수 있으나, B2B 업무에서는 정보의 보안에 대해 매우 중요하게 생각하고 있다. ipa를 빼거나 분석하여 내부에 있는 정보를 가져가는 행위를 막고자 극단적인 탈옥시 앱 팅기기를 구현해 놓았다. 탈옥구분하는 코드 공유차원으로 남겨놓는다.   Swift /// 탈옥여부 체크하기. @objc func isJailbroken() -> Bool { #if targetEnvironment(simulator) print("It's an iOS Simulator") return false #else print("It's a device") // 악의적으로 Cydia파일 경로를 수정하는 경우 SSH데몬, 쉘 인터프리터 위치 확인 및 탈옥 디바이스에서 애플리 케이션을 실행 하기 위해 필요한 Mobilesubstrate 파일 위치 체크 if FileManager.default.fileExists(atPath:"/Applications/Cydia.app") || FileManager.default.fileExists(atPath:"/Library/MobileSubstrate/MobileSubstrate.dylib") || FileManager.default.fileExists(atPath:"/bin/bash") || FileManager.default.fileExists(atPath:"/usr/sbin/sshd") || FileManager.default.fileExists(atPath:"/etc/apt") { ret

[iOS] KVC, KVO, KeyPath 알아보기

이미지
  [iOS] KVC, KVO, KeyPath 알아보기 안녕하세요. 이번에 Swift 버전의 KVC(Key Value Coding), KVO(Key Value Observing) 그리고 KeyPath 를 알아보려고 한다. 참고 Objc KVO :  https://xodhks0113.blogspot.com/2019/02/ios-kvokey-value-observing.html Objc KVC :  https://xodhks0113.blogspot.com/2019/01/ios-kvckey-value-coding.html Sample App :  http://github.com/kimjiwook/KVCDemo Swift 4.x 이상부터 KeyPath 접근하는 방식이 변경되었는데, 과거 버전에서 Property를 String 값으로 쓰다보니 오타 발생시 앱이 죽는현상때문에 꺼려지는 방식이였다면, 이번에는 Property 참조하는 방식으로 제공이 되어 생각보다 편하게 사용할 수 있는 것 같다.    KVO 객체 만들기 Objc 접근 가능해야하며, NSObject 상속받아야한다. + dynamic 키워드를 사용해야 KVO 를 사용할 수 있다. // Swift KVC, KVO, KeyPath 테스트 하기 @objcMembers class KVCObject: NSObject { // KVO 시 NSObject 상속 필요함. (KVC 에는 상관없음) dynamic var name = "" // dynamic 을 사용해야 실시간 변화 감지가 가능함. dynamic var age = 0 }   KVO, KVC NSKeyValueObservation 변수를 선언하여, 클로져 타입으로 선언하여 사용한다. keyPath \.name 형식으로 KVC 사용이 가능하다. class ViewController: UIViewController { let kvcObject1 = KVCObject(