真机调试相关知识点

真机调试相关知识点

一.真机调试

1.真机调试简介

  • 概念:将App项目运行到真机上进行测试,就叫真机调试
  • 为什么要进行真机调试?
    • 因为真机和模拟器的环境有差异
    • 内存环境/网络环境
    • 传感器开发(磁力计/陀螺仪/距离传感器等)
    • 特定功能(拍照/打电话/发短信/蓝牙等)
    • 用户体验不一样
    • 在app发布之前一定要进行真机调试
  • 如果做真机调试
    • Xcode7.0之前不是任何人,任何电脑,任何APP,任何真机设备都可以进行真机调试的(限制:开发者/电脑/app/真机设备)
    • Xcode7.0之后,做真机调试只需要拥有AppleID即可,会自动生成对应证书(并不是不需要以上限制)

2.Xcode7.0之前的真机调试

  • 限制人(申请开发者账号)
    • 理论基础
      • 必须拥有AppleID
      • 加入开发者计划,升级为"开发者账号"
      • 开发者账号分类
        • 个人账号($99)
          • 功能:可以真机调试,打包测试,程序发布
          • 优点:申请速度/给钱就行/1-3个工作日即可
          • 缺点:iTunes查看到的是个人信息,无法间接为公司做宣传/无法创建管理自己的开发团队
        • 公司账号($99)
          • 功能:可以真机调试,打包测试,程序发布
          • 优点:iTunes可以查看企业信息,间接为公司做宣传/可以创建和管理自己的开发团队
          • 缺点:申请复杂,需要"邓白氏"认证/申请周期比较长(连同"邓白氏编码"申请,最好准备30天左右时间)
        • 企业账号($299)
          • 功能:可以真机调试,打包测试
          • 优点:可以在企业内部随意安装到苹果设备,不需要经过AppStore审核/可以创建和管理自己的开发团队/版本更新迭代比较快,不需要经过审核
          • 缺点:申请复杂,需要"邓白氏"认证/申请周期比较长(和申请公司账号时间差不多)/不能使用此证书,将App发布到AppStore
          • 使用场景:App是针对某一特定人群制定使用,只在企业内部安装,无需发布到AppStore供他人下载,同时也不能发布到AppStore
      • 小经验:尽量不要从网络渠道以及代申请的公司去申请"邓白氏编码"
        • 花钱多,而且申请下来的"邓白氏编码"不一定和苹果服务器数据库内一直,最终不可用,浪费时间和金钱
        • 正确做法是通过苹果客服电话,联系客服人员,沟通申请流程以及需要提交的材料
  • 限制电脑(配置与电脑关联的cer证书)
    • 使用要进行真机调试的电脑生成CSR文件
      • CSR文件:证书签名请求文件
      • 作用:每台电脑生成的都不一样,能够唯一识别不同的电脑
    • 真机调试证书只能生成两个
      • 也就意味着,只能绑定两台电脑进行真机调试
      • 注意:如果别人已经配置了两个,而且正在使用,不能随便把别人的证书删除
      • 解决方案:
        • 此时只能使用从已配置证书的电脑中,导出P12文件,进行共享
        • 作用:让其他电脑设备不需要生成cer证书,也可以进行真机调试
    • 注意:证书是分类型的,不同的证书,有不同的作用(真机调试证书/打包测试证书/推送证书)
  • 限制APP(配置需要真机测试APP的BundleID)
    • 区分不同App就是通过APP的唯一标识符:BundleID
    • 明确的BundleID:可以开发一些特定功能,比如内购
    • 模糊的BundleID:某些特定功能无法开发,但可以适配多个App
  • 限制真机设备(配置需要真机测试的设备UDID)
    • UUID:苹果的每台设备都拥有的一个唯一标示
    • 测试的真机设备UUID最多只能添加100次,而不是100台
    • 也就是说,如果加够了100次之后,即使删除之前的设备名额,也无法继续添加
    • 解决方案:
      • 苹果会在下一年,给一次删除设备的机会,可以删除一些设备,来恢复一些名额
      • 但是,一旦添加了设备后,苹果则视为自动放弃添加设备
  • 根据前面三项生成一个描述文件
    • 描述文件的作用:在本地验证各项配置是否正确
  • 真机调试以及注意事项
    • 完成了上述步骤以后,会生成两个文件.cer文件和.MobileProvision文件,只需双击安装即可(cer文件被添加到钥匙串中/描述文件被安装到Xcode中(资源库->MobileDevice->Provisioning Profiles))
    • 必须保证cer证书和描述文件一致(Xcode->targets->build setting->code signing)
    • 创建一个APP,并确认BundleID与配置一致,如果不一致,修改Xcode项目的BundleID,保持与配置一致
    • 真机运行时,如果发现真机设备无法选中,查看项目最低部署版本是否过高,大于真机设备的系统版本.如果真机设备系统版本过高,则无法选中真机进行运行
    • 真机调试最终需要的文件(补充)
      • cer文件(或p12文件):双击安装,安装后存放在钥匙串
      • MobileProvision文件:双击安装,安装后存放在Xcode中(路径:~/Library/MobileDevice/Provisioning Profiles)

