2015-03-25 11:07:39 huwei2003 阅读数 18766

ios无线方式安装应用程序-苹果企业证书打包的客户端如何使用plist下载

也就是可以不在苹果市场上架,放在自己服务器即可提供下载安装(以无线方式安装应用程序)

iOS 支持以无线方式安装企业级应用程序,这可让您在不使用 iTunes 的情况下将内部软件分发给用户。
自己制作 xxx.plist文件,ipa和xxx.plist文件放在自己的服务器上共下载。

要求


用户可访问的安全 Web 服务器(需要有ssl链接 即有网站证书),没有则可找第三方能提供https链接的服务器放 xxx.plist文件

准备企业级应用程序进行无线分发
若要准备企业级应用程序进行无线分发,您应该构建归档的版本(.ipa 文件),以及构建清单文件以启用应用程序的无线分发和安装。


使用 Xcode 来创建应用程序归档。使用您的分发证书给应用程序签名并在归档中包括您的企业级开发预置描述文件。有关清单文件的信息,请参阅以下内容。有关构建和归档应用程序的更多信息,请访问 iOS Dev Center(iOS 开发中心)或参阅《Xcode User Guide》(Xcode 使用手册),可通过 Xcode 中的“Help”(帮助)菜单来访问该使用手册。(这部分可由ios开发人员提供)

关于无线清单文件

清单文件是 XML plist 格式的。iOS 设备使用它在 Web 服务器上查找应用程序,以及从 Web 服务器上下载和安装应用程序。清单文件是由 Xcode 创建的,使用您在共享归档的应用程序以进行企业级分发时所提供的信息。请参阅上一节准备应用程序进行分发。

以下栏是必填的:

项目 描述
URL 应用程序 (.ipa) 文件的完整合格的 HTTP 或 HTTPS URL。
display-image 下载和安装过程中显示的 57 x 57 像素 PNG 图像。指定图像的完整合格的 URL。
full-size-image 用来在 iTunes 中表示应用程序的 512 x 512 像素 PNG 图像。
bundle-identifier         您应用程序的包标识符,与 Xcode 项目中指定的完全一样。
bundle-version 您应用程序的包版本,在 Xcode 项目中指定。
title        下载和安装过程中显示的应用程序的名称。


仅对于“报刊杂志”应用程序,需要填写以下栏位:


项目        描述
newsstand-image 完整大小的 PNG 图像,用于显示在“报刊杂志”书架上。
UINewsstandBindingEdge
UINewsstandBindingType这些键必须与“报刊杂志”应用程序中的 info.plist 中的键相符。
UINewsstandApp        指示该应用程序是“报刊杂志”应用程序。
您可以使用的一些可选键如示例清单文件所述。例如,如果应用程序文件太大并且您想要在执行错误检验(TCP 通信通常会执行该操作)的基础上确保下载的完整性,则可以使用 MD5 键。


您可以使用单个清单文件安装多个应用程序,方法是指定 items 数组的附加成员。


构建网站

将这些项目上传到您网站上已鉴定的用户可以访问的区域:

应用程序 (.ipa) 文件
清单 (.plist) 文件

您的网站设计可以像用来链接到清单文件的单个页面那么简单。当用户轻按 Web 链接时,清单文件会被下载,并触发它所描述的应用程序的下载和安装。

以下是一个示例链接:

<a title="iphone" href="itms-services://?action=download-manifest&url=https://www.xxx.com/app/xxx.plist">Install APP</a>
请勿添加归档的应用程序 (.ipa) 的 Web 链接。载入清单文件时,设备会下载该 .ipa。虽然 URL 的协议部分是 itms-services,但 iTunes Store 并不参与此过程。
包含该链接的页面url可生成二维码,扫码后进入该页即可点击下载安装

设定服务器 MIME 类型
您可能需要配置您的 Web 服务器以便正确地传输清单文件和应用程序文件。

对于 OS X Server,将以下 MIME 类型添加到 Web 服务的“MIME Types”(MIME 类型)设置中:

