Ich habe ein Swift Framework, das wir kompilieren und an Entwickler von Drittanbietern verteilen. Ich möchte etwas C-Code in das Projekt einfügen, aber die einzige Möglichkeit, es zum Laufen zu bringen, besteht darin, den C-Header in den Header meines Frameworks zu importieren und den C-Header als öffentlich zu definieren. Dies stellt den gesamten C-Code den Drittentwicklern zur Verfügung, was nicht das ist, was wir wollen.Wie kompiliere ich C-Code in Swift Framework
Alles, was ich finden kann online, wie dies zu tun ist eine Variante dieser Methode: https://spin.atomicobject.com/2015/02/23/c-libraries-swift/
Aber der Nachteil dieser Methode wird als „Beachten Sie, dass die Verbraucher über Frameworks Sie diese Technik bauen mit gehen, um auch haben um das Modul ihren Swift-Suchpfaden hinzuzufügen. " Und das haben wir ausprobiert, und unsere Entwickler von Drittanbietern erhalten einen Fehler Missing required module 'CGeodesic'
, der das Modul ist, das wir auf die C-Kopfzeile definiert haben.
Wie können wir nur den C-Code direkt in unser Framework kompilieren, während der Code privat bleibt und keine Entwickler von Drittanbietern ihre Build-Einstellungen ändern müssen, damit es funktioniert? Es macht mir nichts aus, diese Submodule in unserem Projekt einzurichten, aber am Ende des Tages möchte ich, dass es direkt in ein einziges Flat-Framework-Binary kompiliert wird, ohne dynamische Verknüpfungen oder Suchpfade oder ähnliches.
bearbeiten
Das Projekt ist C-Code Side-by-Side mit Swift-Code. Ich habe ein Unterverzeichnis in meinem Projekt, das wie folgt aussieht:
- Geodätische/
- Geodesic.h
- Geodesic.c
- Geodesic.swift
Die Die Swift-Datei umschließt den C-Code, damit die Arbeit sauberer wird. Ich hatte auch eine modul.modulemap-Datei in diesem Verzeichnis, aber wie ich schon sagte, das hat nicht funktioniert. Ich würde es vorziehen, den C-Code Seite an Seite mit meinem Swift-Code zu halten, aber ich bin bereit, das aufzugeben, um dieses Problem zu lösen.
Was ist Ihre aktuelle Konfiguration? C-Code Seite an Seite mit Swift-Code? – zneak
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/MixandMatch.html. Hilft das? C-Code ist Objective-C, und es sieht so aus, als könnte man ein Framework in einer Mischung aus C und Swift schreiben, und es wird den Benutzern so erscheinen, als ob es in einer einzigen Sprache geschrieben wäre. Ich habe das selbst noch nicht ausprobiert. – OmniProg
@OmniProg also das machen wir gerade. Das Problem mit dieser Methode besteht darin, dass sie alle diese Header notwendigerweise öffentlich verfügbar macht, was wir zu vermeiden versuchen. – user1084447