Framework打包

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

iOS app需要在许多不同的CPU架构下运行:

  • arm7: 在最老的支持iOS7的设备上使用

  • arm7s: 在iPhone5和5C上使用

  • arm64: 运行于iPhone5S的64位 ARM 处理器 上

  • i386: 32位模拟器上使用

  • x86_64: 64为模拟器上使用

 

由于需要打包的代码部分大多数由Swift编写。然后了解背景知识,Swift只支持动态库(Dynamic)打包。

所以先用动态库进行打包。试坑吧:

1.打开Xcode(图为楼主更新到Xcode8之后采用样式),创建项目

选择如图下所示1创建Framework(2的话就是创建静态库,也就是.a)

2.创建bundle,在上面Framework的基础上面Add Target选择macOS中的Bundle(由于创建的是默认的OS X,但是需要被实用的是在iOS上面使用的bundle 是点击Build Settings栏,搜索Base SDK这一行 将OS X的SDK替换成iOS)

3.关于Framework和Bundle。framework里面只能存放代码和头文件。bundle里面则存放资源文件,类似于图片,xib,plist等文件。

4.创建一个新的工程,然后将上面创建的Framework工程的xcodeproj拖拽进入工程。编译一下确保能够正常工作。(创建了联编工程就可以非常方便的进行调试,弄出好的Framework)

5.关于使用的第三方库问题:首先肯定不能将所有的第三方库打包进入Framework中,因为这样会增大包体积,而且如果其他的framework里面也使用的话,同时如果你打进包里面,那么外面就无法使用了。

6.关于存放在bundle里面的图片资源的调用 全部需要加上 bundle名字+图片名字

iOS开发中难免会用到xib。所以关于xib获取ViewController以及View都需要在bundle那一栏填入下面方法获取的bundle

由于楼主在项目中使用的图片可能会被外面代码使用,所以楼主直接将图片资源放在外面,代码可以正常调用不需要加上bundle的名字。但是在Xib中如果使用了图片那么就会报错,并且加载不出来,这个时候就需要在代码重新调用一遍(有关在Framework的Xib中使用工程外面的图片有方法显示出来的可以留言)。

7.有关Stroyboard的使用。也是可以在封装在bundle中,在Swift里面直接指定Storyboard的module(前提是有这个framework而且指定Class和Storyboard ID)

