8월, 2019의 게시물 표시

Beta Mac OS Catalina iPad OS SideCar 연결해 보기

이미지
Mac OS Catalina 부터 iPad OS 업데이트 된 iPad 를 서브 모니터 로 연결할 수 있어서 뒤늦게 테스트 해보았다. 1. 설정 > Sidecar 선택 2. 같은 Wifi 내 연결된 리스트의 iPad 선택 (셀룰러 iPad를 업데이트를 안해서 Wifi 모델로 진행함) 3. 화면 배치 진행 4. 짜잔~! (테스트 만 하고 안씀..)   마무리 사실 예전부터 duet 라는 앱을 통해서 iPad를 서브 모니터로 집에서는 사용하고 했다. 반응속도는 비슷하게 느껴진다. 차이점은 애플팬슬로도 터치로 쓸 수 있으며, 외장키보드도 사용할 수 있다. + 아이패드의 마우스 연결해서 쓰면 나쁘진 않음. 결국 카페 가서 보여주기식(?)으로만 쓸 듯 끝.

[iOS] NSOperationQueue 직렬처리 알아보기

  NSOperationQueue 직렬처리 알아보기 멀티쓰레드 환경에서 async 처리로 네트워크 처리를 진행하는데 어쩔수 없이 직렬로 보내야 하는 경우가 있다. 필자의 경우 그룹웨어의 대화방 이라는 메뉴가 그렇다. NSOperationQueue 관련 링크 (세부적인 내용이 많아서 공유합니다.) 참조 :  https://code-examples.net/ko/q/1001a9    1. NSOperationQueue 단독 직렬처리 테스트 * maxConcurrentOperationCount 의 따라 동시에 실행되는 Operation이 조정된다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 import  UIKit // 1. NSOpertaionQueue 생성 (병렬 진행 1) let  queue  =  OperationQueue() queue.maxConcurrentOperationCount  =   1   // 2 이상부터는 언제나 실행 순서가 바뀜 (테스트시 변경) let  operation1  =  BlockOperation {      print ( "Operation 1 실행" ) } let  operation2  =  BlockOperation {      print ( "Operation 2 실행" ) } let  operation3  =  BlockOperation {      print ( "Operation 3 실행" ) } let  operation4  =  BlockOperation {    

[iOS] UUID UUIDString 알아보기 (NSUUID, Device Vendor UUID, adUUID)

    UUID 란? UUID( U niversally U nique ID entifier)는 고유의 값으로 구하여 사용하기 위함으로 많이 사용된다. 그 외 만들어 지는 자세한 규칙, 딱딱한 용어는 아래 링크 참조! 링크 참조 :  https://ko.wikipedia.org/wiki/범용_고유_식별자    NSUUID 임의의 128비트 값을 생성하고, 고유의 값을 만드는데 좋다. (항상 값이 다르게 나온다.)    Device Vendor UUID 공급업체가 같은 앱들은 모두 같은 고유 ID 를 가짐.    AD UUID 광고 식별자 UUID 존재함. 1. 각 기기마다 고유 ID를 가진다. (앱 삭제여부 관계없이 같은 ID 가짐) 2. 설정에 따라 값이 초기화 됨. (변경가능)     1) 설정 → 일반 → 재설정 → 모든 → 설정 → 재설정
      2) 설정 → 개인 정보 보호 → 광고 → 광고 식별자 재설정

 3. 설정에 따라 값을 가지고 올 수 없음
      1) 설정 → 개인 정보 보호 → 광고 → 광고 추적 제한 #. App 심사 승인을 위해 IDFA(광고식별자) 사용정보 관련 질문에 답해야함. (Reject 당할 수 있음)    Sample Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 import  UIKit import  AdSupport  // 광고 정보 가져오기. // // UUID 반복 테스트. for  i  in   1. .. 3  {      print ( "=== \(i)차 UUID ===" )      print ( "NSUUID : \(NSUUID.init().uuidString)" )      p

[IOS] alloc init vs new 알아보기

  alloc init vs new 알아보기 Objective C 언어에서 객체를 생성할때 방법중에 2가지 를 비교해 볼까 한다. 참고링크 : https://developer.apple.com/documentation/objectivec/nsobject    [[Class alloc] init] NSObject의 인스턴스 메소드. 인스턴스를 초기화    [Class new] NSObject의 클래스 메소스. 클래스의 새로운 인스턴스를 alloc할 뿐 아니라, alloc된 인스턴스를 init하여 초기화까지 시킴    결론은 같다. [[Class alloc] init] == [Class new]

iOS13 UIModalPresentationPageSheet 변경점.

이미지
   iOS 13 Beta UIModalPresentationPageSheet 변경사항 이미지 참조 이번 변경사항점 중에 다른점은 ModalPresentationStyle 중 UIModalPresentationPageSheet 가 변경된점이 크다. 요즘 추세가 Custom Modal Style로 Swipe down, up 으로 열고 닫는 액션이 늘었는데, 이점은 괜찮게 바뀐 것 같다! 2019년 8월 30일 추가건 ModalInPresentatation 값을 통해 Swipe 닫는걸 막을 수 도 있다. https://developer.apple.com/documentation/uikit/uiviewcontroller/3229894-modalinpresentation?language=objc   마지막으로 간단 정리 Xcode 정식 iOS 12, 13 : 기존 FullScreen 과 동일 Xcode Beta iOS 12 : 기존 FullScreen Xcode Beta iOS 13 : 변경된 PageSheet

[iOS] 프로젝트 개발현황 (Bizbox A -> Amaranth10)

