苹果5sios证书怎么看

2017-03-03 16:34:55 binyao02123202 阅读数 1532
尝鲜需谨慎:支持iOS 9的 32 位越狱工具发布,详细图文教程送上
原创 2017-02-07 同步推 同步推
虽说盘古团队早就放出了 iOS 9 越狱工具,但遗憾的是仅支持 64 位设备,这让很多老设备用户有些失望。等待了许久,开发者 jk9357 带来了支持 32 位 iOS 9 设备的越狱工具Home Depot,针对 iOS 9.1-9.3.4 进行越狱。该越狱方法类似之前的 iOS 10 不完美越狱,目前工具为测试版还不够稳定,各种问题频发,甚至可能越狱后并未出现 cydia,建议大家谨慎尝试。当然如果你想要尝鲜,请仔细阅读本文的操作方法。

越 狱 准 备

1.首先确认是否自己的 32 位设备是否支持本次越狱。

将设备用数据线连接上 iTunes,点击设备后进入信息摘要页,点击如图红框处3次,便可查看设备型号。右侧则显示的是固件版本,收集到这两个信息后,对照一下设备型号与固件版本,看看你的32位设备是否支持iOS9越狱,非以下设备请勿尝试。小编也会在同步推微信号持续更新设备支持名单,敬请关注。
iOS9的32位越狱工具来了 iOS9越狱图文教程

-iPhone4,1: iOS 9.2, 9.2.1, 9.3, 9.3.2, 9.3.3, 9.3.4
-iPhone5,1: iOS 9.3.3, 9.3.4
-iPhone5,2: iOS 9.1, 9.2, 9.3.2, 9.3.3, 9.3.4
-iPhone5,3: iOS 9.2.1, 9.3.2, 9.3.3, 9.3.4
-iPhone5,4: iOS 9.3.2, 9.3.3
-iPad2,1: iOS 9.1, 9.2, 9.2.1, 9.3, 9.3.1, 9.3.2, 9.3.3, 9.3.4
-iPad2,2: iOS 9.1, 9.2, 9.2.1, 9.3, 9.3.1, 9.3.2, 9.3.3, 9.3.4
-iPad2,3: iOS 9.1, 9.2, 9.2.1, 9.3, 9.3.1, 9.3.2, 9.3.3, 9.3.4
-iPad2,4: iOS 9.1, 9.2, 9.2.1, 9.3, 9.3.1, 9.3.2, 9.3.3, 9.3.4
-iPad2,5: iOS 9.2.1, 9.3.2, 9.3.3
-iPad3,1: iOS 9.3.4
-iPad3,2: iOS 9.3.1
-iPad3,3: iOS 9.3.2, 9.3.3
-iPad3,4: iOS 9.2.1
-iPod5,1: iOS 9.1, 9.3.2, 9.3.3, 9.3.4

2.越狱前,按照惯例都要事先做好数据备份,以防万一。

iOS9的32位越狱工具来了 iOS9越狱图文教程

3.下载越狱工具:

>>>下载 Cydia Impactor(根据电脑系统选择 windows版本 或 mac版本)
>>>下载 MixtapePlayer6.ipa
>>>以上工具网盘下载地址:https://pan.baidu.com/s/1geQ4p2N

开 始 越 狱

1.解压并运行 Cydia Impactor

iOS9的32位越狱工具来了 iOS9越狱图文教程

2.连接 iOS 设备到电脑(需要有iTunes环境),等待 Cydia Impactor 识别到设备

iOS9的32位越狱工具来了 iOS9越狱图文教程

3.将 下载的ipa 工具拖曳到 Cydia impactor 里

iOS9的32位越狱工具来了 iOS9越狱图文教程

4.此时需要输入苹果账号的密码,申请一个临时证书(有效期为7天)。

iOS9的32位越狱工具来了 iOS9越狱图文教程
iOS9的32位越狱工具来了 iOS9越狱图文教程

这里需要注意的是,使用的Apple ID不能开启双重验证,不然会报错。

5.此时 Cydia impactor 会先对此 App 进行签名,然后会自动将签名后的 App 安装到您的手机,期间无需任何操作,请耐心等待

iOS9的32位越狱工具来了 iOS9越狱图文教程

6.接着就能在桌面上看到一个名“Home Depot”的app,首次打开会提示需要信任证书,需要到“设置>>通用>>描述文件与设备管理”中信任下证书,才能正常打开

iOS9的32位越狱工具来了 iOS9越狱图文教程

iOS9的32位越狱工具来了 iOS9越狱图文教程

8.打开“Home Depot”,点击“Enable Jailbreak”

iOS9的32位越狱工具来了 iOS9越狱图文教程

