使用Swift Package Manager管理项目(the package has an unsupported layout)

首先指定一个文件夹创建一个空的项目

swift package init --type executable

这时创建出来的空项目的目录结构为

Package.swift

Source:

main.swift

Test:

如果,我们随意变动这个目录结构,都会造成之后build出问题,导致无法使用SPM管理。对于SPM的使用是有很严格的规范的。

比如下列这样都是错误的

Package.swift

Source:

main.swift

ModuleA:

ClassA.swift

Test:

Package.swift

Source:

main.swift

ClassA.swift

Test:Package.swift

ModuleA:

ClassA.swift

Source:

main.swift

Test:

在build时会出现

error: the package has an unsupported layout, unexpected source file(s) found:....

fix: move the file(s) inside a module


正确的目录结构应该是这样的

Package.swift

Source:

ModuleA:

main.swift

ModuleC:

C.swift

Test:在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方法,就不会报这个错误,可以正常编写代码了


参考:

https://swift.org/package-manager/#example-usage

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,027评论 19 139
  • 《润物无声:寐》by蔡金海 《润物无声:洄流》by簦火火 《润物无声:“造”物》 by陈珊珊 《润物无声:守艺人》...
    琉璃晚阅读 605评论 0 0
  • 22/02/2017 关键对话中,由于谈话的彼此因为没有足够的信任感和对于彼此的动机和误会导致沟通的结束,你该如何...
    氢哈哈阅读 635评论 4 4