前言
最近上架一个项目,在使用Transporter 上传IPA包的时候,遇到了 "ITMS-90426: Invalid Swift Support - The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it." 的错误,苹果官方提示,不要使用IPA包的方式进行上传,请直接使用Xcode 上传.
但是因为项目管理的原因,我本地并没有此项目的相关证书,无法直接使用Xcode 上传,因此采用了另外一种方式进行处理,现在记录一下处理的方式.
操作步骤
第一步:获取IPA中依赖的Swift包.
复制一个IPA包,改后缀名为 zip,然后进行解压缩,得到Payload文件夹.打开这个文件夹,可以看到APP的安装包,目录如下:
Payload
右键显示包内容,进入APP的资源目录,里面包含项目中的图片,bundle 等资源,找到 Frameworks 文件夹,查询所有的 swift 包,复制到一个文件夹,这里我把这个文件夹命名为 swift引用 .
第二步,创建一个 Xcode Swift dylib 文件夹,保存Xcode中获取的Swift dylib.
我们第一步获取的 swift 包和Xcode中的包有区别的,所以我们需要去Xcode中获取原始的 Swift dylib.
打开 iphoneos 目录
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos
在这个目录下,找到和 swift引用 文件夹中名字一致的swift 包,复制到 Xcode Swift dylib 文件夹.
PS: 这里我的Xcode版本是12.5 ,打开这个路径,发现并没有相关的包,研究后发现,需要对路径做一定的修改,路径中的swift需要更改swift-5.0,更改后的路径为:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.0/iphoneos
到这里,我们就准备好了生成 Swift Support 文件夹所需要的依赖包,下面我们进行生成操作.
第三步,在IPA包中生成 Swift Support 文件夹.
我们创建一个名为 Create Swift Support 的文件夹,把IPA包拷贝到此文件夹,把我们第一步得到的Payload文件夹,也拷贝到此文件夹.
在 Create Swift Support 创建一个文件夹,命名为 SwiftSupport的文件夹,打开这个文件夹.
继续在这个文件夹内创建名为 iphoneos 的文件夹,打开这个文件夹,把
"Xcode Swift dylib" 文件夹中的 Swift 包,复制到 iphoneos 文件夹下.
我们通过 终端,cd 到 Create Swift Support 文件夹,可以看到如下的目录:
***.ipa
Payload
SwiftSupport
下面我们进行最重要的两步操作: 删除 .DS_Store 文件,生成 SwiftSupport 文件.
我们在终端执行:
$ find . -type f | grep .DS_Store
可以看到类似如下的输出:
.DS_Store
./Payload/.DS_Store
./Swift Support/iphoneos/.DS_Store
删除所有输出的 .DS_Store文件,例如:
$ rm ./Payload/.DS_Store
删除完所有的.DS_Store文件后,我们就可以在IPA中生成 Swift Support 文件夹了:
$ zip -r ***.ipa Payload SwiftSupport
等命令执行完之后,我们就得到了我们需要的包含 SwiftSupport 文件夹的IPA包.
验证
最后,我们验证一下:
复制 Create Swift Support 文件夹下的IPA包到桌面,更改后缀名为.zip,双击,解压缩,得到 Payload 文件夹.
打开Payload 文件夹,可以看到如下目录:
Payload
SwiftSupport
其中 SwiftSupport -> iphoneos 文件夹与 Payload 中的 Frameworks 文件夹下的swift包 一致.
至此,IPA包处理完成,继续上传即可.