9.出现如下界面选择“Use Provieded Offsets”开始越狱。如果未出现这一选项,可能是因为部分设备无法读取数据,点击“Specify Custom Offsets”手动录入偏移量。其中已经有一些用户提交的偏移量,将其复制张贴保存后可开始越狱。

获取偏移量可访问开发者的网站:
http://wall.supplies/offsets.html

iOS9的32位越狱工具来了 iOS9越狱图文教程

10.耐心等待一会,设备会自动重启,一般就能看到cydia。如果未出现cydia,则再次点击“Home Depot”,重复第8、9步骤,直至cydia出现才算越狱成功。

iOS9的32位越狱工具来了 iOS9越狱图文教程

11.因为此次越狱为不完美越狱,所以设备重启后,如果遇到cydia闪退的现象,请打开“Home Depot”重复第8、9步骤,重新激活越狱。

12.成功越狱后,即可运行cydia加载数据,添加源apt.tongbu.com可安装实用插件。

iOS9的32位越狱工具来了 iOS9越狱图文教程

13.在设备上用Safari访问tongbu.com,下载安装同步推,便可享受海量游戏应用。

iOS9的32位越狱工具来了 iOS9越狱图文教程

最后需要强调的是,毕竟这是越狱测试版,工具目前存在问题还不稳定,所以建议普通用户暂时观望,不要轻易尝试。
2019-08-01 19:00:00 olsQ93038o99S 阅读数 184

640?wx_fmt=jpeg

黑客技术点击右侧关注,了解黑客的世界!640?wx_fmt=jpeg

640?wx_fmt=jpeg

Java开发进阶点击右侧关注,掌握进阶之路!640?wx_fmt=jpeg

640?wx_fmt=jpeg

Linux编程点击右侧关注,免费入门到精通!640?wx_fmt=jpeg


640?wx_fmt=jpeg

作者 | Danie1siOS中的Code Signing体系非常复杂,对新手非常不友好,虽然目前网上已经存在大量文章对此进行比较透彻的分析,最核心的部分已经讲解得非常清楚,我阅读了这些文章后,确实从中学习到不少知识,但我始终还是对Code Signing体系中很多相关的地方有着疑惑,于是决定认真地探究一番。本文会引用一些比较好的文章中的内容和图片,加上一些我个人的理解进行分析,有些内容本文不再重复,有需要的请阅读本文最后的参考文章。

概念

公开密钥加密、数字签名、证书这些通用的基本概念这里不再多说,主要提一下iOS上特有的东西

.certSigningRequest

点击mac OS的钥匙串访问里的 证书助理 -> 从证书颁发机构请求证书,最后会创建出一个.certSigningRequest文件,其实这个过程就是创建了一对公私钥• 其中.certSigningRequest文件保存着
○ 申请者信息申请者的公钥
○ 摘要算法
○ 公钥加密算法
• 私钥保存在 keychain 中

证书

AppleWWDRCAiOS 以及 mac OS(在安装 Xcode 时)将自动安装 AppleWWDRCA.cer 这个中间证书(Intermediate Certificates),它实际上就是 iOS(开发)证书的证书,即根证书(Apple Root Certificate)。iOS App DevelopmentiOS的开发证书,在开发阶段进行真机测试时需要用到的证书。可以在苹果开发网站上手动创建,需要上传.certSigningRequest文件;或者使用Xcode自动创建。iOS DistributioniOS的发布证书,可以用于进行 Ad Hoc 测试、打包上传到 App Store 或者打包成 Enterprisee(In-House) 类型供企业内部使用。可以在苹果开发网站上手动创建,需要上传.certSigningRequest文件;或者使用Xcode自动创建。

.p12

在mac OS的钥匙串访问里选择一张证书,右击该证书,选择导出"xxxxx",然后设置密码,可以导出该证书对应的.p12文件。.p12文件包含个人信息、公钥和私钥,也就是证书 + 私钥。iOS类型的每种证书同时存在数量有限制,而证书是依靠mac OS上的.certSigningRequest文件创建的,所以正常情况下,每种类型的证书只能在有限的Mac电脑上使用,如果需要在更多不同的Mac电脑上进行App开发、测试、签名,可以导出对应.p12文件代替证书来使用。640?wx_fmt=png

Provisioning Profile

Provisioning Profile的文件格式为.mobileprovision,里面包含着• 可以使用的证书• App ID,由 TeamID 和 BundleID 组合而成,类似于 A1B2C3D4.com.domain.appName 形式• 可安装该App的设备列表的UDID• Entitlements,授权文件,列出了App可以进行哪些行为• 以上信息的签名在苹果开发网站上手动创建,或者使用Xcode自动创建。

.ipa

