iOS SDK开发中的情形

iOS SDK开发中的情形,第1张

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文件如下,可以看到里面包含了MyButtono文件:

在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包和动态SDKFrameworkframework文件是彼此独立的。引入静态SDK包时,必须也导入SDKFrameworkframework,否则编译不过,因为静态包有引入动态库中的符号。

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等这些命令去查看库文件的一些信息,最终追踪定位到问题。

    原谅我最后都没怎么贴图了,因为流程都和前面差不多。我也写的手累了。如果你还有什么疑惑可以在下面评论,我会尽量及时回复。

首先打开苹果的开发者网站(Tips:这里我就不贴网址了)

点击网站上方的Member Center,会跳转到登录界面(Tips:如果登录过,并选择了浏览器保存此密码的时候,默认是登录状态)。

2

如图所示输入你的开发者账号和密码。

输入完成后点击"Login"(Tips:左边是注册,下边是找回密码,右边是登录,如果没有开发者账号,则需要用苹果账号申请开发者,这里不多说申请过程以及找回过程)。

3

登录后的界面如图所示,如果没有最上面的两个选项(Dev Centers、Certificates,Identifiers&Profiles),说明你当前登录的账号还不是开发者,需要一个开发者账号登录才会有。

如果界面和我一样,恭喜你可以进行真机调试,以及发布等证书 *** 作。

4

首先点击“Certificates,Identifiers&Profiles”,进入证书界面

我们会看到左边“iOS Apps”下面有四个选项:“Certificates”、“Identifiers”、“Devices”、“Provisioning Profiles”(Tips:如果没有该选项或者为空,则说明该开发者账号不是针对于iOS手机app开发的,如,当前演示的开发者账号,是用来做iOS开发的,故此中间的Mac Apps为空,该模块是在开发者账号申请的时候选择的,这里不过多赘述)

5

这里我会以“iOS Apps”给大家演示

首先点击“iOS Apps”下的第一个“Certificates”,该选项作用按我的理解就是授权一台电脑允许进行真机调试(这只是为了大家好理解,不必太较真)。

进入界面后,左边一列就是我们刚才在上一页看到的四个选项的具体目录,右边就是对应目录“Certificates”下的“All”里面的具体内容,当前目录就是授权证书,我们看右边有一列名字叫做Type,Type标示证书的种类,例如当前大家看到的“iOS Distribution”发布授权证书、“iOS Development”调试授权证书、“APNs Development iOS”推送调试授权证书等。

点击对应证书会出现证书详情,有移除和下载选项,这里我们点击右上方的“十”号进行授权证书创建。

6

之后我们会看到如图界面,此处我们选择“Development”下的“iOS App Development”,进行真机调试电脑授权申请。然后界面往下拉,点击界面最下方的“Continue”进行创建。

7

这一步,我们继续点击“Continue”。这一步是说,需要电脑的钥匙串配置文件,稍后我会给大家说,所以我们先点击“continue”,进入下一步。

8

这一步,需要我们上传钥匙串的配置文件。

好,我们现在打开我们的Launchpad,找到“钥匙串访问”,打开之后,不用等界面出来,直接在上方导航条中选择“钥匙串访问”目录下的“证书助理”,选择“从证书颁发机构请求证书”。如图:

9

如果想通过邮件接收证书,则需要填写邮箱,两个邮箱填写一样就行,之后在“请求是:”里面选择用“电子邮件发给CA”,即可通过电子邮件收到钥匙串配置文件。

在这里笔者就用最简单粗暴的方式来获得钥匙串配置文件,直接通过“请求是:”中选择“存储到磁盘”,上面的邮箱就可以随便填写了(是必填项,但不需要通过邮箱获得,所以随便填写就好)。

点击继续,我们为我们的文件选一个位置,这里我就选择桌面了,当然一定要选择自己能找到的位置。

10

我们在桌面上找到我们的钥匙串授权文件,如图所示。(Tips:生成的钥匙串配置文件是我们的当前电脑的,也就是对当前电脑授权真机开发,如果需要授权其他电脑,则需要其他电脑上对应的钥匙串配置文件)

之后我们回到浏览器,我们刚才需要上传的地方,点击“choose file”,找到为我们刚才放置钥匙串配置文件的地方。选中后,点击“打开”,点击“Generate”生成我们的授权证书。

11

生成之后,我们会跳转到Download界面,点击界面中的“Download”下载下来,下载位置一定要自己找得到。

双击我们生成的cer文件,一定要双击,双击后它会默认安装到钥匙串中,不然使用的时候会出现问题。

截止到目前为止,我们已经完成了对当前电脑授权,允许当前电脑进行真机开发(Tips:即钥匙串已经安装了授权证书,如果是用的其他电脑的钥匙串配置文件,则需要吧下载下来的cer文件,给对应电脑,并在对应电脑上双击)。

12

我们已经完成第一步了,之后点击左边目录中的“Identifiers”下的“App IDs”,这里是为我们的工程创建一个标示,也就是俗称签名,只有满足标示的工程才能进行真机调试。

同样点击右上方的“十”号按钮,进行创建标示。如图。

