iOS

解决AppStore Guideline2.5.2&2.3.1审

2019-05-20  本文已影响0人  bo_song

1.AppStore 审核被拒

最近在提交app新版本到appstore进行审核,收到了审核人员2.5.2与2.3.1的大礼包,app审核没有通过。


tmp2b351424.png

2.分析

2.1.网上搜索遇到同样问题的网友,发现基本上所有网友会遇到2.5.2与2.3.1问题同时出现的情况。主要问题在于苹果认为你违反了2.5.2规则,有热更新的倾向。苹果不允许非教育类app程序有热更新功能。
2.2.有的网友违反2.5.2规则,苹果审核解决中心的邮件会回复具体问题: This includes any code which passes arbitrary parameters to dynamic methods such as dlopen(), dlsym(), respondsToSelector:, performSelector:, method_exchangeImplementations(), and running remote scripts in order to change app behavior and/or call SPI, based on the contents of the downloaded script。
2.3. 具体原因是: 程序代码或第三方库中使用了dlopen(), dlsym()高危方法做动态加载功能, 或者使用respondsToSelector:, performSelector:, method_exchangeImplementations()相关函数去调用或替换系统私有api,不被允许(备注:正常使用 respondsToSelector:, performSelector:, method_exchangeImplementations()不会有问题)。

3.使用nm 命令查找相关符号

通过 shell 脚本查找符号,执行脚本,输入工程地址。
脚本源码如下:

#!/bin/bash

# 定义用到的变量
project_path=""

# 定义读取输入字符的函数
function getProjectPath() {
    # 输出换行,方便查看
    echo "================================================"
    # 监听输入并且赋值给变量
    read -p " Enter project path: " project_path
    # 如果为空值,从新监听
    if test -z "$project_path"; then
        getProjectPath
    else
        read_dir ${project_path}
    fi
}

function read_dir(){
    for file in `ls $1`       #注意此处这是两个反引号,表示运行系统命令
    do
        if [ -d $1"/"$file ]  #注意此处之间一定要加上空格,否则会报错
        then
            read_dir $1"/"$file
        else
            #在此处处理文件即可
            file_path="$1/$file"
            if `file ${file_path} | grep -q 'Mach-O'` ; then
                find_world=$(echo `nm -u ${file_path} | grep -E 'dlopen|method_exchangeImplementations|performSelector|respondsToSelector|dlsym'`)
                # -n 字符串    字符串的长度不为零则为真
                if [ -n "$find_world" ] ; then
                    echo '-----------------------------\n'
                    echo ${file_path}
                    echo '包含字段:'
                    echo ${find_world}
                    echo '\n'
                fi
            fi
        fi
    done
}   

#读取第一个参数
getProjectPath

echo "------- end processing -------"

#作者:iHTCboy
#链接:https://www.jianshu.com/p/da0bf326c2fc
#来源:简书
#简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

发现问题

执行脚本 输入工程目录后 发现主要是一些第三方库(友盟统计科大讯飞openssl)中含有相关违规符号

回复appstore审核人员

执行脚本如果发现只是一些第三方库使用了相关函数,你可以回复appstore审核人员 说明具体情况,审核人员有可能会让你通过,有可能要你修复相关问题,升级第三方库重新提交版本。在我们这次与审核人员的沟通中,我们列出了出问题的第三库和官网,并且说明程序没有使用热更新相关功能,最后通过了审核。


tmp72a098de.png tmp5faaefbb.png

后续

虽然通过与审核人员的沟通,通过了appstore的审核,但不能保证以后不会被拒。开发者应该在后续版本中升级相关第三方库来修复此问题。很多第三方库旧版本含有热更新功能,新版本一般会通过去除热更新或混淆代码的方式来通过appstore的审核。

上一篇下一篇

猜你喜欢

热点阅读