ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
Xcodeのおける高度なプロジェクト設定
より複雑なXcodeプロジェクトを扱っていますか? そうした場合に最適な機能があります。複数のAppleプラットフォーム用にビルドするためにプロジェクトを設定する方法、プラットフォームごとにコンテンツをフィルタリングする方法、カスタムビルドルールやファイル依存関係の作成方法などを紹介します。マルチプラットフォームのフレームワークターゲット、プロジェクトとスキームの構成を最適化する方法、構成設定ファイルの効果的な利用方法などを詳しく説明します。 パラレルビルド、暗黙の依存関係、スクリプトフェーズ、カスタムビルドルール、入出力ファイルの依存関係の設定、ビルドフェーズのファイルリスト、アグリゲートターゲットによる作業の重複排除など、スキームの設定について説明します。最後に、ビルド設定エディタ、レベルの仕組み、構成設定ファイルの構文についてもお伝えします。
リソース
関連ビデオ
WWDC21
-
ダウンロード
♪ (Xcodeにおける 高度なプロジェクト設定) ようこそ "Xcodeにおける 高度なプロジェクト設定" へ 私はJakeです 同僚のPrachiと一緒に Xcodeプロジェクトの ビルド構成のほとんどを作成する 戦略とテクニックについて 議論しましょう 3つの主要なトピック領域を 取り扱います まず PrachiがMultiplatformプロジェクトと Multiplatformフレームワーク ターゲットに対するXcode 13の 新サポートを説明します 次に モデリングと スキーム ターゲットの設定と 依存関係 の管理 そしてビルドフェーズとルールを 介してプロジェクトの構成成功 事例について説明します 最後にPrachiはさらにビルド設定を 深く掘り下げていきます ここでは以下の 構造と動作について説明します プロジェクトエディタのUI 構成設定ファイルとその構文 そしてもっとたくさんです! このトークを通して 私たちは Frutaと呼ばれるMultiPlatform Appプロジェクトを使用し この手法が実際のプロジェクトに どのように適用されるかを示します ここで Prachiに渡しましょう MultiPlatformフレームワークに ついて説明してくれます Prachi Pai Asnodkar: ありがとう Jake Xcode 13の新機能の1つは MultiPlatformフレームワークの サポートです MultiPlatformフレームワークにより 複数のフレームワークを1つに 統合することが可能になります 簡素化されたターゲット 管理する1セットのビルドフェーズ 及び管理する1セットのビルド設定 を提供します Fruta Appを見てみましょう この機能を利用するように プロジェクトを更新します これがFruta Appです これはmacOS iOS watchOS用に 構築された MultiPlatform Appです また3つのフレームワーク ターゲットがあります Appにより使われる共有コードの セットを含むプラットフォーム毎に 1つずつです 3つの別々のフレームワークを 維持するためには 課題が伴う可能性があります ビルド設定の同期を維持することや コンパイルソースのビルドフェーズに すべてのソースファイルが 適切に追加されていること を確認することなどです これらの課題に取り組むために フレームワークの1つを MultiPlatformフレームワークに 変換することから始めます ここに1つのプラットフォーム ごとに3つの フレームワークがあります これらのターゲットは すべて同一です ただしmacOS上でのみ ビルドされるファイルがあります まずmacOSフレームワーク ターゲットの プロジェクトナビゲータで タブに移動します 次にビルド設定の Supported Platformsに Any Platformを選択しすることによって すべてのプラットフォームのために フレームワークを構成します またAllow Multiplatform Buildsが 自動的に「はい」が設定されて いることが分かります これは必要に応じてサポートされる プラットフォームごとに このターゲットを1回 ビルドするように ビルドシステムに通知します これがMultiPlatformターゲット になりました 元のmacOSフレームワークには macOS用にビルドする場合のみ ビルドする必要がある 追加のファイルが1つあったことを 思い出してください これを行うようにフレームワークを 構成するには プラットフォームフィルタを 追加してこのファイルを macOS用にのみビルドするように 指定できます これを行うには最初に タブに移動し 次にCompile Sources ビルドフェーズを展開します 最後にアイテムを クリックし 以外のすべてのチェックを外して macOS専用にビルドするように Ingredient+macOS.swiftを 構成します これで新しいMultiPlatform ターゲットが構成されました それらはもはや必要ないので フレームワークの他の2つの バリアントを削除できます さらにフレームワークターゲットが 1つしかないため この新しいターゲット をリンクして埋め込むように すべてのAppを構成する 必要があります macOSのものから始め MultiPlatformターゲットを 設定したためmacOS Appは すでに構成されています iOS AppとwatchOS Appに新しい フレームワークを追加できます 各Appターゲットの タブに移動して フレームワークとライブラリの 構築フェーズへ フレームワークを追加します 要約するとmacOSフレーム ワークのターゲットを採用し iOSとwatchOS用に ビルドできるようにしました macOSのみのソースファイル用 プラットフォームフィルタを使い フレームワークを カスタマイズしました 最後にAppのターゲットを新しい 単一MultiPlatform フレームワーク ターゲットを リンクして埋め込み構成しました それはXcodeのMultiPlatform ターゲットです では Jakeに戻しましょう Jakeがこれからプロジェクト構成を より深く説明してくれます ありがとう Prachi Xcodeプロジェクトのモデリング 及び構成についての成功事例 について説明します また ビルドのパフォーマンスと 正確さを向上するための できることをいくつか示します まずスキームのビルド オプションを見てみましょう スキームピッカー をクリックし 次に セクションに 移動します ここで構成できる簡単なことが いくつかあります ビルド順序の場合 依存関係 のオーダーを 選択することをお勧めします これによりプロジェクトに ターゲットが発生し 依存関係 グラフに従って 並行して構築します これでマルチコアビルドの パフォーマンスを大幅に 向上させることができます また継続的インテグレーションから より速い結果が得られます 対照的に 手動オーダーの 選択は良くないので 推奨されません このオプションを使用すると ビルドが遅くなり サイクルエラーを 引き起こす可能性があります スキームにリストされている ターゲットオーダーの場合 プロジェクトの依存関係と 矛盾しています スキームビルドオプションの もう1つの重要な設定は Find Implicit Dependenciesです このオプションをチェックすると Xcodeに プロジェクトの情報に基づいて ターゲット間の ビルド設定のリンカフラグ ビルドフェーズでリンクされた ライブラリの名前などの 依存関係 の自動的な 追加が許可されます これは 関連するターゲットが 異なるプロジェクトにあり 通常明示的なターゲット 依存関係を 追加できない場合特に便利です さまざまなプロジェクト間で 明示的なターゲット依存関係を 追加できないために 特定の順序でターゲットを 構築するために 手動 依存関係オーダーを 使用している場合 暗黙的な依存関係の 検索を有効にして 依存関係オーダーの選択と併せて 多くの場合 より良い解決策です 次にスクリプトフェーズと ビルドルールについて説明します プロジェクトの ターゲットリストから SmoothieKitターゲットを選択します 次に タブを 選択します ここにProcess Recipes スクリプトフェーズがあります これにカスタムビルドロジックが 含まれています その責務の1つは 入力ごとに1つの出力を持つ 多数のレシピファイルから コードを生成し それを順番に処理することです 今あなたはこれらの計算値が 互いに完全に独立していることに 気づくでしょう これはそれらを並行しての 実行を利用できることで パフォーマンス最適化の機会を 提供します ビルドルールを使用すると まさにそれを実行できます この作業をビルドルールに 抽出する方法を 見てみましょう フレームワークのプロジェクトエディタ のタブに移動し プラスボタンをクリックして 新しいビルドルールを追加します 次に ファイルパターン 「*.recipe」を入力します これはこのルールで処理したい ファイルタイプの ファイル拡張子に対応します 次にこのルールに 依存関係を追加します ビルドルールに入力を 追加する必要はありません 処理する各入力ファイルを 入力として自動的に 取得するためです ただし処理するファイルごとに ルールが生成する 出力ファイルのパスを ビルドシステムに 通知する必要があります 新しい出力ファイルを追加して 入力するには プラスボタンをクリックし $(DERIVED_ FILE_ DIR) / $(INPUT_ FILE _BASE) .compiledrecipeと入力します DERIVED_FILE_DIRの下に 生成されたファイルを 書き込むことをお勧めです これはビルドシステムによって 管理されている 適切な場所を指すためです ソースルートの下に 出力ファイルの 生成は避けてください これはソース管理に干渉する 可能性があります 複数のビルドを同時に 実行する場合に 競合につながります もちろんスクリプトフェーズコード をルールにコピーする 必要があります スクリプトフェーズに戻り 各ファイルを処理した コードをコピーします 次にルールに戻って それを貼り付けます ルールは処理する入力ごとに1回 実行されることに注意してください そこでforループを削除し $RECIPEを $SCRIPT_INPUT_FILEに置き換えます これは処理中の入力ファイルの 絶対ファイルパスに対応します $DERIVED_FILE_DIR / $RECIPE.compiledrecipeを $SCRIPT_OUTPUT_FILE_0で 置き換えます これは以下の「Output Files」 セクションに入力した 出力ファイルのパスを指します ファイルパス内のスペースや その他の特殊文字が 正しく処理されるように 変数を引用することを 忘れないでください 素晴らしい ここでルールで構成することが もう1つあります ルールは処理する入力ごとに 1回実行されることを説明しました デフォルトではターゲットが コンパイルしているアーキテクチャ ごとにも1回も実行されます たとえば Mac Appターゲット ルールはarm64と x86_64の場合の 実行回数は 1回かける入力数です 4つの入力に2つアーキテクチャを 掛けたものがある場合 ルールは8回呼び出されます これはオブジェクトコードなど アーキテクチャに依存した ルールの出力時に役立ちます ただしこの場合私のルールは 基盤のCPUアーキテクチャから 独立した出力を生成します そこでアーキテクチャごとに 1回実行のチェックを外します 最後にビルドシステムが ビルドルールへの 入力ファイルに伝播するために すべての.recipeファイルを フレームワークターゲットの コンパイルソースビルドフェーズに 追加する必要があります Build Phasesに戻り Compile Sourcesを展開し プラスボタンを使用して レシピファイルを追加します
それではスクリプトフェーズに 戻りましょう これが行う残りの作業は 複数のテキストファイルの内容を 私たちのAppでより効率的に 実行時にロードできる 単一のファイルに マージすることです そしてより良いソース管理 経験を持つために スクリプトをプロジェクト ファイルの外部に保持し ここでインラインスクリプト エディタから呼び出します ではpackage.shへの参照に従って コードを見てみましょう この場合ビルドルールは 適切ではありません すべての入力を 1つに結合するために すべての入力を1度に 処理する必要があります なので 並行して実行できる 分離されたユニットに 分割する方法はありません だからこの作業をスクリプトフェーズで 維持することは理にかなっています しかしこれで私たちは最も重要な ポイントの1つに導かれます スクリプトには指定された入力と出力 の依存関係がありません これによりルドタスクが間違った 順序で実行される可能性があり ビルドが遅くなります Xcodeは他のタスクを並行して 実行することに関して より保守的でなければならない からです スクリプトフェーズで使用可能性の あるファイルがわからないためです なので 入力と出力の依存関係を 追加することが重要です スクリプトフェーズによって ビルド内の他のタスクと比較して 正しい順序で実行される作業が 確実に行われるようにするためです この特定のスクリプトでは 多数の入力があります これらをプロジェクトファイルに 1つずつ入力する代わりに xcfilelistを使い この 入力リストを外部ファイルを介して この入力リストを管理できます 先に進んでプロジェクトに 1つ追加します > に移動し セクションで を選びます
このスクリプトフェーズでは 処理される入力ファイルのリストを 1行に1つずつ貼り付けます。 必要であれば ポンド記号で行を開始することで コメントを書くこともできます これはコンテキストを 追加するのに最適です 次にスクリプトフェーズから このxcfilelistを参照します スクリプトフェーズに戻り 入力ファイルリストで xcfilelistへのパスを指定します
最後にビルドルールの場合と同様に 出力コンテンツが書き込まれる ファイルパスを指定して 出力の依存関係を指定します
言及すべきことがもう1つあります ビルドルールと同様に スクリプトフェーズで提供される いくつかの重要な 環境変数があります package.shに戻って 詳しく見てみましょう ソースでは SCRIPT_INPUT_FILE_LIST_COUNTを 参照しています これはスクリプトフェーズに渡された 入力ファイルリストの総数を指します SCRIPT_INPUT_FILE_LIST_n; これはn番目のインデックスにある 入力ファイルリストの解決された 絶対ファイルパスを参照します そして SCRIPT_OUTPUT_FILE_0; これは最初の(この場合のみ)出力ファイル の解決された絶対ファイルパスを 参照します これはクリプトフェーズに 提供されるいくつかの 主要な環境変数の概要です ターゲットのビルド設定は スクリプトフェーズ環境でも 利用できるようになります これは ビルドルールに 固有のいくつかの環境変数と あまり一般的ではない 変数の概要です スクリプトフェーズと同様に ターゲットのビルド設定は ビルドルール環境でも 利用できるようになります さてここでプロジェクトを ビルドしようとすると 問題が発生します
ビルドログに移動して 詳しく見てみましょう SmoothieKitはMultiPlatform のターゲットであるため OS用とwatchOS用に 2回ビルドされます これは これらの各ビルドが 同じパスでスクリプトフェーズの出力を 生成しようとしていること を意味します しかし これは許可されていません なぜなら ビルドシステムでは ビルド全体で1つのタスクのみが 特定のパスで出力を生成すること しかできないからです これを解決する方法は いくつかあります 簡単な解決策の1つは スクリプトフェーズの 出力パスを変更して ターゲットがビルドされるたびに ユニークになるようにすることです この場合 別のビルド設定を 使用することを検討できます プラットフォーム固有の DERIVED_FILE_DIRのように パスを十分にユニークにして 競合を解決します ただしスクリプトフェーズで 実行されている実際の作業が 各ターゲットのコンテキスト内で 同一である場合 それは単に同じ作業が 2回行われる原因になります その場合 共有フレームワークターゲットが 依存する新しい集約ターゲットに スクリプトフェーズを 移動することをお勧めします それが私のプロジェクトのために やろうとしていることです 開始するにはプラスボタンを クリックします ターゲットリストの下部にある タブを選択し を選択します これをリソースと呼びます 次に新しいスクリプト フェーズを追加し 名前 スクリプトソース 入力 フレームワークターゲットからの 出力をコピーします
最後に元のスクリプトフェーズを フレームワークターゲットから 削除し 新しい集計ターゲットで 追加します
このように 作業は1回のみ行われるため 出力ファイルの競合はありません iOSとwatchOSの両方での フレームワークのバリアントは そのスクリプトフェーズに対して 正しい順序でビルドされます ビルドが成功しました さて ここでPrachiに戻します ビルド設定について教えてくれます ありがとう Jake さて ビルド設定とは 何でしょうか? これはXcodeターゲットに 適用できる構築の 側面を設定するための プロパティです Xcodeはビルド設定を 構成するために2つの主要な メカニズムを提供します 1つ目はビルド設定エディタを 使用する方法です 2つ目は構成設定ファイル または.xcconfigファイルを 使用する方法です プロジェクト内の設定を管理する ビルド設定エディタの 機能を確認することから 始めましょう ビルド設定エディタを 起動するには まずプロジェクトナビゲータで プロジェクトを 選択する必要があります 次に設定するターゲットを 必ず選択してください 最後に タブバーの タブを クリックします ここから新しいビルド設定を 追加または 既存のものを変更します クイックヘルプインスペクタを 開けば 選択したビルド設定の 追加情報を見つけられます ビルド設定は複数の レベルで定義されます これは定義のスタックと 考えることができます 実際 レベルフィルタを クリックすれば これらのレベルは視覚化できます 各列は異なるレベルを表し ビルド設定はそこで定義でき それらは右から 左に評価されます 最下位レベルから開始して デフォルト値があり 現在選択されているSDKによって 定義されています プロジェクトレベルの 構成設定ファイル Xcodeプロジェクトファイル からのプロジェクトレベルの設定 構成設定ファイルで定義された ターゲット設定 Xcodeプロジェクトファイルで 定義された ターゲットレベル設定 そして最後に ビルド設定の 解決された値です 太字の設定が表示されている場合は 注意してください これはレベルにビルド設定用の 明示的な値が あることを示します Xcodeが提供の他のメカニズム ビルド設定を管理するための 構成設定ファイルまたは .xcconfigファイルです xcconfigファイルの複数の 利点は次のとおりです より良いソース管理管理 ターゲットまたは構成間での 設定の共有 ビルド設定の高度な構成 および開発環境または テスト環境に基づく 追加のxcconfigファイルを 含める機能です xcconfigファイル内の ビルド設定を作成する 方法を見てみましょう 最も基本的なレベルでは ビルド設定は名前 代入演算子と値で 構成されています 条件付き構文を使用し ビルド設定の値を 絞り込むことができます 条件付き設定は 角括弧を使用して定義されます サポートされている 条件には次のものがあります 構成 アーキテクチャ およびSDKです SDK条件で示されているように ワイルドカードは マッチングの目的で使用できます おなじみの ダブルスラッシュ構文を使用し コメントも追加できます ビルド設定は ドルパレンス構文を使用した 別のビルド設定の値を設定できます この例では MY_OTHER_BUILD_SETTINGが YESに設定されています MY_BUILD_SETTING_NAMEの値は MY_OTHER_BUILD_SETTINGの ドルパレンス構文を 使用して評価します ここでもMORE_SETTINGSで 見られるように 複数の値を評価できます そして最後にビルド設定の既存の値 $(inherited) 値とともに 使用できます これによりビルド設定に追加の値を 既存の値をすべて 保持しながら追加できます これはあなたもビルド設定名 APPEND_TO_EXISTING_SETTINGSを 使うことができるので 便利なフォームです ビルド設定評価構文の別の使用法は 他のビルド設定のセットから ビルド設定を 一緒に構成することです まず制御設定 IS_BUILD_SETTING_ENABLED から始めます MY_BUILD_SETTING_NOと MY_BUILD_SETTING_YESの 2つの追加ビルド設定の場合 この設定の値を サフィックスとして使用します 最後にMY_BUILD_SETTINGと IS_BUILD_SETTING_ENABLEDの 両方で構成される値を持つ MY_BUILD_SETTINGを 定義します ビルド設定の評価は 裏返しに行われるため 最も内側の設定が評価されます IS_BUILD_SETTING_ENABLEDの 値であるNOを返します 最後に 構成された BUILD_SETTING_NOは -use_this_oneの値に 評価されます ビルド設定を評価する場合 値変換の基本として提供され 使用できる 演算子のセットがあります 演算子の3つの分類は 次のとおりです 文字列演算子 パス演算子 および交換演算子です サポートされている 文字列演算子は引用符で 文字列内の文字を中断します 文字の大文字と小文字を 変換するlowerとupper さまざまな形式で文字列を 有効な識別子に 変換する識別子 ディレクトリを取得するための 一連のパス演算子を提供します ファイル名 ベース名 サフィックスと標準化パスです パス演算子ごとに値の一部を 置き換えることが できる置換演算子があります ビルド設定が空の場合の 置換値を提供する デフォルトの演算子もあります それ以外の場合は ビルド設定の既存の値を使用します 最後に確認する項目は 他のxcconfigファイル内の xcconfigファイル含める 機能です 利用できるメカニズムは 2つあります 最初に必要なものは次のとおりです これにはxcconfigファイルが ディスク上の存在が必要です ファイルが見つからない場合 コンパイラエラーが発生します 2番目はオプションのincludeです ディスク上に存在する場合 xconfigファイルを含めます ファイルが存在しない場合でも エラーにはなりません Xcodeプロジェクトファイルの 場所に対しパスは 相対的であることに 注意してください このすべての情報を 実際のシナリオで どうまとめていくかを 見てみましょう この例では 以下の問題を解決する方法を 見ていきます 私たちの開発マシンでは コンパイラは式について積極的に 警告する必要があるため タイプチェックに時間が かかりすぎます ただしCIマシンは低速です そこで式のチェックにかかる時間を 増やす必要があります 私たちのソリューションでは 3つの構成設定ファイルがあります debug common およびci.xcconfigです デバッグxcconfigファイルは デバッグビルドに使用されます そして複数の追加のフラグを OTHER_SWIFT_FLAGS ビルド設定を介して Swiftコンパイラに渡します 共通のxcconfigファイルは オプションでci.xcconfig ファイルが含まれます また型式の警告を制御する OTHER_SWIFT_FLAGS設定も 定義します 他のフラグ設定は $(inherited)を利用し debug.xcconfigファイルや デフォルト値が200の MAX_EXPRESSION_TIMEの ビルド設定評価など 含まれていることを確認します cixcconfigファイルは MAX_EXPRESSION_TIMEの場合 のオーバーライド値を定義します 最後にXcodeに サポートされる構成レベルの1つに これらのxcconfigファイルを 適用する方法を 通知する必要があります これはプロジェクトエディタを 介して行われ それが私たちがここで 見ているものです セクションから 定義されたビルド構成の プロジェクトレベル またはターゲットレベルの いずれかでプロジェクトから 任意の設定ファイルを適用できます ここでFrutaのデバッグ構成用に プロジェクトレベルで適用の debug.xcconfigファイルを 確認できます またcommon.xcconfigファイルが プロジェクト内のターゲットごとに 設定されます ソリューションを要約するために デフォルトの演算子が使用され MAX_EXPRESSION_TIMEの デフォルト値を定義します ci.xcconfigファイルはオプションで 含まれていました CIシステムにのみ存在するためです そしてMAX_EXPRESSION_TIME デフォルト値のオーバーライドは ci xcconfigファイルで 使用されました これで実際の例は終わりです それではJakeに戻して 私たちが扱った すべてを確認しましょう ありがとう Prachi 要約しましょう MultiPlatformフレームワークと そしてそれが ビルド設定とビルドフェーズを管理する MultiPlatformプロジェクトで どのように簡単な方法を 提供するかについて 学びました ターゲットを並行して 構築することでパフォーマンスを 構築しプロジェクト構成を 改善する方法を 依存関係の順序に従って ビルドルールと ビルドフェーズを適切に 使用する方法を そして依存関係を指定することの 重要性を見てきました 最後にビルド設定について 構成設定ファイルの使用方法と それらをより簡単に管理し それらの構文を探り そしてそれが提供するすべての 構成要素深く掘り下げました このレッスンが一連の便利ツールを 提供すること 開発経験を最大限に活用するのに 役立つことを願っています ご覧いただきありがとうございます! ♪
-
-
7:38 - Shell Script - Output Files
$(DERIVED_FILE_DIR)/$(INPUT_FILE_BASE).compiledrecipe
-
8:22 - Build Rule - code
"$SRCROOT/Scripts/gen-code.sh" "$SCRIPT_INPUT_FILE" "$SCRIPT_OUTPUT_FILE_0"
-
10:15 - Shell Script - code
# Package up the recipes. echo "packaging..." for i in $(seq 0 $(expr ${SCRIPT_INPUT_FILE_LIST_COUNT} - 1)) ; do infile_="SCRIPT_INPUT_FILE_LIST_$i" eval infile=\$$infile_ while IFS= read -r file; do cat "$file" >> "$SCRIPT_OUTPUT_FILE_0" done < "$infile" done
-
11:34 - XCFileList
$(SRCROOT)/Recipes/Instructions/berry-blue.md $(SRCROOT)/Recipes/Instructions/carrot-chops.md $(SRCROOT)/Recipes/Instructions/hulking-lemonade.md $(SRCROOT)/Recipes/Instructions/kiwi-cutie.md $(SRCROOT)/Recipes/Instructions/lemonberry.md $(SRCROOT)/Recipes/Instructions/love-you-berry-much.md $(SRCROOT)/Recipes/Instructions/mango-jambo.md $(SRCROOT)/Recipes/Instructions/one-in-a-melon.md $(SRCROOT)/Recipes/Instructions/papas-papaya.md $(SRCROOT)/Recipes/Instructions/pina-y-coco.md
-
11:57 - Shell Script - Input File Lists
$(SRCROOT)/FileList.xcfilelist
-
12:11 - Shell Script - Output Files
$(PROJECT_TEMP_DIR)/instructions.mdarchive
-
12:50 - Environment Variables - Script Phases
// These environment variables are available in script phases: SCRIPT_INPUT_FILE_COUNT // This specifies the number of paths from the Input Files table. SCRIPT_INPUT_FILE_n // This specifies the absolute path of the nth file from the Input Files table, with build settings expanded. SCRIPT_INPUT_FILE_LIST_COUNT // This specifies the number of input file lists. SCRIPT_INPUT_FILE_LIST_n // This specifies the absolute path of the nth "resolved" input file list with contained paths made absolute, build settings expanded, and comments removed. SCRIPT_OUTPUT_FILE_COUNT // This specifies the number of paths from the Output Files table. SCRIPT_OUTPUT_FILE_n // This specifies the absolute path of the nth file from the Output Files table, with build settings expanded. SCRIPT_OUTPUT_FILE_LIST_COUNT // This specifies the number of output file lists. SCRIPT_OUTPUT_FILE_LIST_n // This specifies the absolute path of the nth "resolved" output file list with contained paths made absolute, build settings expanded, and comments removed. * n in the above examples refers to a 0-based index.
-
13:00 - Environment Variables - Build Rules
// These environment variables are available in build rules: SCRIPT_INPUT_FILE // This specifies the absolute path of the main input file being processed by the rule. OTHER_INPUT_FILE_FLAGS // This specifies custom command line flags defined for the input file in the Compile Sources build phase. SCRIPT_INPUT_FILE_COUNT // This specifies the number of paths from the Input Files table. SCRIPT_INPUT_FILE_n // This specifies the absolute path of the nth file from the Input Files table, with build settings expanded. SCRIPT_OUTPUT_FILE_COUNT // This specifies the number of paths from the Output Files table. SCRIPT_OUTPUT_FILE_n // This specifies the absolute path of the nth file from the Output Files table, with build settings expanded. SCRIPT_HEADER_VISIBILITY // This is set to "public" or "private" if the input file being processed is a header file in a Headers build phase, and its Header Visibility is set to one of those values. HEADER_OUTPUT_DIR // This specifies the output directory to which the input file should be copied, if the input file being processed is a header file in a Headers build phase. * n in the above examples refers to a 0-based index.
-
18:17 - Build setting definition
MY_BUILD_SETTING_NAME = "A build setting value"
-
18:30 - Build setting definition with conditions
MY_BUILD_SETTING_NAME = "A build setting value" MY_BUILD_SETTING_NAME[config=Debug] = -debug_flag MY_BUILD_SETTING_NAME[arch=arm64] = -arm64_only MY_BUILD_SETTING_NAME[sdk=iphone*] = -ios_only
-
19:50 - Build setting composition
IS_BUILD_SETTING_ENABLED = NO MY_BUILD_SETTING_NO = -use_this_one MY_BUILD_SETTING_YES = -use_this_instead MY_BUILD_SETTING = $(MY_BUILD_SETTING_$(IS_BUILD_SETTING_ENABLED))
-
21:08 - Build setting evaluation operators (paths)
$(MY_PATH:dir) $(MY_PATH:file) $(MY_PATH:base) $(MY_PATH:suffix) $(MY_PATH:standardizepath)
-
21:21 - Build setting evaluation operators (replacement)
$(MY_PATH:dir=/tmp) $(MY_PATH:file=/better.swift) $(MY_PATH:base=another) $(MY_PATH:suffix=m) $(MY_PATH:default=YES)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。