DirTy™의 하루일과 40

[IOS] 이번 개발에 쓴 라이브러리들...

지급받은 M1 맥북 프로... 좀만 더 늦게 시작했으면 이번 신형 사는건데 아쉽 ㅋㅋ 마지막 포스팅이 2017년도 인걸 보면 거의 5년여만에 IOS개발을 다시 하게됐다. 2017년도에 자발적으로 obj-c에서 swift로 언어 변경 하려고 스터디하다가 회사에서 모바일 하지말라해서 접었었는데 다시 하라고 하여 손에 잡게되었다. swift 언어 문법때문에 고생한 것 이외에는 기본개념은 변한게 없어서 적응하는데 어렵지는 않았다. 특히 푸시 인증서 p8 이건 너무 바뀌어서 좋았다. 이전에 푸시인증서 만들던 생각에 에휴... 첫 IOS개발을 2013년도에 시작해서 2017년도 까지는 라이브러리 사용에 대한 필요성을 많이 못느꼇다. 그런데 개발을 꽤나 오래 하다보니(나도 40대 초중반이..ㅜㅜ) 나보다 머리 좋은사..

[IOS] IPv6 관련 검수 통과하기

회사에서 서비스중인 앱이 socket통신으로 붙혀서 통신을 하고 있는데이번에 예전 애플 계정이 만료되어 회사 법인 애플 계정으로 앱을 이관하기 위해또 리뉴얼도 겸해서 수정과 기능추가를 하고 사내 QA까지고 마치고 앱스토어에 등록을 했다. 당연 안드로이드는 단 몇시간만에 통과되어 구글스토어에서 다운을 받을 수 있었고나는 안드로이드보다 몇일전에 앱검수를 신청 해놓았는데 리젝을 당했다. 처음엔 단순히 외국이고 사내 테스트서버에 접근이 안되나 싶어서네트워크팀에 문의하여 사내망에 접근할수 있도록 요청을 하였으나또다시 2차 리젝을 당했다. 다시 요청했는데 또 3차 리젝을 당한다.아이디가 한국어라 그런가?(이런말도안되는 생각조차 하게되었다.)테스트아이디를 영어로 바꾸고 다시 요청. 또다시 반복되는 리젝. 애플 앱심사..

[IOS] CFSocket 통신중에 한글 깨짐

socket을 이용하여 데이터를 받아오고 있는데...한글이 깨져서 온다. 서버에서는 분명히 UTF-8인코딩으로 보낸다고 한다. 아... 한참을 구글링해서 찾다가우연히 해결방법 발견. 이유인 즉슨 네트워크 통신을 하다보면 서버 시스템에서 UTF-8로 데이터를 넘기지 않는 경우가 있다고 한다. 결론은 EUC-KR로 인코딩 하면 된다. ㅡㅡ; NSUInteger encoding = CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingEUC_KR); NSString * encodedString = [NSString stringWithCString:ptr encoding:encoding];

[IOS] 2016년 6월 1일 부터 IPv6 대응 필수.

작년 9월. 그러니까 2015년 9월 이었을까. iOS9에 대한 대응책에 대하여 올라왔었다. 그중에 IPv6 적용에 대해 이야기가 나왔었는데 2016년 6월 1일부터 등록되는 앱에 관해 IPv6 대응을 하지 않으면 검수에서 통과하지 못한다는 이슈가 있다. 이미 애플에는 아래와 같은 뉴스가 올라와 있다. 내용은 뭐 2015년 WWDC때 iOS9 부터 IPv6 대응을 사용해야 한다고 말해왔다. 2016년 6월 1일 부터 앱스토어에 올리는 앱은 IPv6를 지원 해야 한다. NSURLSession이나 CFNetwork API는 이미 IPv6를 지원하고 있으니 대부분의 앱은 수정이 필요없을 거다. 하드코딩된 IPv4를 사용하는경우는 지원 IPv6를 DNS64 / NAT64 네트워크를 읽어 호환성을 보장해야한다. ..

[IOS] GCD on Many Tasks

