programing

대상 'x86_64-apple-ios-simulator'에 대한 모듈을 찾을 수 없습니다.

oldcodes 2023. 8. 7. 23:07
반응형

대상 'x86_64-apple-ios-simulator'에 대한 모듈을 찾을 수 없습니다.

사용자 지정 프레임워크가 있으며 XCode 10에서 제대로 작동합니다.XCode 11 베타 3에서 다시 빌드한 다음 앱에 통합하면 다음 오류가 발생합니다.

대상 'x86_64-apple-ios-simulator'에 대한 'MyCustomFramework' 모듈을 찾을 수 없습니다. 찾음: arm64, arm64-apple-ios

프레임워크 프로젝트에서 "유효한 아키텍처"에서 변경해야 하는 사항이 있습니까?

업데이트됨:제 경우 프레임워크가 매우 작고(한 클래스, 몇 가지 방법) 거의 사용되지 않기 때문에 정답을 선택할 수 없습니다. 그래서 저는 그것을 없애고 이 몇 가지 방법을 메인 프로젝트로 옮기기로 결정했습니다.

이 문제를 해결하기 위해 xcode 11 툴을 사용하여 맞춤형 프레임워크의 fat 라이브러리를 다시 만들어야 했습니다.

이를 위해 다음을 수행했습니다.

빌드YourCustomFrameworkiOS 시뮬레이터를 대상으로 하고 바탕 화면의 제품 폴더에서 프레임워크를 추출합니다.

Xcode ▸ 파생 데이터 ▸ 당신의 프로젝트 ▸ 빌드 ▸ 제품 ▸ 출시-아이폰 시뮬레이터

빌드YourCustomFramework일반 iOS 기기를 대상으로 하고 바탕 화면의 제품 폴더에서 프레임워크를 추출합니다.

Xcode ▸ 파생 데이터 ▸ 당신의 프로젝트 ▸ 빌드 ▸ 제품 ▸ 릴리즈-iphoneos

시뮬레이터에서 생성된 프레임워크의 이름을 다음으로 변경합니다.YourCustomFramework-sim.framework나중에 구별할 수 있도록.

lipo 명령을 사용하여 두 이진 파일을 하나의 fat 이진 파일로 결합합니다.(바탕 화면 또는 사용자 정의 프레임워크 파일이 있는 곳 어디든 CD로 저장)

$lipo -create ./YourCustomFramework-sim.framework/YourCustomFramework ./YourCustomFramework.framework/YourCustomFramework -output ./YourCustomFramework

복사YourCustomFramework합니다.YourCustomFramework.framework폴더를 누릅니다.

보낸 사람 폴더

YourCustomFramework-sim.framework/Modules/YourCustomFramework.swiftmodule/

모든 모듈을 복사하여 에 붙여넣습니다.

YourCustomFramework.framework/Modules/YourCustomFramework.swiftmodule/

이렇게 하면 문제가 해결될 것입니다.

