전체 글 75

CFSocket을 통한 로컬 서버 만들기 3

전글에서 Server Socket을 간단하게 만들어 보았고 이번에는 ClientSocket을 만들어 보겠습니다. 4. ClientSocket 만들기 먼저 풀 코드부터 보여 드리겠습니다. class ClientSocket : NSObject { var fileDescriptor: Int32 private var inputStream: InputStream! private var outputStream: OutputStream! private var address : sockaddr! init(fileDescriptor: Int32, address: sockaddr) throws { var readStream : Unmanaged? var writeStream: Unmanaged? self.fileDesc..

iOS 2023.06.26

CFSocket을 통한 로컬 서버 만들기 2

전글에서 setsocketopt()의 함수를 통해서 생성한 소켓의 옵션까지 정하는 것을 했습니다. 계속 이어서 이번에는 socket의 주소를 설정하는 법을 알아보겠습니다. 우선 코드 부터 보겠습니다. var addr = sockaddr_in(sin_len: __uint8_t(MemoryLayout.size), sin_family: sa_family_t(AF_INET), sin_port: port.bigEndian, sin_addr: in_addr(s_addr: INADDR_ANY), sin_zero: (0, 0, 0, 0, 0, 0, 0, 0)) let addrData = withUnsafePointer(to: &addr) { ptr in return ptr.withMemoryRebound(to: soc..

iOS 2023.06.26

CFSocket을 통한 로컬 서버 만들기 1

새로운 회사에 취직한지 어언 1달이 되었습니다. 새롭게 취직한 회사는 라이브 스트리밍 솔루션을 제공하는 업체이다 보니 라이브 스트리밍과 관련된 기술들을 많이 배우고 접하게 되었습니다. 이러한 와중에 iOS에서 hls 라이브 스트리밍을 캐싱해야 하는 과제를 부여받았습니다. 단순 mp4 캐싱이었으면 얼마나 좋았겠습니까? ㅋㅋㅋㅋ 근데 이놈의 애플은 hls 캐싱을 지원해주지 않더군요.... 그렇다고 또 못하는 것도 아니고 결국 삽질을 하게 되었습니다. 방법은 제목에 쓴 것처럼 앱 안에 로컬 서버를 만들고 이를 통해 외부와 소통하면서 m3u8파일과 ts파일을 추출해서 저장해야 합니다. 일단 가장 간단한 방법으로는 바로 그냥 라이브러리 쓰시면 됩니다. https://github.com/StyleShare/HLSC..

iOS 2023.05.29

Rx와 XCTest를 이용할시 생기는 에러사항들 3

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 저번 글에서 발생한 demangle ~~~ error를 해결하기 위한 글입니다. 1. RxCocoaRuntime프레임 워크만을 추가한다. 해당 프레임 워크는 https://github.com/ReactiveX/RxSwift/releases 요 링크로 들어가셔서 찾아보시면 있습니다. 6.0.0버전 릴리즈를 보시면 됩니다. 프레임 워크를 찾았으면 드래그 앤 드롭으로 세팅해줍니다. 그리고 cmd + u를 실행하면 똭! 이렇게 에러가 나오면서 실행이 안됩니다. 지금보니 RxCocoaRuntime이 RxSwift에 의존성을 가지고 있었네요. 그리고 RxSwift를 /PlugIns/{name}Tests.xctes..

iOS 2023.03.27

Rx와 XCTest를 이용할시 생기는 에러사항들 2 [missing Required module "RxCocoaRuntime"]

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 저번글에서 MainApp에서의 에러 사항을 해결했습니다. 따라서 우리는 TDD를 적용하기 위해서 TestCase를 돌리려고 합니다. cmd + u를 눌러 TestCase를 돌리게 되면 다음과 같은 에러가 나오게 됩니다. 1. Missing Required module "RxCocoaRunTime" 이것에 대한 해결방법은 아주 쉽습니다. TestTarget에 RxTest,RxBlocking,RxCocoa를 추가해주시면 사라지게 됩니다. 요렇게 해만 해주면 에러가 사라지게 됩니다. 하지만 뭔가 꺼림칙한 메세지가 잔뜩 나옵니다. 요런식으로 코드가 중복됬다는 이야기가 나옵니다. 보니까 MainApp과 Test..

iOS 2023.03.27

Rx와 XCTest를 이용할시 생기는 에러사항들 1 [library not loaded XCTest]

SPM과 RxSwift 그리고 TestUnitBundle을 사용하면서 생기는 에러 사항들 모음집입니다. 1.MainApp에 RxTest 프레임워크를 포함시켰을때 SPM으로 RxSwift를 다운받고 메인 번들을 실행시키면 아마 다음과 같은 에러들을 만나실 겁니다. Undefined symbol: _$s6XCTest14XCTAssertEqual___4file4lineyxyKXK_xyKXKSSyXKs12StaticStringVSutSQRzlF Undefined symbol: _$s6XCTest7XCTFail_4file4lineySS_s12StaticStringVSutF Undefined symbol: __swift_FORCE_LOAD_$_XCTestSwiftSupport 요 에러는 단순히 보시는 바와 같이 메..

iOS 2023.03.26

[프로그래머스] - N_Queen[파이썬]

그래프의 크기도 최대 12라고 생각해서 단순 2차원 배열 돌면서 모든 경우의 수를 구하는 DFS문제인지 알았더니 아주 띠용하는 방법이 있었다. https://school.programmers.co.kr/learn/courses/30/lessons/12952 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 가로, 세로 길이가 n인 정사각형으로된 체스판이 있습니다. 체스판 위의 n개의 퀸이 서로를 공격할 수 없도록 배치하고 싶습니다. 예를 들어서 n이 4인경우 다음과 같이 퀸을 배치하면 n개의 퀸은 서로를 한번에 공격 할 수 없습니다. 체스판의 가로 세로의 세..

알고리즘 2023.03.15

[프록래머스] - 스티커모으기(2)[파이썬]

dp문제는 역시나 딱 봤을때 떠오르지 않는게 문제다. 결국 힌트를 보고 풀었다. https://school.programmers.co.kr/learn/courses/30/lessons/12971#qna 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr N개의 스티커가 원형으로 연결되어 있습니다. 다음 그림은 N = 8인 경우의 예시입니다. 스티커_hb1jty.jpg 원형으로 연결된 스티커에서 몇 장의 스티커를 뜯어내어 뜯어낸 스티커에 적힌 숫자의 합이 최대가 되도록 하고 싶습니다. 단 스티커 한 장을 뜯어내면 양쪽으로 인접해있는 스티커는 찢어져서 사용할 수 ..

알고리즘 2023.03.15

JENKINS(4) github webhook (2)

저번글에서 로컬에 있는 jenkins 서버를 외부에서 접근 가능하게 했다. 그러면 이제 github으로 가서 webhook에 필요한 토큰과 설정을 해야한다. 1. github access token 생성 개인 깃헙으로 이동하여 profile -> developer setting -> Personal access tokens로 가서 generate new token을 눌러준다 그리고 나서 다음과 같이 설정을 해주고 키를 발급받고, 발급 받은 키는 안전하게 다른 곳에 저장해둔다. 2. github webhook 생성 이제 원하는 프로젝트로 이동하여 webhook을 설정해준다. Add webhook을 누르면 다음과 같은 화면이 나온다. 여기서 payload URL에 ngrok에서 만들어진 url + /gith..

iOS 2023.03.11

JENKINS (3) - github Webhook[ngrok] (1)

저번 글에서는 수동 빌드까지 밖에 하지 못했습니다. 이번 시간에는 github과 연결하여 새로운 푸시 사항이 들어오면 자동적으로 빌드를 하는 Trigger 이벤트에 대하여 알아 보겠습니다. 우선 github의 webhook과 연결하기 위해서는 로컬에서 돌아가는 Jenkins 서버가 외부에서 접근이 가능해야 합니다. 따라서 먼저 이것을 가능케 해주는 ngrok를 먼저 설치합시다. 1. ngrok 설치 ngrok 설치를 위해서는 2가지 방법이 있다. 하나는 공식 홈페이지에서 파일 받아 설치하는 것이다. https://ngrok.com/ ngrok - Online in One Line Zero Trust Add SSO, Mutual TLS, IP Policy, and webhook signature verif..

iOS 2023.03.11