这里,需要我们创建标示了,在“name”的地方填写标示的名字,方便最后一步生成证书的时候,容易找到我们创建的标示。

接下来在 “App ID Suffix” 中的 “Explicit App ID” 的 “Bundle ID:” 里面填写我们的标示(也就是签名),格式下方给出的有例子。按照格式来些就好。笔者的习惯就是喜欢把公司网址反写最后加上项目名字,例如:combaiduZYBaiduExpPro。

当然,我们不必要为每一个工程都生成一个签名标示,苹果给我们提供了一种广域标示的方法。

还是同样的界面,我们选择“App ID Suffix” 中的 “Wildcard App ID”里面的“Bundle ID:” 填写我们的签名,注意格式下方给出的有例子。这里笔者也是按照这样的格式来写的,依然是“ combaidu ”,用的时候把“ ”替换成各种你需要的字符就行。也就是一个广域标示可以对应多个工程。如图。

之后我们点击最下方的“continue”,进行下一步。

核对一下信息后,然后直接点击最下方的“Submit”,发布我们创建的标示。

到这一步我们的标示已经创建完成了。

我们授权完电脑设定完签名之后,需要添加设备了,也就是允许进行真机调试的设备,例如(iPhone、ipad等)。

点击左边目录中的“Devices”,同样点击右上方的“十”号,进行添加。

我们可以选择一次添加一个设备,也可以一次添加多个设备。笔者比较推崇的是一次加一个不费事,一次添加多个文件格式易出错。

在“Register Device”里面中的“Name”填写设备名字,将来连接上对应的设备后,会在Xcode里面显示出来这个名字的。

之后,在“UDID”里面填写设备的UDID,这个过程,需要通过手机或者ITunes获取,这里笔者就通过ITunes来获得了,因为ITunes自带拷贝。

连接上要真机调试的设备,打开ITunes,点击设备,点击界面中的序列号,会切换到UDID,右键就有拷贝,直接拷贝过来粘贴就好了。

之后点击界面最下方"Done"按钮,就完成了设备的添加。

只剩下最后一步,生成调试证书。

点击最左边目录栏,选择“Provisioning Profiles”目录下的“All”,同样点击右上方的“十”号进入证书添加界面。如图。

我们选择"iOS App Development"点击界面最下方的“Continue”。

这一步是选择我们创建的表示(或者签名),选择我们在第13步中创建的“Identifiers”,一定要选对,如果创建的标示比较多,可以根据我们创建的名字去找我们的标示,如图。

点击“Continue”,继续下一步。

这一步是选择我们授权的电脑,在下面选项里面选择我们第11步生成的授权证书的名字,在这笔者要多说一句,一但创建的证书比较多就不好找,可以根据创建的证书的失效日期来区分,或者删除掉其他的(慎用)。

点击“Continue”,继续下一步。

这一步是选择我们需要进行真机调试的设备,可以选择我们第14步创建的指定设备,也可以选择全部,看自己需要。

点击“Continue”,进行下一步

为我们的证书选择一个名字,一定要选择一个好找的名字,不然后期在Xcode中会有很多证书,不好找。当然,遇到多人开发的时候,笔者往往会以a开头,不管证书再多,始终在前面排着。

之后点击“Generate”,来生成我们最后的证书。

在新的界面中点击"Download",下载下来的证书就是我们最终的证书,依然是需要双击,这次双击是安装到Xcode。

好了,到这里我们的证书就申请完了。我们一共下载了2个文件,一个后缀是“cer”的文件,一个是后缀为“mobileprovision”的文件。

好了,现在就剩下的是什么呢?就是进行真机调试了。

首先打开你的工程,选择工程目录下的“Supporting Files”目录下的工程名字plist文件或者“infoplist”文件(Tips:在Xcode60一下都是工程名plist,Xcode60以上才是infoplist)。修改里面的“Bundle identifier”标示,改为我们刚才申请的标示(第13步中)。

如果工程中有Tests测试文件夹存在,则在测试文件的infoplist做同样修改,如图。

之后,打开你工程根目录,同命的蓝色文件,在中间的地方先选择"TARGET"下的工程同名文件,在最右边的搭接面里面选择“Build Setting”,然后找到“Code Signing”选项,在“Provisioning Profile”里面选择我们第19步创建的证书,通过名字找到。之后修改“Provisioning Profile”上面的“Code Signing Identity”选择我们通过证书找到的授权证书。四个选项全部需要修改。

做完这一步,回到我们中间比较窄的界面,选择“PROJECT”中的工程更同名文件,进行上述 *** 作。

最后,就剩最后一步了,确保设备已连接值电脑,并在解锁状态下,在Xcode运行旁边选择“运行设备”,如图,找到自己的设备,选择,运行,等待加载吧。

如果找不到设备,有“IOS Device”的话,说明设备没连接好,或者设备还没有在Itunes中启用。如果没有启用,点击最上方window中的Device选项,找到设备,并启用。

到这里为止,我们的真机调试证书就说完了。

以上就是关于iOS SDK开发中的情形全部的内容,包括:iOS SDK开发中的情形、如何在一个开发者账号多次申请ios开发证书、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9324633.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存