Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何告知用于签名.ipa的配置文件/签名证书?_Ios_Xcode_Certificate_Code Signing_Ipa - Fatal编程技术网

Ios 如何告知用于签名.ipa的配置文件/签名证书?

Ios 如何告知用于签名.ipa的配置文件/签名证书?,ios,xcode,certificate,code-signing,ipa,Ios,Xcode,Certificate,Code Signing,Ipa,我有一堆.ipa文件,我使用了一个脚本来放弃它们 那么,如何检查配置文件/签名证书以确认它们使用的信息正确 理想情况下,我希望能够获取任何.ipa文件,并告知使用哪个配置文件/签名证书对其进行签名 背景:我们的企业分销证书即将到期,我想重新签署我们的产品。对于我们在Xcode中制作和归档的所有内容,这都是简单的,但对于第三方供应商制作的可分发内容,我不能这样做。我想避免要求重新签名的.ipa文件,因为新的.ipa文件可能包含未知的更改并引入问题,他们可能也会向我们收费。。。但我更担心的是第一个问

我有一堆.ipa文件,我使用了一个脚本来放弃它们

那么,如何检查配置文件/签名证书以确认它们使用的信息正确

理想情况下,我希望能够获取任何.ipa文件,并告知使用哪个配置文件/签名证书对其进行签名

背景:我们的企业分销证书即将到期,我想重新签署我们的产品。对于我们在Xcode中制作和归档的所有内容,这都是简单的,但对于第三方供应商制作的可分发内容,我不能这样做。我想避免要求重新签名的.ipa文件,因为新的.ipa文件可能包含未知的更改并引入问题,他们可能也会向我们收费。。。但我更担心的是第一个问题


由于我们的旧分发证书和新分发证书仍然有效(您将获得6个月的重叠),我需要能够确认新分发证书是否已被使用,否则,当旧分发证书过期且“辞职”脚本未实际执行任务时,我将看起来非常愚蠢。

我已经能够使用以下过程成功地进行测试

  • 将原始.ipa安装到设备上
  • 转到设置->常规->配置文件(请参阅旧的配置配置文件)
  • 从设备中删除应用程序和旧配置文件
  • 辞职应用程序
  • 在设备上安装重新签名的应用程序
  • 转到设置->常规->配置文件(请参阅新配置配置文件)
  • 这似乎是确认配置文件已更新的一种防弹方法,因为配置文件中只有1个签名证书。。。那么我们必须用新证书签字


    (但我仍然想找到更好的方法)

    配置文件有一个UUID,可以使用终端命令查看:

    安全cms-D-i(路径到您的配置文件)

    请参见命令输出的UUID部分,如:

    UUID
    A008C022-7B82-4E40-8B37-172763E1E3CC

    Xcode插入用于在.app捆绑包中对应用程序进行签名的配置文件。要找到它,请将.ipa重命名为.zip,使用Finder解压,然后在/Payload中找到.app文件。在.app文件上“显示软件包内容”,并找到名为
    embedded.mobileprovision
    的配置文件


    使用上述命令转储其权限,并将其与在“库”下的Xcode Organizer>设备选项卡>配置文件部分的配置文件中找到的UUID进行比较。您可以使用“在查找器中显示”来显示它们在磁盘上的位置

    根据Bobjt的回答,我使用IPCU获得了配置文件的详细信息:

  • 将.ipa重命名为.zip
  • 用Finder解压它
  • 在/Payload中查找.app文件
  • 在.app文件上“显示包内容”,并找到名为embedded.mobileprovision的配置文件

  • 将MobileProvision文件拖到iPhone配置实用程序中


  • IPCU显示配置文件的名称/到期日期等。

    我最终使用了Bobjt和HaemEternal解决方案的混合方案

  • 查找存档
  • 显示包内容
  • 复制.app文件
  • 显示.app文件的包内容
  • 复制embedded.mobileprovision文件
  • 运行“安全cms-D-i(路径到您的配置配置文件)”
  • 从步骤6中的of调用结果中查找UUID编号
  • 打开Iphone配置实用程序,查看配置文件,找到具有相同UUID号的配置文件
  • 晚会迟到了

    但这个工具为我节省了一些时间:

    2020:由维护人员更新

    注意:深圳使用的是Xcode 6构建API,该API已被弃用近3年。如果您的应用程序使用Swift 3、watchOS和其他应用程序目标,则会出现问题

    构建iOS应用程序的一个维护替代方案是gym,它使用最新的Xcode API。要分发生成,可以使用fastlane。有关如何开始的更多信息,请参阅iOS Beta版部署指南


    如果试图确定是否使用特定证书对.ipa进行了签名,可以执行以下操作:

    如果您熟悉python,可以使用我创建的这个脚本将嵌入.ipa中的证书与您拥有的证书进行比较

    或者,您可以从Mac的命令行手动执行脚本所执行的操作

  • 解压缩IPA存档。它将生成一个名为“Payload”的文件夹

    解压Foobar.ipa

  • 阅读嵌入式资源调配信息。注意:有效负载目录中的包/文件夹的名称与.ipa相同,只是扩展名为.app

    security-cms-Di-Payload/Foobar.app/embedded.mobileprovision

  • 在上述命令的输出中,证书作为base64字符串嵌入到与密钥“DeveloperCertificates”关联的数组数据元素中。 3.复制证书(不包括xml标记,并确保没有额外的空白),并将其作为文本保存到方便的位置。在本例中,我将其称为“cert\u from\u foobar.txt”

  • Base64对已知证书进行编码,并将输出保存到文件中

    base64 barfoo.cer>barfoo.txt

  • 将已知证书与保存的嵌入证书进行比较。
    cmp cert_from_foobar.txt barfoo.txt | | echo“这些文件不一样”。


  • 如果它们是相同的,将看不到任何消息。

    这是一个痛苦的测试开始,但我已经编写了一个脚本,其中包含一个。ipa拉出配置文件的名称并检查过期日期,因此我将能够自动执行此操作,以便更快地进行测试。所以对我来说。。。这将是一个更好的解决方案。该命令行给出输出:“安全性:未能向解码器添加数据:未知(-8183(d)总线错误:10”Adam
    $ ipa info /path/to/app.ipa
    
    +-----------------------------+----------------------------------------------------------+
    | ApplicationIdentifierPrefix | DJ73OPSO53                                               |
    | CreationDate                | 2014-03-26T02:53:00+00:00                                |
    | Entitlements                | application-identifier: DJ73OPSO53.com.nomad.shenzhen    |
    |                             | aps-environment: production                              |
    |                             | get-task-allow: false                                    |
    |                             | keychain-access-groups: ["DJ73OPSO53.*"]                 |
    | CreationDate                | 2017-03-26T02:53:00+00:00                                |
    | Name                        | Shenzhen                                                 |
    | TeamIdentifier              | S6ZYP4L6TY                                               |
    | TimeToLive                  | 172                                                      |
    | UUID                        | P7602NR3-4D34-441N-B6C9-R79395PN1OO3                     |
    | Version                     | 1                                                        |
    +-----------------------------+----------------------------------------------------------+
    
    python ipa_cert_checker.py /Users/janedoe/Dcouments/Foobar.ipa /Users/janedoe/Dcouments/barfoo.cer