手动签名和压缩的 iOS 应用程序不会上传到 App Store
Posted
技术标签:
【中文标题】手动签名和压缩的 iOS 应用程序不会上传到 App Store【英文标题】:iOS app manually signed and zipped does not upload to App Store 【发布时间】:2015-11-02 13:41:25 【问题描述】:我这几天一直在苦苦挣扎……
我有一个在 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”时,我得到一个带有 3 个子文件夹的“somename”文件夹:Payload、SwiftSupport、Symbols。 我跑了: codesign --force --verbose --sign 'iPhone Distribution: certificate' appname.app/
然后: codesign --force --verbose --sign 'iPhone Distribution: certificate' appname.app/Frameworks/*
生成的 CodeResources 文件看起来与以前完全相同。所以我反过来做了——先签署框架,然后签署应用程序。这次我得到了一个 CodeResources 文件,其中框架文件的哈希值不同,其余文件的哈希值与以前相同。
现在,我压缩了“somename”文件夹并将扩展名从“.zip”更改为“.ipa”。请注意,它仍然具有相同的结构。
现在,当客户尝试上传时,他们会得到以下答案: “提交错误:此版本未通过自动验证 致命错误: - 应用程序目录结构应该是 Payload/appname.app/"
.ipa 确实包含该目录,我检查了两倍和三倍,以及(新的)Swift ***目录和符号文件目录。
不知道该去哪里...
【问题讨论】:
【参考方案1】:我正在使用以下脚本命令以新条款退出申请:
#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 - 新的配置文件
【讨论】:
谢谢!我只想用相同的证书重新签名,所以我认为我不需要更改配置文件 - 你怎么看?另外,从你的最后一行来看,你的应用程序可能是 obj-c 而不是 swift? 嗯,只能用新证书重唱?当您生成配置文件时,您必须设置分发证书。如果您尝试使用其他证书唱歌 - 应该会发生错误。我将此脚本用于 objC 和 Swift 项目。 关于 libswiftCore.dylib 崩溃 - 嵌入式框架可能会帮助您,请查找详细信息here 谢谢。我正在使用相同的证书重新签名。我推断你有 obj-c 只是因为你只压缩了 Payload 文件夹 - swift 项目有另一个文件夹。 您好,您找到解决方案了吗?我有完全相同的问题。我辞职了一个 .ipa(工作正常),但是当我运行该应用程序时,它崩溃了,因为它无法加载libswiftCore.dylib
以上是关于手动签名和压缩的 iOS 应用程序不会上传到 App Store的主要内容,如果未能解决你的问题,请参考以下文章
ap-south-1区域的AWS SignatureDoesNotMatch错误
无法通过 fastlane 使用 Google Play 应用签名将 android 包上传到 Google Play
由于缺少JAR签名,Android Studio不会让我上传APK