29

アプリを開発しており、オープン ソース コンポーネントを使用しています。

MyApp.xcodeprojComponent.xcodeprojの両方を含むワークスペースがあります。私のアプリにはDebugApp StoreIn Houseの 3 つの構成がありますが、コンポーネントにはDebugReleaseの 2 つしかありません。

デバッグ構成ではすべて正常に動作しますが、構成名が一致しないため、App StoreまたはIn House構成でアプリをコンパイルできません。しようとすると、ファイルが見つからないというエラーが表示されます#import <Component/Component.h>

App StoreIn Houseの両方の構成が必要ですが、将来のコンポーネントの更新を容易にするために、コンポーネントの構成を変更することは避けたいと考えています。

CocoaPods を使用してこの問題を解決できることはわかっていますが、Xcode に簡単な解決策があるかどうか知りたいです

4

3 に答える 3

47

アプリの設定を微調整して、プロジェクトをコンパイルできます。

すべてのターゲットがこれらの設定を継承できるように、プロジェクト レベルですべての設定を変更することをお勧めします。

  1. DEFAULT_CONFIGURATION新しいユーザー定義の設定を追加し、構成マッピングを定義します。これは次のようになります。

    デフォルト設定のスクリーンショット

  2. すべての構成に対して に設定FRAMEWORK_SEARCH_PATHSし、任意の OS X SDKバリアントを$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)-$(PLATFORM_NAME)追加して、値を に設定します。およびに設定します。これは次のようになります。$(BUILD_DIR)/$(DEFAULT_CONFIGURATION)HEADER_SEARCH_PATHS$(FRAMEWORK_SEARCH_PATHS)/includeLIBRARY_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)'
    
  3. コンポーネントが静的ライブラリとして配布されている場合は、ここで完了です。コンポーネントがフレームワークとして提供される場合、テキスト エディターで 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ください。つまり、ビルドされた製品に対して相対的です。プロジェクト ファイルを編集すると、次のようになります。

    ロケーションのスクリーンショット

プロジェクトが期待どおりにビルドされるはずです。

于 2015-06-17T07:19:03.187 に答える