编者语: 对于一个新事物,如果你花点心机还是有很多收获的。

前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。
我们先来看看构建基于Perfect的网站服务的编译方式

如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.swift即可。对比起在Xcode通过模版或者Framework的方式简洁不少。这里大家会想能否用Swift Package Manager引用PerfectLib的方式对Handlers.swift进行编译?现阶段是不可以的,由于Perfect是用动态库的方式打包PerfectLib而Package Manager不支持动态库的引用,所以如果你想整合Package Manager直接编译你的Handlers.swift是不可以的。(你只能寄望苹果尽快支持)。现在你只能用makefile动态编译。

根据上面的方式我们开始在Linux下创建我们的Perfect项目。

1. 关于创建的路径,个人建议放在Github下载的Perfect目录下,因为你需要引用对应的基础库,比较容易管理和调用。这里我在Perfect文件夹创建了一个Demo文件夹,作为新项目的目录。

2. 在Demo文件夹下创建一个PerfectHandlers.swift 和 makefile。建议大家使用IDE进行编辑,这里我建议使用Visual Studio Code,虽然是微软的产品,但是胜在对swift支持较好,对比起atom更稳定。

看看我们的PerfectHandlers.swift,和前面说的一样,代码如下:

import PerfectLib

public func PerfectServerModuleInit() {

    Routing.Handler.registerGlobally();
	  Routing.Routes["GET",["/","index.html"] ] = { (_:WebResponse) in return IndexHandler() }


}

class IndexHandler: RequestHandler {

	func handleRequest(request: WebRequest,response: WebResponse) {
		response.appendBodyString("hello swift")
		response.requestCompletedCallback()
	}
}
而makefile就是我们把Demo编译成动态库的关键文件了,先看看代码:
# Makefile for Perfect Server

TARGET = Demo
OS = $(shell uname)
DEMO_SRC = "PerfectHandlers.swift"
PERFECT_ROOT = ../PerfectLib
SWIFTC = swift
SWIFTC_FLAGS = -frontend -c -module-cache-path $(MODULE_CACHE_PATH) -emit-module -I /usr/local/lib -I $(PERFECT_ROOT)/linked/LibEvent \
	-I $(PERFECT_ROOT)/linked/OpenSSL_Linux -I $(PERFECT_ROOT)/linked/ICU -I $(PERFECT_ROOT)/linked/sqlite3 -I $(PERFECT_ROOT)/linked/LinuxBridge
MODULE_CACHE_PATH = /tmp/modulecache
Linux_SHLIB_PATH = $(shell dirname $(shell dirname $(shell which swiftc)))/lib/swift/linux
SHLIB_PATH = -L$($(OS)_SHLIB_PATH)
LFLAGS = $(SHLIB_PATH) -lFoundation -lswiftCore -lswiftGlibc /usr/local/lib/PerfectLib.so -Xlinker -rpath -Xlinker $($(OS)_SHLIB_PATH) -shared

all: $(TARGET)

modulecache:
	@mkdir -p $(MODULE_CACHE_PATH)

$(TARGET): modulecache
	$(SWIFTC) $(SWIFTC_FLAGS) $(DEMO_SRC) -o $@.o -module-name $@ -emit-module-path $@.swiftmodule
	clang++ $(LFLAGS) $@.o -o $@.so

clean:
	@rm *.o
makefile 这里有几个关键的地方需要注意,

a. TARGET是编译目标和你的项目名保持一致,这里就是TARGET = Demo

b. DEMO_SRC 这个是需要把你的所有swift文件包含进去,因为要一起打包到静态库内,你可以参考Examples/Authenticator内的makefile

3. 在终端,编译即可,执行sudo make编译成功如下图

