3월, 2020의 게시물 표시

[iOS] Xcode Shortcut Support, Intent definition 알아보기 (단축어앱 지원)

이미지
  [iOS] Xcode Shortcut Support, Intent definition 알아보기 (단축어앱 지원) 안녕하세요. 물먹고하자 입니다. 오늘은 iOS의 단축어앱(Shortcut) 에 앱을 지원하는 방법에 대해 알아보았습니다. Sample Github 주소 :   https://github.com/kimjiwook/ShortcutSupportExample   샘플 1. 신규 프로젝트 생성 2. Intent Definition File 생성 3. 내부 Intent 생성 3. Intent 이름을 지정해줍니다. (현재 글에서는 추가적인 상세정보는 입력하지 않았습니다.) 4. Info.plist의 NSUserActivityTypes Value 확인 (단축어 앱에서 해당 Value 로 들어옵니다.) 5. 추가소스코드 AppDelegate 기반 // AppDelegate 기반일때 Intent Check func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool { // check if "ShortcutSupportFirstIntent" == userActivity.activityType { NotificationCenter.default.post(name: .alertShow, object: nil) return true } return false } SceneDelegate 기반 // SceneDelegate 기반일때 func scene(_ scene: UIScene, willCont

iOS13 window 접근 에러 (SceneDelegate 변경 접근하기)

이미지
  iOS13 window 접근 에러 (SceneDelegate 변경 접근하기) 안녕하세요. 오늘은 Xcode SceneDelegate 개념이 추가되면서 UIApplication Window 접근이 되지 않아 난처한 상황을 해결했던 점에 대해서 공유드립니다. iOS 13 MultiWindow 개념이 생기면서 단일이 아닌 Multi로 변경되면서 Window 관리는 Scene 에서 하도록 변경되었습니다.   샘플코드 // iOS 13 이후 문제가 되었던 부분. _applicationWindow = [[[UIApplication sharedApplication] delegate] window]; 위와같이 기존에 사용하고 있던 상황에서 SceneDelegate 가 추가됨에 따라 에러가 발생하게 됩니다. extension UIApplication { @objc(currentWindow) var currentWindow: UIWindow? { connectedScenes .filter({$0.activationState == .foregroundActive}) .map({$0 as? UIWindowScene}) .compactMap({$0}) .first?.windows .filter({$0.isKeyWindow}).first } } // 실제 호출시 // Objc [[UIApplication sharedApplication] currentWindow]; // Swift UIApplication.shared.currentWindow   마무리 UIApplication Extentsion 을 활용하여 currentWindow 라는 변수를 만들었는데,  아직은 완벽하진 않은것 같습니다. 단일 window 사용시에는 문제가 없으나 iPad 기준으로 MultiWindow 지원 후 여러화면 active 2개이상 활성화

[Swift 공부] Swift Random function (랜덤함수 알아보기)

  [Swift 공부] Swift Random function (랜덤함수 알아보기) 안녕하세요. 오늘은 Swift에서 제공되고 있는 랜덤함수 를 알아보았습니다.   샘플소스 import UIKit /* Swift 랜덤 함수 */ // 1. 32비트 부호없는 정수 값 arc4random() // 2. 범위내 32비트 부호없는 정수 값 arc4random_uniform(100) // 0 ~ 99 사이의 난수 값 // 3. Double형 0 ~ 1.0 사이의 난수 값 drand48() // https://developer.apple.com/documentation/swift/int/2995648-random // 4. Int형 범위내 난수 Int.random(in: 10..<20)   마무리 Objective C 에서 Swift 언어로 많이 전환되면서 부가기능 같은 개념의 함수들을 편리하게 사용할 수 있는 것 같아서 좋은것 같습니다. 즐거운 코딩 되세요. 끝.

[iOS] Xcode RunScript 예제 : Debug, Release Bulid 시 라이브러리 교체하기

이미지
  [iOS] Xcode RunScript 예제 : Debug, Release Bulid 시 라이브러리 교체하기 안녕하세요. 물먹고하자 입니다.  오늘은 Xcode Run Script 를 활용하여 문제를 해결했던 부분에 대해서 공유드립니다. 프로젝트 내 외부 라이브러리를 사용하는 항목이 있는데, 구매후 업데이트가 되지 않았던 라이브러리여서 라이브러리 내에서 Debug 와 Release 가 구분이 되지 않아 불편함을 겪고 있었습니다. 이를 해결 하기 위해 라이브러리를 참조하는 폴더(Lib) 폴더에 Debug 용과 Release 용을 넣어놓고 빌드/배포 시 바라보는 위치를 변경하는게 어떨까? 하는 생각으로 시작하였습니다.   시작하기 우선 필자의 경우 BUILD 라는 폴더에 프로젝트가 라이브러리 참고하는 경로를 지정을 해주었으며, 같은 레벨로 DEBUG, RELEASE 폴더에 각각 그에 맞는 라이브러리를 추가하여 넣어준 상태입니다. Framework Search Paths 확인해줍니다.  Edit Schemes 로 들어와 Bulid - Pre-actions 의 Run Script 를 작성해줍니다. # Pre-actions : Bulid가 시작되기전에 작업을 완수합니다. 필자의 경우는 터미널 명령어를 활용하여 매번 Bulid 폴더를 지우고/생성 후 현재 Debug, Release 상태 확인하여 내용을 복사 해주는 형식으로 꾸며 보았습니다. 참고로 Run Pre-actions , Archive Pre-actions 에 먼저 작업을 하였는데, 라이브러리가 이미 Bulid 에러 가 발생하는 상태여서 필자의 경우는 Bulid Pre-actions 에 작업하였습니다.   마무리 이번에 처음으로 Run Script 를 활용해 보았습니다. 터미널 관련 명령어를 좀더 잘 알았으면, 효율적인 방법도 있을 것 같습니다. 앞으로 프로젝트 배포시 빌드버전

[Swift 공부] 소수점 처리 (ceil, floor, round) 올림, 버림, 반올림

  [Swift 공부] 소수점 처리 (ceil, floor, round) 올림, 버림, 반올림 안녕하세요. 오랜만에 Swift 공부로 글 올립니다. 오늘은 Swift 내 소수점 처리 방식 의 대해 3가지 함수를 알아보았습니다.   샘플소스 import UIKit /* 2020. 03. 01 Kimjiwook - 수소점 계산 함수에 대한 예제 파일 - 1. ceil() 소수점 아래의 숫자가 있으면 소수점 아래를 다 버리고 정수부에 1을 더해주는 함수입니다. 2. floor() ceil() 함수와 반대되는 함수입니다. 소수점 아래를 버린 값을 반환하는 함수입니다. 3. round() 소수점 아래를 버리되 반올림을 해주는 함수입니다. 0.5 이상은 1로 올리고 그 외는 0 으로 처리하게 됩니다. */ // 1. 수소점 올림 ceil(5.1) // 6 ceil(5.3) // 6 ceil(5.7) // 6 ceil(6.0) // 6 ceil(6.9) // 7 // 2. 소수점 버림 floor(5.1) // 5 floor(5.3) // 5 floor(5.7) // 5 floor(6.0) // 6 floor(6.9) // 6 // 3. 소수점 반올림 round(5.1) // 5 round(5.3) // 5 round(5.7) // 6 round(6.0) // 6 round(6.9) // 7   마무리 간단한 3가지의 함수를 알아보았습니다. 평상시에는 많이 사용될 일이 없지만, 간혹 CollectionLayout 내부에서 계산할때 페이지 계산시 편리하게 사용할 수 있어서 알아두면 좋을 것 같습니다. 즐거운 코딩되세요 ^^