2

iOS 用のユニバーサル フレームワークを作成しようとしていますが、集計ターゲットに "コピー ファイルの追加" ビルド フェーズがあり、予期しない動作をする傾向があります (ターゲットの場所にファイルの一部をコピーする)。これを解決できるかどうか教えてください。何とかして?

このコピー ビルド フェーズで 3 つのファイルを追加しました... ここに画像の説明を入力

ビルドが完了すると、ビルド ログが表示されます。 ここに画像の説明を入力

結果は一定ではありません - すべて (3) 個のファイルがコピーされることもありますが、ほとんどの場合、少数のファイルのみがターゲットの場所にコピーされます。ビルド ログには、この (コピー) フェーズのエラー/警告はありません。

ほとんどの場合、Xcode の問題です。(時間を節約するために) 1 日に複数回プロジェクトをビルドする必要があるため、この問題を回避するための回避策/アイデアは高く評価されます。


更新/編集

最後のビルド後に「コピー ファイルの追加」で追加 (+) された 3 つのヘッダー ファイルを編集しないと、ビルド時にフレームワーク フォルダー内にファイルがコピーされません (cmd+B)。

以下は、ターゲット ビルド フェーズで使用されるスクリプトです。

スクリプト 1:静的ライブラリをビルドする

xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator

xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos -target ${PROJECT_NAME} -configuration ${CONFIGURATION} clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos

スクリプト 2:ユニバーサル フレームワークの構築

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/lib${PROJECT_NAME}.a" &&
DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/lib${PROJECT_NAME}.a" &&
UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal" &&
UNIVERSAL_LIBRARY_PATH="${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}" &&
FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}.framework" &&

# Create framework directory structure.
rm -rf "${FRAMEWORK}" &&
mkdir -p "${UNIVERSAL_LIBRARY_DIR}" &&
mkdir -p "${FRAMEWORK}/Versions/A/Headers" &&
mkdir -p "${FRAMEWORK}/Versions/A/Resources" &&

# Generate universal binary for the device and simulator.
lipo "${SIMULATOR_LIBRARY_PATH}" "${DEVICE_LIBRARY_PATH}" -create -output "${UNIVERSAL_LIBRARY_PATH}" &&

# Move files to appropriate locations in framework paths.
cp "${UNIVERSAL_LIBRARY_PATH}" "${FRAMEWORK}/Versions/A" &&
ln -s "A" "${FRAMEWORK}/Versions/Current" &&
ln -s "Versions/Current/Headers" "${FRAMEWORK}/Headers" &&
ln -s "Versions/Current/Resources" "${FRAMEWORK}/Resources" &&
ln -s "Versions/Current/${PRODUCT_NAME}" "${FRAMEWORK}/${PRODUCT_NAME}"

ビルドを自動化するには、根本的な実際の問題を修正する必要があります (私の回答に記載されている回避策は避けてください)。ありがとうございました。

4

1 に答える 1

0

回避策の 1 つは、コピー ビルド フェーズで含めたすべてのファイルを開いて保存し、ビルド (Cmd + B) することであることがわかりました。(変更日が更新されるように、スペースを追加してファイルをダーティにするだけです)

于 2013-08-09T19:37:26.110 に答える