11월, 2018의 게시물 표시

[Swift 공부] 스위프트 알아보기.

#. 이론 공부를 위하여, 일부 내용을 블로그 및 책을 찾아보며 작성하였습니다. Swift 1.0 스위프트는 2014년 6월에 베타 버전을 발표하고, 2014년 9월에 Swift 1.0 을 발표하였다. 안전한 코딩을 위한 안전장치 등 기존 Objective C 에서 사용하지 못했던 부분이 추가 되어 많은 관심을 받게되었다. Swift 1.2 2015년 4월 Swift 1.2 가 발표하였으며, Swift 문법이 많이 바뀌게되어 많은 혼란이 있었던 시기가 였습니다. Swift 2.0 2015년 6월 WWDC에서 Swift 2.0버전을 발표하였고, 1.x와 차이가 컸으며 이시기에 사람들이 버전이 올라갈때마다 문법이 바뀌는게 아닌지 걱정을 많이 했던 시기 인 것 같습니다. Swift 2.1 2015년 10월 발표하였으며 2.0에 비해 약간의 편의사항 추가, 버그 수정 등 안정화에 포커스를 둔 마이너한 업데이트 였습니다. 오픈소스 전환 2015년 12월 Swift를 오픈소스로 전환하였습니다. Swift 2.2 2016년 3월에 발표하였으며, 3.0 발표를 앞두고 있어서 변화가 크지 않았습니다. Swift 3.0 2016년 6월 WWDC에서 Swift 3.0 발표를 하였으며, 큰 변화가 있었습니다. 필자가 느끼기에는 기존에 Swift 문법이 Objective C를 억지로 스크립트 문법과 매핑 시켜서 최대한 비슷하고, 혼동되지 않게 만들었던 부분을 좀더 스크립트 문법 처럼 Swift만의 문법으로 바뀌었던 시기 였던것 같습니다. Swift 3.1 2017년 3월 Swift 3.1이 발표하였고, 큰변화는 아니지만 사용상에 일부 변화가 있었습니다. Swift 4.0 2017년 6월 Swift 3.1버전에 이어 언어의 스팩을 강화하였습니다. 필자의 생각 간략하게 스위프트 연혁을 참고로 적어놓았는데, 해당 버전별 중요 기능이 추가되거나 제거되거나가 있었지만, 필자도 Swift 1.0 부터 시작을 하였으나,

[iOS] CallKit 설정에서 활성화 되지 않을때

기존에 App에서 CallKit을 활용하여 앱내의 전화번호부를 등록하지 않아도 정보를 표시해주는 정도로 만 사용하고 있었는데, 일부 사용자들에게 설정 > 전화 > 전화 차단 및 발신자 확인 에서 App의 스위치를 On 으로 변경시 바로 활성화가 되지 않고, 무한로딩 이 돌고 있다는 점을 접수 받게 되었다. 이 부분에서 원인이 불명확했는데, iPhone X, iPhone XS, iPhone XS Max, iPhone XR 의 기기에서 발생하는게 대다수 인점이 있었다. 추가적으로 iPhone XS Max 의 기기를 최근에 구입하여 동작을 시켜봤는데, 실제로 위와같이 로딩이 무한으로 돌고있는 점을 확인을 하였다. 일단 필자도 웹검색을 통해 알아본 결과 iPhone에 설치된 CallKit을 사용하고 있는 앱이 여러개일때, 혹은 최초설치시에 위와 같은 현상이 발생하는 것으로 파악을 하였고, 이 현상은 2016년 11월 부터도 발생한 것으로 판단된다. 후스콜이나 후후 등 CallKit이 주요기능인 앱의 정보를 확인해보니, CallKit을 여러개 사용하고 있을 경우 충돌로 인해 설정이 되지 않을 수 있다고 한다. 필자가 실험해본 결과 1. 필자의 App 만 설치한경우 (무한 로딩일때)   - iPhone 재부팅 후 정상 작동 2.  후스콜 등 이미 CallKit 을 사용하고 있는데, 추가설치된 경우 (무한 로딩일때)   - iPhone 재부팅 후 정상 작동   #. 만약에 CallKit 중에 같은 번호가 있다면, 이 상황 문제가 발생하여 다른앱들을 지우고 다시 설치후 재부팅 해야함. 이 현상을 정확하게 문제 해결을 하고 싶긴한데, 코드에서는 정상적으로 호출하고 있어서 난감한 상황이다.

[요리] 에어프라이어 도전기! [삼겹살 편]

