Swift vs. Objective-C ?!

2014년 Apple은 WWDC 2014에서 Swift를 발표했고 빠르게 버전업을 거쳐 벌써 Swift 2.0이 나왔습니다. 발표 당일 현지에 있었던 전 환호의 소리를 들었지만 걱정이 많았습니다. 새로운 언어를 배워야 한다는 부담감도 있었고 반감도 있었죠. 그래서 주변 분들에게는 난 계속 Objective-C로 개발할거야 라고 장담했었죠. 하지만 그 장담은 불과 일년만에 깨지고 말았습니다. 올해 초 새로운 프로젝트에 투입이 되었는데 무슨 이유인지 몰라도 욕심이 생겨서 프로젝트를 Swift로 세팅했습니다. 당시는 Swift 1.1에서 1.2로 넘어가는 시점이었는데 미리 해본 개발자분들은 아직은 아니다라며 말리셨습니다만 무모한(?) 도전을 해보기로 했습니다. 결국 Swift 1.2를 이용해 프로젝트를 계속 진행하였고 최근 결과물이 Apple의 심사를 마치고 App Store에 등록이 되었습니다. 왜 중도에 Objective-C로 회귀하지 않고 Swift로 프로젝트를 지속했을까 궁금증이 생기시는 분도 계실테고 반대로 아직도 시기상조 아닌가라고 생각하시는 분들이 많으시리라 생각됩니다. 그래서 좀 늦었지만 Swift 프로젝트 경험기를 공유하고자 합니다. Swift로는 안되는 것이 많다. 아닙니다. 어떤 framework를 사용하느냐에 따라 버그 유무는 존재했었지만 안되는 것은 없었습니다. 1.1까지는 버그가 꽤 많았다고 합니다. 그래서 Objective-C 코드와 Swift 코드를 Bridge 해서 사용하느니 그냥 Objective-C로 하겠다는 분도 계셨었습니다. 이 부분은 1.2에서…

WordPress Jetpack 활성화 시 register_http_request_failed 오류 대처법

내가 맞이한 오류는 name lookup timeout 오류였다. 구글링을 주욱해보다가 발견한 글에 따르면 cURL 옵션을 일시적으로 변경해주면 된다는 아래 링크의 글이 해결책이 되었다. http://www.tpateman.co.uk/reboot/error-activating-jetpack-plugin/ 주의할 점은, Jetpack 설치되었다고 끝~하면 안되고 다시 disabled 했던 옵션들을 enabled 해줘야한다는 것.

iOS8에서의 Notification (action, category and settings)

iOS8에서는 Notification에 대한 내용이 다소 변경되었다. 이 부분은 iOS 개발자 뿐만 아니라 Server 담당자와 기획자도 알고 있으면 좋을 듯 하여 테스트를 진행하며 간단히 설명해보도록 하겠다.   우선 변경된 내용을 간략하게 정리해자면, Local / Remote Notification 에 위에 첨부한 것과 같이 액션이 추가되었다. 더불어 Notifiation에 category가 추가되어 카테고리에 따라 다른 액션을 보여줄 수도 있게 되었다. 이 변경점은 개발자뿐만 아니라 기획자도 꼭 알고 넘어가야할 부분이라고 생각되어 기획자가 고려해야 할 부분도 짚어보도록 하겠다. [ 기획자 ] 기존의 Notification 에서는 단일 Action만 존재(터치 시 해당 앱 호출)했으며, userinfo나 payload에 추가 scheme을 적용, 혹은 didReceivedNotification 메소드에서 데이터를 재호출해서 앱 내에서 분기동작을 수행하도록 하였다. 참 번거로운 작업이었고 Remote Notification 의 경우에는 제한된 payload 사이즈 때문에 이마저도 제한이 많았다. 하지만 iOS8 부터는 Notification에 Action을 지정할 수 있는 기능이 추가되었다. 위에 첨부한 화면을 예로 들어 설명하자면 캘린더 초대가 들어왔을 때 “거절(Decline)”, “승락(Accept)” action을 앱에 진입하지 않고도 수행할 수 있다. 이 “거절(Decline)”과 “승락(Accept)” action에 대한 정의는 앱을 실행할 수도…

