• 真机调试相关知识点


    真机调试相关知识点

    一.真机调试

    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中应用的版本号,如果新版本号>=旧版本号,肯定是审核状态,如果新版本号==旧版本号,就是通过审核的状态.
  • 相关阅读:
    Ansible之AWX安装部署
    Nacos 高可用集群部署
    kubernetes之Pod中的容器共享进程Namespace
    kubernetes之使用ConfigMap管理Pod配置文件
    kubernetes之给容器的生命周期事件添加处理器
    kubernetes之创建初始化容器
    kubernetes之Pod分配到指定Node
    kubernetes之容器健康状态检测
    centos7源码编译安装LNMP+ZABBIX4.0LTS(5)——zabbix proxy+zabbix agent
    centos7源码编译安装LNMP+ZABBIX4.0LTS(4)——zabbix server+zabbix agent
  • 原文地址:https://www.cnblogs.com/coderwjq/p/6221222.html
Copyright © 2020-2023  润新知