programing

iOS 시뮬레이터용 빌딩이지만 링크 프레임워크 '***.framework'는 iOS용으로 구축되었습니다.

stoneblock 2023. 4. 19. 21:54

iOS 시뮬레이터용 빌딩이지만 링크 프레임워크 '***.framework'는 iOS용으로 구축되었습니다.

시뮬레이터로 앱을 실행할 수 없게 되었습니다.Online에서 project.pbxproj를 편집하라고 제안했지만 효과가 없는 것 같습니다.시뮬레이터에서 프로젝트를 실행할 수 있는 기능(디바이스에서도 실행할 수 있는 기능)을 되찾으려면 어떻게 해야 합니까?저는 같은 프레임워크를 많이 사용하는 다른 프로젝트를 진행하고 있지만 시뮬레이터에서 실행됩니다.어떤 프로젝트에서는 유사한 프레임워크가 동작하지만 다른 프로젝트에서는 동작하지 않는 이유는 무엇입니까?

X코드 12.3

이 문제는 빌드 설정 탭에서 워크스페이스 검증을 예로 설정하는 것만으로 해결했습니다.

여기에 이미지 설명 입력

Xcode 12.3의 경우 수정은 타깃 빌드 설정에서 Validate Workspace 속성을 설정하는 것입니다.그러나 이 변경 후 차이를 확인할 경우 빌드 오류의 원인은 매개 변수 값이 아니라 프로젝트 파일에서 누락된 매개 변수(VALIDATE_WORKSPACE)입니다.따라서 값이 YES가 될 필요는 없습니다.프로젝트 설정에 값을 추가해야 하며 기본값(NO)으로 유지할 수 있습니다.처음에 [빌드 설정(Build Settings)]에 [아니오(NO)]로 표시됩니다만, 이것이 누락된 파라미터의 기본값이기 때문입니다.

TLDR: 프로젝트 설정을 변경하지 않고 타깃 빌드 설정으로 이동하여 "작업영역 검증"을 찾아 "예"로 설정한 후 다시 "아니오"로 설정합니다.

프로젝트에 커스텀 프레임워크를 추가했을 때, Xcode를 갱신했을 때도 같은 문제가 발생했습니다.

해결 방법: 프로젝트 검색의 빌드 설정에서 작업 공간 확인 작업 공간 변경 사항 확인yes에서는, to which which which which which which which which로 되어 있습니다.no

여기에 이미지 설명 입력

iOS 및 iOS 시뮬레이터 슬라이스를 포함하는 "팻" .framework가 아닌 .xcframework를 사용합니다.또한 앱스토어를 빌드할 때 빌드 단계를 사용하여 iOS 시뮬레이터 슬라이스를 제거할 필요가 없습니다.

"Fat" 프레임워크는 Xcode에 의해 직접 구축될 수 없으므로 일반적으로 lipo를 사용하여 작성됩니다(출처: Developer Technical Support Apple Developer Forum) .xcframework는 iOS와 iOS 시뮬레이터를 모두 지원하는 단일 프레임워크를 제공하는 유일한 메커니즘입니다.

또한 .xframework는 바이너리 Swift 프레임워크를 제공하는 유일한 방법입니다(출처: Apple Developer 포럼 개발자 기술 지원).

Xcode 12.3에서는 "팻" 프레임워크는 지원되지 않습니다. Xcode는 빌드 중에 프레임워크를 검증하기 때문입니다.이 때문에 많은 프로젝트에서 빌드 오류가 갑자기 발생하기 때문입니다.

대부분의 답변은 범용 바이너리 소비자가 새로운 제한을 회피하기 위한 것입니다.하지만 다른 곳에서 언급했듯이, 이제는 애플로 이행이 필요한 시점입니다.XCFramework를 참조하십시오.

커스텀 빌드 스크립트를 실행하여 범용 바이너리를 작성하고 집약 타깃과lipo생산으로 이행하는 것은 간단합니다..xcframework파일

먼저 빌드 설정에서 배포용 라이브러리 빌드(Build Libraries for Distribution)를 확인합니다.BUILD_LIBRARY_FOR_DISTRIBUTION)는 다음과 같이 설정됩니다.YES

그런 다음 를 사용한 기존 집약 타깃 빌드 스크립트를 바꿉니다.lipo「릴리스」프레임워크의 작성 방법만을 간단하게 나타내는, 다음과 같은 것이 있습니다.

# Universal Script

set -e

FRAMEWORK_NAME="your_framework_name"
IOS_SCHEME_NAME="your_scheme_name"

if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi

SIMULATOR_ARCHIVE_PATH="${SRCROOT}/build/${FRAMEWORK_NAME}-iphonesimulator.xcarchive"
DEVICE_ARCHIVE_PATH="${SRCROOT}/build/${FRAMEWORK_NAME}-iphoneos.xcarchive"