.ipa文件是iOS上的App安装文件,其实它只是一个压缩包,等同于.zip格式,用mac OS自带的归档实用工具可以直接对它解压,可以看到里面的内容用于上传App Store的.ipa文件640?wx_fmt=pngApp Store下载的.ipa文件640?wx_fmt=png对比两种情况的.ipa文件,可以看出它里面最主要的是Payload文件夹,而Payload文件夹里面放的就是该App对应的.app文件

.app

右击.app文件,选择显示包内容,可以看到里面的内容用于上传App Store的.app文件640?wx_fmt=png从App Store下载的.app文件640?wx_fmt=png可以看出.app文件主要包含三部分:• Mach-O格式的二进制可执行文件,这个是一个App最重要的文件,我们编写的Objective-C、Swift代码都被编译在里面• 资源文件,包括:.bundle文件,.framework文件,.dylib文件,.nib文件,图片文件,音视频文件,字体文件等所有项目用到的文件• CodeResources,签名信息• embedded.mobileprovision文件,或者entitlements文件
○ 对于没有上传App Store.app文件,里面会包含embedded.mobileprovision文件,没有entitlements文件
App Store下载的.app文件,里面会包含.entitlements文件,没有embedded.mobileprovision文件

Code Signing

正常情况下(非越狱),所有App想要安装到iOS设备上,只有以下几种方法• 非App Store
○ 真机调试
○ Ad-Hoc
In-House
• App Store无论是哪一种方法,都需要先把iOS项目编译成.app文件,然后进行签名。按照惯例,需要分析一下Code Signing

非App Store

对于非App Store获得的.ipa文件,需要严格复杂的签名和验证流程640?wx_fmt=png• 创建.certSigningRequest文件,这时候会生成一对公私钥,这里称为公钥L(L:Local),私钥L。.certSigningRequest文件保存着公钥L• iOS 以及 mac OS上的AppleWWDRCA.cer 证书保存的就是苹果的公钥A(A:Apple),而对应的私钥A则在苹果的后台• 在苹果开发者网站上创建证书的时候,上传.certSigningRequest文件其实就是把公钥L传到苹果后台,用苹果后台里的私钥A去签名公钥L,得到对应的证书,把证书下载回来双击安装,会跟对应的私钥L绑定一起保存在keychain中• 除了证书,还需要对应的Provisioning Profile。在苹果开发者网站上:
○ 设置App的Bundle ID
○ 设置可安装该App的设备UDID
○ 设置该App的权限
○ 设置可以使用的证书
○ 最后会使用私钥A把以上这些数据进行签名,组成一个Provisioning Profile,格式为.mobileprovision,下载回来双击安装,会保存在~/Library/MobileDevice/Provisioning Profiles中,文件名为它的UUID
• 当需要把一个App安装在iOS设备上时,都会先把iOS项目编译打包成.app文件,而打包成可安装在iOS设备上的.app文件的前提是,设置该App的Provisioning Profile,最后使用合法的证书对源代码编译后的各种文件进行签名,步骤如下:
○ 用mac OS里的公钥A验证Provisioning Profile,获取里面的信息
○ 用Provisioning Profile里面的信息验证App的Bundle ID是否对应,App的权限是否对应
○ 用公钥A验证Provisioning Profile里面的证书,再判断是否有其中一张证书在这台Mac电脑里
○ 如果上面的验证都通过了,则会从mac OS的keychain 中取出符合条件且最新创建的证书,拿到对应的私钥L

○ 如果有.framework文件、.dylib文件、插件、watch目录下的extension,对它们分别进行签名
○ 把Provisioning Profile改名为embedded.mobileprovision放在.app文件里面
○ 使用私钥L对整个.app文件进行签名,得到签名信息CodeResources也放会在.app文件里面

○ 如果需要生成.ipa文件,则会把.app文件放在Payload文件夹里,把Payload文件夹和一些其他信息文件(非必要),一起压缩形成一个.ipa文件
• 把.ipa文件或者.app文件安装在iOS设备上时
○ 先使用iOS设备上的公钥A对.app文件里面的embedded.mobileprovision文件进行验证,获取里面的证书
○ 再使用公钥A对embedded.mobileprovision文件里面存在的证书进行验证,取出一张对应的证书,得到公钥L
○ 使用公钥L对.app里面所有签名信息进行验证,如果验证通过,证明该.app文件是完整合法,没有被篡改的
○ 获取embedded.mobileprovision文件里面的可安装该App的设备UDID列表,判断该iOS设备是否可以安装
○ 如果前面的验证都通过,则App会安装在iOS设备上

App Store