application/octet-stream ipa
text/xml plist

对于 IIS,使用 IIS Manager 在服务器的“属性”页面中添加 MIME 类型:
.ipa application/octet-stream
.plist text/xml

下面是一个实际用的app的plist文件


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>items</key>
    <array>
        <dict>
            <key>assets</key>
            <array>
                <dict>
                    <key>kind</key>
                    <string>software-package</string>
                    <key>url</key>
                    <string>http://www.xxx.com/ios/xxx.ipa</string>
                </dict>
<dict>
<key>kind</key>
<string>full-size-image</string>
<key>needs-shine</key>
<false/>
<key>url</key>
<string>http://www.xxx.com/image/log512_512.png</string>
</dict>
<dict>
<key>kind</key>
<string>display-image</string>
<key>needs-shine</key>
<true/>
<key>url</key>
<string>http://www.xxx.com/image/log57_57.png</string>
</dict>
            </array>
            <key>metadata</key>
            <dict>
                <key>bundle-identifier</key>
<string>edwin_zhou@hotmail.com</string>
                <key>bundle-version</key>
                <string>1.0</string>
                <key>kind</key>
                <string>software</string>
                <key>title</key>
                <string>这里用的是中文名称</string>
            </dict>
        </dict>
    </array>
</dict>
</plist>


注意:有中文时有时会有问题,在浏览器上打开 plist文件路径,能正常显示内容则可,否则用记事本打开,另存成utf-8格式上传即可。

这样打开 <a title="iphone" href="itms-services://?action=download-manifest&url=https://www.xxx.com/app/xxx.plist"> 时就能正常提示是否安装,否则提示打不开 xxx;
这里需要注意的是此web服务器必须开通ssl加密端口,苹果iOS7以上的系统只能通过ssl加密端口进行下载客户端,同时此ssl必须含有有效ssl证书。
2014-03-28 12:58:32 dongtaochen2039 阅读数 2518
iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案

    在不发布情况下,IOS7.1安装企业版IPA,需要ssl支持,必须生成ca.crt (供终端授信证书使用) , server.jks配置到本地开发服务器使用

  http://127.0.0.1/apptest/dev.html 访问跳转即可打开安装。


  本文软件环境:

  ubuntu、tomcat

 一、首先我们生成服务端和客户端所需要的证书

1.生成服务器的私钥:

openssl genrsa -out server.key 1024
2.生成签署申请(注意除Common Name以外可以为空,Common Name必须为服务器的ip或域名(无端口号和http头)):
openssl req -new -key server.key -out server.csr

3.生成CA私钥

openssl genrsa  -out ca.key 1024

4.利用CA的私钥产生CA的自签署证书(注意除Common Name和organizationName以外可以为空,Common Name必须为服务器的ip或域名,       organizationName必须和上一次次一致):

openssl req  -new -x509 -days 365 -key ca.key -out ca.crt

5. 在当前目录创建demoCA,里面创建文件index.txt和serial,serial内容为01,index.txt为空,以及文件夹newcerts。

   CA为网站服务器签署证书:

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

6.把服务端代码转换浏览器可以识别的PCS12 格式,密码使用上面输入的密码。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.p12 
7.使用jetty 中的PKCS12Import 工具类完成转换,密码同上.
(jetty-5.1.10.jar  下载链接  点击打开链接  )
java -cp jetty-5.1.10.jar org.mortbay.util.PKCS12Import server.p12  server.jks
8.使用下面命令查看jks文件中包含的证书信息

keytool -v -list -keystore server.jks  

至此客户端证书ca.crt 以及tomcat服务器证书server.jks已经生成完毕。

二、向服务器安装server.jks证书

打开tomcat安装目录下的conf/server.xml