3.Xcode7.0之后的真机调试

  • 只需要AppleID即可,在Xcode->preference->Account中添加即可
  • 然后直接连接手机进行调试,会弹出一个框,提示缺少描述文件和证书,直接点击"Fix issue"选项,Xcode会自动请求苹果服务器生成对应的描述文件和证书
  • 注意事项:
    • AppID必须是没有和某个公司开发者账号关联(没有被添加到某个开发团队)
    • iOS9之前版本的真机也可以通过这种方式进行真机调试,但是最好把App BundleID改成英文的,不要带有汉字转换后的
  • 常见问题
    • The account xxx has no team with ID xxx
      • 直接进入苹果开发者技术支持,联系客服人员
    • An App ID with identifier xxx is not avaliable.Please enter a different string
      • 可能是别人已经使用了该BundleID,只需要更换一个即可
    • Count not launch xxx.process launch failed:Security
      • 进入手机设置->通用->设备管理->信任设备

二.打包测试

1.简介

  • 打包测试:将项目打包成.ipa的压缩包,供指定设备安装测试
  • 打包测试目的:
    • 项目进入测试阶段,需要专门的测试人员对app进行测试,此时需要将app安装到测试人员的测试设备上,此时的最佳方案就是直接将项目打包成.ipa包,供测试人员下载测试
    • 如果是外包公司,当开发完app时,想给客户展示,此时最佳方案也是打包测试
  • 如何进行打包测试?
    • 限制人
    • 限制电脑/限制app/限制真机设备,根据这三个限制条件,重新生成打包测试的描述文件
    • 安装证书和描述文件
    • 打包成ipa包
    • 安装测试

2.证书生成/描述文件的配置/证书安装

  • 限制人:
    • 必须拥有AppleID,并加入开发者计划,升级为开发者账号
  • 限制电脑:
    • 重新配置一个打包测试证书(Ad Hoc)
    • 需要使用打包测试的电脑生成的csr文件(证书签名请求文件)
  • 限制App:
    • 配置需要进行真机调试的BundleID(通过BundleID区分不同的app)
  • 限制真机设备:
    • 配置需要真机调试的UDID(每台真机设备都有一个唯一标识)
  • 根据限制条件,生成打包测试的描述文件
  • 分别安装cer证书和对应的描述文件

3.测试

  • 运行设备选择真机后,选择Product->Archive
  • 证书失效导致的打包错误
    • Missing iOS Distibution signing identity for xxx
    • 系统的Apple World Wide Developer Relations Certificate Authority证书过期
    • 安装到钥匙串中的证书失效(原因:系统根证书/中级证书颁发机构过期)
    • 解决方案:重新下载证书,并安装

三.程序发布以及发布前Beta版本测试(TestFlight)

1.简介

  • 程序发布:指将App发布到AppStore,供指定区域用户下载
  • 目的:赚钱
  • 程序发布的步骤:
    • 进行打包,和打包测试不同的是,在程序发布阶段,由于是发布到AppStore,所以不会对设备进行限制
    • 在开发者中心新建App,并添加App相关的信息
    • 运行设备选择真机后,选择Product->Archive
    • 选择submit打包项目,上传构建版本
    • 提交审核

2.在iTunes Connect上创建一个APP Record

  • 填写app信息,以便在AppStore中显示app的预览图片,app版本以及功能简介等信息

3.上传构建版本

  • BundleID:和发布证书配置时的设置保持一致
  • 程序启动图标
  • 启动图片
  • 程序版本
    • Bundle versions string,short是正是的,跟iTunes上的版本号保持一致
    • 有固定格式要求,不能超过三段
    • Bundle Version可用作内部版本时使用,无格式要求
    • 当Bundle Version String缺省时,Bundle Version替代Bundle Version String的功能,同时也继承他的限制(比如格式,位数等),需与itunes上的版本号保持一致
  • 设置签名证书