当需要在App Store发布App时,则先需要把.ipa文件上传到App Store。苹果会用一种非常简单的方式进行重新签名,这是因为在把.ipa文件上传到App Store之前,会先进行类似于上面步骤的一系列验证,只有通过验证才会上传成功,所以这已经进行过一次复杂的验证,代表苹果已经认同了这个.ipa文件,而用户又是从App Store下载的,所以也保证了.ipa文件来源是权威的,最后只需要在用户设备上进行简单的验证就可以640?wx_fmt=png• 苹果用私钥A对.app文件里面需要签名的文件进行重新签名• 用户下载App Store上面的.ipa文件进行安装时,用iOS设备上的公钥A对.app文件里所有签名信息进行验证,如果验证通过,则会安装在iOS设备上

更多相关

以上就是Code Signing最核心的内容,但在iOS开发中其实还有很多相关的概念,很多需要注意的地方,接下来会讲解一下我个人的观察和分析

苹果开发者帐号体系

Apple Developer:直接在Apple Developer登录,同意Apple Developer协议后的账号,免费,只可以使用Xcode进行真机调试,Xcode 7之后苹果推出的功能Apple Developer Program:分个人和组织类型,费用都是每年 99 美元,可以使用Xcode进行真机调试,打包Ad-Hoc测试,在App Store发布AppApple Developer Enterprise Program:企业账号,费用是每年 299 美元,可以使用Xcode进行真机调试,打包Ad-Hoc测试,打包In-House App,但不能在App Store发布App不同安装方式对应的证书类型• 非App Store
○ Development(真机调试):iOS App Development
○ Ad Hoc:iOS Distribution (App Store and Ad Hoc)
○ Enterprise:iOS Distribution (In-House and Ad Hoc)
• App Store:iOS Distribution (App Store and Ad Hoc)在iOS的项目中,只要不是运行在模拟器上,都会涉及到开发者帐号、证书、Provisioning Profile这些概念。免费账号的限制:• 创建的Provisioning Profile有效期只有7天• 在7天内最多注册10个Bundle Id• 只能同时注册3台iOS设备• 在同一台iOS设备上,只能同时安装3个使用免费账号签名的App。当该设备上已经存在3个App,则无法安装任何免费账号签名的任何App,就算是那3个App其中一个也不行,只能先把其中一个删除

Automatic signing

在Xcode 7之前,只有加入到Apple Developer Program(即付费)才能进行真机调试,Xcode 7之后苹果推出了Automatic signing功能,只要在Xcode上登陆Apple ID,就会自动管理证书和Provisioning Profile,同时没有加入Apple Developer Program的账号也能进行真机调试。640?wx_fmt=png在使用Xcode的Automatic signing功能的时候,无论是什么类型的账号,无论是直接Run进行真机调试,还是Archive,Code Signing Identity只能选用iOS Developer,只会使用iOS App Development类型的证书签名如果不使用Automatic signing功能,则可以选择使用的是iOS App Development或者iOS Distribution证书进行签名勾选Xcode中的AutoMatically manager signing,选择对应的Team后,无论是加入Apple Developer Program的账号(即付费账号)还是Apple Developer的账号(即免费账号):• 如果Xcode没有帮该账号自动生成过iOS App Development类型的证书, 无论在苹果后台是否已经存在其他iOS App Development类型的证书,都会生成一张新的iOS App Development类型证书,证书名称的格式是:开发者账号名称(当前Mac电脑名称), 如:Brian Hui (Daniels的MacBook Pro),同时会保存在当前Mac电脑的keychain中• 免费账号无法进入苹果的管理证书后台,但可以猜测出在苹果后台也会存在该证书• 如果Xcode没有帮该App的Bundle ID自动生成过对应的Provisioning Profile,就会使用上面那张证书生成一个Provisioning Profile,保存在~/Library/MobileDevice/Provisioning Profiles,但在苹果后台则不会存在这个Provisioning Profile• 如果在钥匙串访问中删除了那张证书,Xcode会提示你的账号有iOS App Development类型的证书,但这台电脑没有安装,需要先把那张证书Revoke,Revoke后会再次重复前面的步骤,生成新的证书和Provisioning Profile• 如果在~/Library/MobileDevice/Provisioning Profiles里面,删除了该Provisioning Profile文件,Xcode会马上重新生成Provisioning Profile在使用Xcode的Automatic signing功能的前提下,进行Archive,然后Distribute App的时候,选择非Development的选项,再选择AutoMatically manager signing• 如果本地存在iOS Distribution类型的证书,则会直接进行重签名• 如果没有存在iOS Distribution类型的证书,而苹果的后台有,则会告诉你,该账号存在iOS Distribution类型的证书,但这台电脑没有安装,请联系创建人拿到备份(.p12文件)进行安装,当你安装了该证书(或者.p12文件),则会直接进行重签名• 如果没有存在iOS Distribution类型的证书,而苹果的后台也没有,则Xcode会询问你是否需要生成iOS Distribution类型的证书,如果选择需要,则会自动生成iOS Distribution类型的证书,并且建议你保存在本地,证书名称的格式是:Team Name, 如:Hutchison Telephone (Macau) Company Limited,同时使用这张证书生成一个Provisioning Profile,保存在~/Library/MobileDevice/Provisioning Profiles,但在苹果后台则不会存在这个Provisioning Profile