加入以下内容

    <Connector port="8443" protocol="HTTP/1.1"  SSLEnabled="true"  
               maxThreads="150" scheme="https" secure="true"  
               clientAuth="false"   
               keystoreFile="/home/darren/web/programs/apache-tomcat-7.0.52/conf/httpscer/server.jks"  
               keystorePass="yaic1996"   
               sslProtocol="TLS" />  

重启tomcat,访问网址
https://localhose:8443
若打开tomcat页面,恭喜,服务器的配置已经完成。


三、向手机安装ca.crt证书

用邮箱给你的ios设备发送ca.crt证书,然后用手机打开接收到的证书,点击安装即可。


四、安装

将下载链接地址改成:

[plain] view plaincopy
  1. itms-services://?action=download-manifest&url=https://example.com/manifest.plist  
plist里面的http也要改成https。



现在,再次访问我们之前的itms-services链接,就可以正常安装了。





2017-03-14 14:47:54 dongwei0103 阅读数 115
1. Certification(证书)
证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:
1) Developer Certification(开发证书)
安装在电脑上提供权限:开发人员通过设备进行真机测试。
可以生成副本供多台电脑安装;
2) Distribution Certification(发布证书)
安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。
不可生成副本,仅有配置该证书的电脑才可使用;(副本制做介绍在下面Keychain中介绍)

2. Provisioning Profile(授权文件)
授权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。
开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。
授权文件分为两种,对应相应的证书使用:
1) Developer Provisioning Profile(开发授权文件)
在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。
注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。
2) Distribution Provisioning Profile(发布授权文件)
在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。
发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID;
测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。
3. Keychain(开发密钥)
安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。
注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限。
证书是对电脑开发资格的认证,每个开发者帐号有一套,分为两种:
1) Developer Certification(开发证书)
安装在电脑上提供权限:开发人员通过设备进行真机测试。
可以生成副本供多台电脑安装;
2) Distribution Certification(发布证书)
安装在电脑上提供发布iOS程序的权限:开发人员可以制做测试版和发布版的程序。
不可生成副本,仅有配置该证书的电脑才可使用;(副本制做介绍在下面Keychain中介绍)

2. Provisioning Profile(授权文件)
授权文件是对设备如iPod Touch、iPad、iPhone的授权,文件内记录的是设备的UDID和程序的App Id,即使被授权的设备可以安装或调试Bundle identifier与授权文件中记录的App Id对应的程序。
开发者帐号在创建授权文件时候会选择App Id,(开发者帐号下App Id中添加,单选)和UDID(开发者帐号下Devices中添加最多100个,多选)。
授权文件分为两种,对应相应的证书使用:
1) Developer Provisioning Profile(开发授权文件)
在装有开发证书或副本的电脑上使用,开发人员选择该授权文件通过电脑将程序安装到授权文件记录的设备中,即可进行真机测试。
注意:确保电脑有权限真机调试,即安装了开发证书或副本;在开发工具中程序的Bundle identifier和选中使用的授权文件的App Id要一致;连接调试的设备的UDID在选中的授权文件中有记录。
2) Distribution Provisioning Profile(发布授权文件)
在装有发布证书的电脑上(即配置证书的电脑,只有一台)制做测试版和发布版的程序。
发布版就是发布到App Store上的程序文件,开发者帐号创建授权文件时选择store选项,选择App Id,无需选择UDID;
测试版就是在发布之前交给测试人员可同步到设备上的程序文件,开发者帐号创建授权文件时选择AdHoc,选择App Id和UDID;只有选中的UDID对应的设备才可能安装上通过该授权文件制做的程序。
3. Keychain(开发密钥)
安装证书成功的情况下证书下都会生成Keychain,上面提到的证书副本就是通过配置证书的电脑导出Keychain(就是.p12文件)安装到其他机子上,让其他机子得到证书对应的权限。Developer Certification就可以制做副本Keychain分发到其他电脑上安装,使其可以进行真机测试。
注意:Distribution Certification只有配置证书的电脑才可使用,因此即使导出导出Keychain安装到其他电脑上,其他电脑也不可能具有证书的权限。

