首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >重新签署国际和平协议(iPhone)

重新签署国际和平协议(iPhone)
EN

Stack Overflow用户
提问于 2011-08-01 16:44:43
回答 13查看 120.2K关注 0票数 141

我目前使用hudson构建所有的应用程序,使用xcodebuild,然后使用xcrun,没有任何问题。

我收到了几个来自不同人的IPA文件,我希望使用企业帐户而不是公司帐户重新签名(用于应用程序商店,有时也可以是临时分发的)。

我的问题是,当我试图退出应用程序时,它不会安装在我的设备上(它应该安装在设备上,因为它是企业版的)。错误信息在设备上(不是在iTunes中),它简单地告诉我它无法安装应用程序。没有给出更多信息。

我找到了一些信息( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/ )

这也许是可能的。我面临的问题是,它似乎没有像我在普通版本中所做的那样嵌入移动配置文件(使用xcrun),这是否可以使用codesign工具进行控制,或者是否可以使用xcrun重新签名?

使用我的resign脚本,我现在这样做

  • 解压缩项目有效负载)
  • xcrun -sdk iphoneos PackageApplication -s "$provisioning_profile“”$
  • _dir/Payload/$appname“-o "$project_dir/app-resigned.ipa”--签名"$provisioning_profile“--嵌入app

我已经查看了生成的ipa文件,它似乎与原始应用程序非常相似。这里真正应该更改的文件是什么?我最初以为_CodeSignature/CodeResources会改变,但内容看起来几乎完全一样。

指针非常受欢迎。

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2011-08-03 12:36:57

终于让它工作起来了!

使用与cert1签署的IPA进行测试,以便在配置配置文件中未添加设备的情况下提交应用商店。导致使用企业帐户和移动调配配置文件签署的新IPA用于内部部署(移动调配配置文件嵌入到IPA中)。

解决方案:

解压缩IPA

代码语言:javascript
复制
unzip Application.ipa

删除旧的CodeSignature

代码语言:javascript
复制
rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true

替换嵌入式移动配置文件

代码语言:javascript
复制
cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"

重新签名

代码语言:javascript
复制
/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"

重新打包

代码语言:javascript
复制
zip -qr "Application.resigned.ipa" Payload

编辑:删除了授权部分(请参阅小巷评论,谢谢)

票数 218
EN

Stack Overflow用户

发布于 2016-05-12 04:37:25

这个问题的答案有点过时,并且缺少潜在的关键步骤,所以这是从外部开发人员那里安装应用程序的更新指南。

-如何给iOS应用重新签名-

假设您从另一个开发人员那里收到一个应用程序(例如MyApp.ipa),并且您希望能够在您的设备上安装和运行它(例如,通过使用ideviceinstaller )。

准备新的签约资产

第一步是获取配置配置文件,其中包括您希望安装和运行的所有设备。确保配置文件包含您在密钥链访问中安装的证书(例如,iPhone开发人员:某个主体(XXXXXXXXXX) )。下载配置文件(MyProfile.mobileprovision),以便替换应用程序中嵌入的配置文件。

接下来,我们将准备一个授权文件以包含在签名中。打开您的终端并运行以下命令。

代码语言:javascript
复制
$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist

这将创建一个描述您的配给配置文件的xml文件。接下来,我们希望将授权提取到一个文件中。

代码语言:javascript
复制
$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist

替换配置文件并退出应用程序

如果您正在使用.ipa文件,请首先解压缩应用程序(如果您使用的是.app,则可以跳过此步骤)。

代码语言:javascript
复制
$ unzip MyApp.ipa

您的工作目录现在将包含Payload/Payload/MyApp.app/。接下来,删除旧的代码签名文件。

代码语言:javascript
复制
$ rm -rf Payload/MyApp.app/_CodeSignature

用您自己的配置文件替换现有的配置文件(即embedded.mobileprovision)。

代码语言:javascript
复制
$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision

重要提示:您还必须放弃应用程序中包含的所有框架。您可以在Payload/MyApp.app/Frameworks中找到这些。如果应用程序是用Swift编写的,或者如果它包含任何其他框架,则必须提交这些框架,否则应用程序将安装但不会运行。

代码语言:javascript
复制
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*

现在使用您的预配配置文件中包含的证书和您之前创建的entitlements.plist对应用程序进行签名。

代码语言:javascript
复制
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app

您现在可以重新压缩该应用程序。

代码语言:javascript
复制
$ zip -qr MyApp-resigned.ipa Payload

Done

您现在可以删除Payload目录,因为您有原始应用程序(MyApp.ipa)和重新签名的版本(MyApp-resigned.ipa)。现在,您可以在预配配置文件中包含的任何设备上安装MyApp-resigned.ipa。

票数 57
EN

Stack Overflow用户

发布于 2019-06-03 19:56:10

我认为最简单的方法是使用Fastlane:

代码语言:javascript
复制
sudo gem install fastlane -NV
hash -r # for bash
rehash # for zsh
fastlane sigh resign ./path/app.ipa --signing_identity "Apple Distribution: Company Name" -p "my.mobileprovision"
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6896029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档