생계유지형 개발자/Mobile 11

[ios] 매년 봐도 어려운 애플 인증서 정리요약

배경 애플은 자신들의 하드웨어(아이폰, 맥, 워치 등)에서 자신들이 인증을 한 소프트웨어(앱, 실행파일 등)만 실행될 수 있도록 강제한다. 무엇을 인증하냐면, 소프트웨어(이하 앱)를 만든 개발자가 신뢰할 수 있는 "놈"이 만든 "앱"인지를 확인하고 그렇다고 인증(인정)한다. 그래서 앱을 실행할 때마다 애플로부터 인증받은 앱인지 반드시 확인하며, 이 때 인증서가 사용된다. 앱을 설치하면 안에 인증서가 들어 있어서 실행할 때마다 "이 앱은 신뢰할 수 있는 놈이 만든 앱이니까 실행해도 된다"고 알려주는 거다. 그럼 만약 기간이 만료된 인증서가 포함된 앱을 실행하면? 당연히 앱을 실행할 수 없다. 인증서는 어떻게 앱에 들어있을까? 앱을 배포할 때 인증서를 포함시키기 때문이다. iOS 앱을 개발해서 앱스토어든, ..

[ios] input/textarea 한글 입력 오류 (내장 Buffer 문제)

문제상황 ios 단말기에서 Safari 브라우저든 웹뷰든(내장 브라우저가 사파리인건 동일하니까) 한글 입력이 이상하게 되는 현상이 있다. 같은 한글 문자를 입력했을 때 안드로이드는 괜찮고 ios에서만 발생하며, 영어는 문제가 없다. 예를 들어, 이지선을 찾기 위해 입력창에서 @이지 를 입력한 뒤 검색결과목록에서 이지선을 선택한다. 그러면 @이지선 이라는 단어가 textarea에 입력될거고 그 뒤로 입력하고자 하는 내용을 입력하면 된다. 이게 상식적인데... iOS는 상식 밖으로 동작한다. @이지 입력 후 @이지선을 완성한 다음에 'ㅇ'을 입력하면 기존에 입력하고 있던 '지'에 'ㅇ' 받침이 붙어서 @이지선징이 입력된다. 반면에 멀쩡한 경우도 있다. 목록에서 선택하기 전까지 입력 중이던 글자와 다음 글자를..

[ios] keyboard 높이만큼 webview 사이즈 올리기

아이폰은 입력할 때 키보드 영역이 화면 위에 뜨는 형태여서 화면의 아래 부분을 가리게 된다. 만약 웹뷰 화면에 하단 툴바가 있다면, 툴바 역시 가려지게 된다. 키보드 영역만큼 화면을 올려주기 위해서 NotificationCenter로 키보드가 나오고 사라지는 이벤트를 이용한다. NotificationCenter Observer 생성 / 제거 /* --------------------------------------------------- * Keyboard 노출 감지하는 NotificationCenter Observer 추가 * ---------------------------------------------------- */ func addKeyboardNotifications(){ // 키보드가 나타..

[ios] WkWebView에서 앱스토어 링크(itms-services://) 이동이 되지 않을 때

WkWebView로 개발한 앱에서 App Store에 등록된 Pluse Secure 앱의 설치화면으로 이동하는 링크가 있다. itms-appss://apps.apple.com/app/pulse-secure/id945832041?l=en 웹뷰에서 http 스키마를 가지는 일반적인 URL로 이동할 때는 별도의 코드를 추가할 필요가 없다. 반면에 http 또는 https 외의 스키마를 처리하려면 decidePolicyFor 함수 내에서 UIApplication.shared.open()으로 실행해주어야 한다. func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escapin..

[ios] UITextField 사용할 때 키보드 타입 변경

iOS에서 텍스트필드에 문자를 입력할 때 노출가능한 키패드의 종류는 enum 타입으로 정의되어 있고, 소스코드에서 변경 가능하다. Swift @IBOutlet var keywordInput: UITextField! override func viewDidLoad() { super.viewDidLoad() keywordInput.keyboardType = .default } enum UIKeyboardType: int default - Specifies the default keyboard for the current input method. asciiCapable - Specifies a keyboard that displays standard ASCII characters. numbersAndPunctu..

[ios] 배포환경 별 빌드설정 달리 하기

1) Project Configuration 생성 Target은 프로젝트에서 무료앱, 유료앱과 같은 상품별 분기가 발생할때 사용하는 것이고 개발, 운영, 스테이징 등의 배포환경을 분리할 때는 Build Configuration 을 활용한다. PROJECT > Info 탭에 들어가면 Configurations 항목이 있고 로컬 빌드 및 실행에 사용되는 Debug와 배포할 때 사용되는 Release 두 개가 기본으로 존재한다. Debug, Release 외에 다른 빌드환경이 필요하다면 + 를 눌러서 기존 설정을 복사(Duplicate)하는 형태로 생성한다. 예를 들면, Duplicate "Release" Configuration 하여 "Stage"라는 설정을 생성할 수 있다. 배포환경을 분리하는 이유는 대부..

[ios] Main.storyboard: warning: Unsupported Configuration: Medium Style before iOS 13.0

Loading Bar로 작명된 Application Indicator에서 다음과 같은 경고가 났다. Unsupported Configuration: Medium Style before iOS 13.0 경고 메세지를 없애는 방법은 1) 타겟 ios를 ios 13.0 이상으로 올리거나 2) 아래처럼 viewDidLoad() 메소드에 코드를 작성한다. // To solve this, Set your project's iOS Deployment Target to iOS 13.0 (or later). // If you cannot do that, choose one of the deprecated styles on the storyboad and // set Large style programmatically: ..

[ios] Exception: Could not instantiate class named WKWebView because no class named WKWebView was found

# 오류 Thread 1: Exception: "Could not instantiate class named WKWebView because no class named WKWebView was found; the class needs to be defined in source code or linked in from a library (ensure the class is part of the correct target)" # 원인 ViewController에서 WKWebView로 웹뷰띄우는 소스를 구현했을 때 WebKit framework 라이브러리를 프로젝트에 추가해주어야 한다. @IBOutlet var webView: WKWebView! # 해결

[ios] iOS 13 미만인 경우, SceneDelegate로 인해 실행 안될 때

Deployment Target이 iOS 13 미만인 상황에서는? Deployment Target이 iOS 13 미만인 상황에서도 UIScene과 UISceneDelegate를 사용할 수 있을까요? 만약 앱이 iOS 13 미만의 버전도 지원해야 한다면 어떻게 해야할까요? iOS 12 이하는 하나의 앱에 하나의 window를 가지고 있기 때문에(즉, multi window를 사용하지 않기 때문에) iOS 13에서 추가된 부분을 삭제하고 이전 버전(~iOS12)과 설정을 똑같이 바꿔주면 이전 방식대로과 동일하게 할 수 있습니다. 방법은 Xcode를 새로 열고 iOS13에서 새로 생긴 SceneDelegate.swift 파일 삭제 iOS13에서 AppDelegate에 추가된 UISceneSession과 관련된..