证书什么授权文件的简单理解
.cer文件也就是常说的开发证书与发布证书的样式,这个.cer文件格式的证书是让开发者使用的设备(也就是你的Mac)具有真机调试和发布APP的权限
.mobileprovision文件也就是配置文件的样式,.mobileprovision文件格式的配置文件是让开发者的项目(APP)能有真机调试和发布的权限
就都会给真机调试和发布的权限,只是一个是给mac的一个是给你的app的,这样就说的过去了
证书的创建的话就是先从钥匙串机构那里创建一个文件到桌面,然后呢就是申请证书,这中间需要选择文件,这个文件就是你桌面上的那个,这也就印证了证书是给你的mac授权真机调试和发布的。接下来是Bundle ID的创建,同时会生成一个APP ID唯一的值这也是,注册完Bundle ID就是设备的认证了,就是测试的真机,最后就是授权文件的创建了,填写那个APP ID的值,然后这个授权文件就是会给你的APP 授权了,串联起来了吧,接下来还会填写选择证书,也就是让这个授权文件对应到你刚刚申请的证书上,这样就绑定起来吧,再绑定设备,然后就完成了授权文件的创建。对于P12是怎么再讲解一下,P12文件就是一个加密了的证书,如果别的电脑需要开发,那么你把你的电脑上的证书导出,导出的文件就是p12文件,把这个p12发给别人,然后再把你的对应的授权文件发给别人,别人下载打开就ok了

2015-12-18 20:33:59 Lotheve 阅读数 3403

从真机调试角度理解ios证书机制

非对称加密

理解非对称加密是理解证书机制的关键。非对称加密就是加密密钥和解密密钥是不同的加密方式。典型用法如下:

  1. 对信息保密:使用接收人的公钥对明文加密,然后传输给接收人。这样密文只能通过接收人的私钥解密,即便传输过程中密文被截获也是无法解开的,这就保证了信息传输的保密性。
  2. 验证报文所属人身份和防止篡改(签名):使用发送人的私钥对报文进行加密,就是发送人对报文进行了签名。签名后的报文只能通过发送人的公钥来解密,这就保证了报文的真实性,即报文确实为发送人所属。另外如果密文在传输过程中被截获并修改之后再发送过来,密文无法解密,就知道报文在被篡改了,这样就保证报文的完整性。因此签名的作用就是为了保证报文的真实性和完整性。

著名的RSA算法就是非对称加密算法。

数字签名

前面说过通过私钥加密,公钥解密能起到签名的作用。然而往往不是直接对明文原文进行签名。

非对称加密算法有一个缺点就是对很长的明文进行加密比较耗时,因此在实际使用中通常都是先将报文通过摘要算法得到摘要,再对摘要进行加密,然后将明文和加密后的摘要以及公钥一同发送出去。接收人先对摘要密文进行解密,再对明文使用摘要算法得到的摘要和解密后摘要进行比对,如果一致则说明明文没有被篡改过。这就是所谓的数字签名。

对于摘要算法这里不再叙述,典型的摘要算法有MD5和SHA。

数字证书

设想一种情况,A为了欺骗B,可以向B发送一份伪造是C发送的报文。A用自己的私钥对文件加密,连同A的公钥一并发给B,并谎称是公钥是C的。那么B怎么知道公钥到时是不是C的呢?这就轮到数字证书出场了!

首先,证书的存在,必然是为了证明某种事实。四六级证书证明了我的英语水平、驾驶证证明了我有驾驶资格。数字证书的存在,则是为了证明证书持有者的身份,好比一张网络身份证。数字证书的颁发者是CA(证书机构),受证者即为证书的所有者,可以是企业或个人,也可以是网络设备。数字证书即被CA签过名的证书,就好像被权威机构盖过章,这样证书的有效性就能生成了。

之所以说数字证书能证明证书持有者的身份,是因为:证书中包含了证书持有者信息和证书持有者公钥,通过权威机构(CA)的认证,数字证书就有了其有效性,就好比身份证被公安局盖了章之后,就能证明一个人的身份了。

