programing

Xcode 7에서 프로젝트 및 cocoapods 종속성에 대한 비트 코드를 비활성화 하시겠습니까?

copysource 2021. 1. 16. 20:39
반응형

Xcode 7에서 프로젝트 및 cocoapods 종속성에 대한 비트 코드를 비활성화 하시겠습니까?


프로젝트 및 cocoapod 종속성에 대해 비트 코드를 비활성화하려면 어떻게해야합니까? 다음은 Xcode 7로 프로젝트를 실행하려고 할 때 발생하는 오류입니다.

비트 코드를 포함하지 않습니다. 비트 코드를 활성화하여 (Xcode 설정 ENABLE_BITCODE) 다시 빌드하거나, 공급 업체로부터 업데이트 된 라이브러리를 얻거나,이 대상에 대해 비트 코드를 비활성화해야합니다. arm64 아키텍처 용

편집 : 원래 대상 중 하나에 대해서만 비활성화했습니다. 일단 모두 비활성화하고 성공적으로 구축 할 수있었습니다.


당신이 할 때마다 오버라이드 (override)하지 않는 방식에서이 설정을 설정하려면 pod install이를 위해 추가 할 수 있습니다Podfile

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

전체 비트 코드로 CocoaPods의 타겟을 빌드하는 방법이 있습니다. 각 항목 -fembed-bitcode옵션을 추가 하기 만하면 OTHER_CFLAGS됩니다.

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      cflags = config.build_settings['OTHER_CFLAGS'] || ['$(inherited)']
      cflags << '-fembed-bitcode'
      config.build_settings['OTHER_CFLAGS'] = cflags
    end
  end
end

이 방법이 비트 코드를 비활성화하는 것보다 낫다고 생각합니다.


project 'frameworkTest.xcodeproj'

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'

target 'frameworkTest' do
  # Uncomment this line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for frameworkTest
  source 'https://github.com/CocoaPods/Specs.git' 


#zip files libs
  pod 'SSZipArchive'

#reachability 
  pod 'Reachability'

end

#bitcode enable
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|

      # set valid architecture
      config.build_settings['VALID_ARCHS'] = 'arm64 armv7 armv7s i386 x86_64'

      # build active architecture only (Debug build all)
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'

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

      if config.name == 'Release' || config.name == 'Pro'
          config.build_settings['BITCODE_GENERATION_MODE'] = 'bitcode'
      else # Debug
          config.build_settings['BITCODE_GENERATION_MODE'] = 'marker'
      end

      cflags = config.build_settings['OTHER_CFLAGS'] || ['$(inherited)']

      if config.name == 'Release' || config.name == 'Pro'
          cflags << '-fembed-bitcode'
      else # Debug
          cflags << '-fembed-bitcode-marker'
      end      

      config.build_settings['OTHER_CFLAGS'] = cflags
    end
  end
end

비활성화하려는 대상의 빌드 설정으로 이동하십시오. "비트 코드 활성화"라고 표시된 항목을 검색하고 아니요로 설정합니다.


메인 프로젝트 및 포드에서 비트 코드 비활성화

다른 답변은 주 프로젝트의 비트 코드 플래그를 지우는 데 실패합니다. Cocoapod의 Post-Install 후크는 메인 프로젝트에 대한 액세스를 제공하지 않습니다. 이것이 디자인 선택이라고 생각하므로 프로젝트 파일을 찾아 xcodeproj를 사용하여 수정해야합니다 . 바이너리 라이브러리에 비트 코드가 포함 된 xcrun bitcode_strip경우 프로젝트를 일관성있게 만들기 위해 비트 코드를 제거하는 데 사용해야 합니다.

두 가지 도우미 기능

def disable_bitcode_for_target(target)
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'

      remove_cflags_matching(config.build_settings, ['-fembed-bitcode', '-fembed-bitcode-marker'])
    end
end

def remove_cflags_matching(build_settings, cflags)
  existing_cflags = build_settings['OTHER_CFLAGS']

  removed_cflags = []
  if !existing_cflags.nil?
    cflags.each do |cflag|
      existing_cflags.delete_if { |existing_cflag| existing_cflag == cflag && removed_cflags << cflag }
    end
  end

  if removed_cflags.length > 0
    build_settings['OTHER_CFLAGS'] = existing_cflags
  end
end

설치 후 단계

post_install do |installer|    
  project_name = Dir.glob("*.xcodeproj").first
  project = Xcodeproj::Project.open(project_name)
  project.targets.each do |target|
    disable_bitcode_for_target(target)
  end
  project.save

  installer.pods_project.targets.each do |target|
    disable_bitcode_for_target(target)
  end

  installer.pods_project.save
end

자신의 개발 포드에 대한 비트 코드를 비활성화하려면 프로젝트의 포드 파일에 아래 코드 만 추가하십시오.

post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == "YOUR SDK TARGET NAME"
            puts "Processing for disable bit code in YOUR SDK TARGET NAME SDK"
            target.build_configurations.each do |config|
                config.build_settings['ENABLE_BITCODE'] = 'NO'
            end
        end
    end
end

여러 xcodeproj 생성을 활성화 한 경우 cocoapods 1.7 이상에 대한 업데이트 :

install! 'cocoapods', :generate_multiple_pod_projects => true

<Pod list section>

post_install do |installer|
    installer.pod_target_subprojects.each do |subproject|
        subproject.targets.each do |target|
            target.build_configurations.each do |config|
                config.build_settings['ENABLE_BITCODE'] = 'NO'
            end
        end
    end
end

ReferenceURL : https://stackoverflow.com/questions/32640149/disable-bitcode-for-project-and-cocoapods-dependencies-with-xcode-7

반응형