안드로이드 단축키 안드로이드 스튜디오를 사용하면서 자주 사용하게 되는 유용한 단축키를 정리합니다. 인텔리제이에서도 동일하게 사용가능합니다. 윈도우와 리눅스에서는 맥과 단축키가 다릅니다. 모두 저장 동기화 모든 항목 검색 찾기 다음 항목 찾기 이전 항목 찾기 바꾸기 작업 찾기 기호 이름으로 검색 클래스 찾기 자동 정렬 유용한 단축키 구분 설명 윈도우/리눅스 맥 일반 모두 저장 Control + S Command + S 동기화 Control + Alt + Y Command + Option + Y 검색 모든 항목 검색 (코드와 메뉴 포함) Shift (키를 두 번 누름) Shift (키를 두 번 누름) 찾기 Control + F Command + F 다음 항목 찾기 F3 Command + G 이전 항목 찾기 ..
iOS WKWebView Done 버튼 얼마전에 개발을 하면서 아이폰 웹뷰에 Done 닫기 버튼이 기본적으로 활성화 된다는 사실을 알았습니다. 웹뷰의 보조적인 기능을 하는 버튼인데 사실상 뷰 영역을 더 작게 보이게 하며 특히 아이폰 미니의 경우 화면이 더 작아지더군요. 그래서 처음에는 웹에서 처리하는 건 줄 알았는데 iOS 네이티브에서 WebView를 상속받아서 처리해줘야 했습니다. 생각보다 간단하게 작업할 수 있습니다. ▼ 우선 웹킷의 WebView를 상속 받은 클래스를 하나 만들어줍니다. 저는 RichEditorWebView 라는 이름으로 만들었으나 다른 이름으로 만들어줘도 무방합니다. ▼ 이제 상속 받아서 쓰면 됩니다. WebView를 확장한 RichEditorWebView를 상속 받아서 사용하면 ..
아이폰 롱터치 방지 아이폰 개발을 하다보면 웹뷰를 사용할 때가 많습니다. 하이브리드 앱을 개발하다보면 WebKit의 특성을 발견하게 됩니다. 네이티브 앱으로 개발할 때는 텍스트를 길게 누르거나 선택을 할 수 없지만 보통 하이브리드 앱으로 개발된 iOS 웹 앱을 보면 텍스트가 보통 선택되기 마련입니다. ▼ 텍스트 선택 방지 코드로 웹뷰가 로드 된 뒤에 didFinish 이벤트에서 설정해주면 됩니다. Web CSS 공식 문서를 보면 iOS Safari 디스플레이의 callout 기능이 포함 되어 있는 것을 확인 할 수 있습니다. https://developer.mozilla.org/en-US/docs/Web/CSS/-webkit-touch-callout -webkit-touch-callout - CSS: C..
iOS 저전력 모드 iPhone 사용자가 저전력 모드(low-power mode)를 사용하게 되면 iOS 개발을 할 때 몇 가지 제약이 생깁니다. 특히나 절전모드 사용시 동영상 비디오 자동재생을 지원하지 않습니다 때문에 개발을 할 때 저전력인지 확인해야 하는 때가 있는데요. 오늘은 저전력 모드에서 Swift 코드로 저전력 모드를 판단하는 코드와 방법을 알아보겠습니다. 저전력 모드의 경우 iOS 9 부터 지원하고 있고 다음과 같은 제약이 있습니다. CPU 쓰롯틀링 (60% 성능제한) 백그라운드 앱 갱신 제한 웹뷰 비디오 자동 재생 제한 자동 다운로드 기능 제한 GPU 퍼포먼스 저하 화면 밝기 저하 우선 아이폰에서 저전력 절전 모드를 확인하기 위해서는 두 가지 방법이 있습니다. 첫 번째로 직접 속성에 값을 ..
책, 사업의 철학 마이클 거버 저자(글) 이제용 번역 라이팅하우스 2015년 09월 01일 목차 우리는 필요이상으로 많은 일을 하고 있다. 그보다 엉뚱한 일을 하는데 문제가 있다. 이 책에 담긴 네 가지 중요한 관점 사업은 거창하지 않다, 기업가 신화를 정화기 이해하고 적용하라 턴키 혁명 기법 사업개발 프로세스 턴키 + 사업개발 프로세스 = 예측가능한 방식 성장하려면 끊임없이 변화해야만 한다. 헤라클레스 같은 기업가는 실제 없다 어느 날 기업가 열병에 걸린다 치명적 실수! 기술적 직무는 그 기술적 직무를 수행한 사업과는 완전 별개다. 창업을 하는 기술자들은 이런 사실을 알지 못한다. 그저 일하러 가는 장소일 뿐이다. 즉 도급업자가 된다. 프로그래머는 소프트웨어 사업에 진출한다. 연주자는 악기점을 연다. ..
Swift Date 객체 변환하기 Swift에서 날짜 객체를 수정하거나 바꾸기 위해서는 보통 Calendar 클래스를 사용합니다. 날짜를 다루는 일이 생각보다 복잡하고 어려울 때가 있는데 오늘은 단순히 날짜에 값을 더해서 반환하는 방법을 알아보겠습니다. 앱 개발을 하면서 갑자기 1일을 더해서 Date 객체를 사용해야 하면서 기억하기 쉽게 블로그에 글을 남깁니다. 우선 1일을 추가해서 데이트 객체를 만들려면 우선 기준이 되는 Date 객체를 하나 만들어 줍니다. ▼ 다음과 같이 today 변수에 오늘 날짜를 가리키는 새로운 Date 객체를 생성합니다. ▼ 이제 Calendar 클래스를 이용해 값을 추가해 줍니다. date 함수의 파라미터는 각각 다음의 파라미터를 인자로 받습니다. 저는 day로 설정해서 하..
CocodPods Podfile.lock CocoaPods 를 사용하면 Podfile.lock이라는 파일을 확인할 수 있습니다. 이는 일반적으로 .gitignore에 포함되지 않습니다. 그 이유는 여러 사용자(개발자)가 동일한 소스 서드파티 라이브러리를 공유하고 사용하기 위해서 입니다. repo를 업데이트 하거나 deintegrate 명령을 통해 파일을 변경할 수 있지만 해당 lock 파일이 고정 됨으로써 모두 동일한 소스를 사용한다고 보장할 수 있습니다. Package.resolved 이와 비슷하게 Xcode의 Swift Package Manager(이하 SPM)를 사용하면 다음과 같이 git에 commit 할 때 포함 여부를 묻습니다. 대체적으로 userdata 같은 경우는 Xcode에 포함하지 않는..
▼ Vue에 리스트를 그려주기 위해서 데이터를 정의합니다. 배열 형태의 animals라는 데이터를 정의하고 3개의 데이터를 추가해 줍니다. 각 데이터에는 food라는 값이 있습니다. 이 값 역시 배열로 이중 리스트를 그리기 위해서 필요합니다. 나머지 값의 출력은 생략하고 Vue에서 이중 for 문 형태의 값을 출력해 보겠습니다. ▼ 이번에는 데이터가 잘 나오는지 확인하기 위해 div 태그에 animals 값을 그대로 출력해 보겠습니다. 머스타치 문법으로 animals를 표시합니다. 뷰의 Mustache 문법은 {{ }} 안에 데이터를 출력하는 방법으로 실제 데이터가 그대로 렌더링 되는 것을 볼 수 있습니다. 값을 확인하기 위해서 출력해보겠습니다. ▼ 이번에는 div 태그에 v-for 예약어를 통해서 an..
Vuejs CDN Vue를 처음 개발할 때 일반 html 파일에서 Vue를 사용해 보고 싶은 분들이 있을 것 같습니다. React와 Vue를 비교했을 때 훨씬 개발하기 쉽고 단순하며 초보 웹 개발자들이 웹 개발에 접근하기 쉽고 개발에 능숙한 사람들도 쉽게 웹 개발에 입문할 수 있을 것 같습니다. 오늘은 일반 html 파일에 Vue를 이용해서 데이터를 정의하고 간단하게 바인딩해서 표시하는 방법을 알아보겠습니다. ▼ 1. 우선 빈 프로젝트를 만듭니다. 만약 IDE 로 개발하는 환경이 아니라면 단순히 빈 폴더를 만드시면 됩니다. ▼ 2. 프로젝트(폴더) 안에 새로운 HTML 파일을 만들어줍니다. (파일명 index.html) 파일명은 마음대로 정해도 상관없습니다. 확장자만 html 파일로 만드시면 됩니다. ▼..
Swift 오디오 재생 iOS 개발을 할 때 오디오를 플레이하려면 AVFoundation을 import 해야 합니다. 우선 간단한 beep 음을 재생하기 위해서 wav 파일을 준비했습니다. 총 3개의 파일이고 시작음과 종료(성공, 실패)음이 있습니다. 다음과 같이 정의 Beep 음 타입을 정하는 BeepType이라는 enum을 하나 정의합니다. 타입은 String타입으로 정의해서 해당 타입의 문자열은 파일이름과 매칭시켜 줍니다. 이제 재생을 할 클래스를 만들고 다음과 같이 AVFoundation을 임포트 해줍니다. 또한 soundEffect라는 AVAudioPlayer 객체를 선언합니다. 아직 객체를 할당하지는 않았지만 강제 옵셔날 언래핑(!) 해서 선언합니다. 다음 함수는 오디오 재생을 위한 함수입니다..
xcframework 오류 앱스토어에 앱을 올릴때 라이브러리에 문제가 있다면 앱스토어에서 업로드를 거부합니다. 기존에 다양한 라이브러리들이 존재하지만 새롭게 추가된 xcframework의 경우 처음 추가해보기 때문에 문제가 발생해도 어떻게 처리해야 할지 난감하더군요. 다음은 에러에 대한 내용입니다. Asset validation failed Invalid bundle structure. The "AIA.app/Frameworks/sdk.framework/Frameworks/native_engine.framework/native_engine" binary file is not permitted. Your app cannot contain standalone executables or libraries, o..
WKScriptMessageHandler 구현하기 자바스크립트에서 네이티브로 특정 메시지를 호출할때는 iOS 스위프트에서 WKScriptMessageHandler 프로토콜을 구현해줘야 합니다. 자바스크립트 메시지 핸들러를 구현하면 WKScriptMessage 타입의 message 객체를 파라미터로 전달 받을 수 있습니다. 해당 데이터는 body와 name으로 구현되어 있습니다. name은 보내는 쪽과 맞춰서 String 타입으로 구현되고 실제 사용될 데이터는 message.body에 담기게 됩니다. 하지만 약속된 데이터가 JSON일 경우 전달 받은 데이터를 디버깅해보면 문자열이 아닌 딕셔너리(NSFronzenDictionaryM) 타입이라는 것을 확인할 수 있습니다. 이 데이터를 파싱하기 위해서는 우선 ..