Créer un projet qui est linké contre Cocoa et UIKit
Bonjour,
Je souhaiterais créer un petit module qui puisse utiliser à la fois AppKit et UIKit.
Le but est de créer des méthodes qui gèrent les couleurs, et que ces méthodes soient utilisables à la fois pour une appli osx et ios.
En gros, ce module contiendrait ce bout de code :
#if TARGET_OS_IPHONE
#define OSColor UIColor
#define MakeColor(r, g, b) [UIColor colorWithRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
#elif
#define OSColor NSColor
#define MakeColor(r, g, b) [NSColor colorWithCalibratedRed:(r/255.0f) green:(g/255.0f) blue:(b/255.0f) alpha:1.0f]
#endif
et ensuite je définirais une catégorie au-dessus de NSColor ou de UIColor à l'aide de
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
@interface UIColor (Colours)
#elif TARGET_OS_MAC
#import <AppKit/AppKit.h>
@interface NSColor (Colours)
#endif
J'ai aussi remarqué que je pouvais utiliser ce mot-clé :
+ (instancetype)myBlueColor
Pour faire, je souhaiterais disposer dans le même projet de AppKit et de UIKit.
Est-ce possible ? Ou vais-je devoir "coder à l'aveugle", c'est-à -dire sans les auto-complétions ?
Je me suis inspiré de deux projets : CocoaLumberJack (qui définit OSColor) et Colours (qui utilise instancetype et définit une catégorie au-dessus de NSColor ou UIColor) : cf. https://github.com/bennyguitar/Colours
Merci !
PS : J'ai essayé différentes méthodes postées sur le web, mais si je commence par créer un projet pour Cocoa, alors je ne pourrai pas ajouter UIKit comme framework.
PPS : si vous avez d'autres idées pour faire ce que je souhaite, je suis preneur !!
Réponses
Ce n'est pas le projet qui est linké avec la framework, mais la cible (target).
Si la cible est une appli OS X, elle sera linkée avec AppKit.
Si la cible est une appli iOS, elle sera linkée avec UIKit.
P.S.: ça ne sert à rien de faire les #import <UIKit/UIKit.h> et <AppKit/AppKit.h>, ils sont déjà inclus dans le .pch.
@Céroce, merci. C'est Xcode qui je crois met automatiquement ces #imports.
Finalement, je m'en suis sorti en remplaçant par OSColor partout où j'avais NSColor.
Voilà le bon code :