Как сделать новый идеальный проект с нуля (Swift server) в xcode?
Perfect-это новая платформа Swift для создания веб-сервера / http в swift. Документация еще не существует, и я нахожу проблемы с построением нового проекта с нуля. Я не знаю, какие фреймворки необходимо импортировать, и какой из них является точкой входа приложения. главный.swift и др...
Я хотел бы сделать новое xcworkspace, в котором будет мой проект "сервер hello world".
проблемы, которые я пытаюсь решить:
- какие рамки должны быть включенным?
- как я должен создать идеальный сервер, какова точка входа в приложение?
- как создать корень" hello", который отвечает "Hello World message"?
- как я должен сделать цель для сервера и в конечном итоге запустить сервер?
5 ответов
мне удалось написать руководство "Hello World" об этом. http://code-me-dirty.blogspot.co.uk/2016/02/creating-perfect-swift-server.html
в двух словах, вам нужно действовать следующим образом:
- клонировать исходный проект
- создать новое рабочее пространство
- создать новый проект
- Импорт PerfectLib.xcodeproject & Import PerfectServer.xcodeproject, но не копировать
- настройте схему проекта на запустите приложение PERFECTSERVER HTTP
- свяжите PerfectLib onn в разделе" Связанные фреймворки и библиотеки"
- настройка параметров сборки для вашей целевой платформы*
-
Создать PerfectHandlers.swift и вставить (лучше написать, чтобы получить ощущение) следующий код
import PerfectLib //public method that is being called by the server framework to initialise your module. public func PerfectServerModuleInit() { // Install the built-in routing handler. // Using this system is optional and you could install your own system if desired. Routing.Handler.registerGlobally() // Create Routes Routing.Routes["GET", ["/", "index.html"] ] = { (_:WebResponse) in return IndexHandler() } // Check the console to see the logical structure of what was installed. print("\(Routing.Routes.description)") } //Create a handler for index Route class IndexHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("Hello World") response.requestCompletedCallback() } }
тогда вы готовы бежать. В моем блоге у меня есть длинная, более подробная версия этого, и я буду обновлять здесь, если это необходимо.
построить Настройки
- Место Установки: Да
- установка расположение продуктов сборки: $(CONFIGURATION_BUILD_DIR)
- Каталог Установки: / PerfectLibraries
- пропустить установку: нет
Я только что написал учебник, который хочу поделиться как еще одно решение, в котором описывается, как создать веб-сервис с Perfect и приложение для взаимодействия с ним.
http://chrismanahan.com/creating-a-web-service-swift-perfect
резюме
- вы должны иметь свой проект в рабочей области. Эта рабочая область также должна включать проекты PerfectServer и PerfectLib.
- в вашем проекте создайте новую цель OSX Framework. Это будет ваш сервер target
ссылка PerfectLib как с целью сервера, так и с целью вашего приложения (если вы создаете приложение Вместе с сервером)
изменить схему запуска сервера для запуска с PERFECTSERVER HTTP App.
-
в настройках сборки целевого сервера установите следующие флаги:
- Пропустить Установку = Нет
- Место Развертывания = Да
- - Каталог Установки = /PerfectLibraries
- расположение продуктов сборки установки = $(CONFIGURATION_BUILD_DIR)
-
создать новый файл в папка сервера. Этот файл будет обрабатывать поступающие запросы. Включите [большинство] следующее:
import PerfectLib // This function is required. The Perfect framework expects to find this function // to do initialization public func PerfectServerModuleInit() { // Install the built-in routing handler. // This is required by Perfect to initialize everything Routing.Handler.registerGlobally() // These two routes are specific to the tutorial in the link above. // This is where you would register your own endpoints. // Take a look at the docs for the Routes API to better understand // everything you can do here // register a route for gettings posts Routing.Routes["GET", "/posts"] = { _ in return GetPostHandler() } // register a route for creating a new post Routing.Routes["POST", "/posts"] = { _ in return PostHandler() } } class GetPostHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("get posts") response.requestCompletedCallback() } } class PostHandler: RequestHandler { func handleRequest(request: WebRequest, response: WebResponse) { response.appendBodyString("creating post") response.requestCompletedCallback() } }
поскольку вы создаете различные аспекты своей службы, вы можете проверить ее с помощью cURL в командной строке или других инструментов тестирования REST, таких как почтальон
Если вы хотите погрузиться глубже и узнать, как интегрировать с базой данных SQLite или создать приложение, которое разговаривает с вашим новым сервером, ознакомьтесь с учебником в верхней части этого должность.
Я бы рекомендовал держаться подальше от шаблонов, как предлагали другие, и создать чистый проект самостоятельно.
создать следующую структуру папок:
MyAPI
├── Package.swift
└── Sources
└── main.swift
затем в .Свифт!-Файл -12-->
import PackageDescription
let package = Package(
name: "MyAPI",
targets: [],
dependencies: [
.Package(url: "https://github.com/PerfectlySoft/Perfect-HTTPServer.git", majorVersion: 2)
]
)
и главное.Свифт файл:
import PerfectHTTP
import PerfectHTTPServer
do {
let route = Route(method: .get, uri: "/hello", handler: { (request: HTTPRequest, response: HTTPResponse) in
response.appendBody(string: "world!")
response.completed()
})
try HTTPServer.launch(.server(name: "localhost", port: 8080, routes: [route]))
} catch {
fatalError("\(error)")
}
перейдите в командную строку и выполните команду:
swift package generate-xcodeproj
откройте сгенерированный файл проекта:
MyAPI.xcodeproj
измените активную схему, затем постройте и беги:
открыть в safari:
http://localhost:8080/hello
Я не уверен, нашли ли вы решение или нет, но это то, что я сделал:
приложение "Tap Tracker" - это приложение, написанное идеальными библиотеками, поэтому, даже если документация еще не готова, вы все равно можете препарировать приложение. Я переименовал приложение и классы/методы. Есть один индекс.html, который я переместил в корень "www", а затем перенаправил представление с помощью TTHandler, чтобы попытаться сделать стандартный макет. Это не очень хорошо работает, потому что рамки настолько молоды, но это может быть сделанный. Я бы гораздо больше, но я вернулся к рельсам, потому что я хочу подождать, пока он немного более зрелым.
Это весело возиться, и я, вероятно, напишу свою собственную библиотеку поверх совершенных инноваций onc feature успокаивается, и я могу сделать что-то стабильное с ним.
просто скопируйте все файлы из одного из примеров-проектов в репозиторий git: https://github.com/PerfectExamples
переименуйте example_project_name во всех файлах (которые вы скопировали) в имя вашего проекта.
в терминале run
swift package generate-xcodeproj
и вы получите идеальный проект с требуемым именем.