-
[GIT] Merge vs Rebase 차이
GIT을 프로젝트를 하며 다들 자주 사용하시는데, 혹시 브랜치를 병합할 때, Merge와 Rebase을 사용해본 경험이 있으신가요⁉️ 저는 주로 Rebase fork해온 프로젝트를 upstream에 맞게 동기화하고 싶을 때 사용했는데요. 정보를 fetch upstream을 통해 가져오고 rebase을 통해서 병합을 했었어요. Merge 얘는 upstream이 없고 origin만 있는 상태에서 Git을 관리할 때 사용했었던 방법이에요. 사용하면서 어떤 상황에 사용하는지 형태만 보고 사용했었지, '왜 이걸 사용하지'는 생각을 해보지 않았던 것 같아요. 그래서 이번 기회에 동작 원리를 알아보고 정리해보려고해요~~ 기회가 된다면 다음 GIT 포스팅은 오픈소스를 관리하는 방식인 fokr한 저장소를 관리하는 방법을..
-
[SWIFT] XML Parser 사용하기
보통 서버와 통신을 하여 데이터를 받아올 때, JSON 타입을 많이 사용하지만, 아직 공공 데이터의 경우에는 XML의 형식도 있다고해요...‼️ 저도 이번에 프로젝트를 진행하면서 한국 관광 공사의 데이터를 받아와야 했어요....😭 XML Parsing은 처음해보지만 JSON 형식과 크게 다른 건 없는 것 같더라구요. 그럼 XML Parsing을 알아볼까요. XML이란? XML(eXtensible Markup Language) 이렇게 약자를 따와서 XML이라고 한대요..‼️ 뭔가 이름의 뉘앙스만 봤을 때, 마크업 언어를 확대한다(?) 그런 의미인 것 같죠. 그렇다면 마크업 언어는 무엇일까요? 가장 대표적으로 여러분들이 가장 자주 봤을 HTML 언어가 있어요. 이 둘의 공통점은 무엇일까요? 바로 "마크(Ma..
-
[iOS] Xcode Target이란?
이번에 새로운 프로젝트를 보고 "어..? 이 프로젝트는 왜 이렇게 타겟이 많이 분리되어 있지..?"라고 느낌이 들었고, 지금까지 iOS 개발을 해오면서 Xcode 프로젝트에 대한 원론적인 이해(?)가 부족했다고 느끼면서 새롭게 공부를 해보았어요.. Target이라고 하면 여러분들이 알게모르게 다들 이런 화면 보셨죠..? 저는 지금 하나의 Target만 있는데, 프로젝트를 생성할 때 UI Test, Unit Test를 포함하셨으면 이 또한 Target이 될 수 있고 또한 빌드를 할 때 각자가 빌드하는 Target이 설정이 되어 있었을거에요.. 근데 그렇다면 Target이란 무엇일까요? 한번 지금부터 제가 공부한 내용을 바탕으로 설명을 해보겠습니다‼️ Xcode Target Target이란 빌드할 프로덕트를..
-
[iOS] FCM(Firebase Cloud Messaging) + APNs - 푸쉬 알림 등록 (2)
저번 시간에는 푸쉬 알림을 등록하기 위해 필요한 배경지식들을 알아보았습니다. 이번에는 직접 iPhone으로 푸쉬알림이 가는 테스트를 진행해보려고 합니다. 오늘은 Firebase Cloud Messaging(FCM)을 이용해서 인증서를 등록하고 간단한 테스트 메세지를 핸드폰으로 전송해보겠습니다. FCM + APNs 이전 포스팅에서 말했듯이, Provider - APNs 사이에 신뢰되는 사이인지를 확인하기 위해 인증서가 필요한데요. 우선은 이 인증서를 발급받아볼게요. 저희가 이번 실습에서 해볼 인증서 방식은 p8, p12 방식 중에 p12 방식입니다. (p12 방식은 1년마다 인증서를 갱신시켜주어야하고 프로젝트마다 다른 인증서를 등록해주어야 해요 😢, 요즘 자주 사용하는 방식은 p8 방식이라고 합니다.) 우..
-
[iOS] 앱에서 Web 보여주기 (WKWebView, SFSafariViewController, Safari 열기)
iOS에서 앱 내에서 Web을 보여주어야 하는 경우가 있습니다. 이 때, 크게 3가지 방법이 있는데요. 이 방법에 대해 간단히 사용법을 알아보고 공부해보겠습니다. 일단 UIWebView를 사용하는 방법도 있는데, 이제는 Deprecated 된 것으로 알고있는데요. (저도 사용해본적은 없습니다..) 그래서 UIWebView를 제외하고 3가지의 방법을 알아보려고 합니다. Safari 앱을 열어서 보여주기 SFSafariViewController를 사용하여 보여주기 WKWebView를 사용하여 보여주기 Safari 앱 가장 간단한 방법인데요. 그냥 아이폰에 설치된 Safari를 열어서 웹 페이지를 로딩하는 방법입니다. 코드도 정말 간단하고 별도의 설정도 필요없는데요. 장점이라하면은 간단함...?! 단점은 커스..
-
[iOS] Dynamic Framework & Static Framework
요즘 회사 프로젝트의 크기가 커지다보니 각 모듈간의 의존도도 커지고 빌드 시간도 오래 걸리게 되면서, Framework 단위로 분리해서 관리하는 방법에 관심을 가지게 되었습니다. 그러다보니 모르는 부분들도 있어서 이전에는 가볍게 알고 있던 Static Framework & Dynamic Framework에 대해 좀 더 깊게 알아보려고 합니다 🙃 Dynamic Framework 우선 Dynamic Framework는 Xcode에서 Framework를 생성하게 되면 기본적으로 Dynamic Framework로 생성됩니다. Dynamic Framework는 그림에서처럼 Static Linker를 통해 Dynamic Library Reference가 Application Code로 들어가고 사용시에는 해당 참조..
-
[SWIFT] String Compare (앱 버전 비교)
오늘은 Swift의 String Compare 메소드에 대해 포스팅을 해보려고 합니다. 포스팅을 하게 된 배경은 이번에 회사에서 진행하는 프로젝트에서 앱의 버전별로 현재 지원하는 최소 버전과 비교해서 팝업을 띄우는 스펙이 있었습니다. 근데, 막상하려고하니 어떻게 할지 감이 잘 안왔습니다..? 왜냐하면 앱의 버전은 "3.5.0", "3.7.0"과 같은 String 타입으로 되어있잖아요... '이걸 어떻게 숫자로 비교할 수 있을까..?'라는 생각이 들었습니다. 그래서, 찾아보다보니 comapre이라는 메소드가 있어 해당 메소드를 이용해서 해결이 되었는데 어떻게 되어있는지 자세히 포스팅을 해보려고 합니다~ Compare이란? 우선 Compare을 알아보기 이전에간단하게 비교를 할 수 있는 기본에 사용하는 방..
-
[SWIFT] URL encoding (URL nil이 될 때 - addingPercentEncoding)
URL에 한국어를 넣거나 다른 특수문자들을 넣어야 될 때가 있는데요. 이럴 때, URL(string: someStr)을 이용하면 nil 값으로 변형되는 때가 있습니다. 저도 예전에 카카오 오픈 API를 이용해서 장소를 검색할 때, 분명 request에 해당하는 모든 정보를 넣었는데도 요청이 실패해서 삽질을 했던 적이 있는데요 😂 그 때, 정확한 URL은 기억나지 않는데 아마 이런 방식이었습니다. www.naver.com/search?location=명동 이렇게 URL로 get 요청을 보내면 분명 response가 와야했는데, 오지 않는 상황이었습니다. (404 에러가 났죠 ㅠㅠ) 그래서 URL로 바꾸는 부분에서 찍어보니 nil 값이 나왔습니다. (그러니깐 404가 나올 수 밖에..) let url = U..
-
[iOS] WKWebView (2) - 웹 뷰 사용하기
이전 글에서 WKWebView (1) 사용하기에 대해 작성했었는데요~ [iOS] WKWebView (1) - 웹 뷰 사용하기 이번에 프로젝트를 진행하면서 이번에 웹 뷰를 사용해서 해야하는 간단한 작업을 받았습니다 :) 그래서 이 참에 WKWebView는 자주 사용하는 컴포넌트이기도 해서 확실하게 공부해놓으면 도움이 되 dongminyoon.tistory.com 이번에는 이어서 WebView에서 JavaScript 코드를 어떻게 호출하고 JavaScript에서 어떻게 네이티브 앱 코드를 호출하는지 어떻게 JavaScript로부터 이벤트를 받아서 실행하는지에 대해 알아보겠습니다. WKUserContentController - 웹, 네이티브 소통하기 우선 JavaScript 코드를 네이티브에서 호출하거나 네이..
-
[iOS] UILabel - 현재 적용된 Line 수 구하기
오늘은 회사에서 개발을 진행하면서 UX적으로 UILabel의 Line이 3줄을 넘어갈 경우, 특정 부분을 ...으로 처리해주는 요구사항이 있었어서 해당 부분을 해결하기 위해 사용했던 방법에 대해 알아보려고 합니다. 이 요구사항을 구현하기 위해 많은 삽질(?)들을 했었는데요. 처음엔 아... 한 글자마다 width가 다르기 때문에, 한 글자의 크기를 구할 수 있다면 최대 라인에서 넘어간 글자만큼의 크기를 구해서 그정도의 크기에 맞게 해당 문자를 ...으로 처리해주어야겠다 생각해서 삽질을 시작했습니다.. (i, ㅁ의 넓이가 다르잖아요..? 그래서 각 넓이를 구해야겠다 생각했습니다.) 하지만 이 방법은 아닌것 같다고 생각이 들었고, 구글링을 해보아도 한 글자의 넓이를 구하는 부분은 나오지 않는 것 같더라구요 ..