web-dev-qa-db-fra.com

Désactiver le bitcode pour les dépendances de projet et de cocoapodes avec Xcode7?

Comment pouvez-vous désactiver le bitcode pour vos dépendances de projet et de cocoapod? Voici l'erreur que je reçois en essayant d'exécuter mon projet avec Xcode 7. 

ne contient pas de bitcode. Vous devez le reconstruire avec le code bit activé (paramètre Xcode ENABLE_BITCODE), obtenir une bibliothèque mise à jour du fournisseur ou désactiver le code bit pour cette cible. pour l'architecture arm64

Edit: À l’origine, il ne l’a désactivé que pour l’une des cibles. Une fois, je les ai tous désactivés et j'ai pu construire avec succès.

49
jherg

Pour définir ce paramètre d’une manière qui ne soit pas remplacée à chaque fois que vous faites un pod install, vous pouvez l’ajouter à votre 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
134
Keith Smiley

Il existe un moyen de construire les cibles de CocoaPods avec un bitcode complet. Ajoutez simplement l'option -fembed-bitcode à OTHER_CFLAGS de chaque:

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

Je pense que cette méthode est préférable à la désactivation du bitcode. 

6
werediver
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
2
Romulo Rego

Pour désactiver le bitcode pour votre propre pod de développement uniquement, ajoutez le code ci-dessous dans le fichier pod des projets.

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
1
Rajesh Kumar

Accédez aux paramètres de construction de la cible sur laquelle vous souhaitez le désactiver. Recherchez quelque chose qui dit "Activer le bitcode", réglez-le sur Non.

1
Kris Gellci

Désactivation du bitcode dans le projet principal et les pods

Les autres réponses n'effacent pas l'indicateur de bitcode pour le projet principal. Les crochets post-installation du Cocoapod ne vous donnent pas accès au projet principal. Je pense que c'est un choix de conception. Vous devez donc rechercher le fichier de projet et le modifier à l'aide de xcodeproj . Si une bibliothèque binaire comprend un bitcode, vous devrez utiliser xcrun bitcode_strip pour le supprimer afin de rendre le projet cohérent. 

Deux fonctions d'assistance

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

Phase de post-installation

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
0