4.经验补充

  • 证书失效导致的打包错误
  • 常规审核周期:审核周期2天左右,节假日放假
  • 苹果审核规则文档:如果不遵循这些规则,就不允许app上架
  • 加急审核:联系苹果审核人员,跟他们说明理由,让他们优先给自己审核
  • 加急审核注意事项:
    • 加急审核,审核更加严格
    • 首次发布,一般加急审核不给审批
    • 加急审核申请一定要理由足够强大(一般是上线后发现重大Bug)
    • 申请加急审核通过,那么只要app没有上架,就会一直处于加急审核的状态,直到上架为止,此次加急审核才算结束
    • 加急审核有次数限制(一年好像有3次机会)

5.额外补充(TestFlight/Beta版本测试)

  • 概念
    • TestFlight最初是一个独立的测试分发平台,支持iOS和Android
    • 在2014年2月份被苹果收购,在iOS8中,苹果发布了TestFlight,并集成到iTunes Connect,用于将Beta测试流水平
  • 作用
    • 对发布之前应用程序,做测试分发
  • 与打包测试对比
    • 打包测试的步骤(弊端):
      • 测试者需要提供他们设备的UDID(如果测试者不知道怎么获取,或更加麻烦)
      • 测试者需要用软件读取他们设备的UDID(Xcode/iTools)
      • 测试者把设备标识码发送给开发者
      • 开发者把测试者的设备假如他们的账号中(并且有100次限制)
      • 开发者需要重新配置证书和描述文件
      • 开发者需要重新打包app
      • 开发者将应用程序发布给测试者
      • 测试者还要使用工具才能安装ipa包
    • TestFlight测试步骤:
      • 测试者提供他们的邮箱
      • 开发者登录iTunes Connect,给测试者发送邮件邀请
      • 测试者接受邀请,通过TestFlight软件下载安装程序
    • TestFlight的优势:
      • 不需要采集用户的UDID,只需要邮箱账号即可
      • 没有了最多100台的限制,内部测试25名,外部测试2000名
      • 不需要配置证书
      • 不需要手动分发ipa包
    • 打包测试更多的还是针对公司内部测试人员,TestFlight更多的是面向真正的用户
  • 使用步骤
    • 在iTunes Connect上创建一个APP record
    • 在TestFlight中填写基本信息
    • 上传构建版本
      • 配置"发布证书"和"发布描述文件"
      • 在本地创建APP
      • 打包构建版本并上传
    • 设置需要构建的测试版本
      • 内部测试构建版本(不需要审核)
      • 外部测试构建版本(需要审核,但审核周期短)
    • 创建测试人员(iTunes Connect->我的App->用户和职能)
      • 创建内部测试人员(需要在iTunes Connect用户选项中添加)
      • 创建外部测试人员
    • 添加测试人员
    • 测试人员收到邮件
      • 按照提示下载TestFlight应用
      • 按照提示使用TestFlight应用下载测试App
    • 额外补充
      • 可以实现集成一些"应用内统计"的第三方SDK,例如友盟统计(行为统计/留存统计/界面统计/崩溃日志统计)
      • 这才是测试的主要目的

四.内购

1.简介

  • 什么是内购
    • 在iOS中,专指苹果内购,就是在app内购买某件商品时,使用"苹果的支付方式"进行购买
    • 苹果规定:如果在app中销售的商品,跟app功能相关,那么,必须得通过内购方式购买
      • 比如:游戏中,开发关卡或者某个道具需要付费才能使用/QQ会员等
    • 内购的缺点:
      • 从商家角度来看:需要分成给苹果,分成比例过高,内购分成3:7
      • 从用户角度来看,内购支付,第一次需要绑定银行卡,操作流程相对来说比较复杂
      • 内购商品的价格,不能自定义,只有固定的级别
  • 为什么做内购
    • 开发者创收的一种模式:free+内购
      • 直接收费:不符合国人的消费习惯
      • 广告:收取广告商的钱
      • 内购:free+内购,可以引发用户购买兴趣,提高用户付费概率,比如植物大战僵尸游戏
    • 某些业务必须使用内购
      • 如果销售的商品应该使用"苹果内购",而没有使用,app将不允许上架