Swift 5.0-5.1, Xcode 11
Xcode, <당신의 프로젝트>, 빌드 설정, 빌드 활성 아키텍처만을 열고 디버그 및 릴리스에 대해 <NO>로 변경합니다.표준 아키텍처 -$(ARCHS_STANDARD)에서 아키텍처를 설정/해제합니다. 중요한 것은 다음 단계입니다.
파일:armv7, armv7s, arm64, arm64e, ADD x86_64는 i386을 지원합니다 (, arm64e, (지원: armv7, armv7, armv7, arm64, arm64, arm64, arm86_64)

시뮬레이터 목록에서 원하는 시뮬레이터를 선택하고 BUILD IT.DEN.

그것이 당신에게 효과가 있기를 바랍니다.


건축에 대한 설명:

armv64: iPhoneX, iPhone5s-8, iPad Air — iPad Pro

armv7 : 아이폰3Gs-5c, 아이패드 와이파이(4세대)

armv6 : iPhone — iPhone 3G

-실제 장치의 경우 위의 if

i386 : 32비트 시뮬레이터

x86_64 : 64비트 시뮬레이터

enter image description here

이것은 당신의 모든 라이브러리가 m1 칩으로 유연하지 않기 때문입니다. 그러므로 xcode를 마우스 오른쪽 버튼으로 클릭하고, 정보를 얻은 후 rosetta로 체크합니다.프로젝트를 열고, 청소하고, 빌드합니다.마지막으로 이전과 같이 프로젝트를 실행합니다 :D

i386과 x86_64 두 아키텍처를 추가했습니다.그리고 "활성 아키텍처 구축만"으로 "예"를 설정합니다.모든 시뮬레이터 장치에 구축할 수 있습니다.

enter image description here

XCode-12의 경우 맨 아래에 있는 사용자 정의 옵션에서 유효한 아키텍처가 VALID_ARCS로 이동되었습니다.

M1 MacBook에서 이 문제가 발생했습니다.

이 문제를 해결하기 위해 호스트 앱 팟 파일에 다음 행을 추가했습니다.

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
            config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'
        end
    end
end

편집: 이 줄을 추가하면 런타임 문제에도 도움이 됩니다.

config.build_settings['BUILD_LIBRARY_FOR_DISTRIBUTION'] = 'YES'

이것이 제 Pod 파일에 필요한 전부입니다.

post_install do |pi|
  pi.pods_project.targets.each do |t|
    t.build_configurations.each do |config|
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
    end
  end
end

다음 항목을 확인하십시오.Scheme올바른 계획을 실행해야 합니다.

그리고 당신은 문을 열어야 합니다.XCode > -Your Main Target- > Build Active Architecture Only모든 아키텍처에서 빌드하도록 '아니오'를 설정합니다.

옵션:

- 예로 설정하면 Xcode가 연결된 장치를 감지하여 아키텍처를 결정하고 해당 아키텍처만을 기반으로 구축됩니다.

아니오 - 아니오로 설정하면 모든 아키텍처에 구축됩니다.

Mac M1 칩의 모든 포드에 대해 빌드 설정의 아키텍처에서 'x86_64-apple-ios-simulator' 지원을 추가해야 합니다.그래서 과정은 다음과 같습니다.

  1. 포드로 이동하여 오류 대상에 x86_64-apple-ios-particle을 추가하도록 선택합니다.

  2. 활성 아키텍처 빌드를 포드별 대상에 없음으로 설정합니다.

enter image description here

그것은 이 문제를 해결할 것입니다.프로젝트 설정에서 더 많은 정보.요구 사항에 따라 "활성 아키텍처 구축"을 설정할 수 있습니다.

현재 저는 xcode 12.5를 사용하고 있습니다.

이를 위해 맨 아래의 사용자 정의 옵션을 VALID_ARCHS로 편집했습니다.

대상을 선택하고 빌드 설정으로 이동합니다.

더하기 아이콘을 클릭하면 다음과 같습니다.

enter image description here

VALID_ARCHS 및 $(ARCHS_STANDARD) 값 추가

또는 -> armv7, armv7s, arm64, arm64e, x86_64, i386을 사용할 수 있습니다.

enter image description here

Xcode 12가 탑재된 새로운 M1 Mac에서도 동일한 문제가 발생했습니다.설정을 해서 해결할 수 있었습니다.Build Active Architecture Only = 'Yes'추가VALID_ARCHS = arm64 armv7 arm64-ios-simulator(본질적으로 제외)x86_64그리고.x86_64-ios-simulator아키텍처)를 참조하십시오.

이 오류는 사용자 정의 프레임워크가 모든 ios 장치(실제 장치)에 대해 구축되었으며 앱이 테스트되는 시뮬레이터에서 이 사용자 정의 프레임워크를 사용하려고 한다는 것을 의미합니다.
해결책은 매우 간단합니다.테스트할 시뮬레이터(예: Iphone 13 시뮬레이터)용 맞춤 프레임워크를 'Any iOS Device'용이 아닌 재구축하기만 하면 됩니다.그리고 이전 프레임워크를 새로 컴파일된 프레임워크로 대체합니다.

설정해야 했습니다.'Build Active Architecture Only'부터Debug:Yes/Release:No로.Debug:No/Release:No오류를 보여주는 모든 포드 대상에 대해

'대상 'x86_64-apple-ios-simulator'에 대한 'PODNAME' 모듈을 찾을 수 없습니다.'

여기서 PODNAME은 컴파일할 때 오류를 던지는 포드입니다.

유닛 테스트를 실행하는 동안 RxSwift에 대한 이 문제에 직면했습니다.Pods 프로젝트의 빌드 설정을 변경하고 Build Active Architecture Only를 No로 설정하여 문제를 해결했습니다.