이미지
에어프라이어 요리도전하기! 드디어 세번째 포스팅으로  자취인들이 가장 많이 해보고싶은  에어프라이어 삼겹살 구이를 준비해 보았다. 전체적인 조리과정 1. 구매한 삼겹살을 자르지 않고 에어프라이어에 이쁘게 넣어준다. 2. (저온 요리) 160도에 10분씩 3번 정도 위치를 바꿔준다. 3. 겹쳐져있는 부분은 잘 안익을 수 있음으로 확인하고 마지막으로 조금더 돌려준다. 일단 필자의 포스팅 순서는 세번째 지만, 에어프라이어로 가장 많이 해본요리이다. 보통 에어프라이어 상단에 고기는 180도 / 20분 ~ 25분 이라고 써있는데,  이렇게 하면 겉은 너무 바삭해서 먹기에는 불편했다. 몇번에 시도 끝에 먹어보고 최적이라고 생각하는  "저온에 오래 굽기" 방법을 소개 하려고 한다. 와이프랑 마트에서 장을 보다가 냉동으로도 보관하려고 구매한 삼겹살을 에어프라이어를 통해서 삼겹살 구이를 해보려고 한다! (저렴하게 사서 기분좋음) 에어프라이어 요리를 할때 가장 중요한점은 음식을 최대한 겹치지 않아야 한다는 점 이다. 요리를 하다보면 어쩔 수 없이 일부는 겹치는 부분이 생기지만, 최초 음식을 넣을때 최대한 안겹치게 만들어줘야 나중에 여러번 더 해야하는 수고를 덜 수 있다. 1차로 160도에 10분을 돌려준다. 이번 삼겹살 구이의 핵심은 저온 으로 여러번 작업하는 것이다! 1차 초벌이 완료되면 많이는 익지 않은 상태이다. 만약에 초벌을 높은 온도에서 하면 겉은 바싹한데,  내부는 익지 않는 불상사가 이뤄지기 때문에 일부로 저온에서 작업을 시작한 것이다! 2번째로 에어프라이어 요리시 중요한 부분! 잘 익는 위치의 고기와 덜 익는 고기의 위치를 변경해주면서 다시  160도 10분 돌려준다.     (위치 변경중...) 이렇게 160도에 10분을

[iOS] NSURLCache 삭제 및 WKWebKit WebSite Cache 삭제

이번에 정리할 내용은 iOS Xcode 내에서 Cache를 삭제하는 법 에 대해서 알아보려고 한다. 기존에 사용하고 있던 프로젝트는 UIWebView를 사용하다. iOS 속도 문제로 WKWebView로 변경하여 사용하고 있었는데, 기존 프로젝트 최초부터 지원 하던 버전에 iOS 8.0 (현재는 iOS 10.0) 이다. 당연히 앱을 실행할 때마다 캐시 삭제하는 로직을 넣어 주어 사용하고 있었는데, 이번 회사 서버패치 때, 캐시가 되면 안된다는 문제가 발생하여, 생각보다 이상하게 시간을 허비하여 캐시 삭제하는법을 다시 적는다. 일단 소스 코드를 참고 하자면, 첫번째 라인만 사용하고 있어서 당연히 Cache를 삭제를 하고 있다고 생각했는데, WkWebView의 webSite는 Cache삭제를 하고 있지는 않았다. 1 2 3 4 5 6 7 8 // 지정된 캐시 삭제 NSCachedURLResponse를 모두 제거한다. [[NSURLCache sharedURLCache] removeAllCachedResponses];          // 지정된 날짜 이후에 웹사이트 데이터를 제거한다. NSSet  * webstieSet  =  [NSSet setWithArray:@[WKWebsiteDataTypeDiskCache,                                           WKWebsiteDataTypeMemoryCache]]; NSDate  * date  =  [NSDate dateWithTimeIntervalSince1970: 0 ]; [[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:webstieSet modifiedSince:date completionHandler:^{}]; cs 그래서 추가한 코드로 WKWebView에서 특정날짜 이후로 WKWebView에서 호출한 WebSite를 삭제하는

[iOS] FrameAnimation, CABasicAnimation 간략 알아보기

이미지
오늘은 FrameAnimation과 CABasicAnimation 두가지를 간단하게 알아보려고 한다. 아마 상황에 따라서 쓸 수 있는 Animation의 종류들이 있겠지만, 오늘은 간단하게 반복하는 Animation으로 알아보려고한다. (이런것도 있다 정도로 봐주시면 될 것 같습니다.) Git : Animation Sample Project FrameAnimation 필자의 프로젝트내에서 FrameAnimation이 내부에 많은 편인데, 보통은 고정자리에서 image를 반복적으로 보여주기 위해서 사용하는 경우가 많다. 아래와 같이 반복적인 이미지의 경우 FrameAnimation으로 구성하면 간편하게 구현할 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 /// Frame Animation      func  setFrameImageView() {          /// ImageArray init          let  frameImageArray  =  NSMutableArray()          // 이미지 이름때문에 아래와 같은 for문으로 만듬.          for  i  in   10. . < 21  {             frameImageArray.add(UIImage.init(contentsOfFile: Bundle.main.path(forResource:  "icon\(i)@2x" , ofType:  "png" ) !  )  as  Any)         }                  frameImageView.animationImages  =  frameImageArray  as ? [UIImage]         frameImageView.animationDuration  =   0. 75         frameImageVie