[Xcode] 내가 자주쓰는 Xcode 단축키 정리

이미지
Xcode 단축키 정리 개발을 하면서 단축키를 얼마나 쓰냐에 따라 생산성의 차이를 느끼면서, 아 모르는 단축키가 있으면 한번 시간내서 외워두어야겠다고 생각했습니다. 모르는 단축키가 있다면 이번에 배워 생산성을 올려봅시다! 네비게이터 (좌측) ⌘ + 0 - 네이게이터 보이기 / 숨기기 ⌘ + 1 ~ 9 - 번호 순서대로 네비게이터 메뉴로 이동 인스펙터(우측) ⌘ + ⌥ + 0 - 인스펙터 보이기 / 숨기기 ⌘ + ⌥ + 1 ~ 4 - 번호 순서대로 인스펙터 이동 화면 제어 ⌃ + ⌘ + F - 전체화면 진입 / 나가기 ⇧ + ⌘ + Y - 디버그 창 숨기기 / 보이기 코드 편집 ⌘ + ⬅(방향키) - 줄의 맨 끝/처음 으로 이동하기 ⌘ + ⇧ + ⬅(방향키) - 줄 선택하기 ⌥ + ⬅(방향키) - 단어 단위로 이동하기 ⌃ + i - 인덴테이션 ⌘ + / - 주석처리 ⌥ + ⌘ + / - 메소드 설명추가 ⌘ + ‘-’ - 줌아웃 ⌘ + ‘+’ - 줌인 ⌘ + ⌃ + 0 - 줌리셋 ⌘ + ⇧ + A - 액션 메뉴 보이기(⌘ + 클릭) ⌘ + ⌃ + E - 이름 한번에 바꾸기 네비게이션 ⌘ + ⇧ + J - 현재 파일의 위치 보이기 ⌘ + ⇧ + O - 퀵오픈 ⌥ + click - 퀵헬프 ⌘ + T - 새탭 빌드 / 실행 ⌘ + R - 앱 실행 ⌘ + B - 빌드 ⇧ + ⌘ + K - 프로젝트 클린 ⌘ + . - 프로젝트 종료 검색 ⇧ + ⌘ + F - 프로젝트 내 검색 ⌘ + F - 파일 내 검색 ⌘ + G - 다음 찾기 시뮬레이터 ⌘ + S - 스크린샷 ⌘ + K - 시뮬레이터 키보드 ⌘ + ⬅(방향키) - 화면돌리기 ⌘ + ⇧ + H - 홈화면이동 ⌘ + ⌃ + Z - 디바이스 쉐이크 정리 주로 사용하는 단축키 위주로 정리해 봤습니다. 모르는 단축키도 알아가게되네요. 볼드체로 강조한 것은 정말 많이쓰는 기능이라 안쓰신다면 외워서 사용해보시길 추천드리...

[IOS] How to delete macOS App, tvOS App 1.0 Prepare for Submission

이미지
[IOS] How to delete macOS App, tvOS App 1.0 Prepare for Submission appstoreconnect에서 실수로 macOS App, tvOS App의 1.0 버전을 만들어 버렸습니다. 괜찮겠지 싶어서 그냥 내버려 두었더니 심사요청할 때, 관련 정보들을 채우라는 경고문이 나와서 지우는 방법에 대해 기록으로 남겨둡니다. 앱 심사요청 바로 직전 단계라면 간단합니다. 마우스를 버전에 올려보면 빨간 삭제 버튼이 나타납니다. 버튼을 눌러 삭제 해 줍시다. 하지만 문제는 이 버튼이 나타나지 않을 경우입니다. 여러가지 이유로 나오지 않을 수 있을텐데 제가 경험한 부분은 앱의 생성이나 삭제 권한이 없을 때 새로 출시 할 버젼이 없을 때 였습니다. 1번의 경우에는 관리자에게 권한을 받아 삭제하시면 됩니다. 2번의 경우, 출시 할 새로운 버젼을 추가 하시고 다시 마우스를 가져가 보시면 빨간 버튼이 생기고 삭제를 할 수 있게됩니다.

[swift] 커스텀 버튼을 만들고 커스텀 뷰를 그리기

