使用hbuilder开发app后需要android和ios打包发布,android以前做过所以比较容易。这次被安排打包ios,所以特别记录下打包的大致过程,大多网上可以找到,主要记录下比较少见的问题。
xcode版本:Version 14.3.1 (14E300c),补下版本,后续版本可能就没有这些问题了。
1、首先下载uniapp的ios打包sdk nativesupport.dcloud.net.cn/AppDocs/dow… 只有
最新的版本,需要hbuilder也是对应的版本
2、hbuilder打包本地资源就不多说了,拷到xcode项目中,比较容易,官网都有说明
3、填写bundle id、ios版本、权限描述(用到什么就填什么)、还有申请的各种key等等,我这里遇到选择launch screen file后反而进不去,后来我这里就不选了,在Launch screen interface file base name中指定,不能带拓展名。
4、对照着模块列表添加依赖包,资源文件、还有权限描述。nativesupport.dcloud.net.cn/AppDocs/use…
5、上面的都搞定后应该就能运行了。我这遇到模拟器运行成功后在真机上无法运行,网上有很多解决方法,说build phases里灰掉的引用给去掉,但我这边其其实引用都是正常的。最后问题好像是模拟器是x86的,而真机是arm64的。
6、打包到app store(testflight),又遇到如下这两个动态库是x86的,编译报错
在build phases添加run script,添加如下脚本:
APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"
# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
EXTRACTED_ARCHS=()
for ARCH in $ARCHS
do
echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
done
echo "Merging extracted architectures: ${ARCHS}"
lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
rm "${EXTRACTED_ARCHS[@]}"
echo "Replacing original executable with thinned version"
rm "$FRAMEWORK_EXECUTABLE_PATH"
mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done
7、打包成功后,在官网的testflight中构建版本出现一会儿后莫名消失了,百度后发现是有权限未在info.plist中声明,或者删除多余的依赖包,这个具体提示信息会发送到邮箱中,可惜我们的是老板的邮箱,不可能一直问老板,最后在用户中添加一个管理权限的账号,邮件也会发送到这个管理账号,然后根据邮件的提示补充权限声明就行了。
最后说一点最重要的,xcode真tm难用,最难用的ide,没有之一,然后各种hoc的证书、store的证书、p12的证书、还有什么描述文件乱七八糟的一堆。