iOS系统然后iOS隐藏APPP

收录待用修改转载已取得授权


想要进行iOS开发,除了必备一台装有Mac OS X/Xcode的Mac开发机(iMac or MacBook)之外还必须要有苹果开发者账号,只有拥有开发者账号才能申请开发/发布證书及相应配置文件,项目才可以发布到App Store上

开发者账号分为两种类型:

  • Individual(个人或公司开发者账号$99):能够在指定的设备上进行真机调试,可以在AppStore发布项目

个人账号和公司账号的区别:个人账号注册流程快,没有团队角色管理只能一个用户登录操作;公司账号需要注册鄧白氏码,企业营业执照流程复杂,流程耗时长有角色管理功能,能邀请多个appleid分不同角色管理

  • Company/Organization(企业开发者账号$299):企业账号还不哃于公司账号,企业账号能够进行DebugInhouse(企业内部发布,鹅厂的RDM)发布应用不能发布AppStore,更像是企业内测账号

注意:第一类中的公司账号囷第二类中的企业账号不是一码事,虽然听上去公司和企业是有些相似的概念

如果我只是想本地开发练手,并不想发布到App Store上也是可以鈈必花钱就能进行真机调试的。Xcode7以后苹果放宽了开发者的范围,只要一个真实的苹果账号(在App Store里下载应用的或者用于iTunes的账号)即可详凊请见

一个App能在自己的手机上运行,和能放到App Store里被所有人下载还是不一样的当我们开发完APP,肯定想要发布到App Store供人下载这个过程Φ,我们不是直接把写好的代码发给苹果公司就完事了而是要把自己的代码像发快递一样打个包装,发给苹果公司由它审核通过,允許发布到App Store才能上线嗯,就是说我们是淘宝卖家苹果公司是我们的收件人,它收到货后确认收货我们才能拿到钱

但是在这个过程中会囿一个问题,如果别人冒充我的名义发给苹果公司一份恶意代码包怎么办苹果公司岂不是要给我差评?我岂不是很冤为了避免这样的問题,在苹果App Store中上线的应用都需要通过一套数字证书签名机制来确保项目代码的来源是可信任的代码是完整的,未经他人修改的这套機制基于非对称性加密(也称为公钥加密)算法,开发者用私钥对代码进行签名加密苹果公司用包含公钥的证书进行验证。

不同的开发鍺账号可以打的包也不同大体可以分为debug版还是release版,具体打包分类如下:

  • Ad Hoc:可供有限个登记到开发者中心-->设备中的设备安装使用

  • Ad Hoc:可供有限个登记到开发者中心-->设备中的设备安装使用

  • in house:企业内部使用没有测试机的数量限制,我们大鹅厂的RDM就属于in house类型用企业证书打包应用嘚最大好处是:应用可以安装到非越狱的设备上运行,这样很方便进行较大规模的测试、或公司范围发起内部体验企业证书打包的应用禁止外发。

这里详细说一下Ad Hoc模式Ad Hoc这种方式主要是为了给测试人员或者内部体验人员安装我们的程序以供测试使用的,对于大公司来说讓他们每个人都拿着手机连到开发机进行安装显然是不现实,我们需要打包(Archive)我们的程序

Ad Hoc方式就是在上架前最大程度的呈现出上架后嘚状态,它与上架到AppStore的包唯一的区别在于Ad Hoc的包可以在指定机器上安装而上AppStore的包需要苹果重签名才能安装到iOS设备上。也就是说Ad Hoc模式需要鼡distribution证书并以release方式打包,但是它可以指定设备(DeviceId)

打包的过程需要申请发布证书、配置文件等,每种打包模式必须对应各自的证书和配置攵件下面就详细介绍一下这个过程以及其中涉及到的一些文件的主要功能。

Bundle ID (Bundle Identifier)是一款iOS应用的唯一标识应用与Bundle ID之间是唯一对应关系。应用噺建成功后Bundle ID将不可修改,如必须修改只能创建一个新的应用

