我需要找到一种使黑匣子重新工作的方法,最好是不需要在辞职期间替换虚拟AppStore分发证书。
背景说明:
我们有一个设置,其中另一个部门可以执行辞职工作,该工作可以接收IPA,并使用其自己的证书和置备配置文件将其辞职,并设置适当的捆绑包标识符。
此辞职工作的输入.ipa文件以前是使用 app-store 导出方法以及另一个AppStore分发证书和相应的配置文件构建的。这样就可以毫无问题地上传输出的.ipa文件。
在执行辞职替换证书时,是否有可能完全为 enterprise 导出方法构建置备配置文件和捆绑包标识符,并且是否只要替换掉他们就辞职了?< / strong>
尝试将已签名的.ipa文件上传到AppStore时会出错。
ITMS-90426:无效的Swift支持-SwiftSupport文件夹丢失。使用当前的Xcode公共(GM)版本重建您的应用,然后重新提交。
我认为这是由于导出方法所致,因为其余的构建配置是相同的(尽管使用了适当的证书和配置文件) 尝试使用企业证书进行初始签名的原因是,输入开发人员程序应已淘汰。
答案 0 :(得分:1)
我创建了一个脚本,该脚本会将SwiftSupport
文件夹添加到丢失的.ipa
文件夹(即为企业发行版生成的文件夹):
#!/bin/bash
for ARGUMENT in "$@"
do
KEY=$(echo $ARGUMENT | cut -f1 -d=)
VALUE=$(echo $ARGUMENT | cut -f2 -d=)
case "$KEY" in
ipa_path) ipaPath=${VALUE} ;; # Format: "Path/to/app.ipa"
archive_path) archivePath=${VALUE} ;; # Format: "Path/to/app.xcarchive"
toolchain_path) toolchainPath=${VALUE} ;; # Format: "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos"
*)
esac
done
# Derived Variables
ipaDirectory=$(dirname "$ipaPath")
ipaName=$(basename "$ipaPath")
zipName=${ipaName/.ipa/.zip}
appName=${ipaName/.ipa/}
zipSuffix=-unzipped
unzippedDirectoryName=${appName}${zipSuffix}
newIpaSuffix=-with-swift-support
newIpaName=${appName}${newIpaSuffix}
swiftSupportPath=SwiftSupport/iphoneos
ipaSwiftSupportDirectory=${ipaDirectory}/${unzippedDirectoryName}/${swiftSupportPath}
# Changes the .ipa file extension to .zip and unzips it
function unzipIPA {
mv "${ipaDirectory}/${ipaName}" "${ipaDirectory}/${zipName}"
unzip "${ipaDirectory}/${zipName}" -d "${ipaDirectory}/${unzippedDirectoryName}"
}
# Copies the SwiftSupport folder from the .xcarchive into the .ipa
function copySwiftSupportFromArchiveIntoIPA {
mkdir -p "$ipaSwiftSupportDirectory"
cd "${archivePath}/${swiftSupportPath}"
for file in *.dylib; do
cp "$file" "$ipaSwiftSupportDirectory"
done
}
# Creates the SwiftSupport folder from the Xcode toolchain and copies it into the .ipa
function copySwiftSupportFromToolchainIntoIPA {
mkdir -p "$ipaSwiftSupportDirectory"
cd "${ipaDirectory}/${unzippedDirectoryName}/Payload/${appName}.app/Frameworks"
for file in *.dylib; do
cp "${toolchainPath}/${file}" "$ipaSwiftSupportDirectory"
done
}
# Adds the SwiftSupport folder from one of two sources depending on the presence of an .xcarchive
function addSwiftSupportFolder {
if [ -z "$archivePath" ]
then
copySwiftSupportFromToolchainIntoIPA
else
copySwiftSupportFromArchiveIntoIPA
fi
}
# Zips the new folder back up and changes the extension to .ipa
function createAppStoreIPA {
cd "${ipaDirectory}/${unzippedDirectoryName}"
zip -r "${ipaDirectory}/${newIpaName}.zip" ./*
mv "${ipaDirectory}/${newIpaName}.zip" "${ipaDirectory}/${newIpaName}.ipa"
}
# Renames original .ipa and deletes the unzipped folder
function cleanUp {
mv "${ipaDirectory}/${zipName}" "${ipaDirectory}/${ipaName}"
rm -r "${ipaDirectory}/${unzippedDirectoryName}"
}
# Execute Steps
unzipIPA
addSwiftSupportFolder
createAppStoreIPA
cleanUp
它也可以作为要点:https://gist.github.com/adamzarn/6bb89d91ed4b8c3d3fb25363c221441f
用法:
chmod +x path/to/script
path/to/script ipa_path="path/to/ipa" archive_path="path/to/xcarchive"
path/to/script ipa_path="path/to/ipa" toolchain_path="path/to/toolchain"
如果您有权访问生成.xcarchive
的{{1}},则脚本将从那里获取.ipa
文件夹。否则,它将通过查看SwiftSupport
文件来确定需要哪个.dylib
文件,然后从Xcode工具链中生成一个.app
文件夹。
如果使用的是Xcode工具链,请确保提供的路径包含SwiftSupport
文件列表。这是一个示例路径:
.dylib
对于Xcode 10,该路径包含一个/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos
文件夹,但是对于Xcode 11,则必须使用swift
。
我已经对此进行了测试,它可以成功解决Apple在App Store中分发时引发的Invalid Swift Support错误,而没有任何负面影响。
答案 1 :(得分:0)
当您的二进制缺少swift支持文件夹时,会出现此错误。当我尝试为iOS构建Chrome应用程序时遇到了相同的错误。解决方案并不容易,您需要自己嵌入文件夹。首先,您需要检查您在第三方中使用的Swift库,例如libxswiftCore.dylib
在该文件夹下创建名称为 SwiftSupport 的文件夹,创建 iphoneos 文件夹,将所有必需的dylib文件放入该文件夹中,确保这些dylib文件应由全球苹果公司签署证书,而不是您自己的证书。之后,再创建一个文件夹Payload并将您的.app文件放入其中。确保SwiftSupport和Payload应该在同一层次结构上。确保您的zip文件中不应包含.DS_Store文件,请删除这些文件。我为此工作创建了一个脚本,但是为该公司财产创建了一个脚本,请让我知道这是否仍然无法解决。或者您可以给我写电子邮件。 mshauket.developer@gmail.com