본문 바로가기

Programming

[Perfect] Dependency 추가

반응형

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


음.. 아무래도 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

반응형

'Programming' 카테고리의 다른 글

무료 SSL 인증서 발급 적용  (0) 2020.11.27
GitHub Free vs Pro  (0) 2020.07.10
[Perfect] 프로젝트 생성하기  (1) 2016.10.15
Firebase를 이용한 채팅 구현 (1) - 프로젝트 설정 (iOS)  (0) 2016.06.17
SpringBoot 시작하기  (0) 2014.09.12