我正在尝试在Xcode 12(beta 5)中构建一个大型(正在开发Xcode 11!)项目,为iOS 14做准备。代码库以前是Objective-C中的,但现在它同时包含Objective-C和Swift,并使用Objective-C或Swift的pod。

我已经推出了支持Xcode 12的CocoaPods新测试版(目前为1.10.0.beta 2)。

Pod安装成功。当我进行构建时,在pod框架上出现以下错误:

为iOS模拟器构建,但链接到为iOS构建的对象文件中,用于体系结构arm64

以及可能的错误:

无法加载目标“arm64-apple-ios11.0”的标准库

当我在框架上运行lipo-info时,它有:armv7s armv7 i386 x86_64 arm64。

此前,该项目的有效架构设置为:armv7、armv7s和arm64。

在Xcode 12中,根据苹果的文档,该设置将消失。架构设置为$(ARCH_STANDARD)。我在排除的架构中没有任何设置。

这里可能发生了什么?我还没能用一个更简单的项目重现这一点。


当前回答

将行“arm64”(不带引号)添加到路径:Xcode*→ 项目→ 生成设置→ 体系结构→ 排除的架构。

此外,对Pods执行同样的操作。在这两种情况下,对于调试和发布字段。

或者详细地说。。。

这里提到的使用Xcode 12部署到模拟器时的错误也是影响我的一个因素。只需右键单击我的每个项目并在finder中显示,在Atom中打开.xcodeproj,然后通过.pbxproj并删除所有VALIDARCHS设置。这就是它对我起作用的原因。

我尝试了其他一些建议(不包括arm64,仅构建活动体系结构),这些建议似乎让我的构建更进一步,但最终让我陷入了另一个错误。首先检查VALIDARCH设置可能是最好的。

其他回答

这是唯一对我有用的东西:

将此添加到调试(非发布)版本:

// Speed up non-production builds by building only for the currently selected architecture
ONLY_ACTIVE_ARCH = YES

// For unknown reasons we need this to be able to compile for simulators in Apple Silicon macOS without Rosetta
VALID_ARCHS = arm64 armv7 arm64-ios-simulator

并删除所有配置(调试和发布)的EXCLUDED_ARCHS设置的所有自定义实例,包括臭名昭著的EXCLUDE D_ARCHS[sdk=iphonesimulator*]=arm64 one。

这些是我在进行这些更改后进行的测试,所有测试都通过了,在原生Apple Silicon上(Xcode没有Rosetta模式):

Debug Staging Release
Build & Run on Device
Build & Run on Simulator
Archive
Validated against App Store Connect N/A N/A

将“仅构建活动体系结构”(Only_Active_ARCH)构建设置设置为yes,xcode要求arm64,因为Silicon MAC体系结构是arm64。

arm64已被添加为Xcode12中的模拟器拱门,以支持Silicon MAC。

/应用程序/Xcode.app/Contents/Developer/Platforms/iPhone模拟器.platform/Developer/SDKs/iPhone模拟器.sdk/SDKSettings.json

X代码12

从“用户定义”组下的“生成”设置中删除VALID_ARCH对我有效。

当我遇到这个问题时,我正试图构建xcFramework。没有什么帮助,但我设法用lipo解决了这个问题,并分享了我的脚本:

OUTPUT_DIR_PATH="${PROJECT_DIR}/XCFramework"

function archivePathSimulator {
    local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-SIMULATOR"
    echo "${DIR}"
}

function archivePathDevice {
    local DIR=${OUTPUT_DIR_PATH}/archives/"${1}-DEVICE"
    echo "${DIR}"
}

function archive {
    echo "▸ Starts archiving the scheme: ${1} for destination: ${2};\n▸ Archive path: ${3}.xcarchive"
    xcodebuild clean archive \
    -project "${PROJECT_NAME}.xcodeproj" \
    -scheme ${1} \
    -configuration ${CONFIGURATION} \
    -destination "${2}" \
    -archivePath "${3}" \
    SKIP_INSTALL=NO \
    OBJROOT="${OBJROOT}/DependentBuilds" \
    BUILD_LIBRARY_FOR_DISTRIBUTION=YES | xcpretty
}

# Builds archive for iOS simulator & device
function buildArchive {
    SCHEME=${1}

    archive $SCHEME "generic/platform=iOS Simulator" $(archivePathSimulator $SCHEME)
    archive $SCHEME "generic/platform=iOS" $(archivePathDevice $SCHEME)
}

# Creates xc framework
function createXCFramework {
    FRAMEWORK_ARCHIVE_PATH_POSTFIX=".xcarchive/Products/Library/Frameworks"
    FRAMEWORK_SIMULATOR_DIR="$(archivePathSimulator $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"
    FRAMEWORK_DEVICE_DIR="$(archivePathDevice $1)${FRAMEWORK_ARCHIVE_PATH_POSTFIX}"

    echo "Removing ${FRAMEWORK_SIMULATOR_DIR}/${1}.framework/${1}"

    if lipo "${FRAMEWORK_SIMULATOR_DIR}/${1}.framework/${1}" -verify_arch "arm64"; then
        echo "Removing arm64"
        lipo -remove "arm64" -output "${FRAMEWORK_SIMULATOR_DIR}/${1}.framework/${1}" "${FRAMEWORK_SIMULATOR_DIR}/${1}.framework/${1}"
    fi

    xcodebuild -create-xcframework \
               -framework ${FRAMEWORK_SIMULATOR_DIR}/${1}.framework \
               -framework ${FRAMEWORK_DEVICE_DIR}/${1}.framework \
               -output ${OUTPUT_DIR_PATH}/xcframeworks/${1}.xcframework
}

echo "#####################"
echo "▸ Cleaning the dir: ${OUTPUT_DIR_PATH}"
rm -rf $OUTPUT_DIR_PATH

DYNAMIC_FRAMEWORK="${PROJECT_NAME}"

echo "▸ Archive $DYNAMIC_FRAMEWORK"
buildArchive ${DYNAMIC_FRAMEWORK}

echo "▸ Create $DYNAMIC_FRAMEWORK.xcframework"
createXCFramework ${DYNAMIC_FRAMEWORK}

在我的情况下,它是100%工作的。试试看:

我有一个临时的解决方案。

您只需按照图像进行操作。

双击架构并选择“其他”和“删除所有行”添加两件事arm7s和arm7在iPhone上运行物理设备,而不是模拟器享受