Отключить битовый код для зависимостей проекта и cocoapods с Xcode7?
Как вы можете отключить битовый код для вашего проекта и зависимости от Cocoapod? Вот ошибка, которую я получаю при попытке запустить мой проект с Xcode 7.
не содержит битовый код Вы должны перестроить его с включенным битовым кодом (настройка Xcode ENABLE_BITCODE), получить обновленную библиотеку от поставщика или отключить битовый код для этой цели. для архитектуры arm64
Изменить: Первоначально только отключил его для одной из целей. Однажды я отключил их все и смог успешно построить.
9 ответов
Чтобы установить этот параметр таким образом, чтобы он не переопределялся при каждом выполнении 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
Чтобы отключить битовый код для вашего собственного модуля разработки, добавьте только этот код ниже в файл проекта.
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
Если у вас есть контроль над .podspec (т.е. предоставление модуля с использованием собственных спецификаций / репозитория git)
s.pod_target_xcconfig = {'ENABLE_BITCODE' => 'NO'}
В дополнение к ответу @werediver:
Если вы хотите включить битовый код, в вашем
post_install
Я предлагаю установить
['ENABLE_BITCODE'] = 'YES'
. Вы также можете добавить свою цель развертывания (чтобы XCode не жаловался). В этом случае:
['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
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
config.build_settings['ENABLE_BITCODE'] = 'YES'
config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
end
end
end
Обновите cocoapods 1.7+, если вы включили многократное создание xcodeproj:
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
Отключение биткода в основном проекте и модулях
Другие ответы не в состоянии очистить флаг битового кода для основного проекта. Перехваты после установки Cocoapod не дают вам доступа к основному проекту, я считаю, что это выбор дизайна, поэтому вам нужно найти файл проекта и изменить его с помощью 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
Перейдите в настройки сборки для цели, на которой вы хотите ее отключить. Найдите что-то с надписью "Enable Bitcode" и установите "Нет".