Swift 制作私有库遇到的坑

Swift Framework with cocoapods

最近在制作SDK,开发语言使用的是Swift,在制作Framework并且发布到cocoapods上遇到了一些坑,总结并记录

1.制作pod

制作pod很简单,参考Making a CocoaPod 就够了,上面写的很详细,目的是分享Framework,而不是源码,只有在source特别注意一下即可,填写一个服务器zip文件链接即可。

第一个纯代码的库很快就提交成功了,当准备提交第二个很有图片等资源的库,就遇到了一个坑
,cocoapods推荐的方式是使用resource_bundles,并且指出这种方法比使用resources要好。

于是我自然而然的就选择了resource_bundles,路径填写正确之后就准备执行命令提交pod

pod trunk push 

验证不通过,提示我找不到resource_bundles文件路径,然后搜遍全网,终于在一小段回答中找到一个很重要的信息,这个pod 提交的时候会验证文件是否可以通过编译,然后就需要找到资源的路径,但是他找资源路径的方式是通过本地文件路径来查找的,也就是说他不在zip包里找,那么他下载zip包是在干什么呢,只是验证路径是否可以下载,hash值是否正确吗?

然后我就在本地路径中添加了zip解压出来的内容,这样就顺利通过了验证。

2.swift版本与framework的关系

使用Xcode 13.2打包出来的framework,是使用swift5.5进行编译的,他无法直接在Xcode 13.3(swift 5.6)中运行,会提醒语言版本不对,在网络找到的答案就是更改这个framework Build Settings 中的 Build Libraries for DistributionYES,之后生成的framwork文件中会包含.swiftinterface文件,然后就可以就可以向多支持。

然后我试了,确实不提醒我语言问题了,但是报了太多的找不到第三方库方法声明的错误,我的framework引用了第三方的库,这个报错如果是我自己写的代码,我可以很快定位解决,但是报第三方库找不到方法声明,就莫名其妙了。这个问题现在也没有解决,目前只能提供swift 5.6版本编译后的framework,如果后续有必要支持,可以再发布swift 5.5的版本。

最多同时发布支持最近2个语言版本的framework就可以了,apple对编译ipa要求的xcode版本也比较快,一般次年4月就强制必须使用新版本xcode编译ipa了。

3.发布Swift Package Manager

如果想发布framework到SPM,就必须使用XCFramework的形式,然后XCFramework要求在编译的时候必须设置Build Libraries for DistributionYES,由于上面的原因,SPM暂时也是无法发布了。

你可能感兴趣的:(Swift 制作私有库遇到的坑)