AFNetworking 2.x 와 iOS6

AFNetworking은 Server-Client 개발 시 많이 사용하는 오픈소스입니다. Connection 세션관리부터 iOS7에서 새로이 추가된 Task 개념까지 충실히 지원하고 있으며 현재도 업데이트가 활발한 오픈소스입니다. iOS7이 정식으로 발표되고 또 iPhone5s/iPad mini retina가 출시되면서 64bit 지원이 또 다른 개발 화두가 된 시점에서 제가 진행 중인 프로젝트의 앱에도 64bit를 지원해보고자 세팅을 바꾸고 여러 compile warning을 하나씩 확인하면서 수정하다보니 기 적용되어있던 AFNetworking 1.x가 문제가 되었습니다. 이를 다 바꾸기보다는 최신버전이 있는지 확인을 해보았더니 2.0이 등록되어 있었고 반갑게 64bit 지원을 한다고 되어 있어 선뜻 업데이트를 했습니다. 문제는 여기서부터.. 현재 진행 중인 프로젝트 iOS Client의 deployment target이 6.0부터인데 7.0에서만 주로 테스트하다보니 간과하고 넘어간 부분이 있었습니다. 바로 AFHTTPSessionManager 의 블록코드 정의에 있는 NSURLSessionDataTask 였습니다. 이 녀석이 7.0에 추가된 개념이더군요.. 바로 수정에 들어갔는데 블럭 정의를 바꿀 수 있는 방법이.. 있을리 만무하죠; 결론은.. 역시나 저와 같은 문제를 겪은 분의 친절한 Q&A thread가 있더군요. http://stackoverflow.com/questions/20772984/afnetworking-2-0-3-not-working-on-ios-6 참 친절한 stackoverflow입니다. 위 URL의 답변에 보면 iOS7 이상 지원 시에는 AFHTTPSessionManager를 사용하고, iOS6 이상 지원 시에는 AFHTTPReuqestOperationManager를 사용하라고…

iOS 7에서 드디어! 추가된 기능들

본문의 글은 DoubleEncore의 iOS7 Additions:OMG Finally! 를 참고하여 작성되었습니다. (This article is refer to iOS 7 Additions: OMG Finally! at DoubleEncore)   iOS7이 발표된지도 꽤 많은 시간이 지났습니다만 이제서야 review를 하네요… 바로 본문으로 들어갈게요. 1. Support Attachments at Message UI Framework. 개발 시 앱 내에서 iMessage 기능을 편하게 사용하기 위해서 MFMessageComposeViewController를 사용해왔을 것입니다. 이 클래스의 약점 중 하나는 code-level에서 첨부 파일을 넣을 수 없다는 것이였죠. – (BOOL)addAttachmentData:(NSData *)attachmentData typeIdentifier:(NSString *)uti filename:(NSString *)filename; – (BOOL)addAttachmentURL:(NSURL *)attachmentURL withAlternateFilename:(NSString *)alternateFilename; 위 두 메소드가 추가되며 드디어 메시지에 첨부파일을 첨부할 수 있게 되었습니다. Data의 경우 MobileCoreService Framework에 포함된 UTCoreTypes에 정의된 파일형식이라면 대부분 가능한 것 같습니다. 단, 용량제한이나 기타 제한에 대해서는 충분하게 테스트해보지 않았으니 참고하세요. 2. MPVolumeView in Media Player Framework MPVolumeView는 단말의 볼륨을 조절하는 슬라이더와 라우팅할 오디오 소스를 선택할 수 있도록 해주었습니다만 AirPlay system의 정보를 얻기에는 부족함이 있었습니다. @property areWirlessRoutesAvailable; @property isWirelessRouteActive; NSString *const MPVolumeViewWirelessRoutesAvailableDidChangeNotification; NSString *const MPVolumeViewWirelessRoutesActiveDidChangeNotification; 하지만 iOS 7부터 위 코드처럼 두 개의…