这样一来,A就无法伪造成C了。因为B要核实报文持有者的身份,只要将A发送过来的数字证书拿去CA查询,数字证书中的公钥已经和证书持有人绑定在一起了,一查询即可知道公钥到底是A的还是C的了。这个过程就好像A给B出示了一张身份证,B一看就知道对方到底是A还是C了。

ios证书申请

要想在真机上运行app,首先要做的就是向MC(Member Center)申请开发证书,来证明你是一个开发者。在申请开发者证书之前需要安装苹果开发者根证书,安装这个证书意味着我们的开发工具对此CA的信任,从而可以用此CA签发的其他证书进行签名和打包。该证书随着XCode的安装自动安装在了Key Chain中。

这里写图片描述

在向MC申请开发证书时,我们会向MC提交一个certSigningRequest文件,全名为CertificateSigningRequest.certSigningRequest。这个文件到底是什么呢?这个文件里主要包含了两部分内容:

  1. 申请者信息(用申请者的私钥加密过)
  2. 申请者公钥

MC在拿到certSigningRequest文件后根本不管其中的申请者信息,而是取出其中的公钥,将其和我的开发者账号信息一起封装在证书中,然后进行数字签名。这样一份数字证书就制作好了。

下载制作好的开发者证书,然后安装,此时Kay Chain就会自动将证书中的公钥和本机的私钥关联起来。在Key Chain中可以看到:

这里写图片描述

制作描述文件

若要真机调试,必须对ios设备添加描述文件mobileprovision。描述文件描述了可由哪台电脑,把哪个App,安装到哪台手机上面。这个文件是一些信息的集合,打包了AppID、用于调试的Device UDID以及开发证书(这里不再介绍这几种信息),同样是被苹果签名的,因此在获取后就不能随意篡改。

真机调试前,确保对应的设备已经安装了该描述文件,然后XCode中选择本机中对应的证书,就能在真机上运行了。实际上是先打包再安装到真机上,而后运行。下面说一下打包过程中的代码签名。

代码签名

ios程序的最终归宿都是.ipa,即被打包成app,一般我们用Xcode自带的archive功能来打包ipa和签名。签名所用的私钥是我们在XCode中选择的证书对应的私钥(因此事实上在电脑上安装证书并没有实际用处,只是使XCode能用通过它来对应到相应的私钥,真正用于签名的是私钥)。并不是对ipa进行签名,而是只签名包里面的部分文件,先来看看ipa包中都有哪些文件:

image

ipa文件实际上是一个压缩文件,可以直接修改后缀后解压出来。解压查看可以看到里面包含的内容如下:

  1. 资源文件,例如图片、html、等等。
  2. _CodeSignature/CodeResources。这是一个plist文件,可用文本查看,其中的内容就是是程序包中(不包括Frameworks)所有文件的签名。注意这里是所有文件。意味着你的程序一旦签名,就不能更改其中任何的东西,包括资源文件和可执行文件本身。iOS系统会检查这些签名。
  3. 可执行文件。此文件跟资源文件一样需要签名。
  4. 一个mobileprovision文件.打包的时候使用的,从MC上生成的。
  5. Frameworks。程序引用的非系统自带的Frameworks,每个Frameworks其实就是一个app,其中的结构应该和app差不多,也包含签名信息CodeResources文件。
  6. info.plist文件。

其中需要签名的就是可执行文件和资源文件,这一签名过程就叫代码签名,保证打包后的程序不能被修改。可见代码签名是由机器完成的。

ios设备验证app

设备要安装运行app,首先要验证app的合法性。设备解压ipa包,然后取出mobileprovision文件,该文件是有苹果签名的,首先对其进行校验。然后要做的是:
1.检查设备UDID是否存在mobileprovision的设备UDID列表中。
2.取出mobileprovision文件中的AppID,对比info.plist中的BundleId,是否相符。
3.取出mobileprovision文件中的开发证书,首先通过CA公钥验证证书的有效性。然后通过其中的公钥对机器签名过的所有文件进行验证。

