2013-03-26 119 views
15

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

回答

29

我终于实现了这一点,这是一个组合: -

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)更换嵌入式移动的provisioning profile

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 
+0

一个命令,如果你辞职.app文件可以这样做:'xcrun -sdk的iPhoneOS PackageApplication -v “建设/ YourProject-的iPhoneOS/youAppName.app” -o“output_folder/yourAppName.ipa “ - 签名”yourCertificateName“ - 嵌入”your.mobileprovision“' – Xiao 2014-02-27 03:00:01

+0

”GBA9L2EABG.com.your.bundle.id.MyApp“ - 这是您创建的捆绑ID,还是原始的捆绑ID IPA? 如果您更改原始应用的捆绑ID,是否也推送通知? – Leonti 2014-11-14 14:34:08

+0

当我尝试安装应用程序获取错误作为appName的CFBundleExecutable,这是不可执行的。我尝试了chmod + x命令来appName.app仍然是相同的错误。 – Raghav 2015-05-29 07:04:40

1

只是一点点增加科科卡尔的回应,如果你运行与codesign_allocate问题,当你到了第5步(Resign),请尝试导出一个shell变量CODESIGN_ALLOCATE,并为其指定一个iPhone SDK中代码分配的路径。要做到这一点,请确保您有安装(在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" 

瞧!一切正常工作与新codign_allocate

4

要辞去一个应用程序比@Koko卡尔说的更容易一点,我们已经适应了浮动脚本,它可以在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 
+0

警告: - 在Mac OS X> = 10.10中不推荐使用--resource-rules! temp/Payload/Application.app/ResourceRules.plist:无法读取资源 发生错误,正在中止! – 2016-07-28 12:55:35

1

当搜索这是stackover流的第一个问题shownup。所以想要用最新的iResign mac应用程序进行更新,这使得使用GUI而非终端中的命令变得非常容易。

iReSign

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

如何使用

iReSign让你重新签署任何未加密的ipa文件与您持有对应私钥的任何证书。 iResign也可以从xcarchive文件创建一个签名的ipa文件。

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

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

点击ReSign!并等待。辞职的文件将保存在与原始文件相同的文件夹中。

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

+2

对4个不同的问题你有同样的答案。如果问题可以用相同的答案回答,那么你应该标记它是重复的,而不是重复的答案。 – NathanOliver 2016-01-08 13:37:43

+0

完美重新签署发送给AppStore的ipa。只需要找到正确的配置文件和证书(如果你有多个)。我将entitlement.plist留空,似乎创建了一个节奏,如果没有找到。然后我使用iMazing安装了我的辞职ipa。现在我可以仔细检查一下,我提交的应用程序在到达商店和/或等待批准之前会按预期工作。 – 2016-04-11 15:06:01