Xcode对Provisioning Profile的验证

Xcode怎么把App和证书、Provisioning Profile绑定在一起呢?什么时候需要一张新的证书,什么时候需要一个新的Provisioning Profile?Bundle ID是App的唯一标识,App和证书、Provisioning Profile绑定在一起,其实就是Bundle ID和证书、Provisioning Profile绑定在一起,两种情况:Automatic signingBundle ID与开发者账号绑定。使用Automatic signing时,选择开发者账号(Team)后,Xcode会根据开发者账号去本地检索是否存在该账号对应的Provisioning Profile,再验证是否存在与该Bundle ID匹配的Provisioning Profile,再根据Provisioning Profile去本地检索是否存在对应的证书,都验证通过,则会设置成功。如果不存在Provisioning Profile,则会判断该Bundle ID是否已经被其他账号注册,如果已经被其他账号注册,则整个流程失败,需要选择对应的账号。如果该Bundle ID没有被其他账号注册或者账号已经对应上,则按照文章前面所说的步骤,最后生成Provisioning Profile。没有使用Automatic signing需要手动选择Provisioning Profile,当选择了其中一个Provisioning Profile时,则会分别验证Bundle ID是否对应、Provisioning Profile是否过期、是否存在对应的证书、App的权限是否对应、证书的类型和Code Signing Identity设置是否对应,如果都通过验证,则会设置成功。结论当你使用一台新的Mac电脑,进行开发、调试、发布某个开发者账号注册的App时,就需要一张新的证书(或者.p12文件);当你使用新的证书或者新的App,就需要一张新的Provisioning Profile。一张证书对应一台Mac电脑,和一个开发者账号里面所有App,而一个Provisioning Profile则是只能对应一个App。检验Provisioning Profile是签名的第一步,那如果Provisioning Profile通过检验,而Provisioning Profile里面又存在证书,为什么还需要单独安装证书呢?答案是:Provisioning Profile里面证书的作用是验证本地是否有符合条件证书,并且在安装App的时候使用其中一张证书里面的公钥L来验证App的完整性和合法性。因为Provisioning Profile里面是有多张证书的,所以无法确定用哪张证书对应的私钥L用来签名,所以这些证书只能用于判断Mac电脑里有没有符合条件的证书,如果Mac电脑里有多张符合条件的证书,则默认用其中最新的证书里面的私钥L进行签名,这样就可以限制了只有获得符合条件的证书的Mac电脑,才能进行签名。Mac电脑中证书的作用:1. 证明这台电脑是合法的;2. 找到对应的私钥L来对.app文件进行签名Provisioning Profile中证书的作用:1. 判断这台电脑是否可以进行签名,也就是判断这个台电脑的合法性;2. 安装App时检验.app文件

Xcode的Build Configuration和Code Signing Identity

Xcode有Run、Archive、Test等几种项目构建方式,每一种可以指定不同的Build Configuration(默认有Debug和Release),而在Code Signing Identity又需要指定每种Build Configuration对应的配置,分别为iOS Developer和iOS Distribution,其实就是在设置Provisioning Profile的类型是开发的还是发布的640?wx_fmt=png在使用Xcode的Automatic signing功能的时候,Code Signing Identity只能选择iOS Developer,否则会报错

Xcode的Run、Archive和Distribute App

Run和Archive的时候已经对App完成签名。如果设置的Provisioning Profile不是用于发布到App Store的,这时候把里面的.app文件打包成.ipa文件,可以利用Xcode或者其他工具直接安装到指定的iOS设备上。而点击Archives界面中Distribute App后,会再给你一次机会,选择其他证书和Provisioning Profile进行重签名,用于将App发布到不同的渠道

iOS设备上打开App时的验证

