iOS证书文件的撤销

20

我的客户有一个启用了应用内购买、游戏工具包和推送通知的iOS应用程序,目前已在应用商店上架。我希望使用内部企业分发证书重新签名该应用程序以进行内部测试,但仍能够测试与原始配置文件相关的服务。这种操作是否可行?

4个回答

33

我最终做了这个,它是以下两个内容的组合:-

1) 创建Entitlements 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>application-identifier</key>
    <string>GBA9L2EABG.com.your.bundle.id.MyApp</string>
    <key>get-task-allow</key>
    <false/>
</dict>

2) 解压这个IPA文件

unzip Application.ipa

3) 移除旧的代码签名

rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

4) 更换嵌入式移动配置文件

cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

5) 辞职

/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/Application.app"

6) 重新包装

zip -qr "Application.resigned.ipa" Payload

如果您重新签署.app文件,则可以使用以下命令完成此操作:xcrun -sdk iphoneos PackageApplication -v "build/YourProject-iphoneos/youAppName.app" -o "output_folder/yourAppName.ipa" --sign "yourCertificateName" --embed "your.mobileprovision" - Xiao
"GBA9L2EABG.com.your.bundle.id.MyApp" - 这只是您创建的捆绑标识符,还是来自原始IPA的标识符?如果更改原始应用程序的捆绑标识符,推送通知是否仍然有效? - Leonti
当我尝试安装应用程序时,出现了错误,提示appName的CFBundleExecutable不可执行。我尝试使用chmod +x命令对appName.app进行操作,但仍然出现相同的错误。 - Raghav
警告:--resource-rules在Mac OS X >= 10.10中已被弃用! Payload/Application.app/ResourceRules.plist:无法读取资源。 - Madusanka

4
为了更加方便地注销应用,我们使用了floatsign脚本进行改编,可在https://gist.github.com/Weptun/5406993中找到。这让整个过程变得非常简单:
sh floatsign.sh  ~/Downloads/File.ipa "iPhone Distribution: CertificateName" -b new.bundle.id -p /Path/To/Profile/Appstore.mobileprovision   App-resigned.ipa

警告:--resource-rules在Mac OS X >= 10.10中已被弃用! temp/Payload/Application.app/ResourceRules.plist:无法读取资源 发生错误,正在中止! - Madusanka

1
仅补充一下Koko Carl的回答,如果在第5步(重新签名)时遇到codesign_allocate问题,请尝试导出一个shell变量CODESIGN_ALLOCATE,并将其设置为iPhone SDK中的codesign allocate路径。要执行此操作,请确保已安装xcode命令行工具(Xcode中的Preferences/Updates)。
例如,我遇到了以下错误:
me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app"

输出:

Payload/MyApp.app: replacing existing signature
codesign_allocate: object: /Users/mimio/Downloads/Payload/MyApp.app/MyApp malformed object (unknown load command 33)
Payload/MyApp.app: object file format unrecognized, invalid, or unsuitable

为了解决这个问题,我将变量设定为如下所示:
me$ export CODESIGN_ALLOCATE=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

然后我再次运行了我的命令:

me$ /usr/bin/codesign -f -v -s "iPhone Distribution: Some Company, Inc" --resource-rules "Payload/MyApp.app/ResourceRules.plist" --entitlements Entitlements.plist "Payload/MyApp.app"

看,一切都能正常工作了,使用新的codesign_allocate。


1

当搜索时,这是在stackoverflow上显示的第一个问题。因此,想要更新最新的iResign mac应用程序,它通过GUI使工作变得非常容易,而不是在终端中使用命令。

iReSign

iReSign允许使用数字证书从苹果重新签名或签名iDevice应用程序包(.ipa)文件以进行分发。它还可以从.xcarchive文件创建已签名的iDevice应用程序包(.ipa)文件。该工具针对企业用户,用于企业部署,当签署应用程序的人与开发应用程序的人不同时。

如何使用

iReSign允许您使用任何证书重新签名任何未加密的ipa文件,只要您拥有相应的私钥。 iResign还可以从xcarchive文件创建已签名的ipa文件。

将未签名的.ipa或.xcarchive文件拖到顶部框中,或使用浏览按钮。

在底部框中输入您的完整证书名称,例如“iPhone Developer:Firstname Lastname(XXXXXXXXXX)”。

点击ReSign!并等待。重新签名后的文件将保存在与原始文件相同的文件夹中。

来源:https://github.com/maciekish/iReSign


4
你在4个不同的问题中都给出了相同的答案。如果可以用同样的答案回答问题,那么你应该标记它为重复问题,而不是发重复的答案。 - NathanOliver
非常适合重新签名已发送到AppStore的ipa文件。只需要找到正确的配置文件和证书(如果有多个)。我将entitlement.plist保留为空,如果没有找到,则似乎会创建一个临时文件。然后,我使用iMazing安装了重新签名的ipa文件。现在,在应用程序到达商店并/或等待批准之前,我可以再次检查我的提交的应用程序是否按预期工作。 - Big Papoo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接