验证app合法后方可安装在设备上运行。

总结

  1. 非对称加密算法是关键
  2. 数字证书的作用是证明证书持有者的身份!怎么理解?数字证书中含有证书持有者的公钥以及持有者信息,经过CA认证后证书的有效性就生成了,同时将这把公钥和证书持有者绑定在了一起。而所谓验证证书的有效性就是使用CA的公钥验证证书上CA的签名。
  3. 数字签名的作用是验证报文所属人的身份以及防止篡改。
  4. app在打包时通过机器中的私钥进行代码签名,配置文件则是用于ios设备验证app是否合法。

参考文档:
《漫谈iOS程序的证书和签名机制》
《不让苹果开发者账号折磨我》

2016-08-04 11:30:27 Yj_sail 阅读数 1148
provision

开发者账号:
https://developer.apple.com/


苹果所有的证书都分为测试证书和发布证书两种

关于苹果开发者配置证书问题,纠结了好几个小时,现在对步骤进行一个总结和巩固(主要是配置推送证书)
首先需了解一下苹果设备发送和接受推送消息的流程(以LeanCloud的推送机制为参考)
APNs(Apple Push Notification Service

  • 应用打开推送开关,用户要确认 TA 希望获得该应用的推送消息;
  • 应用获得一个 DeviceToken;
  • 应用将 DeviceToken 保存起来,这里就是通过 [AVInstallation saveInBackground]将 DeviceToken 保存到 LeanCloud;
  • 当某些特定事件发生,开发者委托 LeanCloud 来发送推送消息,这时候 LeanCloud 的推送服务器就会给 APNs 发送一则推送消息,APNs(Apple Push Notification Service) 最后消息送到用户设备。

简单一句话就是:用户首先允许该应用接受推送消息,应用程序在启动时需注册推送服务,注册完毕后APNs会在代理方法中返回该设备的Token,说明该设备可以接受推送通知了(在这里我们因为要借助服务器发送推送,需将Token保存在我们的服务器上)。我们的系统服务器将推送消息信息(包含消息内容、发送给的设备Token、唯一的应用Bundle ID)发给APNs; APNs查找已允许和注册推送服务的设备,将消息发送给设备;iOS系统再把消息传给相应地应用程序,应用程序通过代码弹出push通知(alert、音乐形式等等)

主要的麻烦点是在配置推送证书问题:

1、创建应用程序ID

AppID


2、配置和下载推送证书


基本就是3步:
1)在系统钥匙串处生成一个 .certSigningRequest请求文件

  —》            
2)在Apple开发者中心配置推送通知根据提示上传1)步创建的文件,完成后下载推送证书。


双击安装(屏幕闪一下说明安装成功),在钥匙串中我的证书中找到该证书,并导出 .p12文件  (该文件用于上传至LeanCloud推送服务器)

3、Apple开发者中心配置PP文件

根据提示一步一步完成后,将PP文件下载到本地(这里需查看一下该文件的状态,是否是Active状态)
文件展示:


双击安装(屏幕闪一下说明安装成功)

配置完毕以后我们就可以根据我们集成的第三方SDK来完成应用程序的推送消息服务了
我们通过服务器的一个实现方法(从服务器发送一条推送消息给该应用,看是否能接收成功)


配置完毕推送证书以后,在AppDelegate中注册通知后,苹果APNs服务器在返回设备Token时显示一下错误信息:
Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的权利字符串" UserInfo=0x1187ad0 {NSLocalizedDescription=未找到\345\272\224用程序的“aps-environment”的权利字符串
1、可能是程序的Bundle identifier 与注册推送证书的Bundle ID 不一致
2、PP证书配置文件状态灯不是绿色的。(需重新导出该PP文件,并双击安装)

打包ios程序成ipa

阅读数 7358

没有更多推荐了,返回首页