楼主天真的认为在OC中也可以这样使用。但是事实上并不可以,由于OC创建不并不是Dynamic库,所以无法动态链接,所以视图控制器会被加载出来,但是无法链接到所对应的类(因而苦逼的楼主将Storyboard部分的视图全部切换成了xib。如果有方法跪求告知

创建ViewController的Static写法(重写initwithNibname方法)(通过Xib)

创建ViewController的Dynamic写法(通过Stroyboard)

 

由于楼主刚刚使用Swift开发,所以不清楚framework里面有这么多坑。

于是乎付出了惨痛的代价,将相关的Swift代码全部替换成了OC代码。一切的缘由是动静态库的问题

使用OC后只需要将下图所示不勾选,然后在你的工程中添加该文件即可。但是在Swift打包的Dynamic库中,不勾选就会报错:没有所谓的文件(楼主关于Swift打包Dynamic库问题由于项目以及时间原因没有来得及细细研究。暂时挖个坑在这,以便以后东山再起。(如果有同学看到这篇文章并且可以帮忙答疑解惑,那将万分感激)

静态库需要注意的点) 如果主项目中采用了Category的话 需要在引用framework的工程中设置 Build Pharse -> Other Linker Flags中加上 -all_load 就OK了,再次运行工程,可以完成所有的编译过程.

-Objc这个标志选项会让链接器加载静态库所有的Objective-C的类和Category, 这样就能把Category中实现的方法整合起来. 但是由于这样做会使可执行文件变大, 也会整合一些用不到的对象, 所以才没有默认使用-ObjC标志, 而是需要我们手动添加.

-all_load

加载所有静态库中的文件. 相比-ObjC, 不同点就是-all_load会将所有的(包括非Objective-C)文件都整合到静态库中.
*注意 : 假如你使用了不止一个静态库,然后又使用了这个参数,那么你很有可能会遇到duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件.

-force_load (path_to_archive)

加载指定路径的静态库. 相比-all_load, 不同点就是-force_load只是完全加载了一个库文件,不影响其余库文件的按需加载.

使用-all_load或者-force_load大部分原因是因为Xcode4.2之前的版本的链接器的bug, 在64位iOS应用环境下当静态库中只有分类而没有类的时候, -ObjC参数就会失效了. 所以为了兼容Xcode4.2之前的版本, 有两种解决方法:

1.使用-all_load或者-force_load来替代

2.可以在分类中添加类的声明以及实现

 

未完待续!!!

转载于:https://my.oschina.net/u/2483082/blog/752413

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/260448.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 10 下利用WSL的Linux环境实现vscode C/C++环境的配置

本文主要结合二个工具,介绍如何在windows搭建Linux开发环境: WSL(Windows Subsystem for Linux)VSCode(Visual Studio Code) 文章目录WSL安装VSCode安装配置Linux下的C/C环境1. 打开WSL的控制台2. 更新ubuntu软件3. 安装GCC和GDB4. 配置VSCode(1). 打开…

Windows 11下 WSL使用 jupyter notebook

这里写目录标题前言在WSL下的配置测试运行更优雅的启动方法配置jupyter生成默认配置文件生成秘钥修改配置文件nohup启动前言 一直都使用jupyter notebook,不管做数据分析,还是调试代码,还有写文章都是。但是好像在WSL下又不好使。看了网上有…

sql2000导出mysql_如何将sql2000的数据库导入到mysql中?

展开全部先用SQl2000导出e68a843231313335323631343130323136353331333262373366文本文件,把后缀名改为CSv,再从Mysql中一导入OK参考:第一种是安装mysql ODBC,利用sql server的导出功能,选择mysql数据源,进…

实现日、周、月排行统计 sql

在如今很多系统中,都需要进行日、周、月排行统计,但是在网上寻找 了一番,发现很多都是相对的周、月排行,即周排行则用当前时间减去7天。这样我个人认为并不恰当。如月排行中,假设今天是4月22日,则从3月22日至4月22日之…

产品运行所需的信息检索失败_为服务业注入新活力,华北工控推出服务机器人专用计算机产品方案...

近年来,随着人口老龄化趋势加快和信息科技革命的持续推进,服务机器人已经被当作社会劳动力的一部分在医疗、教育、餐饮等行业广泛应用,市场潜力巨大。01、需求带动消费,科技改变服务服务机器人是国内智能机器人产业发展最快的分支…

Windows更新没有更新提示:从windows 10升级到Windows 11,并WSL下配置cuda

文章目录从windows 10 升级到Windows 11安装WSL的安装配置cuda从windows 10 升级到Windows 11 升级的方法有很多种,各大网站都有。有更新提示的按更新提示操作即可。我的是一直都没有更新提示,也搜索过网上的一些方法,但都不行。还是没法更新…

js修改css样式属性_这个笔记《CSS样式的常见属性及值》,让菜鸟轻松学会包粽子...

常见样式属性及值字体:font-family-size-style: normal(正常)|italic(倾斜)|oblique-weight: normal|bold(粗体)如果组合起来编写: font: style weight size family字体大小的单位可以是 px, em, rem, pt, cm, mm, in, pc文本:colortext-align(水平对齐方式): left|center|righ…

在 VirtualBox 中 CentOS 网络设置

转自&#xff1a;本文发表于水景一页。永久链接&#xff1a;<http://cnzhx.net/blog/minimal-centos-in-virtualbox/>。转载请保留此信息及相应链接。 4. 设置 按照上面的方法安装之后&#xff0c;还需要一些简单的设置&#xff0c;比如网络访问。然后既然是做网页服务器…

vscode C++ 分文件、文件夹编译配置与错误解决

文章目录问题includesourceout配置过程遇到的问题与解决遇到的问题1解决步骤1. ctrl shift p2. 配置json文件修改task.json文件修改launch.json可能遇到的错误1. collect2: error: ld returned 1 exit status2. /mnt/d/tmp/c/source/add.cpp:3:10: fatal error: add.h: No su…

淘淘商城项目mysql服务器_SpringMVC+Spring+Mybatis+Mysql+Maven+Svn[ 淘淘商城项目环境搭建 ]...

背景&#xff1a;淘淘商城项目的环境搭建说明&#xff1a;采用SpringMVCSpringMybatisMysqlMavenSvn结构搭建&#xff0c;在开发之中可以参考其结构和搭建步骤去搭建实际的工程项目工程结构简图&#xff1a;项目结构&#xff1a;---------------------------------------------…

bean validation校验方法参数_项目启动时首先校验Spring Boot配置参数

1. 概述在项目实际开发过程中&#xff0c;为了更好的复用&#xff0c;我们参考Spring Boot Starters&#xff0c;封装了许多企业内部中间件的starter。这些中间件的接入都需要申请并在项目中配置一些特定的参数。我们通过ConfigurationProperties注解&#xff0c;增加了在配置过…

进一步理解:inline-block,vertical-align,line-height

看似三个最常见的概念背后却隐藏了很深的很深“水” 那有多深呢&#xff0c;先来看下面的代码 引出问题 <style>.inline-block {display: inline-block;}.border {border: 1px solid #000000;}.span {width: 100px;height: 100px;}.bak {background: #33CCFF;} .o-hidden…

刷系统——黑屏问题

引用&#xff1a;http://www.miui.com/thread-344361-1-1.html 此贴大部分内容源自魔趣论坛V大的帖子&#xff0c;本人经过整理后发出&#xff0c;特此声明原帖地址&#xff1a;http://bbs.mfunz.com/thread-172610-1-1.html——此贴献给小白们&#xff0c;老鸟一笑而过吧近期有…

java executor_Java并发编程(08):Executor线程池框架

一、Executor框架简介1、基础简介Executor系统中&#xff0c;将线程任务提交和任务执行进行了解耦的设计&#xff0c;Executor有各种功能强大的实现类&#xff0c;提供便捷方式来提交任务并且获取任务执行结果&#xff0c;封装了任务执行的过程&#xff0c;不再需要Thread().st…

python 查看当前目录_「Python」打包分发工具setuptools学习

❝setuptools是python标准的打包分发工具&#xff0c;它可以将我们编写的python项目打包安装&#xff0c;这样其他同事就可以像调用标准库或python第三方库那样直接使用&#xff1b;也可以将项目上传到Pypi供更多人的下载安装使用。❞1. 项目结构项目结构❝这是一个打包构建好的…

九月十月百度人搜,阿里巴巴,腾讯华为笔试面试八十题(第331-410题)

九月十月百度人搜&#xff0c;阿里巴巴&#xff0c;腾讯华为小米搜狗笔试面试八十题 &#xff08;参与算法&面试题交流与讨论&#xff0c;请加群&#xff1a;30382647&#xff09;引言 自发表上一篇文章至今&#xff08;事实上&#xff0c;上篇文章更新了近3个月之久&#…

mysql性能结构优化原理_MySQL性能管理及架构设计(二):数据库结构优化、高可用架构设计、数据库索引优化...

一、数据库结构优化(非常重要)1.1 数据库结构优化目的1、减少数据冗余&#xff1a;(数据冗余是指在数据库中存在相同的数据&#xff0c;或者某些数据可以由其他数据计算得到)&#xff0c;注意&#xff0c;尽量减少不代表完全避免数据冗余&#xff1b;2、尽量避免数据维护中出现…

python git是什么_python爬虫之git的使用

一、简单认识&#xff1a; 1、初始化文件夹为版本控制文件夹&#xff0c;首先建立一个文件夹&#xff0c;进入这个文件夹以后输入git init初始化这个文件夹。2、Git几种位置概念 1、本地代码&#xff1a;本地更改完代码以后&#xff0c;虽然是存放在git的文件夹里面&#xff0c…

产品经理网站数据分析之测量问题现状(二)

本章续接上文&#xff0c;主要讲解流程图的绘制要领&#xff0c;以及示例。 1、基础流程图 基础流程图应该简明扼要地描述出流程的主要结构&#xff0c;在弄清楚流程的起点、终点&#xff0c;以及主要步骤后&#xff0c;按照流程的先后顺序&#xff0c;按照要展示的流程长短比例…

yii urlmanager配置post不生效_一文带你彻底学会 Git Hooks 配置

你好&#xff0c;我是小桔&#xff0c;是一个没有感情的代码崽。今天给大家介绍一下 Git Hooks&#xff0c;相信 Git 大家都在用吧&#xff0c;Git 除了用作版本控制&#xff0c;还有许多高级功能&#xff0c;Git Hooks 就是其中之一。本文环境&#xff1a;Git 版本&#xff1a…