Comment créer un seul cadre partagé entre iOS et OS X
Je cherche à créer un cadre pour la commune de classes d'entités d'une application qui fonctionne sur iOS et OS X. Actuellement, je suis juste y compris les fichiers dans chaque cible, mais qui nécessite de modifier le modèle de données de sorte qu'il demander à la classe de la cible actuelle (depuis en Swift, vous devez spécifier le module qui a la classe dans le fichier de modèle). Bien sûr, cela signifie que j'oublie parfois et les choses ne fonctionnent pas.
La solution évidente est de créer un cadre commun qui détient les classes d'entité, de sorte que le modèle de données de pointe toujours à la même place.
Le problème ne semble pas être un moyen de créer un cadre qui s'appuie sur les deux plates-formes.
Quelqu'un a trouvé un moyen de créer un cadre unique, ou à la bibliothèque, qui fonctionne sur les deux plates-formes?
- Il y avait une très bonne session de la WWDC exactement sur ce sujet cette année, le Partage de Code Entre iOS et OS X
- Cet article explique très bien ce qui doit être fait: appracatappra.com/2018/03/...
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez créer un seul cadre dynamique binaire, voici les étapes que vous pouvez suivre (comme indiqué dans http://colemancda.github.io/2015/02/11/universal-ios-osx-framework):
1. Les changements que le projet est valable architectures et plateformes prises en charge.
Cela devrait changer de votre cadre et de l'unité de test est valide architectures et plateformes prises en charge ainsi. Si non, puis modifier manuellement en possession du projet de construction de paramètres.
Base SDK: je recommande OS X, mais il faudra travailler avec iOS aussi. Notez qu'avec iOS comme la base SDK, "Mon Mac" cible est séparé en 3 cibles différentes.
Plates-Formes Supportées:
macosx iphoneos iphonesimulator
Valide Architectures:
arm64 armv7 armv7s i386 x86_64
2. Modifier les chemins de recherche de l'Unité de Test bundle
Runpath Chemins De Recherche:
$(inherited) @executable_path/Frameworks @loader_path/Frameworks @executable_path/../Frameworks @loader_path/../Frameworks
Cadre Des Chemins De Recherche:
$(SDKROOT) $(inherited)
Son une meilleure solution que d'avoir deux objectifs séparés.
Supported Platforms
etValid Architectures
options dans les paramètres de mon dans Xcode 7.3 🙁#import <UIKit/UIKit>
. J'ai pu envelopper al celles#if TARGET_OS_IPHONE..
, mais vu la taille de ma base de code, qui serait beaucoup plus d'ennuis que d'avoir deux cibles et split spécifique à la plateforme, les fichiers sources de la cible d'adhésion.Il s'avère que la réponse est super simple, mais pas très évident, au moins pas jusqu'à ce que après que j'ai posté cette question et a travaillé sur quelque chose d'autre.
Tout ce qui doit être fait est de faire un cadre cible pour chaque plate-forme, mais ensuite mis les noms de produits pour être le même. Comme c'est aussi le nom du module dans Swift, vous pouvez ensuite définir le champ de la classe dans la Base de Données de modèle à une valeur et qu'il fonctionne sur les deux plates-formes.
La configuration que j'utilise est d'inclure les fichiers de modèle dans les deux cadres, mais d'inclure le modèle lui-même directement dans chaque application cible.
Vous devez également être en mesure de définir à la fois les applications ont le même nom de produit et tout ce travail, mais je n'ai pas fait de test et les cadres de vous permettre d'avoir
MyApp
etMyAppMobile
si vous le souhaitez.