Swift Package Manager에서 외부 라이브러리를 사용하여 명령줄 도구 개발

Linux에서도 움직이는 Pure Swift인 커맨드 라인 툴로 Redis라고 말하고 싶었으므로, czechboy0/Socks (을)를 사용해 TCP 접속했다(Socks 자체는 C의 라이브러리 사용하고 있다).
Socks를 빌드에 내장하고 Mac의 Xcode에서 개발할 수 있도록 Swift Package Manager을 이용했다.
서버 측 Swift의 웹 앱과 라이브러리 개발도 같은 방법으로 할 수 있을까 예상하고 있다.

준비



Xcode 8 beta 및 swift-DEVELOPMENT-SNAPSHOT-2016-08-18-a 그렇지 않으면 Socks를 빌드 할 수 없으므로 설치하십시오.
h tps : // 슈 ft. 오 rg / w w ぉ d / # Ree Ase s

프로젝트 만들기


$ mkdir MyProject
$ cd MyProject/
$ swift package init --type executable

Creating executable package: MyProject
Creating Package.swift
Creating .gitignore
Creating Sources/
Creating Sources/main.swift
Creating Tests/

외부 라이브러리 통합


diff --git a/Package.swift b/Package.swift
index 7f62404..ec40617 100644
--- a/Package.swift
+++ b/Package.swift
@@ -1,5 +1,8 @@
 import PackageDescription

 let package = Package(
-    name: "MyProject"
+    name: "MyProject",
+    dependencies: [
+        .Package(url: "https://github.com/czechboy0/Socks.git", majorVersion: 0, minor: 12)
+    ]
 )
$ swift package update

Cloning https://github.com/czechboy0/Socks.git
HEAD is now at 4b14189 Updated Swift 08-04 (#69)
Resolved version: 0.12.0
$ TOOLCHAINS=swift swift build

Compile Swift Module 'SocksCore' (14 sources)
Compile Swift Module 'Socks' (5 sources)
Compile Swift Module 'SocksCoreExampleTCPServer' (1 sources)
Compile Swift Module 'SocksCoreExampleTCPClient' (1 sources)
Compile Swift Module 'SocksExampleUDPServer' (1 sources)
Compile Swift Module 'SocksExampleUDPClient' (1 sources)
Compile Swift Module 'SocksExampleTCPServer' (1 sources)
Compile Swift Module 'SocksExampleTCPClient' (1 sources)
Compile Swift Module 'SocksCoreExampleTCPKeepAliveServer' (1 sources)
Compile Swift Module 'MyProject' (1 sources)
Linking ./.build/debug/SocksCoreExampleTCPClient
Linking ./.build/debug/SocksCoreExampleTCPServer
Linking ./.build/debug/MyProject
Linking ./.build/debug/SocksExampleUDPClient
Linking ./.build/debug/SocksExampleTCPClient
Linking ./.build/debug/SocksExampleTCPServer
Linking ./.build/debug/SocksExampleUDPServer
Linking ./.build/debug/SocksCoreExampleTCPKeepAliveServer
$ swift package generate-xcodeproj

generated: ./MyProject.xcodeproj

이러한 구조의 프로젝트가 생성된다. Package.swift 에 새로운 라이브러리를 추가하면 Dependencies 에 반영하기 위해서 다시 생성한다.



명령줄 도구 본문 코드.

main.swift
import Socks

let address = InternetAddress(hostname: "localhost", port: 6379)

do {
    let client = try TCPClient(address: address)

    // set
    try client.send(bytes: "SET key1 hello\n".toBytes())
    let status = try client.receiveAll().toString()
    print("Received: \(status)")

    // get
    try client.send(bytes: "GET key1\n".toBytes())
    let str = try client.receiveAll().toString()
    print("Received: \(str)")

    try client.close()
} catch {
    print("Error \(error)")
}

이것을 Xcode에서 실행하면



SET/GET 할 수 있는 것을 확인할 수 있었다

좋은 웹페이지 즐겨찾기