ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Perfect] Dependency 추가
    Programming/Backend 2016. 10. 18. 23:14

    프로젝트도 생성했으니 이제 뭔가 해보자. 


    음.. 아무래도 Backend 이고 하니... DB가 있어야 겠다. 많이 쓰는 Mysql 로 해보자.


    MySQL 을 사용하려면 MySQL용 Database connector 를 추가해야 한다. 


    package.swift 의 dependency로 추가 가능하다.

    import PackageDescription
     
    let package = Package(
        name: "FirstPerfectProject",
        dependencies: [
            .Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2, minor: 0),
            .Package(url:"https://github.com/PerfectlySoft/Perfect-MySQL.git", majorVersion: 2, minor: 0)
        ]
    )
    


    Xcode에서 build를 해보자. (xcode에서 실행하는 방법은 이전 글에서 생략했다.... 실수로..)




    왜.. 오류지?!


    음.. 그럼.. 처음에 했던 swift build를 해보자.

    $ swift build
    Cloning https://github.com/PerfectlySoft/Perfect-MySQL.git
    HEAD is now at 53ef1af Fixes ISS-269 - numRows always returns 0
    Resolved version: 2.0.1
    Cloning https://github.com/PerfectlySoft/Perfect-mysqlclient.git
    HEAD is now at 60a82d5 A little cleanup
    Resolved version: 2.0.0
    Compile Swift Module 'MySQL' (1 sources)
    Compile Swift Module 'PerfectLib' (10 sources)
    Compile Swift Module 'PerfectHTTP' (9 sources)
    Compile CHTTPParser http_parser.c
    Linking CHTTPParser
    Compile Swift Module 'PerfectHTTPServer' (5 sources)
    Compile Swift Module 'FirstPerfectProject' (1 sources)
    Linking ./.build/debug/FirstPerfectProject
    

    오!! 빌드했더니 Perfect-MySQL 을 다운로드 받는다~!


    이제 run 할 수 있겠다.  Xcode에서 실행해보자.





    또 같은 오류!!!!!!


    무엇이 문제일까?  Xcode에서 실행하지 말고 터미널에서 실행해볼까?

    $ swift build Compile Swift Module 'MySQL' (1 sources) Compile Swift Module 'PerfectLib' (10 sources) Compile Swift Module 'PerfectHTTP' (9 sources) Compile Swift Module 'PerfectHTTPServer' (5 sources) Compile Swift Module 'FirstPerfectProject' (1 sources) Linking ./.build/debug/FirstPerfectProject

    오! MySQL이 빌드 되었다. (역시 내 잘못이 아니야... Xcode.. 망할)


    MySQL 이 잘 되는지 확인하기 위해 기존 코드에서 MySQL 을 import 해보자.

    import PerfectLib
    import PerfectHTTP
    import PerfectHTTPServer
    import MySQL
     
    // Create HTTP server.
    let server = HTTPServer()
     
    // Register your own routes and handlers
    var routes = Routes()
    routes.add(method: .get, uri: "/", handler: {
            request, response in
            response.setHeader(.contentType, value: "text/html")
            response.appendBody(string: "<html><title>Hello, world!<title><body>Hello, world!</body></html>")
            response.completed()
        }
    )
     
    // Add the routes to the server.
    server.addRoutes(routes)
     
    // Set a listen port of 8181
    server.serverPort = 8181
     
    do {
        // Launch the HTTP server.
        try server.start()
    } catch PerfectError.networkError(let err, let msg) {
        print("Network error thrown: \(err) \(msg)")
    }
    

    직접 사용하지는 않지만 import 했으니 오류 없이 잘 실행 되어야 겠지? MySQL이 제대로 연결 안 되었다면 오류가 뜰거야. (아마도..)


    빌드 후 실행해 보자.

    build/debug/FirstPerfectProject
    [INFO] Starting HTTP server on 0.0.0.0:8181 with document root ./webroot
    

    오오오오... 성공!


    이렇게 package.swift 에 dependency 를 추가하고 빌드만 하면 잘 된다.


    그럼 xcode 에서는 왜 안 될까?


    Xcode 프로젝트는 구성이 좀 까다롭다. project 파일을 지우지 말고 다시 생성해 보자.

    $ swift package generate-xcodeproj
    generated: ./FirstPerfectProject.xcodeproj
    

    프로젝트 재생성도 했으니 실행을 해보자~



    많은 삽질 끝에 방법을 찾았다.



    문서를 읽으면 한번 봤을 내용입니다. Xcode 프로젝트를 생성하고 target이 아닌 project 의 build setting 에 추가로 설정을 해줘야 한다.

    Library Search Paths 에 $(PROJECT_DIR) recursive 로 설정한다.



    이제 빌드하면 성공적으로 완료한다. 


    문제는 이게 dependency 를 추가하고 xcode project를 생성할 때마다 설정해줘야 한다는 것이다.

    왜 저 설정을 default로 넣지 않는지 모르겠다..


    잊지 말자 $(PROJECT_DIR)



    dependency 설정 끝~




    Getting Started From Scratch https://www.perfect.org/docs/gettingStartedFromScratch.html


    Building with Swift Package Manager https://www.perfect.org/docs/buildingWithSPM.html

    댓글 2

Designed by Tistory.