iossdk开发是什么,ios 开发
在ios中什么是 sdk和api
Windows API:Windows application programming interface(WIndows应用程序接口) Platform SDK:Platform Software Development Kit(平台软件开发工具包) 在概念上,SDK是一系列文件的组合,包括lib、dll、.h、文档、示例等等;API是对程序而
创新互联公司专业提供成都主机托管四川主机托管成都服务器托管四川服务器托管,支持按月付款!我们的承诺:贵族品质、平民价格,机房位于中国电信/网通/移动机房,成都多线服务器托管服务有保障!
iOS SDK开发中的情形
iOS SDK开发就是为某一个应用场景、或领域、或需求,提供一个已实现的、封装好的、可供直接使用的模块。
其主要由两部分组成:用来为类型或常量声明的头文件列表、具体实现的二进制文件。
所以SDK开发中的主要问题点集中在:
1. 头文件是否能被使用的工程索引到
2. 二进制文件是否能被使用的工程搜索到
本篇文章不写制作SDK的具体步骤,仅仅讨论制作SDK时的一些情形。
SDK开发中关于头文件设置:
凡是提供给外界使用的类、结构体、枚举、常量等,定义它们的头文件必须要在工程的Build Phases-Headers-public下面。并且这些头文件都需要包含在与SDK工程同名的头文件中(这条不是必须,只是这么做会显得更加规范。别人使用SDK的时候,只需要引入SDK同名的头文件即可)
设置库文件生成动态的还是静态的:
Project Name-Target Name-Build Settings-搜索框搜“Mach”-修改“Mach-O Type”为动态或静态,则相应可生成动态或静态的库文件。
先解释说明以下图片中出现的工程名字:
SDKDemo :制作的向外提供的SDK库文件(与SDK工程名同名)
SDKApp :引用SDK库文件(本文指的是SDKDemo)的App工程
SDKStatic :新建工程时,选择iOS-Framework Library-Cocoa Touch Static Library. 用来生成.a文件的工程
SDKFramework : 是个Framework库文件(可能是动态的,也可能是静态的),用于模拟被SDK依赖的.framework文件
下面分几种情况来讨论SDK开发的注意事项:
1. 生成动态SDK库文件。
创建工程的时候,根据默认配置编译是生成动态库的。
App工程中引入动态库的时候,需要在
App工程:Project Name-Target Name-General-Embedded Binaries下添加引入的动态库。否则运行时会报如下类型错误:
嵌入动态库编译后,生成的App文件中会多一个Frameworks目录(可右键.App文件查看包内容),里面全是Embedded Binaries下添加的动态库
2. 打包为静态库
SDK工程:Project Name-Target Name-Build Settings-搜索框搜“Mach”-修改“Mach-O Type”为静态库
App工程引入静态库很简单,直接引入就行,不需要额外配置:
tips:
合并真机与模拟器版本时的命令格式为:
lipo -create 模拟器版本的路径 真机版本的路径 -output 合并后的版本存放路径
1. 合并时lipo -create接收的模拟器版本和真机版本两个参数的前后顺序没有关系,合并后的版本通过命令查看架构信息显示结果是完全一致的。模拟器架构信息显示在前,真机架构信息在后。
2. 合并后的版本无论替换真机版本的Framework中的目标文件还是模拟器版本的Framework中的目标文件,App工程中引入被替换的Framework后在真机和模拟器上都能跑起来
首先创建SDKStatic工程,生成一个.a文件。
该工程只是简单继承了UIButton,并重写了initWithFrame方法。为每一个MyButton对象默认生成标题和背景色:
生成的.a文件如下,可以看到里面包含了MyButton.o文件:
在SDK工程中引入.a文件。下面分两种情况来看生成的SDK库文件:
1. SDK库文件做成动态库(设置方法看开头部分)
.a文件内容被整合进了SDK动态库文件中,引入App工程中时,只需要引入SDK动态库就可以了
2. SDK库文件做成静态库(设置方法看开头部分)
包中的信息:
.a文件内容同样被整合进了SDK静态库文件中,这个更好理解。引入App工程中时,只需要引入SDK静态库就可以了
总结下:
制作SDK库时,如果有依赖的.a文件,则最终生成的SDK库文件会合并.a文件的内容,而不论SDK库文件是动态还是静态的。
下面的SDKFramework是个Framework库文件(可能是动态的,也可能是静态的)
SDKFramework工程添加的内容和SDKStatic工程是一样的。也是自定义MyButton,默认生成标题和背景色(拷贝文件到工程):
SDKDemo工程自定义了MyView,默认生成的MyView对象添加了一个MyButton按钮和背景色:
1. 如果.framework文件是动态库
a. SDK打包为静态库,如下:
静态SDK包和动态SDKFramework.framework文件是彼此独立的。引入静态SDK包时,必须也导入SDKFramework.framework,否则编译不过,因为静态包有引入动态库中的符号。
b. SDK打包为动态库,如下:
两者还是彼此独立的。动态SDK包中会记录依赖的动态.framework rpath,App运行时,dyld会根据这个信息去加载对应的.framework依赖文件。如果找不到App将会在启动时奔溃...
2. 如果.framework文件是静态库
a. 首先SDK打包为动态库看看:
经实践,依赖的静态库会被整合进动态SDK包自身中。App中引入时,只需要导入SDK包就可以。我们在SDKApp中导入SDKDemo,运行可以看到如下效果:
b. 再看看SDK打包为静态库:
根据上面截图中信息,App中导入SDK包时,也必须导入依赖的.framework了。否则编译时将会出现如下图所示找不到符号的错误:
追加导入依赖的.framework,再次编译运行。OK!!!
总结:
1. 依赖的.framework为动态库
制作的SDK库文件不论动态还是静态的。和依赖的.framework文件本身是彼此独立的,不会发生符号整合的现象
2. 依赖的.framework为静态库
如果制作的SDK库文件是动态的,则依赖的.framework静态库内容会被整合进SDK库文件中
如果制作的SDK库文件是静态的,则彼此是独立的
这里又得分几种情况讨论:
1. Podfile中不使用use_frameworks! pods库生成的是.a文件
a. 如果SDK制作成静态库:
SDK静态库不会整合Pods里三方库中的符号,最终导入App工程时,需要SDK静态库、Pods中的三方库文件一起导入
b. 如果SDK制作成动态库:
Pods库中的符号会被合并整合进入SDK库中,导入工程时,只需要导入SDK包就OK了
2. Podfile中使用use_frameworks! pods库生成的是.framework文件。其中Pods_工程名.framework文件是个静态库,管理的第三方库生成的是framework动态库
a.如果SDK制作成动态库:
SDK中会包含引入三方库的rpath,App中引入SDK包时,也必须引入三方库,否则dyld加载不了指定库导致App启动时奔溃
b. 如果SDK制作成静态库:
静态SDK中会忽略Pods中的库中定义的符号(也即彼此是独立的)。如果静态SDK中引用了动态pods库中定义的符号,只要在App工程中也导入pods中动态库,并在embeded binaries中添加。一样是可以编译运行的。
其实怎么编译,SDK工程中是个什么情形都不重要。重要的是要明白库文件的本质,及它是如何发挥作用的?在什么阶段发挥作用?然后学会查看编译运行时的报错信息,并配合使用otool、nm、lipo、ar、file等这些命令去查看库文件的一些信息,最终追踪定位到问题。
原谅我最后都没怎么贴图了,因为流程都和前面差不多。我也写的手累了。如果你还有什么疑惑可以在下面评论,我会尽量及时回复。
IOS SDK开发详解(.framework、.a、Bundle资源文件创建、SDK中使用其他SDK等)
软件开发工具包(缩写:SDK,英语全称:Software Development Kit),一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
在OC的开发中,我们涉及到的一般是静态库(.a)或者动态库(.framework)。(注:不是所有的.framework就一定是动态库)
.a是一个纯二进制文件,.framework中除了有二进制文件之外还有资源文件。 .a文件不能直接使用,至少要有.h文件配合(微信的SDK就是这种形式),.framework文件可以直接使用。 .a + .h + sourceFile = .framework。 建议用.framework。再者 静态方式开发,一直是iOS SDK开发的主流方式。
终端输出为:armv7 arm64 是真机架构;i386 x86_64 是模拟器架构。
终端输出为:arm64 是真机架构;x86_64 是模拟器架构。
Bundle 和 其他的SDK都要和创建的SDK放在同一个文件夹,然后拖入要使用的项目中,如果该项目中的SDK和创建的SDK中的引用的SDK重复,那么就只要保持存在一个就好了。
SDK是什么??干什么用?
是软件开发工具包。一般都是一些软件工程师为特定的软件包、软件框架、硬件平台、操作系统等建立应用软件时的开发工具的集合。
文通银行卡号识别SDK可支持Android、iOS主流移动操作系统,APP集成银行卡识别SDK后,用户采用手机、平板电脑对银行卡进行拍摄识别即可自动识别银行卡号;
文通银行卡号识别技术也可以部署在识别服务器上,可支持Linux 32/64位操作系统、Windows 32位/64位操作系统。用户可部署到自有服务器上,APP可直接调用银行卡识别服务。
扩展资料
sdk的背景
API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的 API而使操作系统去执行应用程序的命令(动作)。
其实早在DOS时代就有 API 的概念,只不过那个时候的 API 是以中断调用的形式(INT 21h)提供的,在 DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将 AH置为 30h后调用INT 21h就可以得到DOS 操作系统的版本号。
而在 Windows 中,系统 API 是以函数调用的方式提供的。同样是取得操作系统的版本号,在 Windows 中你所要做的就是调用 GetVersionEx() 函数。
参考资料来源 百度百科-sdk
iOS开发之SDK国际化
对SDK内部text进行国际化处理
在控制器上显示一段文字,底下有三个按钮,每一个按钮点击之后切换不同的语种,分英文、简体中文和繁体中文三种。
注意:
创建静态库可以参考: iOS开发库之(二):静态库Framework的创建
创建Bundle可以参考: iOS之Bundle的创建与使用
点击刚刚创建的Localizable.strings文件,点击以下红框:
默认只支持英文的:
选择需要支持的语言,比如说Chinese(Simlified)/Chinese(Traditional):
本处只需要支持三种:英文、简体中文、繁体中文,那配置结果如下图:
以上属于Bundle里面的设置内容,这个国际化的内容就设置完了,接下来是如何显示不同的内容,先编译一下Bundle,另外每次改变Bundle都需要重新单独编译~
注意:其他的联调的我就不说了,另外还有Alert的那个类我也不说了,大家更详细的可以看DEMO, DEMO传送门
以下附上三张效果图:
附带其他的国际化:
3分钟实现iOS语言本地化/国际化(图文详解)
以上!!!
当前名称:iossdk开发是什么,ios 开发
网站地址:http://scjbc.cn/article/dsggihi.html