예전 코드들을 보다가 로그인 관련 코드를 쭉 보았다. http 요청을 총 4번을 보내는데 이때는 iOS에 무지한 시절이라 1번 작업이 끝나면 2번 작업 호출. 2번 작업이 끝나면 3번 작업 호출. 3번 작업이 끝나면 4번 작업 호출. 위의 방식도 틀린 작업은 아니지만 GCD에서는 dispatch_groups 라는 것을 제공 한다. 이를 사용하면 쉽고 간단하게 백그라운드에서 작업을 진행 할 수 있다. 아래와 같이 그룹을 생성 할수 있다. dispatch_group_t group = dispatch_group_create(); dispatch_group에 작업을 추가하는 방법은 두가지가 있다. 아래와 같이 하면 작업은 자동으로 관리된다. dispatch_group_async(group, dispatch_ge..

[IOS] 간단한 SlideView 구현하기.

오픈소스만 찾아봐도 정말 잘 구현되어 있는 SlideView가 많다.그래도 간단하게 라도 한번 만들어 보도록 하자. 스위프트 공부하려고 만들어 봤다. ㅎㅎ결과물은 아래 동영상 일단 구현해보자.스토리보드는 아래와 같이 구현하였다.Main View : 메인뷰Easy View : Container View로 왼쪽 오른쪽으로 이동 할 뷰Show/Hide 버튼 : Slide Show, HideMode 버튼 : 동영상을 보면 알겠지만 Mode는 2개다. 슬라이드뷰만 이동. 메인뷰 슬라이드뷰 같이 이동.view effect UISwitch : view animation effect를 준다. uiview animation에 기본으로 있는 damping 을 이용했다. 스토리보드에서 컨테이너뷰는 일단 안보이게 x좌표를 -..

[IOS] 스토리보드를 이용한 사이즈 클래스(Size Class)

오토레이아웃 포스팅 다음으로 Size Class에 대한 포스팅을 해보려고 한다.테스트는 이전 오토레이아웃 포스팅에서 사용한 viewController를 기준으로 해보겠다.Xcode 우측 utility에 file inspector에 Use Auto Layout Use Size Classes가 체크되어 있는지 일단 확인해 보자.체크가 되어있다면 스토리보드에 들어가서 아래쪽에 아래쪽에 보면wAny hAny라는 항목이 보일것이다.클릭해보면 일단 Any, Base Valuse For all layouts라는 글자가 보인다.모든 레이아웃에 대해 동등한 사용을 하겠다는 것이다.이전 오토레이아웃 포스팅에서는 Base Values로 작업을 했기 때문에 모든 화면에서 동등한 결과를 볼 수 있다.이것을 화면 사이즈 별로 변..

[IOS] 스토리보드를 이용한 오토레이아웃(Auto Layout)

화면 레이아웃을 변경하거나 해상도에 따라 뭔가를 맞출때 autoresizingmask를 이용한 방법으로도 하고 직접 계산해서 frame, bound를 각각 사이즈별로 변경해도 되고 또 각 해상도 마다 스토리보드를 각각 만들어서 해상도에 맞게끔 보여줘도 되고... 뭐 결과가 중요하니 방법은 가지각색이다. 그래도 요즘에 가장 많이(?) 사용하는 오토레이아웃에 대해 알아보겠다. 목표는 간단히 테스트용으로 아래의 사진과 같은 화면을 만드는 것이다. 오토레이아웃은 말그대로 보면 레이아웃을 자동으로 잡아준다는 말 같지만 사실 뷰의 크기와 위치를 조절하는 주체는 개발자가 아닌 레이아웃 시스템에 따라 결정된다는 뜻이다. 결국 기기의 해상도에 따라서 제약(Constraints)을 개발자가 걸어놓으면 제약사항에 기반한 레..

[IOS] 객체에 객체를 추가해보자! Associated Objects

iOS4 및 Mac OS X 10.6(snow leopard)부터 지원되기 시작한 Associated Objects. 널리 알려져 있지않지만 상당히 유용하게 사용할 수 있는 것 같다. 쉽게 설명해 보면 UIButton을 눌렀을때 파라미터를 전달하고 싶을때 간단하게 NSDictionary등의 파라미터를 같이 UIButton에 추가할 수 있다. 사용하기전에 일단 아래에 정의되어 있으니 import. #import 사용은 아래의 메서드를 사용하면 된다. objc_getAssociatedObject / objc_setAssociatedObject / objc_removeAssociatedObjects objc_setAssociatedObject 에서 사용되는 AssociationPolicy의 종류는 아래와 같다..