UIScrollView 사용할 때 키보드 자동으로 닫기

UIScrollView 또는 이 뷰를 상속 하는 뷰(UITableView, UICollectionView 등)의 서브 뷰가 퍼스트 리스폰더 일 때, 해당 뷰를 드래그 할 때 키보드를 닫는 방법을 설정 할 수 있다.

UIScrollView에 keyboardDismissMode 프로퍼티가 있고, 이 값을 원하는 값으로 변경하면 된다.

기본값은 none이고 onDrag로 설정하면 드래그를 시작하면 무조건 키보드를 닫으며 interactive로 설정하면 키보드를 끌어서 닫을 수 있고 위로 당기면 취소할 수 있다.

UITableView의 셀에 텍스트 필드를 넣어서 사용자 입력 폼을 만들때 사용하면 편리하다. iOS 7.0 이전에는 직접 구현해서 만들어서 사용했는데 매우 편리하다.

특정 크기와 색상을 가지는 UIImage 객체 만들기

그냥 플랫한 이미지가 필요한 경우가 있는데(내비게이션 바의 쉐도우 이미지를 설정 한다거나?), 이때마다 이미지 리소스를 넣기는 귀찮으니 코드로 이미지를 만들어 보자.

코드

UIColor와 CGSize를 매개변수로 받는 convenience 생성자를 익스텐션으로 추가하고, 매개변수를 사용하여 이미지 컨텍스트를 만들어서 이미지 객체를 만들어서 초기화 한다.

진짜 언젠가는 쓸모가 있다…가뭄에 콩나듯

Let’s Encrypt Wildcard 인증서 발급받기

블로그를 다시 만들면서 기존에 사용하던 Let’s Encrypt 일반 인증서를 와일드카드 인증서로 변경했다.

Let’s Encrypt

Let’s Encrypt는 무료로 인증서를 발급해주는 곳이다. ACME 프로토콜을 사용해서 인증서를 발급 받을 수 있으며, Certbot과 같은 클라이언트를 사용하면 인증서를 쉽게 발급 받고 갱신할 수 있다.

ACME v2 부터 와일드카드 인증서를 지원하기 시작했다.

와일드카드 인증서는 기본 도메인을 포함하여 하위 서브 도메인에 무제한 사용 가능한 도메인으로 일반 인증서보다 유용하게 사용 가능하다.

클라이언트

ACME v2에 호환되는 클라이언트(ACME v2 Compatible Clients) 중 Let’s Encrypt에서 권장하는 Certbot(Certbot >= 0.22.0)을 사용할 것이다.

Certbot을 사용하여 와일드카드 인증서를 발급 받기 위해서는 작성일 기준으로 DNS 플러그인을 사용해야 한다. 메뉴얼 모드 또한 dns 챌린지를 지원하는데 ACME v2에 호환되는지는 확인하지 않았다.

나는 DigitalOcean의 DNS를 사용중이므로 certbot-dns-digitalocean 플러그인을 사용했다. 해당 플러그인들은 아직 certbot-auto로는 설치되지 않으며 Docker를 사용하여 플러그인을 사용할 수 있다.

Docker 이미지 만들기

Docker Hub에 Certbot 이미지가 등록되어 있지만 해당 이미지는 플러그인이 포함되어있지 않다. 그래서 플러그인이 포함된 이미지를 별도로 만들어야 한다.

먼저 Certbot 소스코드를 내려받고 certbot-dns-digitalocean 하위 폴더에 Dockerfile이 있으므로 이미지를 빌드한다.

발급받기

certbot-dns-digitalocean 플러그인을 사용하기 위해 DigitalOcean API Token을 발급받고 digitalocean.ini 파일로 저장한다.

이제 앞서 빌드한 이미지를 사용하여 인증서를 발급 받을 수있다. 기본적으로 Certbot은 ACME v1 서버를 사용하므로 –server 옵션으로 ACME v2 엔드포인트를 설정하고 –dns-digitalocean–dns-digitalocean-credentials 옵션으로 플러그인을 설정한다.

 

Certbot을 실행하고 각 단계를 진행하여 바인드 된 경로에 인증서를 발급받을 수 있다. 이때 기본 도메인을 포함하고 싶다면 *.domain.com, domain.com에 대한 인증서를 발급받아야 한다. *.domain.com에 대한 인증서만 발급받으면 기본 도메인은 포함하지 않게 된다.