私はアプリを開発していて、オープンソースコンポーネントを使用しています。
MyApp.xcodeprojとComponent.xcodeprojの両方を含むワークスペースがあります。私のアプリには3つの構成があります:デバッグ、アプリストアおよび社内ですが、コンポーネントには2つしかありません:デバッグおよびリリース
Debug構成では、すべて正常に機能しますが、構成名がそうであるため、App StoreまたはIn House構成でアプリをコンパイルできません。合わない。 #import <Component/Component.h>
を実行しようとすると、ファイルが見つかりませんというエラーが発生します
App StoreとIn Houseの両方の構成が必要ですが、コンポーネントの将来の更新を容易にするために、コンポーネントの構成を変更することは避けたいと思います。
CocoaPodsを使用してこの問題を解決できることは知っていますが、Xcodeに簡単な解決策があるかどうか知りたいです
アプリの設定を微調整して、プロジェクトをコンパイルできます。
すべてのターゲットがこれらの設定を継承できるように、プロジェクトレベルですべての設定を変更することをお勧めします。
新しいDEFAULT_CONFIGURATION
ユーザー定義設定を追加し、構成マッピングを定義します。これはどのように見えるべきかです:
すべての構成でFRAMEWORK_SEARCH_PATHS
を$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)
に設定し、Any OS X SDKバリアントを追加して、値を$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)
に設定します。 。 HEADER_SEARCH_PATHS
を$(FRAMEWORK_SEARCH_PATHS)/include
に設定し、LIBRARY_SEARCH_PATHS
を$(FRAMEWORK_SEARCH_PATHS)
に設定します。これはどのように見えるべきかです:
この手順は非常に面倒です。 xcproj ツールを使用し、プロジェクトディレクトリでこのスクリプトを実行することで自動化できます。必要に応じて、構成マッピングを編集します。
#!/bin/bash
CONFIGURATIONS=( "App Store:Release" "In House:Release" "Debug:Debug" )
for CONFIGURATION in "${CONFIGURATIONS[@]}"; do
xcproj --configuration "${CONFIGURATION%%:*}" write-build-setting DEFAULT_CONFIGURATION "${CONFIGURATION#*:}"
done
xcproj write-build-setting 'FRAMEWORK_SEARCH_PATHS' '$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)'
xcproj write-build-setting 'FRAMEWORK_SEARCH_PATHS[sdk=macosx*]' '$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)'
xcproj write-build-setting 'HEADER_SEARCH_PATHS' '$(FRAMEWORK_SEARCH_PATHS)/include'
xcproj write-build-setting 'LIBRARY_SEARCH_PATHS' '$(FRAMEWORK_SEARCH_PATHS)'
コンポーネントが静的ライブラリとして配布されている場合は、ここで完了です。コンポーネントがフレームワークとして提供されている場合は、テキストエディタでproject.pbxprojファイルを編集してパス参照を更新する必要があります。 PBXFileReferenceセクション(/* Begin PBXFileReference section */
の下)でComponent.framework
を見つけ、そのpath
を次のように更新します。
name = Component.framework; path = "../$(DEFAULT_CONFIGURATION)/Component.framework"; sourceTree = BUILT_PRODUCTS_DIR; };
また、sourceTree
がBUILT_PRODUCTS_DIR
に設定されていること、つまりビルドされた製品に関連していることを確認してください。プロジェクトファイルを編集すると、次のようになります。
これで、プロジェクトは期待どおりにビルドされます。
これと同じ問題が発生しましたが、アプリに複数の構成(Debug、TestFlight、Release、Enterprise)があり、太字の構成は常にビルドに失敗し、できませんでした。フレームワークが見つかりません。サブプロジェクトの更新を簡単にするために、サブプロジェクトのプロジェクト設定をいじりたくありませんでした。
私が見つけた答えは、フレームワークがサブプロジェクトのリリース(またはデフォルト構成に設定されているもの)でドロップされるという事実を考慮して、フレームワーク検索パスを更新することでした。
具体的には、$(BUILD_DIR)/ Release-$(PLATFORM_NAME)に設定しました。
私も再帰的に設定しました。これは、シミュレータとデバイスの両方で機能し、Xcodeとコマンドラインで構築されます。