본문 바로가기

모바일앱/iOS91

ios 소켓통신에 대하여 0. 서론 오늘 몇시간을 소켓통신에 대하여 조사를 했는데 생각보다 많은 자료를 찾지는 못했다. 한번 다시 정리해야할 자료이므로 참고 부탁드립니다. 한번 쭉 읽어보셔도 좋을 거에요 1. 선행지식 📌 📌 2. 개념 소켓이란 정규 유닉스 파일 기술자를 이용하여 다른 프로그램과 정보를 교환하는 방법 용어 설명 유닉스는 운영체제 중 하나입니다. 유닉스에서는 모든 것이 파일로 존재하게 됩니다. 그리고 소켓도 유닉스에서 파일 로 취급받습니다. 모든 유닉스 프로그램은 파일 기술자(File Descriptor) 라는 것을 통해서 입출력(read, write)을 실행합니다. 파일 기술자는 열린 파일을 의미하는 인덱스 번호입니다. 비슷한 맥락으로 **소켓 기술자(Socket Descriptor)**는 소켓을 만들고 얻은 파.. 2022. 4. 20.
WKWebView에서 보내는 JS를 캐치하는 방법 웹에서 보내는 javascript를 캐치하려면 미리 등록을 해야한다. 이때 javascript를 보낼때 message에 javascript를 보내고 body값을 함께 NSDictionary (JSON) 형태로 보내주면 그걸 파싱해서 받을 수 있다. // MARK: - WKScriptMessageHandler extension MainViewController: WKScriptMessageHandler { /// message name: javascript 명 /// 이렇게 사용하려면 javascript 명을 미리 등록을 해야한다. func userContentController(_ userContentController: WKUserContentController, didReceive message: W.. 2022. 4. 15.
WKWebView 기본메서드 와 Delegate메서드 [WKUIDelegate,WKUIDelegate] WKWebView에서 자주 사용하는 기본메서드 load( _: ) HTML 파일을 읽어들일 때 사용. 쉽게 말해 웹페이지를 로드한다고 생각을 하시면 될 거 같습니다. 비동기 메서드라 동시에 다른 로직을 처리할 수 있어 앱이 자연스럽게 진행이 되어가는 장점이 있습니다. func load(_ request: URLRequest) -> WKNavigation? loadHTMLString(_:baseURL:) 말 그대로 HTMLString을 읽어오는 메서드로 직접 웹페이지를 로드해서 웹페이지로 이동을 하거나 개발자가 만든 URL로 이동하게 함 첫 번째불러올 웹페이지 url을 읽어오는 것입니다. 두 번째relative URL을 해결할 때 사용되는 기본 URL func loadHTMLString(_ string: .. 2022. 4. 14.
MyWebBrowser프로젝트를 통한 웹뷰 뜯어먹기 일단 앞으로 여러가지 기능을 앞으로 구현하기위해 간단하게 기능을 추가해보려고 한다. 그리고 편의상 모든 포스팅은 편의 말투로 작성합니당 프로젝트생성 프로젝트는 원하는 폴더에 생성합니다. 세팅 sceneDelegate는 사용하지 않을 예정이기 때문에 아래 세가지 작업을 진행한다. - SceneDelegate.swift 파일 삭제 - AppDelegate var window: UIWindow! 입력 AppDelegate에 있는 UISceneSession과 관련된 두 메소드 삭제 info.plist에 등록된 Application Scene Manifest 삭제 -> 삭제 안할경우 AppDelegate에 정상작동을 안해요 iOS13을 지원하게 된 이후부터 프로젝트엔 자동으로 SceneDelegate가 세팅되어있.. 2022. 4. 8.
얼럿 addAction 한번에 추가하기 여러개의 Action을 한번에 추가하기 콜렉션의 사용법중 forEach와 for in 이 있다. for in 은 모든 요소의 갯수만큼 반복하지만 for each는 클로저를 파라미터로 주고 요소 갯수만큼 반복한다. For - each는 반복 실행하려는 코드를 파라미터로 받고, 저장된 요소는 클로저 상수로 전달된다 for - in문은 우리가 직접 구현하는 "반복문" 하지만 forEach는 내가 반복하고 싶은 구문을 forEach라는 함수의 파라미터로 "클로저"로 작성해서 넘겨주는 것 그렇기 때문에, 반복문 안에서만 사용할 수 있는 continue, break는 for - in 에선 사용 가능하지만, forEach에서는 불가능하다. 내가 전달한 print 함수를 찍는 클로저를 nums 요소의 갯수(4)만큼 반.. 2022. 4. 4.
네비게이션 컨트롤러 NavigationController 사용하기 NavigationController 네비게이션 컨트롤러는 ViewController의 타입 중 Container ViewController Type에 속한다. 이 컨테이너 뷰컨트롤러에는 TabBar ViewController또한 포함된다. ViewController Type ViewController는 두가지 타입이 존재한다. Content ViewController Type: Container ViewController Type: NavigationViewController / TabBarViewController 처럼 여러개의 ViewController를 제어하는 ViewController 네비게이션 인터페이스 아래 그림은 iOS에서 정말 많이 사용하는 인터페이스이다. 주로 계층적 구조의 화면전환을.. 2022. 3. 26.
[Gesture Recognizer] Long Press [Gesture Recognizer] Long Press 서론 핸드폰에서 지원하는 제스쳐란 그냥 단순하게 화면을 터치할 수도 있고, 길게 누를수도 있고, 두손가락으로 확대할 수 도 있고, 화면도 넘길 수 있다. Declaration @MainActor class UILongPressGestureRecognizer : [UIGestureRecognizer](https://developer.apple.com/documentation/uikit/uigesturerecognizer) Overview [UIGestureRecognizer](https://developer.apple.com/documentation/uikit/uigesturerecognizer)의 하위 클래스이다. 사용자는 작업이 트리거되기전에 뷰.. 2022. 3. 25.
URLSession에 대하여 알아보기 TIL220323_aboutURLSession 포스팅기반 → https://techblog.woowahan.com/2704/ 서론 서비스를 개발하는 것에 있어 API를 호출하고, 데이터를 받는 것은 매우 중요하다. API를 사용하지 않는 App은 한정된 정보만 가지고 있을 수 밖에 없다. 이번 글에서는 Swift를 사용해서 HTTP통신을 통해 서버와 통신하는 법을 알아보겠다. 선행 지식 📌 HTTP통신 (미정리) 📌 URLSession과 URLSessionTask 📌 탈출클로저 📌 Codable 📌 Optional Binding 기본적으로 서버와 통신하기 위해서는 아래 두가지 방법을 사용할 수가 있습니다. URLSession , URLRequest를 이용한 요청방식 Alamofire라이브러리를 이용한 요.. 2022. 3. 23.
MVC의 한계 이 게시글은 공부한 내용을 정리한 것으로 수익창출을 하지않습니다. 역할이 명확히 구분된다면 좋겠지만 실상은 그렇지 못하다. 1. Apple의 MVC는 View와 Controller가 너무 밀접하다. Apple의 MVC에서는 ViewController라는 이름에서도 볼 수 있듯이 View와 Controller가 굉장히 밀접하게 연결되어있다. ViewController는 Controller의 역할뿐만 아니라 View의 life cycle에도 관여하고 있는 것이 현실이다. 이때문에 Model은 분리하여 테스트를 할 수 있어도 View와 Controller는 서로 강하게 연결되어있어 테스트가 어렵다. 2. 뷰, 모델에 맞지 않는 모든 비즈니스 로직들은 Controller에 들어가게 된다. 모델이나 뷰에 넣기 애.. 2022. 3. 22.
비즈니스 로직 비즈니스 로직 정의 위키백과를 살펴보면 아래와 같이 정의되어있다. 비즈니스 로직 (Business logic)이란 컴퓨터 프로그램에서 실세계의 규칙에 따라 데이터를 생성·표시·저장·변경하는 부분을 일컫는다. 유저가 바라는 결과물을 올바르게 도출하기 위해서 꼭 필요한 과정이기에 프로그래밍에서 빠질 수 없는 요소이며, 응용 프로그램의 핵심이 된다. 비지니스 로직은 유저가 바라는 결과물을 코드로 옮기므로 코드가 자주 변경되므로, 코드 품질도 매우 중요합니다. 비지니스 로직이 정리되지 않고 이곳 저곳 산재 배치되면, 코드 관리가 어려워지고, 개발을 어렵게 하는 요인이 될 수 있다. 그로 인하여 생산성, 품질등이 저하 된다. 비즈니스 로직은 정말 중요하지만, 유지보수 와 확장성을 고려한 코딩을 하기란 쉽지 않습니.. 2022. 3. 21.