【问题标题】:Batch Build and Archive of iOS apps via Terminal通过终端批量构建和归档 iOS 应用程序
【发布时间】:2012-07-16 14:45:00
【问题描述】:

我正在尝试简化 iOS 应用发布的构建->存档->提交过程。 我们有 50 多个移动应用程序,它们具有几乎相同的框架,但具有不同的插图和配置设置。

我通常会在 xcode 4.2 中加载每个项目并使用 xcode GUI 以通常的方式构建->存档->提交,但是我们现在有超过 50 个应用程序,每当我们推出更新时,这个过程都非常烦人。

话虽如此,我正在尝试使用 shell 函数来加快这个过程。 我做了很多研究,发现xcodebuild(参见 Reid 的回答)应该可以工作,但是存档选项不起作用,因为我收到以下错误:

unsupported build action 'archive'

所以我写了以下内容:

# $1 should be a date like: 2012-07-17
# $2 should be a time like: 10.31AM
# $mybase will be the current directory at the time the function was called
# so make sure to cd into the folder containing the xcode project folders first

function xcodeArchive {
    mkdir ~/Library/Developer/Xcode/Archives/$1
    mybase=$PWD
    for x in `ls`
    do
        mkdir ~/Library/Developer/Xcode/Archives/$1/$x
        mkdir ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs
        mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products
        mkdir ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications
        cd $mybase/$x
        xcodebuild
        #read -p "Press [Enter] to continue"
        cd $mybase/$x
        cp $x/$x-Info.plist ~/Library/Developer/Xcode/Archives/$1/$x/Info.plist
        cp -r build/Release-iphoneos/$x.app.dSYM ~/Library/Developer/Xcode/Archives/$1/$x/dSYMs/$x.app.dSYM
        cp -r build/Release-iphoneos/$x.app ~/Library/Developer/Xcode/Archives/$1/$x/Products/Applications/$x.app
        cd ~/Library/Developer/Xcode/Archives/$1/
        mv $x $x\ $1\ $2.xcarchive
        cd $mybase
    done
}
export -f xcodeArchive

我把它放在我的 .bash_profile 中,一切正常运行,除了我没有复制正确的“Info.plist”,我不知道从哪里复制它或如何生成它。所以现在我被卡住了。

Xcode 会识别档案,但它会将它们列在管理器中的“Unknown Schema”和“Unnamed Archive”下。

非常感谢任何有关现在获取正确 Info.plist 的帮助。

我也欢迎有关如何改进脚本和/或更有效地批量构建+归档这些 iOS 应用程序的建议。

注意:

  • 我无法升级到 Xcode 4.2 以上,因为这需要(据我了解)OS X 10.7+,但我还无法获得(公司计算机)。

  • 我仍然是一个 bash/shell 新手,所以对于上面的任何丑陋代码/做法,我深表歉意。

  • 另外,这是用于提交官方应用程序,而不是用于临时或类似的东西。

再次感谢您的帮助。

【问题讨论】:

    标签: ios bash shell xcode4.2 .bash-profile


    【解决方案1】:

    我在使用存档命令时遇到了同样的问题,并通过 Google 找到了这个问题。使用此构建命令会失败:

    xcodebuild -verbose -project $ProductName.xcodeproj -target $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}"
    

    然而,使用这个构建命令它会成功:

    xcodebuild -verbose -project $ProductName.xcodeproj -scheme $ProductName -configuration Release -sdk $SDK clean archive CONFIGURATION_BUILD_DIR="$PROJECT_PATH/build" PROVISIONING_PROFILE="${DIST_PROVISONING_PROFILE}"
    

    唯一的区别是指定方案来代替要构建的目标。如果这种行为有合理的理由,我很乐意听到。

    我在 Mac OS X 10.7.5 上运行 XCode 4.5.1

    【讨论】:

    • 确实,这也是我的发现。我仍然没有找到对此的解释,但我的假设是,这只是该程序的设计执行方式,需要一个方案......但这并不能解释为什么返回的错误消息如此模糊......跨度>
    • @mason81 尤其令人困惑的是,如果您只是在构建而不是尝试存档该构建以供商店提交,那么 top 命令(失败)就可以正常工作。跨度>
    • 哦,这确实令人困惑(而且非常有趣)。我没有出于非存档目的尝试过它,但只是对其进行了测试,你是对的,它工作得很好......多么奇怪!
    【解决方案2】:

    好的,我找到了一个可行的解决方案。在做了更多的搜索和大量的猜测和检查之后,我发现我仍然可以使用 xcodebuild 的“归档”选项,我只需要指定一个工作区和方案,显然我以前没有正确地这样做,因为它现在有效。

    因此,对于正在寻找类似解决方案(批量归档 xcode 项目)的任何人,这是我的功能:

    # $mybase will be the current directory at the time the function was called
    # so make sure to cd into the folder containing the xcode project folders first
    
    function xcodeArchive {
        mybase=$PWD
        for x in `ls`
        do
            cd $mybase/$x
            xcodebuild -workspace $x.xcodeproj/project.xcworkspace -scheme $x archive
            cd $mybase
        done
    }
    export -f xcodeArchive
    

    【讨论】:

      猜你喜欢
      • 2011-10-16
      • 1970-01-01
      • 2014-04-25
      • 1970-01-01
      • 1970-01-01
      • 2013-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多