OUTPUT_DIR="${SRCROOT}/framework_out_universal/"

# Simulator xcarchieve
xcodebuild archive \
  -scheme ${IOS_SCHEME_NAME} \
  -archivePath ${SIMULATOR_ARCHIVE_PATH} \
  -configuration Release \
  -sdk iphonesimulator \
  SKIP_INSTALL=NO

# Device xcarchieve
xcodebuild archive \
  -scheme ${IOS_SCHEME_NAME} \
  -archivePath ${DEVICE_ARCHIVE_PATH} \
  -sdk iphoneos \
  -configuration Release \
  SKIP_INSTALL=NO

# Clean up old output directory
rm -rf "${OUTPUT_DIR}"

# Create xcframwork combine of all frameworks
xcodebuild -create-xcframework \
  -framework ${SIMULATOR_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
  -framework ${DEVICE_ARCHIVE_PATH}/Products/Library/Frameworks/${FRAMEWORK_NAME}.framework \
  -output ${OUTPUT_DIR}/${FRAMEWORK_NAME}.xcframework

# Delete the most recent build.
if [ -d "${SRCROOT}/build" ]; then
rm -rf "${SRCROOT}/build"
fi

위의 내용을 조정하여 다른 출력 dir, 다른 삭제 동작, 여러 구성(Release vs Debug)을 지원할 수 있습니다.단, 이 방법은 유효합니다.

마지막으로 1회성 절차로서your_framework_name.framework이 프로젝트에서 언급한 오류의 원인이 된 유니버설 바이너리.새로 빌드된 파일 복사하다your_framework_name.xcframework프로젝트에 추가하면 오류가 사라집니다.

생각할 수 있는 이유는

  1. 사용하고 있는 프레임워크는 시뮬레이터 아키텍처(x86_64)용으로 구축되어 있지 않을 수 있습니다.이 경로에서 프레임워크 폴더(framework_name.framework --> modules ---> framework_name.swift Module-->)로 이동하여 호환성을 체크할 수 있습니다.arm/i386/x86_64 지원 파일이 표시됩니다.
  2. 만약 당신이 새로운 Xcode로 업데이트했다면, 당신이 사용하고 있는 프레임워크는 새로운 컴파일러 버전과 호환되지 않기 때문에 벤더는 최신 호환 버전을 공유해야 합니다.이 경우 당신은 디바이스와 시뮬레이터 모두에서 실행할 수 없습니다.

솔직히 말하면, 여러분이 따라야 할 유일한 접근법은 .framework를 .xcframework로 변환하는 것입니다.이것은 XCode 버전 12.3 이후부터 Apple이 실시하고 있는 것입니다.워크스페이스 및 기타 빠른 수정 프로그램의 검증은 일시적인 것일 수 있으며, 앱스토어 출시 또는 테스트 비행을 위해 앱을 보관하는 등 향후 문제가 발생할 수 있습니다.

.timework를 .xcframework로 변환하려면 명령어 단락 https://medium.com/strava-engineering/convert-a-universal-fat-framework-to-an-xcframework-39e33b7bd861 에서 시작하는 절차를 따릅니다.

및 Xcode v12에서 이 오류를 했습니다.3월 3일Universal(fat) Framework)(.syslog)

Building for iOS Simulator, but the linked and embedded framework was built for iOS + iOS Simulator.

1: 전환(Toggle) 1: 전환/보기Validate Workspace가 아님) (디폴트

해결책 2: XCFramework[대략] 사용

카르타고를 사용하고 있는 경우는, 반드시,copy-frameworks가 아닌 를 사용합니다.Embed & Sign베디임그걸 잊어버려서 똑같은 에러가 나는 거예요.

당신이 링크하고 있는 프레임워크는 암 아키텍처만을 위해 만들어진 것 같습니다.시뮬레이터에서는 실행할 수 없습니다."범용 프레임워크"를 구축하려면 프레임워크의 작성자가 필요합니다.

를 처음 , 를 사용하여 Xcode를 , Xcode는 Xcode를 합니다.appium툴 상기의 순서는 복잡할 수 있습니다. 쓰세요.xcode11시

는 다운로드에 이 됩니다.xcode 10.3

Xcode 10.3

AppStore에서 다운로드 받으시려면 최대 40GB의 여유 저장공간이 필요합니다.상기의 xip 파일은 스토리지 오류를 일으키지 않습니다.

이게 잘되면 나중에 감사해도 돼!!

언급URL : https://stackoverflow.com/questions/63267897/building-for-ios-simulator-but-the-linked-framework-framework-was-built