iPhone 애플리케이션을 빌드 할 때이 오류가 발생합니다.
ld : 경고 : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, 파일에 필수 아키텍처 i386 누락
내 앱의 모든 프레임 워크에 대해 동일합니다. 이것은 더 일찍 일어나지 않았기 때문에 매우 이상합니다.
iPhone 애플리케이션을 빌드 할 때이 오류가 발생합니다.
ld : 경고 : /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, 파일에 필수 아키텍처 i386 누락
내 앱의 모든 프레임 워크에 대해 동일합니다. 이것은 더 일찍 일어나지 않았기 때문에 매우 이상합니다.
답변:
이는 프로젝트에 프레임 워크를 추가하고 의도하지 않게 프레임 워크를 프로젝트 디렉토리에 복사 할 때 발생합니다.
수정은 모든 iphone SDK * .Framework 파일에 대한 프로젝트 디렉터리 (디스크에 프로젝트를 저장하는 위치)를 확인하고 삭제하는 것입니다.
프로젝트는 나중에 잘 구축됩니다.
나는 똑같은 문제가 있었고 해결책은 쉬운 해결책으로 판명되었습니다. 백업 한 다음 TextMate 또는 TextEdit에서 project.pbxproj (프로젝트 파일 번들 내에 있음)를 열고 "/ * Begin XCBuildConfiguration section * /"섹션을 검색합니다. FRAMEWORK_SEARCH_PATHS라는 키를 찾아서 삭제하고 내용을 삭제합니다 (빌드 구성 당 한 번, 그래서 두 곳에서 제거했습니다). 다음은 내가 삭제 한 항목의 예입니다.
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);
내 프로젝트는 이제 iPhone 장치와 iPhoneSimulator 모두에 대해 빌드됩니다.
여기서 일어난 일은 Xcode가 특정 iPhone 장치 SDK를 가리키는 "Framework Search Paths"항목을 신비스럽게 추가했다는 것입니다. 예를 들어, 광산은 최근 다음과 같이 설정되었습니다.
$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks
이로 인해 컴파일러는 잘못된 아키텍처의 프레임 워크를 찾습니다. 대상 빌드 설정에서 "Framework Search Paths"키 아래의 값을 제거하면 문제가 해결됩니다.
XCode에서 "Edit Project Settings"로 이동하여 "Search Paths"를 찾으면 "Framework Search Paths"필드가 있습니다. 이것을 업데이트하면 프로젝트 파일을 해킹하지 않고도 문제가 해결됩니다!
건배!
제시
이 오류가 발생한 이유는 내 프로젝트에 security.framework를 두 번 추가했기 때문입니다. xcode에서 보안 프레임 워크를 볼 수 없었고, 파인더에서 프로젝트를 열고이 프레임 워크를 찾았습니다. 내가 삭제하고 문제가 해결되었습니다.
무언가가 삭제되었을 가능성이 있지만 프로젝트 파일에서 무언가가 망가진 것은 내 경험이었습니다. 나는 그 "무언가"가 무엇인지 아직 파악하지 못했다. SDK 설치가 정상일 때 비슷한 문제가 발생했습니다. 몇 가지 옵션이 있습니다.
먼저 모든 파일을 새 프로젝트에 추가하십시오. 이것은 일반적으로 작동하는 것 같습니다. 그래도 약간의 고통.
둘째, XCode / Get Info / Build / Library Search Paths에서 프로젝트를 마우스 오른쪽 버튼으로 클릭 할 수 있습니다. /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib와 유사한 새 경로를 추가합니다. 각 버전 (2.2.1 등) 및 플랫폼 (시뮬레이터 또는 iPhoneOS)에 대해 해당 문자열의 적절한 버전을 추가합니다. 프레임 워크가 문제인 경우 프레임 워크 검색 경로에 대해 유사한 작업을 수행합니다.
셋째, 작업이 더 많지만 더 신뢰할 수있는 것은 MyProject.xcodeproj 내에서 project.pbxproj를 여는 것입니다 (Textmate가 적합합니다). "/ * Begin XCBuildConfiguration 섹션 * /"을 찾은 다음 "LIBRARY_SEARCH_PATHS"및 "FRAMEWORK_SEARCH_PATHS"를 찾습니다. 경로를 적절하게 추가하거나 수정하고 파일을 저장하십시오.
어쨌든, 엉덩이에 통증이 있고, 저는 이런 일이 몇 번 일어났기 때문에 원인을 정확히 찾아 내고 싶습니다. 프로젝트가 잘 구축 된 다음, 그저 이유가 거의없는 것처럼 보이는 작업을 거부합니다.
터미널에서 프레임 워크에서 파일 명령을 실행합니다 .
file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit
UIKit 바이너리가 호환되는 아키텍처를 알려주는 메시지를 받아야합니다. "i386"이 표시되지 않으면 어떻게 든 UIKit의 i386 버전을 제거한 것입니다. 이는 시뮬레이터 용으로 빌드 할 수 없음을 의미합니다.이 문제를 해결하려면 다시 설치해야합니다. SDK.
다른 오류가 발생하면 실제 문제가 무엇인지 파악하는 데 도움이되기를 바랍니다.
내 라이브러리 (WM_GSRecognizerLib)에서 작업하기 때문에 약간 다른 경험이 있었지만 오류는 동일합니다.
무슨 일이 일어날까요? 일부 업데이트로 인해 포함 할 lib (.a)를 대상으로하는 경로는 "Debug-iphoneos"폴더 (생성 된 위치)에서 왔습니다. 일반 iOS 장치 용 컴파일은 잘 작동했지만 시뮬레이터에서는 작동하지 않았으며 누락 된 i386 아키텍처에 대해 불평했습니다.
이 문제에 대해 제가 한 일은 "Debug-iphonesimulator"폴더의 바이너리도 포함하는 것입니다.
여기에 설명이 있기 때문에이 주제에 도움이 될 수 있습니다. 장치에는 arm64 / armv7 / armv7s 용 바이너리가 필요하지만 시뮬레이터에는 i386이 필요합니다.
내 솔루션은 시뮬레이터 대상 디버그 예를 설정하는 것이 었습니다. .project에서만 아키텍처로 추가 된 새 줄을 보려면 git 상태를 확인하십시오. 이것을 설정하지 않으면 빌드가 모든 아키텍처에서 실행되고 i386 또는 기타와 같은 일부 누락 된 아키텍처가 표시됩니다. 주된 문제는 특정 아키텍처를 구현하는 프레임 워크를 사용하는 것입니다.