이미지
[swift] 커스텀 버튼을 만들고 커스텀 뷰를 그리기 버튼영역 내에 그림을 그려 커스텀 버튼을 만들고, UIView에 그림을 그려주는 기능을 구현하려합니다. 삼각형 버튼, 원버튼, 정사각형 버튼을 만들고, 각각의 버튼이 눌렸을 때 뷰의 그림이 버튼의 모양과 같이 나와야 합니다. 구조 메인 뷰 컨트롤러, 도형이 그려진 뷰, 버튼 3개 스토리 보드에는 버튼 개를 올려놓고, 라벨을 그리고, 그 아래 커스텀 뷰를 그려줍니다. 도형 그리기 새 파일을 만들어서 UIButton을 만들어 줍니다. class 앞에 @IBDesignable 을 붙이면, 그린 결과가 storyBoard에 바로 적용됩니다. // // CircleButton.swift // viewTest // // Created by 이현호 on 2020/07/20. // Copyright © 2020 tempYsoup. All rights reserved. // import UIKit @IBDesignable class CircleButton: UIButton { var shape:Shape = .circle override func draw(_ rect: CGRect) { let path = UIBezierPath(ovalIn: rect) UIColor.blue.setFill() path.fill() } } 그리고, draw라는 함수를 override해 주면 커스텀 하게 그릴 수 있습니다. 위와 같이 삼각형, 정사각형도 그려줍니다. 스토리 보드에 배치 해 주었던 버튼의 클래스로 설정으 해주시면 짜잔 그림이 그려집니다. 클릭 이벤트 뷰 컨트롤러에 @IBAction 버튼 클릭을 클릭한 버튼을 인식해 label의 text를 변화시켜 줍니다. enum Shape :String { case triangle case square case circle ...

[IOS] 어플리케이션의 생명 주기 - Life Cycle of Application

이미지
[IOS] Application Life Cycle 앱의 생명주기는 앱의 사용과정 중 가지는 상태값 입니다. foreground, background을 오가며 앱의 상태값이 바뀝니다. 크게 5개의 상태를 가지고 개발자가 상태에 맞게 개발할 수 있도록 인터페이스를 제공합니다. 상태 Not Running(Terminated) : 앱이 시스템에 의해 완전히 종료된 상태입니다. 혹은 아직 실행되지 않았을 때도 Not Running 상태입니다. Inactive(Foreground) : 앱이 실행 중인 상태입니다. 하지만 이벤트를 받지는 않습니다. Active 상태로 넘어가기 전에 앱은 반드시 이 상태를 거칩니다. 알림 같은 특정 알림창이 화면을 덮어서 앱이 event를 받지 못하는 상태가 여기에 해당됩니다. Active(Foreground) : 앱이 실행 중이고 이벤트를 받을 수 있는 상태입니다. Foreground 상태에 있는 앱들은 보통 이 상태입니다. Background : 앱 사용중에 다른 앱을 실행하거나 홈 화면으로 나갔을 때 상태입니다. 백그라운드에서 동작하는 코드를 추가하면 suspended 상태로 넘어가지 않고 백그라운드 상태를 유지하게 됩니다. 처음부터 background 상태로 실행되는 앱은 inactive 대신 background 상태로 진입합니다. 음악을 실행하고 홈 화면으로 나가도 음악이 나오는 상태가 이 경우에 해당됩니다. Suspended : 앱이 background 상태에서 추가적인 작업을 하지 않으면 곧바로 suspended 상태로 진입합니다. 앱을 다시 실행할 경우 빠른 실행을 위해 메모리에만 올라가 있습니다. 메모리가 부족한 상황이 되면 iOS는 suspended 상태에 있는 앱들을 메모리에서 해제시켜서 메모리를 확보합니다. OverView 전체적인 그림을 놓고 봤을 때 Not Running 상태에서 Inactive 전환되기까지 거치는 단계가 있다. 그리고 Inactive에...

생에 첫 번째 멘토링

