Certificate와 Signing CSR(Certificate Signing Request) : 인증서 요청 정보, public key 포함 인증서(Certificate) : Apple로부터 인증받은 개발자임을 확인하는 증명 앱 서명(Signing) : Apple로부터 인증된 개발자가 만든 앱이라고 확인하는 것. 앱의 보안과 무결성 ...
Device Orientation 강제로 회전시키기
Orientation을 변경하려면 device를 직접 회전시켜야 함 Device를 회전시키지 않아도 orientation을 변경할 수 있다. UIDevice Orientation을 직접 변경하기 UIDevice의 orientation 속성은 readonly로 직접 값을 할당할 수 없음 하지만, Key-Value Coding을 사...
Architectural Pattern vs. Design Pattern
Pattern : 반복적인 문제에 대한 해결 방법 Architectural Pattern : Architecture 설계할 때 반복적으로 겪는 문제를 해결하기 위한 패턴 Clean Architecture로 애플리케이션 전체 구조를 설계한다면, MVC ...
iOS 개발자의 Shell Script 활용 기록
iOS 개발 중 귀찮은 작업을 간단한 script로 자동화하고 팀원들에게 공유했던 경험을 바탕으로 shell script의 기본 개념과 문법을 정리합니다. Shell script 만들기 Shell script란? Shell에서 사용하는 command line 명령어들을 나열하여 한 번에 실행시킬 수 있도록 만든 파일 Shell scr...
Linux 파일 권한 변경하기
Linux의 파일 권한 Linux는 여러 사람이 접속해서 사용하기 때문에 아무나 파일에 접근할 수 있음 중요한 파일을 아무나 열람하고 수정하지 못하도록 권한을 설정한다. 파일 권한 확인하기 ls -l 명령어를 사용하면 현재 directory에 있는 file들의 목록을 권한 정보와 함께 보여준다. 맨 앞에 표시되는 10자리가 권한 ...
CocoaPods 라이브러리를 설치할 때 Build Setting 변경하기 | Post Install
Post install post_install은 CocoaPods의 Hook 중 하나로, 이름 그대로 install이 끝난 뒤(post)에 Xcode 설정을 변경할 수 있는 기회를 제공한다. post_install block은 Pod::Installer라는 객체를 받는데, installer를 사용해서 target별로 build configu...
Static/Dynamic Library/Framework
Library vs. Framework Library : 프로젝트 외부의 독립된 코드 및 데이터 파일들의 집합. iOS 개발할 때는 Xcode target에 속하지 않은 외부 target을 의미. .a 또는 .dylib 확장자 Framework : Library 외에 문자열, image 등 resource들...
WKScriptMessageHandler에 의한 memory leak 해결하기
WebKit에서 JS interface를 사용하기 위해 message handler를 등록할 때, handler가 메모리에서 해제되지 않을 수 있음 원인 WKUserContentController의 add(_:name:) method는 handler 객체를 강한 참조함 SomeViewController가 메모리에서 해제될 때 handler...
WKWebView 통신(a.k.a. Javascript Interface)
Javascript Interface : WKWebView에 로드된 javascript 코드와 iOS 앱의 Swift 코드가 상호 통신할 수 있게 해 주는 인터페이스 WebKit은 javascript에서 native 함수를 호출하거나, native 코드에서 javascript 함수를 호출할 수 있는 방법을 제공 Native to JS N...
시간대(Timezone)를 고려한 Date 다루기
Date Date : Calendar system 또는 시간대(timezone)에 독립적인 특정 시점의 날짜를 가리키는 객체. 즉, Date는 ‘기준시(GMT)‘를 나타낸다. Date 인스턴스를 console에 출력해 보면 현재 날짜 및 시간과 다르게 출력되는데, ‘우리나라는 GMP+9 시간대에 있기 때문‘이다. 출력된 시간은 현재 시간...