重新签署IPA(iPhone)
我目前使用xcodebuild和xcrun构build所有我的应用程序与哈德森没有任何问题
我收到了来自不同人的几个IPA文件,我想用企业帐户而不是公司帐户(对于应用程序商店,或者有时临时分发)重新签名。
我的问题是,当我尝试辞职的应用程序,它不会安装在我的设备(它应该,因为它是一个企业版本)。 错误信息在设备上(不在iTunes中),它告诉我,它不能安装应用程序。 没有更多的信息给出。
我发现了一些信息,( http://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-上传/ )
这可能是可能的。 我面临的问题是,它似乎没有embedded移动configurationconfiguration文件,因为我用我的正常版本(使用xcrun)这样做可以使用codesign工具进行控制,或者是否可以用xcrun重新签名?
用我现在的辞职脚本
- 解压缩app.ipa
- appname = $(ls Payload)
- xcrun -sdk iphoneos PackageApplication -s“$ provisioning_profile”“$ project_dir / Payload / $ appname”-o“$ project_dir / app-resigned.ipa”–sign“$ provisioning_profile”–embed“$ mobileprovision”
我查看了生成的ipa文件,它看起来和原来的应用非常相似。 哪些文件应该在这里真正改变? 我最初认为_CodeSignature / CodeResources会改变,但内容看起来几乎完全一样。
指针非常感谢。
终于得到了这个工作!
使用cert1签署的IPA进行testing,以提交configuration文件中未添加任何设备。 导致使用企业帐户签署的新IPA和内部部署的移动configuration文件(移动configuration文件embedded到IPA中)。
解:
解压IPA
unzip Application.ipa
删除旧的CodeSignature
rm -r "Payload/Application.app/_CodeSignature" "Payload/Application.app/CodeResources" 2> /dev/null | true
replaceembedded式移动设置configuration文件
cp "MyEnterprise.mobileprovision" "Payload/Application.app/embedded.mobileprovision"
辞职
/usr/bin/codesign -f -s "iPhone Distribution: Certificate Name" --resource-rules "Payload/Application.app/ResourceRules.plist" "Payload/Application.app"
重新包装
zip -qr "Application.resigned.ipa" Payload
编辑:删除权利的一部分(见胡同评论,谢谢)
这个问题的答案有点过时了,并且漏掉了潜在的关键步骤,所以这是一个从外部开发者安装应用程序的更新指南。
—–如何辞职一个iOS应用程序—–
假设您从另一位开发人员那里收到一个应用程序(例如MyApp.ipa),并希望能够在您的设备上安装并运行它(例如使用ideviceinstaller )。
准备新的签名资产
第一步是获得configuration文件 ,其中包含您希望安装和运行的所有设备。 确保configuration文件包含您在钥匙串访问中安装的证书(例如iPhone Developer:Some Body(XXXXXXXXXX))。 下载configuration文件(MyProfile.mobileprovision),以便您可以replace应用程序中embedded的configuration文件。
接下来,我们将准备一个权利文件以包含在签名中。 打开您的terminal并运行以下。
$ security cms -D -i path/to/MyProfile.mobileprovision > provision.plist
这将创build一个描述您的configuration文件的XML文件。 接下来,我们要将权利提取到一个文件中。
$ /usr/libexec/PlistBuddy -x -c 'Print :Entitlements' provision.plist > entitlements.plist
replace供应configuration文件并退出应用程序
如果您正在使用.ipa文件,请首先解压缩应用程序(如果您有.app文件,则可以跳过此步骤)。
$ unzip MyApp.ipa
您的工作目录现在将包含Payload/
和Payload/MyApp.app/
。 接下来,删除旧的代码签名文件。
$ rm -rf Payload/MyApp.app/_CodeSignature
用你自己的replace现有的configuration文件(即embedded.mobileprovision)。
$ cp path/to/MyProfile.mobileprovision Payload/MyApp.app/embedded.mobileprovision
现在使用您的供应configuration文件中包含的证书和您之前创build的entitlements.plist签署该应用程序。
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app
重要提示:您还必须退出应用程序中包含的所有框架 。 你可以在Payload/MyApp.app/Frameworks
find它们。 如果应用程序是用Swift编写的,或者如果它包含任何额外的框架,则必须放弃这些框架,否则应用程序将安装但不能运行。
$ /usr/bin/codesign -f -s "iPhone Developer: Some Body (XXXXXXXXXX)" --entitlements entitlements.plist Payload/MyApp.app/Frameworks/*
您现在可以重新解压缩应用程序。
$ zip -qr MyApp-resigned.ipa Payload
完成
您现在可以删除Payload
目录,因为您有原始应用程序(MyApp.ipa)和您的退出版本(MyApp-resigned.ipa)。 您现在可以在供应configuration文件中包含的任何设备上安装MyApp-resigned.ipa。
我成功地遵循了这个答案,但是因为权利已经改变了,所以我简单地删除了--entitlements "Payload/Application.app/Entitlements.plist"
第二个语句中的--entitlements "Payload/Application.app/Entitlements.plist"
部分的--entitlements "Payload/Application.app/Entitlements.plist"
,它像一个魅力一样工作。
谢谢你,Erik,张贴这个。 这对我有效。 我想添加一个关于我需要的额外步骤的说明。 在“Payload / Application.app /”中有一个名为“ CACertChains ”的目录,其中包含一个名为“ cacert.pem ”的文件。 我不得不删除目录和.pem来完成这些步骤。 再次感谢! –
随着Fastlane叹息的辞职选项,你可以很容易地做到这一点。
sigh resign -p <path-to-profile-with-mobileprovision-ext> -i <code-sighning-identity-of-your-app>
您也可以在命令之前使用叹息来下载configuration文件。
这些辞职方式都没有为我工作,所以我不得不另外做一些工作。
就我而言,我有一个证书过期的IPA。 我可以重build应用程序,但是因为我们想确保我们发布的是完全相同的版本(只需要一个新的证书),所以我们不想重build它。
在其他答案中提到的辞职方式,我转向了Xcode创buildIPA的方法,该方法从构build的.xcarchive开始。
-
我复制了一个现有的.xcarchive并开始replace内容。 (我忽略了.dSYM文件。)
-
我从旧的IPA文件中提取旧的应用程序(通过解压缩;该应用程序是Payload文件夹中唯一的)
-
我把这个应用程序移到了新的.xcarchive下,在
Products/Applications
replace了那里的应用程序。 -
我编辑了
Info.plist
,编辑-
ApplicationProperties/ApplicationPath
-
ApplicationProperties/CFBundleIdentifier
-
ApplicationProperties/CFBundleShortVersionString
-
ApplicationProperties/CFBundleVersion
-
Name
-
-
我将.xcarchive移动到Xcode的存档文件夹中,通常是
/Users/xxxx/Library/Developer/Xcode/Archives
。 -
在Xcode中,我打开了组织者窗口,select了这个新的档案,并做了一个常规(在这种情况下,企业)出口。
结果是一个很好的IPA工作。
如果您的应用有扩展程序和/或手表应用程序,并且每个扩展程序/手表应用程序都有多个configurationconfiguration文件,则应使用此脚本来重新签署ipa文件。
在Github重新签名脚本
这里是一个如何使用这个脚本的例子:
./resign.sh YourApp.ipa "iPhone Distribution: YourCompanyOrDeveloperName" -p <path_to_provisioning_profile_for_app>.mobileprovision -p <path_to_provisioning_profile_for_watchkitextension>.mobileprovision -p <path_to_provisioning_profile_for_watchkitapp>.mobileprovision -p <path_to_provisioning_profile_for_todayextension>.mobileprovision resignedYourApp.ipa
您也可以通过添加其他-p选项来包含其他扩展configurationconfiguration文件。
对于我来说 – 所有的configuration文件都是由相同的证书/签名标识签名的。