iOS
-
iOS 앱 간의 통신을 구현하기iOS 2018. 8. 18. 23:22
통신을 부르는 앱을 A, 실행되는 앱을 B라고 하면B에서는 info.plist에 다음과 같이 추가를 해 주어야 합니다. CFBundleURLTypesCFBundleTypeRoleEditorCFBundleURLSchemestest 이제 다른 앱에서URL Scheme가 'test' 인 URL을 오픈하면, B 앱이 실행되게 됩니다. 이제 A 앱에서 B 앱을 부를 차례입니다. 스키마를 'test'로 지정해주고 콜하면 일단 B 앱은 부를 수 있지만, 무슨 목적으로 B 앱을 불렀는지도 같이 넘겨 주어야 합니다.따라서 호스트나 쿼리 형식으로 기타 정보를 같이 넘겨줍니다. var components = URLComponents() components.scheme = panService.serviceCode compon..
-
Alamofire를 이용한 api service 설계iOS 2018. 8. 12. 23:33
개인 프로젝트를 하는 동안, 기본적인 UI 설계가 끝나고 인터넷에서 json 값을 받아들이는 부분을 구현하기 시작할 때가 왔습니다.이 때 고려해야 했던 사항들이 있었습니다. 1. 기획이 추후에 바뀔 수 있음을 고려해서, 클라단에서 할 수 있는 것만 설계합니다. 이것은 json의 형식과 모델도 바뀔 수 있다는 소리입니다.파싱 방식은 미뤄두어야 했습니다.2. 상당히 많은 api가 다양한 형태의 모델로 올 수 있고, 그에 따른 url 스트링도 다종다양할 것입니다. 해당 부분에서 일어나는 중복 부분을 가능한 최소화하며 코드의 가독성을 줄입니다.3. 백엔드 부분을 어떻게 할 지 정해져 있지 않으므로, 일단 백엔드에서 json 값을 받아오는 것을 가정한 코드를 세울 것입니다. 위 조건을 가능한 만족하는 api 서비..
-
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 방식으로 보내는 경우, 웹뷰가 띄우는 페이지가 최적화가 개판으로 되어 로딩 속도가 크게 길면 뻗어버리는 문제가 있더군요. 따라서 이런 방..