1

CI サーバーについては、TeamCity と Jenkins を検討しています。

私の目標は次のとおりです。誰かがリポジトリに変更をコミットするたびに、CI サーバーはプロジェクト内のすべてのターゲットを .ipa としてビルドし、デバイスにダウンロード/インストールできるようにします。

Mac mini をビルド スレーブとして使用して、Teamcity と Jenkins を起動して実行しました。その部分はうまく機能しています。

Jenkins XCode プラグインを使用して、すべてのターゲットを .ipa としてビルドすることに成功しました。Teamcity でこんなに運が良かったことはありません。XCode プラグインでは、すべてのターゲットをビルドすることはできません。むしろ、各ビルド構成で、ビルドするターゲットを指定する必要があります。Teamcity のメーカーにアプローチしたところ、目標を達成するために、メタ ランナーと多くの複製を含む複雑な方法を教えてくれました。

プラグインに頼る代わりに、シェル スクリプトを使用して .ipa をビルドしたいと思います。しかし、私はスクリプト忍者ではないので、これを行う方法がわかりません。

スクリプトを使用して 1 つのターゲットをビルドする方法を理解することはできますが、それらすべてをビルドする方法がわかりません。プロジェクトで新しいターゲットを作成するたびに、CI サーバーに追加する必要はありません。サーバーは、プロジェクト内のすべてのターゲットを自動的にビルドできる必要があります。

...多分誰かがより良い解決策を持っていますか? どんな助けでも大歓迎です。

4

1 に答える 1

1

すべきこと (コードは bash スクリプトのスニペットであり、OS X ですぐに実行できます。Xcode の CLI/コマンド ライン ツール以外は何もインストールする必要はありません):

  • リポジトリにあるすべての Xcode プロジェクト ファイルに対してこれを行う場合は、最初にこれらを検索する必要があります (特定の Xcode プロジェクトがある場合は、これをスキップできます)。

    for path in $(find . -type d -name '*.xcodeproj' -or -name '*.xcworkspace')
    

    行う

  • この後、Xcode のコマンド ライン ツールを使用して、すべての共有 (!) スキームを照会できます。

    if [[ "$project" == *".xcodeproj" ]]; then
      xcodebuild_output=($(xcodebuild -list -project "$project"))
    else
      xcodebuild_output=($(xcodebuild -list -workspace "$project"))
    fi
    
  • これですべてのスキームが揃ったので、それらを 1 つずつ xcodebuild するだけで済みます。

リポジトリ内のすべての Xcode プロジェクトとすべてのスキーム構成を検索するために開発した bash スクリプトを次に示します

注: xcodebuild (Xcode のコマンド ライン インターフェイス) にスキームを一覧表示するには、スキームを共有としてマークする必要があります。

于 2014-07-03T08:59:09.610 に答える