이미지
생에 첫 번째 멘토링 누군가에게 조언을 해 줄 수 있으리라고 생각하지 못했는데, 기회가 생겨서 분에 넘치는 조언을 해주고 기록으로 남겨봅니다. 경력이 길지 않아 대답을 못 할 수도 있기 때문에, 미리 질문을 받아 고민을 한 후에 대답해 보았습니다. 저도 많이 했었던 고민에다가, 조언 받았던 내용도 많아서 누군가에게 도움이 되길 바라며 남겨놓습니다. 혹시 비슷한 고민이나 다른 질문이 있다면 언제나 연락주세요! 환영입니다. 메일주소 : mizzking75@gmail.com 1. 현호님의 개발 영역은? 현재는 IOS 개발을 하고 있습니다. 아이폰에서 실행되는 앱이죠. 하지만 개발 영역이라는 곳에 한계를 두면 안된다고 생각해요. 서버에서 벌어지는 일이, 웹에서 벌어지는 일이 내 개발영역이 아니라는 생각을 가지게 되는 것을 경계하고 있어요. 다른 개발영역에서 일어나는 일을 알 수 있으면 좋고 항상 나에게 들어온 질문을 내가 답하려고 노력하고 있어요. 2. 현호님의 첫 취준 일지 전 학점이 좋지 않았어요. 그래서 정말 많은 기업에 지원을 했고, 나름 판단했을 때 돈을 적당히 주면서 비전이 있어 보이는 곳을 골랐습니다. 채용이나 다른 곳에서 OO에 들어가기로 마음먹은 이유라고 답한 것들은 사실 겉 포장이죠. 첫 취직에 많은 것들을 고려하긴 현실적으로 힘든 것 같아요. 고생을 해 봐야 나랑 맞는 부분은 이런 것들이 있고 이러이러한 문화는, 조건은 나랑 맞지 않는 것이구나를 깨달을 수 있는 것 같아요. 3. 다시 25살이 되신다면 어떤 커리어로 무슨 개발을 도전하고 싶을지 지금도 쌓고 있는 커리어를 영원히 고집할 수 있을 것이라고 생각하지 않아요. 그래서 돌아가서 다시 다른 커리어를 쌓고 싶다라는 생각을 하지 않았던 것 같아요. 어차피 개발자는 평생 공부하며 다양한 것들을 배워야 하기 때문이죠. 그래도 다시 돌아간다면 학생때는 google summer code같은 것에 참가하고 싶어요. 또 git의 사용법을 익히고 오...

[swift] Delegate 패턴 감잡기

이미지
[swift] Delegate 느껴보고 이해하기 delegate를 구현하다가, delegate에 대해 정리 해보는 기회를 가지면 좋을 것 같아서 좋은 예제를 보고 정리해놓는다. 정의 delegate를 사전에 검색해 보면 대리자, 위임자라고 나온다. delegate를 쓰면 무언가를 위임 받는 것 같다. 실제 사용되는 곳을 보면 프로토콜을 사용해서 무엇을 구현해야 하는지 제안한다. 간단한 예제 이름을 입력받아, 라벨에 출력해주는 앱을 제작한다. 구현방법은 다음과 같다. import UIKit class ViewController: UIViewController { @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var textField: UITextField! override func viewDidLoad() { super.viewDidLoad() } @IBAction func buttonClicked(_ sender: Any) { nameLabel.text = textField.text; } } 버튼이 눌릴 때, nameLabel.text = textField.text; 하게 된다. 비슷한 기능을 delegate를 사용해서 구현해보자. UITextFieldDelegate TextField에서 일어나는 일에 대한 위임을 ViewController가 받아서 처리해보자. 일단 자 이제부터 이녀석 에게 일어나는 일은 내가 처리해줄게! 를 선언합니다. override func viewDidLoad() { super.viewDidLoad() textField.delegate = self # self는 ViewController입니다 } 간단하죠? textField의 위임자(delegate)는 self야 가 굉장히 직관적입니다. 그럼 그 다음에 textField...

[WEB] css - flex

이미지
css - flex 기본적으로 css를 사용해서 element를 움직이는 방법에 대해 공부하고 정리 해본다. Horizontal div를 여러개 써 주었을 때 옆에 생기지 않는다. 바로 옆에 써 주었는데도 아래에 붙는다. 그 이유가 궁금해서 찾보았다. div는 width와 height가 있는 block의 성질을 가지고 있기 때문에 할당 공간을 제외한 나머지 여백에는 엄청나게 큰 마진이 생기기 때문에 아래에 붙는다. 그래서 div의 위치를 바꿔줄 때, 즉 한줄로 배치하려고 하면 다음과 같은 설정을 해 주어야 한다. display: inline-block inline과 inline-block은 차이가 있다. inline은 width와 height의 설정을 가지지 않기 때문에 div에는 쓸 수 없다. 예를 들면 문자열은 inline 할 수 있다. 하지만 div는 block의 성질을 가지고 있기 때문에 inline-block 을 써줘야 한다. 하지만 이 경우에는 우리가 설정하지 않은 미세한 여백이 생겨버린다. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <style> .box { color: white; width: 100px; height: 100px; background-color: blue; display: inline-block; } ...