美文网首页iOS
解决AppStore Guideline2.5.2&2.3.1审

解决AppStore Guideline2.5.2&2.3.1审

作者: bo_song | 来源:发表于2019-05-20 15:53 被阅读0次

    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的审核。

    相关文章

      网友评论

        本文标题:解决AppStore Guideline2.5.2&2.3.1审

        本文链接:https://www.haomeiwen.com/subject/etpkzqtx.html