Neue Warnungen in iOS 9: "Der gesamte Bitcode wird gelöscht."

387

Ich habe diese neue Warnung zum Google Framework in meiner App:

(null): DRINGEND: Der gesamte Bitcode wird gelöscht, da '/ Benutzer / mein Name / Bibliothek / Mobile Dokumente / com ~ apple ~ CloudDocs / Ordnername / Anwendungsname / GoogleMobileAds.framework / GoogleMobileAds (GADSlot + AdEvents.o)' ohne Bitcode erstellt wurde . Sie müssen es mit aktiviertem Bitcode neu erstellen (Xcode-Einstellung ENABLE_BITCODE), eine aktualisierte Bibliothek vom Hersteller erhalten oder den Bitcode für dieses Ziel deaktivieren. Hinweis: Dies wird in Zukunft ein Fehler sein.

Xcode 7 gibt mir ungefähr 204 Warnungen zu demselben Konzept, und ich konnte damit nicht umgehen. Außerdem habe ich ein Problem beim Zugriff auf das Netzwerk über meine App. Dies ist der Fehler aus dem Debugging-Bereich:

-canOpenURL: fehlgeschlagen für URL: "kindle: // home" - Fehler: "Diese App darf nicht nach Schema kindle abfragen"

Alle diese Probleme waren in iOS 8 nicht vorhanden.

C. Farrugia
quelle
Sie haben also Bitcode in Ihrem Xcode-Ziel aktiviert?
Droppy
Entschuldigung, ich bin neu in diesem Bereich. Können Sie mir bitte sagen, wie?
C. Farrugia
Ich habe es noch nie gemacht, aber es scheint etwas zu sein, das man absichtlich einstellen muss. Sie scheinen das getan zu haben.
Droppy
4
@Droppy AFAIK Die Einstellung ist standardmäßig aktiviert, Sie können sie jedoch jederzeit in Ihren Projekteinstellungen deaktivieren.
HAT
Ich schaltete sie aus und alle Warnungen gingen weg. Ich habe ein bisschen recherchiert und Google muss sein Framework aktualisieren, damit dieser Fehler behoben wird. Bis jetzt funktioniert es, wenn Sie es nur ausschalten. Kennt jemand die -canOpenURL: fehlgeschlagen für URL: "kindle: // home" - Fehler: "Diese App darf nicht nach Schema kindle abfragen"? Ich habe keine Ahnung, wovon Xcode spricht
C. Farrugia

Antworten:

1023

Ihre Bibliothek wurde ohne Bitcode kompiliert, aber die Bitcode-Option ist in Ihren Projekteinstellungen aktiviert. Sagen Sie NOzu Enable BitcodeIhren Ziel Build - Einstellungen und die Bibliothek Build - Einstellungen , um die Warnungen zu entfernen.

Für diejenigen, die sich fragen, ob die Aktivierung des Bitcodes erforderlich ist:

Für iOS-Apps ist Bitcode die Standardeinstellung, jedoch optional. Für watchOS- und tvOS-Apps ist Bitcode erforderlich. Wenn Sie Bitcode bereitstellen, müssen alle Apps und Frameworks im App-Bundle (alle Ziele im Projekt) Bitcode enthalten.

https://help.apple.com/xcode/mac/current/#/devbbdc5ce4f

Zia
quelle
@Centurion Die vorherige Google Analytics-Bibliothek ist veraltet und wird auch nicht mit xcode 7 / ios9 kompiliert
zonabi
1
@goelv Ja, Sie sollten in der Lage sein, Apps mit deaktiviertem Bitcode einzureichen. es ist momentan optional. es kann in Zukunft erforderlich werden.
Zonabi
2
Hat bei mir NICHT für die Archivierung funktioniert. Pre XCODE 7-Projekt funktionierte einwandfrei, kann jetzt nicht ARCHIVIEREN, selbst wenn Enable Bitcode auf NO gesetzt ist. Dies ist für die AWS-Bibliothek.
ort11
1
Nach dem Deaktivieren von Bitcode auf allen Zielen wird weiterhin der Fehler angezeigt.
datWooWoo
110

Nach Xcode 7 ist die Bitcode-Option standardmäßig aktiviert. Wenn Ihre Bibliothek ohne Bitcode kompiliert wurde, die Bitcode-Option jedoch in Ihren Projekteinstellungen aktiviert ist, können Sie:

  1. Aktualisieren Sie Ihre Bibliothek mit Bitcode.
  2. Sagen Sie NEIN, um Bitcode in Ihren Ziel- Build-Einstellungen zu aktivieren

Geben Sie hier die Bildbeschreibung ein

Und die Library Build Settings, um die Warnungen zu entfernen.

Weitere Informationen finden Sie in der Dokumentation zum Bitcode in der Entwicklerbibliothek .

