개발 일지
-
Alamofire를 이용한 api service 설계iOS 2018. 8. 12. 23:33
개인 프로젝트를 하는 동안, 기본적인 UI 설계가 끝나고 인터넷에서 json 값을 받아들이는 부분을 구현하기 시작할 때가 왔습니다.이 때 고려해야 했던 사항들이 있었습니다. 1. 기획이 추후에 바뀔 수 있음을 고려해서, 클라단에서 할 수 있는 것만 설계합니다. 이것은 json의 형식과 모델도 바뀔 수 있다는 소리입니다.파싱 방식은 미뤄두어야 했습니다.2. 상당히 많은 api가 다양한 형태의 모델로 올 수 있고, 그에 따른 url 스트링도 다종다양할 것입니다. 해당 부분에서 일어나는 중복 부분을 가능한 최소화하며 코드의 가독성을 줄입니다.3. 백엔드 부분을 어떻게 할 지 정해져 있지 않으므로, 일단 백엔드에서 json 값을 받아오는 것을 가정한 코드를 세울 것입니다. 위 조건을 가능한 만족하는 api 서비..
-
안드로이드 httpurlconnection,으로 이미지 전송하기안드로이드 2018. 8. 2. 21:53
HttpURLConnection 을 이용할 때는 주의해야 할 점이 몇 개 있습니다. - mimetype을 수동으로 지정해 주어야 합니다.- 일부 초고화질 사진은 업로드 시 서버가 처리하지 못하는 문제가 있습니다. 거기에 exif 정보가 사진을 촬영할때 들어가기에... 그대로 올려 버리면 서버가 적절하게 이미지를 회전시키지 못하는 경우가 있습니다. 서버가 적절한 라이브러리를 찾지 못하는 탓이긴 하지만..피차 좋게좋게 가려면 리사이징을 해줄 필요는 있습니다. 이미지랑 같이 보낼 파라미터 매핑, 이미지 파일 경로, 이미지의 파일 이름, 이미지의 파일 마임맵까지 첨부한 것. public String multipartRequest(String urlTo, Map params, String filepath, Str..
-
UICollectionView서 헤더로 다이나믹하게 높이 계산하는 로직 (UITextView) 넣기iOS 2018. 7. 25. 15:09
개인적으로 파는 소스에서 콜렉션뷰를 짜는데, 헤더 부분에 텍스트뷰가 있어서 글을 쓰면 쓰는 만큼 늘어나는 레이아웃이 필요하게 되었습니다. 안드로이드라면 퍽 쉽게 가능한데... iOS는 굉장히 복잡하단 말이죠.. 몇 번의 검색과 삽질, 연구 끝에 나름대로 구현. 기본 높이 (50)을 주되, 그 이상 늘어나면 헤더의 높이가 리사이징됩니다. 이게 예제. import Foundationimport UIKitimport SnapKit class TestEditorViewController : UIViewController, UICollectionViewDelegateFlowLayout{ lazy var collectionView : UICollectionView = { let layout = UICollectio..
-
[swift]WKWebview 스크롤 맨 아래로 정확하게 계산해서 내리기iOS 2018. 7. 25. 14:09
스택오버플로우에 안 적혀있어서..아는 분들께 물어서 얻어옵니다. func scrollDown(){ if (customWebView != nil){ let bottom = self.customWebView.scrollView.contentSize.height - self.customWebView.scrollView.bounds.size.height if (customWebView.scrollView.contentOffset.y != bottom){ UIView.animate(withDuration: 0.25, animations: { self.customWebView.scrollView.contentOffset = CGPoint(x: 0, y: bottom) self.view.layoutIfNeeded()..
-
iOS swift 네이버 프로필 api 샘플 코드iOS 2018. 7. 10. 18:06
네이버의 경우, 프로필의 정보를 구하기 위해서는 request 를 직접 쏴줘야 합니다. 샘플 코드 java 로 안드로이드는 쉽게 구현 가능하지만, swift의 경우는 직접 리팩토링했습니다. 사용한 라이브러리는 Alamofire 입니다. NSURLSession으로도 비슷하게 가능할 듯. 구현하는 viewcontroller 가 NaverThirdPartyLoginConnectionDelegate를 상속해야 하고, import NaverThirdPartyLogin 깔아 줍니다. func oauth20ConnectionDidOpenInAppBrowser(forOAuth request: URLRequest!) { } func oauth20ConnectionDidFinishRequestACTokenWithAuthC..
-
iOS Swift- 카카오링크 샘플코드iOS 2018. 7. 10. 18:02
2018년 6월경부터 카카오링크 구버전이 deprecated 되어 아예 실행이 안 되어버립니다.대응을 하긴 해야 하는데, 카카오 개발자 사이트에선 swift 샘플 코드를 지원하지 않습니다. 간단히 swift 로 카카오 공유 구현한 것을 업로드합니다. let template = KMTFeedTemplate { (feedTemplateBuilder) in feedTemplateBuilder.content = KMTContentObject(builderBlock: { (contentBuilder) in contentBuilder.title = AppText.title contentBuilder.imageURL = URL(string: RequestURL.thumb)! contentBuilder.link = K..
-
WkWebview post 방식시 httpbody 씹는 문제 (iOS 10 이하 대응) 해결방안iOS 2018. 7. 10. 16:48
iOS 10 이하에서는 request에 포스트 방식으로 전송시, httpbody를 씹는 버그가 있습니다.iOS 11 이상에서는 해결된 이슈이지만, iOS 11에서도 [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 처럼 컨텐트 타입을 세팅 안하면 httpbody 씹으므로 주의할 필요가 있습니다. 아무튼 iOS 10 이하에서도 대응할 방안이 필요한데,제일 간단한 건 포스트 방식 대신에 get 방식으로 보내는 거겠습니다.하지만 (다른 문제는 뒤로 하고) get 방식으로 보내는 경우, 웹뷰가 띄우는 페이지가 최적화가 개판으로 되어 로딩 속도가 크게 길면 뻗어버리는 문제가 있더군요. 따라서 이런 방..
-