把App安装到iOS设备时,需要经过本文前面所说的验证,而打开App的时候,也需要验证:• 使用付费账号生成的Development和AD-Hoc类型的.ipa文件,安装后打开对应的App时,不需要在iOS设备上进行信任开发者操作,每次打开都会验证证书和Provisioning Profile是否被Revoke或者过期,如果验证不通过,则无法打开• 使用免费账号生成的Development和企业账号生成的Enterprise类型的.ipa文件,安装后第一次打开App时,需要在iOS设备上做额外的信任开发者操作,每次打开都会验证证书和Provisioning Profile是否被Revoke或者过期,如果验证不通过,则无法打开• App Store下载的.ipa文件,安装后第一次打开App时,会验证当前登录的App ID是否已经购买该App,如果验证通过,则以后都可以正常打开,如果验证不通过则无法打开

重签名

在完全了解iOS中的Code Signing体系后,除了可以让你在日常开发中遇到证书、签名等问题的时候解决起来得心应手,还有一个重要的应用就是重签名。网上也有一大堆关于重签名的文章,大多数都只是说了怎么操作,但是很少会解释为什么要这样操作。接下来我会结合本文前面的内容详细分析重签名的原理。

原理

• 重签名顾名思义,就是把.ipa文件也就是.app文件进行重新签名。经过前面的分析,iOS的Code Signing体系是依靠两个文件来进行签名:证书和Provisioning Profile,它们是由苹果后台生成的,并且用私钥A进行签名,所以重签名的第一步就是需要准备有效合法、由苹果后台生成的证书和Provisioning Profile,它们必须是相对应并且没有被修改过的。需要注意的是,如果这证书不是由你的Mac电脑去请求生成的,是它无法跟它里面公钥L对应的私钥L绑定在一起,因为你的Mac电脑里根本没有对应的私钥L,所以这时候是需要它对应的.p12文件,安装.p12文件就会得到证书和对应的私钥L• 签名的时候,会拿到Provisioning Profile里面的信息验证App的Bundle ID是否对应,App的权限是否对应,所以要把进行重签名的App的Bundle ID改成跟Provisioning Profile记录的一致。而App的权限则需要直接从Provisioning Profile中导出entitlements.plist文件,最后在重签名的时候使用• 既然是对.app文件进行重签名,那么最后就是需要准备一个没有被加密的.app文件。在App Store下载.ipa文件里面的.app文件都是被加密,被加密的.app文件无法进行重签名• 准备工作已经完成,现在就可以开始重签名,步骤其实是跟初次签名一样的。首先把准备好的Provisioning Profile改名为embedded.mobileprovision放在.app 文件中或者进行覆盖。使用准备好的证书,对.framework文件、.dylib文件、插件、watch目录下的extension分别进行签名,最后用证书和导出entitlements.plist文件再对整个.app文件签名• 关于证书的类型和App的安装限制:既然进行了重签名,那么这个App可以安装的iOS设备就会受到使用的证书和Provisioning Profile的限制,所以一般会使用企业账号的发布证书和In House类型Provisioning Profile进行重签名,这样就可以使App安装在任何iOS设备上

步骤

• 准备合法完整的证书(或者.p12文件)和Provisioning Profile• 准备一个已经脱壳的.app或者.ipa文件,其中Bundle ID要跟Provisioning Profile中的一致
// 在.app文件中,把Info.plist的Bundle ID改为 com.xxx.xxx
/usr/libexec/PlistBuddy -c 'Set :CFBundleIdentifier com.xxx.xxx' "Info.plist"
• 从Provisioning Profile提取entitlements
// 从embedded.mobileprovision文件中提取出entitlements.plist权限文件
security cms -D -i embedded.mobileprovision > temp.plist
/usr/libexec/PlistBuddy -x -c 'Print :Entitlements' temp.plist > entitlements.plist
• 把Provisioning Profile改名为embedded.mobileprovision放在.app 文件中• 使用准备好的证书,对.framework文件、.dylib文件、插件、watch目录下的extension分别进行签名,最后用证书和导出entitlements.plist文件再对整个.app文件签名
// 查看可用的证书
security find-identity -v -p codesigning

// 对.app内部的动态库、AppExtension等进行签名
codesign -fs 证书ID xxx.dylib

// 对.app文件进行签名
codesign -fs 证书ID --entitlements entitlements.plist xxx.app
查看新的签名信息
codesign -d -vv xxx.app
打包成.ipa文件
zip -r xxx.ipa Payload/

注意点

正常情况下.app的Bundle ID要跟Provisioning Profile中的一致,但实际操作发现,就算Bundle ID不一致也可以正常安装使用,但应该存在一定的隐患,所以建议还是保持一致

结语

以上就是我个人对Code Signing体系的观察和分析,大家可以看到相关的东西很多,需要注意的地方也很多,我尽量地把这些细节都总结出来,而这方面官方文档确实没有写得很详尽(或许是我没找到),所以很难把所有特性和表现都完全正确地总结出来,如果大家有发现文章中什么问题,请在评论中指出,我会及时验证、修改。