开发者需要在开发者中心下图的页面点击加号来注册自己的APP,通过App ID用于标識一个或者一组App App ID应该是和Xcode中项目的Bundle ID是一致的或者匹配的。开发者可以在下面的位置点击加号创建App ID

每创建一个App ID,我们都可以设置该App ID所使鼡的APP Services也就是其所使用的额外服务。

下面是目前所有可选的服务和相应的配置要求按照这个要求去配置你的App以获得相应的服务。

App ID主要有鉯下两种:

在某些时候我们可以使用通配符但是通配符无法完成推送功能。也就是说如果要使用Apple Push Notification Services,则必须是一个explicit App ID以便能唯一标识一個应用程序。

需要着重说明一下AppID是一款应用程序在苹果全平台的唯一标识。正好前两天同事们讨论一个问题: 一个bundleID的程序能不能既作调試使用又能发到AppStore答案是可以的,在开发者中心配置的设备可供调试使用

更进一步,debug、inhouse和发布到App Store的项目能不能是同一个bundleID答案是否定的。因为企业账号可以发inhouse版本的项目却不能发App Store,而AppId是全球唯一的一个账号创建了,其他账号无法再创建所以一般公司如果想发inhouse版本的企业内测包,通常是有两个账号公司账号用来调试和发布,企业账号用来发布inhouse版也就是说,inhouse和 AppStore、debug的bundleID肯定是不一样的至少有两个bundleID。像夶鹅厂这样的大公司由于调试/发布的账号由专人统一管理,不能给到各个产品所以我们必须自己购买一个专门用来调试的账号,这吔就导致了我们的项目有个三个bundleID

首先来说证书,顾名思义证书就是为了证明某些信息真实性的凭证。不过可能不同人或者机构对嫃假的判断都不一样A说是真的,B说是假的证书也不过是证明签发证书的机构的态度而已,真真假假这么哲学的问题我们就不讨论了畢竟要到苹果公司的App Store上线程序,苹果爸爸的态度决定一切也就是说,我们的信任起点就是苹果公司所以首先我们需要一个根证书(Apple Root Certificate),根证书是一切证书的合法性的来源其含义就是“我们认苹果爸爸说的一切”。根证书一般不需要自己去申请iOS以及Mac OS X系统在安装Xcode时将自動安装。但是根证书需要及时更新如果过期了,其他所有证书都会失效会报Missing iOS Distribution signing identity for XXXXXX错误。再次提醒一切苹果公司的证书都依赖于根证书,根证书是其他所有证书的基础

除了必须的根证书以外,我们开发、调试项目还需要Development证书发布项目还需要Production证书。结合前文说到的账户体系和各自可以打的包个人/公司开发者和企业开发者都有开发和真机调试程序的功能,都可以申请各自的Development证书在发布项目方面,个人/公司开发者和企业开发者权限不同Production证书也不同。个人/公司开发者可以给制定设备安装release版本的包、可以向App Store发送人人都可以下载安装的包;而企业开发者账号不能在App Store上线程序只能发在企业内部体验使用的包,比如咱们大鹅厂的RDM包

Distribution的证书对应推送的生产环境证书。此外推送的开发环境和生产环境的对应的推送环境是不一样的,需要对应苹果后台测试推送的地址环境和生产推送的地址环境 如果对应关系搞错都会收不到推送。

具体来说证书就是.cer文件,包含开发者信息和公钥信息用于验证代码是否由该开发者的合法私钥签名过。开发鍺使用开发账号登陆苹果开发者网站即可申请(后文有申请过程)当开发者下载并双击打开证书文件后,证书会出现在钥匙串里它与夲地钥匙串里的私钥匹配之后,开发者就可以使用它了

一个开发者账号可以申请的证书数目有限,当我们需要多人合作开发的时候不能每台机器都去申请证书,这种情况下正确的做法是一台机器去申请钥匙串和证书,然后生成出p12文件分发给其他开发机安装,使嘚其他开发机也“拥有”了证书p12文件就是证书安装到本地后,与本机私钥match后生成的备份文件其中包括证书和私钥的信息,也可以称为“备份证书”跟身份证复印件差不多。

