【发布时间】:2013-03-16 01:52:47
【问题描述】:
我的客户有一个启用了应用内购买、游戏套件和推送通知的 iOS 应用,它目前在应用商店中。我想使用内部企业分发证书退出应用程序,以进行内部测试,但仍然能够测试与原始配置文件相关的服务。这可能吗?
【问题讨论】:
标签: ios distribution enterprise
我的客户有一个启用了应用内购买、游戏套件和推送通知的 iOS 应用,它目前在应用商店中。我想使用内部企业分发证书退出应用程序,以进行内部测试,但仍然能够测试与原始配置文件相关的服务。这可能吗?
【问题讨论】:
标签: ios distribution enterprise
我最终这样做了,这是:-
和
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
【讨论】:
xcrun -sdk iphoneos PackageApplication -v "build/YourProject-iphoneos/youAppName.app" -o "output_folder/yourAppName.ipa" --sign "yourCertificateName" --embed "your.mobileprovision"
为了比@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
【讨论】:
在 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 一切正常
【讨论】:
搜索时,这是 stackover 流程中显示的第一个问题。所以想用最新的 iResign mac 应用程序进行更新,使用 GUI 而不是终端中的命令让工作变得超级简单。
iReSign
iReSign 允许使用来自 Apple 的数字证书对 iDevice 应用程序包 (.ipa) 文件进行签名或重新签名以进行分发。它还可以从 .xcarchive 文件创建签名的 iDevice 应用程序包 (.ipa) 文件。当签署应用程序的人与开发应用程序的人不同时,此工具适用于企业用户,用于企业部署。
如何使用
iReSign 允许您使用您持有相应私钥的任何证书重新签署任何未加密的 ipa 文件。 iResign 还可以从 xcarchive 文件创建签名的 ipa 文件。
将未签名的 .ipa 或 .xcarchive 文件拖到顶部框,或使用浏览按钮。
在 Keychain Access 中输入您的完整证书名称,例如底部框中的“iPhone Developer: Firstname Lastname (XXXXXXXXXX)”。
点击重新签名!等待。退出后的文件将保存在与原始文件相同的文件夹中。
【讨论】: