web-dev-qa-db-de.com

Bitcode für Projekt- und Kokosapod-Abhängigkeiten mit Xcode7 deaktivieren?

Wie können Sie den Bitcode für Ihr Projekt und die Abhängigkeit von Cocoapod deaktivieren? Hier ist der Fehler, den ich bekomme, wenn ich versuche, mein Projekt mit Xcode 7 auszuführen. 

enthält keinen Bitcode. Sie müssen es mit aktiviertem Bitcode (Xcode-Einstellung ENABLE_BITCODE) neu erstellen, eine aktualisierte Bibliothek vom Hersteller erhalten oder den Bitcode für dieses Ziel deaktivieren. für die Architektur arm64

Bearbeiten: Ursprünglich nur für eines der Ziele deaktiviert. Einmal habe ich alle deaktiviert und ich konnte erfolgreich bauen.

49
jherg

Um diese Einstellung auf eine Weise festzulegen, die nicht jedes Mal überschrieben wird, wenn Sie einen pod install ausführen, können Sie dies Ihrer Podfile hinzufügen

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

Es gibt eine Möglichkeit, CocoaPods-Ziele mit vollem Bitcode zu erstellen. Fügen Sie einfach die -fembed-bitcode-Option zu OTHER_CFLAGS von jedem hinzu:

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

Ich denke, dieser Weg ist besser als das Deaktivieren von 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

Zum Deaktivieren des Bitcodes nur für Ihren eigenen Entwicklungs-Pod Fügen Sie den folgenden Code in der Pod-Datei der Projekte hinzu.

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

Wechseln Sie zu den Build-Einstellungen für das Ziel, auf dem Sie es deaktivieren möchten. Suchen Sie nach etwas, das "Bitcode aktivieren" lautet, und setzen Sie es auf Nein.

1
Kris Gellci

Deaktivieren des Bitcodes im Hauptprojekt und in den Pods

Die anderen Antworten können das Bitcode-Flag für das Hauptprojekt nicht löschen. Die Post-Install-Hooks des Cocoapod geben Ihnen keinen Zugriff auf das Hauptprojekt. Ich glaube, dies ist eine Designauswahl. Sie müssen die Projektdatei finden und sie mit xcodeproj ändern. Wenn eine binäre Bibliothek Bitcode enthält, müssen Sie den Bitcode mit xcrun bitcode_strip entfernen, um das Projekt konsistent zu machen. 

Zwei Hilfsfunktionen

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-Phase

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

Update für cocoapods 1.7+, wenn Sie mehrere xcodeproj-Generierungen aktiviert haben:

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
0
Yuriy Pavlyshak