2.内购的流程(类似于商场的购物流程)

  1. 商户(App客户端)创建时,告诉商场(苹果服务器),自己都卖哪些东西(在App端展示所销售的商品)
  2. 商户向总代理(公司服务器)发送请求进货
  3. 商场(苹果服务器)验证商品是否可以销售
  4. 客户(APP用户)在客户端购买商品,并开具小票(供以后恢复内购使用)
  5. 客户拿着小票去商场交钱,到收银台需要排队(交易队列)
  6. 交费后给用户回执,使用Transcation Observer监听交易的活动行为

3.内购演练

  • 创建一个可以内购的BundleID(明确的AppID即可)
  • 在app管理中心,创建一个app并填写app信息
  • 创建内购商品,并添加到app,指定此app可以销售哪些商品
    • 注意事项:添加内购商品时,需要保证税务信息的完整,如果不完整,产品信息不全,内购功能无法测试
    • 内购产品的类型
      • 非消耗品(Nonconsumable)
        • 买了就一直有,不会消耗,例如开启关卡
        • 一般指的是在游戏中一次性购买并拥有永久访问权的物品或服务
        • 非消耗物品可以被用户再次下载,并且能够在用户的所有设备上使用
      • 消耗品(Consumable)
        • 买了就用,用了就没
        • 转为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载
        • 消耗品不能再用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息
      • 其他类型
        • 免费订阅(Free subscriptions)
        • 自动续费订阅(Auto-renewing subscriptions)
        • 非自动续费订阅(Nonrenewing subscriptions)
        • 以上三种类别在iBooks中使用,目前iboos不支持大陆市场
  • 创建app项目,开始开发
    • 配置BundleID为内购时配置的AppID
    • 导入框架StoreKit.framework
    • 从app服务器请求数据列表,冰箱苹果服务器请求可以销售的商品列表
    • 在代理方法中获取并显示可销售列表(productsRequest:didReceiveResponse)
    • 判断当前环境是否可以购买,用户购买商品,并监听商品的交易状态
      • 取出商品:SKProduct *product = self.products[indexPath.row];
      • 判断能否支付:[SKPaymentQueue canMakePayments];
      • 购买商品:SKPayMent *payMent = [SKPayment paymentWithProduct:product];
      • 把凭证加入到队列,等待用户付款:[[SKPaymentQueue defaultQueue] addPayment:payMent];
      • 设置监听者,监听整个交易状态:[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
    • 实现监听交易状态方法
      • 交易状态发生变化时调用
      • paymentQueue:updatedTransactions
    • 恢复购买
      • SKPaymentQueue.defaultQueue().restoreCompletedTransactions()
  • 开始测试,并添加用于测试内购的测试账号
    • 创建测试账号(测试账号必须是不存在的AppID)
      • 进入用户和职能
      • 创建沙箱技术测试人员
    • 注意事项
      • 测试时,最好使用真机进行测试,而且测试账号一定要使用添加的测试账号

4.查看内购销售情况

五.广告

1.广告的作用

  • 属于创收的一种方式,在APP内展示广告,苹果会付费给开发者,分成从原来的4:6到3:7

2.如何展示广告

  • 导入框架:iAd.framework
  • 添加控件:ADBannerView
  • 实现代理:ADBannerViewDelegate,优化用户体验

3.注意

  • 加载的广告内容是自动从苹果服务器获取,不需要开发者自己编写代码实现
  • 广告的内容,一般根据app分类进行推送

4.苹果广告平台地址

六.如何在必须使用内购的商品中,绕过苹果审核,使用第三方支付方式?

  • 直接不接入内购,在审核时隐藏相应的购买模块.至于根据什么条件去隐藏,有如下方法:
    • 后台提供接口,判断是否在审核状态.这样会有一个问题,就是审核状态中,如果使用同一接口,之前上架的版本也会隐藏购买模块,需要为每个版本提供一个单独的接口,故不采纳.
    • 请求接口之前,可以先判断时间,如果时间在某个区间内,就进行请求操作,否则就认为是在非审核状态.
    • 接入内购,同样需要一个接口,在审核时使用内购付款,通过后使用其他方式付款.
    • 比较当前提交的版本号和AppStore中应用的版本号,如果新版本号>=旧版本号,肯定是审核状态,如果新版本号==旧版本号,就是通过审核的状态.
posted @ 2016-12-26 09:19  喳喳的夏天  阅读(402)  评论(0编辑  收藏  举报