"arch -x86_64" 포드 설치 명령을 사용하여 포드를 삭제하고 포드를 설치합니다.

'활성 아키텍처 구축만'을 '아니오'로 설정합니다.아래 이미지를 봐주세요.

enter image description here

저의 경우, pod 뒤에 test target을 추가하고 설치하는 등의 작업을 했습니다.그리고 포드 파일에 테스트 대상 블록을 추가하면 문제가 해결되었습니다.

예;

target 'SampleProject' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for SampleProject

  target 'SampleProjectTests' do
    inherit! :search_paths
    # Pods for testing
  end
end

대체 솔루션

이 질문은 실제로 사용자 지정 프레임워크 만들기에 대한 것입니다.글을 올린 지 몇 년이 지났는데도 사람들은 여전히 페이지를 방문하여 유사한 문제를 해결하고 있습니다.저는 우리가 다른 해결책도 생각해 볼 필요가 있다고 생각합니다.

Xcode 11 이후 Xcode는 Swift에서 이진 프레임워크 사용 및 생성을 완전히 지원합니다.새로운 XC 프레임워크 번들 유형으로 장치 및 Simulator를 동시에 지원합니다.XC 프레임워크는 Swift 및 C 기반 코드(C, C++, Objective-C)의 이진 배포를 지원합니다.단일 XC 프레임워크에는 시뮬레이터와 장치의 변형이 포함될 수 있습니다.즉, 시뮬레이터, Apple OS를 포함한 모든 아키텍처에 대한 슬라이스를 발송할 수 있으며, UIKit 및 AppKit 앱에 대한 별도의 슬라이스도 발송할 수 있습니다.

라이브러리를 사용하여 사용자 정의 프레임워크를 생성하는 데 관심이 있는 경우 보고서를 확인할 수 있습니다.

만약 당신이 @willhess 대답이 어렵다고 생각한다면, 당신은 이 스크립트를 사용할 수 있습니다.

빌드 단계 -> 더하기 버튼 클릭 -> 스크립트 단계 새로 실행열고 아래 코드를 추가합니다.

UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal

mkdir -p "${UNIVERSAL_OUTPUTFOLDER}"

cp -a "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" 
"${UNIVERSAL_OUTPUTFOLDER}/"


SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."
if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then
cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
fi


lipo -create -output 
"${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" 
"${BUILD_DIR}/${CONFIGURATION}- 
iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" 
"${BUILD_DIR}/${CONFIGURATION}- 
iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"


cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" 
"${PROJECT_DIR}"

open "${PROJECT_DIR}"

그런 다음 시뮬레이터와 iOS 장치를 구축하면 프로젝트 폴더가 열리고 뚱뚱한 프레임워크가 그곳에 있을 것입니다.

나의 경우 Pod 'MessageKit', '~> 3.3.0'에 이 문제가 있지만 배포 정보를 iOS 13의 MessageKit All Done으로 변경하기 때문에 이 경고를 표시합니다.

Xcode 12에서는 Valid Archs를 사용할 수 없으므로 +를 누르고 VALID_ARCHS를 x86_64 및 추가 아키텍처와 함께 입력하여 사용자 정의 설정을 만듭니다.

오직 이것만이 나에게 효과가 있었습니다.이 코드를 포드 파일의 맨 아래에 붙여넣고 포드 설치를 실행합니다.

post_install do |installer|   installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "x86_64"   
end 
end

프로젝트 및 포드 프로젝트 파일 모두에 대한 아키텍처 설정을 변경해야 합니다.

프로젝트 설정을 선택한 후 쓰기Architecture검색란에 있습니다.그런 다음 모든 대상에 대해 'Build Active Architecture Only'를 false NO로 변경합니다.

그 다음 추가x86_64-apple-ios-simulator건축물에 적합합니다.

Pods 프로젝트 설정에서도 동일한 작업을 수행해야 합니다.

나에게 그것은 부족한 설정이었습니다.Xcode에서 File(파일)-> Workspace Settings(작업영역 설정)로 이동합니다.빌드 시스템에서 "레거시 빌드 시스템"으로 변경합니다.

다시 실행하고 새 프레임워크 복사

언급URL : https://stackoverflow.com/questions/56957632/could-not-find-module-for-target-x86-64-apple-ios-simulator

반응형