• Xcode 运行时配置


    有时候,我们的app在测试时需要连接到一个testing服务器,在打包为企业证书的app时又需要连接到另一个ad hoc 服务器,或者我们想企业证书打包的app和debug模式打包的app有不同的APP Bundle Identifier,以在一个测试机上同时安装....等等这些与App开发没有实际连接的需求,如果我们手动改,非常麻烦,如果分工程管理更麻烦。

    下面介绍一些Xcode中的运行时配置,希望有所启发:

    一个很好地实现上面的需求的方式是使用build configuration 构建配置和C 宏定义,这避免了为不同的配置创建不同的target。首先你需要在工程级别开始配置:

    可以看到,上面有三个配置:Debug,Release,adhoc。而且,前面两个配置里都有两个xcconfig文件:

    这些xcconfig文件内容类似这样:

    接下来,您可以将被传递到编译器的每个配置定义了一些宏标志。然后,您可以在编译时检查这些标志。在target级别中找到"Preprocessor flags"(在Xcode 6中是"Preprocessor Macros")构建设置,你可以在这里定义 KEY=VALUE 或者 只是 KEY 形式的宏定义:

    在你的代码中,你可以检查这些宏定义是否存在,例如:

    你也可以传入字符串类型,只不过必须用单引号括起来:

    DEFAULT_LOCALIZATION_NAME='@"en"'
    

    你也可以使用Schemes 编辑器,为Debug 和Archive时指定不同的配置:

    如果你需要在Info.plist 文件里使用自定义的参数,你可以添加一个自定义的构建设置:

    然后对不同的配置,设置合适的值:

    然后,你在Info.plist文件中,就可以使用这个自定义的参数:

    甚至,我们在命令行下构建项目时,还可以直接设置这个参数的值:

    xcodebuild …  BUNDLE_ID_SUFFIX=justTest build
    

    自动根据当前git项目的提交次数来在构建时,修改Info.plist的构建版本号

    首先创建一个shell 脚本 buildNumber.sh ,主要是获取当前git项目的提交次数,作为build version,修改Info.plist文件对应的build verison:

    #!/bin/sh
    
    git=`sh /etc/profile; which git`
    build_num=`"$git" rev-list --all |wc -l`
    branch=`"$git" rev-parse --abbrev-ref HEAD`
    commit=`"$git" rev-parse --short HEAD`
    version=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}"`
    
    if [ $CONFIGURATION = "Debug" ]; then
      /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_num-$branch" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
    else
      /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build_num" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
    fi
    echo "Updated ${TARGET_BUILD_DIR}/${INFOPLIST_PATH}"
    

    然后在 target级别中,在Build Phases菜单的最后面添加一个shell:

    指定这个shell的文件路径:

    注意,修改的这个Info.plist文件不会影响工程目录下的Info.plist文件,因为修改的是构建目录下的app里面的Info.plist,例如,我这里修改的是 ./Build/Products/Debug-iphonesimulator/yooke.app/Info.plist

    参考:

    整合上面实践的开源项目:

  • 相关阅读:
    oracle 分页sql
    Oracle 11g数据库详细安装步骤图解
    轻量级ORM框架——第二篇:Dapper中的一些复杂操作和inner join应该注意的坑
    轻量级ORM框架——第一篇:Dapper快速学习
    MY SQL 两种安装方式
    在本地库不连接远远程库的情况下操作远程库-----sql server
    学习Java泛型(记得通配符)
    学习java泛型(还是集合)
    学习java011902迭代器
    学习Java-继续集合
  • 原文地址:https://www.cnblogs.com/YungMing/p/4050132.html
Copyright © 2020-2023  润新知