Jiwift

[iOS/Swift] GCDWebServer 아이폰으로 웹 서버 열기 본문

라이브러리/기타

[iOS/Swift] GCDWebServer 아이폰으로 웹 서버 열기

지위프트 2023. 11. 9. 22:53
반응형

 안녕하세요. 이번에는 아이폰에서 웹 서버를 열 수 있게 해주는 GCDWebServer를 알아보려고 합니다. 사실 저도 많이 제대로 알지는 못하지만, 조금이나마 정보를 공유해 누군가는 필요할 수 있게 하려고 글을 작성하고 있습니다. 

 

 

swisspol/GCDWebServer: The #1 HTTP server for iOS, macOS & tvOS (also includes web based uploader & WebDAV server) (github.com)

 

GitHub - swisspol/GCDWebServer: The #1 HTTP server for iOS, macOS & tvOS (also includes web based uploader & WebDAV server)

The #1 HTTP server for iOS, macOS & tvOS (also includes web based uploader & WebDAV server) - GitHub - swisspol/GCDWebServer: The #1 HTTP server for iOS, macOS & tvOS (also includes web...

github.com

yene/GCDWebServer: Turned GCDWebServer into a Swift Package. (github.com)

 

GitHub - yene/GCDWebServer: Turned GCDWebServer into a Swift Package.

Turned GCDWebServer into a Swift Package. Contribute to yene/GCDWebServer development by creating an account on GitHub.

github.com

 이 라이브러리는 두 가지 버전이 있습니다.

 

첫 번째는 원래 기본 라이브러리입니다. 2012년도에 출시해서 2020년 8월이 마지막 커밋입니다. Objective-C를 기본적으로 지원하고 있기 때문에 도큐먼트도 옵젝으로 되어있습니다. 

 

두 번째는 옵젝씨로 짜인 라이브러리를 Swift로 사용할 수 있게 만든 라이브러리입니다. 첫 번째 라이브러리를 Base로 하였다고 했으나 Fork를 한 내역은 깃허브에 따로 보이지는 않네요. 2021년 처음 커밋이 시작되고 2022년 12월이 마지막 커밋입니다. 

 

 저는 아래를 기준으로 설치를 해보도록 하겠습니다. 

 

https://github.com/yene/GCDWebServer

 설치는 SPM을 통하여 가능합니다. 

 

<!DOCTYPE html>
<html>
<head>
    <title>iPhone GCDWebServer</title>
</head>
<body>
    <h1>GCDWebServer</h1>
    
    <form action="#" method="post">
        <label for="name">name:</label>
        <input type="text" id="name" name="name" required>
        <br><br>
        
        <label for="email">email:</label>
        <input type="email" id="email" name="email" required>
        <br><br>
        
        <input type="submit" value="제출">
    </form>
</body>
</html>

 우선 임의로 사용할 index.html 파일을 생성합니다. 

dist

 생성한 index.html을 저는 dist라는 파일에 넣어두겠습니다.

  위에서 생성한 폴더를 프로젝트에 드래그해서 위와 같이 넣어주세요. 옵션은 Create folder references로 선택해 주세요.

(프로젝트에서 직접 생성해서 파일을 만들거나, 드래그하면서 Create Groups를 하면 라이브러리가 제대로 인식을 못하던데.. 아시는 분은 알려주세요.. ㅜ.ㅜ )

 

AppDelegate

 

서버 실행은 AppDelegate에서 진행하겠습니다.

 

// 기기 웹 서버
import GCDWebServer

 라이브러리 import

// 웹 서버
let webServer = GCDWebServer()

서버로 사용할 변수

// 웹서버 파일 경로
let subdir = Bundle.main.resourceURL!.appendingPathComponent("dist").path
// 웹 서버 셋팅
self.webServer.addGETHandler(forBasePath: "/",
                             directoryPath: subdir,
                             indexFilename: "index.html",
                             cacheAge: 3600,
                             allowRangeRequests: true)
// 웹 서버 실행
self.webServer.start(withPort: 8889, bonjourName: "GCD Web Server")

"didFinishLaunchingWithOptions"에서 서버 실행 위에 코드를 보면 매우 간단합니다. subdir로 폴더 경로를 잡고 addGETHandler에서 기본 설정을 합니다. 그리고 start 해주면 끝

 

실행 모습

같은 와이파이가 연결되어 있는 상태에서 다른 기기의 브라우저를 통해서 접근하거나, Xcode 시뮬레이터로 실행해서 해당 맥 환경 브라우저를 통해서 결과를 확인할 수 있습니다.

 

http://127.0.0.1:8889/ 로컬 주소와 포트를 입력하면 됩니다.

 

 

 서버를 실행하는 것은 start로 하듯이 서버 종료는 stop을 통해서 가능합니다. 이렇게 생성한 웹 서버를 WebKit을 통해서 바로 앱에서 다시 보게 구현도 가능합니다.

 

 

코드

SwiftExample/GCDWebServerEx at main · wlxo0401/SwiftExample (github.com)

 

반응형