4. 把生成的Demo.so迁移到Perfect/var/www/PerfectLibraries中(改目录的创建和使用请参考 http://www.jb51.cc/article/p-yfemoxvn-bac.html)

5. 执行sudo ./perfectServerHttp.sh start 即可
在Linux下创建Perfect项目,让Perfect项目的维护和升级更有保障了,而且比在Xcode下创建项目更加简单直接,建议大家上手使用。

Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项目(三)的更多相关文章

  1. xcode – 如何正确设置运行路径,搜索路径和安装名称?

    任何人对我可能做错了什么有什么想法?

  2. ios – OS X:将.dylib转换为.a / .o(动态到静态)?

    假设我已经阅读了thiscaveat,我仍然希望将TBB用作静态链接库.但我真的不想重写TBBmakefile来生成libtbb.a而不是libtbb.dylib.是否有一个简单的命令行方式将libtbb.dylib转换为libtbb.o并使用相同的入口点?

  3. 如何在iOS上使用嵌入式专用框架和应用程序中的静态库

    在私有框架,应用程序和扩展中使用静态库中的类的正确方法是什么?

  4. Swift vs Objective-C:未来看好 Swift 的十个理由

    Swift将Objective-C头文件(.h)和实现文件(.m)合并成了一个代码文件。程序员在Objective-C上会遇到的大量内存溢出问题在Swift上是不可能的。在Objective-C中,使用文本字符串将两块信息组合起来的操作非常繁琐。Swift采用当代编程语言的特性,比如使用“+”操作符将两个字符串加到一起,这在Objective-C中是没有。

  5. Swift学习笔记之公用库和模块化

    静态库和动态库先补充一下静态库和动态库的知识。静态库静态库的代码追加到可执行文件内,被多次使用就有多份冗余拷。iOS中静态库的形式是.a和.framework。不过各个应用所使用的自己的公用库,最终都需要link进可执行文件,所以本质上还是一个静态库。现状出于安全层面的考虑,AppStore不允许使用第三方的动态链接库。我们可以通过framework编写自己的公用库。iOS-Universal-Framework也宣布停止更新。模块模块化是在2012年的LLVMDevelopersMeeting中提出的。

  6. Swift vs. Objective-C:未来看好 Swift 的十个理由

    Swift将Objective-C头文件(.h)和实现文件(.m)合并成了一个代码文件。程序员在Objective-C上会遇到的大量内存溢出问题在Swift上是不可能的。在Objective-C中,使用文本字符串将两块信息组合起来的操作非常繁琐。Swift采用当代编程语言的特性,比如使用“+”操作符将两个字符串加到一起,这在Objective-C中是没有。

  7. Swift 创建framework并应用到项目中

    iOS8已经开放了动态库的权限。创建动态库并能运用到兼容iOS7的项目中!Carthage&CocoaPods0.36对Swift也仅以Framework的方式来支持。更多参见:LibraryvsFrameworkiniOSSwift不在支持静态库,这也就间接放弃了iOS7。Framework就是一个Bundle,将所有的资源(nib,Images,Fonts…理论上动态库可以单独更新,只是在iOS上Apple未开放这样的权限。创建Framework项目CodingtheFrameworkAccessle

  8. Project Perfect让Swift在服务器端跑起来-在Linux上创建你的Perfect项目(三)

    前两篇,分别讲述了入门和在Linux下部署,现在得说说如何在Linux下开发了。在Linux下开发,相对比在Mac下开发更灵活。我们先来看看构建基于Perfect的网站服务的编译方式如图通过引用基础库PerfectLib和数据链接,中间件模块创建你的网页文件,并用makefile打包生成你的网站动态库。所以如果你只是在Linux下构建项目,你只需要先创建好你的Handlers.swift即可。根据上面的方式我们开始在Linux下创建我们的Perfect项目。这里我在Perfect文件夹创建了一个Demo文

  9. 使用 Swift 语言编写 Android 应用入门

    Swift标准库可以编译安卓armv7的内核,这使得可以在安卓移动设备上执行Swift语句代码。做梦,虽然Swift编译器可以胜任在安卓设备上编译Swift代码并运行。这需要的不仅仅是用Swift标准库编写一个APP,更多的是你需要一些框架来搭建你的应用用户界面,以上这些Swift标准库不能提供。简单来说,构建在安卓设备上使用的Swiftstdlib需要libiconv和libicu。通过命令行执行以下命令:gitclonegit@github.com:SwiftAndroid/libiconv-libi

  10. Project Perfect让Swift在服务器端跑起来-Hi Linux(二)

    开篇写了一个简单的入门,今天想说说怎么让Perfect项目在Linux上运行。Swift开源后,苹果让Swift不仅在OSX/iOS上跑,更让Swift在Linux/Windows上跑。作为服务端的Perfect框架+RemObjectSilver,让Swift成为了一个全栈语言。Perfect由于是服务端的,让Perfect在Linux上跑是必然的事情。从第一篇文章中我们可以了解到Perfect由PerfectLib和PerfectServer组成。

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部