programing

iOS 라이브러리에서 BitCode로

goodsources 2022. 7. 26. 23:43
반응형

iOS 라이브러리에서 BitCode로

최근에 Xcode 7 베타 버전을 다운로드했는데, Xcode가 C 라이브러리의 일부가 BitCode로 컴파일되지 않았다고 불평합니다.Clang에게 iOS에 대응한 Bit Code를 제작하도록 어떻게 전달하면 좋을까요?stackoverflow에서도 비슷한 답변을 본 적이 있지만 iOS용 BitCode 라이브러리 제작에 적용되는지 모르겠습니다.

편집:

올바른 설정인 -fembed-bitcode를 사용하고 있는데 아카이브하려고 하면 ld: warning: ignoring file XXX/XXXX, file is builded for archive (architecture가 아닌 아카이브용으로 작성되었습니다)라는 오류가 나타납니다(arm64).-fembed-bitcode-marker를 사용하면 아카이브할 수 있지만 XX/XX는 비트코드 마커만으로 구축되었기 때문에 완전한 비트코드 번들을 생성할 수 없습니다.라는 오류가 나타납니다.라이브러리는 비트 코드가 활성화된 Xcode 아카이브 빌드에서 생성되어야 합니다.

뭐가 잘못되고 있는지 짐작 가는 거라도?라이브러리가 성공적으로 컴파일되고 있지만 아카이브할 수 없습니다.심플한 추가 기능을 만들어 라이브러리로 만들었습니다만, 같은 증상이 나타나기 때문에 컴파일하고 있는 것은 라이브러리가 아닙니다.

편집 2: 비트 코드를 사용하여 arm64 버전과 armv7 버전을 모두 빌드하고 함께 리포해야 합니다.비트코드를 사용해도 아카이브 시 팻 라이브러리가 필요하지 않습니다.소스 : 링크

스태틱 라이브러리를 구축할 때는 비트코드 생성을 위해 다음 항목을 추가해야 합니다.

-fembed-bitcode 

동적 라이브러리의 경우 추가 링크 필요

-fembed-bitcode

주의: 이 명령어는 Xcode7+에서만 사용할 수 있습니다.

-fembed-bitcode-marker

-fembed-bitcode-marker 옵션을 사용하는 일반 빌드는 실제 콘텐츠 없이 최소 크기의 내장 비트코드 섹션을 생성합니다.이는 빌드 프로세스의 속도를 늦추지 않고 빌드의 비트 코드 관련 측면을 테스트하는 방법으로 수행됩니다.실제 비트 코드 내용은 아카이브 빌드를 수행할 때 포함됩니다.

빌슨 애플 직원https://forums.developer.apple.com/thread/3971#12225


좀 더 구체적으로 말하면:

  • -fembed-bitcode-marker아카이브 빌드 후 바이너리에서 비트코드가 어디에 있는지 표시하기만 하면 됩니다.
  • -fembed-bitcode는 실제로 완전한 비트코드 생성과 임베딩을 수행하므로 정적 라이브러리를 구축하기 위해 사용해야 합니다.
  • 에는 Xcode가 포함되어 .-fembed-bitcode-marker로의 전개)
  • 는 Xcode로 .-fembed-bitcode★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

필요한 것은 -fembed-bitcode 입니다.ENABLE_B의 경우ITCODE가 활성화되어 있습니다. Xcode는 일반 빌드에서는 -fembed-bitcode-marker를 사용하여 빌드되고 아카이브 빌드에서는 -fembed-bitcode를 사용하여 빌드됩니다.한 가지 옵션은 단순히 아카이브 빌드 후에 비트 코드가 바이너리에 있는 곳을 "표시"하여 새로운 비트 코드 규칙을 적용하는 반면, 다른 옵션은 실제로 풀 온 비트 코드 생성을 수행하는데, 이는 속도가 느리기 때문에 모든 종류의 빌드에서는 활성화되지 않습니다.

BITCODE의 취급에 관한 이케다 시오의 가이드는 다음과 같은 도움이 될 수 있습니다.

슬라이드 덱은 이쪽에서 찾을 수 있습니다.

빌드 설정으로 이동합니다."커스텀 컴파일러 플래그"를 검색합니다.
-fembed-bitcode기타 C 플래그에 접속합니다.이를 통해 lib는 컴파일 시 비트코드 호환성을 갖추고 구축됩니다.iOS 64비트, 32비트용으로 만들어 하나로 만들었습니다.마법처럼 작동한다.

질문이 있었으므로, 다음은 설정의 스크린샷입니다.프로젝트 대상과 SDK 대상에 대한 설정이 동일합니다.

여기에 이미지 설명 입력


비트코드 lib는 Xcode 6에서는 동작하지 않습니다.

-fembed-bitcode「C」 「빌드 옵션」 「이네이블 비트 코드」는 「아니오」입니다.이렇게 하면 올바르게 아카이브할 수 있습니다.

스태틱 라이브러리를 구축하고 비트 코드를 활성화하려면 (1) ENABLE_B만 있으면 됩니다.ITCODE = 예로는 충분하지 않을 수 있습니다.

(2) (2)의 설정과 -fembed-bitcodeTeamcity에 구축되었을 때 여러 파일에 대해 아래 오류가 여전히 발생하였습니다.

bitcode bundle could not be generated because ‘/path/fileInYourStaticLib.a(fileInYourStaticLib.o)’ was built without full bitcode. All object files and libraries for bitcode must be generated from Xcode Archive or Install build for architecture arm64

상기 (1)과 (2) 외에 최종적으로 문제를 해결하는 데 도움이 되는 몇 가지 힌트/검토해야 할 사항

  1. PROJECT 및 모든 TARGET에서 변수 'Other C Flags'를 "-fembed-bitcode"로 설정해야 합니다.

  2. 가 여러 개 있는 , 모든 에 「」가 있는 것을 합니다."-fembed-bitcode"★★★★★★★★★★★★★★★★★★.

  3. On Build Settings, click on the + sign at the top to add a user-defined build setting with the nameBITCODE_GENERATION_MODE의 , and set Debug to, Release to 코드

  4. 위의 단계가 작동하지 않는 경우 이 옵션을 사용해 보십시오. On Build Settings -> Other C flags, set Debug to- , and Release to- " "

이 블로그는 https://medium.com/@heitorburger/static-heitor-secode-and-bitcode-6d8f784478a9에 큰 도움이 되었습니다.

또, 상기의 변경을 실시할 때마다, Derived Data 를 삭제해, XCode 프로젝트를 클리닝 해, XCode 를 종료해 재기동해 주세요.

나 같은 미래의 남자들을 위해 몇 가지 세부사항을 덧붙이려고.

유니티에서 iOS로 빌드할 때 libVivoxNative.a에서 이 문제가 발생하였습니다.4개의 다른 위치에서 비트 코드를 비활성화해야 했습니다.

스크린샷

원래는 프로젝트나 테스트/UnityFramework가 아니라 타겟인 Unity-iPhone용으로 설정했을 뿐입니다.4개 모두의 설정을 변경한 것이 효과가 있었습니다.

언급URL : https://stackoverflow.com/questions/31233395/ios-library-to-bitcode

반응형