【发布时间】:2016-04-29 22:37:05
【问题描述】:
我在我的项目中添加了一个 swift 框架作为子项目。当我在模拟器和设备上运行时它工作正常。但是当我尝试归档主要产品时,它失败并出现错误:
"/Users/mac/Library/Developer/Xcode/DerivedData/ProductName-bhtbyknuwzpjjwaadaqiytxtzypo/Build/Intermediates/ArchiveIntermediates/ProductName/BuildProductsPath/Release-iphonesimulator/MyFramework.framework:没有这样的文件或目录"
我搜索了该路径并结束了文件夹“/Users/mac/Library/Developer/Xcode/DerivedData/ProductName-bhtbyknuwzpjjwaadaqiytxtzypo/Build/Intermediates/ArchiveIntermediates/ProductName/BuildProductsPath”
其中只有三个子文件夹:
- 发布-iphoneos
- 发布通用
- Swift 支持
并且没有 "Release-iphonesimulator" 文件夹。
这是框架的构建脚本:
set -e
set +u
# Avoid recursively calling this script.
if [[ $SF_MASTER_SCRIPT_RUNNING ]]
then
exit 0
fi
set -u
export SF_MASTER_SCRIPT_RUNNING=1
# Constants
SF_TARGET_NAME=${PROJECT_NAME}
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal
# Take build target
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]]
then
SF_SDK_PLATFORM=${BASH_REMATCH[1]}
else
echo "Could not find platform name from SDK_NAME: $SDK_NAME"
exit 1
fi
#if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
#then
#echo "Please choose iPhone simulator as the build target."
#exit 1
#fi
IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos
# Build the other (non-simulator) platform
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS='arm64' VALID_ARCHS='arm64' $ACTION
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS='armv7 armv7s' VALID_ARCHS='armv7 armv7s' $ACTION
# Copy the framework structure to the universal folder (clean it first)
rm -rf "${UNIVERSAL_OUTPUTFOLDER}"
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework"
# Smash them together to combine all architectures
lipo -create "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/arm64/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/armv7/${PROJECT_NAME}.framework/${PROJECT_NAME}" -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}"
注意:我已评论以下行,因为归档仅在设备 sdk 平台(而非模拟器)上启用
if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]]
then
echo "Please choose iPhone simulator as the build target."
exit 1
fi
【问题讨论】:
-
确保您已在目标设置的构建阶段将 MyFramework.framework 添加到嵌入式框架。
-
我已经做了。
-
我也有同样的问题。有更新吗?
-
如果它对任何人来说仍然很重要,我遇到了同样的问题,结果我的框架没有 Distro 构建配置,而我的项目正在使用 Distro 构建配置来存档。所以我刚刚为框架创建了一个 Distro 构建配置,一切都很好。
标签: ios xcode swift frameworks archive