手动签名和压缩的iOS应用程序不会上传到App Store

时间:2015-11-02 13:41:25

标签: ios xcode app-store ipa codesign

我现在已经挣扎了几天......

我有一个在AdHoc中运行良好的应用程序,现在我正在向客户提供.ipa,以便上传到他们的私人商店。

我使用XCode6.4和Swift,并通过xCode存档。

在第一次尝试期间,应用程序因为以下日志而崩溃:

Library not loaded: @rpath/libswiftCore.dylib
Referenced from:  /private/var/mobile/Containers/Bundle/Application/F223C4F8-4CBA-4474-9809-79D80C5AB11F/appname.app/appname
Reason: no suitable image found.  Did find:
/private/var/mobile/Containers/Bundle/Application/F223C4F8-4CBA-4474-9809-79D80C5AB11F/appname.app/Frameworks/libswiftCore.dylib: code signature invalid for '/private/var/mobile/Containers/Bundle/Application/F223C4F8-4CBA-4474-9809-79D80C5AB11F/appname.app/Frameworks/libswiftCore.dylib'
Dyld Version: 353.12

经过多次尝试修复此问题后,我尝试手动签署该应用。 解压缩" somename.ipa"我得到一个" somename"包含3个子文件夹的文件夹:Payload,SwiftSupport,Symbols。 我跑了:     codesign --force --verbose --sign' iPhone发行版:证书' appname.app /

然后:     codesign --force --verbose --sign' iPhone发行版:证书' appname.app/Frameworks / *

生成的CodeResources文件看起来和以前完全一样。所以我反过来做了 - 首先签署框架,然后签署应用程序。这次我得到了一个CodeResources文件,该文件对于框架文件具有不同的哈希值,并且与其他文件一样具有相同的哈希值。

现在,我压缩了#34; somename"文件夹并更改了扩展名" .zip"到" .ipa"。请注意,它仍然具有相同的结构。

现在,当客户尝试上传时,他们会得到以下答案: "提交错误:此版本未通过自动验证 致命错误: - 应用程序目录结构应为Payload / appname.app /"

.ipa确实包含了该目录,我检查了两倍和三倍,以及(新)Swift顶级目录和符号文件目录。

不知道该怎么做......

1 个答案:

答案 0 :(得分:0)

我正在使用以下脚本命令将应用程序重新签名:

#Pulls the entitlements out of the provision profile
/usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i $PROVISION_PATH/$ADHOC_PROVISION) > entitlements.plist

#Remove old CodeSignature
rm -rf Payload/$1.app/_CodeSignature Payload/$1.app/CodeResources

# Replace embedded mobile provisioning profile
cp $PROVISION_PATH/$ADHOC_PROVISION Payload/$1.app/embedded.mobileprovision

# Re-sign
/usr/bin/codesign --verify -f --sign "iphone distribution" --resource-rules=Payload/$1.app/ResourceRules.plist --entitlements entitlements.plist Payload/$1.app

# Re-package
zip -qr $1.adhoc.ipa Payload

其中

$ 1 - 申请名称

$ PROVISION_PATH / $ ADHOC_PROVISION - 新配置文件