Frage

Ich bin in der Anfangsphase der Software für eine Erstellung von mISV-zu-sein. Das Programm ist eine Desktop-Anwendung und auf lange Sicht möchte ich für Windows und OS X eine native Version haben (ich habe eine betrachtete verschiedene Cross-Plattform-APIs, und keiner von ihnen meine Bedürfnisse erfüllen). Zunächst aber, glaube ich nicht, es sinnvoll, für zwei Plattformen auf einmal zu entwickeln macht. Vor diesem Hintergrund habe ich in WPF für Windows und Cocoa gesucht für OS X, und sie scheinen ähnlich.

Hat jemand hatte die Portierung Erfahrung der einen zur anderen? Gibt es bestimmte Techniken / Paradigmen zu folgen, macht die Portierung einfacher? Das Ignorieren geschäftlichen Gründen würden Sie empfehlen, die Entwicklung auf einem von ihnen zuerst?

War es hilfreich?

Lösung

Ich bin derzeit arbeitet an der Portierung Tools in diesem Raum und haben viele Jahre oft schmerzliche Erfahrung in entweder mit oder Schreiben von Cross-Plattform-Frameworks auf Mac und Windows.

Eines der größten Probleme in der Vergangenheit war Weigerung des Apple die Spitze Format für Kakao (Carbon-Nibs waren offene XML-Dateien Jahre) zu öffnen. Das änderte sich mit XCode 3 und dem .xib Format wie auch erklärt von Frasier Speirs .

Auf der Basis-Layout-Ebene, zumindest gibt es nun die Möglichkeit, von einem XML-Format in ein anderes zu portieren zu automatisieren. Ich betrachte WPF (XAML) als sauberes und so bin ich das als meine Basis-Format und die Migration auf Cocoa.

Wenn es um den Code hinter kommt, während Sie C # unter Mono verwenden können, die CocoaSharp Projekt scheint entweder gekippt oder sehr langsam, und ich würde es nicht empfehlen.

Wenn Sie mit C ++ vertraut sind, sollten Sie so viel Logik wie möglich mit in C ++ mit einer dünnen plattformspezifischen Schicht in C # und Objective-C.

Ein weiterer Ansatz einer Untersuchung wert ist eine dynamische Sprache wie Python oder Ruby verwenden. Ich bin mir nicht sicher, welche zwischen Ironpython und IronRuby aber beide werden jetzt von Microsoft Menschen unterstützt. Auf der Cocoa Seite, ich glaube, die Flexibilität von Ruby Syntax triumphieren wird und RubyCocoa wahrscheinlich überholt PyObjC .

Ansonsten Arbeit in C # und Objective-C und hält zwei völlig unabhängige Codebasen mit identischen Design. Zum Glück haben die Rahmenbedingungen vergleichbar Semantik für die meisten Dinge, vor allem, wenn Sie die Verwendung von Bindungen zu machen.

Andere Tipps

Ich denke, dass Sie auf dem richtigen Weg sind durch Windowing-Umgebungen wählen, die auf jeder Plattform spezifisch sind. Dieser Ansatz ermöglicht es Ihnen, eine Benutzererfahrung auf jeder Plattform zu schaffen, die nicht von den Kompromissen inhärenten Cross-Plattform-Windowing Toolkits beschränkt ist.

Ein guter erster Schritt ist, Ihr Design zu brechen in zwei Teile: plattformspezifische und plattformneutrale Elemente. Sie können bereits alle UI-Code in die Plattform bestimmte Spalte setzen, aber vielleicht Ihre Anwendung wird einige Daten Persistenz benötigen, die in plattformneutrale C geschrieben werden kann ++. Was Sie mit diesem Ansatz finden kann, ist, dass es ziemlich viel Logik und Infrastruktur, die Sie in eine plattformneutrale Art und Weise zu schreiben, nur um die UI und Glue-Code als plattformspezifische verlassen.

Es gab eine letzte Folge von Late Night Cocoa betitelte Portierungs Große Anwendungen auf der Mac-Plattform . Ihre Anwendung kann nicht als „groß“, aber das Podcast gibt ziemlich viel von großer Portierung Wissen von jemandem, der es ein paar Mal getan hat.

Well. Sobald Sie eine App für Cocoa geschrieben haben, ist es möglich, die Portierung auf Windows. Dies könnte mit Hilfe getan werden gnustep oder Cocotron .

Wenn Sie es anders zu tun, WEIN soll einfacher machen zu portieren.

Ich würde lieber die OSX Version schreibt zuerst. Dies liegt daran, dass Windows-Anwender keine klare Vorstellung haben, was sie eine Anwendung wollen aussehen. Nach meiner Erfahrung sind sie durchaus in der Lage, durch alle Arten von Benutzeroberflächen zu leiden. Konsistenz hat wenig Wert zu ihnen. Da es keine gemeinsame Vereinbarung ist, was für eine Windows-Anwendung aussehen soll, stoppt nichts Windows-Benutzer von tatsächlich mögen OSX-Design, und sie auch häufig tun. iTunes für Windows sieht aus wie eine sehr typische OSX App und Sie hören nur sehr wenige Beschwerden, dass es nicht genug von Windows-ish wäre.

in die andere Richtung gehen, dann ist dies nicht wahr. OSX-Nutzer haben eine klare Präferenz für Cocoa-Anwendungen und sehr wenig Toleranz für, als ein Beispiel, Dinge wie GIMP oder Inkscape, die als anderswo genauso gut unter OSX arbeiten, aber mit dem OSX geübten Auge deutlich hässlich aussehen.

Nun, es ist nicht ein einfacher Weg. Die beste Methode ist so etwas wie Model-View-Controller-Muster oder eine andere Architektur zu verwenden, die Geschäftslogik zu trennen und so weiter aus der Präsentation. Allerdings, wenn Sie Mono verwenden, wird es sehr wenig Code für Sie zu teilen, ich think.If Sie entwickeln WPF dann tun Sie sicher .NET und andere als Mono, Objective-C ist die Standard-Programmier-Tool unter Mac OS X.

ein gutes Design halten und Sie können die meisten Ihre Codes haben einfach eine Objective-C-Version von .NET-Code und umgekehrt anstatt zu versuchen, einen Migrationspfad zu finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top