使用Swift Package Manager管理项目
来源:互联网 发布:tsc g310打印软件 编辑:程序博客网 时间:2024/05/21 10:33
今天来讲讲swift的代码资源库管理工具——Swift Package Manager,下面简称SPM。并对上一篇今天开始写swift服务器(一)做一些关于项目管理上的纠正。上篇讲到,因为SPM管理,如果source文件中发生变动,会造成无法正常更新或添加库或框架的问题,故使用workspace管理项目。但是,使用workspace管理,会出现部分C语言的库无法链接的问题,可能本人能力有限,没有找到解决方法。同时,因为perfect框架有提供Perfect Assistant这个工具用来构建不同环境下的代码,可用于测试和发布,但是这个工具不支持workspace,只支持project。所以,只能改换使用project写项目,只能使用SPM进行管理。经过这段时间的研究,总结一下经验。下面以建立一个project为例来向大家说明。
首先指定一个文件夹创建一个空的项目
swift package init --type executable
这时创建出来的空项目的目录结构为
Package.swiftSource: main.swiftTest:
如果,我们随意变动这个目录结构,都会造成之后build出问题,导致无法使用SPM管理。对于SPM的使用是有很严格的规范的。
比如下列这样都是错误的
Package.swiftSource: main.swift ModuleA: ClassA.swiftTest:Package.swiftSource: main.swift ClassA.swiftTest:Package.swiftModuleA: ClassA.swiftSource: main.swiftTest:
在build时会出现
error: the package has an unsupported layout, unexpected source file(s) found:....
fix: move the file(s) inside a module
正确的目录结构应该是这样的
Package.swiftSource: ModuleA: main.swift ModuleC: C.swiftTest:
在source文件夹中,需要把项目代码以模块的方式划分,这样就能正常使用SPM了,然后在build一下
swift build
然后终端上就会显示
Compile Swift Module 'ModuleC' (2 sources)
Compile Swift Module 'ModuleA' (1 sources)
Linking ./.build/debug/ModuleA
说明ModuleA和ModuleC都已经构建好了,然后输入
swift package generate-xcodeproj
就可以使用Xcode编写代码了。当你打开Xcode的时候,你会发现,在左侧目录下方生成了ModuleC.framework,接着需要General中添加这个库,然后可以在ModuleA中使用。在使用过程中,可能会出现 initializer is inaccessible due to ‘internal’ protection level的错误,这是因为ModuleC中的文件没有init方法,只要写一个init方法,就不会报这个错误,可以正常编写代码了
如果在build时遇到这类问题,是因为在build时,你自己创建的库之间没有建立依赖关系,这就需要在Package.swift文件中添加Target,来关联本地依赖
import PackageDescriptionlet package = Package( name: "project name", targets: [ Target(name: "ModuleA", dependencies: ["ModuleC"]) ])
参考:
https://swift.org/package-manager/#example-usage
1 0
- 使用Swift Package Manager管理项目
- Swift Package Manager快速上手指南(一):环境搭建
- Swift Package Manager快速上手指南(一):环境搭建
- Package Manager
- package Manager
- 使用MotioPI恢复Framework Manager的Package
- 解决Xcode package manager无法使用
- RPM Package Manager (RPM) 使用详解
- [centos] 使用package升级cloudera manager 5.13
- rhel 7 rpm 软件包管理以及yumredhat package manager
- Golang的包依赖管理 (package dependency manager)
- How to import a C library in Swift using the Swift Package Manager
- java-使用package分类管理
- A Package Manager for Xcode -Xcode模板管理工具Alcatraz使用
- weka3.7.2版本及以上使用package manager安装libsvm
- 如何通过Swift Package Manager来构建一个简单的开发环境
- Maven管理项目时 使用package命令报错:There are test failures
- 项目管理 工时管理 敏捷管理 Project Manager 管理软件
- Elo评分算法原理与实现
- C++语言程序设计笔记(1)
- Ubuntu 下 apt-get 更新源推荐
- 视频播放器SunPlayer开源啦
- 在分类中如何处理训练集中不平衡问题
- 使用Swift Package Manager管理项目
- poj1088——滑雪(记忆化dp)
- 设计Mysql索引的原则
- LOCAL_SHARED_LIBRARIES 与 LOCAL_LDLIBS,LOCAL_LDFLAGS的区别
- Web安全测试之——XSS漏洞
- 版本管理-git未commit前,执行rm -r操作后想恢复文件
- Android中用代码设置控件属性的注意事项
- C#去掉字符串中的<p>标签
- 频率较高的Java面试题