重新签署包含框架的IPA

时间:2016-08-22 11:58:47

标签: ios code-signing ipa codesign

我正在重新签名iOS应用程序(使用iResign),以便将其上传到App Store;作为这个的一部分,我改变了包ID。 我只有IPA(不是源代码)。

该应用包含第三方框架。

辞职似乎没事;但是当我使用Application Loader上传时,我收到以下错误:

ERROR ITMS-90046: "Invalid Code Signing Entitlements. Your application bundle's signature 
contains code signing entitlements that are not supported on iOS. 
Specifically, value 'XXXXXXXXXX.COM.X.Y.Z.A' for key 'application-identifier' in 
'Payload/APPNAME.app/Frameworks/FRAMEWORKNAME.framework/FRAMEWORKNAME' is not supported. 
This value should be a string starting with your TEAMID, followed by a dot '.', followed by
the bundle identifier."

(显然我已经改变了CAPS中显示的值)

我假设问题是我的entitlements.plist中的application-identifier与我应用中的Bundle标识符匹配,但与框架中的Bundle标识符不匹配。

为了排除它,我在框架和应用程序上设置了相同的Bundle标识符。这确实允许我上传到应用商店;但是当我尝试将应用程序安装到iPad上时失败并出现错误。

我是否需要为框架提供单独的权利文件? 我该如何解决这个问题?

更新:只是为了排除它,我尝试使用通配符配置文件和权利plist;但是这会产生同样的错误

3 个答案:

答案 0 :(得分:3)

您也必须重新签署框架。

只需打开你的.ipa,找到

下使用的框架

有效载荷/ MyApp.app /框架

尝试使用下面的命令对其进行签名

java -jar fitnesse-standalone.jar -p 9090

之后重新拉链。

此外,很多人在AirSign上取得了不错的成绩。

答案 1 :(得分:1)

假设您运行所有常规操作,例如删除应用程序签名,然后删除框架上的旧签名并重新签名这些框架而不包括权利:

rm -r Payload/"$ipaExe"/Frameworks/*/_CodeSignature
codesign -f -s "$certificate" Payload/"$ipaExe"/Frameworks/*

然后签署您的应用程序:

codesign -f -s "$certificate" --entitlements $entitlementFile Payload/"$ipaExe"

答案 2 :(得分:0)

可能会迟到,您可能已经解决了问题。但我希望我的回答可以帮助你和其他人

我假设你已经尝试过命令' codesign -f -s" iPhone发行版:...." '辞职或签署您的应用程序/框架/嵌入式库。 我通常使用此命令来重新设置我的应用程序,但是当我升级到iOS 10和xcode 8.2时,它突然停止工作。我在IPA文件中遇到与第三方框架相同的问题。

所以我做了一些研究,发现XCode使用这个命令来签署app

/usr/bin/codesign '-vvv' '--force' '--sign' 'CFE5D63E6.......1CBCF2271B844' '--preserve-metadata=identifier,resource-rules' '--entitlements' '/var/folders/86/kd0n_tjd56v9thg5x5qwnx500000gp/T/XcodeDistPipeline.uqv/entitlementsWgXqGE' '/var/folders/86/kd0n_tjd56v9thg5x5qwnx500000gp/T/XcodeDistPipeline.uqv/Root/Payload/FrameworkTesting.app/Frameworks/......'

请注意" CFE5D63E6 ....... 1CBCF2271B844"标识!它是您的证书的标识符。因此,这是使协同设计工作的解决方案。

  1. 使用此命令列出证书的所有标识符

    security find-identity -v -p codesigning

  2. 您将看到如下所示的列表:

      1) 4BEC631CE717.......8C7CB311093548D4 "iPhone Developer: xxxx (xxxxx)"
      2) 4BEC631......BB678C7CB311093548D4 "iPhone Developer: xxxx (xxxx)"
      3) .......D45590A63E99A27D2977C573..... "iPhone Developer: xxxx (xxxx)"
      4) CF........6FDD78ECB161CBCF2271B844 "iPhone Distribution: xxxx (xxxx)"
      5) C4973F........352F620D2F49 "iPhone Developer: xxxx (xxxx)"
      6) 225........B6D70672E880479860ED6 "iPhone Distribution: xxxx (xxxx)"
         6 valid identities found
    
    1. 使用此命令对您的应用/框架/库进行签名

      codesign -vvv --force --sign" [选择上面的标识符]"有效载荷/ yourAppp.app /框架/ yourFramework.framework

      codesign -vvv --force --sign" [选择上面的标识符]" --entitlements entitlements.plist Payload / yourAppp.app

    2. 希望这会有所帮助!