맥에는 VS Code, Atom 기타 훌륭한 에디터가 있지만 가끔 리눅스에서 처럼 vim을 사용할 순간이 있습니다. 하지만 처음 리눅스나 맥에 vim을 설치하면 탭이 스페이스 공백으로 설정되어 있지 않고 그냥 탭으로 동작하는 경우가 있습니다. 이때 vimrc 파일을 수정해서 파일을 수정해줍니다. 보통 개인 PC 일 경우에는 복잡한 vimrc 설정을 할 수 있겠지만 단순하게 꼭 필요한 설정만 해보겠습니다. ▼ 이렇게 설정하면 탭으로 인한 스트레스가 없습니다. smartindent : 들여쓰기 설정 tabstop : 탭 4칸 설정 expandtab : 탭 대신 스페이스로 설정 shiftwidth : 자동 들여쓰기를 4칸으로 설정 ▼ 다음은 좀 더 자세한 vimrc 옵션들입니다. . vimrc는 숨김 파일이며..
테이블 뷰에서 아이템을 추가하고 삭제 이동하는 기능은 많이 사용되는 기능입니다. 스위프트 UI에서는 List를 사용해서 보다 간단하게 이 기능을 구현할 수 있습니다. 이를 위해서는 NavigationView를 사용해야 하며 onMove, onDelete 함수를 사용합니다. 또한 토글 성격의 EditButton은 toolbar에 포함되며 macOS는 사용할 수 없고 iOS 전용입니다. ▼ 우선 해당 리스트에 사용될 데이터를 정의합니다. 총 5개의 데이터를 배열로 생성했습니다. ▼ 이제 NavigationView를 생성하고 그 안에 List를 추가합니다. ForEach 구문을 이용해서 배열에 있는 Text를 추가합니다. ▼ 리스트가 추가되었다면 이제 navigationTitle을 추가해주고 toorbar에 ..
IntelliJ는 다른 IDE에 비해서 Github를 연동하기 편리합니다. 만약 iOS 개발을 한다고 하면 Xcode에서 인텔리제이처럼 Github 연동이 별로 좋지 않아 소스트리나 기타 Git 관리 프로그램 또는 터미널에서 직접 Git 명령어를 사용하게 됩니다. 물론 최근에는 많이 좋아져서 그냥 Xcode로도 충분히 해결할 수 있을 것 같긴 합니다. 아무튼 Github에 쉽게 프로젝트를 remote로 설정하고 commit 하는 방법을 알아보겠습니다. ▼ 우선 인텔리제이로 새로운 프로젝트를 하나 만들어줍니다. 기존에 사용하던 프로젝트가 있다면 그 프로젝트에서 진행해도 됩니다. ▼ CMD+SHIFT+A 단축키를 누르면 다음 같이 Actions 검색창이 활성화 됩니다. ▼ 이제 검색창에 git이라고 검색하면..
시뮬레이터 다크모드 아이폰 개발을 하다보면 시뮬레이터를 자주 사용합니다. 최근 iOS 13 이후부터는 다크 모드를 지원하게 되는데요. 개발 초기에는 앱 개발 시 다크 모드를 포함하지 않는 경향이 있었지만 최근에는 다크모드를 지원하는 앱이 많아졌습니다. 일일이 시뮬레이터에 연결해서 다크모드를 테스트하는 것보다는 시뮬레이터에서 테스트하는 편이 훨씬 빠릅니다. 아이폰에서는 제어센터에서 손쉽게 변경할 수 있는데요. 시뮬레이터는 조금 귀찮긴 합니다. 그림 지금부터 시뮬레이터에서 다크 모드로 변경하는 법을 알아보겠습니다. ▼ 다음과 같이 앱 홈화면에 설정 메뉴를 선택합니다. ▼ 설정화면에서 아래쪽으로 스크롤해줍니다. ▼ 시스템 설정 마지막 부분에 개발자 메뉴를 선택합니다. ▼ Developer (개발자) 메뉴에서 ..
H2 데이터베이스 H2 데이터베이스는 관계형 데이터베이스 관리 시스템(DBMS)으로 자바로 작성되었습니다. 임베드 모드로 동작하거나 다른 웹 서버 데이터베이스 관리시스템과 비슷한 구성을 할 수 있도록 클라인트 서버 모드로 구동이 가능합니다. 대부분의 SQL 표준 구문을 지원하며 용량이 매우 적은 저용량 데이터베이스입니다. 스프링 부트환경에서 자주 사용되는 H2 Database를 설치해보고 간단히 데이터를 추가 삭제해보겠습니다. H2 데이터베이스는 별도의 프로그램 없이 웹 브라우저 콘솔을 이용할 수 있어서 편리합니다. https://h2database.com/html/download.html Downloads Downloads Version 2.1.214 (2022-06-13) Windows Install..
DataGrip 데이터 덤프 ▼ 데이터 그립을 이용해서 데이터 dump를 해보겠습니다. 우선 데이터를 복사할 스키마를 선택하고 오른쪽 버튼을 눌러서 메뉴를 불러옵니다. 그리고 Export Data to File 이라는 메뉴를 선택합니다. ▼ Extrator 항목에서 SQL Inserts 를 선택합니다. 이밖에도 CSV 나 JSON 같은 다양한 옵션을 선택할 수 있습니다. 만약 RDBM 데이터를 NOSQL 쪽으로 옮길때 JSON을 사용하면 유용할 것 같습니다. 엑셀을 사용할 때는 CSV를 사용하기 좋겠네요. 그밖에 Add table definition을 선택하면 DDL 구문이 만들어지는 것을 볼 수 있습니다. 오른쪽에 프리뷰는 실제 데이터가 아니라 이렇게 구성된다는 것을 보여주는 예시입니다.
Localizable.string 스위프트UI에서 다국어 처리를 해보도록 하겠습니다. 기존 오브젝티브 C나 Swift에서 하던 방식보다 훨씬 간단하게 처리할 수 있는 장점이 있습니다. 다음과 같이 .enviroment 옵션을 줘서 강제로 locale을 한국(ko)로 지정할 수도 있습니다. 기존 스토리 보드 개발 방식에 비해서 테스트 할 때 굉장히 유리합니다. 기존에는 자간이나 텍스트 사이즈를 및 개행을 확인해보기 위해서 일일히 실행해봐야 했는데 정말 획기적입니다. 다국어 처리하기 ▼ 우선 문자열 파일을 만들기 위해서 새로 파일을 하나 만듭니다. 프로젝트 파일을 오른쪽 버튼을 눌러서 New File... 버튼을 누릅니다. ▼ 아래쪽으로 조금 스크롤 하다보면 String File 을 확인할 수 있습니다. 선..
SwiftGen 이란? 스위프트를 사용해서 앱을 만들다 보면 리소스 관리가 안드로이드에 비해서 훨씬 복잡하고 어렵다는 것을 알 수 있습니다. 어렵다기보다는 관리가 제대로 이루어지지 않아서 실수를 하는 경우도 많고 워낙 IDE 가 훌륭해서(?) 까다로운 경우가 많죠. 하지만 이러한 모든 문제를 알고 만들어진 오픈소스가 있습니다. SwiftGen이라는 오픈소스인데요. 글 쓰는 현재 8천 명이 넘게 즐겨찾기로 추가해놓았습니다. 다음의 항목들을 관리할 수 있게 해 줍니다. Assets Catalogs Colors Core Data Files Fonts Interface Builder files JSON and YAML files Plists Localizable strings https://github.com/..
▼ 전체코드 ▼ LINE 6 : 그냥 텍스트를 노출합니다. ▼ LINE 9~10 : 텍스트의 사이즈를 변경합니다. ▼ LINE 13~14 : 텍스트의 사이즈와 스타일(.bold)을 변경합니다. ▼ LINE 27~28 : 텍스트의 사이즈와 스타일(.thin)을 변경합니다. .bold .semibold .heavy .light .regular .thin .ultraLight .black ▼ LINE 37~38 : 텍스트의 사이즈와 스타일 그리고 디자인을 변경합니다. .default .monospaced .reounded .sefif ▼ LINE 54~55 : 커스텀 텍스트 스타일을 변경합니다. .largeTitle .title .title2 .title3 .headline .subheadline .body ..
▼ 스위프트 UI를 사용할 때 이미지를 가져와 사이즈를 화면에 맞게 조절하고 원 모양의 이미지를 만드는 방법을 알아보겠습니다. 이미지를 사용하는 방법은 아주 간단한데 사용하는 패턴은 여러가지가 될 수 있으니 알아두는게 좋습니다. 우선 예제를 실행하기 전에 Assets 폴더에 img 라고 아무 이미지나 하나 넣어줍니다. ▼ 다음과 같이 VStack을 하나 만들고 그 안에 Image를 하나 새로 만들어줍니다. 보는 것과 같이 이미지가 화면이 꽉찬 것을 볼 수 있습니다. 기본으로 이미지를 추가하게 되면 높이를 기준으로 좌우가 넓게 표현됩니다. ▼ 이번에는 .resizable() 을 추가해서 화면을 폭에 맞추어보겠습니다. 화면이 아래위로 꽉차서 비율이 깨지는 것을 볼 수 있습니다. ▼ 이제 .aspectRati..
아이폰 앱을 만들면 무한 스크롤을 구현해야 하는 경우가 있습니다. 주로 서버에서 보내온 데이터가 페이징 처리가 되있는 경우에 무한 스크롤을 구현합니다. 더보기 버튼을 만들어서 구현할 수 도 있지만 더 보기 버튼 보다는 무한 스크롤로 테이블 뷰를 구현하는 것이 더 자연스럽습니다. 지금 부터 무한 스크롤을 위해서 필요한 것들과 방법에 대해서 알아보겠습니다. ViewModel 코드 (데이터 정의) ▼ 우선 통신하는 부분을 보겠습니다. 코드가 길어서 복잡해보이겠지만 단순합니다. totalPage, currentPage, isLoading 변수를 선언해줍니다. 데이터 통신이 끝나면 테이블 뷰 데이터에 기존 데이터를 포함해서 appendData를 해줍니다. 또한 통신이 시작하기 전에 isLoading 값을 true..
스위프트의 동적 멀티플라이어 오토레이아웃을 사용하다보면 동적으로 멀티플라이어 값을 동적으로 바꿔야 할 경우가 있습니다. 특히나 iPad iPhone을 동시에 개발 할 때 필요합니다. 해당 비율을 동적으로 주기 위해서는 NSLayoutConstraint에 multiplier를 적용해주면 되지만 몇 가지 생각해야 하는 것이 있습니다. 다음과 같이 Constraint를 removeConstraint로 삭제한 뒤에 다시 addConstraint를 이용해 추가해줘야 합니다. 또한 새로 화면을 업데이트 하기 위해서 layoutIfNeeded 함수를 호출해줘야 합니다. ▼ 우선 다음과 같이 extension을 사용해 constraintWithMultiplier라는 함수를 만들어줍니다. 내부적으로 하는 일은 그냥 새로..