20

我的客户有一个启用了应用内购买、游戏套件和推送通知的 iOS 应用,它目前在应用商店中。我想使用内部企业分发证书退出应用程序,以进行内部测试,但仍然能够测试与原始配置文件相关的服务。这可能吗?

4

4 回答 4

32

我最终这样做了,这是以下几点的组合:-

1)创建权利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
于 2013-03-27T09:30:46.893 回答
4

为了让应用程序比@Koko Carl 所说的更容易辞职,我们调整了 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
于 2013-12-17T15:14:23.773 回答
1

只是为了在 Koko Carl 的响应中添加一点内容,如果在执行第 5 步(Resign)时遇到 codesign_allocate 问题,请尝试导出 shell 变量 CODESIGN_ALLOCATE 并为其提供 iPhone SDK 中的 codesign allocate 路径。为此,请确保您已安装 xcode 命令行工具(Xcode 中的首选项/更新)

例如,我收到错误:

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 一切正常

于 2013-11-14T18:43:12.037 回答
1

搜索时,这是 stackover flow 中显示的第一个问题。所以想用最新的 iResign mac 应用程序进行更新,这使得使用 GUI 而不是终端中的命令使工作变得超级简单。

重新签名

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

如何使用

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

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

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

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

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

于 2016-01-08T12:37:23.400 回答