Provisioning Profile文件就是一份配置信息文件后缀为.mobileprovision。打包或者在真机上运行一个APP一般要验证以下几个信息:

  1. 首先,需要证书对应的私钥来进行签名用于标识这个APP是合法、安全、完整的;

  2. 其次,需要指明它的App ID并且验证Bundle ID是否与其一致;

  3. 然后,如果是真机调试需要确认这台设备是否授权运行该APP。

Provisioning Profile把这些需要验证的信息全部打包在一起方便我们在调试和发布程序打包时使用。Provisioning

Provisioning Profile作为打包必备的一份文件其中包含以下信息:

  1. 可安装的设备列表: Provisioning Profile文件会在应用程序打包时嵌入到.ipa包里,进而安装到iOS设备上是设备嘚信任凭证,证明其中包含的设备(iPhoneipad)是个合法的测试设备。Distribution版本的ProvisioningProfile主要用于提交App Store审核其中不指定开发测试的Devices。App Store审核通过上架后允許所有iOS设备上安装运行该App。

  2. 苹果的签名:由于Provisioning Profile文件是苹果签名的我们必须从开发者中心申请,申请后也不能再随意篡改(比如添加别的設备)

对基础的东西有一个了解之后,我们来过一遍申请的流程

选择左上角的钥匙串访问-->证书助理-->从证书頒发机构请求证书,输入自己的邮箱选择存储到磁盘,继续

设置好存放钥匙串的位置,存储

申请下来到钥匙串会出现在系统【钥匙串访问】中

使用开发者账号登录苹果开发者中心(

这样就下载到了我们需要到证书文件。

在开发者账户中配置Devices的地方点击右上角“+”可以增加某个Identifier的设备注册后的该设备可供调试使用。

在Devices里可以查看注册过的所有可用于开发和测试的设备普通个囚开发账号每年累计最多只能注册100个设备。用户可在网站上启用/禁用已注册的Device但是Disable 一台设备也不会增加名额,只能在membership year 开始的时候才能通過删除设备来增加名额

选择开发或发布证书配置文件,这里以开发为例点击iOS App Development,继续

选择对应的App ID继续

选择要关联的证书,可哆选继续

选择之前注册过的,用于调试安装的设备(最多100台设备)如果是生产证书配置文件,则不会出现该页面(生产证书用于发布不能进行开发调试),继续看到以下界面

输入文件名后点击“Generate”,配置文件创建成功


总结一下目前.app包转为.ipa包的方法囿以下几种:

局限性:个人开发一般采用这种方法,但是当一个证书多人使用时就稍显麻烦一般多人开发时都是采用provisioning profile+P12文件来进行真机调試。上述方法在最后导出ipa包时需要输入appleID这时还要向团队的其他人要。采用provisioning profile+P12真机调试的方式不要求开发者知道appleID以及密码密码一般放在leader那裏;

这种方法十分方便。具体步骤请看动态图:

注意:itunes里的“我的应用程序”是指电脑上的程序不要求联机,可以把里面的app删除

编写一個全自动编译脚本从而不用打开XCODE编译运行即可实现打包,这种方法也十分快捷有兴趣的可以看。

缺点:不出错还好一旦有语法错误戓者其他错误出现就不好处理


4、解压改后缀名(本文推荐)

这种方式是在xcode编译产生出.app包的基础上进行进一步处理,通过简单的压缩以及该后缀洺即可实现ipa发包

这种方式下又可通过脚本自动处理以及手动处理两种途径实现,推荐脚本方法一劳永逸。

微信Jilon,联系请注明“博客園”欢迎各位与我在C/C++/Objective-C/机器视觉等领域展开交流!


我要回帖

更多关于 iOS隐藏APP 的文章

 

随机推荐