automation validate framework configure
前言
由于需要提供多个语言版本的framework,以供客户使用。因此需要根据指定语言版本使用对应的XCode打包,为了减少人工的错误,所以校验framework的配置非常必要, 于是我想使用Swift写个command line tool 校验一下
功能
- 校验 XCode 版本
- 校验 minimumOSVersion
- 校验 DTPlatformVersion
- 校验 code architecture , 主要是检查是否仅包含真机指令集,还是包含所有指令集
方案
- 比对标准的plist文件和待检测的framework 的plist文件, 校验 XCode 版本, minimumOSVersion, DTPlatformVersion
- 使用
lipo
命令检测framework architectures
制作过程
配置依赖性
作为命令行程序,第一件事请就是要解析参数,在朋友指点下找到了 Commandant, 直接集成,写了个"hello world" , 一番操作编译通过了,启动。
image not load
what? 翻车了。确认了下配置,我们都没有错。想了下大概命令后程序 的framework的集成方式跟App 的集成方式不一样。 再次咨询了下朋友。朋友推荐了我使用Swfit-sh 或者 Swift Package Manager, 一番权衡之下选择swift package manager,主要出于实践一下官方的Package Manager。
查阅了下文档,一顿操作配置好了依赖项。 启动
error: 'init(fileURLWithPath:relativeTo:)' is only available on OS X 10.11 or newer
what? 又翻车了。对于这种情况,最简单的解决方式通过#available
解决api的问题,但是10.11是什么年代的产物?所以我想能不能通过配置project,修复api的问题。可是我翻遍了文档 , 都没有找到关于这方面的说明,黔驴技穷之际,突然脑袋灵光一闪。我决定翻阅source code, 功夫不负有心人。

这下知道怎么配置了满心欢喜的下班了。
第二天, 一大早的改配置, swift build
, 砰,编译错误。尴尬了,明明是符合语法的啊,为什么报错,然后又想起了早上看的Swift 5 release note, 我靠,我看的居然是5的源码,真的是尴尬了。 值得一题的是
修改package.swift注释 可以切换不同版本的 swift-version-tool

偷偷的改了下5.0, 果然不让我通过
error: package at '/Users/*****/Desktop/自开发工具tools/FrameworkValidateCheckTools/FrameworkValidate' requires a minimum Swift tools version of 5.0.0 (currently 4.2.0)
没办法,只能向现实低头,老老实实的写#available
, 接下来就比较简单了递归遍历目标文件夹,检测*framework/Info.plist
, 校验配置属性的合法性
执行lipo 命令
通常我们会使用 lipo -info ${frameworkPath}
, 检测所支持的cpu架构,这就意味着需要调用bash
,来运行脚本, 查看了网友博客Swift 调用脚本,
然后就开干,一路顺畅无比
总结
- swift package manager 开发起来还是引起了不少不适,主要在于没有project文件,要频繁使用命令行进行编译,错误提示也不太友好,导致开发比较低效,可能有更好的使用swift package manager方式,我不知道罢了。
- 对于三方库的集成我觉得可以将三方库编译成.o文件,这样应该就可以在不使用swift package manager 的情况下, 对其进行集成
网友评论