热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Swift静态Pod私有库踩坑

Swift静态Pod私有库踩坑-首先你应该掌握以下几点知识:1、动态库、静态库的区别,以及对应的架构合并、拆分。2、Xcode对应的workspace、project、targ

首先你应该掌握以下几点知识:

1、动态库、静态库的区别,以及对应的架构合并、拆分。

2、Xcode对应的workspace、project、target的关系。

3、Pod依赖可以是源码、静态库(.a+framework)、动态库(framework)。

4、源码依赖的情况下,Pod打包进宿主工程可以选择是全部静态库打包还是动态库打包,或者某个库单独设置。

5、CocoaPods本地仓库缓存。

以上只是大概列举了一部分比较重要的,其实这块涉及到的知识点非常之多,如果你仅仅是为了实现这些功能,而并没有去理解为啥是这样,这样的话那就不存在有什么知识点,时间一久你也就忘了。

熟悉了这些知识点之后,可以更加深入的理解产生每一个bug其中具体的原理。

前面库的创建以及demo操作、pod操作等,这里就简化了,因为本文主要是记录在调试Swift库的过程中所遇到的坑,且一个库模块下面是包含多个subspec子模块的条件下进行调试。

demo工程是通过pod创建的,打开Example工程:

use_frameworks!

target 'XXXModule_Example' do
  
  target 'Extension' do
    inherit! :search_paths
  end
  
end

再创建一个target静态库,语言选择Swift;将库对应的源文件拖入到刚创建的target中,开始调试:

1、No such module 'Kingfisher'

当前库找不到第三方依赖 Kingfisher ;需要在对应的 Extension target增加pod 'Kingfisher'

use_frameworks!

target 'XXXModule_Example' do
  
  target 'Extension' do
    inherit! :search_paths
    pod 'Kingfisher'
  end
  
end

然后将podspec描述的库通过podfile在本地导入进来

use_frameworks!

target 'XXXModule_Example' do
  pod 'XXXModule/Extension', :path => '../'
  
  target 'Extension' do
    inherit! :search_paths
    pod 'Kingfisher'
  end
  
end

2、Your configuration specifies to merge with the ref 'refs/heads/master' from the remote, but no such ref was fetched.

提交pod描述文件的时候一直报这个错误,后面发现是因为仓库没有创建readme.md导致.

3、合并framework支持的架构

由于是swift版本,制作出来的库和oc不同,需要合并的内容多一些,如果采用手动lipo去合并,每次调试改bug很是繁琐,所以最好的方式是采用shell脚本,可以指定构建完成模拟器以及真机版本后自动放到你指定的位置。

具体实现的shell脚本网上很多,这里就不贴出来了。

4、pod源码、二进制无法切换

其实并不是你写的描述文件有问题,而是CocoaPods本地缓存的原因;当pod下载依赖库的时候,原理是:首先会去我们本地电脑缓存中去查找,找到后拿过来用,所以我们在切换依赖的时候,需要pod cache clean xxx,再pod导入需要的模块。

所有缓存都在~/Library/Caches/CocoaPods/Pods/这个路径下面

Other:之前迸发出一个想法,就是如何才能窥探到别人pod私有库的描述文件,无意之间仔细看了这里的内容,虽不能看到原始内容,但是也可看个大概;还有个方法就是可以在github上进行搜索,虽然库源码无法看到,但是有些公司是开放出来了描述文件的。

5、宿主工程中,没有导入import xxxx报错

由于某些模块/组件在很多Swift文件中有使用到,如果一个一个文件的去import,太麻烦了,其实只需要在一个文件中导入即可,但是这里注意了,分2种情况:

1)如果pod是以Swift源码依赖,那么只需要在一个文件中导入**@_exported** **import** **xxxx** 即可。

2)如果pod是以Swift静态库依赖,和其它库一样通过桥接的方式 **#import ** 导入(子模块subspec)


6、package swift static library error

pod package这个工具有一段时间没有维护了, 在打包swift静态带依赖库报错 并且还 无法通过命令参数指定输出库的架构 等等有些局限,如果要求不多并且没有swift静态库动态库的混合打包的话可以使用,打包方便;目前我自己的话还是通过xcode配合shell脚本进行构建。

目前还暂时没有遇到issues里面的问题;后期如果还有遇到其它问题会在本文继续补充更新。


推荐阅读
  • 原文:蚊子132围绕对象存储系统(Swift)做研发工作蚊子132当时的第一个任务是在青岛IDC部署一套小规模的Openstack集群用于支持内部的开发环境。虽然我 ... [详细]
  • 于2012年3月份开始接触OpenStack项目,刚开始之处主要是与同事合作共同部署公司内部的云平台,使得公司内部服务器能更好的得到资源利用。在部署的过程中遇到各种从未遇到过的问题 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文详细介绍了git常用命令及其操作方法,包括查看、添加、提交、删除、找回等操作,以及如何重置修改文件、抛弃工作区修改、将工作文件提交到本地暂存区、从版本库中删除文件等。同时还介绍了如何从暂存区恢复到工作文件、恢复最近一次提交过的状态,以及如何合并多个操作等。 ... [详细]
  • 十大经典排序算法动图演示+Python实现
    本文介绍了十大经典排序算法的原理、演示和Python实现。排序算法分为内部排序和外部排序,常见的内部排序算法有插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。文章还解释了时间复杂度和稳定性的概念,并提供了相关的名词解释。 ... [详细]
  • 程序员如何选择机械键盘轴体?红轴和茶轴对比
    本文介绍了程序员如何选择机械键盘轴体,特别是红轴和茶轴的对比。同时还介绍了U盘安装Linux镜像的步骤,以及在Linux系统中安装软件的命令行操作。此外,还介绍了nodejs和npm的安装方法,以及在VSCode中安装和配置常用插件的方法。最后,还介绍了如何在GitHub上配置SSH密钥和git的基本配置。 ... [详细]
  • 初始化初始化本地空版本库,仓库,英文名repositorymkdirtest&&cdtestgitinit克隆项目到本地gitclone远程同 ... [详细]
  • 先记住几个专用名词,如下:Workspace:工作区IndexStage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库一、新建代码库#在当前目录新建一个G ... [详细]
  • imnewtotheswiftandxcodeworld,soimhavingaproblemtryingtointegrateapackagetomypro ... [详细]
  • java ssm框架_Java SSM框架的简单搭建
    1.添加依赖包,可以通过properties统一框架版本UTF-81.71.75.0.8.RELEASEjunitjunit4.11testjavax.servlet ... [详细]
  • Flow 生态案例学习 | Emerald City为Flow上DAO、教育和开发铺平道路
    原文链接:https://www.onflow.org/post/emer ... [详细]
  • 本文介绍了如何通过conda安装Selenium的wheel文件,包括查看环境、卸载旧版本、下载新版本的wheel文件以及安装操作的步骤。同时提供了使用清华源的方法。 ... [详细]
  • 开发笔记:Docker 上安装启动 MySQL
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Docker上安装启动MySQL相关的知识,希望对你有一定的参考价值。 ... [详细]
author-avatar
手机用户2502903535
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有