이미지
어느덧 차세대 프로젝트로 넘어가고 기존 프로젝트 가지고 전환을 많이하였다. 절대 못바꿀것 같은 영역도 전환을 하였고, 공통화 작업도 많이 진행하였다 ㅠㅠ 진짜.. 힘들었는데, 조금만 더 하면 될 듯 하다 2022. 07. 25 기준 Swift 5.7% -> 75.9% 까지 왔음. --------------------------------------------------------------------- 지금까지 프로젝트를 진행하면서 규모가 컸던적은 처음인데, 라이브러리 제외 Xib 갯수만 약 400개 , 메인 메뉴만 18개 이다. 지금은 무덤덤 해져서 그려러니 하는데,  3년 가량을 개발을 하다보니 Objective C 언어의 코드부터 Swift 언어까지 골고루 쓰고있다. 프로젝트의 메인축을 넘겨받은지 1년 정도 되었는데, Objective C 언어를 Swift 화 시키고 싶어졌다. 이유 ? : 누가 강요한것은 아니지만, 생각보다 라이브러리도 Objc 에서 사용하지 못하는 것도 늘어났고, 안정성 코드 등등 Swift 4 이후 부터는 괜찮다는 생각을 많이 받고 있다. 2019. 08월 기준 신규 Class 는 모조리 Swift 화 시키고 있어도 아직도 5.7% 비중 밖에 되지 않았다.... (언제 바꾸냐) Objective C 언어의 Base로 선택되어 있는 부분들의 문제가 Swift 는 되는데 Objective C 언어에서 안되는 부분도 많다. 반대의 케이스도 존재함. 그러다 보니 운영하면서 싹 다 바꿀수는 없었다. 최근 신규기능에 대한 니즈가 줄어들어 스파게티 소스, 체계적인 모듈화 등에 관심을 갖고 작업을 하고 있으며, Swift 화도 동시에 진행하고 있다. 이 포스팅이 끝나고 추후 비중이 얼마나 바꿔 나갔을지 기록하기 위한 포스팅이다. 끝.

[iOS] sizeToFit vs sizeThatFits 알아보기

이미지
  sizeToFit vs sizeThatFits 알아보기 분명(?) 이 글을 읽고 있는 분도 위의 두가지 함수를 사용해본 적 있을 것 이다. 필자도 사용을 하고 있는데, 간단하게 알고 있지만, 블로그를 통해 한번 더 정리해 놓으려고 한다. sizeToFit 는 텍스트에 맞게 라벨의 크기 가 조정됩니다. sizeThatFits 는 지정된 크기에 적합한 크기 를 계산하여 반환합니다. 반환된 크기를 가지고 width/height 중 원하는 것만 조정할 수 있습니다. 주로 sizeThatFits 은 Label, TextView 등 높이값을 유동적으로 조정 하기 위해 많이 사용됩니다.   예제 1. Frame 을 통한 기본 Label 생성. 2. + Label SizeToFit 함수 사용. 3. Frame 조정하고, 해당 크기에 맞는 높이/넓이 값구해서 수정하기.   Playground Sample 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 import  UIKit import  PlaygroundSupport class MyViewController : UIViewController {      override   func  loadView() {          let  view  =  UIView()         view.backgroundColor  =  .white          //          // Label Sample          let  label  =  UILabel()         label.numberOfLines  =   0         label.backgroundColor  =

[iOS] nonatomic vs atomic 알아보기

이미지
  nonatomic vs atomic 알아보기 Objective C 언어부터 사용했던 개발자라면 한번쯤 Property (@property) 선언할 때 속성을 지정하는데, 그 중 대부분을 "nonatomic" 으로 사용하고 있을 것 이다. Swift 언어가 많은 안정화 진행하면서 많은 개발자들이 Objective C 언어에서 Swift 언어로 넘어가면서 속성들을 신경쓰지 않게 되었다. 필자는 해당 부분을 찾아보려고 했던 이유는 iOS 개발 경력이 Objective C 언어에서 부터 시작한 개발자라면 면접의 단골질문 중 하나이기 때문이다. (면접당시에는 공부했는데, 나중에 되면 아무생각 없이 nonatomic 을 사용하고 있는 나를 볼 수 있다....) "atomic" 이라는 말은 "중단되지 않는" 이라는 뜻이다. 즉, atomic으로 선언된 함수의 경우 다른 프로세스나 쓰레드에 의해 interrupt 되지 않고 수행이 완료될 때까지 무결성을 유지한다. CPU는 한 번에 단 한 가지의 일만을 수행하는데, 멀티쓰레딩을 지원하기 위해 아주 짧은 시간동안 생성된 각각의 쓰레드에게 CPU의 사용권한을 쪼개어 쓸 수 있도록 한다. 여기서 "atomic" Property가 필요하게 된다. 예를 들어 두개의 쓰레드 가 하나의 변수를 참조 할 때, 쓰레드A 에서 x라는 값을 1로 변경했는데, 쓰레드B 에서 새로변경된 값 1이라는 값이 아닌 기존의 값 0을 읽어가는 문제가 발생할 수 있게된다. 이러한 경우를 방지하기 위해 atomic Property를 설정해 주게 된다. (예제 그림 참조) "nonatomic"은 이러한 데이터의 무결성을 보장 받지 않아도 되는 속성을 의미한다. 그러다면, 데이터의 무결성이 보장되는 atomic을 쓰지 않고 대부분의 객체가 nonatomic Property를 사용하는 이유는 뭘까? 정답은