>source

SPM 패키지가 포함 된 iOS 앱을 제출하려고 할 때새로운 바이너리 타겟 다음 두 오류와 함께 제출이 실패합니다.

Invalid Swift Support. The file MyApp.app/Frameworks/libHello.a doesn’t have the correct file type for this location. Ensure you’re using the correct file, rebuild your app using the current public (GM) version of Xcode, and resubmit it.
Invalid Bundle Structure - The binary file 'MyApp.app/Frameworks/libHello.a' is not permitted. Your app can’t contain standalone executables or libraries, other than a valid CFBundleExecutable of supported bundles. Refer to the Bundle Programming Guide at https://developer.apple.com/go/?id=bundle-structure for information on the iOS app bundle structure.

수동으로 드래그 할 때 SPM과 관련이 있다고 생각합니다. Hello.xcframework 프로젝트에 패키지를 추가하면 성공적으로 제출할 수 있습니다.

Xcode 빌드 설정 변경, package.swift 사용자 정의 및 lipo를 사용하여 아키텍처 슬라이스가 유효한지 확인하는 것과 같은 다른 작업을 시도하는 것은 어쨌든 결과로 이어지지 않습니다.

빌드 단계에서 임베드 프레임 워크를 살펴 보았지만 링크 프레임 워크 단계에만 포함되지 않았습니다. 내가 알아 차린 한 가지는 앱을 보관할 때 정적 라이브러리 libHello.a가 앱의 프레임 워크 폴더에 있었는데, 앱 바이너리와 통합되어 있으면 안되기 때문에 이상합니다. 해당 파일을 삭제하면 문제없이 앱 제출을 계속할 수 있습니다. 그러나 저는이 해결 방법이 장기적으로 이상적이라고 생각하지 않습니다.

나는 일을 단순하게 유지하기 위해 하나의 클래스와 메소드로 간단한 정적 라이브러리를 만들었습니다. 그런 다음 Xcode 아카이브를 사용하여 XCFramework에서 결과 정적 라이브러리를 사용합니다. xcodebuild -create-xcframework . 보다Github Repo:https://github.com/shams-ahmed/Hello

재현 단계 :

  • 새 Xcode 프로젝트 만들기
  • URL이있는 SPM 인터페이스를 사용하여 Hello SPM 패키지를 추가하십시오.https://github.com/shams-ahmed/Hello
  • 프로젝트 보관
  • 앱 유효성 검사
  • 모든 옵션을 선택 취소 할 수 있습니다.
  • 위의 오류 메시지와 함께 실패합니다.

SPM이 정적 라이브러리로 작업하려면 어떻게해야합니까? 이것은 이제 Xcode 12 및 Swift 5.3에서 지원됩니다.

정보 :

  • Xcode 12.0
  • 스위프트 5.3
  • 새로운 Xcode 프로젝트 사용
  • 추신은 정적 라이브러리를 사용해야합니다.

  • 답변 # 1

    xcframework가있는 .binaryTarget은 동적 프레임 워크와 연결되어 있고 XCode는 애플리케이션의 바이너리에 연결하는 대신 .app의 Frameworks 폴더로 xcframework에서 플랫폼 종속 엔터티를 복사하기 때문에 정적 라이브러리 (.a 파일)에서는 불가능한 것처럼 보입니다.

    XCode 빌드 로그 :

    PBXCp .../Hello.xcframework/ios-x86_64-simulator/libHello.a .../Test.app/Frameworks/libHello.a
    
    

    두 가지 솔루션이 있습니다.

    라이브러리 소스를 동적 프레임 워크로 컴파일하고 여기에서 xcframework를 만듭니다.

    .a 파일 만있는 경우 정적 라이브러리를 연결하고 이에 대한 API 액세스를 제공하는 동적 프레임 워크 래퍼를 만든 다음 xcframework를 만들 수 있습니다.

  • 이전 python - 데이터 프레임에서 개체를 int로 변환 할 때 오류를 건너 뛰는 쉬운 방법이 있습니까?
  • 다음 sql - Postgres는 json 배열을 쿼리하여 조건과 일치하는 개수를 찾습니다