Und WWDC 2015 Session 102: "Platforms State of the Union"

Geben Sie hier die Bildbeschreibung ein

ElonChan
quelle
42

In meinem Fall zur Vermeidung dieses Problems:

  1. Stellen Sie sicher, dass Sie mit Xcode 7 arbeiten , NICHT mit niedrigeren Versionen. In der unteren Version existiert dieses Flag nicht.

  2. Setup: Projekt> Build-Einstellungen> Alle> Build-Optionen> Bitcode aktivieren = NO

Geben Sie hier die Bildbeschreibung ein

Javier Calatrava Llavería
quelle
2
Daher müssen Sie die in Ihrem Projekt enthaltenen Bibliotheken mit XCode7 neu kompilieren und EnableBitcode auf YES setzen. Sehr kompliziert, wenn Sie mit .a-Bibliotheken von Drittanbietern arbeiten.
Javier Calatrava Llavería
15

Die Methode wurde canOpenUrlin iOS 9 (aus Datenschutzgründen) geändert und kann nicht mehr kostenlos verwendet werden. Ihr Banneranbieter sucht nach installierten Apps, damit keine Banner für eine bereits installierte App angezeigt werden.

Das gibt alle log-Anweisungen wie

-canOpenURL: fehlgeschlagen für URL: "kindle: // home" - Fehler: "Diese App darf nicht nach Schema kindle abfragen"

Die Anbieter sollten hierfür ihre Logik aktualisieren.

Wenn Sie nach installierten Apps / verfügbaren Schemata fragen müssen, müssen Sie diese Ihrer info.plistDatei hinzufügen .

Fügen Sie den Schlüssel 'LSApplicationQueriesSchemes' als Array zu Ihrer Liste hinzu. Fügen Sie dann Zeichenfolgen wie 'kindle' in dieses Array ein.

Natürlich ist dies keine Option für die Bannerwerbung (da diese dynamisch sind), aber Sie können auf diese Weise immer noch nach Ihren eigenen Apps oder bestimmten anderen Apps wie Twitter und Facebook fragen.

Dokumentation der canOpenUrl: -Methode canOpenUrl:

Dokumentation zum LSApplicationQueriesSchemes-Schlüssel

Saren Inden
quelle
Angenommen, eine statische Bibliothek überprüft den Deeplink einer übergeordneten App. Wie wird die Ausnahme 'LSApplicationQueriesSchemes' in der statischen Bibliothek verwendet? Normalerweise haben Sie dafür keine Info.plist.
Loretoparisi
Ich bin mir da nicht sicher. Wenn eine Bibliothek nach Apps außerhalb ihres übergeordneten Elements suchen muss, sollte das übergeordnete Element die URLs in seiner info.plist definieren (also dokumentieren Sie sie für das Framework). Wenn canOpenUrl auch keinen Willen zurückgibt, kann die übergeordnete App damit umgehen, dann sollten Sie (ich nehme an) auch diejenigen in die info.plist aufnehmen
Saren Inden
13

Wenn Sie CocoaPods verwenden und Bitcode für alle Bibliotheken deaktivieren möchten, verwenden Sie den folgenden Befehl in der Poddatei

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
Eike
quelle
8

Haftungsausschluss: Dies ist für diejenigen gedacht, die einen kontinuierlichen Integrationsworkflow unterstützen , der einen automatisierten Prozess erfordert. Wenn Sie dies nicht tun, verwenden Sie bitte Xcode wie in Javiers Antwort beschrieben .

Das hat bei mir ENABLE_BITCODE = NOüber die Kommandozeile eingestellt:

find . -name *project.pbxproj | xargs sed -i -e 's/\(GCC_VERSION = "";\)/\1\ ENABLE_BITCODE = NO;/g'

Beachten Sie, dass dies in allen Xcode-Versionen wahrscheinlich instabil ist. Es wurde mit Xcode 7.0.1 und im Rahmen eines Cordova 4.0-Projekts getestet.

Miraculixx
quelle
-2

Dieses Problem wurde kürzlich (November 2010) von Google behoben (siehe https://code.google.com/p/analytics-issues/issues/detail?id=671) . Aber sei dir bewusst, dass es als gute Lösung mehr Fehler bringt :)

Sie müssen auch die hier aufgeführte Initialisierungsmethode befolgen: https://developers.google.com/analytics/devguides/collection/ios/v2 .

Die neuesten Anweisungen bereiten Ihnen Kopfschmerzen, da sie auf Dienstprogramme verweisen, die nicht im Pod enthalten sind. Unten wird mit dem Cocoapod versagen

// Configure tracker from GoogleService-Info.plist.
NSError *configureError;
[[GGLContext sharedInstance] configureWithError:&configureError];
NSAssert(!configureError, @"Error configuring Google services: %@", configureError);
user1119517
quelle