ios - actualizar - ¿Deshabilitar código de bits para dependencias de proyecto y cocoapods con Xcode 7?
cocoapods swift 4 (7)
¿Cómo puede deshabilitar el código de bits para su proyecto y las dependencias de cocoapod? Aquí está el error que obtengo cuando intento ejecutar mi proyecto con Xcode 7.
no contiene código de bits Debe reconstruirlo con el código de bits habilitado (configuración de Xcode ENABLE_BITCODE), obtener una biblioteca actualizada del proveedor o deshabilitar el código de bits para este objetivo. para arquitectura arm64
Editar: Originalmente solo lo deshabilitó para uno de los objetivos. Una vez que los desactivé todos y pude construir con éxito.
Deshabilitar código de bits en el proyecto principal y pods
Las otras respuestas no borran el indicador de código de bits para el proyecto principal.
Los ganchos posteriores a la instalación del Cocoapod no le dan acceso al proyecto principal, creo que esta es una opción de diseño, por lo que debe encontrar el archivo del proyecto y modificarlo usando
xcodeproj
.
Si una biblioteca binaria incluye código de bits, deberá usar
xcrun bitcode_strip
para eliminar el código de bits para que el proyecto sea coherente.
Dos funciones de ayuda
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
Fase posterior a la instalación
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
Actualice para cocoapods 1.7+ si ha habilitado la generación múltiple de 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
Hay una manera de construir los objetivos de CocoaPods con código de bits completo.
Simplemente agregue la opción
-fembed-bitcode
a
OTHER_CFLAGS
de cada uno:
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
Creo que de esta manera es mejor que deshabilitar el código de bits.
Para desactivar el código de bits para su propio pod de desarrollo, solo agregue este código a continuación en el archivo pod de los proyectos.
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
Para establecer esta configuración de manera que no se anule cada vez que realice una
pod install
, puede agregar esto a su
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
Vaya a la configuración de compilación para el objetivo en el que desea deshabilitarlo. Busque algo que diga "Habilitar código de bits", configúrelo en No.
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