记录xcode打包发布uniapp项目遇到的问题

794 阅读2分钟

使用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的。 image.png image.png 6、打包到app store(testflight),又遇到如下这两个动态库是x86的,编译报错 image.png 在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的证书、还有什么描述文件乱七八糟的一堆。