적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

반응형

분류 전체보기 568

[Swift iOS] String to URL returns nil (space in URL)

let urlStr = "URL주소" let url = URL(string: urlStr)! 멀쩡히 잘 쓰던 이 코드에서 갑자기 크래시가 나며 앱이 종료되는 문제가 발생했다. Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value url 값이 nil 로 나오는 것을 보아 문자열을 url 형식으로 바꿔주면서 문제가 있었던 것 같은데.. 찾아보니 공백이 있을 경우 url 변환이 제대로 안되어 nil을 리턴할 수 있다고.. 확인해보니 url 에 넣어준 값 중에 빈 공백이 포함되어 있던 것이 하나 있던 것이었다. 문자열에서 공백을 없애는 방법들을 알아보자. 1. URL 인코딩 공백 없애는 법을 찾아봤더니 제일 먼저 찾은 방..

[Swift] 예외처리 throw, do-catch, try

예외처리 에러를 custom exception 으로 만들어 세분화해달라는 요청을 받았다. 왜 굳이? 🤬🤬🤬🤬 정말 이해가지않지만 그 쓸데없어 보이는 일을 하라니깐.. 우선 예외처리에 대해 좀 더 알아보기로 했다. 예를 들어, 성인의 나이를 출력하는 코드를 만들어본다면 다음과 같은 에러를 열거형으로 선언해줄 수 있다. enum ErrorMessage: Error { case outOfRange(from: Int) //20보다 작을 때 case notInt //숫자가 ㅇ } 참고 : Medium - Swift 에러처리 Error Handling

카테고리 없음 2021.11.11

[Swift iOS] keyboard top toolbar 추가하기

viewDidLoad() 에 다음을 추가해준다. let toolbar = UIToolbar() let doneBtn = UIBarButtonItem(barButtonSystemItem: .done, target: nil, action: #selector(done)) let customBtn = UIBarButtonItem(title: "button", style: .plain, target: nil, action: nil) let flexibleSpaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) toolbar.sizeToFit() toolbar.setItems([customBtn, flexi..

[iOS] Custom Push Test using Postman (feat. 푸시 sound 넣는 법, 딥링크 넣는 법)

하려던 일은 사라졌지만 덕분에 새로운 사실을 알았다. iOS에서 푸시 관련해서는 대부분 서버에서 처리를 해줘야 한다는.. 특정 푸시 알림이 올 때만 custom sound가 play 되도록 해달라는 요청을 받았다. 안드로이드는 요청이 먼저 들어와 이미 작업이 끝난 상태였는데 서버에서 변경 없이 앱에서만 처리 해줬다고 하셨다. 그런데 아무리 찾아봐도 iOS는 앱 내에서만 처리하는 방법이 안나오고 서버에서 sound 파일명을 함께 페이로드로 보내주는 방법만 나오더라. 그래서 베트남 10년차 개발자분께 자문을 구해봐도 그건 서버에서 해줘야 한다고 하고, 400명 있는 iOS 개발자 오픈채팅방에서도 동일한 답변을 해주셨다. 그래서 앱 내에서만은 처리가 불가능할 것 같다, 서버에서 추가로 보내주셔야 한다 말씀을 ..

[Swift iOS] UIComponents

다음과 같이 URL을 생성해줄 수 있다. var components = URLComponents(string: "https://hongssup.tistory.com") let type = URLQueryItem(name: "type", value: "post") let page = URLQueryItem(name: "page", value: "22") components?.queryItems = [clientID, scope] components?.url //https://hongssup.tistory.com/?type=post&page=22 반대로 URL에서 정보를 가져오고 싶다면 다음과 같이 받아올 수 있다. 참고 : ZeddiOS - URLComponents

[Swift iOS] UIAlertController not showing

alert가 뜨지 않는것이었다!?!? 왜?? 이유는 잘 몰라 하지만 해결은 되었다. DispatchQueue.main.asyncAfter(deadline: .now() + 1) 시간 텀을 주고 비동기로 alert 띄우니까 문제 없이 잘뜨더라. alert가 표시될 때까지 기다리지 않고 코드를 계속 실행해서 경고가 표시되지 않는 경우가 있다고.. 왜 그런 문제가 발생하는지 이해할 순 없지만 뭐 어쩄든 이렇게 하면 해결은 되었다. 참고 : Apple Developer - alerts not appearing

Web Application Server, WAS

서버 개발에 있어 가장 기초적인 개념인 '웹 서버'와 'WAS'의 차이? 웹 서버 : 웹 브라우저 클라이언트로부터 HTTP 요청을 받아들이고 HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 클라이언트(사용자)가 웹 브라우저에서 어떠한 페이지 요청을 하면 웹 서버에서 그 요청을 받아 정적 컨텐츠를 제공하는 서버. 정적 컨텐츠란 단순 HTML 문서, CSS, javascript, 이미지, 파일 등 즉시 응답가능한 컨텐츠. 동적 컨텐츠를 요청 받으면 WAS에게 해당 요청을 넘겨주고, WAS에서 처리한 결과를 클라이언트에게 전달해주는 역할도. 대표적 ex) Apache 웹 애플리케이션 서버 WAS : 웹 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크 인터넷 상에서 ..

웹 개발 2021.11.04

[swift iOS] WKWebView file download 웹뷰 파일 다운로드 (feat. FileManager)

웹뷰에서 파일 다운로드가 되지 않는 문제가 발생했다. 웹뷰에서의 파일 다운로드 버튼을 클릭 시 다운로드가 아니라 해당 파일 url 링크로 이동해버리는? 것이었다. 안드로이드는 웹뷰에 파일 다운로드 리스너를 설정할 수 있도록 되어있다고 하는데, iOS는... 여기저기 찾아보아도 엄청 깔끔하게 아 이거다! 하는 방법을 찾지 못했다. 여러 방법을 짜집기 하여 webview의 decidePolicyFor navigationAction에서 받아오는 url이 .pdf 등의 파일 형식으로 끝나면 해당 url로 이동을 하는 것이 아니라 파일 앱으로 다운로드 되도록 다음과 같이 구현하였다. 1. webView의 decidePolicyFor navigationAction에서 파일 형식 감지하기 이게 최선인지는 모르겠지만 ..

[Swift iOS] STT & TTS 성능 비교 - Speech / Naver / Google

STT (Speech-to-Text) : 음성인식(Speech Recognition) 사람이 말하는 음성 언어를 컴퓨터가 해석해 그 내용을 문자 데이터로 전환하는 처리. TTS (Text-to-Speech) : 음성합성(Speech Synthesis) 사람의 목소리를 합성하여 텍스트를 음성으로 변환하는 시스템 STT / TTS 성능을 다음 세가지 플랫폼을 활용해 비교해보았다. - 애플에서 제공하는 Speech 프레임워크 - Google Cloud - Naver CLOVA STT Apple Speech Google Cloud Naver CLOVA 난이도 중 상 상 속도 말이 길어질수록 버퍼링이 생김 Good Good 정확도 70% 일상적인 말들은 인식을 아주 잘한다. 어려운 단어와 문장들은 음... 97%..

[Swift iOS] Custom Keypad 만드는 법

왼쪽처럼 기존 키패드를 사용하여 금액을 입력하는 방식에서 00 / 000 을 추가하기 위해 오른쪽 커스텀 키패드를 만들어보게 되었다. 우선 그냥 custom 키패드 뷰를 만들어준다. textField.becomeFirstResponder() 하면 자동으로 기존 키패드가 떠버리는데 inputVIew를 사용하여 이를 커스텀 키패드로 할당해줄 수 있다. 숫자 버튼들은 숫자와 동일하게 tag를 설정해주고, OK 버튼 터치시 .resignFirstResponder()로 키패드를 없애준다. @IBOutlet weak var textField: UITextField! @IBOutlet weak var keyPadView: UIView! override func viewDidLoad() { super.viewDidLo..

728x90
반응형