参考文章

[1]https://mp.weixin.qq.com/s/Ml9UteoAB0KrWLU9dPht6g 
[2]https://www.cnblogs.com/yinxiao-bai1014/p/5631837.html 
[3]https://www.jianshu.com/p/304ec98842e1 
[4]https://wereadteam.github.io/2017/03/13/Signature/

 推荐↓↓↓ 

640?wx_fmt=jpeg

?16个技术公众号】都在这里!

涵盖:程序员大咖、源码共读、程序员共读、数据结构与算法、黑客技术和网络安全、大数据科技、编程前端、Java、Python、Web编程开发、Android、iOS开发、Linux、数据库研发、幽默程序员等。

640?wx_fmt=png万水千山总是情,点个 “在看” 行不行
2014-09-24 00:28:14 u010954104 阅读数 723

相信苹果除了iOS8系统之后大家对这个新的系统都有好奇,很多果粉已经迫不及待的升级了iOS8系统,但是我们也同时会发现,iOS8可能不想我们想想中的那么优秀,费电?Assistivetouch上的按键过多?相信苹果也是做着这方面的维护的!

前天我把自己的5s升级了iOS8系统,但是发现,因为5s屏幕还是必须较小的,但iOS8在Assistivetouch放置了6个按钮,所以经常会按错,感觉不想自己之前使用的那么顺手了,所以也是费了千辛万苦找到了恢复系统的方法,跟大家共享一下!

首先对比一下  iOS8与iOS7的差异

左侧为iOS8,右侧为iOS7

包括开放了第三方键盘的使用,个人感觉都还是不如iOS自带键盘那么流畅,虽然自带键盘没有什么联想功能!那么现在就进入 我们的正式恢复系统的正文:


进入正题:

1.降级方法需要进入DFU模式或恢复模式,会抹掉设备上的所有资料,因此记得提前做好资料的备份哦!

  2.苹果随时有可能关闭iOS7.1.2的验证,届时将不能进行降级,更不能越狱了。查看验证是否已关闭可前往:http://www.icj.me/ios/all#iPhone51

进入之后先选择自己的设备的版本,但是去分全球版和GSM版,至于这个怎么区分,你可以:连接手机后,打开电脑的iTunes你可以看到如下界面:(电话号码下面 默认显示的为序列号,只要点击序列号就能进行切换,点击后看到产品类型)


接着我们记录自己的产品类型,进入之前打开的网站,例如我的手机是5s,所以我选择如下界面:先在5s模块下选择你需要的系统版本,然后后面的显示为产品类型,产品类型与自己设备的类型对应!点击将系统下载至电脑!


下载完成后,我们在本地就有一个iOS7.1.2的系统包(此图为mac电脑上的图片,后缀名为ipsw)


1、打开iTunes,断开 iOS 设备与电脑的连接

2、长按【home键】+【电源键】8 秒强制关机,关机后长按【home】键8秒,通过 USB 数据线连接电脑,或者请把设备链接电脑,先按住电源键3秒,然后继续同时按住开关机键和 Home 键,持续到第 10 秒的时候,请立即松开开关键,并继续保持按住 Home 键,直到在电脑上看到识别到 DFU 状态下的 USB 设备时就进入 DFU 模式了,这个时候 iTunes 会自动或者手动启动  

3、iTunes 会自动检测到一台等待恢复的设备,点击“确定”


4.按住键盘上的option键(windows电脑上为shift键)+iTunes上的“恢复”,选择iOS7.1.2固件开始恢复。



5.设备就会开始重新刷机,静心等待恢复到一个全新的系统。


6.恢复完成之后,重新拔插设备,在iTunes上点击“设置为新的iPhone/iPad”。


ok 至此 你的设备就又恢复到之前的系统了!还在为iOS8无法降级的小伙伴们赶快试试吧~













2017-05-23 12:04:33 DJH996064549 阅读数 500

一直想实现一下指纹解锁,苦于一直没时间,最近终于闲了下来所以翻了翻文档看了看demo,完成了这篇教程。本功能实现起来是很简单的,因为苹果都已经帮我们封装好了,只需要实现几个方法就可以了。

1.jpeg

实现效果图

实现过程

1.首先引入指纹解锁必须的头文件
1
LocalAuthentication/LocalAuthentication.h
2.了解下主要的两个方法

这个方法是判断设备是否支持TouchID的。

1
2
- (BOOL)canEvaluatePolicy:(LAPolicy)policy error:(NSError * __autoreleasing *)
error __attribute__((swift_error(none)));

这个是用来验证TouchID的,会有弹出框出来。

1
2
3
- (void)evaluatePolicy:(LAPolicy)policy
       localizedReason:(NSString *)localizedReason
                 reply:(void(^)(BOOL success, NSError * __nullable error))reply;
3.新建LAContext对象
主要的属性设置
  • localizedFallbackTitle:用于设置左边的按钮的名称,默认是Enter Password.

localizedReason:用于设置提示语,表示为什么要使用Touch ID

2.jpg

解锁失败界面
1
2
3
 //创建LAContext
 LAContext *context = [LAContext new]; //这个属性是设置指纹输入失败之后的弹出框的选项
 context.localizedFallbackTitle = @"没有忘记密码";
4.主要回调方法,包括成功以及失败的
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
NSError *error = nil;
    if ([context canEvaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
    error:&error]) {
        NSLog(@"支持指纹识别");
        [context evaluatePolicy:LAPolicyDeviceOwnerAuthenticationWithBiometrics 
        localizedReason:@"指纹解锁" reply:^(BOOL success, NSError * _Nullable error) {
            if (success) {
                NSLog(@"验证成功 刷新主界面");
            }else{
                NSLog(@"%@",error.localizedDescription);
                switch (error.code) {
                    case LAErrorSystemCancel:
                    {
                        NSLog(@"系统取消授权,如其他APP切入");
                        break;
                    }
                    case LAErrorUserCancel:
                    {
                        NSLog(@"用户取消验证Touch ID");
                        break;
                    }
                    case LAErrorAuthenticationFailed:
                    {
                        NSLog(@"授权失败");
                        break;
                    }
                    case LAErrorPasscodeNotSet:
                    {
                        NSLog(@"系统未设置密码");
                        break;
                    }
                    case LAErrorTouchIDNotAvailable:
                    {
                        NSLog(@"设备Touch ID不可用,例如未打开");
                        break;
                    }
                    case LAErrorTouchIDNotEnrolled:
                    {
                        NSLog(@"设备Touch ID不可用,用户未录入");
                        break;
                    }
                    case LAErrorUserFallback:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            NSLog(@"用户选择输入密码,切换主线程处理");
                        }];
                        break;
                    }
                    default:
                    {
                        [[NSOperationQueue mainQueue] addOperationWithBlock:^{
                            NSLog(@"其他情况,切换主线程处理");
                        }];
                        break;
                    }
                }
            }
        }];
    }else{
        NSLog(@"不支持指纹识别");
        switch (error.code) {
            case LAErrorTouchIDNotEnrolled:
            {
                NSLog(@"TouchID is not enrolled");
                break;
            }
            case LAErrorPasscodeNotSet:
            {
                NSLog(@"A passcode has not been set");
                break;
            }
            default:
            {
                NSLog(@"TouchID not available");
                break;
            }
        }
 
        NSLog(@"%@",error.localizedDescription);
    }

小结

做到这里几乎就算完成,使用确实很简单,因为苹果都已经给我们做好一切,对我们开发者来说就很轻松了。教程写的很简陋,希望大家多多包涵,代码我已经传到GitHub了,还有我的个人博客
最后希望可以帮到大家。

2014-08-05 10:20:29 u012769548 阅读数 2002

前提:下载好 iOS 7.1.1 固件包。

首先,按电源键关机,会弹出下图所示:

 iphone4s ios8降级ios7.1.1教程

        一、随后再按电源键开机,屏幕会出现苹果标志,不要松开电源键;

        二、接着再按住主屏 Home 键,直到屏幕黑屏;

        三、当屏幕黑屏时,请松开电源键,继续按住主屏 Home 键不要松开,直到电脑端的 iTunes 出现检测到一个处于恢复模式的 iPhone;

        注:如果进入不了恢复模式的话,请多操作几次。

        第一步:让你的设备进入恢复模式。具体方法:关机然后连接电脑,首先一直按住 Home 键直到设备显示恢复模式(屏幕显示为数据线和 iTunes 的图标)。

 iphone4s ios8降级ios7.1.1教程

        第二步:运行 iTunes,按住 Shift 键并点击恢复(Windows),如果是 Mac 的系统请按住 Option 键。

 iphone4s ios8降级ios7.1.1教程

        第三步:找到并选择你刚刚下载的 iOS 7.1.1 固件包。

ios8怎么降级ios7

        第四步:恢复过程将会开始,一旦设备重新启动,你就可以激活为一部新的iPhone或者 iPad,也可以通过备份进行数据恢复。

 iphone4s ios8降级ios7.1.1教程

        由于苹果关闭了之前版本的系统验证,所以降级只能恢复到 iOS 7.1.1。

原文地址:http://article.365.com/review/4sios8jjios7w2--2212940--2.shtml

iOS基础面试题 集锦

阅读数 3369

书签

阅读数 3056